@robota-sdk/agent-transport 3.0.0-beta.66 → 3.0.0-beta.68
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.js +1 -1
- package/dist/node/{headless-B8yWkXW_.js → headless-C-Ezlo9U.js} +4 -4
- package/dist/node/headless-C-Ezlo9U.js.map +1 -0
- package/dist/node/{headless-Dp3kQVmo.cjs → headless-Cv-igy49.cjs} +3 -3
- package/dist/node/index-CP7kaYMg.d.ts.map +1 -1
- package/dist/node/{index-rGmGTQ9o.d.ts → index-D-aT_t_N.d.ts} +16 -8
- package/dist/node/index-D-aT_t_N.d.ts.map +1 -0
- package/dist/node/index-Gby9H4q2.d.ts.map +1 -1
- package/dist/node/{index-CQsMNXAh.d.ts → index-ioN9mYAD.d.ts} +16 -8
- package/dist/node/index-ioN9mYAD.d.ts.map +1 -0
- package/dist/node/index.cjs +1 -1
- package/dist/node/index.d.ts +2 -2
- package/dist/node/index.js +1 -1
- package/dist/node/tui/index.cjs +1 -1
- package/dist/node/tui/index.d.ts +2 -2
- package/dist/node/tui/index.js +1 -1
- package/dist/node/tui-87G6pg3z.js +25 -0
- package/dist/node/tui-87G6pg3z.js.map +1 -0
- package/dist/node/tui-BAtwGilM.cjs +24 -0
- package/package.json +7 -7
- package/src/headless/__tests__/headless-runner.test.ts +2 -0
- package/src/headless/headless-runner.ts +24 -3
- package/src/headless/headless-stream-json.ts +8 -3
- package/src/headless/print-terminal.ts +0 -1
- package/src/tui/App.tsx +16 -12
- package/src/tui/CjkTextInput.tsx +1 -3
- package/src/tui/ContextWarningBanner.tsx +34 -0
- package/src/tui/InputArea.tsx +1 -1
- package/src/tui/__tests__/command-effect-handler.test.ts +0 -1
- package/src/tui/__tests__/confirm-permission-flow.test.ts +40 -1
- package/src/tui/__tests__/session-naming.test.ts +64 -0
- package/src/tui/create-default-tui-cli-adapter.ts +2 -3
- package/src/tui/flows/permission-prompt-flow.ts +13 -4
- package/src/tui/hooks/command-effect-handler.ts +0 -5
- package/src/tui/hooks/side-effects-types.ts +0 -3
- package/src/tui/hooks/use-interactive-session-init.ts +4 -0
- package/src/tui/hooks/useInteractiveSession.ts +24 -1
- package/src/tui/hooks/useSideEffects.ts +0 -37
- package/src/tui/index.ts +1 -1
- package/src/tui/render.tsx +24 -8
- package/src/tui/session-naming.ts +33 -0
- package/src/tui/tui-transport.ts +3 -3
- package/src/tui/types.ts +3 -2
- package/dist/node/headless-B8yWkXW_.js.map +0 -1
- package/dist/node/index-CQsMNXAh.d.ts.map +0 -1
- package/dist/node/index-rGmGTQ9o.d.ts.map +0 -1
- package/dist/node/tui-B8G3yHrL.cjs +0 -24
- package/dist/node/tui-DUIfVw3G.js +0 -25
- package/dist/node/tui-DUIfVw3G.js.map +0 -1
- package/src/tui/__tests__/model-change-side-effect.test.ts +0 -91
- package/src/tui/hooks/model-change-side-effect.ts +0 -63
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../headless-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../headless-Cv-igy49.cjs`);exports.PrintTerminal=e.i,exports.createHeadlessRunner=e.n,exports.createHeadlessTransport=e.t,exports.promptInput=e.r;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,n as t,r as n,t as r}from"../headless-
|
|
1
|
+
import{i as e,n as t,r as n,t as r}from"../headless-C-Ezlo9U.js";export{e as PrintTerminal,t as createHeadlessRunner,r as createHeadlessTransport,n as promptInput};
|
|
@@ -7,9 +7,9 @@ Set your API key via environment variable instead:
|
|
|
7
7
|
`){a.removeListener(`data`,s),a.setRawMode(o??!1),a.pause(),process.stdout.write(`
|
|
8
8
|
`),n(i.trim());return}else r===``||r===`\b`?i.length>0&&(i=i.slice(0,-1),process.stdout.write(`\b \b`)):r===``?(a.removeListener(`data`,s),a.setRawMode(o??!1),a.pause(),process.stdout.write(`
|
|
9
9
|
`),process.exit(0)):r.charCodeAt(0)>=32&&(i+=r,process.stdout.write(t?`*`:r))};a.on(`data`,s)});function i(e){let t=e.trimStart();if(!t.startsWith(`/`))return null;let[n=``,...r]=t.slice(1).split(/\s+/);return n.length===0?null:{name:n,args:r.join(` `)}}async function a(e,t){let n=i(t);if(!n)return{kind:`not-slash`};let r=await e.executeCommand(n.name,n.args);return r?r.effects?.some(e=>e.type===`session-execution-started`)?{kind:`session-execution`}:{kind:`command-result`,result:r}:{kind:`command-result`,result:{message:`Unknown command "/${n.name}".`,success:!1}}}function o(e,n,r){let i=JSON.stringify({type:`stream_event`,event:r,session_id:n(e),uuid:t()});process.stdout.write(i+`
|
|
10
|
-
`)}function s(e,t,n,r){let i=n=>o(e,t,n),a=e=>i({type:`content_block_delta`,delta:{type:`text_delta`,text:e}}),s=e=>i({type:`background_task_event`,background_task_event:e}),l=e=>i({type:`background_job_group_event`,background_job_group_event:e}),u=()=>c(e,{onTextDelta:a,onBackgroundTaskEvent:s,onBackgroundJobGroupEvent:l,onComplete:d,onInterrupted:f,onError:p}),d=i=>{u(),n(t(e),i.response,`success`),r(0)},f=i=>{u(),n(t(e),i.response,`success`),r(0)},p=i=>{u(),n(t(e),``,`error
|
|
11
|
-
`)}function
|
|
10
|
+
`)}function s(e,t,n,r){let i=n=>o(e,t,n),a=e=>i({type:`content_block_delta`,delta:{type:`text_delta`,text:e}}),s=e=>i({type:`background_task_event`,background_task_event:e}),l=e=>i({type:`background_job_group_event`,background_job_group_event:e}),u=()=>c(e,{onTextDelta:a,onBackgroundTaskEvent:s,onBackgroundJobGroupEvent:l,onComplete:d,onInterrupted:f,onError:p}),d=i=>{u(),n(t(e),i.response,`success`),r(0)},f=i=>{u(),n(t(e),i.response,`success`),r(0)},p=i=>{u(),n(t(e),``,`error`,i),r(1)};return e.on(`text_delta`,a),e.on(`background_task_event`,s),e.on(`background_job_group_event`,l),e.on(`complete`,d),e.on(`interrupted`,f),e.on(`error`,p),u}function c(e,t){e.off(`text_delta`,t.onTextDelta),e.off(`background_task_event`,t.onBackgroundTaskEvent),e.off(`background_job_group_event`,t.onBackgroundJobGroupEvent),e.off(`complete`,t.onComplete),e.off(`interrupted`,t.onInterrupted),e.off(`error`,t.onError)}function l(e){let{session:t,outputFormat:n}=e;return{run:e=>n===`text`?p(t,e):n===`json`?m(t,e):h(t,e)}}function u(e){let t=e.message.toLowerCase();return t.includes(`api key`)||t.includes(`no provider`)||t.includes(`provider`)?`config_error`:t.includes(`tool`)||t.includes(`execution`)?`tool_error`:`api_error`}function d(e,t,n,r){let i={type:`result`,result:t,session_id:e,subtype:n};n===`error`&&r!==void 0&&(i.error_code=u(r));let a=JSON.stringify(i);process.stdout.write(a+`
|
|
11
|
+
`)}function f(e){try{return e.getSession().getSessionId()}catch{return``}}function p(e,t){return new Promise(n=>{let r=()=>{e.off(`complete`,i),e.off(`interrupted`,o),e.off(`error`,s)},i=e=>{r(),process.stdout.write(e.response+`
|
|
12
12
|
`),n(0)},o=e=>{r(),e.response&&process.stdout.write(e.response+`
|
|
13
13
|
`),n(0)},s=e=>{r(),n(1)};e.on(`complete`,i),e.on(`interrupted`,o),e.on(`error`,s),a(e,t).then(i=>{if(i.kind===`command-result`){r(),process.stdout.write(i.result.message+`
|
|
14
|
-
`),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}function
|
|
15
|
-
//# sourceMappingURL=headless-
|
|
14
|
+
`),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}function m(e,t){return new Promise(n=>{let r=()=>{e.off(`complete`,i),e.off(`interrupted`,o),e.off(`error`,s)},i=t=>{r(),d(f(e),t.response,`success`),n(0)},o=t=>{r(),d(f(e),t.response,`success`),n(0)},s=t=>{r(),d(f(e),``,`error`,t),n(1)};e.on(`complete`,i),e.on(`interrupted`,o),e.on(`error`,s),a(e,t).then(i=>{if(i.kind===`command-result`){r(),d(f(e),i.result.message,i.result.success?`success`:`error`),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}function h(e,t){return new Promise(n=>{let r=s(e,f,d,n);a(e,t).then(i=>{if(i.kind===`command-result`){r(),d(f(e),i.result.message,i.result.success?`success`:`error`),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}function g(e){let t=null,n=0;return{name:`headless`,attach(e){t=e},async start(){if(!t)throw Error(`No session attached. Call attach() first.`);n=await l({session:t,outputFormat:e.outputFormat}).run(e.prompt)},async stop(){},getExitCode(){return n}}}export{n as i,l as n,r,g as t};
|
|
15
|
+
//# sourceMappingURL=headless-C-Ezlo9U.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headless-C-Ezlo9U.js","names":[],"sources":["../../src/headless/print-terminal.ts","../../src/headless/cli-input.ts","../../src/headless/headless-stream-json.ts","../../src/headless/headless-runner.ts","../../src/headless/headless-transport.ts"],"sourcesContent":["/**\n * ITerminalOutput implementation for print mode (-p).\n *\n * Writes to stdout/stderr directly. The readline-based prompt and select are\n * only invoked if the agent triggers a permission-gated tool, which is rare in\n * one-shot print mode but must still work correctly.\n */\n\nimport * as readline from 'node:readline';\nimport type { ITerminalOutput, ISpinner } from '@robota-sdk/agent-core';\n\nexport class PrintTerminal implements ITerminalOutput {\n write(text: string): void {\n process.stdout.write(text);\n }\n writeLine(text: string): void {\n process.stdout.write(text + '\\n');\n }\n writeMarkdown(md: string): void {\n process.stdout.write(md);\n }\n writeError(text: string): void {\n process.stderr.write(text + '\\n');\n }\n prompt(question: string): Promise<string> {\n return new Promise<string>((resolve) => {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n terminal: false,\n historySize: 0,\n });\n rl.question(question, (answer) => {\n rl.close();\n resolve(answer);\n });\n });\n }\n async select(options: string[], initialIndex = 0): Promise<number> {\n for (let i = 0; i < options.length; i++) {\n const marker = i === initialIndex ? '>' : ' ';\n process.stdout.write(` ${marker} ${i + 1}) ${options[i]}\\n`);\n }\n const answer = await this.prompt(\n ` Choose [1-${options.length}] (default: ${options[initialIndex]}): `,\n );\n const trimmed = answer.trim().toLowerCase();\n if (trimmed === '') return initialIndex;\n const num = parseInt(trimmed, 10);\n if (!isNaN(num) && num >= 1 && num <= options.length) return num - 1;\n return initialIndex;\n }\n spinner(_message: string): ISpinner {\n return { stop(): void {}, update(): void {} };\n }\n}\n","const PRINTABLE_ASCII_START = 32;\n\nexport const promptInput = (label: string, masked = false): Promise<string> =>\n new Promise<string>((resolve, reject) => {\n process.stdout.write(label);\n let input = '';\n const stdin = process.stdin;\n const wasRaw = stdin.isRaw;\n if (!stdin.isTTY) {\n reject(\n new Error(\n 'Cannot prompt for input: stdin is not a TTY.\\n' +\n 'Set your API key via environment variable instead:\\n' +\n ' ANTHROPIC_API_KEY=<key> robota\\n' +\n ' OPENAI_API_KEY=<key> robota',\n ),\n );\n return;\n }\n stdin.setRawMode(true);\n stdin.resume();\n stdin.setEncoding('utf8');\n const onData = (data: string): void => {\n for (const ch of data) {\n if (ch === '\\r' || ch === '\\n') {\n stdin.removeListener('data', onData);\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n process.stdout.write('\\n');\n resolve(input.trim());\n return;\n } else if (ch === '\\x7f' || ch === '\\b') {\n if (input.length > 0) {\n input = input.slice(0, -1);\n process.stdout.write('\\b \\b');\n }\n } else if (ch === '\\x03') {\n stdin.removeListener('data', onData);\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n process.stdout.write('\\n');\n process.exit(0);\n } else if (ch.charCodeAt(0) >= PRINTABLE_ASCII_START) {\n input += ch;\n process.stdout.write(masked ? '*' : ch);\n }\n }\n };\n stdin.on('data', onData);\n });\n","import { randomUUID } from 'node:crypto';\n\nimport type {\n IInteractiveSession,\n IExecutionResult,\n ICommandResult,\n TBackgroundJobGroupEvent,\n TBackgroundTaskEvent,\n} from '@robota-sdk/agent-framework';\n\ntype TSlashCommandExecution =\n | { readonly kind: 'not-slash' }\n | { readonly kind: 'command-result'; readonly result: ICommandResult }\n | { readonly kind: 'session-execution' };\n\nfunction parseSlashCommand(prompt: string): { name: string; args: string } | null {\n const trimmed = prompt.trimStart();\n if (!trimmed.startsWith('/')) return null;\n const withoutSlash = trimmed.slice(1);\n const [name = '', ...args] = withoutSlash.split(/\\s+/);\n if (name.length === 0) return null;\n return { name, args: args.join(' ') };\n}\n\nexport async function executeSlashCommandIfPresent(\n session: IInteractiveSession,\n prompt: string,\n): Promise<TSlashCommandExecution> {\n const command = parseSlashCommand(prompt);\n if (!command) return { kind: 'not-slash' };\n\n const result = await session.executeCommand(command.name, command.args);\n if (result) {\n if (result.effects?.some((effect) => effect.type === 'session-execution-started')) {\n return { kind: 'session-execution' };\n }\n return { kind: 'command-result', result };\n }\n return {\n kind: 'command-result',\n result: { message: `Unknown command \"/${command.name}\".`, success: false },\n };\n}\n\ntype TStreamJsonEvent =\n | {\n type: 'content_block_delta';\n delta: { type: 'text_delta'; text: string };\n }\n | {\n type: 'background_task_event';\n background_task_event: TBackgroundTaskEvent;\n }\n | {\n type: 'background_job_group_event';\n background_job_group_event: TBackgroundJobGroupEvent;\n };\n\ninterface IStreamJsonHandlers {\n onTextDelta: (text: string) => void;\n onBackgroundTaskEvent: (event: TBackgroundTaskEvent) => void;\n onBackgroundJobGroupEvent: (event: TBackgroundJobGroupEvent) => void;\n onComplete: (result: IExecutionResult) => void;\n onInterrupted: (result: IExecutionResult) => void;\n onError: (error: Error) => void;\n}\n\nexport function writeStreamJsonEvent(\n session: IInteractiveSession,\n getSessionId: (s: IInteractiveSession) => string,\n event: TStreamJsonEvent,\n): void {\n const output = JSON.stringify({\n type: 'stream_event',\n event,\n session_id: getSessionId(session),\n uuid: randomUUID(),\n });\n process.stdout.write(output + '\\n');\n}\n\nexport function subscribeStreamJsonEvents(\n session: IInteractiveSession,\n getSessionId: (s: IInteractiveSession) => string,\n writeJsonResult: (\n sessionId: string,\n result: string,\n subtype: 'success' | 'error',\n error?: Error,\n ) => void,\n resolve: (exitCode: number) => void,\n): () => void {\n const emit = (event: TStreamJsonEvent): void =>\n writeStreamJsonEvent(session, getSessionId, event);\n\n const onTextDelta = (text: string): void =>\n emit({ type: 'content_block_delta', delta: { type: 'text_delta', text } });\n const onBackgroundTaskEvent = (event: TBackgroundTaskEvent): void =>\n emit({ type: 'background_task_event', background_task_event: event });\n const onBackgroundJobGroupEvent = (event: TBackgroundJobGroupEvent): void =>\n emit({ type: 'background_job_group_event', background_job_group_event: event });\n\n const cleanup = (): void =>\n unsubscribeStreamJsonEvents(session, {\n onTextDelta,\n onBackgroundTaskEvent,\n onBackgroundJobGroupEvent,\n onComplete,\n onInterrupted,\n onError,\n });\n\n const onComplete = (result: IExecutionResult): void => {\n cleanup();\n writeJsonResult(getSessionId(session), result.response, 'success');\n resolve(0);\n };\n const onInterrupted = (result: IExecutionResult): void => {\n cleanup();\n writeJsonResult(getSessionId(session), result.response, 'success');\n resolve(0);\n };\n const onError = (error: Error): void => {\n cleanup();\n writeJsonResult(getSessionId(session), '', 'error', error);\n resolve(1);\n };\n\n session.on('text_delta', onTextDelta);\n session.on('background_task_event', onBackgroundTaskEvent);\n session.on('background_job_group_event', onBackgroundJobGroupEvent);\n session.on('complete', onComplete);\n session.on('interrupted', onInterrupted);\n session.on('error', onError);\n return cleanup;\n}\n\nfunction unsubscribeStreamJsonEvents(\n session: IInteractiveSession,\n handlers: IStreamJsonHandlers,\n): void {\n session.off('text_delta', handlers.onTextDelta);\n session.off('background_task_event', handlers.onBackgroundTaskEvent);\n session.off('background_job_group_event', handlers.onBackgroundJobGroupEvent);\n session.off('complete', handlers.onComplete);\n session.off('interrupted', handlers.onInterrupted);\n session.off('error', handlers.onError);\n}\n","import { executeSlashCommandIfPresent, subscribeStreamJsonEvents } from './headless-stream-json.js';\n\nimport type { IInteractiveSession, IExecutionResult } from '@robota-sdk/agent-framework';\n\nexport type TOutputFormat = 'text' | 'json' | 'stream-json';\n\nexport interface IHeadlessRunnerOptions {\n session: IInteractiveSession;\n outputFormat: TOutputFormat;\n}\n\nexport function createHeadlessRunner(options: IHeadlessRunnerOptions): {\n run: (prompt: string) => Promise<number>;\n} {\n const { session, outputFormat } = options;\n return {\n run: (prompt: string): Promise<number> => {\n if (outputFormat === 'text') return runTextFormat(session, prompt);\n if (outputFormat === 'json') return runJsonFormat(session, prompt);\n return runStreamJsonFormat(session, prompt);\n },\n };\n}\n\nexport function resolveErrorCode(error: Error): string {\n const msg = error.message.toLowerCase();\n if (msg.includes('api key') || msg.includes('no provider') || msg.includes('provider')) {\n return 'config_error';\n }\n if (msg.includes('tool') || msg.includes('execution')) {\n return 'tool_error';\n }\n return 'api_error';\n}\n\nexport function writeJsonResult(\n sessionId: string,\n result: string,\n subtype: 'success' | 'error',\n error?: Error,\n): void {\n const payload: Record<string, unknown> = {\n type: 'result',\n result,\n session_id: sessionId,\n subtype,\n };\n if (subtype === 'error' && error !== undefined) {\n payload['error_code'] = resolveErrorCode(error);\n }\n const output = JSON.stringify(payload);\n process.stdout.write(output + '\\n');\n}\n\nexport function getSessionId(session: IInteractiveSession): string {\n try {\n return session.getSession().getSessionId();\n } catch {\n // allow-fallback: session may not be initialized yet\n return '';\n }\n}\n\nfunction runTextFormat(session: IInteractiveSession, prompt: string): Promise<number> {\n return new Promise<number>((resolve) => {\n const cleanup = (): void => {\n session.off('complete', onComplete);\n session.off('interrupted', onInterrupted);\n session.off('error', onError);\n };\n const onComplete = (result: IExecutionResult): void => {\n cleanup();\n process.stdout.write(result.response + '\\n');\n resolve(0);\n };\n const onInterrupted = (result: IExecutionResult): void => {\n cleanup();\n if (result.response) process.stdout.write(result.response + '\\n');\n resolve(0);\n };\n const onError = (_error: Error): void => {\n cleanup();\n resolve(1);\n };\n\n session.on('complete', onComplete);\n session.on('interrupted', onInterrupted);\n session.on('error', onError);\n\n void executeSlashCommandIfPresent(session, prompt).then((cmd) => {\n if (cmd.kind === 'command-result') {\n cleanup();\n process.stdout.write(cmd.result.message + '\\n');\n resolve(cmd.result.success ? 0 : 1);\n return;\n }\n if (cmd.kind !== 'session-execution') void session.submit(prompt);\n });\n });\n}\n\nfunction runJsonFormat(session: IInteractiveSession, prompt: string): Promise<number> {\n return new Promise<number>((resolve) => {\n const cleanup = (): void => {\n session.off('complete', onComplete);\n session.off('interrupted', onInterrupted);\n session.off('error', onError);\n };\n const onComplete = (result: IExecutionResult): void => {\n cleanup();\n writeJsonResult(getSessionId(session), result.response, 'success');\n resolve(0);\n };\n const onInterrupted = (result: IExecutionResult): void => {\n cleanup();\n writeJsonResult(getSessionId(session), result.response, 'success');\n resolve(0);\n };\n const onError = (error: Error): void => {\n cleanup();\n writeJsonResult(getSessionId(session), '', 'error', error);\n resolve(1);\n };\n\n session.on('complete', onComplete);\n session.on('interrupted', onInterrupted);\n session.on('error', onError);\n\n void executeSlashCommandIfPresent(session, prompt).then((cmd) => {\n if (cmd.kind === 'command-result') {\n cleanup();\n writeJsonResult(\n getSessionId(session),\n cmd.result.message,\n cmd.result.success ? 'success' : 'error',\n );\n resolve(cmd.result.success ? 0 : 1);\n return;\n }\n if (cmd.kind !== 'session-execution') void session.submit(prompt);\n });\n });\n}\n\nfunction runStreamJsonFormat(session: IInteractiveSession, prompt: string): Promise<number> {\n return new Promise<number>((resolve) => {\n const cleanup = subscribeStreamJsonEvents(session, getSessionId, writeJsonResult, resolve);\n\n void executeSlashCommandIfPresent(session, prompt).then((cmd) => {\n if (cmd.kind === 'command-result') {\n cleanup();\n writeJsonResult(\n getSessionId(session),\n cmd.result.message,\n cmd.result.success ? 'success' : 'error',\n );\n resolve(cmd.result.success ? 0 : 1);\n return;\n }\n if (cmd.kind !== 'session-execution') void session.submit(prompt);\n });\n });\n}\n","/**\n * ITransportAdapter implementation for headless transport.\n *\n * Wraps createHeadlessRunner into the unified ITransportAdapter interface.\n * After start() completes, getExitCode() returns the runner's exit code.\n */\n\nimport { createHeadlessRunner } from './headless-runner.js';\n\nimport type { TOutputFormat } from './headless-runner.js';\nimport type { IInteractiveSession } from '@robota-sdk/agent-framework';\nimport type { ITransportAdapter } from '@robota-sdk/agent-interface-transport';\n\nexport interface IHeadlessTransportOptions {\n /** Output format: 'text', 'json', or 'stream-json'. */\n outputFormat: TOutputFormat;\n /** The prompt to execute. */\n prompt: string;\n}\n\nexport function createHeadlessTransport(\n options: IHeadlessTransportOptions,\n): ITransportAdapter<IInteractiveSession> & { getExitCode(): number } {\n let session: IInteractiveSession | null = null;\n let exitCode = 0;\n\n return {\n name: 'headless',\n attach(s: IInteractiveSession) {\n session = s;\n },\n async start() {\n if (!session) throw new Error('No session attached. Call attach() first.');\n const runner = createHeadlessRunner({ session, outputFormat: options.outputFormat });\n exitCode = await runner.run(options.prompt);\n },\n async stop() {\n /* no-op: headless runner completes in start() */\n },\n getExitCode() {\n return exitCode;\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -7,8 +7,8 @@ Set your API key via environment variable instead:
|
|
|
7
7
|
`){a.removeListener(`data`,s),a.setRawMode(o??!1),a.pause(),process.stdout.write(`
|
|
8
8
|
`),n(i.trim());return}else r===``||r===`\b`?i.length>0&&(i=i.slice(0,-1),process.stdout.write(`\b \b`)):r===``?(a.removeListener(`data`,s),a.setRawMode(o??!1),a.pause(),process.stdout.write(`
|
|
9
9
|
`),process.exit(0)):r.charCodeAt(0)>=32&&(i+=r,process.stdout.write(t?`*`:r))};a.on(`data`,s)});function a(e){let t=e.trimStart();if(!t.startsWith(`/`))return null;let[n=``,...r]=t.slice(1).split(/\s+/);return n.length===0?null:{name:n,args:r.join(` `)}}async function o(e,t){let n=a(t);if(!n)return{kind:`not-slash`};let r=await e.executeCommand(n.name,n.args);return r?r.effects?.some(e=>e.type===`session-execution-started`)?{kind:`session-execution`}:{kind:`command-result`,result:r}:{kind:`command-result`,result:{message:`Unknown command "/${n.name}".`,success:!1}}}function s(e,t,r){let i=JSON.stringify({type:`stream_event`,event:r,session_id:t(e),uuid:(0,n.randomUUID)()});process.stdout.write(i+`
|
|
10
|
-
`)}function c(e,t,n,r){let i=n=>s(e,t,n),a=e=>i({type:`content_block_delta`,delta:{type:`text_delta`,text:e}}),o=e=>i({type:`background_task_event`,background_task_event:e}),c=e=>i({type:`background_job_group_event`,background_job_group_event:e}),u=()=>l(e,{onTextDelta:a,onBackgroundTaskEvent:o,onBackgroundJobGroupEvent:c,onComplete:d,onInterrupted:f,onError:p}),d=i=>{u(),n(t(e),i.response,`success`),r(0)},f=i=>{u(),n(t(e),i.response,`success`),r(0)},p=i=>{u(),n(t(e),``,`error
|
|
11
|
-
`)}function
|
|
10
|
+
`)}function c(e,t,n,r){let i=n=>s(e,t,n),a=e=>i({type:`content_block_delta`,delta:{type:`text_delta`,text:e}}),o=e=>i({type:`background_task_event`,background_task_event:e}),c=e=>i({type:`background_job_group_event`,background_job_group_event:e}),u=()=>l(e,{onTextDelta:a,onBackgroundTaskEvent:o,onBackgroundJobGroupEvent:c,onComplete:d,onInterrupted:f,onError:p}),d=i=>{u(),n(t(e),i.response,`success`),r(0)},f=i=>{u(),n(t(e),i.response,`success`),r(0)},p=i=>{u(),n(t(e),``,`error`,i),r(1)};return e.on(`text_delta`,a),e.on(`background_task_event`,o),e.on(`background_job_group_event`,c),e.on(`complete`,d),e.on(`interrupted`,f),e.on(`error`,p),u}function l(e,t){e.off(`text_delta`,t.onTextDelta),e.off(`background_task_event`,t.onBackgroundTaskEvent),e.off(`background_job_group_event`,t.onBackgroundJobGroupEvent),e.off(`complete`,t.onComplete),e.off(`interrupted`,t.onInterrupted),e.off(`error`,t.onError)}function u(e){let{session:t,outputFormat:n}=e;return{run:e=>n===`text`?m(t,e):n===`json`?h(t,e):g(t,e)}}function d(e){let t=e.message.toLowerCase();return t.includes(`api key`)||t.includes(`no provider`)||t.includes(`provider`)?`config_error`:t.includes(`tool`)||t.includes(`execution`)?`tool_error`:`api_error`}function f(e,t,n,r){let i={type:`result`,result:t,session_id:e,subtype:n};n===`error`&&r!==void 0&&(i.error_code=d(r));let a=JSON.stringify(i);process.stdout.write(a+`
|
|
11
|
+
`)}function p(e){try{return e.getSession().getSessionId()}catch{return``}}function m(e,t){return new Promise(n=>{let r=()=>{e.off(`complete`,i),e.off(`interrupted`,a),e.off(`error`,s)},i=e=>{r(),process.stdout.write(e.response+`
|
|
12
12
|
`),n(0)},a=e=>{r(),e.response&&process.stdout.write(e.response+`
|
|
13
13
|
`),n(0)},s=e=>{r(),n(1)};e.on(`complete`,i),e.on(`interrupted`,a),e.on(`error`,s),o(e,t).then(i=>{if(i.kind===`command-result`){r(),process.stdout.write(i.result.message+`
|
|
14
|
-
`),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}function
|
|
14
|
+
`),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}function h(e,t){return new Promise(n=>{let r=()=>{e.off(`complete`,i),e.off(`interrupted`,a),e.off(`error`,s)},i=t=>{r(),f(p(e),t.response,`success`),n(0)},a=t=>{r(),f(p(e),t.response,`success`),n(0)},s=t=>{r(),f(p(e),``,`error`,t),n(1)};e.on(`complete`,i),e.on(`interrupted`,a),e.on(`error`,s),o(e,t).then(i=>{if(i.kind===`command-result`){r(),f(p(e),i.result.message,i.result.success?`success`:`error`),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}function g(e,t){return new Promise(n=>{let r=c(e,p,f,n);o(e,t).then(i=>{if(i.kind===`command-result`){r(),f(p(e),i.result.message,i.result.success?`success`:`error`),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}function _(e){let t=null,n=0;return{name:`headless`,attach(e){t=e},async start(){if(!t)throw Error(`No session attached. Call attach() first.`);n=await u({session:t,outputFormat:e.outputFormat}).run(e.prompt)},async stop(){},getExitCode(){return n}}}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return _}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-CP7kaYMg.d.ts","names":[],"sources":["../../src/headless/print-terminal.ts","../../src/headless/cli-input.ts","../../src/headless/headless-runner.ts","../../src/headless/headless-transport.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index-CP7kaYMg.d.ts","names":[],"sources":["../../src/headless/print-terminal.ts","../../src/headless/cli-input.ts","../../src/headless/headless-runner.ts","../../src/headless/headless-transport.ts"],"mappings":";;;;;cAWa,aAAA,YAAyB,eAAA;EACpC,KAAA,CAAM,IAAA;EAGN,SAAA,CAAU,IAAA;EAGV,aAAA,CAAc,EAAA;EAGd,UAAA,CAAW,IAAA;EAGX,MAAA,CAAO,QAAA,WAAmB,OAAA;EAcpB,MAAA,CAAO,OAAA,YAAmB,YAAA,YAAmB,OAAA;EAcnD,OAAA,CAAQ,QAAA,WAAmB,QAAA;AAAA;;;cClDhB,WAAA,GAAe,KAAA,UAAe,MAAA,eAAiB,OAAO;;;KCEvD,aAAA;AAAA,UAEK,sBAAA;EACf,OAAA,EAAS,mBAAA;EACT,YAAA,EAAc,aAAa;AAAA;AAAA,iBAGb,oBAAA,CAAqB,OAAA,EAAS,sBAAA;EAC5C,GAAA,GAAM,MAAA,aAAmB,OAAO;AAAA;;;UCCjB,yBAAA;EHuCY;EGrC3B,YAAA,EAAc,aAAa;EHJwB;EGMnD,MAAA;AAAA;AAAA,iBAGc,uBAAA,CACd,OAAA,EAAS,yBAAA,GACR,iBAAA,CAAkB,mBAAA;EAAyB,WAAA;AAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { IProviderDefinition, TPermissionMode, TUniversalValue } from "@robota-sdk/agent-core";
|
|
2
|
-
import { CommandRegistry,
|
|
3
|
-
import { IConfigurableTransport } from "@robota-sdk/agent-interface-transport";
|
|
1
|
+
import { IAIProvider, IProviderDefinition, TPermissionMode, TUniversalValue } from "@robota-sdk/agent-core";
|
|
2
|
+
import { CommandRegistry, IBackgroundTaskRunner, ICommandHostAdapters, ICommandModule, IInteractiveSession, IInteractiveSessionStore, IStatusLineCommandSettings, TShellExecFn, TStatusLineCommandSettingsPatch, TSubagentRunnerFactory } from "@robota-sdk/agent-framework";
|
|
3
|
+
import { IConfigurableTransport, ITransportRegistryView } from "@robota-sdk/agent-interface-transport";
|
|
4
4
|
import { ITuiCommandInteraction, ITuiConfirmInteraction, ITuiPickerInteraction, ITuiPickerItem, TAnyTuiCommandInteraction, TOnMissingArgsAction } from "@robota-sdk/agent-interface-tui";
|
|
5
5
|
|
|
6
6
|
//#region src/tui/tui-cli-adapter.d.ts
|
|
@@ -21,8 +21,9 @@ interface ITuiCliAdapter {
|
|
|
21
21
|
}
|
|
22
22
|
//#endregion
|
|
23
23
|
//#region src/tui/render.d.ts
|
|
24
|
-
interface
|
|
25
|
-
|
|
24
|
+
interface IRenderOptions {
|
|
25
|
+
cwd: string;
|
|
26
|
+
provider: IAIProvider;
|
|
26
27
|
providerOverride?: string | undefined;
|
|
27
28
|
providerType?: string | undefined;
|
|
28
29
|
modelId?: string;
|
|
@@ -30,13 +31,20 @@ interface ITuiRenderOptions {
|
|
|
30
31
|
permissionMode?: TPermissionMode;
|
|
31
32
|
maxTurns?: number;
|
|
32
33
|
version?: string;
|
|
34
|
+
sessionStore?: IInteractiveSessionStore;
|
|
33
35
|
resumeSessionId?: string;
|
|
34
36
|
showSessionPickerOnStart?: boolean;
|
|
35
37
|
forkSession?: boolean;
|
|
36
38
|
sessionName?: string;
|
|
39
|
+
backgroundTaskRunners?: IBackgroundTaskRunner[];
|
|
40
|
+
subagentRunnerFactory?: TSubagentRunnerFactory;
|
|
41
|
+
commandModules?: readonly ICommandModule[];
|
|
42
|
+
commandHostAdapters?: ICommandHostAdapters;
|
|
37
43
|
shellExec?: TShellExecFn;
|
|
38
44
|
startupUpdateNotice?: Promise<string | undefined>;
|
|
45
|
+
transportRegistry?: ITransportRegistryView<IInteractiveSession>;
|
|
39
46
|
cliAdapter: ITuiCliAdapter;
|
|
47
|
+
reloadPluginCommandSource?: (registry: CommandRegistry) => void;
|
|
40
48
|
agentName?: string;
|
|
41
49
|
}
|
|
42
50
|
//#endregion
|
|
@@ -46,7 +54,7 @@ declare class TuiTransport implements IConfigurableTransport<IInteractiveSession
|
|
|
46
54
|
readonly defaultEnabled = true;
|
|
47
55
|
readonly optionsSchema: {};
|
|
48
56
|
private readonly options;
|
|
49
|
-
constructor(options:
|
|
57
|
+
constructor(options: IRenderOptions);
|
|
50
58
|
attach(_session: IInteractiveSession): void;
|
|
51
59
|
start(): Promise<void>;
|
|
52
60
|
stop(): Promise<void>;
|
|
@@ -63,5 +71,5 @@ declare function createDefaultTuiCliAdapter({
|
|
|
63
71
|
reloadPluginCommandSource
|
|
64
72
|
}: IDefaultTuiCliAdapterOptions): ITuiCliAdapter;
|
|
65
73
|
//#endregion
|
|
66
|
-
export { TAnyTuiCommandInteraction as a, createDefaultTuiCliAdapter as c, ITuiCliAdapter as d, ITuiPickerItem as i, TuiTransport as l, ITuiConfirmInteraction as n, TOnMissingArgsAction as o, ITuiPickerInteraction as r, IDefaultTuiCliAdapterOptions as s, ITuiCommandInteraction as t,
|
|
67
|
-
//# sourceMappingURL=index-
|
|
74
|
+
export { TAnyTuiCommandInteraction as a, createDefaultTuiCliAdapter as c, ITuiCliAdapter as d, ITuiPickerItem as i, TuiTransport as l, ITuiConfirmInteraction as n, TOnMissingArgsAction as o, ITuiPickerInteraction as r, IDefaultTuiCliAdapterOptions as s, ITuiCommandInteraction as t, IRenderOptions as u };
|
|
75
|
+
//# sourceMappingURL=index-D-aT_t_N.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-D-aT_t_N.d.ts","names":[],"sources":["../../src/tui/tui-cli-adapter.ts","../../src/tui/render.tsx","../../src/tui/tui-transport.ts","../../src/tui/create-default-tui-cli-adapter.ts"],"mappings":";;;;;;UAOiB,cAAA;EACf,mBAAA;EACA,YAAA,CAAa,IAAA,WAAe,MAAA,SAAe,eAAA;EAC3C,aAAA,CAAc,IAAA,UAAc,QAAA,EAAU,MAAA,SAAe,eAAA;EACrD,cAAA,CAAe,IAAA;EACf,uBAAA,CACE,IAAA,UACA,KAAA,EAAO,+BAAA,GACN,0BAAA;EACH,yBAAA,CAA0B,QAAA,EAAU,eAAA;EACpC,sBAAA,CACE,GAAA,UACA,OAAA,UACA,OAAA;IAAY,gBAAA;EAAA;IACT,OAAA;EAAA;EACL,YAAA,CAAa,GAAA;EACb,sBAAA,CAAuB,IAAA;AAAA;;;UCCR,cAAA;EACf,GAAA;EACA,QAAA,EAAU,WAAA;EACV,gBAAA;EACA,YAAA;EACA,OAAA;EACA,QAAA;EACA,cAAA,GAAiB,eAAA;EACjB,QAAA;EACA,OAAA;EACA,YAAA,GAAe,wBAAA;EACf,eAAA;EACA,wBAAA;EACA,WAAA;EACA,WAAA;EACA,qBAAA,GAAwB,qBAAA;EACxB,qBAAA,GAAwB,sBAAA;EACxB,cAAA,YAA0B,cAAA;EAC1B,mBAAA,GAAsB,oBAAA;EACtB,SAAA,GAAY,YAAA;EACZ,mBAAA,GAAsB,OAAA;EACtB,iBAAA,GAAoB,sBAAA,CAAuB,mBAAA;EAC3C,UAAA,EAAY,cAAA;EACZ,yBAAA,IAA6B,QAAA,EAAU,eAAA;EACvC,SAAA;AAAA;;;cC1CW,YAAA,YAAwB,sBAAA,CAAuB,mBAAA;EAAA,SACjD,IAAA;EAAA,SACA,cAAA;EAAA,SACA,aAAA;EAAA,iBAEQ,OAAA;cAEL,OAAA,EAAS,cAAA;EAIrB,MAAA,CAAO,QAAA,EAAU,mBAAA;EAIX,KAAA,CAAA,GAAS,OAAA;EAIT,IAAA,CAAA,GAAQ,OAAA;EAId,eAAA,CAAgB,QAAA,EAAU,MAAA,SAAe,eAAA;AAAA;;;UCf1B,4BAAA;EACf,mBAAA,WAA8B,mBAAA;EAC9B,yBAAA,GAA4B,QAAA,EAAU,eAAe;AAAA;AAAA,iBAGvC,0BAAA,CAAA;EACd,mBAAA;EACA;AAAA,GACC,4BAAA,GAA+B,cAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-Gby9H4q2.d.ts","names":[],"sources":["../../src/headless/print-terminal.ts","../../src/headless/cli-input.ts","../../src/headless/headless-runner.ts","../../src/headless/headless-transport.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index-Gby9H4q2.d.ts","names":[],"sources":["../../src/headless/print-terminal.ts","../../src/headless/cli-input.ts","../../src/headless/headless-runner.ts","../../src/headless/headless-transport.ts"],"mappings":";;;;;cAWa,aAAA,YAAyB,eAAA;EACpC,KAAA,CAAM,IAAA;EAGN,SAAA,CAAU,IAAA;EAGV,aAAA,CAAc,EAAA;EAGd,UAAA,CAAW,IAAA;EAGX,MAAA,CAAO,QAAA,WAAmB,OAAA;EAcpB,MAAA,CAAO,OAAA,YAAmB,YAAA,YAAmB,OAAA;EAcnD,OAAA,CAAQ,QAAA,WAAmB,QAAA;AAAA;;;cClDhB,WAAA,GAAe,KAAA,UAAe,MAAA,eAAiB,OAAO;;;KCEvD,aAAA;AAAA,UAEK,sBAAA;EACf,OAAA,EAAS,mBAAA;EACT,YAAA,EAAc,aAAa;AAAA;AAAA,iBAGb,oBAAA,CAAqB,OAAA,EAAS,sBAAA;EAC5C,GAAA,GAAM,MAAA,aAAmB,OAAO;AAAA;;;UCCjB,yBAAA;EHuCY;EGrC3B,YAAA,EAAc,aAAa;EHJwB;EGMnD,MAAA;AAAA;AAAA,iBAGc,uBAAA,CACd,OAAA,EAAS,yBAAA,GACR,iBAAA,CAAkB,mBAAA;EAAyB,WAAA;AAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { IProviderDefinition, TPermissionMode, TUniversalValue } from "@robota-sdk/agent-core";
|
|
2
|
-
import { CommandRegistry,
|
|
1
|
+
import { IAIProvider, IProviderDefinition, TPermissionMode, TUniversalValue } from "@robota-sdk/agent-core";
|
|
2
|
+
import { CommandRegistry, IBackgroundTaskRunner, ICommandHostAdapters, ICommandModule, IInteractiveSession, IInteractiveSessionStore, IStatusLineCommandSettings, TShellExecFn, TStatusLineCommandSettingsPatch, TSubagentRunnerFactory } from "@robota-sdk/agent-framework";
|
|
3
3
|
import { ITuiCommandInteraction, ITuiConfirmInteraction, ITuiPickerInteraction, ITuiPickerItem, TAnyTuiCommandInteraction, TOnMissingArgsAction } from "@robota-sdk/agent-interface-tui";
|
|
4
|
-
import { IConfigurableTransport } from "@robota-sdk/agent-interface-transport";
|
|
4
|
+
import { IConfigurableTransport, ITransportRegistryView } from "@robota-sdk/agent-interface-transport";
|
|
5
5
|
|
|
6
6
|
//#region src/tui/tui-cli-adapter.d.ts
|
|
7
7
|
interface ITuiCliAdapter {
|
|
@@ -21,8 +21,9 @@ interface ITuiCliAdapter {
|
|
|
21
21
|
}
|
|
22
22
|
//#endregion
|
|
23
23
|
//#region src/tui/render.d.ts
|
|
24
|
-
interface
|
|
25
|
-
|
|
24
|
+
interface IRenderOptions {
|
|
25
|
+
cwd: string;
|
|
26
|
+
provider: IAIProvider;
|
|
26
27
|
providerOverride?: string | undefined;
|
|
27
28
|
providerType?: string | undefined;
|
|
28
29
|
modelId?: string;
|
|
@@ -30,13 +31,20 @@ interface ITuiRenderOptions {
|
|
|
30
31
|
permissionMode?: TPermissionMode;
|
|
31
32
|
maxTurns?: number;
|
|
32
33
|
version?: string;
|
|
34
|
+
sessionStore?: IInteractiveSessionStore;
|
|
33
35
|
resumeSessionId?: string;
|
|
34
36
|
showSessionPickerOnStart?: boolean;
|
|
35
37
|
forkSession?: boolean;
|
|
36
38
|
sessionName?: string;
|
|
39
|
+
backgroundTaskRunners?: IBackgroundTaskRunner[];
|
|
40
|
+
subagentRunnerFactory?: TSubagentRunnerFactory;
|
|
41
|
+
commandModules?: readonly ICommandModule[];
|
|
42
|
+
commandHostAdapters?: ICommandHostAdapters;
|
|
37
43
|
shellExec?: TShellExecFn;
|
|
38
44
|
startupUpdateNotice?: Promise<string | undefined>;
|
|
45
|
+
transportRegistry?: ITransportRegistryView<IInteractiveSession>;
|
|
39
46
|
cliAdapter: ITuiCliAdapter;
|
|
47
|
+
reloadPluginCommandSource?: (registry: CommandRegistry) => void;
|
|
40
48
|
agentName?: string;
|
|
41
49
|
}
|
|
42
50
|
//#endregion
|
|
@@ -46,7 +54,7 @@ declare class TuiTransport implements IConfigurableTransport<IInteractiveSession
|
|
|
46
54
|
readonly defaultEnabled = true;
|
|
47
55
|
readonly optionsSchema: {};
|
|
48
56
|
private readonly options;
|
|
49
|
-
constructor(options:
|
|
57
|
+
constructor(options: IRenderOptions);
|
|
50
58
|
attach(_session: IInteractiveSession): void;
|
|
51
59
|
start(): Promise<void>;
|
|
52
60
|
stop(): Promise<void>;
|
|
@@ -63,5 +71,5 @@ declare function createDefaultTuiCliAdapter({
|
|
|
63
71
|
reloadPluginCommandSource
|
|
64
72
|
}: IDefaultTuiCliAdapterOptions): ITuiCliAdapter;
|
|
65
73
|
//#endregion
|
|
66
|
-
export { TAnyTuiCommandInteraction as a, createDefaultTuiCliAdapter as c, ITuiCliAdapter as d, ITuiPickerItem as i, TuiTransport as l, ITuiConfirmInteraction as n, TOnMissingArgsAction as o, ITuiPickerInteraction as r, IDefaultTuiCliAdapterOptions as s, ITuiCommandInteraction as t,
|
|
67
|
-
//# sourceMappingURL=index-
|
|
74
|
+
export { TAnyTuiCommandInteraction as a, createDefaultTuiCliAdapter as c, ITuiCliAdapter as d, ITuiPickerItem as i, TuiTransport as l, ITuiConfirmInteraction as n, TOnMissingArgsAction as o, ITuiPickerInteraction as r, IDefaultTuiCliAdapterOptions as s, ITuiCommandInteraction as t, IRenderOptions as u };
|
|
75
|
+
//# sourceMappingURL=index-ioN9mYAD.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-ioN9mYAD.d.ts","names":[],"sources":["../../src/tui/tui-cli-adapter.ts","../../src/tui/render.tsx","../../src/tui/tui-transport.ts","../../src/tui/create-default-tui-cli-adapter.ts"],"mappings":";;;;;;UAOiB,cAAA;EACf,mBAAA;EACA,YAAA,CAAa,IAAA,WAAe,MAAA,SAAe,eAAA;EAC3C,aAAA,CAAc,IAAA,UAAc,QAAA,EAAU,MAAA,SAAe,eAAA;EACrD,cAAA,CAAe,IAAA;EACf,uBAAA,CACE,IAAA,UACA,KAAA,EAAO,+BAAA,GACN,0BAAA;EACH,yBAAA,CAA0B,QAAA,EAAU,eAAA;EACpC,sBAAA,CACE,GAAA,UACA,OAAA,UACA,OAAA;IAAY,gBAAA;EAAA;IACT,OAAA;EAAA;EACL,YAAA,CAAa,GAAA;EACb,sBAAA,CAAuB,IAAA;AAAA;;;UCCR,cAAA;EACf,GAAA;EACA,QAAA,EAAU,WAAA;EACV,gBAAA;EACA,YAAA;EACA,OAAA;EACA,QAAA;EACA,cAAA,GAAiB,eAAA;EACjB,QAAA;EACA,OAAA;EACA,YAAA,GAAe,wBAAA;EACf,eAAA;EACA,wBAAA;EACA,WAAA;EACA,WAAA;EACA,qBAAA,GAAwB,qBAAA;EACxB,qBAAA,GAAwB,sBAAA;EACxB,cAAA,YAA0B,cAAA;EAC1B,mBAAA,GAAsB,oBAAA;EACtB,SAAA,GAAY,YAAA;EACZ,mBAAA,GAAsB,OAAA;EACtB,iBAAA,GAAoB,sBAAA,CAAuB,mBAAA;EAC3C,UAAA,EAAY,cAAA;EACZ,yBAAA,IAA6B,QAAA,EAAU,eAAA;EACvC,SAAA;AAAA;;;cC1CW,YAAA,YAAwB,sBAAA,CAAuB,mBAAA;EAAA,SACjD,IAAA;EAAA,SACA,cAAA;EAAA,SACA,aAAA;EAAA,iBAEQ,OAAA;cAEL,OAAA,EAAS,cAAA;EAIrB,MAAA,CAAO,QAAA,EAAU,mBAAA;EAIX,KAAA,CAAA,GAAS,OAAA;EAIT,IAAA,CAAA,GAAQ,OAAA;EAId,eAAA,CAAgB,QAAA,EAAU,MAAA,SAAe,eAAA;AAAA;;;UCf1B,4BAAA;EACf,mBAAA,WAA8B,mBAAA;EAC9B,yBAAA,GAA4B,QAAA,EAAU,eAAe;AAAA;AAAA,iBAGvC,0BAAA,CAAA;EACd,mBAAA;EACA;AAAA,GACC,4BAAA,GAA+B,cAAA"}
|
package/dist/node/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-Bmb41Sf3.cjs`);const e=require(`./headless-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-Bmb41Sf3.cjs`);const e=require(`./headless-Cv-igy49.cjs`),t=require(`./http-Da6Kw4oy.cjs`),n=require(`./ws-tCjj2gPu.cjs`),r=require(`./mcp-Bl8jUfev.cjs`),i=require(`./tui-BAtwGilM.cjs`);let a=require(`@robota-sdk/agent-framework`);var o=class{entries=new Map;settingsPath;constructor(e){this.settingsPath=e}register(e){this.entries.set(e.name,e)}getAll(){let e=this.readTransportSettings();return Array.from(this.entries.values()).map(t=>({transport:t,config:this.resolveConfig(t,e[t.name])}))}getEnabled(){return this.getAll().filter(e=>e.config.enabled).map(e=>e.transport)}async setEnabled(e,t){let n=(0,a.readSettings)(this.settingsPath),r=n.transports??{};r[e]={...r[e]??{},enabled:t},n.transports=r,(0,a.writeSettings)(this.settingsPath,n)}async setOptions(e,t){let n=(0,a.readSettings)(this.settingsPath),r=n.transports??{};r[e]={...r[e]??{},options:t},n.transports=r,(0,a.writeSettings)(this.settingsPath,n)}async startAll(e){let t=this.getEnabled();for(let n of t)n.attach(e),await n.start()}async stopAll(){for(let e of this.entries.values())await e.stop()}resolveConfig(e,t){return{enabled:t?.enabled??e.defaultEnabled,options:t?.options??{}}}readTransportSettings(){let e=(0,a.readSettings)(this.settingsPath).transports;return!e||typeof e!=`object`||Array.isArray(e)?{}:e}};function s(){let e=new o((0,a.getUserSettingsPath)());return e.register(new n.t),e}exports.PrintTerminal=e.i,exports.TransportRegistry=o,exports.TuiTransport=i.n,exports.WsTransport=n.t,exports.createAgentMcpServer=r.n,exports.createAgentRoutes=t.n,exports.createDefaultTransportRegistry=s,exports.createDefaultTuiCliAdapter=i.t,exports.createHeadlessRunner=e.n,exports.createHeadlessTransport=e.t,exports.createHttpTransport=t.t,exports.createMcpTransport=r.t,exports.createWsHandler=n.r,exports.createWsTransport=n.n,exports.promptInput=e.r;
|
package/dist/node/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { a as createHeadlessRunner, i as TOutputFormat, n as createHeadlessTrans
|
|
|
2
2
|
import { a as createAgentRoutes, i as TSessionFactory, n as createHttpTransport, r as IAgentRoutesOptions, t as IHttpTransportOptions } from "./index-DOA2KIYt.js";
|
|
3
3
|
import { a as IWsTransportConfig, c as createWsTransport, d as TClientMessage, f as TServerMessage, i as TExecutionWorkspaceStatus, l as IWsHandlerOptions, n as IExecutionWorkspaceSnapshot, o as WsTransport, r as TExecutionAttention, s as IWsTransportOptions, t as IExecutionWorkspaceEntry, u as createWsHandler } from "./index-yvGShbDx.js";
|
|
4
4
|
import { i as createAgentMcpServer, n as createMcpTransport, r as IAgentMcpOptions, t as IMcpTransportOptions } from "./index-C7DvsmEg.js";
|
|
5
|
-
import { a as TAnyTuiCommandInteraction, c as createDefaultTuiCliAdapter, d 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
|
|
5
|
+
import { a as TAnyTuiCommandInteraction, c as createDefaultTuiCliAdapter, d 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-ioN9mYAD.js";
|
|
6
6
|
import { TUniversalValue } from "@robota-sdk/agent-core";
|
|
7
7
|
import { IInteractiveSession } from "@robota-sdk/agent-framework";
|
|
8
8
|
import { IConfigurableTransport, ITransportEntry } from "@robota-sdk/agent-interface-transport";
|
|
@@ -24,5 +24,5 @@ declare class TransportRegistry {
|
|
|
24
24
|
}
|
|
25
25
|
declare function createDefaultTransportRegistry(): TransportRegistry;
|
|
26
26
|
//#endregion
|
|
27
|
-
export { type IAgentMcpOptions, type IAgentRoutesOptions, type IDefaultTuiCliAdapterOptions, type IExecutionWorkspaceEntry, type IExecutionWorkspaceSnapshot, type IHeadlessRunnerOptions, type IHeadlessTransportOptions, type IHttpTransportOptions, type IMcpTransportOptions, type ITuiCliAdapter, type ITuiCommandInteraction, type ITuiConfirmInteraction, type ITuiPickerInteraction, type ITuiPickerItem, type
|
|
27
|
+
export { type IAgentMcpOptions, type IAgentRoutesOptions, type IDefaultTuiCliAdapterOptions, type IExecutionWorkspaceEntry, type IExecutionWorkspaceSnapshot, type IHeadlessRunnerOptions, type IHeadlessTransportOptions, type IHttpTransportOptions, type IMcpTransportOptions, type IRenderOptions, type ITuiCliAdapter, type ITuiCommandInteraction, type ITuiConfirmInteraction, type ITuiPickerInteraction, type ITuiPickerItem, type IWsHandlerOptions, type IWsTransportConfig, type IWsTransportOptions, PrintTerminal, type TAnyTuiCommandInteraction, type TClientMessage, type TExecutionAttention, type TExecutionWorkspaceStatus, type TOnMissingArgsAction, type TOutputFormat, type TServerMessage, type TSessionFactory, TransportRegistry, TuiTransport, WsTransport, createAgentMcpServer, createAgentRoutes, createDefaultTransportRegistry, createDefaultTuiCliAdapter, createHeadlessRunner, createHeadlessTransport, createHttpTransport, createMcpTransport, createWsHandler, createWsTransport, promptInput };
|
|
28
28
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/node/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e,n as t,r as n,t as r}from"./headless-
|
|
1
|
+
import{i as e,n as t,r as n,t as r}from"./headless-C-Ezlo9U.js";import{n as i,t as a}from"./http-Br10Ps8m.js";import{n as o,r as s,t as c}from"./ws-BWel8nzl.js";import{n as l,t as u}from"./mcp-BAujHOMr.js";import{n as d,t as f}from"./tui-87G6pg3z.js";import{getUserSettingsPath as p,readSettings as m,writeSettings as h}from"@robota-sdk/agent-framework";var g=class{entries=new Map;settingsPath;constructor(e){this.settingsPath=e}register(e){this.entries.set(e.name,e)}getAll(){let e=this.readTransportSettings();return Array.from(this.entries.values()).map(t=>({transport:t,config:this.resolveConfig(t,e[t.name])}))}getEnabled(){return this.getAll().filter(e=>e.config.enabled).map(e=>e.transport)}async setEnabled(e,t){let n=m(this.settingsPath),r=n.transports??{};r[e]={...r[e]??{},enabled:t},n.transports=r,h(this.settingsPath,n)}async setOptions(e,t){let n=m(this.settingsPath),r=n.transports??{};r[e]={...r[e]??{},options:t},n.transports=r,h(this.settingsPath,n)}async startAll(e){let t=this.getEnabled();for(let n of t)n.attach(e),await n.start()}async stopAll(){for(let e of this.entries.values())await e.stop()}resolveConfig(e,t){return{enabled:t?.enabled??e.defaultEnabled,options:t?.options??{}}}readTransportSettings(){let e=m(this.settingsPath).transports;return!e||typeof e!=`object`||Array.isArray(e)?{}:e}};function _(){let e=new g(p());return e.register(new c),e}export{e as PrintTerminal,g as TransportRegistry,d as TuiTransport,c as WsTransport,l as createAgentMcpServer,i as createAgentRoutes,_ as createDefaultTransportRegistry,f as createDefaultTuiCliAdapter,t as createHeadlessRunner,r as createHeadlessTransport,a as createHttpTransport,u as createMcpTransport,s as createWsHandler,o as createWsTransport,n as promptInput};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/node/tui/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../tui-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../tui-BAtwGilM.cjs`);exports.TuiTransport=e.n,exports.createDefaultTuiCliAdapter=e.t;
|
package/dist/node/tui/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as TAnyTuiCommandInteraction, c as createDefaultTuiCliAdapter, d 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
|
|
2
|
-
export { type IDefaultTuiCliAdapterOptions, type ITuiCliAdapter, type ITuiCommandInteraction, type ITuiConfirmInteraction, type ITuiPickerInteraction, type ITuiPickerItem, type
|
|
1
|
+
import { a as TAnyTuiCommandInteraction, c as createDefaultTuiCliAdapter, d 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-ioN9mYAD.js";
|
|
2
|
+
export { type IDefaultTuiCliAdapterOptions, type IRenderOptions, type ITuiCliAdapter, type ITuiCommandInteraction, type ITuiConfirmInteraction, type ITuiPickerInteraction, type ITuiPickerItem, type TAnyTuiCommandInteraction, type TOnMissingArgsAction, TuiTransport, createDefaultTuiCliAdapter };
|
package/dist/node/tui/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e,t}from"../tui-
|
|
1
|
+
import{n as e,t}from"../tui-87G6pg3z.js";export{e as TuiTransport,t as createDefaultTuiCliAdapter};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import{Box as e,Text as t,render as n,useApp as r,useInput as i,usePaste as a,useStdout as o,useWindowSize as s}from"ink";import c,{createContext as l,useCallback as u,useContext as d,useEffect as f,useMemo as p,useRef as m,useState as h}from"react";import{createSystemMessage as g,createUserMessage as _,findProviderDefinition as v,formatTokenCount as y,isAssistantMessage as b,isToolMessage as x,messageToHistoryEntry as S}from"@robota-sdk/agent-core";import{CommandRegistry as C,DEFAULT_STATUS_LINE_COMMAND_SETTINGS as w,InteractiveSession as T,applyActiveModelChange as E,applyStatusLineSettings as D,deleteSettings as O,getUserSettingsPath as k,isStatusLineCommandSettingsPatch as A,listResumableSessionSummaries as ee,readSettings as j,resolveGitBranch as M,writeSettings as N}from"@robota-sdk/agent-framework";import{Fragment as P,jsx as F,jsxs as I}from"react/jsx-runtime";import L from"chalk";import te from"string-width";import{isConfirmInteraction as ne,isPickerInteraction as re}from"@robota-sdk/agent-interface-tui";import{marked as R}from"marked";import ie from"marked-terminal";const z=[`active`,`queued`,`running`,`waiting_permission`,`sleeping`],B=/\s+/g;function V(e){return(e?.entries??[]).filter(e=>e.kind===`background_task`&&e.visibility===`default`)}function ae(e){return V(e).filter(e=>z.includes(e.status)).length}function H(e,t={}){let n=e.id===t.selectedEntryId,r={id:e.id,radio:n?`●`:`○`,title:W(e),subtitle:G(e),statusLabel:K(e.status),preview:oe(e.preview??e.currentAction),color:q(e),isSelected:n};return{...r,accessibleText:se(r)}}function U(e){let t=e.text.trim().replace(B,` `);return t?t.length>160?`${t.slice(0,160)}...`:t:e.kind}function W(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 G(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 K(e){return e.replace(/_/g,` `)}function q(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`:z.includes(e.status)?`cyan`:`white`}function oe(e){return e?.trim().replace(B,` `)||void 0}function se(e){return[e.radio,e.title,e.statusLabel,e.subtitle,e.preview].filter(e=>typeof e==`string`&&e.length>0).join(` · `)}function ce(e,t={}){let n=H(e),r=le(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 le(e){return e.status===`active`||e.status===`queued`||e.status===`running`||e.status===`waiting_permission`||e.status===`sleeping`}function ue({entries:n}){return n.length===0?null:I(e,{flexDirection:`column`,marginBottom:1,children:[F(t,{color:`cyan`,bold:!0,children:`Background work`}),n.map((e,r)=>{let i=ce(e,{isLast:r===n.length-1});return I(t,{children:[`${i.connector} `,F(t,{color:i.color,children:i.marker}),` ${i.label}`,i.segments.map((e,n)=>F(t,{dimColor:!0,children:` · ${e}`},`${e}-${n}`)),i.preview?F(t,{dimColor:!0,children:` · ${i.preview}`}):null]},e.id)})]})}function de({percentage:n}){return n>=90?F(e,{borderStyle:`single`,borderColor:`red`,paddingX:1,children:I(t,{color:`red`,bold:!0,children:[`⚠ Context at `,Math.round(n),`% — window nearly full. Run /compact to summarize the conversation.`]})}):n>=70?F(e,{paddingX:1,children:I(t,{color:`yellow`,children:[`Context at `,Math.round(n),`% — consider running /compact to free up space.`]})}):null}function fe({entry:n,page:r,loading:i,error:a}){let o=H(n,{selectedEntryId:n.id}),s=r?.records.slice(-12)??[];return I(e,{flexDirection:`column`,marginBottom:1,children:[F(t,{color:`cyan`,bold:!0,children:`Viewing ${o.title}`}),I(t,{dimColor:!0,children:[o.statusLabel,o.subtitle?` · ${o.subtitle}`:``,o.preview?` · ${o.preview}`:``]}),i?F(t,{dimColor:!0,children:`Loading workspace detail...`}):null,a?F(t,{color:`red`,children:a}):null,!i&&!a&&s.length===0?F(t,{dimColor:!0,children:`No detail yet`}):null,!i&&!a&&s.map(e=>F(t,{color:pe(e.kind),children:U(e)},e.id)),r?.nextCursor?F(t,{dimColor:!0,children:`... more detail available`}):null]})}function pe(e){if(e===`error`)return`red`;if(e===`result`)return`green`;if(e===`process_output`)return`white`;if(e===`group_summary`)return`cyan`}function J(){return{selectedIndex:0,scrollOffset:0,resolved:!1}}function Y(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 me(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 X(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=he(e.selectedIndex,n.itemCount);return{state:{...e,selectedIndex:t,resolved:!0},effect:{type:`select`,index:t}}}let r=Q(e.selectedIndex,t,n),i=$(r,e.scrollOffset,n);return{state:{...e,selectedIndex:r,scrollOffset:i},effect:{type:`none`}}}function Z(e,t){if(t.itemCount===0)return{...e,selectedIndex:0,scrollOffset:0};let n=he(e.selectedIndex,t.itemCount),r=$(n,e.scrollOffset,t);return n===e.selectedIndex&&r===e.scrollOffset?e:{...e,selectedIndex:n,scrollOffset:r}}function Q(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 $(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 he(e,t){return Math.min(Math.max(e,0),t-1)}function ge({snapshot:n,selectedEntryId:r,onSelect:a,onClose:o}){let{normalized:s,visibleEntries:c,applyAction:l}=_e({entries:[...n?.entries??[]],selectedEntryId:r,onSelect:a,onClose:o});return i((e,t)=>{let n=Y(t);n!==void 0&&l(n)}),I(e,{flexDirection:`column`,borderStyle:`round`,borderColor:`cyan`,paddingX:1,children:[F(t,{color:`cyan`,bold:!0,children:`Execution workspace`}),F(e,{flexDirection:`column`,marginTop:1,children:c.length===0?F(t,{dimColor:!0,children:`No workspace entries`}):c.map((e,t)=>F(be,{entry:e,isFocused:s.scrollOffset+t===s.selectedIndex,selectedEntryId:r},e.id))}),F(t,{dimColor:!0,children:`Ctrl+B Close ↑↓ Navigate Enter Switch Esc Close`})]})}function _e({entries:e,selectedEntryId:t,onSelect:n,onClose:r}){let[i,a]=h(()=>J()),o=m(i);f(()=>{let n=ye({selectedIndex:Math.max(0,e.findIndex(e=>e.id===t)),itemCount:e.length});o.current=n,a(n)},[e.length,t]);let s=ye({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:ve({entries:e,stateRef:o,setState:a,onSelect:n,onClose:r})}}function ve({entries:e,stateRef:t,setState:n,onSelect:r,onClose:i}){return a=>{let o=X(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 ye(e){return Z({selectedIndex:e.selectedIndex,scrollOffset:e.scrollOffset??0,resolved:!1},{itemCount:e.itemCount,maxVisible:8})}function be({entry:e,isFocused:n,selectedEntryId:r}){let i=H(e,{selectedEntryId:r});return I(t,{children:[F(t,{color:n?`cyan`:void 0,bold:n,children:n?`> `:` `}),F(t,{color:i.color,children:i.radio}),F(t,{color:n?`cyan`:void 0,bold:n,children:` ${i.title}`}),F(t,{dimColor:!0,children:` · ${i.statusLabel}`}),i.subtitle?F(t,{dimColor:!0,children:` · ${i.subtitle}`}):null,i.preview?F(t,{dimColor:!0,children:` · ${i.preview}`}):null]})}function xe(e,t){let n=null;return{schedule(){n||=setTimeout(()=>{n=null,e()},t)},flush(){n&&=(clearTimeout(n),null)}}}var Se=class{history=[];streamingText=``;activeTools=[];isThinking=!1;isAborting=!1;pendingPrompt=null;contextState={percentage:0,usedTokens:0,maxTokens:0};executionWorkspaceSnapshot=null;selectedExecutionEntryId;onChange=null;streamBuf=``;debouncedStreamNotify=xe(()=>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.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())}},Ce=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 we(e,t){let n=new T({cwd:e.cwd,provider:e.provider,permissionMode:e.permissionMode,maxTurns:e.maxTurns,permissionHandler: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}),r=new C;for(let t of e.commandModules??[])r.addModule(t);return e.reloadPluginCommandSource?.(r),{interactiveSession:n,registry:r,manager:new Se,commandEffectQueue:new Ce}}function Te(){let[e,t]=h(null),n=m([]),r=m(!1),i=u(()=>{if(r.current)return;let e=n.current[0];if(!e){t(null);return}r.current=!0,t({toolName:e.toolName,toolArgs:e.toolArgs,resolve:a=>{n.current.shift(),r.current=!1,t(null),e.resolve(a),setTimeout(()=>i(),0)}})},[]);return{permissionHandler:u((e,t)=>new Promise(r=>{n.current.push({toolName:e,toolArgs:t,resolve:r}),i()}),[i]),permissionRequest:e}}function Ee(e,t,n,r,i){return u(async a=>{if(!a.startsWith(`/`)){await e.submit(a),n.setPendingPrompt(e.getPendingPrompt());return}let o=a.slice(1).split(/\s+/),s=o[0]?.toLowerCase()??``,c=o.slice(1).join(` `),l=await e.executeCommand(s,c);if(l){if(l.effects?.some(e=>e.type===`session-execution-started`)){n.setPendingPrompt(e.getPendingPrompt());return}De(l,e,t,n,r,i);return}n.addEntry(S(g(`Unknown command "/${s}". Type /help for help.`)))},[e,t,n,r,i])}function De(e,t,n,r,i,a){let o=Oe(e.effects,n,r,a);if(r.addEntry(S(g(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 Oe(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 ke(e){return e.toLowerCase().replace(/[^a-z0-9\s-]/g,``).trim().replace(/\s+/g,`-`).replace(/-+/g,`-`).slice(0,60)}async function Ae(e,t){let n=t.slice(0,200),r=await e.chat([g(`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.`),_(n)],{maxTokens:20}),i=ke(typeof r.content==`string`?r.content:``);return!i||i.length<3?ke(t):i}function je(e,t){t.syncHistory(e.getFullHistory())}function Me(e,t){t.syncHistory(e.getFullHistory())}function Ne(e,t){try{t.syncExecutionWorkspaceSnapshot(e.getExecutionWorkspaceSnapshot({selectedEntryId:t.selectedExecutionEntryId}))}catch{}}function Pe(e){let[,t]=h(0),[n,r]=h(!1),{permissionHandler:i,permissionRequest:a}=Te(),o=m(!1),[s]=h(()=>we(e,i)),{interactiveSession:c,registry:l,manager:d,commandEffectQueue:p}=s;if(d.onChange=()=>t(e=>e+1),d.history.length===0){let e=c.getFullHistory();e.length>0&&d.syncHistory(e)}f(()=>{if(!e.transportRegistry)return;let t=e.transportRegistry;return t.startAll(c).catch(()=>void 0),()=>{t.stopAll().catch(()=>void 0)}},[c,e.transportRegistry]),f(()=>{let t=()=>je(c,d),n=()=>Me(c,d),r=t=>{o.current||e.sessionName||c.getName()||(o.current=!0,Ae(e.provider,t).then(t=>{c.setName(t),e.onAutoNamed?.(t)}).catch(()=>{o.current=!1}))},i=e=>d.syncExecutionWorkspaceSnapshot(e.snapshot);c.on(`user_message`,r),c.on(`text_delta`,d.onTextDelta),c.on(`tool_start`,d.onToolStart),c.on(`tool_end`,d.onToolEnd),c.on(`thinking`,d.onThinking),c.on(`complete`,d.onComplete),c.on(`interrupted`,d.onInterrupted),c.on(`error`,d.onError),c.on(`context_update`,d.onContextUpdate),c.on(`compact`,t),c.on(`skill_activation`,n),c.on(`execution_workspace_event`,i);let a=setInterval(()=>{try{let e=c.getContextState();d.setContextState({percentage:e.usedPercentage,usedTokens:e.usedTokens,maxTokens:e.maxTokens});let t=c.getFullHistory();t.length>0&&d.syncHistory(t),Ne(c,d),clearInterval(a)}catch{}},200);return()=>{clearInterval(a),c.off(`user_message`,r),c.off(`text_delta`,d.onTextDelta),c.off(`tool_start`,d.onToolStart),c.off(`tool_end`,d.onToolEnd),c.off(`thinking`,d.onThinking),c.off(`complete`,d.onComplete),c.off(`interrupted`,d.onInterrupted),c.off(`error`,d.onError),c.off(`context_update`,d.onContextUpdate),c.off(`compact`,t),c.off(`skill_activation`,n),c.off(`execution_workspace_event`,i)}},[c,d]),f(()=>{d.syncHistory(c.getFullHistory()),Ne(c,d),d.isThinking||d.setPendingPrompt(c.getPendingPrompt())},[d.isThinking,c,d]);let _=Ee(c,l,d,p,e.reloadPluginCommandSource),v=u(()=>{d.setAborting(!0),c.abort()},[c,d]),y=u(()=>{c.cancelQueue(),d.setPendingPrompt(null)},[c,d]),b=u(async(e=`prompt_input_exit`)=>{n||(r(!0),d.addEntry(S(g(`Shutting down...`))),await c.shutdown({reason:e,message:`CLI shutdown`}))},[c,d,n]),x=u(e=>d.selectExecutionWorkspaceEntry(e),[d]),C=u(e=>c.readExecutionWorkspaceDetail(e),[c]);return{interactiveSession:c,registry:l,commandEffectQueue:p,history:d.history,addEntry:e=>d.addEntry(e),streamingText:d.streamingText,activeTools:d.activeTools,isThinking:d.isThinking,isAborting:d.isAborting,isShuttingDown:n,pendingPrompt:d.pendingPrompt,executionWorkspaceSnapshot:d.executionWorkspaceSnapshot,selectedExecutionEntryId:d.selectedExecutionEntryId,permissionRequest:a,contextState:d.contextState,handleSubmit:_,handleAbort:v,handleCancelQueue:y,handleShutdown:b,selectExecutionWorkspaceEntry:x,readExecutionWorkspaceDetail:C}}function Fe(){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 Ie(e){return p(()=>Fe(),[])}function Le(e,t){for(let n of e){if(n.type===`language-change-requested`)return Re(n.language,t),!0;if(n.type===`settings-reset-requested`)return ze(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`&&A(n.patch))return t.applyStatusLinePatch(n.patch)}return!1}function Re(e,t){let n=t.cliAdapter.getUserSettingsPath(),r=t.cliAdapter.readSettings(n);r.language=e,t.cliAdapter.writeSettings(n,r),t.addEntry(S(g(`Language set to "${e}". Restarting...`))),t.requestShutdown(`other`,`Language change restart`)}function ze(e){let t=e.cliAdapter.getUserSettingsPath();e.cliAdapter.deleteSettings(t)?e.addEntry(S(g(`Deleted ${t}. Exiting...`))):e.addEntry(S(g(`No user settings found.`))),e.requestShutdown(`other`,`Reset settings restart`)}const Be=l(null),Ve=Be.Provider;function He(){let e=d(Be);if(!e)throw Error(`TuiCliAdapterContext not provided`);return e}function Ue({cwd:e,providerOverride:t,interactiveSession:n,commandEffectQueue:i,addEntry:a,baseHandleSubmit:o,setSessionName:s,setStatusLineSettings:c,showSessionPickerOnStart:l,openAgentSwitcher:d}){let{exit:f}=r(),p=He(),[_,v]=h(null),y=m(null),[b,x]=h(!1),[C,w]=h(l??!1),[T,E]=h(!1),D=u((e,t)=>{a(S(g(`Shutting down...`))),setTimeout(()=>{n.shutdown({reason:e,message:t}).finally(()=>f())},500)},[n,a,f]),O=u(e=>Le(e,{addEntry:a,requestShutdown:D,openPluginTUI:()=>x(!0),openSessionPicker:()=>w(!0),openTransportTUI:()=>E(!0),openAgentSwitcher:()=>d?.(),renameSession:e=>{n.setName(e),s(e)},applyStatusLinePatch:e=>(c(p.applyStatusLineSettings(p.getUserSettingsPath(),e)),!0),cliAdapter:p}),[a,p,n,D,s,c]),k=u(e=>{if(e.message.length>0&&a(S(g(e.message))),e.interaction!==void 0){y.current=e.interaction,v(e.interaction.prompt);return}y.current=null,v(null),e.effects!==void 0&&e.effects.length>0&&O(e.effects)},[a,O]),A=u(()=>{let e=i.drain();if(e===void 0)return!1;if(e.type===`interaction`){let{interaction:t}=e;return y.current=t,v(t.prompt),!0}return O(e.effects)},[O,i]);return{handleSubmit:u(async e=>{await o(e),A()},[o,A]),pendingInteractionPrompt:_,showPluginTUI:b,showSessionPicker:C,showTransportTUI:T,setShowPluginTUI:x,setShowSessionPicker:w,setShowTransportTUI:E,handleInteractionSubmit:u(async e=>{let t=y.current;if(t===null){v(null);return}try{k(await t.submit(e))}catch(e){y.current=null,v(null),a(S(g(`Failed: ${e instanceof Error?e.message:String(e)}`)))}},[a,k]),handleInteractionCancel:u(()=>{let e=y.current;if(y.current=null,v(null),e?.cancel===void 0){a(S(g(`Command interaction cancelled.`)));return}Promise.resolve(e.cancel()).then(e=>k(e)).catch(e=>{a(S(g(`Failed: ${e instanceof Error?e.message:String(e)}`)))})},[a,k])}}function We(e){let t={...w},n=e.statusline;return Ge(n)?{enabled:typeof n.enabled==`boolean`?n.enabled:t.enabled,gitBranch:typeof n.gitBranch==`boolean`?n.gitBranch:t.gitBranch}:t}function Ge(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)}function Ke(){let e=He();return h(()=>We(e.readSettings(e.getUserSettingsPath())))}const qe=`[200~`,Je=`[201~`;function Ye(e){return{value:e,cursor:e.length,isPasting:!1,pasteBuffer:``}}function Xe(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=$e(e,t,r);if(i!==void 0)return i;let a=et(e,t,n,r);if(a!==void 0)return a;let o=tt(e,n,r);return o===void 0?dt(e,t):o}function Qe(e,t,n){let r=t.replace(/\r\n?/g,`
|
|
2
|
+
`);return r.length===0?{state:e,effect:{type:`none`}}:r.includes(`
|
|
3
|
+
`)&&n.canPaste?{state:e,effect:{type:`paste`,text:r,cursor:e.cursor}}:dt(e,r)}function $e(e,t,n){if(t===qe||t.startsWith(qe))return ot(e,t);if(e.isPasting)return st(e,t,n)}function et(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
|
+
`)||t.includes(`\r`))&&r.canPaste)return{state:e,effect:{type:`paste`,text:t.replace(/\r\n?/g,`
|
|
5
|
+
`),cursor:e.cursor}}}function tt(e,t,n){if(t.upArrow===!0||t.downArrow===!0)return n.enableVerticalNavigation===!1?{state:e,effect:{type:`none`}}:ct(e,t.upArrow===!0?`up`:`down`,n.availableWidth);if(t.leftArrow===!0)return lt(e,`left`);if(t.rightArrow===!0)return lt(e,`right`);if(t.backspace===!0||t.delete===!0)return ut(e)}function nt(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 rt(e,t,n){return{value:e.slice(0,t)+n+e.slice(t),cursor:t+n.length}}function it(e,t,n){let r=0;for(let i=0;i<t&&i<e.length;i++){let t=te(e[i]),a=r%n;a+t>n&&(r+=n-a),r+=t}return r}function at(e,t,n){let r=0;for(let i=0;i<e.length;i++){if(r>=t)return i;let a=te(e[i]),o=r%n;o+a>n&&(r+=n-o),r+=a}return e.length}function ot(e,t){return{state:{...e,isPasting:!0,pasteBuffer:t.slice(5)},effect:{type:`none`}}}function st(e,t,n){if(t!==Je&&!t.includes(Je))return{state:{...e,pasteBuffer:e.pasteBuffer+t},effect:{type:`none`}};let r=t.split(Je)[0]??``;return Qe({...e,isPasting:!1,pasteBuffer:``},e.pasteBuffer+r,n)}function ct(e,t,n){if(!n||n<=0)return{state:e,effect:{type:`none`}};let r=[...e.value],i=it(r,e.cursor,n),a=t===`up`?i-n:i+n;if(a<0)return{state:e,effect:{type:`none`}};let o=at(r,a,n);return o===e.cursor?{state:e,effect:{type:`none`}}:{state:{...e,cursor:o},effect:{type:`render`}}}function lt(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 ut(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 dt(e,t){let n=nt(t);if(n.length===0)return{state:e,effect:{type:`none`}};let r=rt(e.value,e.cursor,n);return{state:{...e,value:r.value,cursor:r.cursor},effect:{type:`change`,value:r.value}}}function ft({value:e,onChange:n,onSubmit:r,onPaste:i,placeholder:a=``,focus:o=!0,showCursor:s=!0,availableWidth:c,cursorHint:l=null,enableVerticalNavigation:u=!0}){let d=m(Ye(e)),[,f]=h(0);return d.current=Xe(d.current,e,l),pt({stateRef:d,onChange:n,onSubmit:r,onPaste:i,availableWidth:c,focus:o,enableVerticalNavigation:u,forceRender:f}),F(t,{children:_t(d.current.value,d.current.cursor,a,s&&o)})}function pt(e){a(t=>{ht(e,()=>Qe(e.stateRef.current,t,mt(e)))},{isActive:e.focus}),i((t,n)=>{ht(e,()=>Ze(e.stateRef.current,t,n,mt(e)))},{isActive:e.focus})}function mt(e){return{availableWidth:e.availableWidth,canPaste:e.onPaste!==void 0,enableVerticalNavigation:e.enableVerticalNavigation}}function ht(e,t){try{let n=t();e.stateRef.current=n.state,gt(n.effect,e.onChange,e.onSubmit,e.onPaste,e.forceRender)}catch{}}function gt(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 _t(e,t,n,r){if(!r)return e.length>0?e:n?L.gray(n):``;if(e.length===0)return n.length>0?L.inverse(n[0])+L.gray(n.slice(1)):L.inverse(` `);let i=[...e],a=``;for(let e=0;e<i.length;e++){let n=i[e]??``;a+=e===t?L.inverse(n):n}return t>=i.length&&(a+=L.inverse(` `)),a}function vt(){return[{label:`plan`,value:`plan`,description:`Plan only, no execution`},{label:`default`,value:`default`,description:`Ask before risky actions`},{label:`acceptEdits`,value:`acceptEdits`,description:`Auto-approve file edits`},{label:`bypassPermissions`,value:`bypassPermissions`,description:`Skip all permission checks`}]}function yt(){return[{label:`ko Korean`,value:`ko`,description:`한국어`},{label:`en English`,value:`en`,description:`English`},{label:`ja Japanese`,value:`ja`,description:`日本語`},{label:`zh Chinese`,value:`zh`,description:`中文`}]}function bt(){return[{label:`current`,value:`current`,description:`Show current provider`},{label:`list`,value:`list`,description:`List available providers`},{label:`use`,value:`use`,description:`Switch to a provider`},{label:`add`,value:`add`,description:`Add a new provider`},{label:`test`,value:`test`,description:`Test provider connection`}]}const xt={agent:void 0,background:void 0,clear:{onMissingArgs:`confirm`,message:`Clear conversation history?`},compact:void 0,context:void 0,cost:void 0,exit:{onMissingArgs:`confirm`,message:`Exit the session?`},help:void 0,language:{onMissingArgs:`picker`,getItems:yt},memory:void 0,mode:{onMissingArgs:`picker`,getItems:vt},model:void 0,permissions:void 0,plugin:void 0,provider:{onMissingArgs:`picker`,getItems:bt},rename:void 0,reset:void 0,resume:void 0,rewind:void 0,settings:void 0,skills:void 0,statusline:void 0,"user-local":void 0,"validate-session":void 0};function St(e){return xt[e]}function Ct(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 wt(e,t){let[n,r]=h(0),[i,a]=h(!1),o=c.useRef(e);o.current!==e&&(o.current=e,i&&a(!1));let s=Ct(e),l=s.isSlash&&s.parentCommand.length>0,u=p(()=>{if(!t||!s.isSlash||i)return[];if(l){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,l]),d=s.isSlash&&u.length>0&&!i;return n>=u.length&&u.length>0&&r(u.length-1),{showPopup:d,filteredCommands:u,selectedIndex:n,setSelectedIndex:r,isSubcommandMode:l,setShowPopup:e=>{a(typeof e==`function`?t=>!e(!t):!e)}}}function Tt(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 Et(e){if(e.backspace===!0||e.delete===!0)return`cancelQueue`}function Dt(e){if(e.upArrow===!0)return`previous`;if(e.downArrow===!0)return`next`}function Ot(){return{selectedIndex:null,draft:``}}function kt(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:Ot()}}function At(e,t){let n=t.trim();return n.length===0||e[e.length-1]===n?[...e]:[...e,n]}function jt(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=At(t,e.content))}return t}function Mt(e,t,n){return t===0?0:n===`previous`?e>0?e-1:t-1:e<t-1?e+1:0}function Nt(e,t){let n=Ct(e);return n.parentCommand?{type:`insert`,value:`/${n.parentCommand} ${t.name} `}:t.subcommands&&t.subcommands.length>0?{type:`insert`,value:`/${t.name} `,selectedIndex:0}:{type:`insert`,value:`/${t.name} `}}function Pt(e,t,n){let r=Ct(e);return r.parentCommand?{type:`submit`,value:`/${r.parentCommand} ${t.name}`}:n?.onMissingArgs?{type:`open-interaction`,commandName:t.name}:t.subcommands&&t.subcommands.length>0?{type:`insert`,value:`/${t.name} `,selectedIndex:0}:{type:`submit`,value:`/${t.name}`}}function Ft(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 It(e){return e.trim().length>0}function Lt({commandName:n,interaction:r,onConfirm:a,onCancel:o}){return i((e,t)=>{t.return||e===`y`||e===`Y`?a():(t.escape||e===`n`||e===`N`)&&o()}),I(e,{paddingX:1,children:[I(t,{bold:!0,color:`yellow`,children:[`/`,n,`:`,` `]}),I(t,{children:[r.message,` `]}),F(t,{dimColor:!0,children:`[y/n]`})]})}function Rt(){let{stdout:e}=o();return Math.max(40,(e.columns??80)-4)}function zt({commandName:n,interaction:r,onSelect:a,onCancel:o}){let s=r.getItems(),[c,l]=h(0),u=Rt();i((e,t)=>{if(t.upArrow)l(e=>e>0?e-1:s.length-1);else if(t.downArrow)l(e=>e<s.length-1?e+1:0);else if(t.return){let e=s[c];e&&a(e)}else (t.escape||e===`q`)&&o()});let d=s.length<=8||c<8?0:Math.min(c-8+1,s.length-8),f=s.slice(d,d+8);return I(e,{flexDirection:`column`,borderStyle:`round`,borderColor:`cyan`,paddingX:1,children:[I(t,{bold:!0,color:`cyan`,children:[`/`,n]}),f.map((n,r)=>{let i=d+r===c;return F(e,{width:u,children:I(t,{color:i?`cyan`:void 0,dimColor:!i,wrap:`truncate-end`,children:[i?`▸ `:` `,n.label,n.description==null?``:` ${n.description}`]})},n.value)}),F(t,{dimColor:!0,children:`↑↓ navigate · Enter select · Esc cancel`})]})}function Bt(){let{stdout:e}=o(),t=()=>Math.max(40,(e.columns??80)-4),[n,r]=h(t);return f(()=>{let n=()=>r(t());return e.on(`resize`,n),()=>{e.off(`resize`,n)}},[e]),n}function Vt(e,t){return e.length>t?`${e.slice(0,t-1)}…`:e.padEnd(t)}function Ht(n){let{cmd:r,isSelected:i,showSlash:a,rowWidth:o,nameColWidth:s}=n,c=i?`▸ `:` `,l=i?`cyan`:void 0,u=!i,d=Vt(r.name,s);return F(e,{width:o,children:F(t,{color:l,dimColor:u,wrap:`truncate-end`,children:a?`${c}/${d} ${r.description??``}`:`${c}${d} ${r.description??``}`})})}function Ut({commands:t,selectedIndex:n,visible:r,isSubcommandMode:i}){let a=Bt();if(!r||t.length===0)return null;let o=Wt(n,t.length),s=t.slice(o,o+8),c=Math.min(20,Math.max(...s.map(e=>e.name.length)));return F(e,{flexDirection:`column`,borderStyle:`round`,borderColor:`gray`,paddingX:1,children:s.map((e,t)=>F(Ht,{cmd:e,isSelected:o+t===n,showSlash:!i,rowWidth:a,nameColWidth:c},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 Gt=/\[Pasted text #(\d+)(?: \+\d+ lines)?\]/g;function Kt(e,t){return e.replace(Gt,(e,n)=>t.get(Number(n))??``)}const qt=[`#666666`,`#888888`,`#aaaaaa`,`#888888`];function Jt({text:e}){let[n,r]=h(0);return f(()=>{let e=setInterval(()=>{r(e=>e+1)},400);return()=>clearInterval(e)},[]),F(t,{children:[...e].map((e,r)=>F(t,{color:qt[(n+Math.floor(r/4))%qt.length],children:e},r))})}function Yt({onSubmit:n,onCancelQueue:r,isDisabled:a,isAborting:o,pendingPrompt:c,registry:l,sessionName:d,history:f}){let[g,_]=h(``),[v,y]=h(null),[b,x]=h(null),[S,C]=h(Ot),[w,T]=h([]),E=p(()=>jt(f??[]),[f]),D=p(()=>w.reduce((e,t)=>At(e,t),E),[E,w]),O=m(new Map),{columns:k}=s(),A=k>0?k:80,ee=Math.max(1,A-5),j=m(0),{showPopup:M,filteredCommands:N,selectedIndex:P,setSelectedIndex:L,isSubcommandMode:te,setShowPopup:R}=wt(g,l),ie=u((e,t)=>{j.current+=1;let n=j.current;O.current.set(n,e),_(r=>{let i=Ft(r,t,n,e);return y(i.cursorHint),i.value})},[]),z=u(()=>{C(Ot())},[]),B=u(e=>{T(t=>At(t,e))},[]),V=u(e=>{B(e),z(),n(e)},[n,B,z]),ae=u(e=>{let t=Nt(g,e);t.type===`insert`&&(_(t.value),t.selectedIndex!==void 0&&L(t.selectedIndex))},[g,L]),H=u(e=>{let t=St(e.name),n=Pt(g,e,t);if(n.type===`insert`){_(n.value),n.selectedIndex!==void 0&&L(n.selectedIndex);return}if(n.type===`open-interaction`&&t?.onMissingArgs){R(!1),x({commandName:n.commandName,interaction:t});return}n.type===`submit`&&(_(``),V(n.value))},[g,V,L,R]),U=u(e=>{if(!It(e))return;if(M&&N[P]){H(N[P]);return}let t=Kt(e.trim(),O.current);_(``),O.current.clear(),j.current=0,V(t)},[M,N,P,H,V]);i((e,t)=>{if(!M)return;let n=Tt(t);if(n===`previous`||n===`next`)L(e=>Mt(e,N.length,n));else if(n===`close`)R(!1);else if(n===`complete`){let e=N[P];e&&ae(e)}},{isActive:M&&!a}),i((e,t)=>{let n=Dt(t);if(!n)return;let r=kt(g,D,S,n);_(r.value),y(r.cursorHint),C(r.state)},{isActive:!M&&!a&&!c}),i((e,t)=>{Et(t)===`cancelQueue`&&c&&r?.()},{isActive:!!c});let W=o?`yellow`:c?`cyan`:a?`gray`:`green`,G=Math.max(1,A-2),K=(()=>{if(d){let e=` "${d}" `,t=Math.max(0,G-e.length-2);return{left:`┌`+`─`.repeat(t),label:e,right:`─`.repeat(2)+`┐`}}return{left:`┌`+`─`.repeat(G),label:``,right:`┐`}})(),q=u(e=>{b&&(x(null),V(`/${b.commandName} ${e.value}`))},[b,V]),oe=u(()=>{b&&(x(null),V(`/${b.commandName}`))},[b,V]),se=u(()=>{x(null)},[]);return I(e,{flexDirection:`column`,children:[b&&re(b.interaction)&&F(zt,{commandName:b.commandName,interaction:b.interaction,onSelect:q,onCancel:se}),b&&ne(b.interaction)&&F(Lt,{commandName:b.commandName,interaction:b.interaction,onConfirm:oe,onCancel:se}),!b&&M&&F(Ut,{commands:N,selectedIndex:P,visible:M,isSubcommandMode:te}),I(t,{color:W,children:[K.left,K.label?F(t,{backgroundColor:W,color:`black`,bold:!0,children:K.label}):null,K.right]}),F(e,{borderStyle:`single`,borderTop:!1,borderColor:W,paddingLeft:1,children:o?F(t,{color:`yellow`,children:` Interrupting...`}):c?I(t,{color:`cyan`,children:[` `,`Queued:`,` `,c.length>50?c.slice(0,47)+`...`:c,` `,F(t,{dimColor:!0,children:`(Backspace to cancel)`})]}):a?F(Jt,{text:` Waiting for response... (ESC to interrupt)`}):I(e,{children:[F(t,{color:`green`,bold:!0,children:`> `}),F(ft,{value:g,onChange:e=>{_(e),z(),y(null)},onSubmit:U,onPaste:ie,placeholder:`Type a message or /help`,availableWidth:ee,cursorHint:v,enableVerticalNavigation:!1})]})})]})}function Xt({items:n,renderItem:r,onSelect:a,onCancel:o,maxVisible:s=3}){let[c,l]=h(()=>J()),d=m(c),f=u(e=>{let t=X(d.current,e,{itemCount:n.length,maxVisible:s});if(d.current=t.state,l(t.state),t.effect.type===`cancel`)o();else if(t.effect.type===`select`){let e=n[t.effect.index];e!==void 0&&a(e)}},[n,s,o,a]);if(i((e,t)=>{let n=Y(t);n!==void 0&&f(n)}),n.length===0)return F(e,{});let p=Z(c,{itemCount:n.length,maxVisible:s});p!==c&&(d.current=p);let{selectedIndex:g,scrollOffset:_}=p,v=n.slice(_,_+s),y=_+s<n.length;return I(e,{flexDirection:`column`,children:[_>0&&I(t,{dimColor:!0,children:[` ↑ `,_,` more above`]}),v.map((t,n)=>F(e,{marginBottom:1,children:r(t,_+n===g)},_+n)),y&&I(t,{dimColor:!0,children:[` ↓ `,n.length-_-s,` more below`]})]})}function Zt(){return{value:``,resolved:!1}}function Qt(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 $t(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`}}:en(e,n)}function en(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 tn({title:n,description:r,placeholder:a,onSubmit:o,onCancel:s,validate:c,allowEmpty:l=!1,masked:d=!1}){let[f,p]=h(()=>Zt()),g=m(f),_=u(e=>{let t=$t(g.current,e,{allowEmpty:l,validate:c});g.current=t.state,p(t.state),t.effect.type===`cancel`?s():t.effect.type===`submit`&&o(t.effect.value)},[l,c,s,o]);return i((e,t)=>{let n=Qt(e,t);n!==void 0&&_(n)}),I(e,{flexDirection:`column`,borderStyle:`round`,borderColor:`yellow`,paddingX:1,children:[F(t,{color:`yellow`,bold:!0,children:n}),F(nn,{description:r}),I(e,{marginTop:1,children:[F(t,{color:`cyan`,children:`> `}),f.value?F(t,{children:d?`*`.repeat(f.value.length):f.value}):a?F(t,{dimColor:!0,children:a}):null,F(t,{color:`cyan`,children:`█`})]}),f.error&&F(t,{color:`red`,children:f.error}),F(t,{dimColor:!0,children:` Enter Submit Esc Cancel`})]})}function nn({description:e}){return e===void 0||e.length===0?null:F(t,{dimColor:!0,children:e})}function rn({prompt:n,onSubmit:r,onCancel:i}){return n.kind===`text`?F(tn,{title:n.title,description:n.description,placeholder:n.placeholder,allowEmpty:n.allowEmpty,masked:n.masked,validate:n.validate,onSubmit:r,onCancel:i},`text:${n.title}`):I(e,{flexDirection:`column`,children:[F(t,{bold:!0,children:n.title}),n.description!==void 0&&n.description.length>0&&F(t,{dimColor:!0,children:n.description}),F(Xt,{items:[...n.options],maxVisible:n.maxVisible,renderItem:(e,n)=>I(t,{color:n?`cyan`:void 0,children:[n?`> `:` `,e.label]}),onSelect:e=>r(e.value),onCancel:i})]})}const an=new Set([`Bash`,`BackgroundProcess`]);function on(e){if(!an.has(e.toolName)||!e.toolResultData)return;let t=sn(e.toolResultData),n=hn(t,`exitCode`),r=gn(t,`success`),i=dn(un(cn(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:ln(s,n),previewLines:a,omittedLineCount:o,transcriptHint:o>0?`... +${o} lines (full output in session transcript)`:void 0}}function sn(e){try{return JSON.parse(e)}catch{return e}}function cn(e,t){if(!pn(t))return e;let n=mn(t,`output`);if(n!==void 0)return n;let r=mn(t,`stdout`),i=mn(t,`stderr`),a=mn(t,`error`),o=[];return r&&o.push(r),i&&o.push(fn(i,`[stderr] `)),!r&&!i&&a&&o.push(a),o.join(`
|
|
7
|
+
`)}function ln(e,t){return t!==void 0&&t!==0?`exit ${t}`:e?`error`:`ok`}function un(e){return e?e.replace(/\r\n/g,`
|
|
8
|
+
`).split(`
|
|
9
|
+
`):[]}function dn(e){let t=e.length;for(;t>0&&e[t-1].trim().length===0;)--t;return e.slice(0,t)}function fn(e,t){return un(e).map(e=>`${t}${e}`).join(`
|
|
10
|
+
`)}function pn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)}function mn(e,t){if(!pn(e))return;let n=e[t];return typeof n==`string`?n:void 0}function hn(e,t){if(!pn(e))return;let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function gn(e,t){if(!pn(e))return;let n=e[t];return typeof n==`boolean`?n:void 0}const _n=`\x1B[0m`,vn=` `,yn=ie;function bn(e){return e===void 0?process.env.NO_COLOR||process.env.FORCE_COLOR===`0`?!1:process.env.FORCE_COLOR?!0:!!process.stdout.isTTY:e}function xn(e){return e?.trim().toLowerCase()===`diff`}function Sn(e,t,n){let r=`${vn}${e}`.padEnd(t);return n?e.startsWith(`+`)?`[48;5;22m[38;5;120m${r}${_n}`:e.startsWith(`-`)?`[48;5;52m[38;5;210m${r}${_n}`:r.trimEnd():r.trimEnd()}function Cn(e,t,n){if(e.startsWith(`+`)||e.startsWith(`-`))return Sn(e,n,t);let r=`${vn}${e}`;return t?e.startsWith(`@@`)?`[36m${r}${_n}`:e.startsWith(`diff `)||e.startsWith(`index `)?`[2m${r}${_n}`:r:r}function wn(e,t){let n=e.reduce((e,t)=>Math.max(e,4+t.length),0);return t===void 0?n:Math.max(n,t)}function Tn(e,t,n){let r=e.split(`
|
|
11
|
+
`),i=wn(r,n);return`${r.map(e=>Cn(e,t,i)).join(`
|
|
12
|
+
`)}\n\n`}function En(e,t){let n=new yn(void 0,{ignoreIllegals:!0}),r=n.code.bind(n);return n.code=(n,i,a)=>xn(i)?Tn(n,e,t):r(n,i,a),n}function Dn(e,t={}){let n=R.parse(e,{renderer:En(bn(t.color),t.codeBlockWidth)});return typeof n==`string`?n.trimEnd():e}function On({tool:n}){let r=on(n);if(!r||r.statusLabel===`ok`&&r.previewLines.length===0&&!r.transcriptHint)return null;let i=r.status===`error`?`red`:`white`;return I(e,{flexDirection:`column`,marginLeft:4,children:[r.statusLabel!==`ok`&&F(t,{color:i,dimColor:!0,children:r.statusLabel}),r.previewLines.map((e,n)=>F(t,{color:i,dimColor:!0,children:e},`${e}-${n}`)),r.transcriptHint&&F(t,{dimColor:!0,children:r.transcriptHint})]})}function kn(e){let t=e.lines.length>12?jn(e.lines):e.lines,n=Math.max(...t.map(e=>e.lineNumber),0).toString().length,r=t.map(e=>An(e,n)),i=e.lines.length>12;return{file:e.file,markdown:["```diff",...r,"```"].join(`
|
|
13
|
+
`),truncated:i,remainingLineCount:i?e.lines.length-t.length:0}}function An(e,t){if(e.type===`hunk`)return e.text;let n=e.lineNumber.toString().padStart(t,` `);return e.type===`remove`?`- ${n} | ${e.text}`:e.type===`add`?`+ ${n} | ${e.text}`:` ${n} | ${e.text}`}function jn(e){let t=Mn(e),n=[];for(let e of t){if(n.length===0&&e.length>10)return e.slice(0,10);if(n.length+e.length>10)break;n.push(...e)}return n.length>0?n:e.slice(0,10)}function Mn(e){let t=[],n=[];for(let r of e){if(r.type===`hunk`&&n.length>0){t.push(n),n=[r];continue}n.push(r)}return n.length>0&&t.push(n),t}function Nn({file:n,lines:r}){let i=kn({file:n,lines:r});return I(e,{flexDirection:`column`,marginLeft:4,children:[i.file&&I(t,{color:`white`,dimColor:!0,children:[`│ `,i.file]}),F(t,{children:Dn(i.markdown)}),i.truncated&&I(t,{color:`white`,dimColor:!0,children:[`│ ... and `,i.remainingLineCount,` more lines`]})]})}function Pn({entry:n}){let r=n.data;if(!r)return F(P,{});let i=r.promptTokens===void 0?`?`:Fn(r.promptTokens),a=r.completionTokens===void 0?`?`:Fn(r.completionTokens),o=Fn(r.totalTokens),s=`${Math.round(r.contextUsedPercentage)}% (${y(r.contextUsedTokens)}/${y(r.contextMaxTokens)})`,c=r.costStatus===`unknown`?`cost unknown`:`cost ${r.costStatus}`;return F(e,{flexDirection:`column`,marginBottom:1,children:I(e,{children:[I(t,{color:`white`,bold:!0,children:[`Usage:`,` `]}),I(t,{dimColor:!0,children:[r.kind,` `,o,` tokens (in `,i,` / out `,a,`) · Context `,s,` ·`,` `,c]})]})})}function Fn(e){return e<1e3?e.toLocaleString():y(e)}function In(e){return on(e)?.status===`error`?`✗`:e.isRunning?`⟳`:e.result===`error`?`✗`:e.result===`denied`?`⊘`:`✓`}function Ln(e){return on(e)?.status===`error`||e.result===`error`?`red`:e.isRunning||e.result===`denied`?`yellow`:`green`}function Rn(e){return`${In(e)} ${e.toolName}${e.firstArg?`(${e.firstArg})`:``}`}function zn({role:e}){switch(e){case`user`:return I(t,{color:`green`,bold:!0,children:[`You:`,` `]});case`assistant`:return I(t,{color:`cyan`,bold:!0,children:[`Robota:`,` `]});case`system`:return I(t,{color:`yellow`,bold:!0,children:[`System:`,` `]});case`tool`:return I(t,{color:`white`,bold:!0,children:[`Tool:`,` `]})}}function Bn({message:n}){if(!x(n))return F(P,{});let r=n.name,i=n.content,a=null;try{let e=JSON.parse(i);Array.isArray(e)&&e.length>0&&typeof e[0].line==`string`&&(a=e)}catch{}if(a)return I(e,{flexDirection:`column`,marginBottom:1,children:[I(e,{children:[I(t,{color:`white`,bold:!0,children:[`Tool:`,` `]}),r&&I(t,{color:`white`,dimColor:!0,children:[`[`,r,`]`]})]}),F(t,{children:` `}),a.map((n,r)=>I(e,{flexDirection:`column`,children:[I(t,{color:`green`,children:[` `,`✓`,` `,n.line]}),n.diffLines&&n.diffLines.length>0&&F(Nn,{file:n.diffFile,lines:n.diffLines})]},r))]});let o=i.split(`
|
|
14
|
+
`).filter(e=>e.trim());return I(e,{flexDirection:`column`,marginBottom:1,children:[I(e,{children:[I(t,{color:`white`,bold:!0,children:[`Tool:`,` `]}),r&&I(t,{color:`white`,dimColor:!0,children:[`[`,r,`]`]})]}),F(t,{children:` `}),o.map((e,n)=>I(t,{color:`green`,children:[` `,`✓`,` `,e]},n))]})}const Vn=c.memo(function({message:n}){if(x(n))return F(Bn,{message:n});let r=n.content??``,i=n.state===`interrupted`;return I(e,{flexDirection:`column`,marginBottom:1,children:[F(e,{children:F(zn,{role:n.role})}),F(t,{children:` `}),F(e,{marginLeft:2,children:F(t,{wrap:`wrap`,children:b(n)?Dn(r+(i?`
|
|
15
|
+
|
|
16
|
+
_(interrupted)_`:``)):r})})]})});function Hn({entry:n}){let r=n.data,i=r?.tools,a=r?.summary?.split(`
|
|
17
|
+
`)??[];return i&&i.length>0?I(e,{flexDirection:`column`,marginBottom:1,children:[F(e,{children:I(t,{color:`white`,bold:!0,children:[`Tool:`,` `]})}),F(t,{children:` `}),i.map((n,r)=>I(e,{flexDirection:`column`,children:[I(t,{color:Ln(n),children:[` `,Rn(n)]}),F(On,{tool:n}),n.diffLines&&n.diffLines.length>0&&F(Nn,{file:n.diffFile,lines:n.diffLines})]},r))]}):I(e,{flexDirection:`column`,marginBottom:1,children:[F(e,{children:I(t,{color:`white`,bold:!0,children:[`Tool:`,` `]})}),F(t,{children:` `}),a.map((e,n)=>I(t,{color:`green`,children:[` `,e]},n))]})}function Un({entry:n}){let r=n.data,i=typeof r?.message==`string`?r.message:typeof r?.content==`string`?r.content:n.type;return I(e,{flexDirection:`column`,marginBottom:1,children:[F(e,{children:I(t,{color:`yellow`,bold:!0,children:[`System:`,` `]})}),F(t,{children:` `}),F(e,{marginLeft:2,children:F(t,{wrap:`wrap`,children:i})})]})}function Wn({entry:e}){if(e.category===`chat`){let t=e.data;return F(Vn,{message:t})}return e.type===`tool-summary`?F(Hn,{entry:e}):e.type===`usage-summary`?F(Pn,{entry:e}):e.type===`tool-start`||e.type===`tool-end`?F(P,{}):F(Un,{entry:e})}function Gn({history:t}){return F(e,{flexDirection:`column`,children:t.map(e=>F(Wn,{entry:e},e.id))})}const Kn=[`Allow [y]`,`Allow always (this session) [s]`,`Allow always (this project) [p]`,`Deny [n]`];function qn(e,t){let n=me({...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 Jn(e,t){if(e.resolved)return{state:e,effect:{type:`none`}};if(typeof t!=`string`)return Xn(e,t.index);let n=X(e,t,{itemCount:Kn.length});return n.effect.type===`select`?{state:n.state,effect:{type:`resolve`,decision:Yn(n.effect.index)}}:{state:n.state,effect:{type:`none`}}}function Yn(e){return e===0?!0:e===1?`allow-session`:e===2?`allow-project`:!1}function Xn(e,t){return{state:{...e,selectedIndex:t,resolved:!0},effect:{type:`resolve`,decision:Yn(t)}}}function Zn(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 Qn({request:n}){let[r,a]=c.useState(()=>J()),o=c.useRef(r),s=c.useRef(n);if(s.current!==n){s.current=n;let e=J();o.current=e,a(e)}let l=c.useCallback(e=>{let t=Jn(o.current,e);o.current=t.state,a(t.state),t.effect.type===`resolve`&&n.resolve(t.effect.decision)},[n]);return i((e,t)=>{let n=qn(e,t);n!==void 0&&l(n)}),I(e,{flexDirection:`column`,borderStyle:`round`,borderColor:`yellow`,paddingX:1,children:[F(t,{color:`yellow`,bold:!0,children:`[Permission Required]`}),I(t,{children:[`Tool:`,` `,F(t,{color:`cyan`,bold:!0,children:n.toolName})]}),I(t,{dimColor:!0,children:[` `,Zn(n.toolArgs)]}),F(e,{marginTop:1,children:Kn.map((n,i)=>F(e,{marginRight:2,children:I(t,{color:i===r.selectedIndex?`cyan`:void 0,bold:i===r.selectedIndex,children:[i===r.selectedIndex?`> `:` `,n]})},n))}),F(t,{dimColor:!0,children:` left/right to select, Enter to confirm`})]})}function $n(e,t,n){let r=me({...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 er(e,t,n){return e.resolved?{state:e,effect:{type:`none`}}:typeof t==`string`?X(e,t,{itemCount:n}):{state:{...e,selectedIndex:t.index,resolved:!0},effect:{type:`select`,index:t.index}}}function tr({message:n,options:r=[`Yes`,`No`],onSelect:a}){let[o,s]=h(()=>J()),c=m(o),l=u(e=>{let t=er(c.current,e,r.length);c.current=t.state,s(t.state),t.effect.type===`select`&&a(t.effect.index)},[a,r.length]);return i((e,t)=>{let n=$n(e,t,r.length);n!==void 0&&l(n)}),I(e,{flexDirection:`column`,borderStyle:`round`,borderColor:`yellow`,paddingX:1,children:[F(t,{color:`yellow`,children:n}),F(e,{marginTop:1,children:r.map((n,r)=>F(e,{marginRight:2,children:I(t,{color:r===o.selectedIndex?`cyan`:void 0,bold:r===o.selectedIndex,children:[r===o.selectedIndex?`> `:` `,n]})},n))}),F(t,{dimColor:!0,children:` arrow keys to select, Enter to confirm`})]})}function nr(e,t,n,r,i){let[a,o]=h([]),[s,c]=h(!1),[l,u]=h();return f(()=>{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 rr({title:n,items:r,onSelect:a,onBack:o,loading:s,error:c}){let[l,d]=h(()=>J()),f=m(l),p=!s&&!c,g=u(e=>{let t=X(f.current,e,{itemCount:r.length,enabled:p});if(f.current=t.state,d(t.state),t.effect.type===`cancel`)o();else if(t.effect.type===`select`){let e=r[t.effect.index];e!==void 0&&a(e.value)}},[p,r,o,a]);i((e,t)=>{let n=Y(t);n!==void 0&&g(n)});let _=Z(l,{itemCount:r.length});_!==l&&(f.current=_);let v=_.selectedIndex;return I(e,{flexDirection:`column`,borderStyle:`round`,borderColor:`yellow`,paddingX:1,children:[F(t,{color:`yellow`,bold:!0,children:n}),s&&F(e,{marginTop:1,children:F(t,{dimColor:!0,children:`Loading...`})}),c&&I(e,{marginTop:1,flexDirection:`column`,children:[F(t,{color:`red`,children:c}),F(t,{dimColor:!0,children:`Press Esc to go back`})]}),!s&&!c&&F(e,{flexDirection:`column`,marginTop:1,children:r.map((n,r)=>I(e,{children:[I(t,{color:r===v?`cyan`:void 0,bold:r===v,children:[r===v?`> `:` `,n.label]}),n.hint&&I(t,{dimColor:!0,children:[` `,n.hint]})]},n.value))}),F(t,{dimColor:!0,children:s||c?``:` ↑↓ Navigate Enter Select Esc Back`})]})}function ir(e,t){e===`marketplace`?t.push({screen:`marketplace-list`}):e===`installed`&&t.push({screen:`installed-list`})}function ar(e,t){e===`__add__`?t.push({screen:`marketplace-add`}):t.push({screen:`marketplace-action`,context:{marketplace:e}})}function or(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 sr(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 cr(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 lr(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 ur(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 dr({callbacks:e,onClose:t,addMessage:n}){let[r,i]=h([{screen:`main`}]),[a,o]=h(),[s,c]=h(0),l=r[r.length-1]??{screen:`main`},d=u(e=>{i(t=>[...t,e])},[]),f=u(()=>{i(e=>e.length<=1?(t(),e):e.slice(0,-1))},[t]),p=u(e=>{i(n=>{let r=n.slice(0,Math.max(1,n.length-e));return r.length===0?(t(),n):r})},[t]),m=u(e=>{n?.({role:`system`,content:e})},[n]),g=u(()=>{c(e=>e+1)},[]),_=u(e=>o(e),[o]),v={push:u(e=>d({screen:e.screen,context:e.context}),[d]),pop:f,popN:p,notify:m,setConfirm:_,refresh:g},{items:y,loading:b,error:x}=nr(l.screen,l.context?.marketplace,e,s,r.length),S=u(t=>{let n=l.screen,r=l.context;n===`main`?ir(t,v):n===`marketplace-list`?ar(t,v):n===`marketplace-action`?or(t,r?.marketplace??``,e,v):n===`marketplace-browse`?sr(t,r?.marketplace??``,y,v):n===`marketplace-install-scope`?cr(t,r?.pluginId??``,e,v):n===`installed-list`?lr(t,e,v):n===`installed-action`&&ur(t,r?.pluginId??``,e,v)},[l,y,e,d,f,p,m,o,g]),C=u(t=>{l.screen===`marketplace-add`&&e.marketplaceAdd(t).then(e=>{m(`Added marketplace "${e}" from ${t}.`),f()}).catch(e=>{m(`Error: ${e instanceof Error?e.message:String(e)}`),f()})},[l.screen,e,m,f]);if(a)return F(tr,{message:a.message,onSelect:e=>{e===0?a.onConfirm():a.onCancel()}});let w=l.screen;return w===`marketplace-add`?F(tn,{title:`Add Marketplace Source`,placeholder:`owner/repo or git URL`,onSubmit:C,onCancel:f,validate:e=>e.includes(`/`)?void 0:`Must be owner/repo or a git URL`}):w===`marketplace-action`?F(rr,{title:`Marketplace: ${l.context?.marketplace??``}`,items:[{label:`Browse plugins`,value:`browse`},{label:`Update`,value:`update`},{label:`Remove`,value:`remove`}],onSelect:S,onBack:f},r.length):w===`marketplace-install-scope`?F(rr,{title:`Install scope for "${l.context?.pluginId??``}"`,items:[{label:`User scope`,value:`user`},{label:`Project scope`,value:`project`}],onSelect:S,onBack:f},r.length):w===`installed-action`?F(rr,{title:`Plugin: ${l.context?.pluginId??``}`,items:[{label:`Uninstall`,value:`uninstall`}],onSelect:S,onBack:f},r.length):F(rr,{title:{main:`Plugin Management`,"marketplace-list":`Marketplace`,"marketplace-browse":`Browse: ${l.context?.marketplace??``}`,"installed-list":`Installed Plugins`}[w]??`Plugin Management`,items:{main:[{label:`Marketplace`,value:`marketplace`},{label:`Installed Plugins`,value:`installed`}]}[w]??y,onSelect:S,onBack:f,loading:b,error:x},`${w}-${r.length}-${s}`)}function fr({sessions:n,onSelect:r,onCancel:i}){return I(e,{flexDirection:`column`,paddingX:1,marginBottom:1,children:[F(t,{bold:!0,color:`cyan`,children:`Select a session to resume (ESC to cancel):`}),F(Xt,{items:[...n],renderItem:(e,n)=>{let r=e.preview?e.preview.slice(0,60)+(e.preview.length>60?`...`:``):``;return I(t,{children:[n?`> `:` `,F(t,{bold:!0,children:e.name??e.id.slice(0,8)}),` `,F(t,{dimColor:!0,children:new Date(e.updatedAt).toLocaleString(void 0,{month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`})}),` `,I(t,{dimColor:!0,children:[`msgs: `,e.messageCount]}),r?I(P,{children:[`
|
|
18
|
+
`,F(t,{color:`gray`,children:r})]}):null]})},onSelect:e=>r(e.id),onCancel:i})]})}function pr(e){let t=mr(e),n=e.hasPendingPrompt&&t.kind!==`queued`?[`queued`]:[],r=[t.label,...n].join(` · `);return{...t,segments:n,text:r}}function mr(e){return e.activeToolCount>0?{kind:`tools`,label:`Tools x${e.activeToolCount}`,color:`cyan`}:e.isThinking?{kind:`thinking`,label:`Thinking`,color:`yellow`}:e.activeBackgroundTaskCount>0?{kind:`background`,label:`Background x${e.activeBackgroundTaskCount}`,color:`cyan`}:e.hasPendingPrompt?{kind:`queued`,label:`Queued`,color:`yellow`}:{kind:`idle`,label:`Idle`,color:`gray`}}function hr(e){return e>=90?`red`:e>=70?`yellow`:`green`}function gr({isThinking:e,activeToolCount:n,activeBackgroundTaskCount:r,hasPendingPrompt:i}){let a=pr({isThinking:e,activeToolCount:n,activeBackgroundTaskCount:r,hasPendingPrompt:i});return F(t,{color:a.color,bold:a.kind!==`idle`,children:a.text})}function _r({percentage:e,usedTokens:n,maxTokens:r}){return I(t,{color:hr(e),children:[`Context: `,Math.round(e),`% (`,y(n),`/`,y(r),`)`]})}function vr({permissionMode:e}){return I(P,{children:[F(t,{color:`cyan`,bold:!0,children:`Mode:`}),` `,F(t,{children:e})]})}function yr(e){return e!==`default`}function br({modelName:e,providerDisplayName:n}){return n===void 0?F(t,{dimColor:!0,children:e}):I(t,{dimColor:!0,children:[n,` `,e]})}function xr(e){let n=e.showGitBranch&&e.gitBranch!==void 0&&e.gitBranch.length>0,r=yr(e.permissionMode);return I(t,{children:[F(gr,{isThinking:e.isThinking,activeToolCount:e.activeToolCount,activeBackgroundTaskCount:e.activeBackgroundTaskCount,hasPendingPrompt:e.hasPendingPrompt}),r&&I(P,{children:[` | `,F(vr,{permissionMode:e.permissionMode})]}),e.sessionName&&I(P,{children:[` | `,F(t,{color:`magenta`,children:e.sessionName})]}),n&&I(P,{children:[` | `,I(t,{dimColor:!0,children:[`git: `,e.gitBranch]})]}),` | `,F(br,{modelName:e.modelName,providerDisplayName:e.providerDisplayName}),` | `,F(_r,{percentage:e.contextPercentage,usedTokens:e.contextUsedTokens,maxTokens:e.contextMaxTokens})]})}function Sr({permissionMode:n,modelName:r,providerDisplayName:i,sessionId:a,isThinking:o,activeToolCount:s=0,activeBackgroundTaskCount:c=0,hasPendingPrompt:l=!1,contextPercentage:u,contextUsedTokens:d,contextMaxTokens:f,sessionName:p,gitBranch:m,showGitBranch:h=!0,activeAgentLabel:g}){return I(e,{borderStyle:`single`,borderColor:`gray`,paddingLeft:1,paddingRight:1,justifyContent:`space-between`,children:[F(xr,{permissionMode:n,modelName:r,providerDisplayName:i,isThinking:o,activeToolCount:s,activeBackgroundTaskCount:c,hasPendingPrompt:l,contextPercentage:u,contextUsedTokens:d,contextMaxTokens:f,sessionName:p,gitBranch:m,showGitBranch:h}),g!==void 0&&I(t,{color:`yellow`,bold:!0,children:[`[`,g,`]`]})]})}function Cr({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:m}){let h=He(),g=p(()=>h.getGitBranch(e),[h,e,m]),_=p(()=>r===void 0?void 0:h.getProviderDisplayName(r),[h,r]);return d.enabled?F(Sr,{permissionMode:t,modelName:n??``,providerDisplayName:_,sessionId:i,isThinking:a,activeToolCount:o,activeBackgroundTaskCount:s,hasPendingPrompt:c,contextPercentage:l.percentage,contextUsedTokens:l.usedTokens,contextMaxTokens:l.maxTokens,sessionName:u,gitBranch:g,showGitBranch:d.gitBranch,activeAgentLabel:f}):null}function wr(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 Tr(n){return n?F(e,{marginBottom:1,children:F(t,{color:`yellow`,children:`Thinking...`})}):F(P,{})}function Er(n){return I(e,{flexDirection:`column`,marginBottom:1,children:[F(t,{color:`white`,bold:!0,children:`Tools:`}),F(t,{children:` `}),n.map((n,r)=>{let{color:i,icon:a,strikethrough:o}=wr(n);return I(e,{flexDirection:`column`,children:[I(t,{color:i,strikethrough:o,children:[` `,a,` `,n.toolName,`(`,n.firstArg,`)`]}),n.diffLines&&n.diffLines.length>0&&F(Nn,{file:n.diffFile,lines:n.diffLines})]},`${n.toolName}-${r}`)})]})}function Dr({text:n,activeTools:r,isThinking:i=!1}){let a=r.length>0,o=n.length>0;return!a&&!o?Tr(i):I(e,{flexDirection:`column`,children:[a&&Er(r),o&&I(e,{flexDirection:`column`,marginBottom:1,children:[F(t,{color:`cyan`,bold:!0,children:`Robota:`}),F(t,{children:` `}),F(e,{marginLeft:2,children:F(t,{wrap:`wrap`,children:Dn(n)})})]})]})}function Or({entry:n,selected:r}){let i=n.config.enabled,a=i?`●`:`○`,o=i?`[enabled] `:`[disabled]`,s=n.config.options?.port,c=typeof s==`number`?`port: ${s}`:``;return F(e,{children:F(t,{color:r?`cyan`:void 0,bold:r,children:`${a} ${n.transport.name.padEnd(18)} ${o} ${c}`})})}function kr(e,t,n,r,a,o,s,c){i(u((i,l)=>{if(!n){if(l.upArrow){a(e=>Math.max(0,e-1));return}if(l.downArrow){a(t=>Math.min(e.length-1,t+1));return}if(l.escape||l.return){s();return}if(i===` `){let n=e[t];if(!n)return;o(!0),r.setEnabled(n.transport.name,!n.config.enabled).then(()=>{c(),o(!1)}).catch(()=>o(!1))}}},[n,e,t,r,s,c,a,o]))}function Ar({registry:n,onClose:r}){let[i,a]=h(()=>n.getAll()),[o,s]=h(0),[c,l]=h(!1);return kr(i,o,c,n,s,l,r,u(()=>{a(n.getAll())},[n])),I(e,{flexDirection:`column`,paddingX:2,paddingY:1,children:[F(t,{bold:!0,children:`Settings › Transports`}),F(e,{marginTop:1,flexDirection:`column`,children:i.map((e,t)=>F(Or,{entry:e,selected:t===o},e.transport.name))}),F(e,{marginTop:1,children:F(t,{dimColor:!0,children:`↑↓ select space toggle enter/esc close`})}),c&&F(e,{marginTop:1,children:F(t,{color:`yellow`,children:`Saving…`})})]})}function jr({message:n}){return F(e,{paddingX:1,marginBottom:1,children:F(t,{color:`yellow`,children:n})})}function Mr(e){let[t,n]=h(e.resumeSessionId),[r,i]=h(e.showSessionPickerOnStart??!1);return F(Ve,{value:e.cliAdapter,children:F(Nr,{...e,showSessionPickerOnStart:r,resumeSessionId:t,onSessionSwitch:e=>{i(!1),n(e)}},t??`__new__`)})}function Nr(n){let a=n.cwd,[o,s]=h(n.sessionName),{interactiveSession:c,registry:l,commandEffectQueue:d,history:_,addEntry:v,streamingText:y,activeTools:b,isThinking:x,isAborting:C,isShuttingDown:w,pendingPrompt:T,executionWorkspaceSnapshot:E,selectedExecutionEntryId:D,selectExecutionWorkspaceEntry:O,readExecutionWorkspaceDetail:k,permissionRequest:A,contextState:j,handleSubmit:M,handleAbort:N,handleCancelQueue:P,handleShutdown:L}=Pe({cwd:a,provider:n.provider,permissionMode:n.permissionMode,maxTurns:n.maxTurns,sessionStore:n.sessionStore,resumeSessionId:n.resumeSessionId,forkSession:n.forkSession,sessionName:n.sessionName,onAutoNamed:s,backgroundTaskRunners:n.backgroundTaskRunners,subagentRunnerFactory:n.subagentRunnerFactory,commandModules:n.commandModules,commandHostAdapters:n.commandHostAdapters,shellExec:n.shellExec,transportRegistry:n.transportRegistry,language:n.language,reloadPluginCommandSource:n.reloadPluginCommandSource,agentName:n.agentName,systemPrompt:n.systemPrompt,appendSystemPrompt:n.appendSystemPrompt,allowedTools:n.allowedTools,deniedTools:n.deniedTools}),te=Ie(a),ne=n.commandHostAdapters?.plugin??te,{exit:re}=r(),[R,ie]=h(),[z,B]=h(!1),[H,U]=h(null),[W,G]=h(),[K,q]=h(!1),[oe,se]=Ke(),[ce,le]=h(0),pe=p(()=>V(E),[E]),J=ae(E),Y=p(()=>E?.entries.find(e=>e.id===D),[E,D]),{handleSubmit:me,pendingInteractionPrompt:X,showPluginTUI:Z,showSessionPicker:Q,showTransportTUI:$,setShowPluginTUI:he,setShowSessionPicker:_e,setShowTransportTUI:ve,handleInteractionSubmit:ye,handleInteractionCancel:be}=Ue({cwd:a,providerOverride:n.providerOverride,interactiveSession:c,commandEffectQueue:d,addEntry:v,baseHandleSubmit:M,setSessionName:s,setStatusLineSettings:se,showSessionPickerOnStart:n.showSessionPickerOnStart,openAgentSwitcher:()=>B(!0)}),xe=!Y||Y.kind===`main_thread`||Y.controls.includes(`send`),Se=Y&&Y.kind!==`main_thread`?Y.title:void 0,Ce=p(()=>E?.entries.find(e=>e.kind===`main_thread`)?.id,[E]),we=u(async e=>{Y&&Y.kind!==`main_thread`&&Y.controls.includes(`send`)?await c.sendAgentJob(Y.sourceId,e):await me(e)},[Y,me,c]),Te=u(async e=>{le(e=>e+1),await we(e)},[we]),Ee=m(!1);f(()=>{Ee.current&&!x&&le(e=>e+1),Ee.current=x},[x]),f(()=>{let e=c?.getName?.();e&&!o&&s(e)},[c,o]),f(()=>{let e=!0;return n.startupUpdateNotice?.then(t=>{e&&t!==void 0&&ie(t)}).catch(()=>{}),()=>{e=!1}},[n.startupUpdateNotice]),f(()=>{let e=o?`Robota — ${o}`:`Robota`;process.stdout.write(`\x1b]0;${e}\x07`)},[o]),i((e,t)=>{!t.escape||!x||A||Z||$||Q||z||N()}),i((e,t)=>{!t.ctrl||e!==`b`||A||Z||Q||w||B(e=>!e)}),i((e,t)=>{!t.escape||x||A||Z||$||Q||z||Y&&Y.kind!==`main_thread`&&Ce!==void 0&&O(Ce)}),i((e,t)=>{!t.ctrl||e!==`c`||w||L(`prompt_input_exit`).finally(()=>re())}),f(()=>{let e=()=>{w||L(`other`).finally(()=>re())};return process.once(`SIGINT`,e),process.once(`SIGTERM`,e),()=>{process.off(`SIGINT`,e),process.off(`SIGTERM`,e)}},[L,re,w]),f(()=>{if(!Y||Y.kind===`main_thread`){U(null),G(void 0),q(!1);return}let e=!0;return q(!0),G(void 0),k(Y.id).then(t=>{e&&(U(t),q(!1))}).catch(t=>{e&&(G(t.message),q(!1))}),()=>{e=!1}},[E,k,Y]);let De=n.permissionMode??`default`,Oe=``;try{let e=c.getSession();De=e.getPermissionMode(),Oe=e.getSessionId()}catch{}return I(e,{flexDirection:`column`,children:[I(e,{flexDirection:`column`,paddingX:1,marginBottom:1,children:[F(t,{color:`cyan`,bold:!0,children:`
|
|
19
|
+
____ ___ ____ ___ _____ _
|
|
20
|
+
| _ \\ / _ \\| __ ) / _ \\_ _|/ \\
|
|
21
|
+
| |_) | | | | _ \\| | | || | / _ \\
|
|
22
|
+
| _ <| |_| | |_) | |_| || |/ ___ \\
|
|
23
|
+
|_| \\_\\\\___/|____/ \\___/ |_/_/ \\_\\
|
|
24
|
+
`}),I(t,{dimColor:!0,children:[` v`,n.version??`0.0.0`]})]}),R&&F(jr,{message:R}),I(e,{flexDirection:`column`,paddingX:1,flexGrow:1,children:[Y&&Y.kind!==`main_thread`?F(fe,{entry:Y,page:H,loading:K,error:W}):F(Gn,{history:_}),w&&F(e,{marginBottom:1,children:F(t,{color:`yellow`,children:`Shutting down...`})}),(x||b.length>0)&&F(e,{flexDirection:`column`,marginBottom:1,children:F(Dr,{text:y,activeTools:b,isThinking:x})}),F(ue,{entries:pe})]}),z&&F(ge,{snapshot:E,selectedEntryId:D,onSelect:O,onClose:()=>B(!1)}),A&&F(Qn,{request:A}),X&&F(rn,{prompt:X,onSubmit:ye,onCancel:be}),Z&&F(dr,{callbacks:ne,onClose:()=>he(!1),addMessage:e=>v(S(g(e.content)))}),$&&n.transportRegistry&&F(Ar,{registry:n.transportRegistry,onClose:()=>ve(!1)}),Q&&F(fr,{sessions:ee(n.sessionStore,n.cwd),onSelect:e=>{_e(!1),n.onSessionSwitch(e)},onCancel:()=>{_e(!1),v(S(g(`Session resume cancelled.`)))}}),F(de,{percentage:j.percentage}),F(Cr,{cwd:a,permissionMode:De,modelId:n.modelId,providerType:n.providerType,sessionId:Oe,isThinking:x,activeToolCount:b.length,activeBackgroundTaskCount:J,hasPendingPrompt:T!==null,contextState:j,sessionName:o,settings:oe,activeAgentLabel:Se,gitRefreshToken:ce}),F(Yt,{onSubmit:Te,onCancelQueue:P,isDisabled:!!A||Z||$||Q||z||w||X!==null||x&&!!T||!xe,isAborting:C,pendingPrompt:T,registry:l,sessionName:o,history:_}),F(e,{position:`absolute`,children:F(t,{children:` `})})]})}async function Pr(e){process.on(`unhandledRejection`,e=>{process.stderr.write(`\n[UNHANDLED REJECTION] ${e}\n`),e instanceof Error&&process.stderr.write(`${e.stack}\n`)}),await n(F(Mr,{...e}),{exitOnCtrlC:!1}).waitUntilExit()}var Fr=class{name=`tui`;defaultEnabled=!0;optionsSchema={};options;constructor(e){this.options=e}attach(e){}async start(){await Pr(this.options)}async stop(){}validateOptions(e){return!0}};function Ir({providerDefinitions:e,reloadPluginCommandSource:t}){return{getUserSettingsPath:()=>k(),readSettings:e=>j(e),writeSettings:(e,t)=>N(e,t),deleteSettings:e=>O(e),applyStatusLineSettings:(e,t)=>D(e,t),reloadPluginCommandSource:e=>{t(e)},applyActiveModelChange:(e,t,n)=>(E(e,t,n),{applied:!0}),getGitBranch:e=>M(e),getProviderDisplayName:t=>v(e,t)?.displayName??t}}export{Fr as n,Ir as t};
|
|
25
|
+
//# sourceMappingURL=tui-87G6pg3z.js.map
|