@robota-sdk/agent-transport 3.0.0-beta.64

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.
Files changed (183) hide show
  1. package/LICENSE +21 -0
  2. package/dist/node/headless/index.cjs +1 -0
  3. package/dist/node/headless/index.d.ts +2 -0
  4. package/dist/node/headless/index.js +1 -0
  5. package/dist/node/headless-CWEpJXFK.js +7 -0
  6. package/dist/node/headless-CWEpJXFK.js.map +1 -0
  7. package/dist/node/headless-CsZFelG9.cjs +6 -0
  8. package/dist/node/http/index.cjs +1 -0
  9. package/dist/node/http/index.d.ts +2 -0
  10. package/dist/node/http/index.js +1 -0
  11. package/dist/node/http-CM3TJhrF.cjs +1 -0
  12. package/dist/node/http-DwO1AHG-.js +2 -0
  13. package/dist/node/http-DwO1AHG-.js.map +1 -0
  14. package/dist/node/index--Ti9NzQX.d.ts +64 -0
  15. package/dist/node/index--Ti9NzQX.d.ts.map +1 -0
  16. package/dist/node/index-B_rcr14p.d.ts +47 -0
  17. package/dist/node/index-B_rcr14p.d.ts.map +1 -0
  18. package/dist/node/index-C9LWCL4l.d.ts +34 -0
  19. package/dist/node/index-C9LWCL4l.d.ts.map +1 -0
  20. package/dist/node/index-CAr3ioVh.d.ts +64 -0
  21. package/dist/node/index-CAr3ioVh.d.ts.map +1 -0
  22. package/dist/node/index-CEs25wVk.d.ts +213 -0
  23. package/dist/node/index-CEs25wVk.d.ts.map +1 -0
  24. package/dist/node/index-CvXLpjJO.d.ts +213 -0
  25. package/dist/node/index-CvXLpjJO.d.ts.map +1 -0
  26. package/dist/node/index-D34WUfFH.d.ts +26 -0
  27. package/dist/node/index-D34WUfFH.d.ts.map +1 -0
  28. package/dist/node/index-Y0zHb1Bz.d.ts +47 -0
  29. package/dist/node/index-Y0zHb1Bz.d.ts.map +1 -0
  30. package/dist/node/index-k3TUjA-T.d.ts +26 -0
  31. package/dist/node/index-k3TUjA-T.d.ts.map +1 -0
  32. package/dist/node/index-nBlMTFkZ.d.ts +34 -0
  33. package/dist/node/index-nBlMTFkZ.d.ts.map +1 -0
  34. package/dist/node/index.cjs +1 -0
  35. package/dist/node/index.d.ts +6 -0
  36. package/dist/node/index.js +1 -0
  37. package/dist/node/mcp/index.cjs +1 -0
  38. package/dist/node/mcp/index.d.ts +2 -0
  39. package/dist/node/mcp/index.js +1 -0
  40. package/dist/node/mcp-BXBwF6Wu.js +2 -0
  41. package/dist/node/mcp-BXBwF6Wu.js.map +1 -0
  42. package/dist/node/mcp-DcHuGokt.cjs +1 -0
  43. package/dist/node/tui/index.cjs +1 -0
  44. package/dist/node/tui/index.d.ts +2 -0
  45. package/dist/node/tui/index.js +1 -0
  46. package/dist/node/tui-CeD_6rSo.cjs +24 -0
  47. package/dist/node/tui-zmDTPk4b.js +25 -0
  48. package/dist/node/tui-zmDTPk4b.js.map +1 -0
  49. package/dist/node/ws/index.cjs +1 -0
  50. package/dist/node/ws/index.d.ts +2 -0
  51. package/dist/node/ws/index.js +1 -0
  52. package/dist/node/ws-B-oRccFl.js +2 -0
  53. package/dist/node/ws-B-oRccFl.js.map +1 -0
  54. package/dist/node/ws-COnIgnmn.cjs +1 -0
  55. package/package.json +141 -0
  56. package/src/headless/__tests__/headless-runner-initialization.test.ts +45 -0
  57. package/src/headless/__tests__/headless-runner.test.ts +484 -0
  58. package/src/headless/__tests__/headless-skill-activation.integration.test.ts +430 -0
  59. package/src/headless/__tests__/headless-transport.test.ts +268 -0
  60. package/src/headless/headless-runner.ts +141 -0
  61. package/src/headless/headless-stream-json.ts +142 -0
  62. package/src/headless/headless-transport.ts +43 -0
  63. package/src/headless/index.ts +4 -0
  64. package/src/http/__tests__/http-transport.test.ts +55 -0
  65. package/src/http/__tests__/routes.test.ts +168 -0
  66. package/src/http/http-transport.ts +42 -0
  67. package/src/http/index.ts +4 -0
  68. package/src/http/routes.ts +151 -0
  69. package/src/index.ts +5 -0
  70. package/src/mcp/__tests__/mcp-server.test.ts +66 -0
  71. package/src/mcp/__tests__/mcp-transport.test.ts +46 -0
  72. package/src/mcp/index.ts +4 -0
  73. package/src/mcp/mcp-server.ts +162 -0
  74. package/src/mcp/mcp-transport.ts +48 -0
  75. package/src/tui/App.tsx +478 -0
  76. package/src/tui/BackgroundTaskPanel.tsx +34 -0
  77. package/src/tui/CjkTextInput.tsx +204 -0
  78. package/src/tui/ConfirmPrompt.tsx +69 -0
  79. package/src/tui/ExecutionWorkspaceDetailPane.tsx +62 -0
  80. package/src/tui/ExecutionWorkspaceSwitcher.tsx +185 -0
  81. package/src/tui/InkTerminal.ts +42 -0
  82. package/src/tui/InputArea.tsx +298 -0
  83. package/src/tui/InteractivePrompt.tsx +57 -0
  84. package/src/tui/ListPicker.tsx +94 -0
  85. package/src/tui/MenuSelect.tsx +103 -0
  86. package/src/tui/MessageList.tsx +282 -0
  87. package/src/tui/PermissionPrompt.tsx +84 -0
  88. package/src/tui/PluginTUI.tsx +256 -0
  89. package/src/tui/SessionPicker.tsx +66 -0
  90. package/src/tui/SessionStatusBar.tsx +66 -0
  91. package/src/tui/SlashAutocomplete.tsx +110 -0
  92. package/src/tui/StatusBar.tsx +213 -0
  93. package/src/tui/StreamingIndicator.tsx +91 -0
  94. package/src/tui/TextPrompt.tsx +80 -0
  95. package/src/tui/ToolCommandOutput.tsx +37 -0
  96. package/src/tui/ToolDiffBlock.tsx +30 -0
  97. package/src/tui/TransportTUI.tsx +116 -0
  98. package/src/tui/UpdateNotice.tsx +14 -0
  99. package/src/tui/UsageSummaryEntry.tsx +38 -0
  100. package/src/tui/WaveText.tsx +44 -0
  101. package/src/tui/__tests__/InteractivePrompt.test.tsx +82 -0
  102. package/src/tui/__tests__/ListPicker.test.tsx +159 -0
  103. package/src/tui/__tests__/MenuSelect.test.tsx +103 -0
  104. package/src/tui/__tests__/PluginTUI.test.tsx +167 -0
  105. package/src/tui/__tests__/SlashAutocomplete.test.tsx +140 -0
  106. package/src/tui/__tests__/TextPrompt.test.tsx +98 -0
  107. package/src/tui/__tests__/UpdateNotice.test.tsx +15 -0
  108. package/src/tui/__tests__/abort-after-permission.test.tsx +169 -0
  109. package/src/tui/__tests__/abort-streaming-e2e.test.tsx +183 -0
  110. package/src/tui/__tests__/background-task-panel.test.tsx +53 -0
  111. package/src/tui/__tests__/background-task-row-format.test.ts +59 -0
  112. package/src/tui/__tests__/cjk-text-input-flow.test.ts +109 -0
  113. package/src/tui/__tests__/cjk-text-input.test.ts +191 -0
  114. package/src/tui/__tests__/command-effect-handler.test.ts +128 -0
  115. package/src/tui/__tests__/command-output-summary.test.ts +95 -0
  116. package/src/tui/__tests__/compact-event-bridge.test.ts +20 -0
  117. package/src/tui/__tests__/confirm-permission-flow.test.ts +91 -0
  118. package/src/tui/__tests__/confirm-prompt.test.tsx +87 -0
  119. package/src/tui/__tests__/execution-workspace-switcher.test.tsx +110 -0
  120. package/src/tui/__tests__/execution-workspace-view-model.test.ts +93 -0
  121. package/src/tui/__tests__/fixtures/provider-setup-prompt-driver.tsx +122 -0
  122. package/src/tui/__tests__/input-area-flow.test.ts +152 -0
  123. package/src/tui/__tests__/message-list-rendering.test.tsx +353 -0
  124. package/src/tui/__tests__/model-change-side-effect.test.ts +91 -0
  125. package/src/tui/__tests__/prompt-queue.test.tsx +255 -0
  126. package/src/tui/__tests__/provider-setup-pty-e2e.test.ts +233 -0
  127. package/src/tui/__tests__/render-markdown.test.ts +72 -0
  128. package/src/tui/__tests__/selection-flow.test.ts +61 -0
  129. package/src/tui/__tests__/slash-routing-effects.test.ts +225 -0
  130. package/src/tui/__tests__/status-activity.test.ts +71 -0
  131. package/src/tui/__tests__/status-bar.test.tsx +157 -0
  132. package/src/tui/__tests__/streaming-indicator.test.tsx +137 -0
  133. package/src/tui/__tests__/text-prompt-flow.test.ts +77 -0
  134. package/src/tui/__tests__/tui-state-manager.test.ts +401 -0
  135. package/src/tui/background-task-row-format.ts +52 -0
  136. package/src/tui/command-output-summary.ts +122 -0
  137. package/src/tui/execution-workspace-view-model.ts +123 -0
  138. package/src/tui/flows/cjk-text-input-flow.ts +285 -0
  139. package/src/tui/flows/confirm-prompt-flow.ts +45 -0
  140. package/src/tui/flows/input-area-flow.ts +186 -0
  141. package/src/tui/flows/permission-prompt-flow.ts +76 -0
  142. package/src/tui/flows/selection-flow.ts +126 -0
  143. package/src/tui/flows/text-prompt-flow.ts +98 -0
  144. package/src/tui/hooks/command-effect-handler.ts +98 -0
  145. package/src/tui/hooks/command-effect-queue.ts +39 -0
  146. package/src/tui/hooks/model-change-side-effect.ts +63 -0
  147. package/src/tui/hooks/side-effects-types.ts +38 -0
  148. package/src/tui/hooks/use-interactive-session-init.ts +50 -0
  149. package/src/tui/hooks/useAutocomplete.ts +85 -0
  150. package/src/tui/hooks/useInteractiveSession.ts +273 -0
  151. package/src/tui/hooks/usePermissionQueue.ts +51 -0
  152. package/src/tui/hooks/usePluginCallbacks.ts +30 -0
  153. package/src/tui/hooks/usePluginScreenData.ts +84 -0
  154. package/src/tui/hooks/useSideEffects.ts +210 -0
  155. package/src/tui/hooks/useSlashRouting.ts +117 -0
  156. package/src/tui/hooks/useStatusLineSettings.ts +35 -0
  157. package/src/tui/index.ts +3 -0
  158. package/src/tui/plugin-tui-handlers.ts +163 -0
  159. package/src/tui/render-markdown.ts +129 -0
  160. package/src/tui/render.tsx +60 -0
  161. package/src/tui/status-activity.ts +63 -0
  162. package/src/tui/tui-cli-adapter-context.tsx +12 -0
  163. package/src/tui/tui-cli-adapter.ts +25 -0
  164. package/src/tui/tui-state-manager.ts +225 -0
  165. package/src/tui/tui-transport.ts +32 -0
  166. package/src/tui/types.ts +14 -0
  167. package/src/tui/utils/__tests__/edit-diff.test.ts +426 -0
  168. package/src/tui/utils/__tests__/paste-detection.test.ts +116 -0
  169. package/src/tui/utils/__tests__/paste-labels.test.ts +46 -0
  170. package/src/tui/utils/__tests__/tool-call-extractor.test.ts +227 -0
  171. package/src/tui/utils/__tests__/tool-diff-summary.test.ts +104 -0
  172. package/src/tui/utils/edit-diff.ts +152 -0
  173. package/src/tui/utils/paste-labels.ts +9 -0
  174. package/src/tui/utils/tool-call-extractor.ts +91 -0
  175. package/src/tui/utils/tool-diff-summary.ts +75 -0
  176. package/src/ws/__tests__/ws-handler.test.ts +407 -0
  177. package/src/ws/__tests__/ws-transport.test.ts +53 -0
  178. package/src/ws/index.ts +13 -0
  179. package/src/ws/ws-background-messages.ts +170 -0
  180. package/src/ws/ws-handler.ts +279 -0
  181. package/src/ws/ws-protocol.ts +76 -0
  182. package/src/ws/ws-transport-configurable.ts +123 -0
  183. package/src/ws/ws-transport.ts +42 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Robota Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../headless-CsZFelG9.cjs`);exports.createHeadlessRunner=e.n,exports.createHeadlessTransport=e.t;
@@ -0,0 +1,2 @@
1
+ import { a as createHeadlessRunner, i as TOutputFormat, n as createHeadlessTransport, r as IHeadlessRunnerOptions, t as IHeadlessTransportOptions } from "../index-D34WUfFH.js";
2
+ export { type IHeadlessRunnerOptions, type IHeadlessTransportOptions, type TOutputFormat, createHeadlessRunner, createHeadlessTransport };
@@ -0,0 +1 @@
1
+ import{n as e,t}from"../headless-CWEpJXFK.js";export{e as createHeadlessRunner,t as createHeadlessTransport};
@@ -0,0 +1,7 @@
1
+ import{randomUUID as e}from"node:crypto";function t(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 n(e,n){let r=t(n);if(!r)return{kind:`not-slash`};let i=await e.executeCommand(r.name,r.args);return i?i.effects?.some(e=>e.type===`session-execution-started`)?{kind:`session-execution`}:{kind:`command-result`,result:i}:{kind:`command-result`,result:{message:`Unknown command "/${r.name}".`,success:!1}}}function r(t,n,r){let i=JSON.stringify({type:`stream_event`,event:r,session_id:n(t),uuid:e()});process.stdout.write(i+`
2
+ `)}function i(e,t,n,i){let o=n=>r(e,t,n),s=e=>o({type:`content_block_delta`,delta:{type:`text_delta`,text:e}}),c=e=>o({type:`background_task_event`,background_task_event:e}),l=e=>o({type:`background_job_group_event`,background_job_group_event:e}),u=()=>a(e,{onTextDelta:s,onBackgroundTaskEvent:c,onBackgroundJobGroupEvent:l,onComplete:d,onInterrupted:f,onError:p}),d=r=>{u(),n(t(e),r.response,`success`),i(0)},f=r=>{u(),n(t(e),r.response,`success`),i(0)},p=r=>{u(),n(t(e),``,`error`),i(1)};return e.on(`text_delta`,s),e.on(`background_task_event`,c),e.on(`background_job_group_event`,l),e.on(`complete`,d),e.on(`interrupted`,f),e.on(`error`,p),u}function a(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 o(e){let{session:t,outputFormat:n}=e;return{run:e=>n===`text`?l(t,e):n===`json`?u(t,e):d(t,e)}}function s(e,t,n){let r=JSON.stringify({type:`result`,result:t,session_id:e,subtype:n});process.stdout.write(r+`
3
+ `)}function c(e){try{return e.getSession().getSessionId()}catch{return``}}function l(e,t){return new Promise(r=>{let i=()=>{e.off(`complete`,a),e.off(`interrupted`,o),e.off(`error`,s)},a=e=>{i(),process.stdout.write(e.response+`
4
+ `),r(0)},o=e=>{i(),e.response&&process.stdout.write(e.response+`
5
+ `),r(0)},s=e=>{i(),r(1)};e.on(`complete`,a),e.on(`interrupted`,o),e.on(`error`,s),n(e,t).then(n=>{if(n.kind===`command-result`){i(),process.stdout.write(n.result.message+`
6
+ `),r(+!n.result.success);return}n.kind!==`session-execution`&&e.submit(t)})})}function u(e,t){return new Promise(r=>{let i=()=>{e.off(`complete`,a),e.off(`interrupted`,o),e.off(`error`,l)},a=t=>{i(),s(c(e),t.response,`success`),r(0)},o=t=>{i(),s(c(e),t.response,`success`),r(0)},l=t=>{i(),s(c(e),``,`error`),r(1)};e.on(`complete`,a),e.on(`interrupted`,o),e.on(`error`,l),n(e,t).then(n=>{if(n.kind===`command-result`){i(),s(c(e),n.result.message,n.result.success?`success`:`error`),r(+!n.result.success);return}n.kind!==`session-execution`&&e.submit(t)})})}function d(e,t){return new Promise(r=>{let a=i(e,c,s,r);n(e,t).then(n=>{if(n.kind===`command-result`){a(),s(c(e),n.result.message,n.result.success?`success`:`error`),r(+!n.result.success);return}n.kind!==`session-execution`&&e.submit(t)})})}function f(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 o({session:t,outputFormat:e.outputFormat}).run(e.prompt)},async stop(){},getExitCode(){return n}}}export{o as n,f as t};
7
+ //# sourceMappingURL=headless-CWEpJXFK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless-CWEpJXFK.js","names":[],"sources":["../../src/headless/headless-stream-json.ts","../../src/headless/headless-runner.ts","../../src/headless/headless-transport.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\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: (sessionId: string, result: string, subtype: 'success' | 'error') => 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');\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 type { IInteractiveSession, IExecutionResult } from '@robota-sdk/agent-framework';\nimport { executeSlashCommandIfPresent, subscribeStreamJsonEvents } from './headless-stream-json.js';\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 writeJsonResult(\n sessionId: string,\n result: string,\n subtype: 'success' | 'error',\n): void {\n const output = JSON.stringify({ type: 'result', result, session_id: sessionId, subtype });\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');\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 type { IInteractiveSession } from '@robota-sdk/agent-framework';\nimport type { ITransportAdapter } from '@robota-sdk/agent-interface-transport';\nimport { createHeadlessRunner } from './headless-runner.js';\nimport type { TOutputFormat } from './headless-runner.js';\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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"}
@@ -0,0 +1,6 @@
1
+ require(`./tui-CeD_6rSo.cjs`);let e=require(`node:crypto`);function t(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 n(e,n){let r=t(n);if(!r)return{kind:`not-slash`};let i=await e.executeCommand(r.name,r.args);return i?i.effects?.some(e=>e.type===`session-execution-started`)?{kind:`session-execution`}:{kind:`command-result`,result:i}:{kind:`command-result`,result:{message:`Unknown command "/${r.name}".`,success:!1}}}function r(t,n,r){let i=JSON.stringify({type:`stream_event`,event:r,session_id:n(t),uuid:(0,e.randomUUID)()});process.stdout.write(i+`
2
+ `)}function i(e,t,n,i){let o=n=>r(e,t,n),s=e=>o({type:`content_block_delta`,delta:{type:`text_delta`,text:e}}),c=e=>o({type:`background_task_event`,background_task_event:e}),l=e=>o({type:`background_job_group_event`,background_job_group_event:e}),u=()=>a(e,{onTextDelta:s,onBackgroundTaskEvent:c,onBackgroundJobGroupEvent:l,onComplete:d,onInterrupted:f,onError:p}),d=r=>{u(),n(t(e),r.response,`success`),i(0)},f=r=>{u(),n(t(e),r.response,`success`),i(0)},p=r=>{u(),n(t(e),``,`error`),i(1)};return e.on(`text_delta`,s),e.on(`background_task_event`,c),e.on(`background_job_group_event`,l),e.on(`complete`,d),e.on(`interrupted`,f),e.on(`error`,p),u}function a(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 o(e){let{session:t,outputFormat:n}=e;return{run:e=>n===`text`?l(t,e):n===`json`?u(t,e):d(t,e)}}function s(e,t,n){let r=JSON.stringify({type:`result`,result:t,session_id:e,subtype:n});process.stdout.write(r+`
3
+ `)}function c(e){try{return e.getSession().getSessionId()}catch{return``}}function l(e,t){return new Promise(r=>{let i=()=>{e.off(`complete`,a),e.off(`interrupted`,o),e.off(`error`,s)},a=e=>{i(),process.stdout.write(e.response+`
4
+ `),r(0)},o=e=>{i(),e.response&&process.stdout.write(e.response+`
5
+ `),r(0)},s=e=>{i(),r(1)};e.on(`complete`,a),e.on(`interrupted`,o),e.on(`error`,s),n(e,t).then(n=>{if(n.kind===`command-result`){i(),process.stdout.write(n.result.message+`
6
+ `),r(+!n.result.success);return}n.kind!==`session-execution`&&e.submit(t)})})}function u(e,t){return new Promise(r=>{let i=()=>{e.off(`complete`,a),e.off(`interrupted`,o),e.off(`error`,l)},a=t=>{i(),s(c(e),t.response,`success`),r(0)},o=t=>{i(),s(c(e),t.response,`success`),r(0)},l=t=>{i(),s(c(e),``,`error`),r(1)};e.on(`complete`,a),e.on(`interrupted`,o),e.on(`error`,l),n(e,t).then(n=>{if(n.kind===`command-result`){i(),s(c(e),n.result.message,n.result.success?`success`:`error`),r(+!n.result.success);return}n.kind!==`session-execution`&&e.submit(t)})})}function d(e,t){return new Promise(r=>{let a=i(e,c,s,r);n(e,t).then(n=>{if(n.kind===`command-result`){a(),s(c(e),n.result.message,n.result.success?`success`:`error`),r(+!n.result.success);return}n.kind!==`session-execution`&&e.submit(t)})})}function f(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 o({session:t,outputFormat:e.outputFormat}).run(e.prompt)},async stop(){},getExitCode(){return n}}}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return f}});
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../http-CM3TJhrF.cjs`);exports.createAgentRoutes=e.n,exports.createHttpTransport=e.t;
@@ -0,0 +1,2 @@
1
+ import { a as createAgentRoutes, i as TSessionFactory, n as createHttpTransport, r as IAgentRoutesOptions, t as IHttpTransportOptions } from "../index-nBlMTFkZ.js";
2
+ export { type IAgentRoutesOptions, type IHttpTransportOptions, type TSessionFactory, createAgentRoutes, createHttpTransport };
@@ -0,0 +1 @@
1
+ import{n as e,t}from"../http-DwO1AHG-.js";export{e as createAgentRoutes,t as createHttpTransport};
@@ -0,0 +1 @@
1
+ require(`./tui-CeD_6rSo.cjs`);let e=require(`hono`),t=require(`hono/streaming`);function n(n){let{sessionFactory:r}=n,i=new e.Hono;return i.post(`/submit`,async e=>{let n=await r(e),i=await e.req.json();return!i.prompt||typeof i.prompt!=`string`?e.json({error:`prompt is required`},400):(0,t.streamSSE)(e,async e=>{let t=[],r=(e,r)=>{n.on(e,r),t.push(()=>n.off(e,r))},a=!1,o=new Promise(t=>{r(`text_delta`,t=>{e.writeSSE({event:`text_delta`,data:JSON.stringify({delta:t})})}),r(`tool_start`,t=>{e.writeSSE({event:`tool_start`,data:JSON.stringify(t)})}),r(`tool_end`,t=>{e.writeSSE({event:`tool_end`,data:JSON.stringify(t)})}),r(`thinking`,n=>{e.writeSSE({event:`thinking`,data:JSON.stringify({isThinking:n})}),!n&&a&&t()}),r(`complete`,t=>{a=!0,e.writeSSE({event:`complete`,data:JSON.stringify(t)})}),r(`interrupted`,t=>{a=!0,e.writeSSE({event:`interrupted`,data:JSON.stringify(t)})}),r(`error`,t=>{a=!0,e.writeSSE({event:`error`,data:JSON.stringify({message:t.message})})})});await n.submit(i.prompt),await o;for(let e of t)e()})}),i.post(`/command`,async e=>{let t=await r(e),n=await e.req.json();if(!n.name||typeof n.name!=`string`)return e.json({error:`name is required`},400);let i=await t.executeCommand(n.name,n.args??``);return i?e.json(i):e.json({error:`Unknown command: ${n.name}`},404)}),i.post(`/abort`,async e=>((await r(e)).abort(),e.json({ok:!0}))),i.post(`/cancel-queue`,async e=>((await r(e)).cancelQueue(),e.json({ok:!0}))),i.get(`/messages`,async e=>{let t=await r(e);return e.json(t.getMessages())}),i.get(`/context`,async e=>{let t=await r(e);return e.json(t.getContextState())}),i.get(`/executing`,async e=>{let t=await r(e);return e.json({executing:t.isExecuting()})}),i.get(`/pending`,async e=>{let t=await r(e);return e.json({pending:t.getPendingPrompt()})}),i}function r(e){let t=null,r=null;return{name:`http`,attach(e){t=e},async start(){if(!t)throw Error(`No session attached. Call attach() first.`);r=n({sessionFactory:()=>t})},async stop(){r=null},getApp(){if(!r)throw Error(`Transport not started. Call start() first.`);return r}}}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return r}});
@@ -0,0 +1,2 @@
1
+ import{Hono as e}from"hono";import{streamSSE as t}from"hono/streaming";function n(n){let{sessionFactory:r}=n,i=new e;return i.post(`/submit`,async e=>{let n=await r(e),i=await e.req.json();return!i.prompt||typeof i.prompt!=`string`?e.json({error:`prompt is required`},400):t(e,async e=>{let t=[],r=(e,r)=>{n.on(e,r),t.push(()=>n.off(e,r))},a=!1,o=new Promise(t=>{r(`text_delta`,t=>{e.writeSSE({event:`text_delta`,data:JSON.stringify({delta:t})})}),r(`tool_start`,t=>{e.writeSSE({event:`tool_start`,data:JSON.stringify(t)})}),r(`tool_end`,t=>{e.writeSSE({event:`tool_end`,data:JSON.stringify(t)})}),r(`thinking`,n=>{e.writeSSE({event:`thinking`,data:JSON.stringify({isThinking:n})}),!n&&a&&t()}),r(`complete`,t=>{a=!0,e.writeSSE({event:`complete`,data:JSON.stringify(t)})}),r(`interrupted`,t=>{a=!0,e.writeSSE({event:`interrupted`,data:JSON.stringify(t)})}),r(`error`,t=>{a=!0,e.writeSSE({event:`error`,data:JSON.stringify({message:t.message})})})});await n.submit(i.prompt),await o;for(let e of t)e()})}),i.post(`/command`,async e=>{let t=await r(e),n=await e.req.json();if(!n.name||typeof n.name!=`string`)return e.json({error:`name is required`},400);let i=await t.executeCommand(n.name,n.args??``);return i?e.json(i):e.json({error:`Unknown command: ${n.name}`},404)}),i.post(`/abort`,async e=>((await r(e)).abort(),e.json({ok:!0}))),i.post(`/cancel-queue`,async e=>((await r(e)).cancelQueue(),e.json({ok:!0}))),i.get(`/messages`,async e=>{let t=await r(e);return e.json(t.getMessages())}),i.get(`/context`,async e=>{let t=await r(e);return e.json(t.getContextState())}),i.get(`/executing`,async e=>{let t=await r(e);return e.json({executing:t.isExecuting()})}),i.get(`/pending`,async e=>{let t=await r(e);return e.json({pending:t.getPendingPrompt()})}),i}function r(e){let t=null,r=null;return{name:`http`,attach(e){t=e},async start(){if(!t)throw Error(`No session attached. Call attach() first.`);r=n({sessionFactory:()=>t})},async stop(){r=null},getApp(){if(!r)throw Error(`Transport not started. Call start() first.`);return r}}}export{n,r as t};
2
+ //# sourceMappingURL=http-DwO1AHG-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-DwO1AHG-.js","names":[],"sources":["../../src/http/routes.ts","../../src/http/http-transport.ts"],"sourcesContent":["/**\n * HTTP transport adapter — exposes IInteractiveSession over REST API.\n *\n * Built on Hono for Cloudflare Workers + Node.js + AWS Lambda compatibility.\n * Each endpoint maps 1:1 to an IInteractiveSession API method.\n */\n\nimport { Hono } from 'hono';\nimport { streamSSE } from 'hono/streaming';\nimport type { Context } from 'hono';\nimport type { IInteractiveSession } from '@robota-sdk/agent-framework';\n\n/** Callback that resolves an IInteractiveSession from the request context. */\nexport type TSessionFactory = (c: Context) => IInteractiveSession | Promise<IInteractiveSession>;\n\nexport interface IAgentRoutesOptions {\n /** Resolve an IInteractiveSession per request (e.g., by auth token, session ID). */\n sessionFactory: TSessionFactory;\n}\n\n/**\n * Create a Hono router with all agent HTTP endpoints.\n *\n * Usage:\n * ```typescript\n * const routes = createAgentRoutes({ sessionFactory });\n * app.route('/agent', routes); // mount on existing app\n * export default routes; // or use standalone (CF Workers)\n * ```\n */\nexport function createAgentRoutes(options: IAgentRoutesOptions): Hono {\n const { sessionFactory } = options;\n const app = new Hono();\n\n // POST /submit — execute prompt, stream events via SSE\n app.post('/submit', async (c) => {\n const session = await sessionFactory(c);\n const body = await c.req.json<{ prompt: string }>();\n\n if (!body.prompt || typeof body.prompt !== 'string') {\n return c.json({ error: 'prompt is required' }, 400);\n }\n\n return streamSSE(c, async (stream) => {\n const cleanup: Array<() => void> = [];\n\n const subscribe = <T>(event: string, handler: (data: T) => void): void => {\n session.on(event as 'text_delta', handler as () => void);\n cleanup.push(() => session.off(event as 'text_delta', handler as () => void));\n };\n\n let completed = false;\n const done = new Promise<void>((resolve) => {\n subscribe('text_delta', (delta: string) => {\n stream.writeSSE({ event: 'text_delta', data: JSON.stringify({ delta }) });\n });\n\n subscribe('tool_start', (state) => {\n stream.writeSSE({ event: 'tool_start', data: JSON.stringify(state) });\n });\n\n subscribe('tool_end', (state) => {\n stream.writeSSE({ event: 'tool_end', data: JSON.stringify(state) });\n });\n\n subscribe('thinking', (isThinking: boolean) => {\n stream.writeSSE({ event: 'thinking', data: JSON.stringify({ isThinking }) });\n if (!isThinking && completed) {\n resolve();\n }\n });\n\n subscribe('complete', (result) => {\n completed = true;\n stream.writeSSE({ event: 'complete', data: JSON.stringify(result) });\n });\n\n subscribe('interrupted', (result) => {\n completed = true;\n stream.writeSSE({ event: 'interrupted', data: JSON.stringify(result) });\n });\n\n subscribe('error', (error: Error) => {\n completed = true;\n stream.writeSSE({ event: 'error', data: JSON.stringify({ message: error.message }) });\n });\n });\n\n await session.submit(body.prompt);\n await done;\n\n for (const fn of cleanup) fn();\n });\n });\n\n // POST /command — execute system command\n app.post('/command', async (c) => {\n const session = await sessionFactory(c);\n const body = await c.req.json<{ name: string; args?: string }>();\n\n if (!body.name || typeof body.name !== 'string') {\n return c.json({ error: 'name is required' }, 400);\n }\n\n const result = await session.executeCommand(body.name, body.args ?? '');\n if (!result) {\n return c.json({ error: `Unknown command: ${body.name}` }, 404);\n }\n return c.json(result);\n });\n\n // POST /abort — abort current execution\n app.post('/abort', async (c) => {\n const session = await sessionFactory(c);\n session.abort();\n return c.json({ ok: true });\n });\n\n // POST /cancel-queue — cancel queued prompt\n app.post('/cancel-queue', async (c) => {\n const session = await sessionFactory(c);\n session.cancelQueue();\n return c.json({ ok: true });\n });\n\n // GET /messages — get message history\n app.get('/messages', async (c) => {\n const session = await sessionFactory(c);\n return c.json(session.getMessages());\n });\n\n // GET /context — get context window state\n app.get('/context', async (c) => {\n const session = await sessionFactory(c);\n return c.json(session.getContextState());\n });\n\n // GET /executing — check if currently executing\n app.get('/executing', async (c) => {\n const session = await sessionFactory(c);\n return c.json({ executing: session.isExecuting() });\n });\n\n // GET /pending — get pending queued prompt\n app.get('/pending', async (c) => {\n const session = await sessionFactory(c);\n return c.json({ pending: session.getPendingPrompt() });\n });\n\n return app;\n}\n","/**\n * ITransportAdapter implementation for HTTP transport.\n *\n * Wraps createAgentRoutes into the unified ITransportAdapter interface\n * while exposing the underlying Hono app via getApp().\n */\n\nimport type { ITransportAdapter } from '@robota-sdk/agent-interface-transport';\nimport type { IInteractiveSession } from '@robota-sdk/agent-framework';\n\nimport { createAgentRoutes } from './routes.js';\nimport type { Hono } from 'hono';\n\nexport interface IHttpTransportOptions {\n /** Optional: base path prefix for routes. */\n basePath?: string;\n}\n\nexport function createHttpTransport(\n options?: IHttpTransportOptions,\n): ITransportAdapter<IInteractiveSession> & { getApp(): Hono } {\n let session: IInteractiveSession | null = null;\n let app: Hono | null = null;\n\n return {\n name: 'http',\n attach(s: IInteractiveSession) {\n session = s;\n },\n async start() {\n if (!session) throw new Error('No session attached. Call attach() first.');\n app = createAgentRoutes({ sessionFactory: () => session! });\n },\n async stop() {\n app = null;\n },\n getApp() {\n if (!app) throw new Error('Transport not started. Call start() first.');\n return app;\n },\n };\n}\n"],"mappings":"uEA8BA,SAAgB,EAAkB,EAAoC,CACpE,GAAM,CAAE,kBAAmB,EACrB,EAAM,IAAI,EAqHhB,OAlHA,EAAI,KAAK,UAAW,KAAO,IAAM,CAC/B,IAAM,EAAU,MAAM,EAAe,CAAC,EAChC,EAAO,MAAM,EAAE,IAAI,KAAyB,EAMlD,MAJI,CAAC,EAAK,QAAU,OAAO,EAAK,QAAW,SAClC,EAAE,KAAK,CAAE,MAAO,oBAAqB,EAAG,GAAG,EAG7C,EAAU,EAAG,KAAO,IAAW,CACpC,IAAM,EAA6B,CAAC,EAE9B,GAAgB,EAAe,IAAqC,CACxE,EAAQ,GAAG,EAAuB,CAAqB,EACvD,EAAQ,SAAW,EAAQ,IAAI,EAAuB,CAAqB,CAAC,CAC9E,EAEI,EAAY,GACV,EAAO,IAAI,QAAe,GAAY,CAC1C,EAAU,aAAe,GAAkB,CACzC,EAAO,SAAS,CAAE,MAAO,aAAc,KAAM,KAAK,UAAU,CAAE,OAAM,CAAC,CAAE,CAAC,CAC1E,CAAC,EAED,EAAU,aAAe,GAAU,CACjC,EAAO,SAAS,CAAE,MAAO,aAAc,KAAM,KAAK,UAAU,CAAK,CAAE,CAAC,CACtE,CAAC,EAED,EAAU,WAAa,GAAU,CAC/B,EAAO,SAAS,CAAE,MAAO,WAAY,KAAM,KAAK,UAAU,CAAK,CAAE,CAAC,CACpE,CAAC,EAED,EAAU,WAAa,GAAwB,CAC7C,EAAO,SAAS,CAAE,MAAO,WAAY,KAAM,KAAK,UAAU,CAAE,YAAW,CAAC,CAAE,CAAC,EACvE,CAAC,GAAc,GACjB,EAAQ,CAEZ,CAAC,EAED,EAAU,WAAa,GAAW,CAChC,EAAY,GACZ,EAAO,SAAS,CAAE,MAAO,WAAY,KAAM,KAAK,UAAU,CAAM,CAAE,CAAC,CACrE,CAAC,EAED,EAAU,cAAgB,GAAW,CACnC,EAAY,GACZ,EAAO,SAAS,CAAE,MAAO,cAAe,KAAM,KAAK,UAAU,CAAM,CAAE,CAAC,CACxE,CAAC,EAED,EAAU,QAAU,GAAiB,CACnC,EAAY,GACZ,EAAO,SAAS,CAAE,MAAO,QAAS,KAAM,KAAK,UAAU,CAAE,QAAS,EAAM,OAAQ,CAAC,CAAE,CAAC,CACtF,CAAC,CACH,CAAC,EAED,MAAM,EAAQ,OAAO,EAAK,MAAM,EAChC,MAAM,EAEN,IAAK,IAAM,KAAM,EAAS,EAAG,CAC/B,CAAC,CACH,CAAC,EAGD,EAAI,KAAK,WAAY,KAAO,IAAM,CAChC,IAAM,EAAU,MAAM,EAAe,CAAC,EAChC,EAAO,MAAM,EAAE,IAAI,KAAsC,EAE/D,GAAI,CAAC,EAAK,MAAQ,OAAO,EAAK,MAAS,SACrC,OAAO,EAAE,KAAK,CAAE,MAAO,kBAAmB,EAAG,GAAG,EAGlD,IAAM,EAAS,MAAM,EAAQ,eAAe,EAAK,KAAM,EAAK,MAAQ,EAAE,EAItE,OAHK,EAGE,EAAE,KAAK,CAAM,EAFX,EAAE,KAAK,CAAE,MAAO,oBAAoB,EAAK,MAAO,EAAG,GAAG,CAGjE,CAAC,EAGD,EAAI,KAAK,SAAU,KAAO,MAExB,MADsB,EAAe,CAAC,GAC9B,MAAM,EACP,EAAE,KAAK,CAAE,GAAI,EAAK,CAAC,EAC3B,EAGD,EAAI,KAAK,gBAAiB,KAAO,MAE/B,MADsB,EAAe,CAAC,GAC9B,YAAY,EACb,EAAE,KAAK,CAAE,GAAI,EAAK,CAAC,EAC3B,EAGD,EAAI,IAAI,YAAa,KAAO,IAAM,CAChC,IAAM,EAAU,MAAM,EAAe,CAAC,EACtC,OAAO,EAAE,KAAK,EAAQ,YAAY,CAAC,CACrC,CAAC,EAGD,EAAI,IAAI,WAAY,KAAO,IAAM,CAC/B,IAAM,EAAU,MAAM,EAAe,CAAC,EACtC,OAAO,EAAE,KAAK,EAAQ,gBAAgB,CAAC,CACzC,CAAC,EAGD,EAAI,IAAI,aAAc,KAAO,IAAM,CACjC,IAAM,EAAU,MAAM,EAAe,CAAC,EACtC,OAAO,EAAE,KAAK,CAAE,UAAW,EAAQ,YAAY,CAAE,CAAC,CACpD,CAAC,EAGD,EAAI,IAAI,WAAY,KAAO,IAAM,CAC/B,IAAM,EAAU,MAAM,EAAe,CAAC,EACtC,OAAO,EAAE,KAAK,CAAE,QAAS,EAAQ,iBAAiB,CAAE,CAAC,CACvD,CAAC,EAEM,CACT,CCpIA,SAAgB,EACd,EAC6D,CAC7D,IAAI,EAAsC,KACtC,EAAmB,KAEvB,MAAO,CACL,KAAM,OACN,OAAO,EAAwB,CAC7B,EAAU,CACZ,EACA,MAAM,OAAQ,CACZ,GAAI,CAAC,EAAS,MAAU,MAAM,2CAA2C,EACzE,EAAM,EAAkB,CAAE,mBAAsB,CAAS,CAAC,CAC5D,EACA,MAAM,MAAO,CACX,EAAM,IACR,EACA,QAAS,CACP,GAAI,CAAC,EAAK,MAAU,MAAM,4CAA4C,EACtE,OAAO,CACT,CACF,CACF"}
@@ -0,0 +1,64 @@
1
+ import { CommandRegistry, IBackgroundTaskRunner, ICommandHostAdapters, ICommandModule, IInteractiveSession, IInteractiveSessionStore, IStatusLineCommandSettings, TShellExecFn, TStatusLineCommandSettingsPatch, TSubagentRunnerFactory } from "@robota-sdk/agent-framework";
2
+ import { IConfigurableTransport, ITransportRegistryView } from "@robota-sdk/agent-interface-transport";
3
+ import { IAIProvider, TPermissionMode, TUniversalValue } from "@robota-sdk/agent-core";
4
+
5
+ //#region src/tui/tui-cli-adapter.d.ts
6
+ interface ITuiCliAdapter {
7
+ getUserSettingsPath(): string;
8
+ readSettings(path: string): Record<string, TUniversalValue>;
9
+ writeSettings(path: string, settings: Record<string, TUniversalValue>): void;
10
+ deleteSettings(path: string): boolean;
11
+ applyStatusLineSettings(path: string, patch: TStatusLineCommandSettingsPatch): IStatusLineCommandSettings;
12
+ reloadPluginCommandSource(registry: CommandRegistry): void;
13
+ applyActiveModelChange(cwd: string, modelId: string, options?: {
14
+ providerOverride?: string;
15
+ }): {
16
+ applied: boolean;
17
+ };
18
+ getGitBranch(cwd: string): string | undefined;
19
+ getProviderDisplayName(type: string): string;
20
+ }
21
+ //#endregion
22
+ //#region src/tui/render.d.ts
23
+ interface IRenderOptions {
24
+ cwd: string;
25
+ provider: IAIProvider;
26
+ providerOverride?: string | undefined;
27
+ providerType?: string | undefined;
28
+ modelId?: string;
29
+ language?: string;
30
+ permissionMode?: TPermissionMode;
31
+ maxTurns?: number;
32
+ version?: string;
33
+ sessionStore?: IInteractiveSessionStore;
34
+ resumeSessionId?: string;
35
+ showSessionPickerOnStart?: boolean;
36
+ forkSession?: boolean;
37
+ sessionName?: string;
38
+ backgroundTaskRunners?: IBackgroundTaskRunner[];
39
+ subagentRunnerFactory?: TSubagentRunnerFactory;
40
+ commandModules?: readonly ICommandModule[];
41
+ commandHostAdapters?: ICommandHostAdapters;
42
+ shellExec?: TShellExecFn;
43
+ startupUpdateNotice?: Promise<string | undefined>;
44
+ transportRegistry?: ITransportRegistryView<IInteractiveSession>;
45
+ cliAdapter: ITuiCliAdapter;
46
+ reloadPluginCommandSource?: (registry: CommandRegistry) => void;
47
+ agentName?: string;
48
+ }
49
+ //#endregion
50
+ //#region src/tui/tui-transport.d.ts
51
+ declare class TuiTransport implements IConfigurableTransport<IInteractiveSession> {
52
+ readonly name = "tui";
53
+ readonly defaultEnabled = true;
54
+ readonly optionsSchema: {};
55
+ private readonly options;
56
+ constructor(options: IRenderOptions);
57
+ attach(_session: IInteractiveSession): void;
58
+ start(): Promise<void>;
59
+ stop(): Promise<void>;
60
+ validateOptions(_options: Record<string, TUniversalValue>): boolean;
61
+ }
62
+ //#endregion
63
+ export { IRenderOptions as n, ITuiCliAdapter as r, TuiTransport as t };
64
+ //# sourceMappingURL=index--Ti9NzQX.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index--Ti9NzQX.d.ts","names":[],"sources":["../../src/tui/tui-cli-adapter.ts","../../src/tui/render.tsx","../../src/tui/tui-transport.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;;;UCDR,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;;;cCzCW,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"}
@@ -0,0 +1,47 @@
1
+ import { IInteractiveSession } from "@robota-sdk/agent-framework";
2
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
+ import { ITransportAdapter } from "@robota-sdk/agent-interface-transport";
4
+
5
+ //#region src/mcp/mcp-server.d.ts
6
+ interface IAgentMcpOptions {
7
+ /** Name for the MCP server. */
8
+ name: string;
9
+ /** Version string. */
10
+ version: string;
11
+ /** IInteractiveSession to expose. */
12
+ session: IInteractiveSession;
13
+ /** If true, register each system command as a separate MCP tool. Default: true. */
14
+ exposeCommands?: boolean;
15
+ }
16
+ /**
17
+ * Create an MCP server that exposes IInteractiveSession over Model Context Protocol.
18
+ *
19
+ * Usage:
20
+ * ```typescript
21
+ * const server = createAgentMcpServer({
22
+ * name: 'robota-agent',
23
+ * version: '1.0.0',
24
+ * session: interactiveSession,
25
+ * });
26
+ *
27
+ * import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
28
+ * await server.connect(new StdioServerTransport());
29
+ * ```
30
+ */
31
+ declare function createAgentMcpServer(options: IAgentMcpOptions): Server;
32
+ //#endregion
33
+ //#region src/mcp/mcp-transport.d.ts
34
+ interface IMcpTransportOptions {
35
+ /** Name for the MCP server. */
36
+ name: string;
37
+ /** Version string. */
38
+ version: string;
39
+ /** If true, register each system command as a separate MCP tool. Default: true. */
40
+ exposeCommands?: boolean;
41
+ }
42
+ declare function createMcpTransport(options: IMcpTransportOptions): ITransportAdapter<IInteractiveSession> & {
43
+ getServer(): Server;
44
+ };
45
+ //#endregion
46
+ export { createAgentMcpServer as i, createMcpTransport as n, IAgentMcpOptions as r, IMcpTransportOptions as t };
47
+ //# sourceMappingURL=index-B_rcr14p.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-B_rcr14p.d.ts","names":[],"sources":["../../src/mcp/mcp-server.ts","../../src/mcp/mcp-transport.ts"],"mappings":";;;;;UAYiB,gBAAA;EAIf;EAFA,IAAA;EAIS;EAFT,OAAA;EAIc;EAFd,OAAA,EAAS,mBAAmB;EAoBd;EAlBd,cAAA;AAAA;;;;;;AAkBqE;;;;AC1BvE;;;;;;iBD0BgB,oBAAA,CAAqB,OAAA,EAAS,gBAAA,GAAmB,MAAM;;;UC1BtD,oBAAA;EDIf;ECFA,IAAA;EDIS;ECFT,OAAA;EDIc;ECFd,cAAA;AAAA;AAAA,iBAGc,kBAAA,CACd,OAAA,EAAS,oBAAA,GACR,iBAAA,CAAkB,mBAAA;EAAyB,SAAA,IAAa,MAAA;AAAA"}
@@ -0,0 +1,34 @@
1
+ import { IInteractiveSession } from "@robota-sdk/agent-framework";
2
+ import { ITransportAdapter } from "@robota-sdk/agent-interface-transport";
3
+ import { Context, Hono } from "hono";
4
+
5
+ //#region src/http/routes.d.ts
6
+ /** Callback that resolves an IInteractiveSession from the request context. */
7
+ type TSessionFactory = (c: Context) => IInteractiveSession | Promise<IInteractiveSession>;
8
+ interface IAgentRoutesOptions {
9
+ /** Resolve an IInteractiveSession per request (e.g., by auth token, session ID). */
10
+ sessionFactory: TSessionFactory;
11
+ }
12
+ /**
13
+ * Create a Hono router with all agent HTTP endpoints.
14
+ *
15
+ * Usage:
16
+ * ```typescript
17
+ * const routes = createAgentRoutes({ sessionFactory });
18
+ * app.route('/agent', routes); // mount on existing app
19
+ * export default routes; // or use standalone (CF Workers)
20
+ * ```
21
+ */
22
+ declare function createAgentRoutes(options: IAgentRoutesOptions): Hono;
23
+ //#endregion
24
+ //#region src/http/http-transport.d.ts
25
+ interface IHttpTransportOptions {
26
+ /** Optional: base path prefix for routes. */
27
+ basePath?: string;
28
+ }
29
+ declare function createHttpTransport(options?: IHttpTransportOptions): ITransportAdapter<IInteractiveSession> & {
30
+ getApp(): Hono;
31
+ };
32
+ //#endregion
33
+ export { createAgentRoutes as a, TSessionFactory as i, createHttpTransport as n, IAgentRoutesOptions as r, IHttpTransportOptions as t };
34
+ //# sourceMappingURL=index-C9LWCL4l.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-C9LWCL4l.d.ts","names":[],"sources":["../../src/http/routes.ts","../../src/http/http-transport.ts"],"mappings":";;;;;;KAaY,eAAA,IAAmB,CAAA,EAAG,OAAA,KAAY,mBAAA,GAAsB,OAAA,CAAQ,mBAAA;AAAA,UAE3D,mBAAA;EAF0D;EAIzE,cAAA,EAAgB,eAAe;AAAA;;;;;;AAJ8D;AAE/F;;;;iBAegB,iBAAA,CAAkB,OAAA,EAAS,mBAAA,GAAsB,IAAI;;;UCjBpD,qBAAA;EDA2D;ECE1E,QAAQ;AAAA;AAAA,iBAGM,mBAAA,CACd,OAAA,GAAU,qBAAA,GACT,iBAAA,CAAkB,mBAAA;EAAyB,MAAA,IAAU,IAAA;AAAA"}
@@ -0,0 +1,64 @@
1
+ import { CommandRegistry, IBackgroundTaskRunner, ICommandHostAdapters, ICommandModule, IInteractiveSession, IInteractiveSessionStore, IStatusLineCommandSettings, TShellExecFn, TStatusLineCommandSettingsPatch, TSubagentRunnerFactory } from "@robota-sdk/agent-framework";
2
+ import { IAIProvider, TPermissionMode, TUniversalValue } from "@robota-sdk/agent-core";
3
+ import { IConfigurableTransport, ITransportRegistryView } from "@robota-sdk/agent-interface-transport";
4
+
5
+ //#region src/tui/tui-cli-adapter.d.ts
6
+ interface ITuiCliAdapter {
7
+ getUserSettingsPath(): string;
8
+ readSettings(path: string): Record<string, TUniversalValue>;
9
+ writeSettings(path: string, settings: Record<string, TUniversalValue>): void;
10
+ deleteSettings(path: string): boolean;
11
+ applyStatusLineSettings(path: string, patch: TStatusLineCommandSettingsPatch): IStatusLineCommandSettings;
12
+ reloadPluginCommandSource(registry: CommandRegistry): void;
13
+ applyActiveModelChange(cwd: string, modelId: string, options?: {
14
+ providerOverride?: string;
15
+ }): {
16
+ applied: boolean;
17
+ };
18
+ getGitBranch(cwd: string): string | undefined;
19
+ getProviderDisplayName(type: string): string;
20
+ }
21
+ //#endregion
22
+ //#region src/tui/render.d.ts
23
+ interface IRenderOptions {
24
+ cwd: string;
25
+ provider: IAIProvider;
26
+ providerOverride?: string | undefined;
27
+ providerType?: string | undefined;
28
+ modelId?: string;
29
+ language?: string;
30
+ permissionMode?: TPermissionMode;
31
+ maxTurns?: number;
32
+ version?: string;
33
+ sessionStore?: IInteractiveSessionStore;
34
+ resumeSessionId?: string;
35
+ showSessionPickerOnStart?: boolean;
36
+ forkSession?: boolean;
37
+ sessionName?: string;
38
+ backgroundTaskRunners?: IBackgroundTaskRunner[];
39
+ subagentRunnerFactory?: TSubagentRunnerFactory;
40
+ commandModules?: readonly ICommandModule[];
41
+ commandHostAdapters?: ICommandHostAdapters;
42
+ shellExec?: TShellExecFn;
43
+ startupUpdateNotice?: Promise<string | undefined>;
44
+ transportRegistry?: ITransportRegistryView<IInteractiveSession>;
45
+ cliAdapter: ITuiCliAdapter;
46
+ reloadPluginCommandSource?: (registry: CommandRegistry) => void;
47
+ agentName?: string;
48
+ }
49
+ //#endregion
50
+ //#region src/tui/tui-transport.d.ts
51
+ declare class TuiTransport implements IConfigurableTransport<IInteractiveSession> {
52
+ readonly name = "tui";
53
+ readonly defaultEnabled = true;
54
+ readonly optionsSchema: {};
55
+ private readonly options;
56
+ constructor(options: IRenderOptions);
57
+ attach(_session: IInteractiveSession): void;
58
+ start(): Promise<void>;
59
+ stop(): Promise<void>;
60
+ validateOptions(_options: Record<string, TUniversalValue>): boolean;
61
+ }
62
+ //#endregion
63
+ export { IRenderOptions as n, ITuiCliAdapter as r, TuiTransport as t };
64
+ //# sourceMappingURL=index-CAr3ioVh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CAr3ioVh.d.ts","names":[],"sources":["../../src/tui/tui-cli-adapter.ts","../../src/tui/render.tsx","../../src/tui/tui-transport.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;;;UCDR,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;;;cCzCW,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"}
@@ -0,0 +1,213 @@
1
+ import { IBackgroundJobGroupState, IBackgroundTaskInput, IBackgroundTaskListFilter, IBackgroundTaskLogCursor, IBackgroundTaskLogPage, IBackgroundTaskState, ICommandResult, IExecutionResult, IExecutionWorkspaceEntry, IExecutionWorkspaceSnapshot, IExecutionWorkspaceSnapshot as IExecutionWorkspaceSnapshot$1, IInteractiveSession, IToolState, InteractiveSession, TBackgroundJobGroupEvent, TBackgroundTaskEvent, TExecutionAttention, TExecutionWorkspaceStatus } from "@robota-sdk/agent-framework";
2
+ import { IConfigurableTransport, ITransportAdapter } from "@robota-sdk/agent-interface-transport";
3
+ import { TUniversalValue } from "@robota-sdk/agent-core";
4
+
5
+ //#region src/ws/ws-protocol.d.ts
6
+ type TBackgroundControlAction = 'cancel' | 'close' | 'send';
7
+ /** Inbound message from client to server. */
8
+ type TClientMessage = {
9
+ type: 'submit';
10
+ prompt: string;
11
+ } | {
12
+ type: 'command';
13
+ name: string;
14
+ args?: string;
15
+ } | {
16
+ type: 'abort';
17
+ } | {
18
+ type: 'cancel-queue';
19
+ } | {
20
+ type: 'get-messages';
21
+ } | {
22
+ type: 'get-context';
23
+ } | {
24
+ type: 'get-executing';
25
+ } | {
26
+ type: 'get-pending';
27
+ } | {
28
+ type: 'get-execution-workspace';
29
+ } | {
30
+ type: 'get-background-tasks';
31
+ filter?: IBackgroundTaskListFilter;
32
+ } | {
33
+ type: 'get-background-task';
34
+ taskId: string;
35
+ } | {
36
+ type: 'get-background-job-groups';
37
+ } | {
38
+ type: 'get-background-job-group';
39
+ groupId: string;
40
+ } | {
41
+ type: 'wait-background-job-group';
42
+ groupId: string;
43
+ } | {
44
+ type: 'cancel-background-task';
45
+ taskId: string;
46
+ reason?: string;
47
+ } | {
48
+ type: 'close-background-task';
49
+ taskId: string;
50
+ } | {
51
+ type: 'send-background-task';
52
+ taskId: string;
53
+ input: IBackgroundTaskInput;
54
+ } | {
55
+ type: 'read-background-task-log';
56
+ taskId: string;
57
+ cursor?: IBackgroundTaskLogCursor;
58
+ };
59
+ /** Outbound message from server to client. */
60
+ type TServerMessage = {
61
+ type: 'text_delta';
62
+ delta: string;
63
+ } | {
64
+ type: 'user_message';
65
+ content: string;
66
+ } | {
67
+ type: 'tool_start';
68
+ state: IToolState;
69
+ } | {
70
+ type: 'tool_end';
71
+ state: IToolState;
72
+ } | {
73
+ type: 'thinking';
74
+ isThinking: boolean;
75
+ } | {
76
+ type: 'complete';
77
+ result: IExecutionResult;
78
+ } | {
79
+ type: 'interrupted';
80
+ result: IExecutionResult;
81
+ } | {
82
+ type: 'error';
83
+ message: string;
84
+ } | {
85
+ type: 'command_result';
86
+ name: string;
87
+ message: string;
88
+ success: boolean;
89
+ data?: ICommandResult['data'];
90
+ } | {
91
+ type: 'messages';
92
+ messages: ReturnType<InteractiveSession['getMessages']>;
93
+ } | {
94
+ type: 'context';
95
+ state: ReturnType<InteractiveSession['getContextState']>;
96
+ } | {
97
+ type: 'executing';
98
+ executing: boolean;
99
+ } | {
100
+ type: 'pending';
101
+ pending: string | null;
102
+ } | {
103
+ type: 'execution_workspace_event';
104
+ snapshot: IExecutionWorkspaceSnapshot;
105
+ } | {
106
+ type: 'background_task_event';
107
+ event: TBackgroundTaskEvent;
108
+ } | {
109
+ type: 'background_job_group_event';
110
+ event: TBackgroundJobGroupEvent;
111
+ } | {
112
+ type: 'background_tasks';
113
+ tasks: IBackgroundTaskState[];
114
+ } | {
115
+ type: 'background_task';
116
+ taskId: string;
117
+ task: IBackgroundTaskState | null;
118
+ } | {
119
+ type: 'background_job_groups';
120
+ groups: IBackgroundJobGroupState[];
121
+ } | {
122
+ type: 'background_job_group';
123
+ groupId: string;
124
+ group: IBackgroundJobGroupState | null;
125
+ } | {
126
+ type: 'background_task_log';
127
+ taskId: string;
128
+ page: IBackgroundTaskLogPage;
129
+ } | {
130
+ type: 'background_task_control_result';
131
+ action: TBackgroundControlAction;
132
+ taskId: string;
133
+ success: boolean;
134
+ message?: string;
135
+ } | {
136
+ type: 'protocol_error';
137
+ message: string;
138
+ };
139
+ //#endregion
140
+ //#region src/ws/ws-handler.d.ts
141
+ interface IWsHandlerOptions {
142
+ /** IInteractiveSession to expose. */
143
+ session: IInteractiveSession;
144
+ /** Send a JSON message to the client. */
145
+ send: (message: TServerMessage) => void;
146
+ }
147
+ /**
148
+ * Create a WebSocket message handler for an IInteractiveSession.
149
+ *
150
+ * Returns:
151
+ * - `onMessage(data)`: call this when the WebSocket receives a message
152
+ * - `cleanup()`: call this when the WebSocket disconnects
153
+ *
154
+ * Usage:
155
+ * ```typescript
156
+ * const { onMessage, cleanup } = createWsHandler({
157
+ * session: interactiveSession,
158
+ * send: (msg) => ws.send(JSON.stringify(msg)),
159
+ * });
160
+ *
161
+ * ws.on('message', (data) => onMessage(String(data)));
162
+ * ws.on('close', cleanup);
163
+ * ```
164
+ */
165
+ declare function createWsHandler(options: IWsHandlerOptions): {
166
+ onMessage: (data: string) => void;
167
+ cleanup: () => void;
168
+ };
169
+ //#endregion
170
+ //#region src/ws/ws-transport.d.ts
171
+ interface IWsTransportOptions {
172
+ /** Send a JSON message to the connected WebSocket client. */
173
+ send: (message: TServerMessage) => void;
174
+ }
175
+ declare function createWsTransport(options: IWsTransportOptions): ITransportAdapter<IInteractiveSession> & {
176
+ onMessage: ((data: string) => void) | null;
177
+ };
178
+ //#endregion
179
+ //#region src/ws/ws-transport-configurable.d.ts
180
+ interface IWsTransportConfig {
181
+ port?: number;
182
+ maxRetries?: number;
183
+ }
184
+ declare class WsTransport implements IConfigurableTransport<IInteractiveSession> {
185
+ readonly name = "ws";
186
+ readonly defaultEnabled = true;
187
+ readonly optionsSchema: {
188
+ port: {
189
+ type: string;
190
+ description: string;
191
+ default: number;
192
+ };
193
+ maxRetries: {
194
+ type: string;
195
+ description: string;
196
+ default: number;
197
+ };
198
+ };
199
+ private session;
200
+ private stopFn;
201
+ private readonly port;
202
+ private readonly maxRetries;
203
+ constructor(config?: IWsTransportConfig);
204
+ attach(session: IInteractiveSession): void;
205
+ start(): Promise<void>;
206
+ stop(): Promise<void>;
207
+ validateOptions(options: Record<string, TUniversalValue>): boolean;
208
+ private bindWithRetry;
209
+ private tryBind;
210
+ }
211
+ //#endregion
212
+ export { IWsTransportConfig as a, createWsTransport as c, TClientMessage as d, TServerMessage as f, TExecutionWorkspaceStatus as i, IWsHandlerOptions as l, IExecutionWorkspaceSnapshot$1 as n, WsTransport as o, TExecutionAttention as r, IWsTransportOptions as s, IExecutionWorkspaceEntry as t, createWsHandler as u };
213
+ //# sourceMappingURL=index-CEs25wVk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CEs25wVk.d.ts","names":[],"sources":["../../src/ws/ws-protocol.ts","../../src/ws/ws-handler.ts","../../src/ws/ws-transport.ts","../../src/ws/ws-transport-configurable.ts"],"mappings":"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"}