@robota-sdk/agent-transport 3.0.0-beta.73 → 3.0.0-beta.75

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