@robota-sdk/agent-transport 3.0.0-beta.74 → 3.0.0-beta.76

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 (197) hide show
  1. package/README.md +10 -10
  2. package/dist/node/headless/index.cjs +1 -1
  3. package/dist/node/headless/index.d.ts +1 -1
  4. package/dist/node/headless/index.js +1 -1
  5. package/dist/node/headless-OnpVk4-k.cjs +15 -0
  6. package/dist/node/{headless-D02zUEGh.js → headless-mRYilLfC.js} +2 -2
  7. package/dist/node/{headless-D02zUEGh.js.map → headless-mRYilLfC.js.map} +1 -1
  8. package/dist/node/{index-DE3-dHqw.d.ts → index-CYl7ksS6.d.ts} +12 -2
  9. package/dist/node/{index-DE3-dHqw.d.ts.map → index-CYl7ksS6.d.ts.map} +1 -1
  10. package/dist/node/{index-WKTgvhlg.d.ts → index-E8Gx4-lc.d.ts} +12 -2
  11. package/dist/node/{index-WKTgvhlg.d.ts.map → index-E8Gx4-lc.d.ts.map} +1 -1
  12. package/dist/node/index.cjs +1 -1
  13. package/dist/node/index.d.ts +2 -7
  14. package/dist/node/index.d.ts.map +1 -1
  15. package/dist/node/index.js +1 -1
  16. package/dist/node/index.js.map +1 -1
  17. package/package.json +7 -75
  18. package/src/headless/HeadlessInteractionChannel.ts +21 -1
  19. package/src/index.ts +1 -5
  20. package/src/transport-registry.ts +0 -9
  21. package/dist/node/headless-BeHAOlIM.cjs +0 -15
  22. package/dist/node/http/index.cjs +0 -1
  23. package/dist/node/http/index.d.ts +0 -2
  24. package/dist/node/http/index.js +0 -1
  25. package/dist/node/http-2Jiuflc1.js +0 -2
  26. package/dist/node/http-2Jiuflc1.js.map +0 -1
  27. package/dist/node/http-CBAvefLw.cjs +0 -1
  28. package/dist/node/index-BQLN_Lc9.d.ts +0 -78
  29. package/dist/node/index-BQLN_Lc9.d.ts.map +0 -1
  30. package/dist/node/index-BnAGE-u9.d.ts +0 -33
  31. package/dist/node/index-BnAGE-u9.d.ts.map +0 -1
  32. package/dist/node/index-BrQ4gGw0.d.ts +0 -213
  33. package/dist/node/index-BrQ4gGw0.d.ts.map +0 -1
  34. package/dist/node/index-CoeBF21y.d.ts +0 -213
  35. package/dist/node/index-CoeBF21y.d.ts.map +0 -1
  36. package/dist/node/index-DHt-2VQ-.d.ts +0 -46
  37. package/dist/node/index-DHt-2VQ-.d.ts.map +0 -1
  38. package/dist/node/index-DMwKN5Le.d.ts +0 -33
  39. package/dist/node/index-DMwKN5Le.d.ts.map +0 -1
  40. package/dist/node/index-IvYaYY6v.d.ts +0 -78
  41. package/dist/node/index-IvYaYY6v.d.ts.map +0 -1
  42. package/dist/node/index-c0M42fsA.d.ts +0 -46
  43. package/dist/node/index-c0M42fsA.d.ts.map +0 -1
  44. package/dist/node/mcp/index.cjs +0 -1
  45. package/dist/node/mcp/index.d.ts +0 -2
  46. package/dist/node/mcp/index.js +0 -1
  47. package/dist/node/mcp-BOglBJNy.cjs +0 -1
  48. package/dist/node/mcp-D3BBVK7C.js +0 -2
  49. package/dist/node/mcp-D3BBVK7C.js.map +0 -1
  50. package/dist/node/rolldown-runtime-CMqjfN_6.cjs +0 -1
  51. package/dist/node/tui/index.cjs +0 -1
  52. package/dist/node/tui/index.d.ts +0 -2
  53. package/dist/node/tui/index.js +0 -1
  54. package/dist/node/tui-Btb1q88j.js +0 -25
  55. package/dist/node/tui-Btb1q88j.js.map +0 -1
  56. package/dist/node/tui-SbUT7Zlt.cjs +0 -24
  57. package/dist/node/ws/index.cjs +0 -1
  58. package/dist/node/ws/index.d.ts +0 -2
  59. package/dist/node/ws/index.js +0 -1
  60. package/dist/node/ws-Dc2RUwVs.js +0 -2
  61. package/dist/node/ws-Dc2RUwVs.js.map +0 -1
  62. package/dist/node/ws-QNMQn5kg.cjs +0 -1
  63. package/src/http/__tests__/http-transport.test.ts +0 -55
  64. package/src/http/__tests__/routes.test.ts +0 -168
  65. package/src/http/http-transport.ts +0 -41
  66. package/src/http/index.ts +0 -4
  67. package/src/http/routes.ts +0 -152
  68. package/src/mcp/__tests__/mcp-server.test.ts +0 -66
  69. package/src/mcp/__tests__/mcp-transport.test.ts +0 -46
  70. package/src/mcp/index.ts +0 -4
  71. package/src/mcp/mcp-server.ts +0 -163
  72. package/src/mcp/mcp-transport.ts +0 -48
  73. package/src/tui/App.tsx +0 -488
  74. package/src/tui/BackgroundTaskPanel.tsx +0 -36
  75. package/src/tui/CjkTextInput.tsx +0 -199
  76. package/src/tui/ConfirmPrompt.tsx +0 -70
  77. package/src/tui/ContextWarningBanner.tsx +0 -34
  78. package/src/tui/ExecutionWorkspaceDetailPane.tsx +0 -64
  79. package/src/tui/ExecutionWorkspaceSwitcher.tsx +0 -187
  80. package/src/tui/InputArea.tsx +0 -310
  81. package/src/tui/InteractivePrompt.tsx +0 -59
  82. package/src/tui/ListPicker.tsx +0 -95
  83. package/src/tui/MenuSelect.tsx +0 -104
  84. package/src/tui/MessageList.tsx +0 -284
  85. package/src/tui/PermissionPrompt.tsx +0 -86
  86. package/src/tui/PluginTUI.tsx +0 -258
  87. package/src/tui/SessionPicker.tsx +0 -68
  88. package/src/tui/SessionStatusBar.tsx +0 -70
  89. package/src/tui/SlashAutocomplete.tsx +0 -110
  90. package/src/tui/StatusBar.tsx +0 -209
  91. package/src/tui/StreamingIndicator.tsx +0 -93
  92. package/src/tui/TextPrompt.tsx +0 -81
  93. package/src/tui/ToolCommandOutput.tsx +0 -39
  94. package/src/tui/ToolDiffBlock.tsx +0 -32
  95. package/src/tui/TransportTUI.tsx +0 -117
  96. package/src/tui/TuiInteractionChannel.ts +0 -483
  97. package/src/tui/UpdateNotice.tsx +0 -14
  98. package/src/tui/UsageSummaryEntry.tsx +0 -39
  99. package/src/tui/WaveText.tsx +0 -44
  100. package/src/tui/__tests__/InteractivePrompt.test.tsx +0 -82
  101. package/src/tui/__tests__/ListPicker.test.tsx +0 -159
  102. package/src/tui/__tests__/MenuSelect.test.tsx +0 -103
  103. package/src/tui/__tests__/PluginTUI.test.tsx +0 -167
  104. package/src/tui/__tests__/SlashAutocomplete.test.tsx +0 -140
  105. package/src/tui/__tests__/TextPrompt.test.tsx +0 -98
  106. package/src/tui/__tests__/TuiInteractionChannel.display-contract.test.ts +0 -239
  107. package/src/tui/__tests__/TuiInteractionChannel.lifecycle.test.ts +0 -297
  108. package/src/tui/__tests__/TuiInteractionChannel.requestAction.test.ts +0 -124
  109. package/src/tui/__tests__/UpdateNotice.test.tsx +0 -15
  110. package/src/tui/__tests__/abort-after-permission.test.tsx +0 -169
  111. package/src/tui/__tests__/abort-streaming-e2e.test.tsx +0 -183
  112. package/src/tui/__tests__/background-task-panel.test.tsx +0 -53
  113. package/src/tui/__tests__/background-task-row-format.test.ts +0 -59
  114. package/src/tui/__tests__/channel-factory-integration.test.ts +0 -138
  115. package/src/tui/__tests__/cjk-text-input-flow.test.ts +0 -109
  116. package/src/tui/__tests__/cjk-text-input.test.ts +0 -191
  117. package/src/tui/__tests__/command-effect-handler.test.ts +0 -127
  118. package/src/tui/__tests__/command-output-summary.test.ts +0 -95
  119. package/src/tui/__tests__/compact-event-bridge.test.ts +0 -20
  120. package/src/tui/__tests__/confirm-permission-flow.test.ts +0 -130
  121. package/src/tui/__tests__/confirm-prompt.test.tsx +0 -87
  122. package/src/tui/__tests__/execution-workspace-switcher.test.tsx +0 -110
  123. package/src/tui/__tests__/execution-workspace-view-model.test.ts +0 -93
  124. package/src/tui/__tests__/fixtures/provider-setup-prompt-driver.tsx +0 -125
  125. package/src/tui/__tests__/input-area-flow.test.ts +0 -164
  126. package/src/tui/__tests__/message-list-rendering.test.tsx +0 -353
  127. package/src/tui/__tests__/prompt-queue.test.tsx +0 -255
  128. package/src/tui/__tests__/provider-setup-pty-e2e.test.ts +0 -233
  129. package/src/tui/__tests__/pty/pty-driver.ts +0 -135
  130. package/src/tui/__tests__/pty/tui-pty.ptytest.ts +0 -61
  131. package/src/tui/__tests__/render-channel-options.test.ts +0 -32
  132. package/src/tui/__tests__/render-markdown.test.ts +0 -72
  133. package/src/tui/__tests__/selection-flow.test.ts +0 -61
  134. package/src/tui/__tests__/session-init-poller.test.ts +0 -102
  135. package/src/tui/__tests__/session-naming.test.ts +0 -64
  136. package/src/tui/__tests__/session-switch-channel.test.tsx +0 -307
  137. package/src/tui/__tests__/slash-routing-effects.test.ts +0 -228
  138. package/src/tui/__tests__/status-activity.test.ts +0 -71
  139. package/src/tui/__tests__/status-bar.test.tsx +0 -158
  140. package/src/tui/__tests__/streaming-indicator.test.tsx +0 -137
  141. package/src/tui/__tests__/text-prompt-flow.test.ts +0 -77
  142. package/src/tui/__tests__/tui-channel-init-failure.test.ts +0 -57
  143. package/src/tui/__tests__/tui-state-manager.test.ts +0 -401
  144. package/src/tui/background-task-row-format.ts +0 -53
  145. package/src/tui/command-interaction.ts +0 -9
  146. package/src/tui/command-output-summary.ts +0 -122
  147. package/src/tui/create-default-tui-cli-adapter.ts +0 -41
  148. package/src/tui/execution-workspace-view-model.ts +0 -123
  149. package/src/tui/flows/cjk-text-input-flow.ts +0 -285
  150. package/src/tui/flows/confirm-prompt-flow.ts +0 -45
  151. package/src/tui/flows/input-area-flow.ts +0 -189
  152. package/src/tui/flows/permission-prompt-flow.ts +0 -85
  153. package/src/tui/flows/selection-flow.ts +0 -126
  154. package/src/tui/flows/session-init-poller.ts +0 -77
  155. package/src/tui/flows/text-prompt-flow.ts +0 -98
  156. package/src/tui/hooks/command-effect-handler.ts +0 -97
  157. package/src/tui/hooks/command-effect-queue.ts +0 -39
  158. package/src/tui/hooks/side-effects-types.ts +0 -35
  159. package/src/tui/hooks/useAutocomplete.ts +0 -87
  160. package/src/tui/hooks/usePluginCallbacks.ts +0 -31
  161. package/src/tui/hooks/usePluginScreenData.ts +0 -85
  162. package/src/tui/hooks/useSideEffects.ts +0 -175
  163. package/src/tui/hooks/useSlashRouting.ts +0 -118
  164. package/src/tui/hooks/useStatusLineSettings.ts +0 -37
  165. package/src/tui/hooks/useTuiChannel.ts +0 -95
  166. package/src/tui/index.ts +0 -14
  167. package/src/tui/interactions/CommandConfirm.tsx +0 -36
  168. package/src/tui/interactions/CommandPicker.tsx +0 -77
  169. package/src/tui/interactions/__tests__/CommandConfirm.test.tsx +0 -124
  170. package/src/tui/interactions/__tests__/CommandPicker.test.tsx +0 -138
  171. package/src/tui/plugin-tui-handlers.ts +0 -163
  172. package/src/tui/render-markdown.ts +0 -130
  173. package/src/tui/render.tsx +0 -117
  174. package/src/tui/session-naming.ts +0 -33
  175. package/src/tui/status-activity.ts +0 -63
  176. package/src/tui/tui-cli-adapter-context.tsx +0 -13
  177. package/src/tui/tui-cli-adapter.ts +0 -25
  178. package/src/tui/tui-state-manager.ts +0 -226
  179. package/src/tui/tui-transport.ts +0 -35
  180. package/src/tui/types.ts +0 -15
  181. package/src/tui/utils/__tests__/edit-diff.test.ts +0 -426
  182. package/src/tui/utils/__tests__/paste-detection.test.ts +0 -116
  183. package/src/tui/utils/__tests__/paste-labels.test.ts +0 -46
  184. package/src/tui/utils/__tests__/tool-call-extractor.test.ts +0 -227
  185. package/src/tui/utils/__tests__/tool-diff-summary.test.ts +0 -104
  186. package/src/tui/utils/edit-diff.ts +0 -153
  187. package/src/tui/utils/paste-labels.ts +0 -9
  188. package/src/tui/utils/tool-call-extractor.ts +0 -92
  189. package/src/tui/utils/tool-diff-summary.ts +0 -75
  190. package/src/ws/__tests__/ws-handler.test.ts +0 -409
  191. package/src/ws/__tests__/ws-transport.test.ts +0 -53
  192. package/src/ws/index.ts +0 -13
  193. package/src/ws/ws-background-messages.ts +0 -170
  194. package/src/ws/ws-handler.ts +0 -280
  195. package/src/ws/ws-protocol.ts +0 -78
  196. package/src/ws/ws-transport-configurable.ts +0 -128
  197. package/src/ws/ws-transport.ts +0 -42
