@robota-sdk/agent-transport 3.0.0-beta.72 → 3.0.0-beta.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/node/headless/index.cjs +1 -1
- package/dist/node/headless/index.d.ts +1 -1
- package/dist/node/headless/index.js +1 -1
- package/dist/node/{headless-DCtHvyVf.cjs → headless-BeHAOlIM.cjs} +4 -3
- package/dist/node/{headless-C6tj35h3.js → headless-D02zUEGh.js} +4 -3
- package/dist/node/headless-D02zUEGh.js.map +1 -0
- package/dist/node/http/index.cjs +1 -1
- package/dist/node/http/index.d.ts +1 -1
- package/dist/node/http/index.js +1 -1
- package/dist/node/{http-Br10Ps8m.js → http-2Jiuflc1.js} +1 -1
- package/dist/node/http-2Jiuflc1.js.map +1 -0
- package/dist/node/http-CBAvefLw.cjs +1 -0
- package/dist/node/{index-BVNhOeeU.d.ts → index-BQLN_Lc9.d.ts} +5 -3
- package/dist/node/index-BQLN_Lc9.d.ts.map +1 -0
- package/dist/node/{index-C9LWCL4l.d.ts → index-BnAGE-u9.d.ts} +2 -3
- package/dist/node/index-BnAGE-u9.d.ts.map +1 -0
- package/dist/node/{index-COWvtBa2.d.ts → index-BrQ4gGw0.d.ts} +3 -3
- package/dist/node/index-BrQ4gGw0.d.ts.map +1 -0
- package/dist/node/{index-X2Zg8FEY.d.ts → index-CoeBF21y.d.ts} +3 -3
- package/dist/node/index-CoeBF21y.d.ts.map +1 -0
- package/dist/node/{index-27HV5PJB.d.ts → index-DE3-dHqw.d.ts} +8 -3
- package/dist/node/index-DE3-dHqw.d.ts.map +1 -0
- package/dist/node/{index-BRgV_MPB.d.ts → index-DHt-2VQ-.d.ts} +2 -3
- package/dist/node/index-DHt-2VQ-.d.ts.map +1 -0
- package/dist/node/{index-nBlMTFkZ.d.ts → index-DMwKN5Le.d.ts} +2 -3
- package/dist/node/index-DMwKN5Le.d.ts.map +1 -0
- package/dist/node/{index-TMAlNHuM.d.ts → index-IvYaYY6v.d.ts} +5 -3
- package/dist/node/index-IvYaYY6v.d.ts.map +1 -0
- package/dist/node/{index-BRchlFBE.d.ts → index-WKTgvhlg.d.ts} +8 -3
- package/dist/node/index-WKTgvhlg.d.ts.map +1 -0
- package/dist/node/{index-C5KNEBO9.d.ts → index-c0M42fsA.d.ts} +2 -3
- package/dist/node/index-c0M42fsA.d.ts.map +1 -0
- package/dist/node/index.cjs +1 -1
- package/dist/node/index.d.ts +6 -7
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +1 -1
- package/dist/node/index.js.map +1 -1
- package/dist/node/mcp/index.cjs +1 -1
- package/dist/node/mcp/index.d.ts +1 -1
- package/dist/node/mcp/index.js +1 -1
- package/dist/node/mcp-BOglBJNy.cjs +1 -0
- package/dist/node/{mcp-BAujHOMr.js → mcp-D3BBVK7C.js} +1 -1
- package/dist/node/mcp-D3BBVK7C.js.map +1 -0
- package/dist/node/{chunk-Bmb41Sf3.cjs → rolldown-runtime-CMqjfN_6.cjs} +1 -1
- package/dist/node/testing/index.cjs +1 -0
- package/dist/node/testing/index.d.ts +21 -0
- package/dist/node/testing/index.d.ts.map +1 -0
- package/dist/node/testing/index.js +2 -0
- package/dist/node/testing/index.js.map +1 -0
- package/dist/node/tui/index.cjs +1 -1
- package/dist/node/tui/index.d.ts +1 -1
- package/dist/node/tui/index.js +1 -1
- package/dist/node/{tui-4hA-SMtS.js → tui-Btb1q88j.js} +5 -5
- package/dist/node/tui-Btb1q88j.js.map +1 -0
- package/dist/node/tui-SbUT7Zlt.cjs +24 -0
- package/dist/node/ws/index.cjs +1 -1
- package/dist/node/ws/index.d.ts +1 -1
- package/dist/node/ws/index.js +1 -1
- package/dist/node/{ws-BWel8nzl.js → ws-Dc2RUwVs.js} +1 -1
- package/dist/node/ws-Dc2RUwVs.js.map +1 -0
- package/dist/node/ws-QNMQn5kg.cjs +1 -0
- package/package.json +35 -22
- package/src/headless/HeadlessInteractionChannel.ts +9 -1
- package/src/headless/__tests__/headless-channel-options.test.ts +106 -0
- package/src/headless/__tests__/headless-provider-failure.integration.test.ts +143 -0
- package/src/headless/__tests__/headless-runner-initialization.test.ts +1 -1
- package/src/headless/__tests__/headless-runner.test.ts +24 -3
- package/src/headless/__tests__/headless-transport.test.ts +1 -2
- package/src/headless/headless-runner.ts +3 -2
- package/src/headless/headless-stream-json.ts +5 -5
- package/src/headless/headless-transport.ts +1 -2
- package/src/http/__tests__/http-transport.test.ts +1 -1
- package/src/http/__tests__/routes.test.ts +1 -1
- package/src/http/http-transport.ts +1 -2
- package/src/http/routes.ts +1 -1
- package/src/mcp/__tests__/mcp-server.test.ts +1 -1
- package/src/mcp/__tests__/mcp-transport.test.ts +1 -1
- package/src/mcp/mcp-server.ts +1 -1
- package/src/mcp/mcp-transport.ts +1 -2
- package/src/testing/__tests__/scripted-provider.test.ts +73 -0
- package/src/testing/index.ts +7 -0
- package/src/testing/scripted-provider.ts +73 -0
- package/src/transport-registry.ts +1 -1
- package/src/tui/App.tsx +38 -29
- package/src/tui/BackgroundTaskPanel.tsx +1 -1
- package/src/tui/CjkTextInput.tsx +4 -8
- package/src/tui/ExecutionWorkspaceDetailPane.tsx +1 -1
- package/src/tui/ExecutionWorkspaceSwitcher.tsx +1 -1
- package/src/tui/InputArea.tsx +15 -7
- package/src/tui/InteractivePrompt.tsx +2 -2
- package/src/tui/PluginTUI.tsx +1 -1
- package/src/tui/SessionPicker.tsx +1 -1
- package/src/tui/SessionStatusBar.tsx +1 -1
- package/src/tui/SlashAutocomplete.tsx +1 -1
- package/src/tui/StatusBar.tsx +1 -7
- package/src/tui/StreamingIndicator.tsx +1 -1
- package/src/tui/TransportTUI.tsx +1 -1
- package/src/tui/TuiInteractionChannel.ts +60 -38
- package/src/tui/UsageSummaryEntry.tsx +1 -1
- package/src/tui/__tests__/PluginTUI.test.tsx +1 -1
- package/src/tui/__tests__/SlashAutocomplete.test.tsx +1 -1
- package/src/tui/__tests__/TuiInteractionChannel.display-contract.test.ts +1 -1
- package/src/tui/__tests__/TuiInteractionChannel.lifecycle.test.ts +5 -2
- package/src/tui/__tests__/TuiInteractionChannel.requestAction.test.ts +1 -1
- package/src/tui/__tests__/background-task-panel.test.tsx +1 -1
- package/src/tui/__tests__/background-task-row-format.test.ts +1 -1
- package/src/tui/__tests__/channel-factory-integration.test.ts +138 -0
- package/src/tui/__tests__/execution-workspace-switcher.test.tsx +1 -1
- package/src/tui/__tests__/execution-workspace-view-model.test.ts +1 -1
- package/src/tui/__tests__/fixtures/provider-setup-prompt-driver.tsx +1 -1
- package/src/tui/__tests__/input-area-flow.test.ts +1 -1
- package/src/tui/__tests__/pty/pty-driver.ts +135 -0
- package/src/tui/__tests__/pty/tui-pty.ptytest.ts +61 -0
- package/src/tui/__tests__/render-channel-options.test.ts +32 -0
- package/src/tui/__tests__/session-init-poller.test.ts +102 -0
- package/src/tui/__tests__/session-switch-channel.test.tsx +307 -0
- package/src/tui/__tests__/slash-routing-effects.test.ts +4 -1
- package/src/tui/__tests__/status-activity.test.ts +3 -3
- package/src/tui/__tests__/status-bar.test.tsx +7 -6
- package/src/tui/__tests__/tui-channel-init-failure.test.ts +57 -0
- package/src/tui/__tests__/tui-state-manager.test.ts +1 -1
- package/src/tui/background-task-row-format.ts +1 -1
- package/src/tui/execution-workspace-view-model.ts +1 -1
- package/src/tui/flows/input-area-flow.ts +1 -1
- package/src/tui/flows/permission-prompt-flow.ts +1 -1
- package/src/tui/flows/session-init-poller.ts +77 -0
- package/src/tui/hooks/command-effect-handler.ts +4 -1
- package/src/tui/hooks/command-effect-queue.ts +1 -1
- package/src/tui/hooks/side-effects-types.ts +2 -2
- package/src/tui/hooks/useAutocomplete.ts +3 -2
- package/src/tui/hooks/usePluginCallbacks.ts +1 -1
- package/src/tui/hooks/usePluginScreenData.ts +1 -1
- package/src/tui/hooks/useSideEffects.ts +1 -1
- package/src/tui/hooks/useSlashRouting.ts +3 -3
- package/src/tui/hooks/useStatusLineSettings.ts +1 -1
- package/src/tui/hooks/useTuiChannel.ts +3 -3
- package/src/tui/plugin-tui-handlers.ts +1 -1
- package/src/tui/render.tsx +38 -25
- package/src/tui/status-activity.ts +2 -2
- package/src/tui/tui-cli-adapter.ts +3 -3
- package/src/tui/tui-state-manager.ts +2 -2
- package/src/tui/tui-transport.ts +4 -2
- package/src/ws/__tests__/ws-handler.test.ts +6 -4
- package/src/ws/__tests__/ws-transport.test.ts +1 -1
- package/src/ws/ws-background-messages.ts +1 -1
- package/src/ws/ws-handler.ts +4 -4
- package/src/ws/ws-protocol.ts +6 -4
- package/src/ws/ws-transport-configurable.ts +4 -2
- package/src/ws/ws-transport.ts +1 -2
- package/dist/node/headless-C6tj35h3.js.map +0 -1
- package/dist/node/http-Br10Ps8m.js.map +0 -1
- package/dist/node/http-Da6Kw4oy.cjs +0 -1
- package/dist/node/index-27HV5PJB.d.ts.map +0 -1
- package/dist/node/index-BRchlFBE.d.ts.map +0 -1
- package/dist/node/index-BRgV_MPB.d.ts.map +0 -1
- package/dist/node/index-BVNhOeeU.d.ts.map +0 -1
- package/dist/node/index-C5KNEBO9.d.ts.map +0 -1
- package/dist/node/index-C9LWCL4l.d.ts.map +0 -1
- package/dist/node/index-COWvtBa2.d.ts.map +0 -1
- package/dist/node/index-TMAlNHuM.d.ts.map +0 -1
- package/dist/node/index-X2Zg8FEY.d.ts.map +0 -1
- package/dist/node/index-nBlMTFkZ.d.ts.map +0 -1
- package/dist/node/mcp-BAujHOMr.js.map +0 -1
- package/dist/node/mcp-Bl8jUfev.cjs +0 -1
- package/dist/node/tui-4hA-SMtS.js.map +0 -1
- package/dist/node/tui-CcLmEJ1r.cjs +0 -24
- package/dist/node/ws-BWel8nzl.js.map +0 -1
- package/dist/node/ws-tCjj2gPu.cjs +0 -1
- package/src/tui/InkTerminal.ts +0 -42
- package/src/tui/hooks/use-interactive-session-init.ts +0 -91
- package/src/tui/hooks/usePermissionQueue.ts +0 -52
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-D3BBVK7C.js","names":[],"sources":["../../src/mcp/mcp-server.ts","../../src/mcp/mcp-transport.ts"],"sourcesContent":["/**\n * MCP transport adapter — exposes IInteractiveSession as an MCP server.\n *\n * Uses the low-level MCP Server class to avoid TypeScript depth issues\n * with McpServer.registerTool() generics. Registers tools/list and\n * tools/call handlers directly.\n */\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js';\n\nimport type { IExecutionResult, IInteractiveSession } from '@robota-sdk/agent-interface-transport';\n\nexport interface IAgentMcpOptions {\n /** Name for the MCP server. */\n name: string;\n /** Version string. */\n version: string;\n /** IInteractiveSession to expose. */\n session: IInteractiveSession;\n /** If true, register each system command as a separate MCP tool. Default: true. */\n exposeCommands?: boolean;\n}\n\n/**\n * Create an MCP server that exposes IInteractiveSession over Model Context Protocol.\n *\n * Usage:\n * ```typescript\n * const server = createAgentMcpServer({\n * name: 'robota-agent',\n * version: '1.0.0',\n * session: interactiveSession,\n * });\n *\n * import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\n * await server.connect(new StdioServerTransport());\n * ```\n */\nexport function createAgentMcpServer(options: IAgentMcpOptions): Server {\n const { name, version, session, exposeCommands = true } = options;\n\n const server = new Server({ name, version }, { capabilities: { tools: {} } });\n\n // Build tool definitions\n const tools: Array<{\n name: string;\n description: string;\n inputSchema: Record<string, unknown>;\n }> = [\n {\n name: 'submit',\n description: 'Submit a prompt to the AI agent and wait for the response',\n inputSchema: {\n type: 'object',\n properties: {\n prompt: { type: 'string', description: 'The prompt to send to the agent' },\n },\n required: ['prompt'],\n },\n },\n ];\n\n if (exposeCommands) {\n for (const cmd of session.listCommands()) {\n tools.push({\n name: `command_${cmd.name}`,\n description: cmd.description,\n inputSchema: {\n type: 'object',\n properties: {\n args: { type: 'string', description: 'Command arguments' },\n },\n },\n });\n }\n }\n\n // tools/list handler\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools,\n }));\n\n // tools/call handler\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name: toolName, arguments: toolArgs } = request.params;\n\n if (toolName === 'submit') {\n const prompt = (toolArgs as Record<string, string>)?.prompt;\n if (!prompt) {\n return {\n content: [{ type: 'text', text: 'Error: prompt is required' }],\n isError: true,\n };\n }\n const result = await waitForCompletion(session, prompt);\n return {\n content: [{ type: 'text', text: result.response }],\n };\n }\n\n // System commands: command_<name>\n if (toolName.startsWith('command_')) {\n const cmdName = toolName.slice('command_'.length);\n const args = (toolArgs as Record<string, string>)?.args ?? '';\n const result = await session.executeCommand(cmdName, args);\n return {\n content: [\n {\n type: 'text',\n text: result?.message ?? `Unknown command: ${cmdName}`,\n },\n ],\n isError: !result,\n };\n }\n\n return {\n content: [{ type: 'text', text: `Unknown tool: ${toolName}` }],\n isError: true,\n };\n });\n\n return server;\n}\n\n/**\n * Submit a prompt and wait for the complete/interrupted/error event.\n */\nfunction waitForCompletion(\n session: IInteractiveSession,\n prompt: string,\n): Promise<IExecutionResult> {\n return new Promise((resolve, reject) => {\n const onComplete = (result: IExecutionResult): void => {\n cleanup();\n resolve(result);\n };\n const onInterrupted = (result: IExecutionResult): void => {\n cleanup();\n resolve(result);\n };\n const onError = (error: Error): void => {\n cleanup();\n reject(error);\n };\n\n const cleanup = (): void => {\n session.off('complete', onComplete);\n session.off('interrupted', onInterrupted);\n session.off('error', onError);\n };\n\n session.on('complete', onComplete);\n session.on('interrupted', onInterrupted);\n session.on('error', onError);\n\n session.submit(prompt).catch((err) => {\n cleanup();\n reject(err instanceof Error ? err : new Error(String(err)));\n });\n });\n}\n","/**\n * ITransportAdapter implementation for MCP transport.\n *\n * Wraps createAgentMcpServer into the unified ITransportAdapter interface\n * while exposing the underlying MCP Server via getServer().\n */\n\nimport { createAgentMcpServer } from './mcp-server.js';\n\nimport type { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport type { IInteractiveSession, ITransportAdapter } from '@robota-sdk/agent-interface-transport';\n\nexport interface IMcpTransportOptions {\n /** Name for the MCP server. */\n name: string;\n /** Version string. */\n version: string;\n /** If true, register each system command as a separate MCP tool. Default: true. */\n exposeCommands?: boolean;\n}\n\nexport function createMcpTransport(\n options: IMcpTransportOptions,\n): ITransportAdapter<IInteractiveSession> & { getServer(): Server } {\n let session: IInteractiveSession | null = null;\n let server: Server | null = null;\n\n return {\n name: 'mcp',\n attach(s: IInteractiveSession) {\n session = s;\n },\n async start() {\n if (!session) throw new Error('No session attached. Call attach() first.');\n server = createAgentMcpServer({ ...options, session });\n },\n async stop() {\n if (server) {\n await server.close();\n server = null;\n }\n },\n getServer() {\n if (!server) throw new Error('Transport not started. Call start() first.');\n return server;\n },\n };\n}\n"],"mappings":"0KAuCA,SAAgB,EAAqB,EAAmC,CACtE,GAAM,CAAE,OAAM,UAAS,UAAS,iBAAiB,IAAS,EAEpD,EAAS,IAAI,EAAO,CAAE,OAAM,SAAQ,EAAG,CAAE,aAAc,CAAE,MAAO,CAAC,CAAE,CAAE,CAAC,EAGtE,EAID,CACH,CACE,KAAM,SACN,YAAa,4DACb,YAAa,CACX,KAAM,SACN,WAAY,CACV,OAAQ,CAAE,KAAM,SAAU,YAAa,iCAAkC,CAC3E,EACA,SAAU,CAAC,QAAQ,CACrB,CACF,CACF,EAEA,GAAI,EACF,IAAK,IAAM,KAAO,EAAQ,aAAa,EACrC,EAAM,KAAK,CACT,KAAM,WAAW,EAAI,OACrB,YAAa,EAAI,YACjB,YAAa,CACX,KAAM,SACN,WAAY,CACV,KAAM,CAAE,KAAM,SAAU,YAAa,mBAAoB,CAC3D,CACF,CACF,CAAC,EAiDL,OA5CA,EAAO,kBAAkB,EAAwB,UAAa,CAC5D,OACF,EAAE,EAGF,EAAO,kBAAkB,EAAuB,KAAO,IAAY,CACjE,GAAM,CAAE,KAAM,EAAU,UAAW,GAAa,EAAQ,OAExD,GAAI,IAAa,SAAU,CACzB,IAAM,EAAU,GAAqC,OAQrD,OAPK,EAOE,CACL,QAAS,CAAC,CAAE,KAAM,OAAQ,MAAM,MAFb,EAAkB,EAAS,CAAM,EAAA,CAEb,QAAS,CAAC,CACnD,EARS,CACL,QAAS,CAAC,CAAE,KAAM,OAAQ,KAAM,2BAA4B,CAAC,EAC7D,QAAS,EACX,CAMJ,CAGA,GAAI,EAAS,WAAW,UAAU,EAAG,CACnC,IAAM,EAAU,EAAS,MAAM,CAAiB,EAC1C,EAAQ,GAAqC,MAAQ,GACrD,EAAS,MAAM,EAAQ,eAAe,EAAS,CAAI,EACzD,MAAO,CACL,QAAS,CACP,CACE,KAAM,OACN,KAAM,GAAQ,SAAW,oBAAoB,GAC/C,CACF,EACA,QAAS,CAAC,CACZ,CACF,CAEA,MAAO,CACL,QAAS,CAAC,CAAE,KAAM,OAAQ,KAAM,iBAAiB,GAAW,CAAC,EAC7D,QAAS,EACX,CACF,CAAC,EAEM,CACT,CAKA,SAAS,EACP,EACA,EAC2B,CAC3B,OAAO,IAAI,SAAS,EAAS,IAAW,CACtC,IAAM,EAAc,GAAmC,CACrD,EAAQ,EACR,EAAQ,CAAM,CAChB,EACM,EAAiB,GAAmC,CACxD,EAAQ,EACR,EAAQ,CAAM,CAChB,EACM,EAAW,GAAuB,CACtC,EAAQ,EACR,EAAO,CAAK,CACd,EAEM,MAAsB,CAC1B,EAAQ,IAAI,WAAY,CAAU,EAClC,EAAQ,IAAI,cAAe,CAAa,EACxC,EAAQ,IAAI,QAAS,CAAO,CAC9B,EAEA,EAAQ,GAAG,WAAY,CAAU,EACjC,EAAQ,GAAG,cAAe,CAAa,EACvC,EAAQ,GAAG,QAAS,CAAO,EAE3B,EAAQ,OAAO,CAAM,CAAC,CAAC,MAAO,GAAQ,CACpC,EAAQ,EACR,EAAO,aAAe,MAAQ,EAAU,MAAM,OAAO,CAAG,CAAC,CAAC,CAC5D,CAAC,CACH,CAAC,CACH,CC7IA,SAAgB,EACd,EACkE,CAClE,IAAI,EAAsC,KACtC,EAAwB,KAE5B,MAAO,CACL,KAAM,MACN,OAAO,EAAwB,CAC7B,EAAU,CACZ,EACA,MAAM,OAAQ,CACZ,GAAI,CAAC,EAAS,MAAU,MAAM,2CAA2C,EACzE,EAAS,EAAqB,CAAE,GAAG,EAAS,SAAQ,CAAC,CACvD,EACA,MAAM,MAAO,CACX,AAEE,KADA,MAAM,EAAO,MAAM,EACV,KAEb,EACA,WAAY,CACV,GAAI,CAAC,EAAQ,MAAU,MAAM,4CAA4C,EACzE,OAAO,CACT,CACF,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));Object.defineProperty(exports
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return s}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function e(e){let t=[],n=0;return{provider:{name:`scripted-test-provider`,version:`test`,async chat(r){t.push([...r]);let i=e[n];if(i===void 0)throw Error(`Scripted provider: script exhausted at call ${n+1} (script declares ${e.length} turn(s)) — extend the script instead of relying on improvised responses`);return n+=1,`text`in i?{id:`scripted-${n}`,role:`assistant`,content:i.text,state:`complete`,timestamp:new Date}:{id:`scripted-${n}`,role:`assistant`,content:null,state:`complete`,timestamp:new Date,toolCalls:i.toolCalls.map((e,t)=>({id:`scripted-call-${n}-${t}`,type:`function`,function:{name:e.name,arguments:JSON.stringify(e.args)}}))}},async generateResponse(){return{content:`scripted provider does not implement raw responses`}},supportsTools(){return!0},validateConfig(){return!0}},requests:t}}exports.createScriptedProvider=e;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { IAIProvider, TUniversalMessage } from "@robota-sdk/agent-core";
|
|
2
|
+
|
|
3
|
+
//#region src/testing/scripted-provider.d.ts
|
|
4
|
+
/** One scripted assistant turn: plain text or tool invocations. */
|
|
5
|
+
type TScriptedTurn = {
|
|
6
|
+
text: string;
|
|
7
|
+
} | {
|
|
8
|
+
toolCalls: ReadonlyArray<{
|
|
9
|
+
name: string;
|
|
10
|
+
args: Record<string, unknown>;
|
|
11
|
+
}>;
|
|
12
|
+
};
|
|
13
|
+
interface IScriptedProvider {
|
|
14
|
+
provider: IAIProvider;
|
|
15
|
+
/** Message arrays of every chat() call, in order, for request assertions. */
|
|
16
|
+
requests: TUniversalMessage[][];
|
|
17
|
+
}
|
|
18
|
+
declare function createScriptedProvider(turns: readonly TScriptedTurn[]): IScriptedProvider;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { type IScriptedProvider, type TScriptedTurn, createScriptedProvider };
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/testing/scripted-provider.ts"],"mappings":";;;;KAYY,aAAA;EACN,IAAA;AAAA;EACA,SAAA,EAAW,aAAa;IAAG,IAAA;IAAc,IAAA,EAAM,MAAA;EAAA;AAAA;AAAA,UAEpC,iBAAA;EACf,QAAA,EAAU,WAAA;EAAA;EAEV,QAAA,EAAU,iBAAiB;AAAA;AAAA,iBAGb,sBAAA,CAAuB,KAAA,WAAgB,aAAA,KAAkB,iBAAiB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e){let t=[],n=0;return{provider:{name:`scripted-test-provider`,version:`test`,async chat(r){t.push([...r]);let i=e[n];if(i===void 0)throw Error(`Scripted provider: script exhausted at call ${n+1} (script declares ${e.length} turn(s)) — extend the script instead of relying on improvised responses`);return n+=1,`text`in i?{id:`scripted-${n}`,role:`assistant`,content:i.text,state:`complete`,timestamp:new Date}:{id:`scripted-${n}`,role:`assistant`,content:null,state:`complete`,timestamp:new Date,toolCalls:i.toolCalls.map((e,t)=>({id:`scripted-call-${n}-${t}`,type:`function`,function:{name:e.name,arguments:JSON.stringify(e.args)}}))}},async generateResponse(){return{content:`scripted provider does not implement raw responses`}},supportsTools(){return!0},validateConfig(){return!0}},requests:t}}export{e as createScriptedProvider};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/testing/scripted-provider.ts"],"sourcesContent":["/**\n * Deterministic scripted provider for E2E tests (CLI-074).\n *\n * Replays a declared sequence of assistant turns through the REAL agent loop —\n * tool execution, permission gate, session persistence, and output transports all\n * run unmocked. Test-only: exported via the `@robota-sdk/agent-transport/testing`\n * subpath and never imported by runtime code.\n */\n\nimport type { IAIProvider, IRawProviderResponse, TUniversalMessage } from '@robota-sdk/agent-core';\n\n/** One scripted assistant turn: plain text or tool invocations. */\nexport type TScriptedTurn =\n | { text: string }\n | { toolCalls: ReadonlyArray<{ name: string; args: Record<string, unknown> }> };\n\nexport interface IScriptedProvider {\n provider: IAIProvider;\n /** Message arrays of every chat() call, in order, for request assertions. */\n requests: TUniversalMessage[][];\n}\n\nexport function createScriptedProvider(turns: readonly TScriptedTurn[]): IScriptedProvider {\n const requests: TUniversalMessage[][] = [];\n let cursor = 0;\n\n const provider: IAIProvider = {\n name: 'scripted-test-provider',\n version: 'test',\n async chat(messages: TUniversalMessage[]): Promise<TUniversalMessage> {\n requests.push([...messages]);\n const turn = turns[cursor];\n if (turn === undefined) {\n throw new Error(\n `Scripted provider: script exhausted at call ${cursor + 1} (script declares ${turns.length} turn(s)) — extend the script instead of relying on improvised responses`,\n );\n }\n cursor += 1;\n if ('text' in turn) {\n return {\n id: `scripted-${cursor}`,\n role: 'assistant',\n content: turn.text,\n state: 'complete',\n timestamp: new Date(),\n };\n }\n return {\n id: `scripted-${cursor}`,\n role: 'assistant',\n content: null,\n state: 'complete',\n timestamp: new Date(),\n toolCalls: turn.toolCalls.map((call, index) => ({\n id: `scripted-call-${cursor}-${index}`,\n type: 'function' as const,\n function: { name: call.name, arguments: JSON.stringify(call.args) },\n })),\n };\n },\n async generateResponse(): Promise<IRawProviderResponse> {\n return { content: 'scripted provider does not implement raw responses' };\n },\n supportsTools(): boolean {\n return true;\n },\n validateConfig(): boolean {\n return true;\n },\n };\n\n return { provider, requests };\n}\n"],"mappings":"AAsBA,SAAgB,EAAuB,EAAoD,CACzF,IAAM,EAAkC,CAAC,EACrC,EAAS,EA+Cb,MAAO,CAAE,SAAA,CA5CP,KAAM,yBACN,QAAS,OACT,MAAM,KAAK,EAA2D,CACpE,EAAS,KAAK,CAAC,GAAG,CAAQ,CAAC,EAC3B,IAAM,EAAO,EAAM,GACnB,GAAI,IAAS,IAAA,GACX,MAAU,MACR,+CAA+C,EAAS,EAAE,oBAAoB,EAAM,OAAO,yEAC7F,EAYF,MAVA,IAAU,EACN,SAAU,EACL,CACL,GAAI,YAAY,IAChB,KAAM,YACN,QAAS,EAAK,KACd,MAAO,WACP,UAAW,IAAI,IACjB,EAEK,CACL,GAAI,YAAY,IAChB,KAAM,YACN,QAAS,KACT,MAAO,WACP,UAAW,IAAI,KACf,UAAW,EAAK,UAAU,KAAK,EAAM,KAAW,CAC9C,GAAI,iBAAiB,EAAO,GAAG,IAC/B,KAAM,WACN,SAAU,CAAE,KAAM,EAAK,KAAM,UAAW,KAAK,UAAU,EAAK,IAAI,CAAE,CACpE,EAAE,CACJ,CACF,EACA,MAAM,kBAAkD,CACtD,MAAO,CAAE,QAAS,oDAAqD,CACzE,EACA,eAAyB,CACvB,MAAO,EACT,EACA,gBAA0B,CACxB,MAAO,EACT,CAGc,EAAG,UAAS,CAC9B"}
|
package/dist/node/tui/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../tui-SbUT7Zlt.cjs");exports.TuiTransport=e.n,exports.createDefaultTuiCliAdapter=e.t,exports.renderApp=e.r;
|
package/dist/node/tui/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as TAnyTuiCommandInteraction, c as createDefaultTuiCliAdapter, d as renderApp, f as ITuiCliAdapter, i as ITuiPickerItem, l as TuiTransport, n as ITuiConfirmInteraction, o as TOnMissingArgsAction, r as ITuiPickerInteraction, s as IDefaultTuiCliAdapterOptions, t as ITuiCommandInteraction, u as IRenderOptions } from "../index-
|
|
1
|
+
import { a as TAnyTuiCommandInteraction, c as createDefaultTuiCliAdapter, d as renderApp, f as ITuiCliAdapter, i as ITuiPickerItem, l as TuiTransport, n as ITuiConfirmInteraction, o as TOnMissingArgsAction, r as ITuiPickerInteraction, s as IDefaultTuiCliAdapterOptions, t as ITuiCommandInteraction, u as IRenderOptions } from "../index-IvYaYY6v.js";
|
|
2
2
|
export { type IDefaultTuiCliAdapterOptions, type IRenderOptions, type ITuiCliAdapter, type ITuiCommandInteraction, type ITuiConfirmInteraction, type ITuiPickerInteraction, type ITuiPickerItem, type TAnyTuiCommandInteraction, type TOnMissingArgsAction, TuiTransport, createDefaultTuiCliAdapter, renderApp };
|
package/dist/node/tui/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e,r as t,t as n}from"../tui-
|
|
1
|
+
import{n as e,r as t,t as n}from"../tui-Btb1q88j.js";export{e as TuiTransport,n as createDefaultTuiCliAdapter,t as renderApp};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import{CommandRegistry as e,DEFAULT_STATUS_LINE_COMMAND_SETTINGS as t,InteractiveSession as n,applyActiveModelChange as r,applyStatusLineSettings as i,deleteSettings as a,getUserSettingsPath as o,isSlashCommand as s,isStatusLineCommandSettingsPatch as c,listResumableSessionSummaries as l,readSettings as u,resolveGitBranch as d,tokeniseSlashCommand as f,writeSettings as p}from"@robota-sdk/agent-framework";import{Box as m,Static as h,Text as g,render as _,useApp as v,useInput as y,usePaste as b,useStdout as x,useWindowSize as S}from"ink";import C,{createContext as w,useCallback as T,useContext as E,useEffect as D,useMemo as O,useRef as k,useState as A}from"react";import{createSystemMessage as j,createUserMessage as M,findProviderDefinition as N,formatTokenCount as P,isAssistantMessage as F,isToolMessage as I,messageToHistoryEntry as L}from"@robota-sdk/agent-core";import{Fragment as R,jsx as z,jsxs as B}from"react/jsx-runtime";import V from"chalk";import H from"string-width";import{marked as U}from"marked";import W from"marked-terminal";const ee=[`active`,`queued`,`running`,`waiting_permission`,`sleeping`],G=/\s+/g;function te(e){return(e?.entries??[]).filter(e=>e.kind===`background_task`&&e.visibility===`default`)}function ne(e){return te(e).filter(e=>ee.includes(e.status)).length}function K(e,t={}){let n=e.id===t.selectedEntryId,r={id:e.id,radio:n?`●`:`○`,title:ie(e),subtitle:ae(e),statusLabel:oe(e.status),preview:ce(e.preview??e.currentAction),color:se(e),isSelected:n};return{...r,accessibleText:le(r)}}function re(e){let t=e.text.trim().replace(G,` `);return t?t.length>160?`${t.slice(0,160)}...`:t:e.kind}function ie(e){return e.kind===`main_thread`?e.title:e.kind===`background_group`?`${e.title} group`:e.taskKind===`agent`?`${e.title} agent`:e.taskKind===`process`?e.title||`Process`:e.taskKind===`scheduled`?e.title||`Scheduled`:e.title}function ae(e){return e.kind===`main_thread`?e.subtitle:[e.taskKind,e.subtitle,e.attention===`none`?void 0:e.attention].filter(e=>typeof e==`string`&&e.length>0).join(` · `)||void 0}function oe(e){return e.replace(/_/g,` `)}function se(e){return e.attention===`failed`||e.status===`failed`?`red`:e.attention===`permission`||e.status===`waiting_permission`?`yellow`:e.status===`completed`?`green`:e.status===`cancelled`?`yellow`:ee.includes(e.status)?`cyan`:`white`}function ce(e){return e?.trim().replace(G,` `)||void 0}function le(e){return[e.radio,e.title,e.statusLabel,e.subtitle,e.preview].filter(e=>typeof e==`string`&&e.length>0).join(` · `)}function ue(e,t={}){let n=K(e),r=de(e)?`□`:`■`,i=[n.statusLabel,n.subtitle].filter(e=>typeof e==`string`&&e.length>0);return{connector:t.isLast===!1?`├`:`└`,marker:r,color:n.color,label:n.title,segments:i,preview:n.preview,accessibleText:[`${t.isLast===!1?`├`:`└`} ${r} ${n.title}`,...i,n.preview].filter(e=>typeof e==`string`&&e.length>0).join(` · `)}}function de(e){return e.status===`active`||e.status===`queued`||e.status===`running`||e.status===`waiting_permission`||e.status===`sleeping`}function fe({entries:e}){return e.length===0?null:B(m,{flexDirection:`column`,marginBottom:1,children:[z(g,{color:`cyan`,bold:!0,children:`Background work`}),e.map((t,n)=>{let r=ue(t,{isLast:n===e.length-1});return B(g,{children:[`${r.connector} `,z(g,{color:r.color,children:r.marker}),` ${r.label}`,r.segments.map((e,t)=>z(g,{dimColor:!0,children:` · ${e}`},`${e}-${t}`)),r.preview?z(g,{dimColor:!0,children:` · ${r.preview}`}):null]},t.id)})]})}function pe({percentage:e}){return e>=90?z(m,{borderStyle:`single`,borderColor:`red`,paddingX:1,children:B(g,{color:`red`,bold:!0,children:[`⚠ Context at `,Math.round(e),`% — window nearly full. Run /compact to summarize the conversation.`]})}):e>=70?z(m,{paddingX:1,children:B(g,{color:`yellow`,children:[`Context at `,Math.round(e),`% — consider running /compact to free up space.`]})}):null}function me({entry:e,page:t,loading:n,error:r}){let i=K(e,{selectedEntryId:e.id}),a=t?.records.slice(-12)??[];return B(m,{flexDirection:`column`,marginBottom:1,children:[z(g,{color:`cyan`,bold:!0,children:`Viewing ${i.title}`}),B(g,{dimColor:!0,children:[i.statusLabel,i.subtitle?` · ${i.subtitle}`:``,i.preview?` · ${i.preview}`:``]}),n?z(g,{dimColor:!0,children:`Loading workspace detail...`}):null,r?z(g,{color:`red`,children:r}):null,!n&&!r&&a.length===0?z(g,{dimColor:!0,children:`No detail yet`}):null,!n&&!r&&a.map(e=>z(g,{color:he(e.kind),children:re(e)},e.id)),t?.nextCursor?z(g,{dimColor:!0,children:`... more detail available`}):null]})}function he(e){if(e===`error`)return`red`;if(e===`result`)return`green`;if(e===`process_output`)return`white`;if(e===`group_summary`)return`cyan`}function q(){return{selectedIndex:0,scrollOffset:0,resolved:!1}}function ge(e){if(e.escape===!0)return`cancel`;if(e.upArrow===!0)return`previous`;if(e.downArrow===!0)return`next`;if(e.return===!0)return`select`}function J(e){if(e.escape===!0)return`cancel`;if(e.leftArrow===!0||e.upArrow===!0)return`previous`;if(e.rightArrow===!0||e.downArrow===!0)return`next`;if(e.return===!0)return`select`}function Y(e,t,n){if(e.resolved)return{state:e,effect:{type:`none`}};if(t===`cancel`)return{state:{...e,resolved:!0},effect:{type:`cancel`}};if(n.enabled===!1||n.itemCount===0)return{state:e,effect:{type:`none`}};if(t===`select`){let t=$(e.selectedIndex,n.itemCount);return{state:{...e,selectedIndex:t,resolved:!0},effect:{type:`select`,index:t}}}let r=Z(e.selectedIndex,t,n),i=Q(r,e.scrollOffset,n);return{state:{...e,selectedIndex:r,scrollOffset:i},effect:{type:`none`}}}function X(e,t){if(t.itemCount===0)return{...e,selectedIndex:0,scrollOffset:0};let n=$(e.selectedIndex,t.itemCount),r=Q(n,e.scrollOffset,t);return n===e.selectedIndex&&r===e.scrollOffset?e:{...e,selectedIndex:n,scrollOffset:r}}function Z(e,t,n){return t===`previous`?n.wrap===!0&&e===0?n.itemCount-1:Math.max(0,e-1):n.wrap===!0&&e===n.itemCount-1?0:Math.min(n.itemCount-1,e+1)}function Q(e,t,n){let r=n.maxVisible??n.itemCount;return r<=0?0:e<t?e:e>=t+r?e-r+1:Math.max(0,t)}function $(e,t){return Math.min(Math.max(e,0),t-1)}function _e({snapshot:e,selectedEntryId:t,onSelect:n,onClose:r}){let{normalized:i,visibleEntries:a,applyAction:o}=ve({entries:[...e?.entries??[]],selectedEntryId:t,onSelect:n,onClose:r});return y((e,t)=>{let n=ge(t);n!==void 0&&o(n)}),B(m,{flexDirection:`column`,borderStyle:`round`,borderColor:`cyan`,paddingX:1,children:[z(g,{color:`cyan`,bold:!0,children:`Execution workspace`}),z(m,{flexDirection:`column`,marginTop:1,children:a.length===0?z(g,{dimColor:!0,children:`No workspace entries`}):a.map((e,n)=>z(xe,{entry:e,isFocused:i.scrollOffset+n===i.selectedIndex,selectedEntryId:t},e.id))}),z(g,{dimColor:!0,children:`Ctrl+B Close ↑↓ Navigate Enter Switch Esc Close`})]})}function ve({entries:e,selectedEntryId:t,onSelect:n,onClose:r}){let[i,a]=A(()=>q()),o=k(i);D(()=>{let n=be({selectedIndex:Math.max(0,e.findIndex(e=>e.id===t)),itemCount:e.length});o.current=n,a(n)},[e.length,t]);let s=be({selectedIndex:i.selectedIndex,scrollOffset:i.scrollOffset,itemCount:e.length});return s!==i&&(o.current=s),{normalized:s,visibleEntries:e.slice(s.scrollOffset,s.scrollOffset+8),applyAction:ye({entries:e,stateRef:o,setState:a,onSelect:n,onClose:r})}}function ye({entries:e,stateRef:t,setState:n,onSelect:r,onClose:i}){return a=>{let o=Y(t.current,a,{itemCount:e.length,maxVisible:8}),s=o.effect.type===`select`||o.effect.type===`cancel`?{...o.state,resolved:!1}:o.state;if(t.current=s,n(s),o.effect.type===`cancel`)i();else if(o.effect.type===`select`){let t=e[o.effect.index];t&&r(t.id)}}}function be(e){return X({selectedIndex:e.selectedIndex,scrollOffset:e.scrollOffset??0,resolved:!1},{itemCount:e.itemCount,maxVisible:8})}function xe({entry:e,isFocused:t,selectedEntryId:n}){let r=K(e,{selectedEntryId:n});return B(g,{children:[z(g,{color:t?`cyan`:void 0,bold:t,children:t?`> `:` `}),z(g,{color:r.color,children:r.radio}),z(g,{color:t?`cyan`:void 0,bold:t,children:` ${r.title}`}),z(g,{dimColor:!0,children:` · ${r.statusLabel}`}),r.subtitle?z(g,{dimColor:!0,children:` · ${r.subtitle}`}):null,r.preview?z(g,{dimColor:!0,children:` · ${r.preview}`}):null]})}function Se(){return{listInstalled:async()=>[],listAvailablePlugins:async()=>[],install:async()=>void 0,uninstall:async()=>void 0,enable:async()=>void 0,disable:async()=>void 0,marketplaceAdd:async()=>``,marketplaceRemove:async()=>void 0,marketplaceUpdate:async()=>void 0,marketplaceList:async()=>[],reloadPlugins:async()=>({loadedPluginCount:0})}}function Ce(e){return O(()=>Se(),[])}function we(e,t){for(let n of e){if(n.type===`language-change-requested`)return Te(n.language,t),!0;if(n.type===`settings-reset-requested`)return Ee(t),!0;if(n.type===`session-exit-requested`)return t.requestShutdown(n.reason??`prompt_input_exit`,n.message??`User requested exit`),!0;if(n.type===`session-restart-requested`)return t.requestShutdown(n.reason,n.message),!0;if(n.type===`plugin-tui-requested`)return t.openPluginTUI(),!0;if(n.type===`settings-tui-requested`)return t.openTransportTUI(),!0;if(n.type===`agent-switcher-requested`)return t.openAgentSwitcher(),!0;if(n.type===`session-picker-requested`)return t.openSessionPicker(),!0;if(n.type===`session-renamed`)return t.renameSession(n.name),!0;if(n.type===`statusline-settings-patch`&&c(n.patch))return t.applyStatusLinePatch(n.patch)}return!1}function Te(e,t){let n=t.cliAdapter.getUserSettingsPath(),r=t.cliAdapter.readSettings(n);r.language=e,t.cliAdapter.writeSettings(n,r),t.addEntry(L(j(`Language set to "${e}". Restarting...`))),t.requestShutdown(`other`,`Language change restart`)}function Ee(e){let t=e.cliAdapter.getUserSettingsPath();e.cliAdapter.deleteSettings(t)?e.addEntry(L(j(`Deleted ${t}. Exiting...`))):e.addEntry(L(j(`No user settings found.`))),e.requestShutdown(`other`,`Reset settings restart`)}const De=w(null),Oe=De.Provider;function ke(){let e=E(De);if(!e)throw Error(`TuiCliAdapterContext not provided`);return e}function Ae({cwd:e,providerOverride:t,interactiveSession:n,commandEffectQueue:r,addEntry:i,baseHandleSubmit:a,setSessionName:o,setStatusLineSettings:s,showSessionPickerOnStart:c,openAgentSwitcher:l}){let{exit:u}=v(),d=ke(),[f,p]=A(null),m=k(null),[h,g]=A(!1),[_,y]=A(c??!1),[b,x]=A(!1),S=T((e,t)=>{i(L(j(`Shutting down...`))),setTimeout(()=>{n.shutdown({reason:e,message:t}).finally(()=>u())},500)},[n,i,u]),C=T(e=>we(e,{addEntry:i,requestShutdown:S,openPluginTUI:()=>g(!0),openSessionPicker:()=>y(!0),openTransportTUI:()=>x(!0),openAgentSwitcher:()=>l?.(),renameSession:e=>{n.setName(e),o(e)},applyStatusLinePatch:e=>(s(d.applyStatusLineSettings(d.getUserSettingsPath(),e)),!0),cliAdapter:d}),[i,d,n,S,o,s]),w=T(e=>{if(e.message.length>0&&i(L(j(e.message))),e.interaction!==void 0){m.current=e.interaction,p(e.interaction.prompt);return}m.current=null,p(null),e.effects!==void 0&&e.effects.length>0&&C(e.effects)},[i,C]),E=T(()=>{let e=r.drain();if(e===void 0)return!1;if(e.type===`interaction`){let{interaction:t}=e;return m.current=t,p(t.prompt),!0}return C(e.effects)},[C,r]);return{handleSubmit:T(async e=>{await a(e),E()},[a,E]),pendingInteractionPrompt:f,showPluginTUI:h,showSessionPicker:_,showTransportTUI:b,setShowPluginTUI:g,setShowSessionPicker:y,setShowTransportTUI:x,handleInteractionSubmit:T(async e=>{let t=m.current;if(t===null){p(null);return}try{w(await t.submit(e))}catch(e){m.current=null,p(null),i(L(j(`Failed: ${e instanceof Error?e.message:String(e)}`)))}},[i,w]),handleInteractionCancel:T(()=>{let e=m.current;if(m.current=null,p(null),e?.cancel===void 0){i(L(j(`Command interaction cancelled.`)));return}Promise.resolve(e.cancel()).then(e=>w(e)).catch(e=>{i(L(j(`Failed: ${e instanceof Error?e.message:String(e)}`)))})},[i,w])}}function je(e){let n={...t},r=e.statusline;return Me(r)?{enabled:typeof r.enabled==`boolean`?r.enabled:n.enabled,gitBranch:typeof r.gitBranch==`boolean`?r.gitBranch:n.gitBranch}:n}function Me(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)}function Ne(){let e=ke();return A(()=>je(e.readSettings(e.getUserSettingsPath())))}function Pe(e){let[,t]=A(0);D(()=>(e.onChange=()=>t(e=>e+1),()=>{e.onChange=null}),[e]);let n=e.stateManager;return{interactiveSession:e.getSession(),registry:e.getRegistry(),commandEffectQueue:e.getCommandEffectQueue(),history:n.history,addEntry:e=>n.addEntry(e),streamingText:n.streamingText,activeTools:n.activeTools,isThinking:n.isThinking,isAborting:n.isAborting,isShuttingDown:e.isShuttingDown,pendingPrompt:n.pendingPrompt,executionWorkspaceSnapshot:n.executionWorkspaceSnapshot,selectedExecutionEntryId:n.selectedExecutionEntryId,permissionRequest:e.permissionRequest,contextState:n.contextState,handleSubmit:t=>e.handleInput(t),handleAbort:()=>e.abort(),handleCancelQueue:()=>e.cancelQueue(),handleShutdown:t=>e.shutdown({reason:t}),selectExecutionWorkspaceEntry:t=>e.selectExecutionWorkspaceEntry(t),readExecutionWorkspaceDetail:t=>e.readExecutionWorkspaceDetail(t)}}const Fe=`[200~`,Ie=`[201~`;function Le(e){return{value:e,cursor:e.length,isPasting:!1,pasteBuffer:``}}function Re(e,t,n){return t===e.value?e:{...e,value:t,cursor:n==null?t.length:Math.min(n,t.length)}}function ze(e,t,n,r){let i=Ve(e,t,r);if(i!==void 0)return i;let a=He(e,t,n,r);if(a!==void 0)return a;let o=Ue(e,n,r);return o===void 0?$e(e,t):o}function Be(e,t,n){let r=t.replace(/\r\n?/g,`
|
|
1
|
+
import{CommandRegistry as e,DEFAULT_STATUS_LINE_COMMAND_SETTINGS as t,InteractiveSession as n,applyActiveModelChange as r,applyStatusLineSettings as i,deleteSettings as a,getUserSettingsPath as o,isSlashCommand as s,isStatusLineCommandSettingsPatch as c,listResumableSessionSummaries as l,readSettings as u,resolveGitBranch as d,tokeniseSlashCommand as f,writeSettings as p}from"@robota-sdk/agent-framework";import{Box as m,Static as h,Text as g,render as _,useApp as v,useInput as y,usePaste as b,useStdout as x,useWindowSize as S}from"ink";import C,{createContext as w,useCallback as T,useContext as E,useEffect as D,useMemo as O,useRef as k,useState as A}from"react";import{createSystemMessage as j,createUserMessage as M,findProviderDefinition as N,formatTokenCount as P,isAssistantMessage as F,isToolMessage as I,messageToHistoryEntry as L}from"@robota-sdk/agent-core";import{Fragment as R,jsx as z,jsxs as B}from"react/jsx-runtime";import V from"chalk";import H from"string-width";import{marked as U}from"marked";import W from"marked-terminal";const ee=[`active`,`queued`,`running`,`waiting_permission`,`sleeping`],G=/\s+/g;function te(e){return(e?.entries??[]).filter(e=>e.kind===`background_task`&&e.visibility==="default")}function ne(e){return te(e).filter(e=>ee.includes(e.status)).length}function K(e,t={}){let n=e.id===t.selectedEntryId,r={id:e.id,radio:n?`●`:`○`,title:ie(e),subtitle:ae(e),statusLabel:oe(e.status),preview:ce(e.preview??e.currentAction),color:se(e),isSelected:n};return{...r,accessibleText:le(r)}}function re(e){let t=e.text.trim().replace(G,` `);return t?t.length>160?`${t.slice(0,160)}...`:t:e.kind}function ie(e){return e.kind===`main_thread`?e.title:e.kind===`background_group`?`${e.title} group`:e.taskKind===`agent`?`${e.title} agent`:e.taskKind===`process`?e.title||`Process`:e.taskKind===`scheduled`?e.title||`Scheduled`:e.title}function ae(e){return e.kind===`main_thread`?e.subtitle:[e.taskKind,e.subtitle,e.attention===`none`?void 0:e.attention].filter(e=>typeof e==`string`&&e.length>0).join(` · `)||void 0}function oe(e){return e.replace(/_/g,` `)}function se(e){return e.attention===`failed`||e.status===`failed`?`red`:e.attention===`permission`||e.status===`waiting_permission`?`yellow`:e.status===`completed`?`green`:e.status===`cancelled`?`yellow`:ee.includes(e.status)?`cyan`:`white`}function ce(e){return e?.trim().replace(G,` `)||void 0}function le(e){return[e.radio,e.title,e.statusLabel,e.subtitle,e.preview].filter(e=>typeof e==`string`&&e.length>0).join(` · `)}function ue(e,t={}){let n=K(e),r=de(e)?`□`:`■`,i=[n.statusLabel,n.subtitle].filter(e=>typeof e==`string`&&e.length>0);return{connector:t.isLast===!1?`├`:`└`,marker:r,color:n.color,label:n.title,segments:i,preview:n.preview,accessibleText:[`${t.isLast===!1?`├`:`└`} ${r} ${n.title}`,...i,n.preview].filter(e=>typeof e==`string`&&e.length>0).join(` · `)}}function de(e){return e.status===`active`||e.status===`queued`||e.status===`running`||e.status===`waiting_permission`||e.status===`sleeping`}function fe({entries:e}){return e.length===0?null:B(m,{flexDirection:`column`,marginBottom:1,children:[z(g,{color:`cyan`,bold:!0,children:`Background work`}),e.map((t,n)=>{let r=ue(t,{isLast:n===e.length-1});return B(g,{children:[`${r.connector} `,z(g,{color:r.color,children:r.marker}),` ${r.label}`,r.segments.map((e,t)=>z(g,{dimColor:!0,children:` · ${e}`},`${e}-${t}`)),r.preview?z(g,{dimColor:!0,children:` · ${r.preview}`}):null]},t.id)})]})}function pe({percentage:e}){return e>=90?z(m,{borderStyle:`single`,borderColor:`red`,paddingX:1,children:B(g,{color:`red`,bold:!0,children:[`⚠ Context at `,Math.round(e),`% — window nearly full. Run /compact to summarize the conversation.`]})}):e>=70?z(m,{paddingX:1,children:B(g,{color:`yellow`,children:[`Context at `,Math.round(e),`% — consider running /compact to free up space.`]})}):null}function me({entry:e,page:t,loading:n,error:r}){let i=K(e,{selectedEntryId:e.id}),a=t?.records.slice(-12)??[];return B(m,{flexDirection:`column`,marginBottom:1,children:[z(g,{color:`cyan`,bold:!0,children:`Viewing ${i.title}`}),B(g,{dimColor:!0,children:[i.statusLabel,i.subtitle?` · ${i.subtitle}`:``,i.preview?` · ${i.preview}`:``]}),n?z(g,{dimColor:!0,children:`Loading workspace detail...`}):null,r?z(g,{color:`red`,children:r}):null,!n&&!r&&a.length===0?z(g,{dimColor:!0,children:`No detail yet`}):null,!n&&!r&&a.map(e=>z(g,{color:he(e.kind),children:re(e)},e.id)),t?.nextCursor?z(g,{dimColor:!0,children:`... more detail available`}):null]})}function he(e){if(e===`error`)return`red`;if(e===`result`)return`green`;if(e===`process_output`)return`white`;if(e===`group_summary`)return`cyan`}function q(){return{selectedIndex:0,scrollOffset:0,resolved:!1}}function ge(e){if(e.escape===!0)return`cancel`;if(e.upArrow===!0)return`previous`;if(e.downArrow===!0)return`next`;if(e.return===!0)return`select`}function J(e){if(e.escape===!0)return`cancel`;if(e.leftArrow===!0||e.upArrow===!0)return`previous`;if(e.rightArrow===!0||e.downArrow===!0)return`next`;if(e.return===!0)return`select`}function Y(e,t,n){if(e.resolved)return{state:e,effect:{type:`none`}};if(t===`cancel`)return{state:{...e,resolved:!0},effect:{type:`cancel`}};if(n.enabled===!1||n.itemCount===0)return{state:e,effect:{type:`none`}};if(t===`select`){let t=$(e.selectedIndex,n.itemCount);return{state:{...e,selectedIndex:t,resolved:!0},effect:{type:`select`,index:t}}}let r=Z(e.selectedIndex,t,n),i=Q(r,e.scrollOffset,n);return{state:{...e,selectedIndex:r,scrollOffset:i},effect:{type:`none`}}}function X(e,t){if(t.itemCount===0)return{...e,selectedIndex:0,scrollOffset:0};let n=$(e.selectedIndex,t.itemCount),r=Q(n,e.scrollOffset,t);return n===e.selectedIndex&&r===e.scrollOffset?e:{...e,selectedIndex:n,scrollOffset:r}}function Z(e,t,n){return t===`previous`?n.wrap===!0&&e===0?n.itemCount-1:Math.max(0,e-1):n.wrap===!0&&e===n.itemCount-1?0:Math.min(n.itemCount-1,e+1)}function Q(e,t,n){let r=n.maxVisible??n.itemCount;return r<=0?0:e<t?e:e>=t+r?e-r+1:Math.max(0,t)}function $(e,t){return Math.min(Math.max(e,0),t-1)}function _e({snapshot:e,selectedEntryId:t,onSelect:n,onClose:r}){let{normalized:i,visibleEntries:a,applyAction:o}=ve({entries:[...e?.entries??[]],selectedEntryId:t,onSelect:n,onClose:r});return y((e,t)=>{let n=ge(t);n!==void 0&&o(n)}),B(m,{flexDirection:`column`,borderStyle:`round`,borderColor:`cyan`,paddingX:1,children:[z(g,{color:`cyan`,bold:!0,children:`Execution workspace`}),z(m,{flexDirection:`column`,marginTop:1,children:a.length===0?z(g,{dimColor:!0,children:`No workspace entries`}):a.map((e,n)=>z(xe,{entry:e,isFocused:i.scrollOffset+n===i.selectedIndex,selectedEntryId:t},e.id))}),z(g,{dimColor:!0,children:`Ctrl+B Close ↑↓ Navigate Enter Switch Esc Close`})]})}function ve({entries:e,selectedEntryId:t,onSelect:n,onClose:r}){let[i,a]=A(()=>q()),o=k(i);D(()=>{let n=be({selectedIndex:Math.max(0,e.findIndex(e=>e.id===t)),itemCount:e.length});o.current=n,a(n)},[e.length,t]);let s=be({selectedIndex:i.selectedIndex,scrollOffset:i.scrollOffset,itemCount:e.length});return s!==i&&(o.current=s),{normalized:s,visibleEntries:e.slice(s.scrollOffset,s.scrollOffset+8),applyAction:ye({entries:e,stateRef:o,setState:a,onSelect:n,onClose:r})}}function ye({entries:e,stateRef:t,setState:n,onSelect:r,onClose:i}){return a=>{let o=Y(t.current,a,{itemCount:e.length,maxVisible:8}),s=o.effect.type===`select`||o.effect.type===`cancel`?{...o.state,resolved:!1}:o.state;if(t.current=s,n(s),o.effect.type===`cancel`)i();else if(o.effect.type===`select`){let t=e[o.effect.index];t&&r(t.id)}}}function be(e){return X({selectedIndex:e.selectedIndex,scrollOffset:e.scrollOffset??0,resolved:!1},{itemCount:e.itemCount,maxVisible:8})}function xe({entry:e,isFocused:t,selectedEntryId:n}){let r=K(e,{selectedEntryId:n});return B(g,{children:[z(g,{color:t?`cyan`:void 0,bold:t,children:t?`> `:` `}),z(g,{color:r.color,children:r.radio}),z(g,{color:t?`cyan`:void 0,bold:t,children:` ${r.title}`}),z(g,{dimColor:!0,children:` · ${r.statusLabel}`}),r.subtitle?z(g,{dimColor:!0,children:` · ${r.subtitle}`}):null,r.preview?z(g,{dimColor:!0,children:` · ${r.preview}`}):null]})}function Se(){return{listInstalled:async()=>[],listAvailablePlugins:async()=>[],install:async()=>void 0,uninstall:async()=>void 0,enable:async()=>void 0,disable:async()=>void 0,marketplaceAdd:async()=>``,marketplaceRemove:async()=>void 0,marketplaceUpdate:async()=>void 0,marketplaceList:async()=>[],reloadPlugins:async()=>({loadedPluginCount:0})}}function Ce(e){return O(()=>Se(),[])}function we(e,t){for(let n of e){if(n.type===`language-change-requested`)return Te(n.language,t),!0;if(n.type===`settings-reset-requested`)return Ee(t),!0;if(n.type===`session-exit-requested`)return t.requestShutdown(n.reason??`prompt_input_exit`,n.message??`User requested exit`),!0;if(n.type===`session-restart-requested`)return t.requestShutdown(n.reason,n.message),!0;if(n.type===`plugin-tui-requested`)return t.openPluginTUI(),!0;if(n.type===`settings-tui-requested`)return t.openTransportTUI(),!0;if(n.type===`agent-switcher-requested`)return t.openAgentSwitcher(),!0;if(n.type===`session-picker-requested`)return t.openSessionPicker(),!0;if(n.type===`session-renamed`)return t.renameSession(n.name),!0;if(n.type===`statusline-settings-patch`&&c(n.patch))return t.applyStatusLinePatch(n.patch)}return!1}function Te(e,t){let n=t.cliAdapter.getUserSettingsPath(),r=t.cliAdapter.readSettings(n);r.language=e,t.cliAdapter.writeSettings(n,r),t.addEntry(L(j(`Language set to "${e}". Restarting...`))),t.requestShutdown(`other`,`Language change restart`)}function Ee(e){let t=e.cliAdapter.getUserSettingsPath();e.cliAdapter.deleteSettings(t)?e.addEntry(L(j(`Deleted ${t}. Exiting...`))):e.addEntry(L(j(`No user settings found.`))),e.requestShutdown(`other`,`Reset settings restart`)}const De=w(null),Oe=De.Provider;function ke(){let e=E(De);if(!e)throw Error(`TuiCliAdapterContext not provided`);return e}function Ae({cwd:e,providerOverride:t,interactiveSession:n,commandEffectQueue:r,addEntry:i,baseHandleSubmit:a,setSessionName:o,setStatusLineSettings:s,showSessionPickerOnStart:c,openAgentSwitcher:l}){let{exit:u}=v(),d=ke(),[f,p]=A(null),m=k(null),[h,g]=A(!1),[_,y]=A(c??!1),[b,x]=A(!1),S=T((e,t)=>{i(L(j(`Shutting down...`))),setTimeout(()=>{n.shutdown({reason:e,message:t}).finally(()=>u())},500)},[n,i,u]),C=T(e=>we(e,{addEntry:i,requestShutdown:S,openPluginTUI:()=>g(!0),openSessionPicker:()=>y(!0),openTransportTUI:()=>x(!0),openAgentSwitcher:()=>l?.(),renameSession:e=>{n.setName(e),o(e)},applyStatusLinePatch:e=>(s(d.applyStatusLineSettings(d.getUserSettingsPath(),e)),!0),cliAdapter:d}),[i,d,n,S,o,s]),w=T(e=>{if(e.message.length>0&&i(L(j(e.message))),e.interaction!==void 0){m.current=e.interaction,p(e.interaction.prompt);return}m.current=null,p(null),e.effects!==void 0&&e.effects.length>0&&C(e.effects)},[i,C]),E=T(()=>{let e=r.drain();if(e===void 0)return!1;if(e.type===`interaction`){let{interaction:t}=e;return m.current=t,p(t.prompt),!0}return C(e.effects)},[C,r]);return{handleSubmit:T(async e=>{await a(e),E()},[a,E]),pendingInteractionPrompt:f,showPluginTUI:h,showSessionPicker:_,showTransportTUI:b,setShowPluginTUI:g,setShowSessionPicker:y,setShowTransportTUI:x,handleInteractionSubmit:T(async e=>{let t=m.current;if(t===null){p(null);return}try{w(await t.submit(e))}catch(e){m.current=null,p(null),i(L(j(`Failed: ${e instanceof Error?e.message:String(e)}`)))}},[i,w]),handleInteractionCancel:T(()=>{let e=m.current;if(m.current=null,p(null),e?.cancel===void 0){i(L(j(`Command interaction cancelled.`)));return}Promise.resolve(e.cancel()).then(e=>w(e)).catch(e=>{i(L(j(`Failed: ${e instanceof Error?e.message:String(e)}`)))})},[i,w])}}function je(e){let n={...t},r=e.statusline;return Me(r)?{enabled:typeof r.enabled==`boolean`?r.enabled:n.enabled,gitBranch:typeof r.gitBranch==`boolean`?r.gitBranch:n.gitBranch}:n}function Me(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)}function Ne(){let e=ke();return A(()=>je(e.readSettings(e.getUserSettingsPath())))}function Pe(e){let[,t]=A(0);D(()=>(e.onChange=()=>t(e=>e+1),()=>{e.onChange=null}),[e]);let n=e.stateManager;return{interactiveSession:e.getSession(),registry:e.getRegistry(),commandEffectQueue:e.getCommandEffectQueue(),history:n.history,addEntry:e=>n.addEntry(e),streamingText:n.streamingText,activeTools:n.activeTools,isThinking:n.isThinking,isAborting:n.isAborting,isShuttingDown:e.isShuttingDown,pendingPrompt:n.pendingPrompt,executionWorkspaceSnapshot:n.executionWorkspaceSnapshot,selectedExecutionEntryId:n.selectedExecutionEntryId,permissionRequest:e.permissionRequest,contextState:n.contextState,handleSubmit:t=>e.handleInput(t),handleAbort:()=>e.abort(),handleCancelQueue:()=>e.cancelQueue(),handleShutdown:t=>e.shutdown({reason:t}),selectExecutionWorkspaceEntry:t=>e.selectExecutionWorkspaceEntry(t),readExecutionWorkspaceDetail:t=>e.readExecutionWorkspaceDetail(t)}}const Fe=`[200~`,Ie=`[201~`;function Le(e){return{value:e,cursor:e.length,isPasting:!1,pasteBuffer:``}}function Re(e,t,n){return t===e.value?e:{...e,value:t,cursor:n==null?t.length:Math.min(n,t.length)}}function ze(e,t,n,r){let i=Ve(e,t,r);if(i!==void 0)return i;let a=He(e,t,n,r);if(a!==void 0)return a;let o=Ue(e,n,r);return o===void 0?$e(e,t):o}function Be(e,t,n){let r=t.replace(/\r\n?/g,`
|
|
2
2
|
`);return r.length===0?{state:e,effect:{type:`none`}}:r.includes(`
|
|
3
3
|
`)&&n.canPaste?{state:e,effect:{type:`paste`,text:r,cursor:e.cursor}}:$e(e,r)}function Ve(e,t,n){if(t===Fe||t.startsWith(Fe))return Je(e,t);if(e.isPasting)return Ye(e,t,n)}function He(e,t,n,r){if(n.ctrl===!0&&t===`c`||n.tab===!0)return{state:e,effect:{type:`none`}};if(n.return===!0)return{state:e,effect:{type:`submit`,value:e.value}};if(t.length>1&&(t.includes(`
|
|
4
4
|
`)||t.includes(`\r`))&&r.canPaste)return{state:e,effect:{type:`paste`,text:t.replace(/\r\n?/g,`
|
|
5
5
|
`),cursor:e.cursor}}}function Ue(e,t,n){if(t.upArrow===!0||t.downArrow===!0)return n.enableVerticalNavigation===!1?{state:e,effect:{type:`none`}}:Xe(e,t.upArrow===!0?`up`:`down`,n.availableWidth);if(t.leftArrow===!0)return Ze(e,`left`);if(t.rightArrow===!0)return Ze(e,`right`);if(t.backspace===!0||t.delete===!0)return Qe(e)}function We(e){if(!e||e.length===0)return``;let t=``;for(let n of e){let e=n.charCodeAt(0);e>31&&e!==127&&(t+=n)}return t}function Ge(e,t,n){return{value:e.slice(0,t)+n+e.slice(t),cursor:t+n.length}}function Ke(e,t,n){let r=0;for(let i=0;i<t&&i<e.length;i++){let t=H(e[i]),a=r%n;a+t>n&&(r+=n-a),r+=t}return r}function qe(e,t,n){let r=0;for(let i=0;i<e.length;i++){if(r>=t)return i;let a=H(e[i]),o=r%n;o+a>n&&(r+=n-o),r+=a}return e.length}function Je(e,t){return{state:{...e,isPasting:!0,pasteBuffer:t.slice(5)},effect:{type:`none`}}}function Ye(e,t,n){if(t!==Ie&&!t.includes(Ie))return{state:{...e,pasteBuffer:e.pasteBuffer+t},effect:{type:`none`}};let r=t.split(Ie)[0]??``;return Be({...e,isPasting:!1,pasteBuffer:``},e.pasteBuffer+r,n)}function Xe(e,t,n){if(!n||n<=0)return{state:e,effect:{type:`none`}};let r=[...e.value],i=Ke(r,e.cursor,n),a=t===`up`?i-n:i+n;if(a<0)return{state:e,effect:{type:`none`}};let o=qe(r,a,n);return o===e.cursor?{state:e,effect:{type:`none`}}:{state:{...e,cursor:o},effect:{type:`render`}}}function Ze(e,t){return t===`left`&&e.cursor>0?{state:{...e,cursor:e.cursor-1},effect:{type:`render`}}:t===`right`&&e.cursor<e.value.length?{state:{...e,cursor:e.cursor+1},effect:{type:`render`}}:{state:e,effect:{type:`none`}}}function Qe(e){if(e.cursor===0)return{state:e,effect:{type:`none`}};let t=e.value.slice(0,e.cursor-1)+e.value.slice(e.cursor);return{state:{...e,value:t,cursor:e.cursor-1},effect:{type:`change`,value:t}}}function $e(e,t){let n=We(t);if(n.length===0)return{state:e,effect:{type:`none`}};let r=Ge(e.value,e.cursor,n);return{state:{...e,value:r.value,cursor:r.cursor},effect:{type:`change`,value:r.value}}}function et({value:e,onChange:t,onSubmit:n,onPaste:r,placeholder:i=``,focus:a=!0,showCursor:o=!0,availableWidth:s,cursorHint:c=null,enableVerticalNavigation:l=!0}){let u=k(Le(e)),[,d]=A(0);return u.current=Re(u.current,e,c),tt({stateRef:u,onChange:t,onSubmit:n,onPaste:r,availableWidth:s,focus:a,enableVerticalNavigation:l,forceRender:d}),z(g,{children:at(u.current.value,u.current.cursor,i,o&&a)})}function tt(e){b(t=>{rt(e,()=>Be(e.stateRef.current,t,nt(e)))},{isActive:e.focus}),y((t,n)=>{rt(e,()=>ze(e.stateRef.current,t,n,nt(e)))},{isActive:e.focus})}function nt(e){return{availableWidth:e.availableWidth,canPaste:e.onPaste!==void 0,enableVerticalNavigation:e.enableVerticalNavigation}}function rt(e,t){try{let n=t();e.stateRef.current=n.state,it(n.effect,e.onChange,e.onSubmit,e.onPaste,e.forceRender)}catch{}}function it(e,t,n,r,i){e.type===`change`?t(e.value):e.type===`submit`?n?.(e.value):e.type===`paste`?r?.(e.text,e.cursor):e.type===`render`&&i(e=>e+1)}function at(e,t,n,r){if(!r)return e.length>0?e:n?V.gray(n):``;if(e.length===0)return n.length>0?V.inverse(n[0])+V.gray(n.slice(1)):V.inverse(` `);let i=[...e],a=``;for(let e=0;e<i.length;e++){let n=i[e]??``;a+=e===t?V.inverse(n):n}return t>=i.length&&(a+=V.inverse(` `)),a}function ot(e){if(e.upArrow===!0)return`previous`;if(e.downArrow===!0)return`next`;if(e.escape===!0)return`close`;if(e.tab===!0)return`complete`}function st(e){if(e.backspace===!0||e.delete===!0)return`cancelQueue`}function ct(e){if(e.upArrow===!0)return`previous`;if(e.downArrow===!0)return`next`}function lt(){return{selectedIndex:null,draft:``}}function ut(e,t,n,r){if(t.length===0)return{value:e,cursorHint:e.length,state:n};if(r===`previous`){let r=n.selectedIndex===null?t.length-1:Math.max(0,n.selectedIndex-1),i=t[r]??e;return{value:i,cursorHint:i.length,state:{selectedIndex:r,draft:n.selectedIndex===null?e:n.draft}}}if(n.selectedIndex===null)return{value:e,cursorHint:e.length,state:n};if(n.selectedIndex<t.length-1){let r=n.selectedIndex+1,i=t[r]??e;return{value:i,cursorHint:i.length,state:{...n,selectedIndex:r}}}return{value:n.draft,cursorHint:n.draft.length,state:lt()}}function dt(e,t){let n=t.trim();return n.length===0||e[e.length-1]===n?[...e]:[...e,n]}function ft(e){let t=[];for(let n of e){if(n.category!==`chat`||n.type!==`user`)continue;let e=n.data;typeof e?.content==`string`&&(t=dt(t,e.content))}return t}function pt(e,t,n){return t===0?0:n===`previous`?e>0?e-1:t-1:e<t-1?e+1:0}function mt(e,t){if(s(e)&&e.slice(1).includes(` `)){let{name:n}=f(e);return{type:`insert`,value:`/${n} ${t.name} `}}return t.subcommands&&t.subcommands.length>0?{type:`insert`,value:`/${t.name} `,selectedIndex:0}:{type:`insert`,value:`/${t.name} `}}function ht(e,t){if(s(e)&&e.slice(1).includes(` `)){let{name:n}=f(e);return{type:`submit`,value:`/${n} ${t.name}`}}return t.subcommands&&t.subcommands.length>0?{type:`insert`,value:`/${t.name} `,selectedIndex:0}:{type:`submit`,value:`/${t.name}`}}function gt(e,t,n,r){let i=r.split(`
|
|
6
|
-
`).length,a=`[Pasted text #${n} +${i} lines]`;return{value:e.slice(0,t)+a+e.slice(t),cursorHint:t+a.length,label:a,lineCount:i}}function _t(e){return e.trim().length>0}function vt(e){if(!e.startsWith(`/`))return{isSlash:!1,parentCommand:``,filter:``};let t=e.slice(1),n=t.indexOf(` `);return n===-1?{isSlash:!0,parentCommand:``,filter:t}:{isSlash:!0,parentCommand:t.slice(0,n),filter:t.slice(n+1)}}function yt(e,t){let[n,r]=A(0),[i,a]=A(!1),o=C.useRef(e);o.current!==e&&(o.current=e,i&&a(!1));let s=vt(e),c=s.isSlash&&s.parentCommand.length>0,l=O(()=>{if(!t||!s.isSlash||i)return[];if(c){let e=t.getSubcommands(s.parentCommand);if(e.length===0)return[];if(!s.filter)return e;let n=s.filter.toLowerCase();return e.filter(e=>e.name.toLowerCase().startsWith(n))}return t.getCommands(s.filter)},[t,s.isSlash,s.parentCommand,s.filter,i,c]),u=s.isSlash&&l.length>0&&!i;return n>=l.length&&l.length>0&&r(l.length-1),{showPopup:u,filteredCommands:l,selectedIndex:n,setSelectedIndex:r,isSubcommandMode:c,setShowPopup:e=>{a(typeof e==`function`?t=>!e(!t):!e)}}}function bt(){let{stdout:e}=x(),t=()=>Math.max(40,(e.columns??80)-4),[n,r]=A(t);return D(()=>{let n=()=>r(t());return e.on(`resize`,n),()=>{e.off(`resize`,n)}},[e]),n}function xt(e,t){return e.length>t?`${e.slice(0,t-1)}…`:e.padEnd(t)}function St(e){let{cmd:t,isSelected:n,showSlash:r,rowWidth:i,nameColWidth:a}=e,o=n?`▸ `:` `,s=n?`cyan`:void 0,c=!n,l=xt(t.name,a);return z(m,{width:i,children:z(g,{color:s,dimColor:c,wrap:`truncate-end`,children:r?`${o}/${l} ${t.description??``}`:`${o}${l} ${t.description??``}`})})}function Ct({commands:e,selectedIndex:t,visible:n,isSubcommandMode:r}){let i=bt();if(!n||e.length===0)return null;let a=wt(t,e.length),o=e.slice(a,a+8),s=Math.min(20,Math.max(...o.map(e=>e.name.length)));return z(m,{flexDirection:`column`,borderStyle:`round`,borderColor:`gray`,paddingX:1,children:o.map((e,n)=>z(St,{cmd:e,isSelected:a+n===t,showSlash:!r,rowWidth:i,nameColWidth:s},e.name))})}function wt(e,t){if(t<=8||e<8)return 0;let n=t-8;return Math.min(e-8+1,n)}const Tt=/\[Pasted text #(\d+)(?: \+\d+ lines)?\]/g;function Et(e,t){return e.replace(Tt,(e,n)=>t.get(Number(n))??``)}const Dt=[`#666666`,`#888888`,`#aaaaaa`,`#888888`];function Ot({text:e}){let[t,n]=A(0);return D(()=>{let e=setInterval(()=>{n(e=>e+1)},400);return()=>clearInterval(e)},[]),z(g,{children:[...e].map((e,n)=>z(g,{color:Dt[(t+Math.floor(n/4))%Dt.length],children:e},n))})}function kt({onSubmit:e,onCancelQueue:t,isDisabled:n,isAborting:r,pendingPrompt:i,registry:a,sessionName:o,history:s}){let[c,l]=A(``),[u,d]=A(null),[f,p]=A(lt),[h,_]=A([]),v=O(()=>ft(s??[]),[s]),b=O(()=>h.reduce((e,t)=>dt(e,t),v),[v,h]),x=k(new Map),{columns:C}=S(),w=C>0?C:80,E=Math.max(1,w-
|
|
6
|
+
`).length,a=`[Pasted text #${n} +${i} lines]`;return{value:e.slice(0,t)+a+e.slice(t),cursorHint:t+a.length,label:a,lineCount:i}}function _t(e){return e.trim().length>0}function vt(e){if(!e.startsWith(`/`))return{isSlash:!1,parentCommand:``,filter:``};let t=e.slice(1),n=t.indexOf(` `);return n===-1?{isSlash:!0,parentCommand:``,filter:t}:{isSlash:!0,parentCommand:t.slice(0,n),filter:t.slice(n+1)}}function yt(e,t){let[n,r]=A(0),[i,a]=A(!1),o=C.useRef(e);o.current!==e&&(o.current=e,i&&a(!1));let s=vt(e),c=s.isSlash&&s.parentCommand.length>0,l=O(()=>{if(!t||!s.isSlash||i)return[];if(c){let e=t.getSubcommands(s.parentCommand);if(e.length===0)return[];if(!s.filter)return e;let n=s.filter.toLowerCase();return e.filter(e=>e.name.toLowerCase().startsWith(n))}return t.getCommands(s.filter)},[t,s.isSlash,s.parentCommand,s.filter,i,c]),u=s.isSlash&&l.length>0&&!i;return n>=l.length&&l.length>0&&r(l.length-1),{showPopup:u,filteredCommands:l,selectedIndex:n,setSelectedIndex:r,isSubcommandMode:c,setShowPopup:e=>{a(typeof e==`function`?t=>!e(!t):!e)}}}function bt(){let{stdout:e}=x(),t=()=>Math.max(40,(e.columns??80)-4),[n,r]=A(t);return D(()=>{let n=()=>r(t());return e.on(`resize`,n),()=>{e.off(`resize`,n)}},[e]),n}function xt(e,t){return e.length>t?`${e.slice(0,t-1)}…`:e.padEnd(t)}function St(e){let{cmd:t,isSelected:n,showSlash:r,rowWidth:i,nameColWidth:a}=e,o=n?`▸ `:` `,s=n?`cyan`:void 0,c=!n,l=xt(t.name,a);return z(m,{width:i,children:z(g,{color:s,dimColor:c,wrap:`truncate-end`,children:r?`${o}/${l} ${t.description??``}`:`${o}${l} ${t.description??``}`})})}function Ct({commands:e,selectedIndex:t,visible:n,isSubcommandMode:r}){let i=bt();if(!n||e.length===0)return null;let a=wt(t,e.length),o=e.slice(a,a+8),s=Math.min(20,Math.max(...o.map(e=>e.name.length)));return z(m,{flexDirection:`column`,borderStyle:`round`,borderColor:`gray`,paddingX:1,children:o.map((e,n)=>z(St,{cmd:e,isSelected:a+n===t,showSlash:!r,rowWidth:i,nameColWidth:s},e.name))})}function wt(e,t){if(t<=8||e<8)return 0;let n=t-8;return Math.min(e-8+1,n)}const Tt=/\[Pasted text #(\d+)(?: \+\d+ lines)?\]/g;function Et(e,t){return e.replace(Tt,(e,n)=>t.get(Number(n))??``)}const Dt=[`#666666`,`#888888`,`#aaaaaa`,`#888888`];function Ot({text:e}){let[t,n]=A(0);return D(()=>{let e=setInterval(()=>{n(e=>e+1)},400);return()=>clearInterval(e)},[]),z(g,{children:[...e].map((e,n)=>z(g,{color:Dt[(t+Math.floor(n/4))%Dt.length],children:e},n))})}function kt({onSubmit:e,onCancelQueue:t,isDisabled:n,isAborting:r,pendingPrompt:i,registry:a,sessionName:o,history:s}){let[c,l]=A(``),[u,d]=A(null),[f,p]=A(lt),[h,_]=A([]),v=O(()=>ft(s??[]),[s]),b=O(()=>h.reduce((e,t)=>dt(e,t),v),[v,h]),x=k(new Map),{columns:C}=S(),w=C>0?C:80,E=Math.max(1,w-3),D=k(0),{showPopup:j,filteredCommands:M,selectedIndex:N,setSelectedIndex:P,isSubcommandMode:F,setShowPopup:I}=yt(c,a),L=T((e,t)=>{D.current+=1;let n=D.current;x.current.set(n,e),l(r=>{let i=gt(r,t,n,e);return d(i.cursorHint),i.value})},[]),R=T(()=>{p(lt())},[]),V=T(e=>{_(t=>dt(t,e))},[]),H=T(t=>{V(t),R(),e(t)},[e,V,R]),U=T(e=>{let t=mt(c,e);t.type===`insert`&&(l(t.value),t.selectedIndex!==void 0&&P(t.selectedIndex))},[c,P]),W=T(e=>{let t=ht(c,e);if(t.type===`insert`){l(t.value),t.selectedIndex!==void 0&&P(t.selectedIndex);return}t.type===`submit`&&(l(``),H(t.value))},[c,H,P]),ee=T(e=>{if(!_t(e))return;if(j&&M[N]){W(M[N]);return}let t=Et(e.trim(),x.current);l(``),x.current.clear(),D.current=0,H(t)},[j,M,N,W,H]);y((e,t)=>{if(!j)return;let n=ot(t);if(n===`previous`||n===`next`)P(e=>pt(e,M.length,n));else if(n===`close`)I(!1);else if(n===`complete`){let e=M[N];e&&U(e)}},{isActive:j&&!n}),y((e,t)=>{let n=ct(t);if(!n)return;let r=ut(c,b,f,n);l(r.value),d(r.cursorHint),p(r.state)},{isActive:!j&&!n&&!i}),y((e,n)=>{st(n)===`cancelQueue`&&i&&t?.()},{isActive:!!i});let G=r?`yellow`:i?`cyan`:n?`gray`:`green`,te=Math.max(1,w-0),ne=(()=>{if(o){let e=` "${o}" `,t=Math.max(0,te-e.length-2);return{left:`─`.repeat(t),label:e,right:`─`.repeat(2)}}return{left:`─`.repeat(te),label:``,right:``}})();return B(m,{flexDirection:`column`,children:[j&&z(Ct,{commands:M,selectedIndex:N,visible:j,isSubcommandMode:F}),B(g,{color:G,children:[ne.left,ne.label?z(g,{backgroundColor:G,color:`black`,bold:!0,children:ne.label}):null,ne.right]}),z(m,{borderStyle:`single`,borderTop:!1,borderLeft:!1,borderRight:!1,borderColor:G,paddingLeft:1,children:r?z(g,{color:`yellow`,children:` Interrupting...`}):i?B(g,{color:`cyan`,children:[` `,`Queued:`,` `,i.length>50?i.slice(0,47)+`...`:i,` `,z(g,{dimColor:!0,children:`(Backspace to cancel)`})]}):n?z(Ot,{text:` Waiting for response... (ESC to interrupt)`}):B(m,{children:[z(g,{color:`green`,bold:!0,children:`> `}),z(et,{value:c,onChange:e=>{l(e),R(),d(null)},onSubmit:ee,onPaste:L,placeholder:`Type a message or /help`,availableWidth:E,cursorHint:u,enableVerticalNavigation:!1})]})})]})}function At({items:e,renderItem:t,onSelect:n,onCancel:r,maxVisible:i=3}){let[a,o]=A(()=>q()),s=k(a),c=T(t=>{let a=Y(s.current,t,{itemCount:e.length,maxVisible:i});if(s.current=a.state,o(a.state),a.effect.type===`cancel`)r();else if(a.effect.type===`select`){let t=e[a.effect.index];t!==void 0&&n(t)}},[e,i,r,n]);if(y((e,t)=>{let n=ge(t);n!==void 0&&c(n)}),e.length===0)return z(m,{});let l=X(a,{itemCount:e.length,maxVisible:i});l!==a&&(s.current=l);let{selectedIndex:u,scrollOffset:d}=l,f=e.slice(d,d+i),p=d+i<e.length;return B(m,{flexDirection:`column`,children:[d>0&&B(g,{dimColor:!0,children:[` ↑ `,d,` more above`]}),f.map((e,n)=>z(m,{marginBottom:1,children:t(e,d+n===u)},d+n)),p&&B(g,{dimColor:!0,children:[` ↓ `,e.length-d-i,` more below`]})]})}function jt(){return{value:``,resolved:!1}}function Mt(e,t){if(t.escape===!0)return{type:`cancel`};if(t.return===!0)return{type:`submit`};if(t.backspace===!0||t.delete===!0)return{type:`delete`};if(e&&t.ctrl!==!0&&t.meta!==!0)return{type:`insert`,value:e}}function Nt(e,t,n){return e.resolved?{state:e,effect:{type:`none`}}:t.type===`cancel`?{state:{...e,resolved:!0},effect:{type:`cancel`}}:t.type===`delete`?{state:{...e,value:e.value.slice(0,-1),error:void 0},effect:{type:`none`}}:t.type===`insert`?{state:{...e,value:e.value+t.value,error:void 0},effect:{type:`none`}}:Pt(e,n)}function Pt(e,t){let n=e.value.trim();if(!n&&!t.allowEmpty){let r=t.validate?.(n);return{state:r?{...e,error:r}:e,effect:{type:`none`}}}let r=t.validate?.(n);return r===void 0?{state:{...e,resolved:!0},effect:{type:`submit`,value:n}}:{state:{...e,error:r},effect:{type:`none`}}}function Ft({title:e,description:t,placeholder:n,onSubmit:r,onCancel:i,validate:a,allowEmpty:o=!1,masked:s=!1}){let[c,l]=A(()=>jt()),u=k(c),d=T(e=>{let t=Nt(u.current,e,{allowEmpty:o,validate:a});u.current=t.state,l(t.state),t.effect.type===`cancel`?i():t.effect.type===`submit`&&r(t.effect.value)},[o,a,i,r]);return y((e,t)=>{let n=Mt(e,t);n!==void 0&&d(n)}),B(m,{flexDirection:`column`,borderStyle:`round`,borderColor:`yellow`,paddingX:1,children:[z(g,{color:`yellow`,bold:!0,children:e}),z(It,{description:t}),B(m,{marginTop:1,children:[z(g,{color:`cyan`,children:`> `}),c.value?z(g,{children:s?`*`.repeat(c.value.length):c.value}):n?z(g,{dimColor:!0,children:n}):null,z(g,{color:`cyan`,children:`█`})]}),c.error&&z(g,{color:`red`,children:c.error}),z(g,{dimColor:!0,children:` Enter Submit Esc Cancel`})]})}function It({description:e}){return e===void 0||e.length===0?null:z(g,{dimColor:!0,children:e})}function Lt({prompt:e,onSubmit:t,onCancel:n}){return e.kind===`text`?z(Ft,{title:e.title,description:e.description,placeholder:e.placeholder,allowEmpty:e.allowEmpty,masked:e.masked,validate:e.validate,onSubmit:t,onCancel:n},`text:${e.title}`):B(m,{flexDirection:`column`,children:[z(g,{bold:!0,children:e.title}),e.description!==void 0&&e.description.length>0&&z(g,{dimColor:!0,children:e.description}),z(At,{items:[...e.options],maxVisible:e.maxVisible,renderItem:(e,t)=>B(g,{color:t?`cyan`:void 0,children:[t?`> `:` `,e.label]}),onSelect:e=>t(e.value),onCancel:n})]})}const Rt=new Set([`Bash`,`BackgroundProcess`]);function zt(e){if(!Rt.has(e.toolName)||!e.toolResultData)return;let t=Bt(e.toolResultData),n=Jt(t,`exitCode`),r=Yt(t,`success`),i=Wt(Ut(Vt(e.toolResultData,t))),a=i.slice(0,4),o=Math.max(0,i.length-a.length),s=e.result===`error`||r===!1||n!==void 0&&n!==0;return{status:s?`error`:`success`,statusLabel:Ht(s,n),previewLines:a,omittedLineCount:o,transcriptHint:o>0?`... +${o} lines (full output in session transcript)`:void 0}}function Bt(e){try{return JSON.parse(e)}catch{return e}}function Vt(e,t){if(!Kt(t))return e;let n=qt(t,`output`);if(n!==void 0)return n;let r=qt(t,`stdout`),i=qt(t,`stderr`),a=qt(t,`error`),o=[];return r&&o.push(r),i&&o.push(Gt(i,`[stderr] `)),!r&&!i&&a&&o.push(a),o.join(`
|
|
7
7
|
`)}function Ht(e,t){return t!==void 0&&t!==0?`exit ${t}`:e?`error`:`ok`}function Ut(e){return e?e.replace(/\r\n/g,`
|
|
8
8
|
`).split(`
|
|
9
9
|
`):[]}function Wt(e){let t=e.length;for(;t>0&&e[t-1].trim().length===0;)--t;return e.slice(0,t)}function Gt(e,t){return Ut(e).map(e=>`${t}${e}`).join(`
|
|
@@ -15,11 +15,11 @@ import{CommandRegistry as e,DEFAULT_STATUS_LINE_COMMAND_SETTINGS as t,Interactiv
|
|
|
15
15
|
|
|
16
16
|
_(interrupted)_`:``)):t})})]})});function Sn({entry:e}){let t=e.data,n=t?.tools,r=t?.summary?.split(`
|
|
17
17
|
`)??[];return n&&n.length>0?B(m,{flexDirection:`column`,marginBottom:1,children:[z(m,{children:B(g,{color:`white`,bold:!0,children:[`Tool:`,` `]})}),z(g,{children:` `}),n.map((e,t)=>B(m,{flexDirection:`column`,children:[B(g,{color:_n(e),children:[` `,vn(e)]}),z(cn,{tool:e}),e.diffLines&&e.diffLines.length>0&&z(pn,{file:e.diffFile,lines:e.diffLines})]},t))]}):B(m,{flexDirection:`column`,marginBottom:1,children:[z(m,{children:B(g,{color:`white`,bold:!0,children:[`Tool:`,` `]})}),z(g,{children:` `}),r.map((e,t)=>B(g,{color:`green`,children:[` `,e]},t))]})}function Cn({entry:e}){let t=e.data,n=typeof t?.message==`string`?t.message:typeof t?.content==`string`?t.content:e.type;return B(m,{flexDirection:`column`,marginBottom:1,children:[z(m,{children:B(g,{color:`yellow`,bold:!0,children:[`System:`,` `]})}),z(g,{children:` `}),z(m,{marginLeft:2,children:z(g,{wrap:`wrap`,children:n})})]})}function wn({entry:e}){if(e.category===`chat`){let t=e.data;return z(xn,{message:t})}return e.type===`tool-summary`?z(Sn,{entry:e}):e.type===`usage-summary`?z(mn,{entry:e}):e.type===`tool-start`||e.type===`tool-end`?z(R,{}):z(Cn,{entry:e})}function Tn({history:e}){return z(m,{flexDirection:`column`,children:e.map(e=>z(wn,{entry:e},e.id))})}const En=[`Allow [y]`,`Allow always (this session) [s]`,`Allow always (this project) [p]`,`Deny [n]`];function Dn(e,t){let n=J({...t,escape:!1});if(n!==void 0)return n;if(e===`y`||e===`1`)return{type:`shortcut`,index:0};if(e===`s`||e===`a`||e===`2`)return{type:`shortcut`,index:1};if(e===`p`||e===`3`)return{type:`shortcut`,index:2};if(e===`n`||e===`d`||e===`4`)return{type:`shortcut`,index:3}}function On(e,t){if(e.resolved)return{state:e,effect:{type:`none`}};if(typeof t!=`string`)return An(e,t.index);let n=Y(e,t,{itemCount:En.length});return n.effect.type===`select`?{state:n.state,effect:{type:`resolve`,decision:kn(n.effect.index)}}:{state:n.state,effect:{type:`none`}}}function kn(e){return e===0?!0:e===1?`allow-session`:e===2?`allow-project`:!1}function An(e,t){return{state:{...e,selectedIndex:t,resolved:!0},effect:{type:`resolve`,decision:kn(t)}}}function jn(e){let t=Object.entries(e);return t.length===0?`(no arguments)`:t.map(([e,t])=>`${e}: ${typeof t==`string`?t:JSON.stringify(t)}`).join(`, `)}function Mn({request:e}){let[t,n]=C.useState(()=>q()),r=C.useRef(t),i=C.useRef(e);if(i.current!==e){i.current=e;let t=q();r.current=t,n(t)}let a=C.useCallback(t=>{let i=On(r.current,t);r.current=i.state,n(i.state),i.effect.type===`resolve`&&e.resolve(i.effect.decision)},[e]);return y((e,t)=>{let n=Dn(e,t);n!==void 0&&a(n)}),B(m,{flexDirection:`column`,borderStyle:`round`,borderColor:`yellow`,paddingX:1,children:[z(g,{color:`yellow`,bold:!0,children:`[Permission Required]`}),B(g,{children:[`Tool:`,` `,z(g,{color:`cyan`,bold:!0,children:e.toolName})]}),B(g,{dimColor:!0,children:[` `,jn(e.toolArgs)]}),z(m,{marginTop:1,children:En.map((e,n)=>z(m,{marginRight:2,children:B(g,{color:n===t.selectedIndex?`cyan`:void 0,bold:n===t.selectedIndex,children:[n===t.selectedIndex?`> `:` `,e]})},e))}),z(g,{dimColor:!0,children:` left/right to select, Enter to confirm`})]})}function Nn(e,t,n){let r=J({...t,escape:!1});if(r!==void 0)return r;if(n===2&&e===`y`)return{type:`shortcut`,index:0};if(n===2&&e===`n`)return{type:`shortcut`,index:1}}function Pn(e,t,n){return e.resolved?{state:e,effect:{type:`none`}}:typeof t==`string`?Y(e,t,{itemCount:n}):{state:{...e,selectedIndex:t.index,resolved:!0},effect:{type:`select`,index:t.index}}}function Fn({message:e,options:t=[`Yes`,`No`],onSelect:n}){let[r,i]=A(()=>q()),a=k(r),o=T(e=>{let r=Pn(a.current,e,t.length);a.current=r.state,i(r.state),r.effect.type===`select`&&n(r.effect.index)},[n,t.length]);return y((e,n)=>{let r=Nn(e,n,t.length);r!==void 0&&o(r)}),B(m,{flexDirection:`column`,borderStyle:`round`,borderColor:`yellow`,paddingX:1,children:[z(g,{color:`yellow`,children:e}),z(m,{marginTop:1,children:t.map((e,t)=>z(m,{marginRight:2,children:B(g,{color:t===r.selectedIndex?`cyan`:void 0,bold:t===r.selectedIndex,children:[t===r.selectedIndex?`> `:` `,e]})},e))}),z(g,{dimColor:!0,children:` arrow keys to select, Enter to confirm`})]})}function In(e,t,n,r,i){let[a,o]=A([]),[s,c]=A(!1),[l,u]=A();return D(()=>{if(o([]),u(void 0),e===`marketplace-list`)c(!0),n.marketplaceList().then(e=>{let t=[{label:`Add Marketplace`,value:`__add__`}],n=e.map(e=>({label:e.name,value:e.name,hint:e.type}));o([...t,...n]),c(!1)}).catch(e=>{u(e instanceof Error?e.message:String(e)),c(!1)});else if(e===`marketplace-browse`){let e=t??``;c(!0),n.listAvailablePlugins(e).then(e=>{o(e.map(e=>({label:e.name,value:e.name,hint:e.installed?`installed`:e.description}))),c(!1)}).catch(e=>{u(e instanceof Error?e.message:String(e)),c(!1)})}else e===`installed-list`&&(c(!0),n.listInstalled().then(e=>{o(e.map(e=>({label:e.name,value:e.name,hint:e.description}))),c(!1)}).catch(e=>{u(e instanceof Error?e.message:String(e)),c(!1)}))},[i,e,t,n,r]),{items:a,loading:s,error:l}}function Ln({title:e,items:t,onSelect:n,onBack:r,loading:i,error:a}){let[o,s]=A(()=>q()),c=k(o),l=!i&&!a,u=T(e=>{let i=Y(c.current,e,{itemCount:t.length,enabled:l});if(c.current=i.state,s(i.state),i.effect.type===`cancel`)r();else if(i.effect.type===`select`){let e=t[i.effect.index];e!==void 0&&n(e.value)}},[l,t,r,n]);y((e,t)=>{let n=ge(t);n!==void 0&&u(n)});let d=X(o,{itemCount:t.length});d!==o&&(c.current=d);let f=d.selectedIndex;return B(m,{flexDirection:`column`,borderStyle:`round`,borderColor:`yellow`,paddingX:1,children:[z(g,{color:`yellow`,bold:!0,children:e}),i&&z(m,{marginTop:1,children:z(g,{dimColor:!0,children:`Loading...`})}),a&&B(m,{marginTop:1,flexDirection:`column`,children:[z(g,{color:`red`,children:a}),z(g,{dimColor:!0,children:`Press Esc to go back`})]}),!i&&!a&&z(m,{flexDirection:`column`,marginTop:1,children:t.map((e,t)=>B(m,{children:[B(g,{color:t===f?`cyan`:void 0,bold:t===f,children:[t===f?`> `:` `,e.label]}),e.hint&&B(g,{dimColor:!0,children:[` `,e.hint]})]},e.value))}),z(g,{dimColor:!0,children:i||a?``:` ↑↓ Navigate Enter Select Esc Back`})]})}function Rn(e,t){e===`marketplace`?t.push({screen:`marketplace-list`}):e===`installed`&&t.push({screen:`installed-list`})}function zn(e,t){e===`__add__`?t.push({screen:`marketplace-add`}):t.push({screen:`marketplace-action`,context:{marketplace:e}})}function Bn(e,t,n,r){e===`browse`?r.push({screen:`marketplace-browse`,context:{marketplace:t}}):e===`update`?n.marketplaceUpdate(t).then(()=>{r.notify(`Updated marketplace "${t}".`),r.pop()}).catch(e=>{r.notify(`Error: ${e instanceof Error?e.message:String(e)}`)}):e===`remove`&&r.setConfirm({message:`Remove marketplace "${t}" and all its plugins?`,onConfirm:()=>{r.setConfirm(void 0),n.marketplaceRemove(t).then(()=>{r.notify(`Removed marketplace "${t}".`),r.popN(2)}).catch(e=>{r.notify(`Error: ${e instanceof Error?e.message:String(e)}`)})},onCancel:()=>r.setConfirm(void 0)})}function Vn(e,t,n,r){let i=`${e}@${t}`;n.find(t=>t.value===e)?.hint===`installed`?r.push({screen:`installed-action`,context:{pluginId:i}}):r.push({screen:`marketplace-install-scope`,context:{marketplace:t,pluginId:i}})}function Hn(e,t,n,r){let i=e;n.install(t,i).then(()=>{r.notify(`Installed plugin "${t}" (${i} scope).`),r.popN(2)}).catch(e=>{r.notify(`Error: ${e instanceof Error?e.message:String(e)}`)})}function Un(e,t,n){n.setConfirm({message:`Uninstall plugin "${e}"?`,onConfirm:()=>{n.setConfirm(void 0),t.uninstall(e).then(()=>{n.notify(`Uninstalled plugin "${e}".`),n.refresh()}).catch(e=>{n.notify(`Error: ${e instanceof Error?e.message:String(e)}`)})},onCancel:()=>n.setConfirm(void 0)})}function Wn(e,t,n,r){e===`uninstall`&&r.setConfirm({message:`Uninstall plugin "${t}"?`,onConfirm:()=>{r.setConfirm(void 0),n.uninstall(t).then(()=>{r.notify(`Uninstalled plugin "${t}".`),r.popN(2)}).catch(e=>{r.notify(`Error: ${e instanceof Error?e.message:String(e)}`)})},onCancel:()=>r.setConfirm(void 0)})}function Gn({callbacks:e,onClose:t,addMessage:n}){let[r,i]=A([{screen:`main`}]),[a,o]=A(),[s,c]=A(0),l=r[r.length-1]??{screen:`main`},u=T(e=>{i(t=>[...t,e])},[]),d=T(()=>{i(e=>e.length<=1?(t(),e):e.slice(0,-1))},[t]),f=T(e=>{i(n=>{let r=n.slice(0,Math.max(1,n.length-e));return r.length===0?(t(),n):r})},[t]),p=T(e=>{n?.({role:`system`,content:e})},[n]),m=T(()=>{c(e=>e+1)},[]),h=T(e=>o(e),[o]),g={push:T(e=>u({screen:e.screen,context:e.context}),[u]),pop:d,popN:f,notify:p,setConfirm:h,refresh:m},{items:_,loading:v,error:y}=In(l.screen,l.context?.marketplace,e,s,r.length),b=T(t=>{let n=l.screen,r=l.context;n===`main`?Rn(t,g):n===`marketplace-list`?zn(t,g):n===`marketplace-action`?Bn(t,r?.marketplace??``,e,g):n===`marketplace-browse`?Vn(t,r?.marketplace??``,_,g):n===`marketplace-install-scope`?Hn(t,r?.pluginId??``,e,g):n===`installed-list`?Un(t,e,g):n===`installed-action`&&Wn(t,r?.pluginId??``,e,g)},[l,_,e,u,d,f,p,o,m]),x=T(t=>{l.screen===`marketplace-add`&&e.marketplaceAdd(t).then(e=>{p(`Added marketplace "${e}" from ${t}.`),d()}).catch(e=>{p(`Error: ${e instanceof Error?e.message:String(e)}`),d()})},[l.screen,e,p,d]);if(a)return z(Fn,{message:a.message,onSelect:e=>{e===0?a.onConfirm():a.onCancel()}});let S=l.screen;return S===`marketplace-add`?z(Ft,{title:`Add Marketplace Source`,placeholder:`owner/repo or git URL`,onSubmit:x,onCancel:d,validate:e=>e.includes(`/`)?void 0:`Must be owner/repo or a git URL`}):S===`marketplace-action`?z(Ln,{title:`Marketplace: ${l.context?.marketplace??``}`,items:[{label:`Browse plugins`,value:`browse`},{label:`Update`,value:`update`},{label:`Remove`,value:`remove`}],onSelect:b,onBack:d},r.length):S===`marketplace-install-scope`?z(Ln,{title:`Install scope for "${l.context?.pluginId??``}"`,items:[{label:`User scope`,value:`user`},{label:`Project scope`,value:`project`}],onSelect:b,onBack:d},r.length):S===`installed-action`?z(Ln,{title:`Plugin: ${l.context?.pluginId??``}`,items:[{label:`Uninstall`,value:`uninstall`}],onSelect:b,onBack:d},r.length):z(Ln,{title:{main:`Plugin Management`,"marketplace-list":`Marketplace`,"marketplace-browse":`Browse: ${l.context?.marketplace??``}`,"installed-list":`Installed Plugins`}[S]??`Plugin Management`,items:{main:[{label:`Marketplace`,value:`marketplace`},{label:`Installed Plugins`,value:`installed`}]}[S]??_,onSelect:b,onBack:d,loading:v,error:y},`${S}-${r.length}-${s}`)}function Kn({sessions:e,onSelect:t,onCancel:n}){return B(m,{flexDirection:`column`,paddingX:1,marginBottom:1,children:[z(g,{bold:!0,color:`cyan`,children:`Select a session to resume (ESC to cancel):`}),z(At,{items:[...e],renderItem:(e,t)=>{let n=e.preview?e.preview.slice(0,60)+(e.preview.length>60?`...`:``):``;return B(g,{children:[t?`> `:` `,z(g,{bold:!0,children:e.name??e.id.slice(0,8)}),` `,z(g,{dimColor:!0,children:new Date(e.updatedAt).toLocaleString(void 0,{month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`})}),` `,B(g,{dimColor:!0,children:[`msgs: `,e.messageCount]}),n?B(R,{children:[`
|
|
18
|
-
`,z(g,{color:`gray`,children:n})]}):null]})},onSelect:e=>t(e.id),onCancel:n})]})}function qn(e){let t=Jn(e),n=e.hasPendingPrompt&&t.kind!==`queued`?[`queued`]:[],r=[t.label,...n].join(` · `);return{...t,segments:n,text:r}}function Jn(e){return e.activeToolCount>0?{kind:`tools`,label:`Tools
|
|
18
|
+
`,z(g,{color:`gray`,children:n})]}):null]})},onSelect:e=>t(e.id),onCancel:n})]})}function qn(e){let t=Jn(e),n=e.hasPendingPrompt&&t.kind!==`queued`?[`queued`]:[],r=[t.label,...n].join(` · `);return{...t,segments:n,text:r}}function Jn(e){return e.activeToolCount>0?{kind:`tools`,label:`Tools (${e.activeToolCount})`,color:`cyan`}:e.isThinking?{kind:`thinking`,label:`Thinking`,color:`yellow`}:e.activeBackgroundTaskCount>0?{kind:`background`,label:`Background (${e.activeBackgroundTaskCount})`,color:`cyan`}:e.hasPendingPrompt?{kind:`queued`,label:`Queued`,color:`yellow`}:{kind:`idle`,label:`Idle`,color:`gray`}}function Yn(e){return e>=90?`red`:e>=70?`yellow`:`green`}function Xn({isThinking:e,activeToolCount:t,activeBackgroundTaskCount:n,hasPendingPrompt:r}){let i=qn({isThinking:e,activeToolCount:t,activeBackgroundTaskCount:n,hasPendingPrompt:r});return z(g,{color:i.color,bold:i.kind!==`idle`,children:i.text})}function Zn({percentage:e,usedTokens:t,maxTokens:n}){return B(g,{color:Yn(e),children:[`Context: `,Math.round(e),`% (`,P(t),`/`,P(n),` tokens)`]})}function Qn({permissionMode:e}){return B(R,{children:[z(g,{color:`cyan`,bold:!0,children:`Mode:`}),` `,z(g,{children:e})]})}function $n(e){return e!=="default"}function er({modelName:e,providerDisplayName:t}){return t===void 0?z(g,{dimColor:!0,children:e}):B(g,{dimColor:!0,children:[t,` `,e]})}function tr(e){let t=e.showGitBranch&&e.gitBranch!==void 0&&e.gitBranch.length>0,n=$n(e.permissionMode);return B(g,{children:[z(Xn,{isThinking:e.isThinking,activeToolCount:e.activeToolCount,activeBackgroundTaskCount:e.activeBackgroundTaskCount,hasPendingPrompt:e.hasPendingPrompt}),n&&B(R,{children:[` | `,z(Qn,{permissionMode:e.permissionMode})]}),e.sessionName&&B(R,{children:[` | `,z(g,{color:`magenta`,children:e.sessionName})]}),t&&B(R,{children:[` | `,B(g,{dimColor:!0,children:[`git: `,e.gitBranch]})]}),` | `,z(er,{modelName:e.modelName,providerDisplayName:e.providerDisplayName}),` | `,z(Zn,{percentage:e.contextPercentage,usedTokens:e.contextUsedTokens,maxTokens:e.contextMaxTokens})]})}function nr({permissionMode:e,modelName:t,providerDisplayName:n,sessionId:r,isThinking:i,activeToolCount:a=0,activeBackgroundTaskCount:o=0,hasPendingPrompt:s=!1,contextPercentage:c,contextUsedTokens:l,contextMaxTokens:u,sessionName:d,gitBranch:f,showGitBranch:p=!0,activeAgentLabel:h}){return B(m,{paddingLeft:1,paddingRight:1,justifyContent:`space-between`,children:[z(tr,{permissionMode:e,modelName:t,providerDisplayName:n,isThinking:i,activeToolCount:a,activeBackgroundTaskCount:o,hasPendingPrompt:s,contextPercentage:c,contextUsedTokens:l,contextMaxTokens:u,sessionName:d,gitBranch:f,showGitBranch:p}),h!==void 0&&B(g,{color:`yellow`,bold:!0,children:[`[`,h,`]`]})]})}function rr({cwd:e,permissionMode:t,modelId:n,providerType:r,sessionId:i,isThinking:a,activeToolCount:o,activeBackgroundTaskCount:s,hasPendingPrompt:c,contextState:l,sessionName:u,settings:d,activeAgentLabel:f,gitRefreshToken:p}){let m=ke(),h=O(()=>m.getGitBranch(e),[m,e,p]),g=O(()=>r===void 0?void 0:m.getProviderDisplayName(r),[m,r]);return d.enabled?z(nr,{permissionMode:t,modelName:n??``,providerDisplayName:g,sessionId:i,isThinking:a,activeToolCount:o,activeBackgroundTaskCount:s,hasPendingPrompt:c,contextPercentage:l.percentage,contextUsedTokens:l.usedTokens,contextMaxTokens:l.maxTokens,sessionName:u,gitBranch:h,showGitBranch:d.gitBranch,activeAgentLabel:f}):null}function ir(e){return e.isRunning?{color:`yellow`,icon:`⟳`,strikethrough:!1}:e.result===`error`?{color:`red`,icon:`✗`,strikethrough:!0}:e.result===`denied`?{color:`yellowBright`,icon:`⊘`,strikethrough:!0}:{color:`green`,icon:`✓`,strikethrough:!1}}function ar(e){return e?z(m,{marginBottom:1,children:z(g,{color:`yellow`,children:`Thinking...`})}):z(R,{})}function or(e){return B(m,{flexDirection:`column`,marginBottom:1,children:[z(g,{color:`white`,bold:!0,children:`Tools:`}),z(g,{children:` `}),e.map((e,t)=>{let{color:n,icon:r,strikethrough:i}=ir(e);return B(m,{flexDirection:`column`,children:[B(g,{color:n,strikethrough:i,children:[` `,r,` `,e.toolName,`(`,e.firstArg,`)`]}),e.diffLines&&e.diffLines.length>0&&z(pn,{file:e.diffFile,lines:e.diffLines})]},`${e.toolName}-${t}`)})]})}function sr({text:e,activeTools:t,isThinking:n=!1}){let r=t.length>0,i=e.length>0;return!r&&!i?ar(n):B(m,{flexDirection:`column`,children:[r&&or(t),i&&B(m,{flexDirection:`column`,marginBottom:1,children:[z(g,{color:`cyan`,bold:!0,children:`Robota:`}),z(g,{children:` `}),z(m,{marginLeft:2,children:z(g,{wrap:`wrap`,children:sn(e)})})]})]})}function cr({entry:e,selected:t}){let n=e.config.enabled,r=n?`●`:`○`,i=n?`[enabled] `:`[disabled]`,a=e.config.options?.port,o=typeof a==`number`?`port: ${a}`:``;return z(m,{children:z(g,{color:t?`cyan`:void 0,bold:t,children:`${r} ${e.transport.name.padEnd(18)} ${i} ${o}`})})}function lr(e,t,n,r,i,a,o,s){y(T((c,l)=>{if(!n){if(l.upArrow){i(e=>Math.max(0,e-1));return}if(l.downArrow){i(t=>Math.min(e.length-1,t+1));return}if(l.escape||l.return){o();return}if(c===` `){let n=e[t];if(!n)return;a(!0),r.setEnabled(n.transport.name,!n.config.enabled).then(()=>{s(),a(!1)}).catch(()=>a(!1))}}},[n,e,t,r,o,s,i,a]))}function ur({registry:e,onClose:t}){let[n,r]=A(()=>e.getAll()),[i,a]=A(0),[o,s]=A(!1);return lr(n,i,o,e,a,s,t,T(()=>{r(e.getAll())},[e])),B(m,{flexDirection:`column`,paddingX:2,paddingY:1,children:[z(g,{bold:!0,children:`Settings › Transports`}),z(m,{marginTop:1,flexDirection:`column`,children:n.map((e,t)=>z(cr,{entry:e,selected:t===i},e.transport.name))}),z(m,{marginTop:1,children:z(g,{dimColor:!0,children:`↑↓ select space toggle enter/esc close`})}),o&&z(m,{marginTop:1,children:z(g,{color:`yellow`,children:`Saving…`})})]})}function dr({message:e}){return z(m,{paddingX:1,marginBottom:1,children:z(g,{color:`yellow`,children:e})})}function fr(e){let[t,n]=A(()=>({channel:e.createChannel(e.resumeSessionId),sessionId:e.resumeSessionId})),[r,i]=A(e.showSessionPickerOnStart??!1);return z(Oe,{value:e.cliAdapter,children:z(pr,{...e,channel:t.channel,showSessionPickerOnStart:r,resumeSessionId:t.sessionId,onSessionSwitch:r=>{i(!1),t.channel.stop(),n({channel:e.createChannel(r),sessionId:r})}},t.sessionId??`__new__`)})}function pr(e){let t=e.cwd,{channel:n}=e,{interactiveSession:r,registry:i,commandEffectQueue:a,history:o,addEntry:s,streamingText:c,activeTools:u,isThinking:d,isAborting:f,isShuttingDown:p,pendingPrompt:_,executionWorkspaceSnapshot:b,selectedExecutionEntryId:x,selectExecutionWorkspaceEntry:S,readExecutionWorkspaceDetail:C,permissionRequest:w,contextState:E,handleSubmit:M,handleAbort:N,handleCancelQueue:P,handleShutdown:F}=Pe(n),[I,R]=A(n.sessionName),V=Ce(t),H=r?void 0:V,{exit:U}=v(),[W,ee]=A(),[G,K]=A(!1),[re,ie]=A(null),[ae,oe]=A(),[se,ce]=A(!1),[le,ue]=Ne(),[de,he]=A(0),q=O(()=>te(b),[b]),ge=ne(b),J=O(()=>b?.entries.find(e=>e.id===x),[b,x]),{handleSubmit:Y,pendingInteractionPrompt:X,showPluginTUI:Z,showSessionPicker:Q,showTransportTUI:$,setShowPluginTUI:ve,setShowSessionPicker:ye,setShowTransportTUI:be,handleInteractionSubmit:xe,handleInteractionCancel:Se}=Ae({cwd:t,providerOverride:e.providerOverride,interactiveSession:r,commandEffectQueue:a,addEntry:s,baseHandleSubmit:M,setSessionName:R,setStatusLineSettings:ue,showSessionPickerOnStart:e.showSessionPickerOnStart,openAgentSwitcher:()=>K(!0)});D(()=>(n.start(),()=>{n.stop()}),[n]);let we=!J||J.kind===`main_thread`||J.controls.includes(`send`),Te=J&&J.kind!==`main_thread`?J.title:void 0,Ee=O(()=>b?.entries.find(e=>e.kind===`main_thread`)?.id,[b]),De=T(async e=>{J&&J.kind!==`main_thread`&&J.controls.includes(`send`)?await r.sendAgentJob(J.sourceId,e):await Y(e)},[J,Y,r]),Oe=T(async e=>{he(e=>e+1),await De(e)},[De]),ke=k(!1);D(()=>{ke.current&&!d&&he(e=>e+1),ke.current=d},[d]),D(()=>{let e=r?.getName?.();e&&!I&&R(e)},[r,I]),D(()=>{let t=!0;return e.startupUpdateNotice?.then(e=>{t&&e!==void 0&&ee(e)}).catch(()=>{}),()=>{t=!1}},[e.startupUpdateNotice]),D(()=>{let e=I?`Robota — ${I}`:`Robota`;process.stdout.write(`\x1b]0;${e}\x07`)},[I]),y((e,t)=>{!t.escape||!d||w||Z||$||Q||G||N()}),y((e,t)=>{!t.ctrl||e!==`b`||w||Z||Q||p||K(e=>!e)}),y((e,t)=>{!t.escape||d||w||Z||$||Q||G||J&&J.kind!==`main_thread`&&Ee!==void 0&&S(Ee)}),y((e,t)=>{!t.ctrl||e!==`c`||p||F(`prompt_input_exit`).finally(()=>U())}),D(()=>{let e=()=>{p||F(`other`).finally(()=>U())};return process.once(`SIGINT`,e),process.once(`SIGTERM`,e),()=>{process.off(`SIGINT`,e),process.off(`SIGTERM`,e)}},[F,U,p]),D(()=>{if(!J||J.kind===`main_thread`){ie(null),oe(void 0),ce(!1);return}let e=!0;return ce(!0),oe(void 0),C(J.id).then(t=>{e&&(ie(t),ce(!1))}).catch(t=>{e&&(oe(t.message),ce(!1))}),()=>{e=!1}},[b,C,J]);let je=e.permissionMode??`default`,Me=``;try{let e=r.getSession();je=e.getPermissionMode(),Me=e.getSessionId()}catch{}return B(m,{flexDirection:`column`,children:[z(h,{items:[{version:e.version??`0.0.0`}],children:e=>B(m,{flexDirection:`column`,paddingX:1,marginBottom:1,children:[z(g,{color:`cyan`,bold:!0,children:`
|
|
19
19
|
____ ___ ____ ___ _____ _
|
|
20
20
|
| _ \\ / _ \\| __ ) / _ \\_ _|/ \\
|
|
21
21
|
| |_) | | | | _ \\| | | || | / _ \\
|
|
22
22
|
| _ <| |_| | |_) | |_| || |/ ___ \\
|
|
23
23
|
|_| \\_\\\\___/|____/ \\___/ |_/_/ \\_\\
|
|
24
|
-
`}),B(g,{dimColor:!0,children:[` v`,e.version]})]},`logo`)}),W&&z(dr,{message:W}),B(m,{flexDirection:`column`,paddingX:1,flexGrow:1,children:[J&&J.kind!==`main_thread`?z(me,{entry:J,page:re,loading:se,error:ae}):z(Tn,{history:o}),p&&z(m,{marginBottom:1,children:z(g,{color:`yellow`,children:`Shutting down...`})}),(d||u.length>0)&&z(m,{flexDirection:`column`,marginBottom:1,children:z(sr,{text:c,activeTools:u,isThinking:d})}),z(fe,{entries:q})]}),G&&z(_e,{snapshot:b,selectedEntryId:x,onSelect:S,onClose:()=>K(!1)}),w&&z(Mn,{request:w}),X&&z(Lt,{prompt:X,onSubmit:xe,onCancel:Se}),Z&&z(Gn,{callbacks:H,onClose:()=>ve(!1),addMessage:e=>s(L(j(e.content)))}),$&&e.transportRegistry&&z(ur,{registry:e.transportRegistry,onClose:()=>be(!1)}),Q&&z(Kn,{sessions:l(e.sessionStore,e.cwd),onSelect:t=>{ye(!1),e.onSessionSwitch(t)},onCancel:()=>{ye(!1),s(L(j(`Session resume cancelled.`)))}}),z(pe,{percentage:E.percentage}),z(rr,{cwd:t,permissionMode:je,modelId:e.modelId,providerType:e.providerType,sessionId:Me,isThinking:d,activeToolCount:u.length,activeBackgroundTaskCount:ge,hasPendingPrompt:_!==null,contextState:E,sessionName:I,settings:le,activeAgentLabel:Te,gitRefreshToken:de}),z(kt,{onSubmit:Oe,onCancelQueue:P,isDisabled:!!w||Z||$||Q||G||p||X!==null||d&&!!_||!we,isAborting:f,pendingPrompt:_,registry:i,sessionName:I,history:o}),z(g,{children:` `})]})}var mr=class{queue=[];enqueueInteraction(e){this.queue.push({type:`interaction`,interaction:e})}enqueueEffects(e){e.length!==0&&this.queue.push({type:`effects`,effects:[...e]})}drain(){return this.queue.shift()}clear(){this.queue.length=0}};function hr(e,t,n,r,i,a){let o=gr(e.effects,n,r,a);if(r.addEntry(L(j(e.message))),e.interaction!==void 0&&i.enqueueInteraction(e.interaction),o.length>0&&i.enqueueEffects(o),t.isInitialized){let e=t.getContextState();r.setContextState({percentage:e.usedPercentage,usedTokens:e.usedTokens,maxTokens:e.maxTokens})}}function gr(e,t,n,r){if(e===void 0||e.length===0)return[];let i=[];for(let a of e){if(a.type===`conversation-history-cleared`){n.clearHistory();continue}if(a.type===`plugin-registry-reload-requested`){r?.(t);continue}i.push(a)}return i}function _r(e){return e.toLowerCase().replace(/[^a-z0-9\s-]/g,``).trim().replace(/\s+/g,`-`).replace(/-+/g,`-`).slice(0,60)}async function vr(e,t){let n=t.slice(0,200),r=await e.chat([j(`You generate short session titles. Respond with ONLY a 3-5 word lowercase-hyphenated title (e.g. refactor-auth-middleware). No explanation, no punctuation, no quotes.`),M(n)],{maxTokens:20}),i=_r(typeof r.content==`string`?r.content:``);return!i||i.length<3?_r(t):i}function yr(e,t){let n=null;return{schedule(){n||=setTimeout(()=>{n=null,e()},t)},flush(){n&&=(clearTimeout(n),null)}}}var br=class{history=[];streamingText=``;activeTools=[];isThinking=!1;isAborting=!1;pendingPrompt=null;contextState={percentage:0,usedTokens:0,maxTokens:0};executionWorkspaceSnapshot=null;selectedExecutionEntryId;onChange=null;streamBuf=``;debouncedStreamNotify=yr(()=>this.notify(),300);notify(){this.onChange?.()}onTextDelta=e=>{this.streamBuf+=e,this.streamingText=this.streamBuf,this.debouncedStreamNotify.schedule()};onToolStart=e=>{this.activeTools=[...this.activeTools,e],this.notify()};onToolEnd=e=>{let t=this.activeTools.findLastIndex(t=>t.toolName===e.toolName&&t.isRunning);if(t!==-1){let n=[...this.activeTools];n[t]=e,this.activeTools=n}this.notify()};onThinking=e=>{this.isThinking=e,e?(this.debouncedStreamNotify.flush(),this.streamBuf=``,this.streamingText=``,this.activeTools=[]):(this.isAborting=!1,this.activeTools=[]),this.notify()};onComplete=e=>{this.debouncedStreamNotify.flush(),this.streamBuf=``,this.streamingText=``,this.activeTools=[],this.contextState={percentage:e.contextState.usedPercentage,usedTokens:e.contextState.usedTokens,maxTokens:e.contextState.maxTokens},this.notify()};onInterrupted=()=>{this.debouncedStreamNotify.flush(),this.streamBuf=``,this.streamingText=``,this.activeTools=[],this.notify()};onError=()=>{this.debouncedStreamNotify.flush(),this.streamBuf=``,this.streamingText=``,this.activeTools=[],this.notify()};onContextUpdate=e=>{this.setContextState({percentage:e.usedPercentage,usedTokens:e.usedTokens,maxTokens:e.maxTokens})};syncHistory(e){e.length!==0&&(this.history=e.length>100?e.slice(-100):[...e],this.notify())}addEntry(e){let t=[...this.history,e];this.history=t.length>100?t.slice(-100):t,this.notify()}clearHistory(){this.history=[],this.debouncedStreamNotify.flush(),this.streamBuf=``,this.streamingText=``,this.activeTools=[],this.notify()}setPendingPrompt(e){this.pendingPrompt=e,this.notify()}setAborting(e){this.isAborting=e,this.notify()}setContextState(e){this.contextState=e,this.notify()}syncExecutionWorkspaceSnapshot(e){let t=this.selectedExecutionEntryId,n=t!==void 0&&e.entries.some(e=>e.id===t)?t:e.selectedEntryId??e.entries[0]?.id;this.executionWorkspaceSnapshot={...e,...n?{selectedEntryId:n}:{}},this.selectedExecutionEntryId=n,this.notify()}selectExecutionWorkspaceEntry(e){this.executionWorkspaceSnapshot?.entries.some(t=>t.id===e)&&(this.selectedExecutionEntryId=e,this.executionWorkspaceSnapshot={...this.executionWorkspaceSnapshot,selectedEntryId:e},this.notify())}},xr=class{stateManager;interactiveSession;registry;commandEffectQueue;opts;submitHandler=null;actionQueue=[];processingAction=!1;permissionRequest=null;pendingAction=null;availableCommands=[];isShuttingDown=!1;sessionName;autoNameTriggered=!1;sessionStarted=!1;initCheckInterval=null;permissionQueue=[];processingPermission=!1;onChange=null;constructor(e){this.opts=e,this.sessionName=e.sessionName,this.stateManager=new br,this.stateManager.onChange=()=>this.onChange?.(),this.interactiveSession=this.createSession(),this.registry=this.createRegistry(),this.commandEffectQueue=new mr}createSession(){let e=this.opts;return new n({cwd:e.cwd,provider:e.provider,permissionMode:e.permissionMode,maxTurns:e.maxTurns,permissionHandler:(e,t)=>this.handlePermissionRequest(e,t),sessionStore:e.sessionStore,resumeSessionId:e.resumeSessionId,forkSession:e.forkSession,sessionName:e.sessionName,backgroundTaskRunners:e.backgroundTaskRunners,subagentRunnerFactory:e.subagentRunnerFactory,commandModules:e.commandModules,commandHostAdapters:e.commandHostAdapters,shellExec:e.shellExec,language:e.language,agentName:e.agentName,systemPrompt:e.systemPrompt,appendSystemPrompt:e.appendSystemPrompt,allowedTools:e.allowedTools,deniedTools:e.deniedTools})}createRegistry(){let t=new e;for(let e of this.opts.commandModules??[])t.addModule(e);return this.opts.reloadPluginCommandSource?.(t),t}onSubmit(e){this.submitHandler=e}write(e){}async requestAction(e){return new Promise(t=>{this.actionQueue.push({action:e,resolve:t}),this.processNextAction()})}setAvailableCommands(e){this.availableCommands=e,this.onChange?.()}setBusy(e){this.stateManager.onThinking(e)}async start(){this.sessionStarted||(this.sessionStarted=!0,this.wireSessionEvents(),this.syncRestoredHistory(),this.startInitCheck(),this.opts.transportRegistry&&await this.opts.transportRegistry.startAll(this.interactiveSession))}async stop(){this.onChange=null,this.sessionStarted=!1,this.stopInitCheck(),this.opts.transportRegistry&&await this.opts.transportRegistry.stopAll()}getSession(){return this.interactiveSession}getRegistry(){return this.registry}getCommandEffectQueue(){return this.commandEffectQueue}abort(){this.stateManager.setAborting(!0),this.interactiveSession.abort()}cancelQueue(){this.interactiveSession.cancelQueue(),this.stateManager.setPendingPrompt(null)}async shutdown(e){this.isShuttingDown||(this.isShuttingDown=!0,this.stateManager.addEntry(L(j(`Shutting down...`))),this.onChange?.(),await this.interactiveSession.shutdown({reason:e?.reason??`prompt_input_exit`,message:`CLI shutdown`}))}selectExecutionWorkspaceEntry(e){this.stateManager.selectExecutionWorkspaceEntry(e)}async readExecutionWorkspaceDetail(e){return this.interactiveSession.readExecutionWorkspaceDetail(e)}async sendAgentJob(e,t){await this.interactiveSession.sendAgentJob(e,t)}setSessionName(e){this.sessionName=e,this.interactiveSession.setName(e),this.onChange?.()}resolveAction(e){let t=this.actionQueue[0];t&&(this.actionQueue.shift(),this.processingAction=!1,this.pendingAction=null,this.onChange?.(),t.resolve(e),this.processNextAction())}async handleInput(e){if(!e.startsWith(`/`)){await this.interactiveSession.submit(e),this.stateManager.setPendingPrompt(this.interactiveSession.getPendingPrompt());return}await this.handleSlashCommand(e)}async handleSlashCommand(e){let t=e.slice(1).split(/\s+/),n=t[0]?.toLowerCase()??``,r=t.slice(1).join(` `),i=await this.interactiveSession.executeCommand(n,r);if(i){if(i.effects?.some(e=>e.type===`session-execution-started`)){this.stateManager.setPendingPrompt(this.interactiveSession.getPendingPrompt());return}hr(i,this.interactiveSession,this.registry,this.stateManager,this.commandEffectQueue,this.opts.reloadPluginCommandSource);return}this.stateManager.addEntry(L(j(`Unknown command "/${n}". Type /help for help.`)))}processNextAction(){if(this.processingAction)return;let e=this.actionQueue[0];if(!e){this.pendingAction=null,this.onChange?.();return}this.processingAction=!0,this.pendingAction=e.action,this.onChange?.()}handlePermissionRequest(e,t){return new Promise(n=>{this.permissionQueue.push({toolName:e,toolArgs:t,resolve:n}),this.processNextPermission()})}processNextPermission(){if(this.processingPermission)return;let e=this.permissionQueue[0];if(!e){this.permissionRequest=null,this.onChange?.();return}this.processingPermission=!0,this.permissionRequest={toolName:e.toolName,toolArgs:e.toolArgs,resolve:t=>{this.permissionQueue.shift(),this.processingPermission=!1,this.permissionRequest=null,e.resolve(t),setTimeout(()=>this.processNextPermission(),0)}},this.onChange?.()}wireSessionEvents(){let e=this.interactiveSession,t=this.stateManager;e.on(`user_message`,e=>{this.handleAutoNaming(e),t.addEntry(L(M(e)))}),e.on(`text_delta`,t.onTextDelta),e.on(`tool_start`,t.onToolStart),e.on(`tool_end`,t.onToolEnd),e.on(`thinking`,t.onThinking),e.on(`complete`,n=>{t.onComplete(n),t.syncHistory(e.getFullHistory())}),e.on(`interrupted`,t.onInterrupted),e.on(`error`,()=>{t.onError(),t.syncHistory(e.getFullHistory())}),e.on(`context_update`,t.onContextUpdate),e.on(`compact`,()=>{t.syncHistory(e.getFullHistory())}),e.on(`skill_activation`,()=>{t.syncHistory(e.getFullHistory())}),e.on(`execution_workspace_event`,e=>{t.syncExecutionWorkspaceSnapshot(e.snapshot)})}handleAutoNaming(e){this.autoNameTriggered||this.opts.sessionName||this.interactiveSession.getName()||(this.autoNameTriggered=!0,vr(this.opts.provider,e).then(e=>{this.interactiveSession.setName(e),this.sessionName=e,this.opts.onAutoNamed?.(e),this.onChange?.()}).catch(()=>{this.autoNameTriggered=!1}))}syncRestoredHistory(){if(this.stateManager.history.length===0){let e=this.interactiveSession.getFullHistory();e.length>0&&this.stateManager.syncHistory(e)}}startInitCheck(){this.initCheckInterval=setInterval(()=>{this.runInitCheck()},200)}runInitCheck(){try{let e=this.interactiveSession.getContextState();this.stateManager.setContextState({percentage:e.usedPercentage,usedTokens:e.usedTokens,maxTokens:e.maxTokens});let t=this.interactiveSession.getFullHistory();t.length>0&&this.stateManager.syncHistory(t),this.syncExecutionWorkspace(),this.stopInitCheck()}catch{}}stopInitCheck(){this.initCheckInterval!==null&&(clearInterval(this.initCheckInterval),this.initCheckInterval=null)}syncExecutionWorkspace(){try{this.stateManager.syncExecutionWorkspaceSnapshot(this.interactiveSession.getExecutionWorkspaceSnapshot({selectedEntryId:this.stateManager.selectedExecutionEntryId}))}catch{}}};async function Sr(e){process.on(`unhandledRejection`,e=>{process.stderr.write(`\n[UNHANDLED REJECTION] ${e}\n`),e instanceof Error&&process.stderr.write(`${e.stack}\n`)});let t=t=>new xr({cwd:e.cwd,provider:e.provider,permissionMode:e.permissionMode,maxTurns:e.maxTurns,sessionStore:e.sessionStore,resumeSessionId:t,forkSession:e.forkSession,sessionName:e.sessionName,backgroundTaskRunners:e.backgroundTaskRunners,subagentRunnerFactory:e.subagentRunnerFactory,commandModules:e.commandModules,commandHostAdapters:e.commandHostAdapters,shellExec:e.shellExec,transportRegistry:e.transportRegistry,language:e.language,reloadPluginCommandSource:e.reloadPluginCommandSource,agentName:e.agentName}),n=t(e.resumeSessionId);await _(z(fr,{cwd:e.cwd,channel:n,createChannel:t,providerOverride:e.providerOverride,providerType:e.providerType,modelId:e.modelId,permissionMode:e.permissionMode,version:e.version,sessionStore:e.sessionStore,resumeSessionId:e.resumeSessionId,showSessionPickerOnStart:e.showSessionPickerOnStart,startupUpdateNotice:e.startupUpdateNotice,transportRegistry:e.transportRegistry,cliAdapter:e.cliAdapter}),{exitOnCtrlC:!1}).waitUntilExit()}var Cr=class{name=`tui`;defaultEnabled=!0;optionsSchema={};options;constructor(e){this.options=e}attach(e){}async start(){await Sr(this.options)}async stop(){}validateOptions(e){return!0}};function wr({providerDefinitions:e,reloadPluginCommandSource:t}){return{getUserSettingsPath:()=>o(),readSettings:e=>u(e),writeSettings:(e,t)=>p(e,t),deleteSettings:e=>a(e),applyStatusLineSettings:(e,t)=>i(e,t),reloadPluginCommandSource:e=>{t(e)},applyActiveModelChange:(e,t,n)=>(r(e,t,n),{applied:!0}),getGitBranch:e=>d(e),getProviderDisplayName:t=>N(e,t)?.displayName??t}}export{Cr as n,Sr as r,wr as t};
|
|
25
|
-
//# sourceMappingURL=tui-
|
|
24
|
+
`}),B(g,{dimColor:!0,children:[` v`,e.version]})]},`logo`)}),W&&z(dr,{message:W}),B(m,{flexDirection:`column`,paddingX:1,flexGrow:1,children:[J&&J.kind!==`main_thread`?z(me,{entry:J,page:re,loading:se,error:ae}):z(Tn,{history:o}),p&&z(m,{marginBottom:1,children:z(g,{color:`yellow`,children:`Shutting down...`})}),(d||u.length>0)&&z(m,{flexDirection:`column`,marginBottom:1,children:z(sr,{text:c,activeTools:u,isThinking:d})}),z(fe,{entries:q})]}),G&&z(_e,{snapshot:b,selectedEntryId:x,onSelect:S,onClose:()=>K(!1)}),w&&z(Mn,{request:w}),X&&z(Lt,{prompt:X,onSubmit:xe,onCancel:Se}),Z&&z(Gn,{callbacks:H,onClose:()=>ve(!1),addMessage:e=>s(L(j(e.content)))}),$&&e.transportRegistry&&z(ur,{registry:e.transportRegistry,onClose:()=>be(!1)}),Q&&z(Kn,{sessions:l(e.sessionStore,e.cwd),onSelect:t=>{ye(!1),e.onSessionSwitch(t)},onCancel:()=>{ye(!1),s(L(j(`Session resume cancelled.`)))}}),z(pe,{percentage:E.percentage}),z(kt,{onSubmit:Oe,onCancelQueue:P,isDisabled:!!w||Z||$||Q||G||p||X!==null||d&&!!_||!we,isAborting:f,pendingPrompt:_,registry:i,sessionName:I,history:o}),z(rr,{cwd:t,permissionMode:je,modelId:e.modelId,providerType:e.providerType,sessionId:Me,isThinking:d,activeToolCount:u.length,activeBackgroundTaskCount:ge,hasPendingPrompt:_!==null,contextState:E,sessionName:I,settings:le,activeAgentLabel:Te,gitRefreshToken:de})]})}function mr(e){return/not initialized/i.test(e.message)}function hr(e){let t=e.isBenignError??mr,n=null,r=0,i;function a(){n!==null&&(clearInterval(n),n=null)}function o(){r+=e.intervalMs;try{e.check()}catch(n){let o=n instanceof Error?n:Error(String(n));if(!t(o)){a(),e.onFailure({kind:`error`,error:o});return}i=o,r>=e.timeoutMs&&(a(),e.onFailure({kind:`timeout`,lastError:i}));return}a(),e.onReady()}return{start(){n===null&&(r=0,n=setInterval(o,e.intervalMs))},stop:a}}var gr=class{queue=[];enqueueInteraction(e){this.queue.push({type:`interaction`,interaction:e})}enqueueEffects(e){e.length!==0&&this.queue.push({type:`effects`,effects:[...e]})}drain(){return this.queue.shift()}clear(){this.queue.length=0}};function _r(e,t,n,r,i,a){let o=vr(e.effects,n,r,a);if(r.addEntry(L(j(e.message))),e.interaction!==void 0&&i.enqueueInteraction(e.interaction),o.length>0&&i.enqueueEffects(o),t.isInitialized){let e=t.getContextState();r.setContextState({percentage:e.usedPercentage,usedTokens:e.usedTokens,maxTokens:e.maxTokens})}}function vr(e,t,n,r){if(e===void 0||e.length===0)return[];let i=[];for(let a of e){if(a.type===`conversation-history-cleared`){n.clearHistory();continue}if(a.type===`plugin-registry-reload-requested`){r?.(t);continue}i.push(a)}return i}function yr(e){return e.toLowerCase().replace(/[^a-z0-9\s-]/g,``).trim().replace(/\s+/g,`-`).replace(/-+/g,`-`).slice(0,60)}async function br(e,t){let n=t.slice(0,200),r=await e.chat([j(`You generate short session titles. Respond with ONLY a 3-5 word lowercase-hyphenated title (e.g. refactor-auth-middleware). No explanation, no punctuation, no quotes.`),M(n)],{maxTokens:20}),i=yr(typeof r.content==`string`?r.content:``);return!i||i.length<3?yr(t):i}function xr(e,t){let n=null;return{schedule(){n||=setTimeout(()=>{n=null,e()},t)},flush(){n&&=(clearTimeout(n),null)}}}var Sr=class{history=[];streamingText=``;activeTools=[];isThinking=!1;isAborting=!1;pendingPrompt=null;contextState={percentage:0,usedTokens:0,maxTokens:0};executionWorkspaceSnapshot=null;selectedExecutionEntryId;onChange=null;streamBuf=``;debouncedStreamNotify=xr(()=>this.notify(),300);notify(){this.onChange?.()}onTextDelta=e=>{this.streamBuf+=e,this.streamingText=this.streamBuf,this.debouncedStreamNotify.schedule()};onToolStart=e=>{this.activeTools=[...this.activeTools,e],this.notify()};onToolEnd=e=>{let t=this.activeTools.findLastIndex(t=>t.toolName===e.toolName&&t.isRunning);if(t!==-1){let n=[...this.activeTools];n[t]=e,this.activeTools=n}this.notify()};onThinking=e=>{this.isThinking=e,e?(this.debouncedStreamNotify.flush(),this.streamBuf=``,this.streamingText=``,this.activeTools=[]):(this.isAborting=!1,this.activeTools=[]),this.notify()};onComplete=e=>{this.debouncedStreamNotify.flush(),this.streamBuf=``,this.streamingText=``,this.activeTools=[],this.contextState={percentage:e.contextState.usedPercentage,usedTokens:e.contextState.usedTokens,maxTokens:e.contextState.maxTokens},this.notify()};onInterrupted=()=>{this.debouncedStreamNotify.flush(),this.streamBuf=``,this.streamingText=``,this.activeTools=[],this.notify()};onError=()=>{this.debouncedStreamNotify.flush(),this.streamBuf=``,this.streamingText=``,this.activeTools=[],this.notify()};onContextUpdate=e=>{this.setContextState({percentage:e.usedPercentage,usedTokens:e.usedTokens,maxTokens:e.maxTokens})};syncHistory(e){e.length!==0&&(this.history=e.length>100?e.slice(-100):[...e],this.notify())}addEntry(e){let t=[...this.history,e];this.history=t.length>100?t.slice(-100):t,this.notify()}clearHistory(){this.history=[],this.debouncedStreamNotify.flush(),this.streamBuf=``,this.streamingText=``,this.activeTools=[],this.notify()}setPendingPrompt(e){this.pendingPrompt=e,this.notify()}setAborting(e){this.isAborting=e,this.notify()}setContextState(e){this.contextState=e,this.notify()}syncExecutionWorkspaceSnapshot(e){let t=this.selectedExecutionEntryId,n=t!==void 0&&e.entries.some(e=>e.id===t)?t:e.selectedEntryId??e.entries[0]?.id;this.executionWorkspaceSnapshot={...e,...n?{selectedEntryId:n}:{}},this.selectedExecutionEntryId=n,this.notify()}selectExecutionWorkspaceEntry(e){this.executionWorkspaceSnapshot?.entries.some(t=>t.id===e)&&(this.selectedExecutionEntryId=e,this.executionWorkspaceSnapshot={...this.executionWorkspaceSnapshot,selectedEntryId:e},this.notify())}};const Cr=15e3;var wr=class{stateManager;interactiveSession;registry;commandEffectQueue;opts;submitHandler=null;actionQueue=[];processingAction=!1;permissionRequest=null;pendingAction=null;availableCommands=[];isShuttingDown=!1;sessionName;autoNameTriggered=!1;sessionStarted=!1;initPoller=null;permissionQueue=[];processingPermission=!1;onChange=null;constructor(e){this.opts=e,this.sessionName=e.sessionName,this.stateManager=new Sr,this.stateManager.onChange=()=>this.onChange?.(),this.interactiveSession=this.createSession(),this.registry=this.createRegistry(),this.commandEffectQueue=new gr}createSession(){let e=this.opts;return new n({cwd:e.cwd,provider:e.provider,permissionMode:e.permissionMode,maxTurns:e.maxTurns,permissionHandler:(e,t)=>this.handlePermissionRequest(e,t),sessionStore:e.sessionStore,resumeSessionId:e.resumeSessionId,forkSession:e.forkSession,sessionName:e.sessionName,backgroundTaskRunners:e.backgroundTaskRunners,subagentRunnerFactory:e.subagentRunnerFactory,commandModules:e.commandModules,commandHostAdapters:e.commandHostAdapters,shellExec:e.shellExec,language:e.language,agentName:e.agentName,systemPrompt:e.systemPrompt,appendSystemPrompt:e.appendSystemPrompt,allowedTools:e.allowedTools,deniedTools:e.deniedTools})}createRegistry(){let t=new e;for(let e of this.opts.commandModules??[])t.addModule(e);return this.opts.reloadPluginCommandSource?.(t),t}onSubmit(e){this.submitHandler=e}write(e){}async requestAction(e){return new Promise(t=>{this.actionQueue.push({action:e,resolve:t}),this.processNextAction()})}setAvailableCommands(e){this.availableCommands=e,this.onChange?.()}setBusy(e){this.stateManager.onThinking(e)}async start(){this.sessionStarted||(this.sessionStarted=!0,this.wireSessionEvents(),this.syncRestoredHistory(),this.startInitCheck(),this.opts.transportRegistry&&await this.opts.transportRegistry.startAll(this.interactiveSession))}async stop(){this.onChange=null,this.sessionStarted=!1,this.stopInitCheck(),this.opts.transportRegistry&&await this.opts.transportRegistry.stopAll()}getSession(){return this.interactiveSession}getRegistry(){return this.registry}getCommandEffectQueue(){return this.commandEffectQueue}abort(){this.stateManager.setAborting(!0),this.interactiveSession.abort()}cancelQueue(){this.interactiveSession.cancelQueue(),this.stateManager.setPendingPrompt(null)}async shutdown(e){this.isShuttingDown||(this.isShuttingDown=!0,this.stateManager.addEntry(L(j(`Shutting down...`))),this.onChange?.(),await this.interactiveSession.shutdown({reason:e?.reason??`prompt_input_exit`,message:`CLI shutdown`}))}selectExecutionWorkspaceEntry(e){this.stateManager.selectExecutionWorkspaceEntry(e)}async readExecutionWorkspaceDetail(e){return this.interactiveSession.readExecutionWorkspaceDetail(e)}async sendAgentJob(e,t){await this.interactiveSession.sendAgentJob(e,t)}setSessionName(e){this.sessionName=e,this.interactiveSession.setName(e),this.onChange?.()}resolveAction(e){let t=this.actionQueue[0];t&&(this.actionQueue.shift(),this.processingAction=!1,this.pendingAction=null,this.onChange?.(),t.resolve(e),this.processNextAction())}async handleInput(e){if(!e.startsWith(`/`)){await this.interactiveSession.submit(e),this.stateManager.setPendingPrompt(this.interactiveSession.getPendingPrompt());return}await this.handleSlashCommand(e)}async handleSlashCommand(e){let t=e.slice(1).split(/\s+/),n=t[0]?.toLowerCase()??``,r=t.slice(1).join(` `),i=await this.interactiveSession.executeCommand(n,r);if(i){if(i.effects?.some(e=>e.type===`session-execution-started`)){this.stateManager.setPendingPrompt(this.interactiveSession.getPendingPrompt());return}_r(i,this.interactiveSession,this.registry,this.stateManager,this.commandEffectQueue,this.opts.reloadPluginCommandSource);return}this.stateManager.addEntry(L(j(`Unknown command "/${n}". Type /help for help.`)))}processNextAction(){if(this.processingAction)return;let e=this.actionQueue[0];if(!e){this.pendingAction=null,this.onChange?.();return}this.processingAction=!0,this.pendingAction=e.action,this.onChange?.()}handlePermissionRequest(e,t){return new Promise(n=>{this.permissionQueue.push({toolName:e,toolArgs:t,resolve:n}),this.processNextPermission()})}processNextPermission(){if(this.processingPermission)return;let e=this.permissionQueue[0];if(!e){this.permissionRequest=null,this.onChange?.();return}this.processingPermission=!0,this.permissionRequest={toolName:e.toolName,toolArgs:e.toolArgs,resolve:t=>{this.permissionQueue.shift(),this.processingPermission=!1,this.permissionRequest=null,e.resolve(t),setTimeout(()=>this.processNextPermission(),0)}},this.onChange?.()}wireSessionEvents(){let e=this.interactiveSession,t=this.stateManager;e.on(`user_message`,e=>{this.handleAutoNaming(e),t.addEntry(L(M(e)))}),e.on(`text_delta`,t.onTextDelta),e.on(`tool_start`,t.onToolStart),e.on(`tool_end`,t.onToolEnd),e.on(`thinking`,t.onThinking),e.on(`complete`,n=>{t.onComplete(n),t.syncHistory(e.getFullHistory())}),e.on(`interrupted`,t.onInterrupted),e.on(`error`,()=>{t.onError(),t.syncHistory(e.getFullHistory())}),e.on(`context_update`,t.onContextUpdate),e.on(`compact`,()=>{t.syncHistory(e.getFullHistory())}),e.on(`skill_activation`,()=>{t.syncHistory(e.getFullHistory())}),e.on(`memory_event`,()=>{t.syncHistory(e.getFullHistory())}),e.on(`execution_workspace_event`,e=>{t.syncExecutionWorkspaceSnapshot(e.snapshot)})}handleAutoNaming(e){this.autoNameTriggered||this.opts.sessionName||this.interactiveSession.getName()||(this.autoNameTriggered=!0,br(this.opts.provider,e).then(e=>{this.interactiveSession.setName(e),this.sessionName=e,this.opts.onAutoNamed?.(e),this.onChange?.()}).catch(()=>{this.autoNameTriggered=!1}))}syncRestoredHistory(){if(this.stateManager.history.length===0){let e=this.interactiveSession.getFullHistory();e.length>0&&this.stateManager.syncHistory(e)}}startInitCheck(){this.initPoller=hr({check:()=>this.runInitCheck(),intervalMs:200,timeoutMs:Cr,onReady:()=>void 0,onFailure:e=>this.onInitFailure(e)}),this.initPoller.start()}runInitCheck(){let e=this.interactiveSession.getContextState();this.stateManager.setContextState({percentage:e.usedPercentage,usedTokens:e.usedTokens,maxTokens:e.maxTokens});let t=this.interactiveSession.getFullHistory();t.length>0&&this.stateManager.syncHistory(t),this.syncExecutionWorkspace()}onInitFailure(e){let t=e.kind===`timeout`?`Session initialization timed out after ${Cr/1e3}s${e.lastError?` (last error: ${e.lastError.message})`:``}`:`Session initialization failed: ${e.error.message}`;this.stateManager.onError(),this.stateManager.addEntry({id:`session-init-error-${Date.now()}`,timestamp:new Date,category:`event`,type:`session-init-error`,data:{message:t}})}stopInitCheck(){this.initPoller?.stop(),this.initPoller=null}syncExecutionWorkspace(){try{this.stateManager.syncExecutionWorkspaceSnapshot(this.interactiveSession.getExecutionWorkspaceSnapshot({selectedEntryId:this.stateManager.selectedExecutionEntryId}))}catch{}}};function Tr(e,t){return{cwd:e.cwd,provider:e.provider,permissionMode:e.permissionMode,maxTurns:e.maxTurns,allowedTools:e.allowedTools,deniedTools:e.deniedTools,sessionStore:e.sessionStore,resumeSessionId:t,forkSession:e.forkSession,sessionName:e.sessionName,backgroundTaskRunners:e.backgroundTaskRunners,subagentRunnerFactory:e.subagentRunnerFactory,commandModules:e.commandModules,commandHostAdapters:e.commandHostAdapters,shellExec:e.shellExec,transportRegistry:e.transportRegistry,language:e.language,reloadPluginCommandSource:e.reloadPluginCommandSource,agentName:e.agentName}}async function Er(e){process.on(`unhandledRejection`,e=>{process.stderr.write(`\n[UNHANDLED REJECTION] ${e}\n`),e instanceof Error&&process.stderr.write(`${e.stack}\n`)}),await _(z(fr,{cwd:e.cwd,createChannel:t=>new wr(Tr(e,t)),providerOverride:e.providerOverride,providerType:e.providerType,modelId:e.modelId,permissionMode:e.permissionMode,version:e.version,sessionStore:e.sessionStore,resumeSessionId:e.resumeSessionId,showSessionPickerOnStart:e.showSessionPickerOnStart,startupUpdateNotice:e.startupUpdateNotice,transportRegistry:e.transportRegistry,cliAdapter:e.cliAdapter}),{exitOnCtrlC:!1}).waitUntilExit()}var Dr=class{name=`tui`;defaultEnabled=!0;optionsSchema={};options;constructor(e){this.options=e}attach(e){}async start(){await Er(this.options)}async stop(){}validateOptions(e){return!0}};function Or({providerDefinitions:e,reloadPluginCommandSource:t}){return{getUserSettingsPath:()=>o(),readSettings:e=>u(e),writeSettings:(e,t)=>p(e,t),deleteSettings:e=>a(e),applyStatusLineSettings:(e,t)=>i(e,t),reloadPluginCommandSource:e=>{t(e)},applyActiveModelChange:(e,t,n)=>(r(e,t,n),{applied:!0}),getGitBranch:e=>d(e),getProviderDisplayName:t=>N(e,t)?.displayName??t}}export{Dr as n,Er as r,Or as t};
|
|
25
|
+
//# sourceMappingURL=tui-Btb1q88j.js.map
|