Add extension mode context
This commit is contained in:
@@ -47,7 +47,7 @@ function getPiMascot(theme: Theme): string[] {
|
||||
export default function (pi: ExtensionAPI) {
|
||||
// Set custom header immediately on load (if UI is available)
|
||||
pi.on("session_start", async (_event, ctx) => {
|
||||
if (ctx.hasUI) {
|
||||
if (ctx.mode === "tui") {
|
||||
ctx.ui.setHeader((_tui, theme) => {
|
||||
return {
|
||||
render(_width: number): string[] {
|
||||
|
||||
@@ -23,7 +23,7 @@ export default function (pi: ExtensionAPI) {
|
||||
description: "Play DOOM as an overlay. Q to pause and exit.",
|
||||
|
||||
handler: async (args, ctx) => {
|
||||
if (!ctx.hasUI) {
|
||||
if (ctx.mode !== "tui") {
|
||||
ctx.ui.notify("DOOM requires interactive mode", "error");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -81,7 +81,7 @@ export default function (pi: ExtensionAPI) {
|
||||
pi.registerCommand("handoff", {
|
||||
description: "Transfer context to a new focused session",
|
||||
handler: async (args, ctx) => {
|
||||
if (!ctx.hasUI) {
|
||||
if (ctx.mode !== "tui") {
|
||||
ctx.ui.notify("handoff requires interactive mode", "error");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -146,7 +146,7 @@ export default function (pi: ExtensionAPI) {
|
||||
}
|
||||
|
||||
// No UI available (print mode, RPC, etc.)
|
||||
if (!ctx.hasUI) {
|
||||
if (ctx.mode !== "tui") {
|
||||
return {
|
||||
result: { output: "(interactive commands require TUI)", exitCode: 1, cancelled: false, truncated: false },
|
||||
};
|
||||
|
||||
@@ -31,7 +31,7 @@ export default function (pi: ExtensionAPI) {
|
||||
pi.registerCommand("qna", {
|
||||
description: "Extract questions from last assistant message into editor",
|
||||
handler: async (_args, ctx) => {
|
||||
if (!ctx.hasUI) {
|
||||
if (ctx.mode !== "tui") {
|
||||
ctx.ui.notify("qna requires interactive mode", "error");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ export default function question(pi: ExtensionAPI) {
|
||||
parameters: QuestionParams,
|
||||
|
||||
async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
|
||||
if (!ctx.hasUI) {
|
||||
if (ctx.mode !== "tui") {
|
||||
return {
|
||||
content: [{ type: "text", text: "Error: UI not available (running in non-interactive mode)" }],
|
||||
details: {
|
||||
|
||||
@@ -82,7 +82,7 @@ export default function questionnaire(pi: ExtensionAPI) {
|
||||
parameters: QuestionnaireParams,
|
||||
|
||||
async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
|
||||
if (!ctx.hasUI) {
|
||||
if (ctx.mode !== "tui") {
|
||||
return errorResult("Error: UI not available (running in non-interactive mode)");
|
||||
}
|
||||
if (params.questions.length === 0) {
|
||||
|
||||
@@ -311,7 +311,7 @@ export default function (pi: ExtensionAPI) {
|
||||
description: "Play Snake!",
|
||||
|
||||
handler: async (_args, ctx) => {
|
||||
if (!ctx.hasUI) {
|
||||
if (ctx.mode !== "tui") {
|
||||
ctx.ui.notify("Snake requires interactive mode", "error");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -529,7 +529,7 @@ export default function (pi: ExtensionAPI) {
|
||||
description: "Play Space Invaders!",
|
||||
|
||||
handler: async (_args, ctx) => {
|
||||
if (!ctx.hasUI) {
|
||||
if (ctx.mode !== "tui") {
|
||||
ctx.ui.notify("Space Invaders requires interactive mode", "error");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@ const buildSummaryPrompt = (conversationText: string): string =>
|
||||
].join("\n");
|
||||
|
||||
const showSummaryUi = async (summary: string, ctx: ExtensionCommandContext) => {
|
||||
if (!ctx.hasUI) {
|
||||
if (ctx.mode !== "tui") {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -779,7 +779,7 @@ Decide the target cell first, then dump every action for the turn in one go.
|
||||
description: "Play tic-tac-toe against the agent",
|
||||
|
||||
handler: async (_args, ctx) => {
|
||||
if (!ctx.hasUI) {
|
||||
if (ctx.mode !== "tui") {
|
||||
ctx.ui.notify("Tic-tac-toe requires interactive mode", "error");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -284,7 +284,7 @@ export default function (pi: ExtensionAPI) {
|
||||
pi.registerCommand("todos", {
|
||||
description: "Show all todos on the current branch",
|
||||
handler: async (_args, ctx) => {
|
||||
if (!ctx.hasUI) {
|
||||
if (ctx.mode !== "tui") {
|
||||
ctx.ui.notify("/todos requires interactive mode", "error");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -67,6 +67,11 @@ export default function toolsExtension(pi: ExtensionAPI) {
|
||||
pi.registerCommand("tools", {
|
||||
description: "Enable/disable tools",
|
||||
handler: async (_args, ctx) => {
|
||||
if (ctx.mode !== "tui") {
|
||||
ctx.ui.notify("/tools requires TUI mode", "error");
|
||||
return;
|
||||
}
|
||||
|
||||
// Refresh tool list
|
||||
allTools = pi.getAllTools();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user