package/README.md CHANGED
@@ -31,7 +31,7 @@ const transport = createHeadlessTransport({ format: 'text' });
31
31
  ### WebSocket
32
32
 
33
33
  ```typescript
34
- import { WsTransport } from '@robota-sdk/agent-transport/ws';
34
+ import { WsTransport } from '@robota-sdk/agent-transport-ws';
35
35
 
36
36
  const transport = new WsTransport({ port: 3001 });
37
37
  ```
@@ -39,7 +39,7 @@ const transport = new WsTransport({ port: 3001 });
39
39
  ### HTTP
40
40
 
41
41
  ```typescript
42
- import { createHttpTransport } from '@robota-sdk/agent-transport/http';
42
+ import { createHttpTransport } from '@robota-sdk/agent-transport-http';
43
43
 
44
44
  const transport = createHttpTransport({ port: 8080 });
45
45
  ```
@@ -47,7 +47,7 @@ const transport = createHttpTransport({ port: 8080 });
47
47
  ### MCP
48
48
 
49
49
  ```typescript
50
- import { createMcpTransport } from '@robota-sdk/agent-transport/mcp';
50
+ import { createMcpTransport } from '@robota-sdk/agent-transport-mcp';
51
51
 
52
52
  const transport = createMcpTransport({ name: 'my-agent' });
53
53
  ```
@@ -55,8 +55,8 @@ const transport = createMcpTransport({ name: 'my-agent' });
55
55
  ### TUI (Ink/React)
56
56
 
57
57
  ```typescript
58
- import { TuiTransport } from '@robota-sdk/agent-transport/tui';
59
- import type { ITuiCliAdapter } from '@robota-sdk/agent-transport/tui';
58
+ import { TuiTransport } from '@robota-sdk/agent-transport-tui';
59
+ import type { ITuiCliAdapter } from '@robota-sdk/agent-transport-tui';
60
60
 
61
61
  const transport = new TuiTransport(adapter);
62
62
  ```
@@ -70,11 +70,11 @@ Import only what you need to keep bundles small:
70
70
 
71
71
  ```typescript
72
72
  import { createHeadlessTransport } from '@robota-sdk/agent-transport/headless';
73
- import { WsTransport } from '@robota-sdk/agent-transport/ws';
74
- import type { TServerMessage } from '@robota-sdk/agent-transport/ws';
75
- import { createHttpTransport } from '@robota-sdk/agent-transport/http';
76
- import { createMcpTransport } from '@robota-sdk/agent-transport/mcp';
77
- import { TuiTransport } from '@robota-sdk/agent-transport/tui';
73
+ import { WsTransport } from '@robota-sdk/agent-transport-ws';
74
+ import type { TServerMessage } from '@robota-sdk/agent-transport-ws';
75
+ import { createHttpTransport } from '@robota-sdk/agent-transport-http';
76
+ import { createMcpTransport } from '@robota-sdk/agent-transport-mcp';
77
+ import { TuiTransport } from '@robota-sdk/agent-transport-tui';
78
78
  ```
79
79
 
80
80
  Root import re-exports all transports:
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../headless-BeHAOlIM.cjs");exports.HeadlessInteractionChannel=e.t,exports.PrintTerminal=e.a,exports.createHeadlessRunner=e.r,exports.createHeadlessTransport=e.n,exports.promptInput=e.i;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../headless-OnpVk4-k.cjs");exports.HeadlessInteractionChannel=e.t,exports.PrintTerminal=e.a,exports.createHeadlessRunner=e.r,exports.createHeadlessTransport=e.n,exports.promptInput=e.i;
@@ -1,2 +1,2 @@
1
- import { a as IHeadlessRunnerOptions, c as promptInput, i as createHeadlessTransport, l as PrintTerminal, n as IHeadlessInteractionChannelOptions, o as TOutputFormat, r as IHeadlessTransportOptions, s as createHeadlessRunner, t as HeadlessInteractionChannel } from "../index-WKTgvhlg.js";
1
+ import { a as IHeadlessRunnerOptions, c as promptInput, i as createHeadlessTransport, l as PrintTerminal, n as IHeadlessInteractionChannelOptions, o as TOutputFormat, r as IHeadlessTransportOptions, s as createHeadlessRunner, t as HeadlessInteractionChannel } from "../index-E8Gx4-lc.js";
2
2
  export { HeadlessInteractionChannel, type IHeadlessInteractionChannelOptions, type IHeadlessRunnerOptions, type IHeadlessTransportOptions, PrintTerminal, type TOutputFormat, createHeadlessRunner, createHeadlessTransport, promptInput };
@@ -1 +1 @@
1
- import{a as e,i as t,n,r,t as i}from"../headless-D02zUEGh.js";export{i as HeadlessInteractionChannel,e as PrintTerminal,r as createHeadlessRunner,n as createHeadlessTransport,t as promptInput};
1
+ import{a as e,i as t,n,r,t as i}from"../headless-mRYilLfC.js";export{i as HeadlessInteractionChannel,e as PrintTerminal,r as createHeadlessRunner,n as createHeadlessTransport,t as promptInput};
@@ -0,0 +1,15 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require("node:readline");c=s(c,1);let l=require("node:crypto"),u=require("node:child_process"),d=require("@robota-sdk/agent-framework");var f=class{write(e){process.stdout.write(e)}writeLine(e){process.stdout.write(e+`
2
+ `)}writeMarkdown(e){process.stdout.write(e)}writeError(e){process.stderr.write(e+`
3
+ `)}prompt(e){return new Promise(t=>{let n=c.createInterface({input:process.stdin,output:process.stdout,terminal:!1,historySize:0});n.question(e,e=>{n.close(),t(e)})})}async select(e,t=0){for(let n=0;n<e.length;n++){let r=n===t?`>`:` `;process.stdout.write(` ${r} ${n+1}) ${e[n]}\n`)}let n=(await this.prompt(` Choose [1-${e.length}] (default: ${e[t]}): `)).trim().toLowerCase();if(n===``)return t;let r=parseInt(n,10);return!isNaN(r)&&r>=1&&r<=e.length?r-1:t}spinner(e){return{stop(){},update(){}}}};const p=(e,t=!1)=>new Promise((n,r)=>{process.stdout.write(e);let i=``,a=process.stdin,o=a.isRaw;if(!a.isTTY){r(Error(`Cannot prompt for input: stdin is not a TTY.
4
+ Set your API key via environment variable instead:
5
+ ANTHROPIC_API_KEY=<key> robota
6
+ OPENAI_API_KEY=<key> robota`));return}a.setRawMode(!0),a.resume(),a.setEncoding(`utf8`);let s=e=>{for(let r of e)if(r===`\r`||r===`
7
+ `){a.removeListener(`data`,s),a.setRawMode(o??!1),a.pause(),process.stdout.write(`
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
+ `),process.exit(0)):r.charCodeAt(0)>=32&&(i+=r,process.stdout.write(t?`*`:r))};a.on(`data`,s)});function m(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 h(e,t){let n=m(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 g(e,t,n){let r=JSON.stringify({type:`stream_event`,event:n,session_id:t(e),uuid:(0,l.randomUUID)()});process.stdout.write(r+`
10
+ `)}function _(e,t,n,r){let i=n=>g(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}),s=e=>i({type:`background_job_group_event`,background_job_group_event:e}),c=()=>v(e,{onTextDelta:a,onBackgroundTaskEvent:o,onBackgroundJobGroupEvent:s,onComplete:l,onInterrupted:u,onError:d}),l=i=>{c(),n(t(e),i.response,`success`),r(0)},u=i=>{c(),n(t(e),i.response,`success`),r(0)},d=i=>{c(),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`,s),e.on(`complete`,l),e.on(`interrupted`,u),e.on(`error`,d),c}function v(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 y(e){let{session:t,outputFormat:n}=e;return{run:e=>n===`text`?C(t,e):n===`json`?w(t,e):T(t,e)}}function b(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 x(e,t,n,r){let i={type:`result`,result:t,session_id:e,subtype:n};n===`error`&&r!==void 0&&(i.error_code=b(r));let a=JSON.stringify(i);process.stdout.write(a+`
11
+ `)}function S(e){try{return e.getSession().getSessionId()}catch{return``}}function C(e,t){return new Promise(n=>{let r=()=>{e.off(`complete`,i),e.off(`interrupted`,a),e.off(`error`,o)},i=e=>{r(),process.stdout.write(e.response+`
12
+ `),n(0)},a=e=>{r(),e.response&&process.stdout.write(e.response+`
13
+ `),n(0)},o=e=>{r(),process.stderr.write(e.message+`
14
+ `),n(1)};e.on(`complete`,i),e.on(`interrupted`,a),e.on(`error`,o),h(e,t).then(i=>{if(i.kind===`command-result`){r(),process.stdout.write(i.result.message+`
15
+ `),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}function w(e,t){return new Promise(n=>{let r=()=>{e.off(`complete`,i),e.off(`interrupted`,a),e.off(`error`,o)},i=t=>{r(),x(S(e),t.response,`success`),n(0)},a=t=>{r(),x(S(e),t.response,`success`),n(0)},o=t=>{r(),x(S(e),``,`error`,t),n(1)};e.on(`complete`,i),e.on(`interrupted`,a),e.on(`error`,o),h(e,t).then(i=>{if(i.kind===`command-result`){r(),x(S(e),i.result.message,i.result.success?`success`:`error`),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}function T(e,t){return new Promise(n=>{let r=_(e,S,x,n);h(e,t).then(i=>{if(i.kind===`command-result`){r(),x(S(e),i.result.message,i.result.success?`success`:`error`),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}function E(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 y({session:t,outputFormat:e.outputFormat}).run(e.prompt)},async stop(){},getExitCode(){return n}}}var D=class{opts;exitCode=0;constructor(e){this.opts=e}async run(e){let t=this.opts.shellExec??(e=>(0,u.execSync)(e,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd()),n=new d.InteractiveSession({cwd:this.opts.cwd,provider:this.opts.provider,permissionMode:this.opts.permissionMode??`bypassPermissions`,maxTurns:this.opts.maxTurns,sessionStore:this.opts.sessionStore,resumeSessionId:this.opts.resumeSessionId,forkSession:this.opts.forkSession,sessionName:this.opts.sessionName,bare:this.opts.bare||void 0,allowedTools:this.opts.allowedTools,deniedTools:this.opts.deniedTools,appendSystemPrompt:this.opts.appendSystemPrompt,...this.opts.persona===void 0?{}:{persona:this.opts.persona},...this.opts.systemPrompt?{systemPrompt:this.opts.systemPrompt}:{},backgroundTaskRunners:this.opts.backgroundTaskRunners,subagentRunnerFactory:this.opts.subagentRunnerFactory,commandModules:this.opts.commandModules,commandHostAdapters:this.opts.commandHostAdapters,shellExec:t,agentName:this.opts.agentName,...this.opts.activePresetId===void 0?{}:{activePresetId:this.opts.activePresetId},...this.opts.enableParallelSubagents===void 0?{}:{enableParallelSubagents:this.opts.enableParallelSubagents},...this.opts.selfVerification===void 0?{}:{selfVerification:this.opts.selfVerification}}),r=y({session:n,outputFormat:this.opts.outputFormat});this.exitCode=await r.run(e),await n.shutdown({reason:`prompt_input_exit`,message:`Headless transport complete`})}getExitCode(){return this.exitCode}};Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return D}});
@@ -12,5 +12,5 @@ Set your API key via environment variable instead:
12
12
  `),n(0)},a=e=>{r(),e.response&&process.stdout.write(e.response+`
13
13
  `),n(0)},o=e=>{r(),process.stderr.write(e.message+`
14
14
  `),n(1)};e.on(`complete`,i),e.on(`interrupted`,a),e.on(`error`,o),s(e,t).then(i=>{if(i.kind===`command-result`){r(),process.stdout.write(i.result.message+`
15
- `),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}function g(e,t){return new Promise(n=>{let r=()=>{e.off(`complete`,i),e.off(`interrupted`,a),e.off(`error`,o)},i=t=>{r(),p(m(e),t.response,`success`),n(0)},a=t=>{r(),p(m(e),t.response,`success`),n(0)},o=t=>{r(),p(m(e),``,`error`,t),n(1)};e.on(`complete`,i),e.on(`interrupted`,a),e.on(`error`,o),s(e,t).then(i=>{if(i.kind===`command-result`){r(),p(m(e),i.result.message,i.result.success?`success`:`error`),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}function _(e,t){return new Promise(n=>{let r=l(e,m,p,n);s(e,t).then(i=>{if(i.kind===`command-result`){r(),p(m(e),i.result.message,i.result.success?`success`:`error`),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}function v(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 d({session:t,outputFormat:e.outputFormat}).run(e.prompt)},async stop(){},getExitCode(){return n}}}var y=class{opts;exitCode=0;constructor(e){this.opts=e}async run(e){let t=this.opts.shellExec??(e=>n(e,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd()),i=new r({cwd:this.opts.cwd,provider:this.opts.provider,permissionMode:this.opts.permissionMode??`bypassPermissions`,maxTurns:this.opts.maxTurns,sessionStore:this.opts.sessionStore,resumeSessionId:this.opts.resumeSessionId,forkSession:this.opts.forkSession,sessionName:this.opts.sessionName,bare:this.opts.bare||void 0,allowedTools:this.opts.allowedTools,deniedTools:this.opts.deniedTools,appendSystemPrompt:this.opts.appendSystemPrompt,...this.opts.systemPrompt?{systemPrompt:this.opts.systemPrompt}:{},backgroundTaskRunners:this.opts.backgroundTaskRunners,subagentRunnerFactory:this.opts.subagentRunnerFactory,commandModules:this.opts.commandModules,commandHostAdapters:this.opts.commandHostAdapters,shellExec:t,agentName:`robota-cli`}),a=d({session:i,outputFormat:this.opts.outputFormat});this.exitCode=await a.run(e),await i.shutdown({reason:`prompt_input_exit`,message:`Headless transport complete`})}getExitCode(){return this.exitCode}};export{i as a,a as i,v as n,d as r,y as t};
16
- //# sourceMappingURL=headless-D02zUEGh.js.map
15
+ `),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}function g(e,t){return new Promise(n=>{let r=()=>{e.off(`complete`,i),e.off(`interrupted`,a),e.off(`error`,o)},i=t=>{r(),p(m(e),t.response,`success`),n(0)},a=t=>{r(),p(m(e),t.response,`success`),n(0)},o=t=>{r(),p(m(e),``,`error`,t),n(1)};e.on(`complete`,i),e.on(`interrupted`,a),e.on(`error`,o),s(e,t).then(i=>{if(i.kind===`command-result`){r(),p(m(e),i.result.message,i.result.success?`success`:`error`),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}function _(e,t){return new Promise(n=>{let r=l(e,m,p,n);s(e,t).then(i=>{if(i.kind===`command-result`){r(),p(m(e),i.result.message,i.result.success?`success`:`error`),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}function v(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 d({session:t,outputFormat:e.outputFormat}).run(e.prompt)},async stop(){},getExitCode(){return n}}}var y=class{opts;exitCode=0;constructor(e){this.opts=e}async run(e){let t=this.opts.shellExec??(e=>n(e,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd()),i=new r({cwd:this.opts.cwd,provider:this.opts.provider,permissionMode:this.opts.permissionMode??`bypassPermissions`,maxTurns:this.opts.maxTurns,sessionStore:this.opts.sessionStore,resumeSessionId:this.opts.resumeSessionId,forkSession:this.opts.forkSession,sessionName:this.opts.sessionName,bare:this.opts.bare||void 0,allowedTools:this.opts.allowedTools,deniedTools:this.opts.deniedTools,appendSystemPrompt:this.opts.appendSystemPrompt,...this.opts.persona===void 0?{}:{persona:this.opts.persona},...this.opts.systemPrompt?{systemPrompt:this.opts.systemPrompt}:{},backgroundTaskRunners:this.opts.backgroundTaskRunners,subagentRunnerFactory:this.opts.subagentRunnerFactory,commandModules:this.opts.commandModules,commandHostAdapters:this.opts.commandHostAdapters,shellExec:t,agentName:this.opts.agentName,...this.opts.activePresetId===void 0?{}:{activePresetId:this.opts.activePresetId},...this.opts.enableParallelSubagents===void 0?{}:{enableParallelSubagents:this.opts.enableParallelSubagents},...this.opts.selfVerification===void 0?{}:{selfVerification:this.opts.selfVerification}}),a=d({session:i,outputFormat:this.opts.outputFormat});this.exitCode=await a.run(e),await i.shutdown({reason:`prompt_input_exit`,message:`Headless transport complete`})}getExitCode(){return this.exitCode}};export{i as a,a as i,v as n,d as r,y as t};
16
+ //# sourceMappingURL=headless-mRYilLfC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"headless-D02zUEGh.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","../../src/headless/HeadlessInteractionChannel.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 { TBackgroundTaskEvent } from '@robota-sdk/agent-framework';\nimport type {\n ICommandResult,\n IExecutionResult,\n IInteractiveSession,\n TBackgroundJobGroupEvent,\n} from '@robota-sdk/agent-interface-transport';\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\nfunction 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 { IExecutionResult, IInteractiveSession } from '@robota-sdk/agent-interface-transport';\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 process.stderr.write(error.message + '\\n');\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, 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","/**\n * HeadlessInteractionChannel — owns session lifecycle for non-interactive (print) mode.\n *\n * Mirrors TuiInteractionChannel's ownership pattern: session creation lives here,\n * not in the caller. print-mode.ts constructs this and calls run().\n */\n\nimport { execSync } from 'node:child_process';\n\nimport { InteractiveSession } from '@robota-sdk/agent-framework';\n\nimport { createHeadlessRunner, type TOutputFormat } from './headless-runner.js';\n\nimport type { IAIProvider, TPermissionMode } from '@robota-sdk/agent-core';\nimport type {\n IBackgroundTaskRunner,\n ICommandHostAdapters,\n ICommandModule,\n TSubagentRunnerFactory,\n TShellExecFn,\n} from '@robota-sdk/agent-framework';\nimport type { IInteractiveSessionStore } from '@robota-sdk/agent-interface-transport';\n\nexport interface IHeadlessInteractionChannelOptions {\n cwd: string;\n provider: IAIProvider;\n outputFormat: TOutputFormat;\n permissionMode?: TPermissionMode;\n maxTurns?: number;\n sessionStore?: IInteractiveSessionStore;\n /** Continue/resume an existing session by id (print-mode parity with TUI). */\n resumeSessionId?: string;\n /** Fork the resumed session into a new independent session instead of appending. */\n forkSession?: boolean;\n sessionName?: string;\n bare?: boolean;\n allowedTools?: string[];\n deniedTools?: string[];\n appendSystemPrompt?: string;\n systemPrompt?: string;\n backgroundTaskRunners?: IBackgroundTaskRunner[];\n subagentRunnerFactory?: TSubagentRunnerFactory;\n commandModules?: readonly ICommandModule[];\n commandHostAdapters?: ICommandHostAdapters;\n shellExec?: TShellExecFn;\n}\n\nexport class HeadlessInteractionChannel {\n private readonly opts: IHeadlessInteractionChannelOptions;\n private exitCode = 0;\n\n constructor(options: IHeadlessInteractionChannelOptions) {\n this.opts = options;\n }\n\n async run(prompt: string): Promise<void> {\n const shellExec: TShellExecFn =\n this.opts.shellExec ??\n ((command: string) =>\n execSync(command, { timeout: 5000, encoding: 'utf-8', stdio: 'pipe' }).trimEnd());\n\n const session = new InteractiveSession({\n cwd: this.opts.cwd,\n provider: this.opts.provider,\n permissionMode: this.opts.permissionMode ?? 'bypassPermissions',\n maxTurns: this.opts.maxTurns,\n sessionStore: this.opts.sessionStore,\n resumeSessionId: this.opts.resumeSessionId,\n forkSession: this.opts.forkSession,\n sessionName: this.opts.sessionName,\n bare: this.opts.bare || undefined,\n allowedTools: this.opts.allowedTools,\n deniedTools: this.opts.deniedTools,\n appendSystemPrompt: this.opts.appendSystemPrompt,\n ...(this.opts.systemPrompt ? { systemPrompt: this.opts.systemPrompt } : {}),\n backgroundTaskRunners: this.opts.backgroundTaskRunners,\n subagentRunnerFactory: this.opts.subagentRunnerFactory,\n commandModules: this.opts.commandModules,\n commandHostAdapters: this.opts.commandHostAdapters,\n shellExec,\n agentName: 'robota-cli',\n });\n\n const runner = createHeadlessRunner({ session, outputFormat: this.opts.outputFormat });\n this.exitCode = await runner.run(prompt);\n await session.shutdown({ reason: 'prompt_input_exit', message: 'Headless transport complete' });\n }\n\n getExitCode(): number {\n return this.exitCode;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"headless-mRYilLfC.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","../../src/headless/HeadlessInteractionChannel.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 { TBackgroundTaskEvent } from '@robota-sdk/agent-framework';\nimport type {\n ICommandResult,\n IExecutionResult,\n IInteractiveSession,\n TBackgroundJobGroupEvent,\n} from '@robota-sdk/agent-interface-transport';\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\nfunction 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 { IExecutionResult, IInteractiveSession } from '@robota-sdk/agent-interface-transport';\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 process.stderr.write(error.message + '\\n');\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, 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","/**\n * HeadlessInteractionChannel — owns session lifecycle for non-interactive (print) mode.\n *\n * Mirrors TuiInteractionChannel's ownership pattern: session creation lives here,\n * not in the caller. print-mode.ts constructs this and calls run().\n */\n\nimport { execSync } from 'node:child_process';\n\nimport { InteractiveSession } from '@robota-sdk/agent-framework';\n\nimport { createHeadlessRunner, type TOutputFormat } from './headless-runner.js';\n\nimport type { IAIProvider, TPermissionMode } from '@robota-sdk/agent-core';\nimport type {\n IBackgroundTaskRunner,\n ICommandHostAdapters,\n ICommandModule,\n TSubagentRunnerFactory,\n TShellExecFn,\n} from '@robota-sdk/agent-framework';\nimport type { IInteractiveSessionStore } from '@robota-sdk/agent-interface-transport';\n\nexport interface IHeadlessInteractionChannelOptions {\n cwd: string;\n provider: IAIProvider;\n outputFormat: TOutputFormat;\n permissionMode?: TPermissionMode;\n maxTurns?: number;\n sessionStore?: IInteractiveSessionStore;\n /** Continue/resume an existing session by id (print-mode parity with TUI). */\n resumeSessionId?: string;\n /** Fork the resumed session into a new independent session instead of appending. */\n forkSession?: boolean;\n sessionName?: string;\n bare?: boolean;\n allowedTools?: string[];\n deniedTools?: string[];\n appendSystemPrompt?: string;\n systemPrompt?: string;\n /** Name reported to the underlying agent config (resolved by the CLI, e.g. preset agentName). */\n agentName?: string;\n /** Active preset id selected at startup (PRESET-011 runtime state). Defaults to 'default'. */\n activePresetId?: string;\n /** Preset persona block composed as a `source: 'persona'` system-prompt section (priority 5). */\n persona?: string;\n /** Preset execution capability: activate agent runtime + subagent/background dispatch. */\n enableParallelSubagents?: boolean;\n /** Preset execution capability: run a post-task self-verification step. */\n selfVerification?: boolean;\n backgroundTaskRunners?: IBackgroundTaskRunner[];\n subagentRunnerFactory?: TSubagentRunnerFactory;\n commandModules?: readonly ICommandModule[];\n commandHostAdapters?: ICommandHostAdapters;\n shellExec?: TShellExecFn;\n}\n\nexport class HeadlessInteractionChannel {\n private readonly opts: IHeadlessInteractionChannelOptions;\n private exitCode = 0;\n\n constructor(options: IHeadlessInteractionChannelOptions) {\n this.opts = options;\n }\n\n async run(prompt: string): Promise<void> {\n const shellExec: TShellExecFn =\n this.opts.shellExec ??\n ((command: string) =>\n execSync(command, { timeout: 5000, encoding: 'utf-8', stdio: 'pipe' }).trimEnd());\n\n const session = new InteractiveSession({\n cwd: this.opts.cwd,\n provider: this.opts.provider,\n permissionMode: this.opts.permissionMode ?? 'bypassPermissions',\n maxTurns: this.opts.maxTurns,\n sessionStore: this.opts.sessionStore,\n resumeSessionId: this.opts.resumeSessionId,\n forkSession: this.opts.forkSession,\n sessionName: this.opts.sessionName,\n bare: this.opts.bare || undefined,\n allowedTools: this.opts.allowedTools,\n deniedTools: this.opts.deniedTools,\n appendSystemPrompt: this.opts.appendSystemPrompt,\n ...(this.opts.persona !== undefined ? { persona: this.opts.persona } : {}),\n ...(this.opts.systemPrompt ? { systemPrompt: this.opts.systemPrompt } : {}),\n backgroundTaskRunners: this.opts.backgroundTaskRunners,\n subagentRunnerFactory: this.opts.subagentRunnerFactory,\n commandModules: this.opts.commandModules,\n commandHostAdapters: this.opts.commandHostAdapters,\n shellExec,\n agentName: this.opts.agentName,\n ...(this.opts.activePresetId !== undefined\n ? { activePresetId: this.opts.activePresetId }\n : {}),\n ...(this.opts.enableParallelSubagents !== undefined\n ? { enableParallelSubagents: this.opts.enableParallelSubagents }\n : {}),\n ...(this.opts.selfVerification !== undefined\n ? { selfVerification: this.opts.selfVerification }\n : {}),\n });\n\n const runner = createHeadlessRunner({ session, outputFormat: this.opts.outputFormat });\n this.exitCode = await runner.run(prompt);\n await session.shutdown({ reason: 'prompt_input_exit', message: 'Headless transport complete' });\n }\n\n getExitCode(): number {\n return this.exitCode;\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
+ import { IBackgroundTaskRunner, ICommandHostAdapters, ICommandModule, TShellExecFn, TSubagentRunnerFactory } from "@robota-sdk/agent-framework";
1
2
  import { IAIProvider, ISpinner, ITerminalOutput, TPermissionMode } from "@robota-sdk/agent-core";
2
3
  import { IInteractiveSession, IInteractiveSessionStore, ITransportAdapter } from "@robota-sdk/agent-interface-transport";
3
- import { IBackgroundTaskRunner, ICommandHostAdapters, ICommandModule, TShellExecFn, TSubagentRunnerFactory } from "@robota-sdk/agent-framework";
4
4
 
5
5
  //#region src/headless/print-terminal.d.ts
6
6
  declare class PrintTerminal implements ITerminalOutput {
@@ -55,6 +55,16 @@ interface IHeadlessInteractionChannelOptions {
55
55
  deniedTools?: string[];
56
56
  appendSystemPrompt?: string;
57
57
  systemPrompt?: string;
58
+ /** Name reported to the underlying agent config (resolved by the CLI, e.g. preset agentName). */
59
+ agentName?: string;
60
+ /** Active preset id selected at startup (PRESET-011 runtime state). Defaults to 'default'. */
61
+ activePresetId?: string;
62
+ /** Preset persona block composed as a `source: 'persona'` system-prompt section (priority 5). */
63
+ persona?: string;
64
+ /** Preset execution capability: activate agent runtime + subagent/background dispatch. */
65
+ enableParallelSubagents?: boolean;
66
+ /** Preset execution capability: run a post-task self-verification step. */
67
+ selfVerification?: boolean;
58
68
  backgroundTaskRunners?: IBackgroundTaskRunner[];
59
69
  subagentRunnerFactory?: TSubagentRunnerFactory;
60
70
  commandModules?: readonly ICommandModule[];
@@ -70,4 +80,4 @@ declare class HeadlessInteractionChannel {
70
80
  }
71
81
  //#endregion
72
82
  export { IHeadlessRunnerOptions as a, promptInput as c, createHeadlessTransport as i, PrintTerminal as l, IHeadlessInteractionChannelOptions as n, TOutputFormat as o, IHeadlessTransportOptions as r, createHeadlessRunner as s, HeadlessInteractionChannel as t };
73
- //# sourceMappingURL=index-DE3-dHqw.d.ts.map
83
+ //# sourceMappingURL=index-CYl7ksS6.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-DE3-dHqw.d.ts","names":[],"sources":["../../src/headless/print-terminal.ts","../../src/headless/cli-input.ts","../../src/headless/headless-runner.ts","../../src/headless/headless-transport.ts","../../src/headless/HeadlessInteractionChannel.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;;;UCAjB,yBAAA;EH0BoC;EGxBnD,YAAA,EAAc,aAAa;EHHS;EGKpC,MAAA;AAAA;AAAA,iBAGc,uBAAA,CACd,OAAA,EAAS,yBAAA,GACR,iBAAA,CAAkB,mBAAA;EAAyB,WAAA;AAAA;;;UCE7B,kCAAA;EACf,GAAA;EACA,QAAA,EAAU,WAAA;EACV,YAAA,EAAc,aAAA;EACd,cAAA,GAAiB,eAAA;EACjB,QAAA;EACA,YAAA,GAAe,wBAAA;EJdf;EIgBA,eAAA;EJbA;EIeA,WAAA;EACA,WAAA;EACA,IAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,YAAA;EACA,qBAAA,GAAwB,qBAAA;EACxB,qBAAA,GAAwB,sBAAA;EACxB,cAAA,YAA0B,cAAA;EAC1B,mBAAA,GAAsB,oBAAA;EACtB,SAAA,GAAY,YAAA;AAAA;AAAA,cAGD,0BAAA;EAAA,iBACM,IAAA;EAAA,QACT,QAAA;cAEI,OAAA,EAAS,kCAAA;EAIf,GAAA,CAAI,MAAA,WAAiB,OAAO;EAiClC,WAAA;AAAA"}
1
+ {"version":3,"file":"index-CYl7ksS6.d.ts","names":[],"sources":["../../src/headless/print-terminal.ts","../../src/headless/cli-input.ts","../../src/headless/headless-runner.ts","../../src/headless/headless-transport.ts","../../src/headless/HeadlessInteractionChannel.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;;;UCAjB,yBAAA;EH0BoC;EGxBnD,YAAA,EAAc,aAAa;EHHS;EGKpC,MAAA;AAAA;AAAA,iBAGc,uBAAA,CACd,OAAA,EAAS,yBAAA,GACR,iBAAA,CAAkB,mBAAA;EAAyB,WAAA;AAAA;;;UCE7B,kCAAA;EACf,GAAA;EACA,QAAA,EAAU,WAAA;EACV,YAAA,EAAc,aAAA;EACd,cAAA,GAAiB,eAAA;EACjB,QAAA;EACA,YAAA,GAAe,wBAAA;EJdf;EIgBA,eAAA;EJbA;EIeA,WAAA;EACA,WAAA;EACA,IAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,YAAA;EJDa;EIGb,SAAA;EJHmD;EIKnD,cAAA;EJSQ;EIPR,OAAA;EJOmC;EILnC,uBAAA;;EAEA,gBAAA;EACA,qBAAA,GAAwB,qBAAA;EACxB,qBAAA,GAAwB,sBAAA;EACxB,cAAA,YAA0B,cAAA;EAC1B,mBAAA,GAAsB,oBAAA;EACtB,SAAA,GAAY,YAAA;AAAA;AAAA,cAGD,0BAAA;EAAA,iBACM,IAAA;EAAA,QACT,QAAA;cAEI,OAAA,EAAS,kCAAA;EAIf,GAAA,CAAI,MAAA,WAAiB,OAAO;EA2ClC,WAAA;AAAA"}
@@ -1,6 +1,6 @@
1
- import { IBackgroundTaskRunner, ICommandHostAdapters, ICommandModule, TShellExecFn, TSubagentRunnerFactory } from "@robota-sdk/agent-framework";
2
1
  import { IAIProvider, ISpinner, ITerminalOutput, TPermissionMode } from "@robota-sdk/agent-core";
3
2
  import { IInteractiveSession, IInteractiveSessionStore, ITransportAdapter } from "@robota-sdk/agent-interface-transport";
3
+ import { IBackgroundTaskRunner, ICommandHostAdapters, ICommandModule, TShellExecFn, TSubagentRunnerFactory } from "@robota-sdk/agent-framework";
4
4
 
5
5
  //#region src/headless/print-terminal.d.ts
6
6
  declare class PrintTerminal implements ITerminalOutput {
@@ -55,6 +55,16 @@ interface IHeadlessInteractionChannelOptions {
55
55
  deniedTools?: string[];
56
56
  appendSystemPrompt?: string;
57
57
  systemPrompt?: string;
58
+ /** Name reported to the underlying agent config (resolved by the CLI, e.g. preset agentName). */
59
+ agentName?: string;
60
+ /** Active preset id selected at startup (PRESET-011 runtime state). Defaults to 'default'. */
61
+ activePresetId?: string;
62
+ /** Preset persona block composed as a `source: 'persona'` system-prompt section (priority 5). */
63
+ persona?: string;
64
+ /** Preset execution capability: activate agent runtime + subagent/background dispatch. */
65
+ enableParallelSubagents?: boolean;
66
+ /** Preset execution capability: run a post-task self-verification step. */
67
+ selfVerification?: boolean;
58
68
  backgroundTaskRunners?: IBackgroundTaskRunner[];
59
69
  subagentRunnerFactory?: TSubagentRunnerFactory;
60
70
  commandModules?: readonly ICommandModule[];
@@ -70,4 +80,4 @@ declare class HeadlessInteractionChannel {
70
80
  }
71
81
  //#endregion
72
82
  export { IHeadlessRunnerOptions as a, promptInput as c, createHeadlessTransport as i, PrintTerminal as l, IHeadlessInteractionChannelOptions as n, TOutputFormat as o, IHeadlessTransportOptions as r, createHeadlessRunner as s, HeadlessInteractionChannel as t };
73
- //# sourceMappingURL=index-WKTgvhlg.d.ts.map
83
+ //# sourceMappingURL=index-E8Gx4-lc.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-WKTgvhlg.d.ts","names":[],"sources":["../../src/headless/print-terminal.ts","../../src/headless/cli-input.ts","../../src/headless/headless-runner.ts","../../src/headless/headless-transport.ts","../../src/headless/HeadlessInteractionChannel.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;;;UCAjB,yBAAA;EH0BoC;EGxBnD,YAAA,EAAc,aAAa;EHHS;EGKpC,MAAA;AAAA;AAAA,iBAGc,uBAAA,CACd,OAAA,EAAS,yBAAA,GACR,iBAAA,CAAkB,mBAAA;EAAyB,WAAA;AAAA;;;UCE7B,kCAAA;EACf,GAAA;EACA,QAAA,EAAU,WAAA;EACV,YAAA,EAAc,aAAA;EACd,cAAA,GAAiB,eAAA;EACjB,QAAA;EACA,YAAA,GAAe,wBAAA;EJdf;EIgBA,eAAA;EJbA;EIeA,WAAA;EACA,WAAA;EACA,IAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,YAAA;EACA,qBAAA,GAAwB,qBAAA;EACxB,qBAAA,GAAwB,sBAAA;EACxB,cAAA,YAA0B,cAAA;EAC1B,mBAAA,GAAsB,oBAAA;EACtB,SAAA,GAAY,YAAA;AAAA;AAAA,cAGD,0BAAA;EAAA,iBACM,IAAA;EAAA,QACT,QAAA;cAEI,OAAA,EAAS,kCAAA;EAIf,GAAA,CAAI,MAAA,WAAiB,OAAO;EAiClC,WAAA;AAAA"}
1
+ {"version":3,"file":"index-E8Gx4-lc.d.ts","names":[],"sources":["../../src/headless/print-terminal.ts","../../src/headless/cli-input.ts","../../src/headless/headless-runner.ts","../../src/headless/headless-transport.ts","../../src/headless/HeadlessInteractionChannel.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;;;UCAjB,yBAAA;EH0BoC;EGxBnD,YAAA,EAAc,aAAa;EHHS;EGKpC,MAAA;AAAA;AAAA,iBAGc,uBAAA,CACd,OAAA,EAAS,yBAAA,GACR,iBAAA,CAAkB,mBAAA;EAAyB,WAAA;AAAA;;;UCE7B,kCAAA;EACf,GAAA;EACA,QAAA,EAAU,WAAA;EACV,YAAA,EAAc,aAAA;EACd,cAAA,GAAiB,eAAA;EACjB,QAAA;EACA,YAAA,GAAe,wBAAA;EJdf;EIgBA,eAAA;EJbA;EIeA,WAAA;EACA,WAAA;EACA,IAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,YAAA;EJDa;EIGb,SAAA;EJHmD;EIKnD,cAAA;EJSQ;EIPR,OAAA;EJOmC;EILnC,uBAAA;;EAEA,gBAAA;EACA,qBAAA,GAAwB,qBAAA;EACxB,qBAAA,GAAwB,sBAAA;EACxB,cAAA,YAA0B,cAAA;EAC1B,mBAAA,GAAsB,oBAAA;EACtB,SAAA,GAAY,YAAA;AAAA;AAAA,cAGD,0BAAA;EAAA,iBACM,IAAA;EAAA,QACT,QAAA;cAEI,OAAA,EAAS,kCAAA;EAIf,GAAA,CAAI,MAAA,WAAiB,OAAO;EA2ClC,WAAA;AAAA"}
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./headless-BeHAOlIM.cjs"),t=require("./http-CBAvefLw.cjs"),n=require("./ws-QNMQn5kg.cjs"),r=require("./mcp-BOglBJNy.cjs"),i=require("./tui-SbUT7Zlt.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.HeadlessInteractionChannel=e.t,exports.PrintTerminal=e.a,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.r,exports.createHeadlessTransport=e.n,exports.createHttpTransport=t.t,exports.createMcpTransport=r.t,exports.createWsHandler=n.r,exports.createWsTransport=n.n,exports.promptInput=e.i,exports.renderApp=i.r;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./headless-OnpVk4-k.cjs");let t=require("@robota-sdk/agent-framework");var n=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,n){let r=(0,t.readSettings)(this.settingsPath),i=r.transports??{};i[e]={...i[e]??{},enabled:n},r.transports=i,(0,t.writeSettings)(this.settingsPath,r)}async setOptions(e,n){let r=(0,t.readSettings)(this.settingsPath),i=r.transports??{};i[e]={...i[e]??{},options:n},r.transports=i,(0,t.writeSettings)(this.settingsPath,r)}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,t.readSettings)(this.settingsPath).transports;return!e||typeof e!=`object`||Array.isArray(e)?{}:e}};exports.HeadlessInteractionChannel=e.t,exports.PrintTerminal=e.a,exports.TransportRegistry=n,exports.createHeadlessRunner=e.r,exports.createHeadlessTransport=e.n,exports.promptInput=e.i;
@@ -1,8 +1,4 @@
1
- import { a as IHeadlessRunnerOptions, c as promptInput, i as createHeadlessTransport, l as PrintTerminal, n as IHeadlessInteractionChannelOptions, o as TOutputFormat, r as IHeadlessTransportOptions, s as createHeadlessRunner, t as HeadlessInteractionChannel } from "./index-WKTgvhlg.js";
2
- import { a as createAgentRoutes, i as TSessionFactory, n as createHttpTransport, r as IAgentRoutesOptions, t as IHttpTransportOptions } from "./index-DMwKN5Le.js";
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-BrQ4gGw0.js";
4
- import { i as createAgentMcpServer, n as createMcpTransport, r as IAgentMcpOptions, t as IMcpTransportOptions } from "./index-DHt-2VQ-.js";
5
- import { a as TAnyTuiCommandInteraction, c as createDefaultTuiCliAdapter, d as renderApp, f as ITuiCliAdapter, i as ITuiPickerItem, l as TuiTransport, n as ITuiConfirmInteraction, o as TOnMissingArgsAction, r as ITuiPickerInteraction, s as IDefaultTuiCliAdapterOptions, t as ITuiCommandInteraction, u as IRenderOptions } from "./index-IvYaYY6v.js";
1
+ import { a as IHeadlessRunnerOptions, c as promptInput, i as createHeadlessTransport, l as PrintTerminal, n as IHeadlessInteractionChannelOptions, o as TOutputFormat, r as IHeadlessTransportOptions, s as createHeadlessRunner, t as HeadlessInteractionChannel } from "./index-E8Gx4-lc.js";
6
2
  import { TUniversalValue } from "@robota-sdk/agent-core";
7
3
  import { IConfigurableTransport, IInteractiveSession, ITransportEntry } from "@robota-sdk/agent-interface-transport";
8
4
 
@@ -21,7 +17,6 @@ declare class TransportRegistry {
21
17
  private resolveConfig;
22
18
  private readTransportSettings;
23
19
  }
24
- declare function createDefaultTransportRegistry(): TransportRegistry;
25
20
  //#endregion
26
- export { HeadlessInteractionChannel, type IAgentMcpOptions, type IAgentRoutesOptions, type IDefaultTuiCliAdapterOptions, type IExecutionWorkspaceEntry, type IExecutionWorkspaceSnapshot, type IHeadlessInteractionChannelOptions, 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, renderApp };
21
+ export { HeadlessInteractionChannel, type IHeadlessInteractionChannelOptions, type IHeadlessRunnerOptions, type IHeadlessTransportOptions, PrintTerminal, type TOutputFormat, TransportRegistry, createHeadlessRunner, createHeadlessTransport, promptInput };
27
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/transport-registry.ts"],"mappings":";;;;;;;;;cAoBa,iBAAA;EAAA,iBACM,OAAA;EAAA,iBACA,YAAA;cAEL,YAAA;EAIZ,QAAA,CAAS,SAAA,EAAW,sBAAA,CAAuB,mBAAA;EAI3C,MAAA,IAAU,eAAA,CAAgB,mBAAA;EAQ1B,UAAA,IAAc,sBAAA,CAAuB,mBAAA;EAM/B,UAAA,CAAW,IAAA,UAAc,OAAA,YAAmB,OAAA;EAS5C,UAAA,CAAW,IAAA,UAAc,OAAA,EAAS,MAAA,SAAe,eAAA,IAAmB,OAAA;EASpE,QAAA,CAAS,OAAA,EAAS,mBAAA,GAAsB,OAAA;EAQxC,OAAA,IAAW,OAAA;EAAA,QAMT,aAAA;EAAA,QASA,qBAAA;AAAA;AAAA,iBAQM,8BAAA,IAAkC,iBAAiB"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/transport-registry.ts"],"mappings":";;;;;cAiBa,iBAAA;EAAA,iBACM,OAAA;EAAA,iBACA,YAAA;cAEL,YAAA;EAIZ,QAAA,CAAS,SAAA,EAAW,sBAAA,CAAuB,mBAAA;EAI3C,MAAA,IAAU,eAAA,CAAgB,mBAAA;EAQ1B,UAAA,IAAc,sBAAA,CAAuB,mBAAA;EAM/B,UAAA,CAAW,IAAA,UAAc,OAAA,YAAmB,OAAA;EAS5C,UAAA,CAAW,IAAA,UAAc,OAAA,EAAS,MAAA,SAAe,eAAA,IAAmB,OAAA;EASpE,QAAA,CAAS,OAAA,EAAS,mBAAA,GAAsB,OAAA;EAQxC,OAAA,IAAW,OAAA;EAAA,QAMT,aAAA;EAAA,QASA,qBAAA;AAAA"}
@@ -1,2 +1,2 @@
1
- import{a as e,i as t,n,r,t as i}from"./headless-D02zUEGh.js";import{n as a,t as o}from"./http-2Jiuflc1.js";import{n as s,r as c,t as l}from"./ws-Dc2RUwVs.js";import{n as u,t as d}from"./mcp-D3BBVK7C.js";import{n as f,r as p,t as m}from"./tui-Btb1q88j.js";import{getUserSettingsPath as h,readSettings as g,writeSettings as _}from"@robota-sdk/agent-framework";var v=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=g(this.settingsPath),r=n.transports??{};r[e]={...r[e]??{},enabled:t},n.transports=r,_(this.settingsPath,n)}async setOptions(e,t){let n=g(this.settingsPath),r=n.transports??{};r[e]={...r[e]??{},options:t},n.transports=r,_(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=g(this.settingsPath).transports;return!e||typeof e!=`object`||Array.isArray(e)?{}:e}};function y(){let e=new v(h());return e.register(new l),e}export{i as HeadlessInteractionChannel,e as PrintTerminal,v as TransportRegistry,f as TuiTransport,l as WsTransport,u as createAgentMcpServer,a as createAgentRoutes,y as createDefaultTransportRegistry,m as createDefaultTuiCliAdapter,r as createHeadlessRunner,n as createHeadlessTransport,o as createHttpTransport,d as createMcpTransport,c as createWsHandler,s as createWsTransport,t as promptInput,p as renderApp};
1
+ import{a as e,i as t,n,r,t as i}from"./headless-mRYilLfC.js";import{readSettings as a,writeSettings as o}from"@robota-sdk/agent-framework";var s=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=a(this.settingsPath),r=n.transports??{};r[e]={...r[e]??{},enabled:t},n.transports=r,o(this.settingsPath,n)}async setOptions(e,t){let n=a(this.settingsPath),r=n.transports??{};r[e]={...r[e]??{},options:t},n.transports=r,o(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=a(this.settingsPath).transports;return!e||typeof e!=`object`||Array.isArray(e)?{}:e}};export{i as HeadlessInteractionChannel,e as PrintTerminal,s as TransportRegistry,r as createHeadlessRunner,n as createHeadlessTransport,t as promptInput};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/transport-registry.ts"],"sourcesContent":["/**\n * TransportRegistry — manages IConfigurableTransport instances with settings-backed enable/disable.\n *\n * Settings file shape (under `transports` key in settings.json):\n * { \"ws\": { \"enabled\": true, \"options\": { \"port\": 7070 } } }\n */\n\nimport { getUserSettingsPath } from '@robota-sdk/agent-framework';\nimport { readSettings, writeSettings, type TSettingsData } from '@robota-sdk/agent-framework';\n\nimport { WsTransport } from './ws/index.js';\n\nimport type { TUniversalValue } from '@robota-sdk/agent-core';\nimport type {\n IConfigurableTransport,\n IInteractiveSession,\n ITransportConfig,\n ITransportEntry,\n} from '@robota-sdk/agent-interface-transport';\n\nexport class TransportRegistry {\n private readonly entries = new Map<string, IConfigurableTransport<IInteractiveSession>>();\n private readonly settingsPath: string;\n\n constructor(settingsPath: string) {\n this.settingsPath = settingsPath;\n }\n\n register(transport: IConfigurableTransport<IInteractiveSession>): void {\n this.entries.set(transport.name, transport);\n }\n\n getAll(): ITransportEntry<IInteractiveSession>[] {\n const saved = this.readTransportSettings();\n return Array.from(this.entries.values()).map((transport) => ({\n transport,\n config: this.resolveConfig(transport, saved[transport.name]),\n }));\n }\n\n getEnabled(): IConfigurableTransport<IInteractiveSession>[] {\n return this.getAll()\n .filter((e) => e.config.enabled)\n .map((e) => e.transport);\n }\n\n async setEnabled(name: string, enabled: boolean): Promise<void> {\n const settings = readSettings(this.settingsPath);\n const transports = (settings.transports ?? {}) as TSettingsData;\n const entry = (transports[name] ?? {}) as TSettingsData;\n transports[name] = { ...entry, enabled } as TSettingsData;\n settings.transports = transports;\n writeSettings(this.settingsPath, settings);\n }\n\n async setOptions(name: string, options: Record<string, TUniversalValue>): Promise<void> {\n const settings = readSettings(this.settingsPath);\n const transports = (settings.transports ?? {}) as TSettingsData;\n const entry = (transports[name] ?? {}) as TSettingsData;\n transports[name] = { ...entry, options: options as TSettingsData } as TSettingsData;\n settings.transports = transports;\n writeSettings(this.settingsPath, settings);\n }\n\n async startAll(session: IInteractiveSession): Promise<void> {\n const enabled = this.getEnabled();\n for (const transport of enabled) {\n transport.attach(session);\n await transport.start();\n }\n }\n\n async stopAll(): Promise<void> {\n for (const transport of this.entries.values()) {\n await transport.stop();\n }\n }\n\n private resolveConfig(\n transport: IConfigurableTransport<IInteractiveSession>,\n saved?: TSettingsData,\n ): ITransportConfig {\n const enabled = (saved?.enabled as boolean | undefined) ?? transport.defaultEnabled;\n const options = (saved?.options as Record<string, TUniversalValue> | undefined) ?? {};\n return { enabled, options };\n }\n\n private readTransportSettings(): Record<string, TSettingsData> {\n const settings = readSettings(this.settingsPath);\n const raw = settings.transports;\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return {};\n return raw as Record<string, TSettingsData>;\n }\n}\n\nexport function createDefaultTransportRegistry(): TransportRegistry {\n const registry = new TransportRegistry(getUserSettingsPath());\n registry.register(new WsTransport());\n return registry;\n}\n"],"mappings":"sWAoBA,IAAa,EAAb,KAA+B,CAC7B,QAA2B,IAAI,IAC/B,aAEA,YAAY,EAAsB,CAChC,KAAK,aAAe,CACtB,CAEA,SAAS,EAA8D,CACrE,KAAK,QAAQ,IAAI,EAAU,KAAM,CAAS,CAC5C,CAEA,QAAiD,CAC/C,IAAM,EAAQ,KAAK,sBAAsB,EACzC,OAAO,MAAM,KAAK,KAAK,QAAQ,OAAO,CAAC,CAAC,CAAC,IAAK,IAAe,CAC3D,YACA,OAAQ,KAAK,cAAc,EAAW,EAAM,EAAU,KAAK,CAC7D,EAAE,CACJ,CAEA,YAA4D,CAC1D,OAAO,KAAK,OAAO,CAAC,CACjB,OAAQ,GAAM,EAAE,OAAO,OAAO,CAAC,CAC/B,IAAK,GAAM,EAAE,SAAS,CAC3B,CAEA,MAAM,WAAW,EAAc,EAAiC,CAC9D,IAAM,EAAW,EAAa,KAAK,YAAY,EACzC,EAAc,EAAS,YAAc,CAAC,EAE5C,EAAW,GAAQ,CAAE,GADN,EAAW,IAAS,CAAC,EACL,SAAQ,EACvC,EAAS,WAAa,EACtB,EAAc,KAAK,aAAc,CAAQ,CAC3C,CAEA,MAAM,WAAW,EAAc,EAAyD,CACtF,IAAM,EAAW,EAAa,KAAK,YAAY,EACzC,EAAc,EAAS,YAAc,CAAC,EAE5C,EAAW,GAAQ,CAAE,GADN,EAAW,IAAS,CAAC,EACI,SAAyB,EACjE,EAAS,WAAa,EACtB,EAAc,KAAK,aAAc,CAAQ,CAC3C,CAEA,MAAM,SAAS,EAA6C,CAC1D,IAAM,EAAU,KAAK,WAAW,EAChC,IAAK,IAAM,KAAa,EACtB,EAAU,OAAO,CAAO,EACxB,MAAM,EAAU,MAAM,CAE1B,CAEA,MAAM,SAAyB,CAC7B,IAAK,IAAM,KAAa,KAAK,QAAQ,OAAO,EAC1C,MAAM,EAAU,KAAK,CAEzB,CAEA,cACE,EACA,EACkB,CAGlB,MAAO,CAAE,QAFQ,GAAO,SAAmC,EAAU,eAEnD,QADD,GAAO,SAA2D,CAAC,CAC1D,CAC5B,CAEA,uBAA+D,CAE7D,IAAM,EADW,EAAa,KAAK,YAChB,CAAC,CAAC,WAErB,MADI,CAAC,GAAO,OAAO,GAAQ,UAAY,MAAM,QAAQ,CAAG,EAAU,CAAC,EAC5D,CACT,CACF,EAEA,SAAgB,GAAoD,CAClE,IAAM,EAAW,IAAI,EAAkB,EAAoB,CAAC,EAE5D,OADA,EAAS,SAAS,IAAI,CAAa,EAC5B,CACT"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/transport-registry.ts"],"sourcesContent":["/**\n * TransportRegistry — manages IConfigurableTransport instances with settings-backed enable/disable.\n *\n * Settings file shape (under `transports` key in settings.json):\n * { \"ws\": { \"enabled\": true, \"options\": { \"port\": 7070 } } }\n */\n\nimport { readSettings, writeSettings, type TSettingsData } from '@robota-sdk/agent-framework';\n\nimport type { TUniversalValue } from '@robota-sdk/agent-core';\nimport type {\n IConfigurableTransport,\n IInteractiveSession,\n ITransportConfig,\n ITransportEntry,\n} from '@robota-sdk/agent-interface-transport';\n\nexport class TransportRegistry {\n private readonly entries = new Map<string, IConfigurableTransport<IInteractiveSession>>();\n private readonly settingsPath: string;\n\n constructor(settingsPath: string) {\n this.settingsPath = settingsPath;\n }\n\n register(transport: IConfigurableTransport<IInteractiveSession>): void {\n this.entries.set(transport.name, transport);\n }\n\n getAll(): ITransportEntry<IInteractiveSession>[] {\n const saved = this.readTransportSettings();\n return Array.from(this.entries.values()).map((transport) => ({\n transport,\n config: this.resolveConfig(transport, saved[transport.name]),\n }));\n }\n\n getEnabled(): IConfigurableTransport<IInteractiveSession>[] {\n return this.getAll()\n .filter((e) => e.config.enabled)\n .map((e) => e.transport);\n }\n\n async setEnabled(name: string, enabled: boolean): Promise<void> {\n const settings = readSettings(this.settingsPath);\n const transports = (settings.transports ?? {}) as TSettingsData;\n const entry = (transports[name] ?? {}) as TSettingsData;\n transports[name] = { ...entry, enabled } as TSettingsData;\n settings.transports = transports;\n writeSettings(this.settingsPath, settings);\n }\n\n async setOptions(name: string, options: Record<string, TUniversalValue>): Promise<void> {\n const settings = readSettings(this.settingsPath);\n const transports = (settings.transports ?? {}) as TSettingsData;\n const entry = (transports[name] ?? {}) as TSettingsData;\n transports[name] = { ...entry, options: options as TSettingsData } as TSettingsData;\n settings.transports = transports;\n writeSettings(this.settingsPath, settings);\n }\n\n async startAll(session: IInteractiveSession): Promise<void> {\n const enabled = this.getEnabled();\n for (const transport of enabled) {\n transport.attach(session);\n await transport.start();\n }\n }\n\n async stopAll(): Promise<void> {\n for (const transport of this.entries.values()) {\n await transport.stop();\n }\n }\n\n private resolveConfig(\n transport: IConfigurableTransport<IInteractiveSession>,\n saved?: TSettingsData,\n ): ITransportConfig {\n const enabled = (saved?.enabled as boolean | undefined) ?? transport.defaultEnabled;\n const options = (saved?.options as Record<string, TUniversalValue> | undefined) ?? {};\n return { enabled, options };\n }\n\n private readTransportSettings(): Record<string, TSettingsData> {\n const settings = readSettings(this.settingsPath);\n const raw = settings.transports;\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return {};\n return raw as Record<string, TSettingsData>;\n }\n}\n"],"mappings":"2IAiBA,IAAa,EAAb,KAA+B,CAC7B,QAA2B,IAAI,IAC/B,aAEA,YAAY,EAAsB,CAChC,KAAK,aAAe,CACtB,CAEA,SAAS,EAA8D,CACrE,KAAK,QAAQ,IAAI,EAAU,KAAM,CAAS,CAC5C,CAEA,QAAiD,CAC/C,IAAM,EAAQ,KAAK,sBAAsB,EACzC,OAAO,MAAM,KAAK,KAAK,QAAQ,OAAO,CAAC,CAAC,CAAC,IAAK,IAAe,CAC3D,YACA,OAAQ,KAAK,cAAc,EAAW,EAAM,EAAU,KAAK,CAC7D,EAAE,CACJ,CAEA,YAA4D,CAC1D,OAAO,KAAK,OAAO,CAAC,CACjB,OAAQ,GAAM,EAAE,OAAO,OAAO,CAAC,CAC/B,IAAK,GAAM,EAAE,SAAS,CAC3B,CAEA,MAAM,WAAW,EAAc,EAAiC,CAC9D,IAAM,EAAW,EAAa,KAAK,YAAY,EACzC,EAAc,EAAS,YAAc,CAAC,EAE5C,EAAW,GAAQ,CAAE,GADN,EAAW,IAAS,CAAC,EACL,SAAQ,EACvC,EAAS,WAAa,EACtB,EAAc,KAAK,aAAc,CAAQ,CAC3C,CAEA,MAAM,WAAW,EAAc,EAAyD,CACtF,IAAM,EAAW,EAAa,KAAK,YAAY,EACzC,EAAc,EAAS,YAAc,CAAC,EAE5C,EAAW,GAAQ,CAAE,GADN,EAAW,IAAS,CAAC,EACI,SAAyB,EACjE,EAAS,WAAa,EACtB,EAAc,KAAK,aAAc,CAAQ,CAC3C,CAEA,MAAM,SAAS,EAA6C,CAC1D,IAAM,EAAU,KAAK,WAAW,EAChC,IAAK,IAAM,KAAa,EACtB,EAAU,OAAO,CAAO,EACxB,MAAM,EAAU,MAAM,CAE1B,CAEA,MAAM,SAAyB,CAC7B,IAAK,IAAM,KAAa,KAAK,QAAQ,OAAO,EAC1C,MAAM,EAAU,KAAK,CAEzB,CAEA,cACE,EACA,EACkB,CAGlB,MAAO,CAAE,QAFQ,GAAO,SAAmC,EAAU,eAEnD,QADD,GAAO,SAA2D,CAAC,CAC1D,CAC5B,CAEA,uBAA+D,CAE7D,IAAM,EADW,EAAa,KAAK,YAChB,CAAC,CAAC,WAErB,MADI,CAAC,GAAO,OAAO,GAAQ,UAAY,MAAM,QAAQ,CAAG,EAAU,CAAC,EAC5D,CACT,CACF"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@robota-sdk/agent-transport",
3
- "version": "3.0.0-beta.74",
4
- "description": "Consolidated transport package for Robota SDK — headless, HTTP, WebSocket, and MCP adapters",
3
+ "version": "3.0.0-beta.76",
4
+ "description": "Core transport package for Robota SDK — headless adapter, scripted-provider testing fixtures, and the transport registry",
5
5
  "type": "module",
6
6
  "main": "dist/node/index.js",
7
7
  "types": "dist/node/index.d.ts",
@@ -41,54 +41,6 @@
41
41
  "import": "./dist/node/testing/index.js",
42
42
  "require": "./dist/node/testing/index.cjs"
43
43
  }
44
- },
45
- "./http": {
46
- "types": "./dist/node/http/index.d.ts",
47
- "source": "./src/http/index.ts",
48
- "node": {
49
- "import": "./dist/node/http/index.js",
50
- "require": "./dist/node/http/index.cjs"
51
- },
52
- "default": {
53
- "import": "./dist/node/http/index.js",
54
- "require": "./dist/node/http/index.cjs"
55
- }
56
- },
57
- "./ws": {
58
- "types": "./dist/node/ws/index.d.ts",
59
- "source": "./src/ws/index.ts",
60
- "node": {
61
- "import": "./dist/node/ws/index.js",
62
- "require": "./dist/node/ws/index.cjs"
63
- },
64
- "default": {
65
- "import": "./dist/node/ws/index.js",
66
- "require": "./dist/node/ws/index.cjs"
67
- }
68
- },
69
- "./mcp": {
70
- "types": "./dist/node/mcp/index.d.ts",
71
- "source": "./src/mcp/index.ts",
72
- "node": {
73
- "import": "./dist/node/mcp/index.js",
74
- "require": "./dist/node/mcp/index.cjs"
75
- },
76
- "default": {
77
- "import": "./dist/node/mcp/index.js",
78
- "require": "./dist/node/mcp/index.cjs"
79
- }
80
- },
81
- "./tui": {
82
- "types": "./dist/node/tui/index.d.ts",
83
- "source": "./src/tui/index.ts",
84
- "node": {
85
- "import": "./dist/node/tui/index.js",
86
- "require": "./dist/node/tui/index.cjs"
87
- },
88
- "default": {
89
- "import": "./dist/node/tui/index.js",
90
- "require": "./dist/node/tui/index.cjs"
91
- }
92
44
  }
93
45
  },
94
46
  "repository": {
@@ -107,36 +59,17 @@
107
59
  "src"
108
60
  ],
109
61
  "dependencies": {
110
- "@modelcontextprotocol/sdk": "^1.29.0",
111
- "chalk": "^5.6.2",
112
- "hono": "^4.12.25",
113
- "ink": "^7.0.5",
114
- "ink-select-input": "^6.2.0",
115
- "ink-spinner": "^5.0.0",
116
- "ink-text-input": "^6.0.0",
117
- "marked": "^9.1.6",
118
- "marked-terminal": "^7.3.0",
119
- "react": "19.2.4",
120
- "string-width": "^8.2.1",
121
- "ws": "^8.21.0",
122
- "zod": "^3.25.76",
123
- "@robota-sdk/agent-core": "3.0.0-beta.74",
124
- "@robota-sdk/agent-framework": "3.0.0-beta.74",
125
- "@robota-sdk/agent-interface-transport": "3.0.0-beta.74",
126
- "@robota-sdk/agent-interface-tui": "3.0.0-beta.74"
62
+ "@robota-sdk/agent-framework": "3.0.0-beta.76",
63
+ "@robota-sdk/agent-core": "3.0.0-beta.76",
64
+ "@robota-sdk/agent-interface-transport": "3.0.0-beta.76"
127
65
  },
128
66
  "devDependencies": {
129
- "@homebridge/node-pty-prebuilt-multiarch": "^0.13.1",
130
- "@modelcontextprotocol/sdk": "^1.28.0",
131
- "@types/react": "^19.2.17",
132
- "@types/ws": "^8.18.1",
133
- "ink-testing-library": "^4.0.0",
134
67
  "rimraf": "^5.0.10",
135
68
  "tsdown": "^0.22.2",
136
69
  "tsx": "^4.22.4",
137
70
  "typescript": "^5.9.3",
138
71
  "vitest": "^3.2.6",
139
- "@robota-sdk/agent-command": "3.0.0-beta.74"
72
+ "@robota-sdk/agent-command": "3.0.0-beta.76"
140
73
  },
141
74
  "license": "MIT",
142
75
  "publishConfig": {
@@ -149,7 +82,6 @@
149
82
  "typecheck": "tsc --noEmit",
150
83
  "test": "vitest run --passWithNoTests",
151
84
  "test:coverage": "vitest run --coverage --passWithNoTests",
152
- "clean": "rimraf dist",
153
- "test:pty": "vitest run --config vitest.pty.config.ts"
85
+ "clean": "rimraf dist"
154
86
  }
155
87
  }
@@ -38,6 +38,16 @@ export interface IHeadlessInteractionChannelOptions {
38
38
  deniedTools?: string[];
39
39
  appendSystemPrompt?: string;
40
40
  systemPrompt?: string;
41
+ /** Name reported to the underlying agent config (resolved by the CLI, e.g. preset agentName). */
42
+ agentName?: string;
43
+ /** Active preset id selected at startup (PRESET-011 runtime state). Defaults to 'default'. */
44
+ activePresetId?: string;
45
+ /** Preset persona block composed as a `source: 'persona'` system-prompt section (priority 5). */
46
+ persona?: string;
47
+ /** Preset execution capability: activate agent runtime + subagent/background dispatch. */
48
+ enableParallelSubagents?: boolean;
49
+ /** Preset execution capability: run a post-task self-verification step. */
50
+ selfVerification?: boolean;
41
51
  backgroundTaskRunners?: IBackgroundTaskRunner[];
42
52
  subagentRunnerFactory?: TSubagentRunnerFactory;
43
53
  commandModules?: readonly ICommandModule[];
@@ -72,13 +82,23 @@ export class HeadlessInteractionChannel {
72
82
  allowedTools: this.opts.allowedTools,
73
83
  deniedTools: this.opts.deniedTools,
74
84
  appendSystemPrompt: this.opts.appendSystemPrompt,
85
+ ...(this.opts.persona !== undefined ? { persona: this.opts.persona } : {}),
75
86
  ...(this.opts.systemPrompt ? { systemPrompt: this.opts.systemPrompt } : {}),
76
87
  backgroundTaskRunners: this.opts.backgroundTaskRunners,
77
88
  subagentRunnerFactory: this.opts.subagentRunnerFactory,
78
89
  commandModules: this.opts.commandModules,
79
90
  commandHostAdapters: this.opts.commandHostAdapters,
80
91
  shellExec,
81
- agentName: 'robota-cli',
92
+ agentName: this.opts.agentName,
93
+ ...(this.opts.activePresetId !== undefined
94
+ ? { activePresetId: this.opts.activePresetId }
95
+ : {}),
96
+ ...(this.opts.enableParallelSubagents !== undefined
97
+ ? { enableParallelSubagents: this.opts.enableParallelSubagents }
98
+ : {}),
99
+ ...(this.opts.selfVerification !== undefined
100
+ ? { selfVerification: this.opts.selfVerification }
101
+ : {}),
82
102
  });
83
103
 
84
104
  const runner = createHeadlessRunner({ session, outputFormat: this.opts.outputFormat });
package/src/index.ts CHANGED
@@ -1,6 +1,2 @@
1
1
  export * from './headless/index.js';
2
- export * from './http/index.js';
3
- export * from './ws/index.js';
4
- export * from './mcp/index.js';
5
- export * from './tui/index.js';
6
- export { TransportRegistry, createDefaultTransportRegistry } from './transport-registry.js';
2
+ export { TransportRegistry } from './transport-registry.js';
@@ -5,11 +5,8 @@
5
5
  * { "ws": { "enabled": true, "options": { "port": 7070 } } }
6
6
  */
7
7
 
8
- import { getUserSettingsPath } from '@robota-sdk/agent-framework';
9
8
  import { readSettings, writeSettings, type TSettingsData } from '@robota-sdk/agent-framework';
10
9
 
11
- import { WsTransport } from './ws/index.js';
12
-
13
10
  import type { TUniversalValue } from '@robota-sdk/agent-core';
14
11
  import type {
15
12
  IConfigurableTransport,
@@ -92,9 +89,3 @@ export class TransportRegistry {
92
89
  return raw as Record<string, TSettingsData>;
93
90
  }
94
91
  }
95
-
96
- export function createDefaultTransportRegistry(): TransportRegistry {
97
- const registry = new TransportRegistry(getUserSettingsPath());
98
- registry.register(new WsTransport());
99
- return registry;
100
- }