indusagi 0.12.32 → 0.12.33

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 (1135) hide show
  1. package/CHANGELOG.md +329 -0
  2. package/CREDITS.md +22 -0
  3. package/NOTICE +17 -0
  4. package/README.md +47 -388
  5. package/dist/agent.js +27512 -0
  6. package/dist/ai.js +19758 -0
  7. package/dist/capabilities.js +2663 -0
  8. package/dist/cli.js +10399 -0
  9. package/dist/connectors-saas.js +3289 -0
  10. package/dist/index.js +15279 -0
  11. package/dist/interop.js +3181 -0
  12. package/dist/knowledge/guides/authoring-an-agent.md +53 -0
  13. package/dist/knowledge/guides/choosing-tools.md +49 -0
  14. package/dist/knowledge/guides/model-selection.md +51 -0
  15. package/dist/knowledge/guides/writing-system-prompts.md +53 -0
  16. package/dist/knowledge/index.ts +19 -0
  17. package/dist/knowledge/loader.ts +200 -0
  18. package/dist/knowledge/manifest.json +29 -0
  19. package/dist/llmgateway.js +3209 -0
  20. package/dist/mcp.js +1732 -0
  21. package/dist/memory.js +0 -0
  22. package/dist/react-host/index.js +101 -0
  23. package/dist/react-host/ink.js +97 -0
  24. package/dist/react-host/jsx-runtime.js +95 -0
  25. package/dist/react-ink.js +2475 -0
  26. package/dist/runtime.js +4387 -0
  27. package/dist/shell-app.js +10968 -0
  28. package/dist/smithy.js +7932 -0
  29. package/dist/swarm.js +8717 -0
  30. package/dist/tracing.js +724 -0
  31. package/dist/tui.js +2213 -0
  32. package/dist/types/capabilities/backends/index.d.ts +10 -0
  33. package/dist/types/capabilities/backends/node-backends.d.ts +28 -0
  34. package/dist/types/capabilities/capabilities.test.d.ts +14 -0
  35. package/dist/types/capabilities/files/diff.d.ts +49 -0
  36. package/dist/types/capabilities/files/edit.d.ts +21 -0
  37. package/dist/types/capabilities/files/ls.d.ts +16 -0
  38. package/dist/types/capabilities/files/read.d.ts +15 -0
  39. package/dist/types/capabilities/files/write.d.ts +16 -0
  40. package/dist/types/capabilities/index.d.ts +29 -0
  41. package/dist/types/capabilities/kernel/backends.d.ts +119 -0
  42. package/dist/types/capabilities/kernel/context.d.ts +48 -0
  43. package/dist/types/capabilities/kernel/index.d.ts +24 -0
  44. package/dist/types/capabilities/kernel/output.d.ts +40 -0
  45. package/dist/types/capabilities/kernel/registry.d.ts +61 -0
  46. package/dist/types/capabilities/kernel/spec.d.ts +113 -0
  47. package/dist/types/capabilities/planning/todo.d.ts +62 -0
  48. package/dist/types/capabilities/registry.d.ts +44 -0
  49. package/dist/types/capabilities/search/find.d.ts +33 -0
  50. package/dist/types/capabilities/search/grep.d.ts +30 -0
  51. package/dist/types/capabilities/shell/bash.d.ts +18 -0
  52. package/dist/types/capabilities/shell/process.d.ts +33 -0
  53. package/dist/types/capabilities/web/webfetch.d.ts +25 -0
  54. package/dist/types/capabilities/web/websearch.d.ts +23 -0
  55. package/dist/types/connectors-saas/connectors-saas.test.d.ts +12 -0
  56. package/dist/types/connectors-saas/index.d.ts +16 -0
  57. package/dist/types/connectors-saas/saas/adapter/composio-backend.d.ts +60 -0
  58. package/dist/types/connectors-saas/saas/control/connect.d.ts +114 -0
  59. package/dist/types/connectors-saas/saas/control/tools.d.ts +67 -0
  60. package/dist/types/connectors-saas/saas/core/builder.d.ts +86 -0
  61. package/dist/types/connectors-saas/saas/core/cache.d.ts +53 -0
  62. package/dist/types/connectors-saas/saas/core/index.d.ts +14 -0
  63. package/dist/types/connectors-saas/saas/core/port.d.ts +157 -0
  64. package/dist/types/connectors-saas/saas/core/scope-planner.d.ts +74 -0
  65. package/dist/types/connectors-saas/saas/gateway.d.ts +133 -0
  66. package/dist/types/connectors-saas/saas/render/format.d.ts +54 -0
  67. package/dist/types/connectors-saas/saas/render/index.d.ts +19 -0
  68. package/dist/types/connectors-saas/saas/render/summarizers.d.ts +58 -0
  69. package/dist/types/facade/agent.d.ts +1 -0
  70. package/dist/types/facade/ai.d.ts +1 -0
  71. package/dist/types/facade/bot/actions/bash.d.ts +56 -0
  72. package/dist/types/facade/bot/actions/composio/accounts.d.ts +22 -0
  73. package/dist/types/facade/bot/actions/composio/client.d.ts +39 -0
  74. package/dist/types/facade/bot/actions/composio/connect.d.ts +19 -0
  75. package/dist/types/facade/bot/actions/composio/enable.d.ts +25 -0
  76. package/dist/types/facade/bot/actions/composio/execute.d.ts +26 -0
  77. package/dist/types/facade/bot/actions/composio/helpers.d.ts +16 -0
  78. package/dist/types/facade/bot/actions/composio/index.d.ts +9 -0
  79. package/dist/types/facade/bot/actions/composio/provider.d.ts +8 -0
  80. package/dist/types/facade/bot/actions/composio/toolkits.d.ts +22 -0
  81. package/dist/types/facade/bot/actions/composio/tools.d.ts +28 -0
  82. package/dist/types/facade/bot/actions/composio/types.d.ts +137 -0
  83. package/dist/types/facade/bot/actions/crew/activity-tracker.d.ts +65 -0
  84. package/dist/types/facade/bot/actions/crew/cleanup.d.ts +50 -0
  85. package/dist/types/facade/bot/actions/crew/fs-lock.d.ts +11 -0
  86. package/dist/types/facade/bot/actions/crew/index.d.ts +11 -0
  87. package/dist/types/facade/bot/actions/crew/mailbox.d.ts +20 -0
  88. package/dist/types/facade/bot/actions/crew/model-policy.d.ts +22 -0
  89. package/dist/types/facade/bot/actions/crew/names.d.ts +27 -0
  90. package/dist/types/facade/bot/actions/crew/protocol.d.ts +74 -0
  91. package/dist/types/facade/bot/actions/crew/task-store.d.ts +88 -0
  92. package/dist/types/facade/bot/actions/crew/team-attach-claim.d.ts +35 -0
  93. package/dist/types/facade/bot/actions/crew/team-config.d.ts +54 -0
  94. package/dist/types/facade/bot/actions/crew/worktree.d.ts +39 -0
  95. package/dist/types/facade/bot/actions/edit-diff.d.ts +66 -0
  96. package/dist/types/facade/bot/actions/edit.d.ts +41 -0
  97. package/dist/types/facade/bot/actions/find.d.ts +25 -0
  98. package/dist/types/facade/bot/actions/grep.d.ts +43 -0
  99. package/dist/types/facade/bot/actions/index.d.ts +300 -0
  100. package/dist/types/facade/bot/actions/kit/hook-runner.d.ts +12 -0
  101. package/dist/types/facade/bot/actions/kit/image-resize.d.ts +19 -0
  102. package/dist/types/facade/bot/actions/kit/mime.d.ts +1 -0
  103. package/dist/types/facade/bot/actions/kit/shell.d.ts +12 -0
  104. package/dist/types/facade/bot/actions/ls.d.ts +41 -0
  105. package/dist/types/facade/bot/actions/path-utils.d.ts +8 -0
  106. package/dist/types/facade/bot/actions/process-controller.d.ts +14 -0
  107. package/dist/types/facade/bot/actions/process-manager.d.ts +59 -0
  108. package/dist/types/facade/bot/actions/process-types.d.ts +73 -0
  109. package/dist/types/facade/bot/actions/process.d.ts +37 -0
  110. package/dist/types/facade/bot/actions/read.d.ts +36 -0
  111. package/dist/types/facade/bot/actions/registry.d.ts +20 -0
  112. package/dist/types/facade/bot/actions/todo-store.d.ts +76 -0
  113. package/dist/types/facade/bot/actions/todo-types.d.ts +72 -0
  114. package/dist/types/facade/bot/actions/todo.d.ts +76 -0
  115. package/dist/types/facade/bot/actions/truncate.d.ts +78 -0
  116. package/dist/types/facade/bot/actions/webfetch.d.ts +35 -0
  117. package/dist/types/facade/bot/actions/websearch.d.ts +34 -0
  118. package/dist/types/facade/bot/actions/write.d.ts +30 -0
  119. package/dist/types/facade/bot/agent-loop.d.ts +20 -0
  120. package/dist/types/facade/bot/agent.d.ts +132 -0
  121. package/dist/types/facade/bot/error-handler.d.ts +7 -0
  122. package/dist/types/facade/bot/event-bus.d.ts +8 -0
  123. package/dist/types/facade/bot/index.d.ts +7 -0
  124. package/dist/types/facade/bot/messages.d.ts +83 -0
  125. package/dist/types/facade/bot/proxy.d.ts +70 -0
  126. package/dist/types/facade/bot/session-manager.d.ts +409 -0
  127. package/dist/types/facade/bot/state-manager.d.ts +21 -0
  128. package/dist/types/facade/bot/telemetry.d.ts +6 -0
  129. package/dist/types/facade/bot/types.d.ts +207 -0
  130. package/dist/types/facade/mcp-core/client-pool.d.ts +105 -0
  131. package/dist/types/facade/mcp-core/client.d.ts +157 -0
  132. package/dist/types/facade/mcp-core/config.d.ts +60 -0
  133. package/dist/types/facade/mcp-core/errors.d.ts +103 -0
  134. package/dist/types/facade/mcp-core/index.d.ts +55 -0
  135. package/dist/types/facade/mcp-core/schema-converter.d.ts +67 -0
  136. package/dist/types/facade/mcp-core/server.d.ts +110 -0
  137. package/dist/types/facade/mcp-core/tool-factory.d.ts +62 -0
  138. package/dist/types/facade/mcp-core/types.d.ts +288 -0
  139. package/dist/types/facade/mcp.d.ts +1 -0
  140. package/dist/types/facade/memory.d.ts +1 -0
  141. package/dist/types/facade/ml/adapters/amazon-bedrock.d.ts +32 -0
  142. package/dist/types/facade/ml/adapters/anthropic.d.ts +61 -0
  143. package/dist/types/facade/ml/adapters/azure-openai-responses.d.ts +14 -0
  144. package/dist/types/facade/ml/adapters/google-shared.d.ts +99 -0
  145. package/dist/types/facade/ml/adapters/google-vertex.d.ts +14 -0
  146. package/dist/types/facade/ml/adapters/google.d.ts +15 -0
  147. package/dist/types/facade/ml/adapters/kimi.d.ts +21 -0
  148. package/dist/types/facade/ml/adapters/mock.d.ts +9 -0
  149. package/dist/types/facade/ml/adapters/nvidia.d.ts +12 -0
  150. package/dist/types/facade/ml/adapters/openai-codex-responses.d.ts +8 -0
  151. package/dist/types/facade/ml/adapters/openai-completions.d.ts +24 -0
  152. package/dist/types/facade/ml/adapters/openai-responses-shared.d.ts +25 -0
  153. package/dist/types/facade/ml/adapters/openai-responses.d.ts +12 -0
  154. package/dist/types/facade/ml/adapters/openai-scaffold.d.ts +3 -0
  155. package/dist/types/facade/ml/adapters/register-builtins.d.ts +2 -0
  156. package/dist/types/facade/ml/adapters/simple-options.d.ts +26 -0
  157. package/dist/types/facade/ml/adapters/transform-messages.d.ts +23 -0
  158. package/dist/types/facade/ml/api-registry.d.ts +49 -0
  159. package/dist/types/facade/ml/cli.d.ts +2 -0
  160. package/dist/types/facade/ml/env-api-keys.d.ts +19 -0
  161. package/dist/types/facade/ml/index.d.ts +27 -0
  162. package/dist/types/facade/ml/kit/auth/anthropic.d.ts +17 -0
  163. package/dist/types/facade/ml/kit/auth/github-copilot.d.ts +22 -0
  164. package/dist/types/facade/ml/kit/auth/index.d.ts +50 -0
  165. package/dist/types/facade/ml/kit/auth/kimi.d.ts +23 -0
  166. package/dist/types/facade/ml/kit/auth/oauth-page.d.ts +2 -0
  167. package/dist/types/facade/ml/kit/auth/openai-codex.d.ts +36 -0
  168. package/dist/types/facade/ml/kit/auth/pkce.d.ts +12 -0
  169. package/dist/types/facade/ml/kit/auth/types.d.ts +67 -0
  170. package/dist/types/facade/ml/kit/base-stream-handler.d.ts +30 -0
  171. package/dist/types/facade/ml/kit/event-stream.d.ts +63 -0
  172. package/dist/types/facade/ml/kit/index.d.ts +14 -0
  173. package/dist/types/facade/ml/kit/json-parse.d.ts +23 -0
  174. package/dist/types/facade/ml/kit/message-transform.d.ts +32 -0
  175. package/dist/types/facade/ml/kit/output-factory.d.ts +8 -0
  176. package/dist/types/facade/ml/kit/overflow.d.ts +9 -0
  177. package/dist/types/facade/ml/kit/provider-adapter.d.ts +56 -0
  178. package/dist/types/facade/ml/kit/provider-client-builder.d.ts +36 -0
  179. package/dist/types/facade/ml/kit/provider-consolidation.d.ts +3 -0
  180. package/dist/types/facade/ml/kit/provider-constants.d.ts +34 -0
  181. package/dist/types/facade/ml/kit/provider-errors.d.ts +52 -0
  182. package/dist/types/facade/ml/kit/sanitize-unicode.d.ts +2 -0
  183. package/dist/types/facade/ml/kit/stream-event-helper.d.ts +38 -0
  184. package/dist/types/facade/ml/kit/stream-handler-types.d.ts +46 -0
  185. package/dist/types/facade/ml/kit/streaming-state-manager.d.ts +42 -0
  186. package/dist/types/facade/ml/kit/tool-converter.d.ts +49 -0
  187. package/dist/types/facade/ml/kit/typebox-helpers.d.ts +24 -0
  188. package/dist/types/facade/ml/kit/validation.d.ts +26 -0
  189. package/dist/types/facade/ml/models.d.ts +41 -0
  190. package/dist/types/facade/ml/models.generated.d.ts +12261 -0
  191. package/dist/types/facade/ml/stream.d.ts +27 -0
  192. package/dist/types/facade/ml/types.d.ts +269 -0
  193. package/dist/types/index.d.ts +16 -0
  194. package/dist/types/interop/index.d.ts +12 -0
  195. package/dist/types/interop/interop.test.d.ts +19 -0
  196. package/dist/types/interop/protocol-bridge/bridge.d.ts +52 -0
  197. package/dist/types/interop/protocol-bridge/contract.d.ts +249 -0
  198. package/dist/types/interop/protocol-bridge/endpoint.d.ts +124 -0
  199. package/dist/types/interop/protocol-bridge/fleet.d.ts +92 -0
  200. package/dist/types/interop/protocol-bridge/host.d.ts +61 -0
  201. package/dist/types/interop/protocol-bridge/index.d.ts +16 -0
  202. package/dist/types/interop/protocol-bridge/schema.d.ts +29 -0
  203. package/dist/types/llmgateway/catalog/cards.d.ts +18 -0
  204. package/dist/types/llmgateway/catalog/cost.d.ts +15 -0
  205. package/dist/types/llmgateway/catalog/index.d.ts +7 -0
  206. package/dist/types/llmgateway/catalog/query.d.ts +40 -0
  207. package/dist/types/llmgateway/connectors/anthropic.d.ts +35 -0
  208. package/dist/types/llmgateway/connectors/azure-openai.d.ts +33 -0
  209. package/dist/types/llmgateway/connectors/bedrock.d.ts +113 -0
  210. package/dist/types/llmgateway/connectors/google-vertex.d.ts +38 -0
  211. package/dist/types/llmgateway/connectors/google.d.ts +40 -0
  212. package/dist/types/llmgateway/connectors/index.d.ts +26 -0
  213. package/dist/types/llmgateway/connectors/kimi.d.ts +28 -0
  214. package/dist/types/llmgateway/connectors/mock.d.ts +37 -0
  215. package/dist/types/llmgateway/connectors/nvidia.d.ts +27 -0
  216. package/dist/types/llmgateway/connectors/ollama.d.ts +45 -0
  217. package/dist/types/llmgateway/connectors/openai-chat.d.ts +25 -0
  218. package/dist/types/llmgateway/connectors/openai-responses.d.ts +49 -0
  219. package/dist/types/llmgateway/contract/connector.d.ts +32 -0
  220. package/dist/types/llmgateway/contract/conversation.d.ts +86 -0
  221. package/dist/types/llmgateway/contract/emission.d.ts +55 -0
  222. package/dist/types/llmgateway/contract/errors.d.ts +27 -0
  223. package/dist/types/llmgateway/contract/index.d.ts +13 -0
  224. package/dist/types/llmgateway/contract/model-card.d.ts +42 -0
  225. package/dist/types/llmgateway/contract/options.d.ts +31 -0
  226. package/dist/types/llmgateway/contract/reply.d.ts +33 -0
  227. package/dist/types/llmgateway/conversion/index.d.ts +10 -0
  228. package/dist/types/llmgateway/conversion/mappers.d.ts +65 -0
  229. package/dist/types/llmgateway/conversion/openai-compatible.d.ts +46 -0
  230. package/dist/types/llmgateway/conversion/reduce.d.ts +20 -0
  231. package/dist/types/llmgateway/credentials/oauth.d.ts +73 -0
  232. package/dist/types/llmgateway/credentials/pkce.d.ts +52 -0
  233. package/dist/types/llmgateway/credentials/secrets.d.ts +74 -0
  234. package/dist/types/llmgateway/gateway.d.ts +34 -0
  235. package/dist/types/llmgateway/gateway.test.d.ts +14 -0
  236. package/dist/types/llmgateway/index.d.ts +11 -0
  237. package/dist/types/llmgateway/streaming/channel.d.ts +24 -0
  238. package/dist/types/llmgateway/streaming/index.d.ts +10 -0
  239. package/dist/types/llmgateway/streaming/ndjson.d.ts +17 -0
  240. package/dist/types/llmgateway/streaming/sse.d.ts +31 -0
  241. package/dist/types/react-host/index.d.ts +9 -0
  242. package/dist/types/react-host/ink.d.ts +5 -0
  243. package/dist/types/react-host/jsx-runtime.d.ts +4 -0
  244. package/dist/types/react-host/loader.d.ts +3 -0
  245. package/dist/types/react-ink/components/ChangelogBlock.d.ts +8 -0
  246. package/dist/types/react-ink/components/DisplayBlockView.d.ts +8 -0
  247. package/dist/types/react-ink/components/Footer.d.ts +11 -0
  248. package/dist/types/react-ink/components/MessageList.d.ts +14 -0
  249. package/dist/types/react-ink/components/MessageRow.d.ts +13 -0
  250. package/dist/types/react-ink/components/StatusLine.d.ts +9 -0
  251. package/dist/types/react-ink/components/TaskPanel.d.ts +11 -0
  252. package/dist/types/react-ink/components/ToolEventBlock.d.ts +17 -0
  253. package/dist/types/react-ink/components/dialogs/DialogFrame.d.ts +8 -0
  254. package/dist/types/react-ink/components/dialogs/LoginDialog.d.ts +14 -0
  255. package/dist/types/react-ink/components/dialogs/ModelDialog.d.ts +9 -0
  256. package/dist/types/react-ink/components/dialogs/OAuthDialog.d.ts +9 -0
  257. package/dist/types/react-ink/components/dialogs/ScopedModelsDialog.d.ts +9 -0
  258. package/dist/types/react-ink/components/dialogs/SelectableDialog.d.ts +16 -0
  259. package/dist/types/react-ink/components/dialogs/SessionDialog.d.ts +13 -0
  260. package/dist/types/react-ink/components/dialogs/SettingsDialog.d.ts +14 -0
  261. package/dist/types/react-ink/components/dialogs/StartupSessionPicker.d.ts +9 -0
  262. package/dist/types/react-ink/components/dialogs/ThemeDialog.d.ts +7 -0
  263. package/dist/types/react-ink/components/dialogs/TreeDialog.d.ts +8 -0
  264. package/dist/types/react-ink/components/dialogs/UserMessageDialog.d.ts +8 -0
  265. package/dist/types/react-ink/components/messages/AssistantMessage.d.ts +12 -0
  266. package/dist/types/react-ink/components/messages/BashMessage.d.ts +8 -0
  267. package/dist/types/react-ink/components/messages/BranchSummaryMessage.d.ts +8 -0
  268. package/dist/types/react-ink/components/messages/CompactionMessage.d.ts +8 -0
  269. package/dist/types/react-ink/components/messages/CustomMessage.d.ts +9 -0
  270. package/dist/types/react-ink/components/messages/SkillInvocationMessage.d.ts +7 -0
  271. package/dist/types/react-ink/components/messages/ToolCallMessage.d.ts +8 -0
  272. package/dist/types/react-ink/components/messages/ToolResultBlock.d.ts +12 -0
  273. package/dist/types/react-ink/components/messages/UserMessage.d.ts +9 -0
  274. package/dist/types/react-ink/index.d.ts +34 -0
  275. package/dist/types/react-ink/theme-adapter.d.ts +9 -0
  276. package/dist/types/react-ink/types.d.ts +133 -0
  277. package/dist/types/react-ink/utils/message-groups.d.ts +25 -0
  278. package/dist/types/react-ink/utils/selection-dialog.d.ts +2 -0
  279. package/dist/types/react-ink/utils/session-browser.d.ts +27 -0
  280. package/dist/types/react-ink/utils/tool-display.d.ts +21 -0
  281. package/dist/types/runtime/cadence/cadence.test.d.ts +6 -0
  282. package/dist/types/runtime/cadence/fold.d.ts +48 -0
  283. package/dist/types/runtime/cadence/index.d.ts +12 -0
  284. package/dist/types/runtime/cadence/reducer.d.ts +44 -0
  285. package/dist/types/runtime/conductor/agent.d.ts +71 -0
  286. package/dist/types/runtime/conductor/index.d.ts +11 -0
  287. package/dist/types/runtime/contract/config.d.ts +44 -0
  288. package/dist/types/runtime/contract/effect.d.ts +41 -0
  289. package/dist/types/runtime/contract/errors.d.ts +22 -0
  290. package/dist/types/runtime/contract/events.d.ts +63 -0
  291. package/dist/types/runtime/contract/index.d.ts +18 -0
  292. package/dist/types/runtime/contract/run-state.d.ts +57 -0
  293. package/dist/types/runtime/contract/session.d.ts +42 -0
  294. package/dist/types/runtime/contract/signal.d.ts +49 -0
  295. package/dist/types/runtime/contract/tools.d.ts +45 -0
  296. package/dist/types/runtime/dispatch/index.d.ts +9 -0
  297. package/dist/types/runtime/dispatch/scheduler.d.ts +53 -0
  298. package/dist/types/runtime/index.d.ts +22 -0
  299. package/dist/types/runtime/ledger/accumulator.d.ts +44 -0
  300. package/dist/types/runtime/ledger/bus.d.ts +50 -0
  301. package/dist/types/runtime/ledger/index.d.ts +11 -0
  302. package/dist/types/runtime/memory/compactor.d.ts +56 -0
  303. package/dist/types/runtime/memory/estimate.d.ts +21 -0
  304. package/dist/types/runtime/memory/index.d.ts +8 -0
  305. package/dist/types/runtime/runtime.test.d.ts +15 -0
  306. package/dist/types/runtime/store/dag.d.ts +72 -0
  307. package/dist/types/runtime/store/hash.d.ts +18 -0
  308. package/dist/types/runtime/store/index.d.ts +12 -0
  309. package/dist/types/runtime/store/persist.d.ts +49 -0
  310. package/dist/types/runtime/turn/driver.d.ts +32 -0
  311. package/dist/types/runtime/turn/index.d.ts +8 -0
  312. package/dist/types/runtime/wire/index.d.ts +10 -0
  313. package/dist/types/runtime/wire/projectors.d.ts +53 -0
  314. package/dist/types/shell-app/auth-cli/index.d.ts +9 -0
  315. package/dist/types/shell-app/auth-cli/oauth-cli.d.ts +73 -0
  316. package/dist/types/shell-app/boot/context.d.ts +108 -0
  317. package/dist/types/shell-app/boot/index.d.ts +13 -0
  318. package/dist/types/shell-app/boot/pipeline.d.ts +66 -0
  319. package/dist/types/shell-app/boot/stages.d.ts +77 -0
  320. package/dist/types/shell-app/cli.d.ts +75 -0
  321. package/dist/types/shell-app/config/index.d.ts +11 -0
  322. package/dist/types/shell-app/config/locator.d.ts +85 -0
  323. package/dist/types/shell-app/config/settings.d.ts +91 -0
  324. package/dist/types/shell-app/index.d.ts +26 -0
  325. package/dist/types/shell-app/invocation/flags.d.ts +89 -0
  326. package/dist/types/shell-app/invocation/parse.d.ts +89 -0
  327. package/dist/types/shell-app/locate/brand.d.ts +71 -0
  328. package/dist/types/shell-app/locate/index.d.ts +12 -0
  329. package/dist/types/shell-app/locate/locator.d.ts +122 -0
  330. package/dist/types/shell-app/runners/contract.d.ts +116 -0
  331. package/dist/types/shell-app/runners/index.d.ts +15 -0
  332. package/dist/types/shell-app/runners/one-shot.d.ts +21 -0
  333. package/dist/types/shell-app/runners/registry.d.ts +34 -0
  334. package/dist/types/shell-app/runners/repl.d.ts +51 -0
  335. package/dist/types/shell-app/runners/wire.d.ts +34 -0
  336. package/dist/types/shell-app/shell-app.test.d.ts +14 -0
  337. package/dist/types/shell-app/upgrade/index.d.ts +9 -0
  338. package/dist/types/shell-app/upgrade/upgrades.d.ts +62 -0
  339. package/dist/types/smithy/config/flag-reader.d.ts +128 -0
  340. package/dist/types/smithy/config/index.d.ts +9 -0
  341. package/dist/types/smithy/forge.d.ts +135 -0
  342. package/dist/types/smithy/index.d.ts +36 -0
  343. package/dist/types/smithy/knowledge/index.d.ts +10 -0
  344. package/dist/types/smithy/knowledge/loader.d.ts +64 -0
  345. package/dist/types/smithy/persona/blueprint.d.ts +75 -0
  346. package/dist/types/smithy/persona/define-agent.d.ts +51 -0
  347. package/dist/types/smithy/persona/index.d.ts +14 -0
  348. package/dist/types/smithy/persona/profiles.d.ts +44 -0
  349. package/dist/types/smithy/runtime/index.d.ts +9 -0
  350. package/dist/types/smithy/runtime/tool-ledger.d.ts +130 -0
  351. package/dist/types/smithy/smithy.test.d.ts +20 -0
  352. package/dist/types/smithy/ui/index.d.ts +11 -0
  353. package/dist/types/smithy/ui/transcript.d.ts +183 -0
  354. package/dist/types/swarm/coordinator.d.ts +192 -0
  355. package/dist/types/swarm/index.d.ts +33 -0
  356. package/dist/types/swarm/isolation/index.d.ts +14 -0
  357. package/dist/types/swarm/isolation/runner.d.ts +61 -0
  358. package/dist/types/swarm/isolation/worktree.d.ts +142 -0
  359. package/dist/types/swarm/kernel/faults.d.ts +52 -0
  360. package/dist/types/swarm/kernel/ids.d.ts +25 -0
  361. package/dist/types/swarm/kernel/index.d.ts +26 -0
  362. package/dist/types/swarm/kernel/json-cell.d.ts +113 -0
  363. package/dist/types/swarm/kernel/jsonl-log.d.ts +81 -0
  364. package/dist/types/swarm/postbox/channel.d.ts +88 -0
  365. package/dist/types/swarm/postbox/codecs.d.ts +253 -0
  366. package/dist/types/swarm/postbox/index.d.ts +16 -0
  367. package/dist/types/swarm/roster/index.d.ts +16 -0
  368. package/dist/types/swarm/roster/manifest.d.ts +185 -0
  369. package/dist/types/swarm/swarm.test.d.ts +24 -0
  370. package/dist/types/swarm/telemetry/activity.d.ts +143 -0
  371. package/dist/types/swarm/workboard/board.d.ts +174 -0
  372. package/dist/types/swarm/workboard/dep-graph.d.ts +77 -0
  373. package/dist/types/swarm/workboard/index.d.ts +12 -0
  374. package/dist/types/tracing/adapter/index.d.ts +12 -0
  375. package/dist/types/tracing/adapter/runtime-trace.d.ts +54 -0
  376. package/dist/types/tracing/channel/index.d.ts +9 -0
  377. package/dist/types/tracing/channel/signal.d.ts +93 -0
  378. package/dist/types/tracing/index.d.ts +25 -0
  379. package/dist/types/tracing/recorder/index.d.ts +12 -0
  380. package/dist/types/tracing/recorder/recorder.d.ts +75 -0
  381. package/dist/types/tracing/recorder/sampling.d.ts +55 -0
  382. package/dist/types/tracing/redaction/index.d.ts +8 -0
  383. package/dist/types/tracing/redaction/secret-scrubber.d.ts +95 -0
  384. package/dist/types/tracing/registry/hub.d.ts +57 -0
  385. package/dist/types/tracing/registry/index.d.ts +7 -0
  386. package/dist/types/tracing/signal/handle.d.ts +73 -0
  387. package/dist/types/tracing/signal/index.d.ts +12 -0
  388. package/dist/types/tracing/signal/segment.d.ts +124 -0
  389. package/dist/types/tracing/sinks/base.d.ts +51 -0
  390. package/dist/types/tracing/sinks/console.d.ts +44 -0
  391. package/dist/types/tracing/sinks/file.d.ts +47 -0
  392. package/dist/types/tracing/sinks/index.d.ts +16 -0
  393. package/dist/types/tracing/sinks/stream.d.ts +46 -0
  394. package/dist/types/tracing/tracing.test.d.ts +7 -0
  395. package/dist/types/ui/autocomplete.d.ts +59 -0
  396. package/dist/types/ui/contracts.d.ts +38 -0
  397. package/dist/types/ui/editor-component.d.ts +100 -0
  398. package/dist/types/ui/fuzzy.d.ts +29 -0
  399. package/dist/types/ui/index.d.ts +8 -0
  400. package/dist/types/ui/keybindings.d.ts +62 -0
  401. package/dist/types/ui/keys.d.ts +171 -0
  402. package/dist/types/ui/theme-types.d.ts +36 -0
  403. package/dist/types/ui/utils.d.ts +101 -0
  404. package/dist/types/ui-bridge/InteractiveApp.d.ts +38 -0
  405. package/dist/types/ui-bridge/adapter.d.ts +90 -0
  406. package/dist/types/ui-bridge/index.d.ts +37 -0
  407. package/package.json +116 -107
  408. package/LICENSE +0 -8
  409. package/LICENSE-THIRD-PARTY.txt +0 -30
  410. package/local-dist-new/IndusForge/examples/research-agent.d.ts +0 -3
  411. package/local-dist-new/IndusForge/examples/research-agent.d.ts.map +0 -1
  412. package/local-dist-new/IndusForge/examples/research-agent.js +0 -18
  413. package/local-dist-new/IndusForge/examples/research-agent.js.map +0 -1
  414. package/local-dist-new/IndusForge/examples/review-agent.d.ts +0 -3
  415. package/local-dist-new/IndusForge/examples/review-agent.d.ts.map +0 -1
  416. package/local-dist-new/IndusForge/examples/review-agent.js +0 -18
  417. package/local-dist-new/IndusForge/examples/review-agent.js.map +0 -1
  418. package/local-dist-new/IndusForge/examples/terminal-builder-agent.d.ts +0 -3
  419. package/local-dist-new/IndusForge/examples/terminal-builder-agent.d.ts.map +0 -1
  420. package/local-dist-new/IndusForge/examples/terminal-builder-agent.js +0 -18
  421. package/local-dist-new/IndusForge/examples/terminal-builder-agent.js.map +0 -1
  422. package/local-dist-new/IndusForge/terminal-chat.d.ts +0 -2
  423. package/local-dist-new/IndusForge/terminal-chat.d.ts.map +0 -1
  424. package/local-dist-new/IndusForge/terminal-chat.js +0 -557
  425. package/local-dist-new/IndusForge/terminal-chat.js.map +0 -1
  426. package/local-dist-new/agent.d.ts +0 -6
  427. package/local-dist-new/agent.d.ts.map +0 -1
  428. package/local-dist-new/agent.js +0 -6
  429. package/local-dist-new/agent.js.map +0 -1
  430. package/local-dist-new/ai.d.ts +0 -6
  431. package/local-dist-new/ai.d.ts.map +0 -1
  432. package/local-dist-new/ai.js +0 -6
  433. package/local-dist-new/ai.js.map +0 -1
  434. package/local-dist-new/bot/actions/bash.d.ts +0 -56
  435. package/local-dist-new/bot/actions/bash.d.ts.map +0 -1
  436. package/local-dist-new/bot/actions/bash.js +0 -275
  437. package/local-dist-new/bot/actions/bash.js.map +0 -1
  438. package/local-dist-new/bot/actions/composio/accounts.d.ts +0 -23
  439. package/local-dist-new/bot/actions/composio/accounts.d.ts.map +0 -1
  440. package/local-dist-new/bot/actions/composio/accounts.js +0 -40
  441. package/local-dist-new/bot/actions/composio/accounts.js.map +0 -1
  442. package/local-dist-new/bot/actions/composio/client.d.ts +0 -40
  443. package/local-dist-new/bot/actions/composio/client.d.ts.map +0 -1
  444. package/local-dist-new/bot/actions/composio/client.js +0 -361
  445. package/local-dist-new/bot/actions/composio/client.js.map +0 -1
  446. package/local-dist-new/bot/actions/composio/connect.d.ts +0 -20
  447. package/local-dist-new/bot/actions/composio/connect.d.ts.map +0 -1
  448. package/local-dist-new/bot/actions/composio/connect.js +0 -41
  449. package/local-dist-new/bot/actions/composio/connect.js.map +0 -1
  450. package/local-dist-new/bot/actions/composio/enable.d.ts +0 -26
  451. package/local-dist-new/bot/actions/composio/enable.d.ts.map +0 -1
  452. package/local-dist-new/bot/actions/composio/enable.js +0 -66
  453. package/local-dist-new/bot/actions/composio/enable.js.map +0 -1
  454. package/local-dist-new/bot/actions/composio/execute.d.ts +0 -27
  455. package/local-dist-new/bot/actions/composio/execute.d.ts.map +0 -1
  456. package/local-dist-new/bot/actions/composio/execute.js +0 -46
  457. package/local-dist-new/bot/actions/composio/execute.js.map +0 -1
  458. package/local-dist-new/bot/actions/composio/helpers.d.ts +0 -17
  459. package/local-dist-new/bot/actions/composio/helpers.d.ts.map +0 -1
  460. package/local-dist-new/bot/actions/composio/helpers.js +0 -533
  461. package/local-dist-new/bot/actions/composio/helpers.js.map +0 -1
  462. package/local-dist-new/bot/actions/composio/index.d.ts +0 -10
  463. package/local-dist-new/bot/actions/composio/index.d.ts.map +0 -1
  464. package/local-dist-new/bot/actions/composio/index.js +0 -9
  465. package/local-dist-new/bot/actions/composio/index.js.map +0 -1
  466. package/local-dist-new/bot/actions/composio/provider.d.ts +0 -9
  467. package/local-dist-new/bot/actions/composio/provider.d.ts.map +0 -1
  468. package/local-dist-new/bot/actions/composio/provider.js +0 -54
  469. package/local-dist-new/bot/actions/composio/provider.js.map +0 -1
  470. package/local-dist-new/bot/actions/composio/toolkits.d.ts +0 -23
  471. package/local-dist-new/bot/actions/composio/toolkits.d.ts.map +0 -1
  472. package/local-dist-new/bot/actions/composio/toolkits.js +0 -40
  473. package/local-dist-new/bot/actions/composio/toolkits.js.map +0 -1
  474. package/local-dist-new/bot/actions/composio/tools.d.ts +0 -29
  475. package/local-dist-new/bot/actions/composio/tools.d.ts.map +0 -1
  476. package/local-dist-new/bot/actions/composio/tools.js +0 -72
  477. package/local-dist-new/bot/actions/composio/tools.js.map +0 -1
  478. package/local-dist-new/bot/actions/composio/types.d.ts +0 -138
  479. package/local-dist-new/bot/actions/composio/types.d.ts.map +0 -1
  480. package/local-dist-new/bot/actions/composio/types.js +0 -2
  481. package/local-dist-new/bot/actions/composio/types.js.map +0 -1
  482. package/local-dist-new/bot/actions/crew/activity-tracker.d.ts +0 -66
  483. package/local-dist-new/bot/actions/crew/activity-tracker.d.ts.map +0 -1
  484. package/local-dist-new/bot/actions/crew/activity-tracker.js +0 -480
  485. package/local-dist-new/bot/actions/crew/activity-tracker.js.map +0 -1
  486. package/local-dist-new/bot/actions/crew/cleanup.d.ts +0 -51
  487. package/local-dist-new/bot/actions/crew/cleanup.d.ts.map +0 -1
  488. package/local-dist-new/bot/actions/crew/cleanup.js +0 -219
  489. package/local-dist-new/bot/actions/crew/cleanup.js.map +0 -1
  490. package/local-dist-new/bot/actions/crew/fs-lock.d.ts +0 -12
  491. package/local-dist-new/bot/actions/crew/fs-lock.d.ts.map +0 -1
  492. package/local-dist-new/bot/actions/crew/fs-lock.js +0 -74
  493. package/local-dist-new/bot/actions/crew/fs-lock.js.map +0 -1
  494. package/local-dist-new/bot/actions/crew/index.d.ts +0 -12
  495. package/local-dist-new/bot/actions/crew/index.d.ts.map +0 -1
  496. package/local-dist-new/bot/actions/crew/index.js +0 -12
  497. package/local-dist-new/bot/actions/crew/index.js.map +0 -1
  498. package/local-dist-new/bot/actions/crew/mailbox.d.ts +0 -21
  499. package/local-dist-new/bot/actions/crew/mailbox.d.ts.map +0 -1
  500. package/local-dist-new/bot/actions/crew/mailbox.js +0 -106
  501. package/local-dist-new/bot/actions/crew/mailbox.js.map +0 -1
  502. package/local-dist-new/bot/actions/crew/model-policy.d.ts +0 -23
  503. package/local-dist-new/bot/actions/crew/model-policy.d.ts.map +0 -1
  504. package/local-dist-new/bot/actions/crew/model-policy.js +0 -113
  505. package/local-dist-new/bot/actions/crew/model-policy.js.map +0 -1
  506. package/local-dist-new/bot/actions/crew/names.d.ts +0 -28
  507. package/local-dist-new/bot/actions/crew/names.d.ts.map +0 -1
  508. package/local-dist-new/bot/actions/crew/names.js +0 -109
  509. package/local-dist-new/bot/actions/crew/names.js.map +0 -1
  510. package/local-dist-new/bot/actions/crew/protocol.d.ts +0 -75
  511. package/local-dist-new/bot/actions/crew/protocol.d.ts.map +0 -1
  512. package/local-dist-new/bot/actions/crew/protocol.js +0 -205
  513. package/local-dist-new/bot/actions/crew/protocol.js.map +0 -1
  514. package/local-dist-new/bot/actions/crew/task-store.d.ts +0 -89
  515. package/local-dist-new/bot/actions/crew/task-store.d.ts.map +0 -1
  516. package/local-dist-new/bot/actions/crew/task-store.js +0 -445
  517. package/local-dist-new/bot/actions/crew/task-store.js.map +0 -1
  518. package/local-dist-new/bot/actions/crew/team-attach-claim.d.ts +0 -36
  519. package/local-dist-new/bot/actions/crew/team-attach-claim.d.ts.map +0 -1
  520. package/local-dist-new/bot/actions/crew/team-attach-claim.js +0 -144
  521. package/local-dist-new/bot/actions/crew/team-attach-claim.js.map +0 -1
  522. package/local-dist-new/bot/actions/crew/team-config.d.ts +0 -55
  523. package/local-dist-new/bot/actions/crew/team-config.d.ts.map +0 -1
  524. package/local-dist-new/bot/actions/crew/team-config.js +0 -252
  525. package/local-dist-new/bot/actions/crew/team-config.js.map +0 -1
  526. package/local-dist-new/bot/actions/crew/worktree.d.ts +0 -40
  527. package/local-dist-new/bot/actions/crew/worktree.d.ts.map +0 -1
  528. package/local-dist-new/bot/actions/crew/worktree.js +0 -213
  529. package/local-dist-new/bot/actions/crew/worktree.js.map +0 -1
  530. package/local-dist-new/bot/actions/edit-diff.d.ts +0 -63
  531. package/local-dist-new/bot/actions/edit-diff.d.ts.map +0 -1
  532. package/local-dist-new/bot/actions/edit-diff.js +0 -255
  533. package/local-dist-new/bot/actions/edit-diff.js.map +0 -1
  534. package/local-dist-new/bot/actions/edit.d.ts +0 -42
  535. package/local-dist-new/bot/actions/edit.d.ts.map +0 -1
  536. package/local-dist-new/bot/actions/edit.js +0 -176
  537. package/local-dist-new/bot/actions/edit.js.map +0 -1
  538. package/local-dist-new/bot/actions/find.d.ts +0 -26
  539. package/local-dist-new/bot/actions/find.d.ts.map +0 -1
  540. package/local-dist-new/bot/actions/find.js +0 -170
  541. package/local-dist-new/bot/actions/find.js.map +0 -1
  542. package/local-dist-new/bot/actions/grep.d.ts +0 -43
  543. package/local-dist-new/bot/actions/grep.d.ts.map +0 -1
  544. package/local-dist-new/bot/actions/grep.js +0 -218
  545. package/local-dist-new/bot/actions/grep.js.map +0 -1
  546. package/local-dist-new/bot/actions/index.d.ts +0 -301
  547. package/local-dist-new/bot/actions/index.d.ts.map +0 -1
  548. package/local-dist-new/bot/actions/index.js +0 -255
  549. package/local-dist-new/bot/actions/index.js.map +0 -1
  550. package/local-dist-new/bot/actions/kit/hook-runner.d.ts +0 -13
  551. package/local-dist-new/bot/actions/kit/hook-runner.d.ts.map +0 -1
  552. package/local-dist-new/bot/actions/kit/hook-runner.js +0 -33
  553. package/local-dist-new/bot/actions/kit/hook-runner.js.map +0 -1
  554. package/local-dist-new/bot/actions/kit/image-resize.d.ts +0 -20
  555. package/local-dist-new/bot/actions/kit/image-resize.d.ts.map +0 -1
  556. package/local-dist-new/bot/actions/kit/image-resize.js +0 -93
  557. package/local-dist-new/bot/actions/kit/image-resize.js.map +0 -1
  558. package/local-dist-new/bot/actions/kit/mime.d.ts +0 -2
  559. package/local-dist-new/bot/actions/kit/mime.d.ts.map +0 -1
  560. package/local-dist-new/bot/actions/kit/mime.js +0 -65
  561. package/local-dist-new/bot/actions/kit/mime.js.map +0 -1
  562. package/local-dist-new/bot/actions/kit/shell.d.ts +0 -13
  563. package/local-dist-new/bot/actions/kit/shell.d.ts.map +0 -1
  564. package/local-dist-new/bot/actions/kit/shell.js +0 -103
  565. package/local-dist-new/bot/actions/kit/shell.js.map +0 -1
  566. package/local-dist-new/bot/actions/ls.d.ts +0 -41
  567. package/local-dist-new/bot/actions/ls.d.ts.map +0 -1
  568. package/local-dist-new/bot/actions/ls.js +0 -174
  569. package/local-dist-new/bot/actions/ls.js.map +0 -1
  570. package/local-dist-new/bot/actions/path-utils.d.ts +0 -8
  571. package/local-dist-new/bot/actions/path-utils.d.ts.map +0 -1
  572. package/local-dist-new/bot/actions/path-utils.js +0 -75
  573. package/local-dist-new/bot/actions/path-utils.js.map +0 -1
  574. package/local-dist-new/bot/actions/process-controller.d.ts +0 -15
  575. package/local-dist-new/bot/actions/process-controller.d.ts.map +0 -1
  576. package/local-dist-new/bot/actions/process-controller.js +0 -39
  577. package/local-dist-new/bot/actions/process-controller.js.map +0 -1
  578. package/local-dist-new/bot/actions/process-manager.d.ts +0 -60
  579. package/local-dist-new/bot/actions/process-manager.d.ts.map +0 -1
  580. package/local-dist-new/bot/actions/process-manager.js +0 -485
  581. package/local-dist-new/bot/actions/process-manager.js.map +0 -1
  582. package/local-dist-new/bot/actions/process-types.d.ts +0 -74
  583. package/local-dist-new/bot/actions/process-types.d.ts.map +0 -1
  584. package/local-dist-new/bot/actions/process-types.js +0 -7
  585. package/local-dist-new/bot/actions/process-types.js.map +0 -1
  586. package/local-dist-new/bot/actions/process.d.ts +0 -38
  587. package/local-dist-new/bot/actions/process.d.ts.map +0 -1
  588. package/local-dist-new/bot/actions/process.js +0 -360
  589. package/local-dist-new/bot/actions/process.js.map +0 -1
  590. package/local-dist-new/bot/actions/read.d.ts +0 -37
  591. package/local-dist-new/bot/actions/read.d.ts.map +0 -1
  592. package/local-dist-new/bot/actions/read.js +0 -190
  593. package/local-dist-new/bot/actions/read.js.map +0 -1
  594. package/local-dist-new/bot/actions/registry.d.ts +0 -21
  595. package/local-dist-new/bot/actions/registry.d.ts.map +0 -1
  596. package/local-dist-new/bot/actions/registry.js +0 -23
  597. package/local-dist-new/bot/actions/registry.js.map +0 -1
  598. package/local-dist-new/bot/actions/todo-store.d.ts +0 -77
  599. package/local-dist-new/bot/actions/todo-store.d.ts.map +0 -1
  600. package/local-dist-new/bot/actions/todo-store.js +0 -137
  601. package/local-dist-new/bot/actions/todo-store.js.map +0 -1
  602. package/local-dist-new/bot/actions/todo-types.d.ts +0 -73
  603. package/local-dist-new/bot/actions/todo-types.d.ts.map +0 -1
  604. package/local-dist-new/bot/actions/todo-types.js +0 -8
  605. package/local-dist-new/bot/actions/todo-types.js.map +0 -1
  606. package/local-dist-new/bot/actions/todo.d.ts +0 -77
  607. package/local-dist-new/bot/actions/todo.d.ts.map +0 -1
  608. package/local-dist-new/bot/actions/todo.js +0 -122
  609. package/local-dist-new/bot/actions/todo.js.map +0 -1
  610. package/local-dist-new/bot/actions/truncate.d.ts +0 -73
  611. package/local-dist-new/bot/actions/truncate.d.ts.map +0 -1
  612. package/local-dist-new/bot/actions/truncate.js +0 -221
  613. package/local-dist-new/bot/actions/truncate.js.map +0 -1
  614. package/local-dist-new/bot/actions/webfetch.d.ts +0 -36
  615. package/local-dist-new/bot/actions/webfetch.d.ts.map +0 -1
  616. package/local-dist-new/bot/actions/webfetch.js +0 -247
  617. package/local-dist-new/bot/actions/webfetch.js.map +0 -1
  618. package/local-dist-new/bot/actions/websearch.d.ts +0 -35
  619. package/local-dist-new/bot/actions/websearch.d.ts.map +0 -1
  620. package/local-dist-new/bot/actions/websearch.js +0 -132
  621. package/local-dist-new/bot/actions/websearch.js.map +0 -1
  622. package/local-dist-new/bot/actions/write.d.ts +0 -31
  623. package/local-dist-new/bot/actions/write.d.ts.map +0 -1
  624. package/local-dist-new/bot/actions/write.js +0 -139
  625. package/local-dist-new/bot/actions/write.js.map +0 -1
  626. package/local-dist-new/bot/agent-loop.d.ts +0 -15
  627. package/local-dist-new/bot/agent-loop.d.ts.map +0 -1
  628. package/local-dist-new/bot/agent-loop.js +0 -293
  629. package/local-dist-new/bot/agent-loop.js.map +0 -1
  630. package/local-dist-new/bot/agent.d.ts +0 -122
  631. package/local-dist-new/bot/agent.d.ts.map +0 -1
  632. package/local-dist-new/bot/agent.js +0 -393
  633. package/local-dist-new/bot/agent.js.map +0 -1
  634. package/local-dist-new/bot/error-handler.d.ts +0 -8
  635. package/local-dist-new/bot/error-handler.d.ts.map +0 -1
  636. package/local-dist-new/bot/error-handler.js +0 -8
  637. package/local-dist-new/bot/error-handler.js.map +0 -1
  638. package/local-dist-new/bot/event-bus.d.ts +0 -9
  639. package/local-dist-new/bot/event-bus.d.ts.map +0 -1
  640. package/local-dist-new/bot/event-bus.js +0 -15
  641. package/local-dist-new/bot/event-bus.js.map +0 -1
  642. package/local-dist-new/bot/index.d.ts +0 -8
  643. package/local-dist-new/bot/index.d.ts.map +0 -1
  644. package/local-dist-new/bot/index.js +0 -8
  645. package/local-dist-new/bot/index.js.map +0 -1
  646. package/local-dist-new/bot/messages.d.ts +0 -77
  647. package/local-dist-new/bot/messages.d.ts.map +0 -1
  648. package/local-dist-new/bot/messages.js +0 -116
  649. package/local-dist-new/bot/messages.js.map +0 -1
  650. package/local-dist-new/bot/proxy.d.ts +0 -66
  651. package/local-dist-new/bot/proxy.d.ts.map +0 -1
  652. package/local-dist-new/bot/proxy.js +0 -228
  653. package/local-dist-new/bot/proxy.js.map +0 -1
  654. package/local-dist-new/bot/session-manager.d.ts +0 -448
  655. package/local-dist-new/bot/session-manager.d.ts.map +0 -1
  656. package/local-dist-new/bot/session-manager.js +0 -1232
  657. package/local-dist-new/bot/session-manager.js.map +0 -1
  658. package/local-dist-new/bot/state-manager.d.ts +0 -22
  659. package/local-dist-new/bot/state-manager.d.ts.map +0 -1
  660. package/local-dist-new/bot/state-manager.js +0 -60
  661. package/local-dist-new/bot/state-manager.js.map +0 -1
  662. package/local-dist-new/bot/telemetry.d.ts +0 -7
  663. package/local-dist-new/bot/telemetry.d.ts.map +0 -1
  664. package/local-dist-new/bot/telemetry.js +0 -18
  665. package/local-dist-new/bot/telemetry.js.map +0 -1
  666. package/local-dist-new/bot/types.d.ts +0 -205
  667. package/local-dist-new/bot/types.d.ts.map +0 -1
  668. package/local-dist-new/bot/types.js +0 -60
  669. package/local-dist-new/bot/types.js.map +0 -1
  670. package/local-dist-new/cli.d.ts +0 -3
  671. package/local-dist-new/cli.d.ts.map +0 -1
  672. package/local-dist-new/cli.js +0 -3
  673. package/local-dist-new/cli.js.map +0 -1
  674. package/local-dist-new/index.d.ts +0 -7
  675. package/local-dist-new/index.d.ts.map +0 -1
  676. package/local-dist-new/index.js +0 -7
  677. package/local-dist-new/index.js.map +0 -1
  678. package/local-dist-new/mcp/client-pool.d.ts +0 -106
  679. package/local-dist-new/mcp/client-pool.d.ts.map +0 -1
  680. package/local-dist-new/mcp/client-pool.js +0 -234
  681. package/local-dist-new/mcp/client-pool.js.map +0 -1
  682. package/local-dist-new/mcp/client.d.ts +0 -158
  683. package/local-dist-new/mcp/client.d.ts.map +0 -1
  684. package/local-dist-new/mcp/client.js +0 -611
  685. package/local-dist-new/mcp/client.js.map +0 -1
  686. package/local-dist-new/mcp/config.d.ts +0 -61
  687. package/local-dist-new/mcp/config.d.ts.map +0 -1
  688. package/local-dist-new/mcp/config.js +0 -250
  689. package/local-dist-new/mcp/config.js.map +0 -1
  690. package/local-dist-new/mcp/errors.d.ts +0 -104
  691. package/local-dist-new/mcp/errors.d.ts.map +0 -1
  692. package/local-dist-new/mcp/errors.js +0 -146
  693. package/local-dist-new/mcp/errors.js.map +0 -1
  694. package/local-dist-new/mcp/index.d.ts +0 -56
  695. package/local-dist-new/mcp/index.d.ts.map +0 -1
  696. package/local-dist-new/mcp/index.js +0 -83
  697. package/local-dist-new/mcp/index.js.map +0 -1
  698. package/local-dist-new/mcp/schema-converter.d.ts +0 -68
  699. package/local-dist-new/mcp/schema-converter.d.ts.map +0 -1
  700. package/local-dist-new/mcp/schema-converter.js +0 -230
  701. package/local-dist-new/mcp/schema-converter.js.map +0 -1
  702. package/local-dist-new/mcp/server.d.ts +0 -111
  703. package/local-dist-new/mcp/server.d.ts.map +0 -1
  704. package/local-dist-new/mcp/server.js +0 -305
  705. package/local-dist-new/mcp/server.js.map +0 -1
  706. package/local-dist-new/mcp/tool-factory.d.ts +0 -63
  707. package/local-dist-new/mcp/tool-factory.d.ts.map +0 -1
  708. package/local-dist-new/mcp/tool-factory.js +0 -228
  709. package/local-dist-new/mcp/tool-factory.js.map +0 -1
  710. package/local-dist-new/mcp/types.d.ts +0 -289
  711. package/local-dist-new/mcp/types.d.ts.map +0 -1
  712. package/local-dist-new/mcp/types.js +0 -8
  713. package/local-dist-new/mcp/types.js.map +0 -1
  714. package/local-dist-new/mcp.d.ts +0 -2
  715. package/local-dist-new/mcp.d.ts.map +0 -1
  716. package/local-dist-new/mcp.js +0 -2
  717. package/local-dist-new/mcp.js.map +0 -1
  718. package/local-dist-new/ml/adapters/amazon-bedrock.d.ts +0 -33
  719. package/local-dist-new/ml/adapters/amazon-bedrock.d.ts.map +0 -1
  720. package/local-dist-new/ml/adapters/amazon-bedrock.js +0 -610
  721. package/local-dist-new/ml/adapters/amazon-bedrock.js.map +0 -1
  722. package/local-dist-new/ml/adapters/anthropic.d.ts +0 -62
  723. package/local-dist-new/ml/adapters/anthropic.d.ts.map +0 -1
  724. package/local-dist-new/ml/adapters/anthropic.js +0 -682
  725. package/local-dist-new/ml/adapters/anthropic.js.map +0 -1
  726. package/local-dist-new/ml/adapters/azure-openai-responses.d.ts +0 -15
  727. package/local-dist-new/ml/adapters/azure-openai-responses.d.ts.map +0 -1
  728. package/local-dist-new/ml/adapters/azure-openai-responses.js +0 -233
  729. package/local-dist-new/ml/adapters/azure-openai-responses.js.map +0 -1
  730. package/local-dist-new/ml/adapters/google-shared.d.ts +0 -60
  731. package/local-dist-new/ml/adapters/google-shared.d.ts.map +0 -1
  732. package/local-dist-new/ml/adapters/google-shared.js +0 -316
  733. package/local-dist-new/ml/adapters/google-shared.js.map +0 -1
  734. package/local-dist-new/ml/adapters/google-vertex.d.ts +0 -15
  735. package/local-dist-new/ml/adapters/google-vertex.d.ts.map +0 -1
  736. package/local-dist-new/ml/adapters/google-vertex.js +0 -396
  737. package/local-dist-new/ml/adapters/google-vertex.js.map +0 -1
  738. package/local-dist-new/ml/adapters/google.d.ts +0 -16
  739. package/local-dist-new/ml/adapters/google.d.ts.map +0 -1
  740. package/local-dist-new/ml/adapters/google.js +0 -381
  741. package/local-dist-new/ml/adapters/google.js.map +0 -1
  742. package/local-dist-new/ml/adapters/kimi.d.ts +0 -22
  743. package/local-dist-new/ml/adapters/kimi.d.ts.map +0 -1
  744. package/local-dist-new/ml/adapters/kimi.js +0 -249
  745. package/local-dist-new/ml/adapters/kimi.js.map +0 -1
  746. package/local-dist-new/ml/adapters/mock.d.ts +0 -10
  747. package/local-dist-new/ml/adapters/mock.d.ts.map +0 -1
  748. package/local-dist-new/ml/adapters/mock.js +0 -64
  749. package/local-dist-new/ml/adapters/mock.js.map +0 -1
  750. package/local-dist-new/ml/adapters/nvidia.d.ts +0 -14
  751. package/local-dist-new/ml/adapters/nvidia.d.ts.map +0 -1
  752. package/local-dist-new/ml/adapters/nvidia.js +0 -377
  753. package/local-dist-new/ml/adapters/nvidia.js.map +0 -1
  754. package/local-dist-new/ml/adapters/openai-codex-responses.d.ts +0 -9
  755. package/local-dist-new/ml/adapters/openai-codex-responses.d.ts.map +0 -1
  756. package/local-dist-new/ml/adapters/openai-codex-responses.js +0 -397
  757. package/local-dist-new/ml/adapters/openai-codex-responses.js.map +0 -1
  758. package/local-dist-new/ml/adapters/openai-completions.d.ts +0 -25
  759. package/local-dist-new/ml/adapters/openai-completions.d.ts.map +0 -1
  760. package/local-dist-new/ml/adapters/openai-completions.js +0 -831
  761. package/local-dist-new/ml/adapters/openai-completions.js.map +0 -1
  762. package/local-dist-new/ml/adapters/openai-responses-shared.d.ts +0 -26
  763. package/local-dist-new/ml/adapters/openai-responses-shared.d.ts.map +0 -1
  764. package/local-dist-new/ml/adapters/openai-responses-shared.js +0 -461
  765. package/local-dist-new/ml/adapters/openai-responses-shared.js.map +0 -1
  766. package/local-dist-new/ml/adapters/openai-responses.d.ts +0 -13
  767. package/local-dist-new/ml/adapters/openai-responses.d.ts.map +0 -1
  768. package/local-dist-new/ml/adapters/openai-responses.js +0 -209
  769. package/local-dist-new/ml/adapters/openai-responses.js.map +0 -1
  770. package/local-dist-new/ml/adapters/openai-scaffold.d.ts +0 -4
  771. package/local-dist-new/ml/adapters/openai-scaffold.d.ts.map +0 -1
  772. package/local-dist-new/ml/adapters/openai-scaffold.js +0 -33
  773. package/local-dist-new/ml/adapters/openai-scaffold.js.map +0 -1
  774. package/local-dist-new/ml/adapters/register-builtins.d.ts +0 -3
  775. package/local-dist-new/ml/adapters/register-builtins.d.ts.map +0 -1
  776. package/local-dist-new/ml/adapters/register-builtins.js +0 -143
  777. package/local-dist-new/ml/adapters/register-builtins.js.map +0 -1
  778. package/local-dist-new/ml/adapters/simple-options.d.ts +0 -27
  779. package/local-dist-new/ml/adapters/simple-options.d.ts.map +0 -1
  780. package/local-dist-new/ml/adapters/simple-options.js +0 -96
  781. package/local-dist-new/ml/adapters/simple-options.js.map +0 -1
  782. package/local-dist-new/ml/adapters/transform-messages.d.ts +0 -22
  783. package/local-dist-new/ml/adapters/transform-messages.d.ts.map +0 -1
  784. package/local-dist-new/ml/adapters/transform-messages.js +0 -147
  785. package/local-dist-new/ml/adapters/transform-messages.js.map +0 -1
  786. package/local-dist-new/ml/api-registry.d.ts +0 -50
  787. package/local-dist-new/ml/api-registry.d.ts.map +0 -1
  788. package/local-dist-new/ml/api-registry.js +0 -121
  789. package/local-dist-new/ml/api-registry.js.map +0 -1
  790. package/local-dist-new/ml/cli.d.ts +0 -3
  791. package/local-dist-new/ml/cli.d.ts.map +0 -1
  792. package/local-dist-new/ml/cli.js +0 -117
  793. package/local-dist-new/ml/cli.js.map +0 -1
  794. package/local-dist-new/ml/env-api-keys.d.ts +0 -18
  795. package/local-dist-new/ml/env-api-keys.d.ts.map +0 -1
  796. package/local-dist-new/ml/env-api-keys.js +0 -122
  797. package/local-dist-new/ml/env-api-keys.js.map +0 -1
  798. package/local-dist-new/ml/index.d.ts +0 -28
  799. package/local-dist-new/ml/index.d.ts.map +0 -1
  800. package/local-dist-new/ml/index.js +0 -28
  801. package/local-dist-new/ml/index.js.map +0 -1
  802. package/local-dist-new/ml/kit/auth/anthropic.d.ts +0 -18
  803. package/local-dist-new/ml/kit/auth/anthropic.d.ts.map +0 -1
  804. package/local-dist-new/ml/kit/auth/anthropic.js +0 -152
  805. package/local-dist-new/ml/kit/auth/anthropic.js.map +0 -1
  806. package/local-dist-new/ml/kit/auth/github-copilot.d.ts +0 -23
  807. package/local-dist-new/ml/kit/auth/github-copilot.d.ts.map +0 -1
  808. package/local-dist-new/ml/kit/auth/github-copilot.js +0 -275
  809. package/local-dist-new/ml/kit/auth/github-copilot.js.map +0 -1
  810. package/local-dist-new/ml/kit/auth/index.d.ts +0 -50
  811. package/local-dist-new/ml/kit/auth/index.d.ts.map +0 -1
  812. package/local-dist-new/ml/kit/auth/index.js +0 -112
  813. package/local-dist-new/ml/kit/auth/index.js.map +0 -1
  814. package/local-dist-new/ml/kit/auth/kimi.d.ts +0 -24
  815. package/local-dist-new/ml/kit/auth/kimi.d.ts.map +0 -1
  816. package/local-dist-new/ml/kit/auth/kimi.js +0 -30
  817. package/local-dist-new/ml/kit/auth/kimi.js.map +0 -1
  818. package/local-dist-new/ml/kit/auth/oauth-page.d.ts +0 -3
  819. package/local-dist-new/ml/kit/auth/oauth-page.d.ts.map +0 -1
  820. package/local-dist-new/ml/kit/auth/oauth-page.js +0 -105
  821. package/local-dist-new/ml/kit/auth/oauth-page.js.map +0 -1
  822. package/local-dist-new/ml/kit/auth/openai-codex.d.ts +0 -34
  823. package/local-dist-new/ml/kit/auth/openai-codex.d.ts.map +0 -1
  824. package/local-dist-new/ml/kit/auth/openai-codex.js +0 -373
  825. package/local-dist-new/ml/kit/auth/openai-codex.js.map +0 -1
  826. package/local-dist-new/ml/kit/auth/pkce.d.ts +0 -13
  827. package/local-dist-new/ml/kit/auth/pkce.d.ts.map +0 -1
  828. package/local-dist-new/ml/kit/auth/pkce.js +0 -31
  829. package/local-dist-new/ml/kit/auth/pkce.js.map +0 -1
  830. package/local-dist-new/ml/kit/auth/types.d.ts +0 -72
  831. package/local-dist-new/ml/kit/auth/types.d.ts.map +0 -1
  832. package/local-dist-new/ml/kit/auth/types.js +0 -11
  833. package/local-dist-new/ml/kit/auth/types.js.map +0 -1
  834. package/local-dist-new/ml/kit/base-stream-handler.d.ts +0 -16
  835. package/local-dist-new/ml/kit/base-stream-handler.d.ts.map +0 -1
  836. package/local-dist-new/ml/kit/base-stream-handler.js +0 -25
  837. package/local-dist-new/ml/kit/base-stream-handler.js.map +0 -1
  838. package/local-dist-new/ml/kit/event-stream.d.ts +0 -45
  839. package/local-dist-new/ml/kit/event-stream.d.ts.map +0 -1
  840. package/local-dist-new/ml/kit/event-stream.js +0 -178
  841. package/local-dist-new/ml/kit/event-stream.js.map +0 -1
  842. package/local-dist-new/ml/kit/index.d.ts +0 -15
  843. package/local-dist-new/ml/kit/index.d.ts.map +0 -1
  844. package/local-dist-new/ml/kit/index.js +0 -15
  845. package/local-dist-new/ml/kit/index.js.map +0 -1
  846. package/local-dist-new/ml/kit/json-parse.d.ts +0 -21
  847. package/local-dist-new/ml/kit/json-parse.d.ts.map +0 -1
  848. package/local-dist-new/ml/kit/json-parse.js +0 -44
  849. package/local-dist-new/ml/kit/json-parse.js.map +0 -1
  850. package/local-dist-new/ml/kit/message-transform.d.ts +0 -29
  851. package/local-dist-new/ml/kit/message-transform.d.ts.map +0 -1
  852. package/local-dist-new/ml/kit/message-transform.js +0 -55
  853. package/local-dist-new/ml/kit/message-transform.js.map +0 -1
  854. package/local-dist-new/ml/kit/output-factory.d.ts +0 -3
  855. package/local-dist-new/ml/kit/output-factory.d.ts.map +0 -1
  856. package/local-dist-new/ml/kit/output-factory.js +0 -23
  857. package/local-dist-new/ml/kit/output-factory.js.map +0 -1
  858. package/local-dist-new/ml/kit/overflow.d.ts +0 -10
  859. package/local-dist-new/ml/kit/overflow.d.ts.map +0 -1
  860. package/local-dist-new/ml/kit/overflow.js +0 -76
  861. package/local-dist-new/ml/kit/overflow.js.map +0 -1
  862. package/local-dist-new/ml/kit/provider-adapter.d.ts +0 -57
  863. package/local-dist-new/ml/kit/provider-adapter.d.ts.map +0 -1
  864. package/local-dist-new/ml/kit/provider-adapter.js +0 -37
  865. package/local-dist-new/ml/kit/provider-adapter.js.map +0 -1
  866. package/local-dist-new/ml/kit/provider-client-builder.d.ts +0 -37
  867. package/local-dist-new/ml/kit/provider-client-builder.d.ts.map +0 -1
  868. package/local-dist-new/ml/kit/provider-client-builder.js +0 -50
  869. package/local-dist-new/ml/kit/provider-client-builder.js.map +0 -1
  870. package/local-dist-new/ml/kit/provider-consolidation.d.ts +0 -4
  871. package/local-dist-new/ml/kit/provider-consolidation.d.ts.map +0 -1
  872. package/local-dist-new/ml/kit/provider-consolidation.js +0 -33
  873. package/local-dist-new/ml/kit/provider-consolidation.js.map +0 -1
  874. package/local-dist-new/ml/kit/provider-constants.d.ts +0 -35
  875. package/local-dist-new/ml/kit/provider-constants.d.ts.map +0 -1
  876. package/local-dist-new/ml/kit/provider-constants.js +0 -35
  877. package/local-dist-new/ml/kit/provider-constants.js.map +0 -1
  878. package/local-dist-new/ml/kit/provider-errors.d.ts +0 -46
  879. package/local-dist-new/ml/kit/provider-errors.d.ts.map +0 -1
  880. package/local-dist-new/ml/kit/provider-errors.js +0 -103
  881. package/local-dist-new/ml/kit/provider-errors.js.map +0 -1
  882. package/local-dist-new/ml/kit/sanitize-unicode.d.ts +0 -3
  883. package/local-dist-new/ml/kit/sanitize-unicode.d.ts.map +0 -1
  884. package/local-dist-new/ml/kit/sanitize-unicode.js +0 -60
  885. package/local-dist-new/ml/kit/sanitize-unicode.js.map +0 -1
  886. package/local-dist-new/ml/kit/stream-event-helper.d.ts +0 -28
  887. package/local-dist-new/ml/kit/stream-event-helper.d.ts.map +0 -1
  888. package/local-dist-new/ml/kit/stream-event-helper.js +0 -52
  889. package/local-dist-new/ml/kit/stream-event-helper.js.map +0 -1
  890. package/local-dist-new/ml/kit/stream-handler-types.d.ts +0 -43
  891. package/local-dist-new/ml/kit/stream-handler-types.d.ts.map +0 -1
  892. package/local-dist-new/ml/kit/stream-handler-types.js +0 -23
  893. package/local-dist-new/ml/kit/stream-handler-types.js.map +0 -1
  894. package/local-dist-new/ml/kit/streaming-state-manager.d.ts +0 -50
  895. package/local-dist-new/ml/kit/streaming-state-manager.d.ts.map +0 -1
  896. package/local-dist-new/ml/kit/streaming-state-manager.js +0 -67
  897. package/local-dist-new/ml/kit/streaming-state-manager.js.map +0 -1
  898. package/local-dist-new/ml/kit/tool-converter.d.ts +0 -50
  899. package/local-dist-new/ml/kit/tool-converter.d.ts.map +0 -1
  900. package/local-dist-new/ml/kit/tool-converter.js +0 -54
  901. package/local-dist-new/ml/kit/tool-converter.js.map +0 -1
  902. package/local-dist-new/ml/kit/typebox-helpers.d.ts +0 -24
  903. package/local-dist-new/ml/kit/typebox-helpers.d.ts.map +0 -1
  904. package/local-dist-new/ml/kit/typebox-helpers.js +0 -46
  905. package/local-dist-new/ml/kit/typebox-helpers.js.map +0 -1
  906. package/local-dist-new/ml/kit/validation.d.ts +0 -24
  907. package/local-dist-new/ml/kit/validation.d.ts.map +0 -1
  908. package/local-dist-new/ml/kit/validation.js +0 -119
  909. package/local-dist-new/ml/kit/validation.js.map +0 -1
  910. package/local-dist-new/ml/models.d.ts +0 -41
  911. package/local-dist-new/ml/models.d.ts.map +0 -1
  912. package/local-dist-new/ml/models.generated.d.ts +0 -12245
  913. package/local-dist-new/ml/models.generated.d.ts.map +0 -1
  914. package/local-dist-new/ml/models.generated.js +0 -12080
  915. package/local-dist-new/ml/models.generated.js.map +0 -1
  916. package/local-dist-new/ml/models.js +0 -126
  917. package/local-dist-new/ml/models.js.map +0 -1
  918. package/local-dist-new/ml/stream.d.ts +0 -12
  919. package/local-dist-new/ml/stream.d.ts.map +0 -1
  920. package/local-dist-new/ml/stream.js +0 -54
  921. package/local-dist-new/ml/stream.js.map +0 -1
  922. package/local-dist-new/ml/types.d.ts +0 -270
  923. package/local-dist-new/ml/types.d.ts.map +0 -1
  924. package/local-dist-new/ml/types.js +0 -169
  925. package/local-dist-new/ml/types.js.map +0 -1
  926. package/local-dist-new/observability.d.ts +0 -2
  927. package/local-dist-new/observability.d.ts.map +0 -1
  928. package/local-dist-new/observability.js +0 -2
  929. package/local-dist-new/observability.js.map +0 -1
  930. package/local-dist-new/react-host/index.d.ts +0 -10
  931. package/local-dist-new/react-host/index.d.ts.map +0 -1
  932. package/local-dist-new/react-host/index.js +0 -9
  933. package/local-dist-new/react-host/index.js.map +0 -1
  934. package/local-dist-new/react-host/ink.d.ts +0 -6
  935. package/local-dist-new/react-host/ink.d.ts.map +0 -1
  936. package/local-dist-new/react-host/ink.js +0 -7
  937. package/local-dist-new/react-host/ink.js.map +0 -1
  938. package/local-dist-new/react-host/jsx-runtime.d.ts +0 -5
  939. package/local-dist-new/react-host/jsx-runtime.d.ts.map +0 -1
  940. package/local-dist-new/react-host/jsx-runtime.js +0 -6
  941. package/local-dist-new/react-host/jsx-runtime.js.map +0 -1
  942. package/local-dist-new/react-host/loader.d.ts +0 -4
  943. package/local-dist-new/react-host/loader.d.ts.map +0 -1
  944. package/local-dist-new/react-host/loader.js +0 -108
  945. package/local-dist-new/react-host/loader.js.map +0 -1
  946. package/local-dist-new/react-ink/components/ChangelogBlock.d.ts +0 -9
  947. package/local-dist-new/react-ink/components/ChangelogBlock.d.ts.map +0 -1
  948. package/local-dist-new/react-ink/components/ChangelogBlock.js +0 -58
  949. package/local-dist-new/react-ink/components/ChangelogBlock.js.map +0 -1
  950. package/local-dist-new/react-ink/components/DisplayBlockView.d.ts +0 -9
  951. package/local-dist-new/react-ink/components/DisplayBlockView.d.ts.map +0 -1
  952. package/local-dist-new/react-ink/components/DisplayBlockView.js +0 -11
  953. package/local-dist-new/react-ink/components/DisplayBlockView.js.map +0 -1
  954. package/local-dist-new/react-ink/components/Footer.d.ts +0 -12
  955. package/local-dist-new/react-ink/components/Footer.d.ts.map +0 -1
  956. package/local-dist-new/react-ink/components/Footer.js +0 -113
  957. package/local-dist-new/react-ink/components/Footer.js.map +0 -1
  958. package/local-dist-new/react-ink/components/MessageList.d.ts +0 -15
  959. package/local-dist-new/react-ink/components/MessageList.d.ts.map +0 -1
  960. package/local-dist-new/react-ink/components/MessageList.js +0 -43
  961. package/local-dist-new/react-ink/components/MessageList.js.map +0 -1
  962. package/local-dist-new/react-ink/components/MessageRow.d.ts +0 -14
  963. package/local-dist-new/react-ink/components/MessageRow.d.ts.map +0 -1
  964. package/local-dist-new/react-ink/components/MessageRow.js +0 -35
  965. package/local-dist-new/react-ink/components/MessageRow.js.map +0 -1
  966. package/local-dist-new/react-ink/components/StatusLine.d.ts +0 -10
  967. package/local-dist-new/react-ink/components/StatusLine.d.ts.map +0 -1
  968. package/local-dist-new/react-ink/components/StatusLine.js +0 -39
  969. package/local-dist-new/react-ink/components/StatusLine.js.map +0 -1
  970. package/local-dist-new/react-ink/components/TaskPanel.d.ts +0 -12
  971. package/local-dist-new/react-ink/components/TaskPanel.d.ts.map +0 -1
  972. package/local-dist-new/react-ink/components/TaskPanel.js +0 -23
  973. package/local-dist-new/react-ink/components/TaskPanel.js.map +0 -1
  974. package/local-dist-new/react-ink/components/ToolEventBlock.d.ts +0 -18
  975. package/local-dist-new/react-ink/components/ToolEventBlock.d.ts.map +0 -1
  976. package/local-dist-new/react-ink/components/ToolEventBlock.js +0 -61
  977. package/local-dist-new/react-ink/components/ToolEventBlock.js.map +0 -1
  978. package/local-dist-new/react-ink/components/dialogs/DialogFrame.d.ts +0 -9
  979. package/local-dist-new/react-ink/components/dialogs/DialogFrame.d.ts.map +0 -1
  980. package/local-dist-new/react-ink/components/dialogs/DialogFrame.js +0 -6
  981. package/local-dist-new/react-ink/components/dialogs/DialogFrame.js.map +0 -1
  982. package/local-dist-new/react-ink/components/dialogs/LoginDialog.d.ts +0 -15
  983. package/local-dist-new/react-ink/components/dialogs/LoginDialog.d.ts.map +0 -1
  984. package/local-dist-new/react-ink/components/dialogs/LoginDialog.js +0 -10
  985. package/local-dist-new/react-ink/components/dialogs/LoginDialog.js.map +0 -1
  986. package/local-dist-new/react-ink/components/dialogs/ModelDialog.d.ts +0 -10
  987. package/local-dist-new/react-ink/components/dialogs/ModelDialog.d.ts.map +0 -1
  988. package/local-dist-new/react-ink/components/dialogs/ModelDialog.js +0 -64
  989. package/local-dist-new/react-ink/components/dialogs/ModelDialog.js.map +0 -1
  990. package/local-dist-new/react-ink/components/dialogs/OAuthDialog.d.ts +0 -10
  991. package/local-dist-new/react-ink/components/dialogs/OAuthDialog.d.ts.map +0 -1
  992. package/local-dist-new/react-ink/components/dialogs/OAuthDialog.js +0 -24
  993. package/local-dist-new/react-ink/components/dialogs/OAuthDialog.js.map +0 -1
  994. package/local-dist-new/react-ink/components/dialogs/ScopedModelsDialog.d.ts +0 -10
  995. package/local-dist-new/react-ink/components/dialogs/ScopedModelsDialog.d.ts.map +0 -1
  996. package/local-dist-new/react-ink/components/dialogs/ScopedModelsDialog.js +0 -95
  997. package/local-dist-new/react-ink/components/dialogs/ScopedModelsDialog.js.map +0 -1
  998. package/local-dist-new/react-ink/components/dialogs/SelectableDialog.d.ts +0 -17
  999. package/local-dist-new/react-ink/components/dialogs/SelectableDialog.d.ts.map +0 -1
  1000. package/local-dist-new/react-ink/components/dialogs/SelectableDialog.js +0 -66
  1001. package/local-dist-new/react-ink/components/dialogs/SelectableDialog.js.map +0 -1
  1002. package/local-dist-new/react-ink/components/dialogs/SessionDialog.d.ts +0 -14
  1003. package/local-dist-new/react-ink/components/dialogs/SessionDialog.d.ts.map +0 -1
  1004. package/local-dist-new/react-ink/components/dialogs/SessionDialog.js +0 -201
  1005. package/local-dist-new/react-ink/components/dialogs/SessionDialog.js.map +0 -1
  1006. package/local-dist-new/react-ink/components/dialogs/SettingsDialog.d.ts +0 -15
  1007. package/local-dist-new/react-ink/components/dialogs/SettingsDialog.d.ts.map +0 -1
  1008. package/local-dist-new/react-ink/components/dialogs/SettingsDialog.js +0 -79
  1009. package/local-dist-new/react-ink/components/dialogs/SettingsDialog.js.map +0 -1
  1010. package/local-dist-new/react-ink/components/dialogs/StartupSessionPicker.d.ts +0 -10
  1011. package/local-dist-new/react-ink/components/dialogs/StartupSessionPicker.d.ts.map +0 -1
  1012. package/local-dist-new/react-ink/components/dialogs/StartupSessionPicker.js +0 -100
  1013. package/local-dist-new/react-ink/components/dialogs/StartupSessionPicker.js.map +0 -1
  1014. package/local-dist-new/react-ink/components/dialogs/ThemeDialog.d.ts +0 -8
  1015. package/local-dist-new/react-ink/components/dialogs/ThemeDialog.d.ts.map +0 -1
  1016. package/local-dist-new/react-ink/components/dialogs/ThemeDialog.js +0 -7
  1017. package/local-dist-new/react-ink/components/dialogs/ThemeDialog.js.map +0 -1
  1018. package/local-dist-new/react-ink/components/dialogs/TreeDialog.d.ts +0 -9
  1019. package/local-dist-new/react-ink/components/dialogs/TreeDialog.d.ts.map +0 -1
  1020. package/local-dist-new/react-ink/components/dialogs/TreeDialog.js +0 -7
  1021. package/local-dist-new/react-ink/components/dialogs/TreeDialog.js.map +0 -1
  1022. package/local-dist-new/react-ink/components/dialogs/UserMessageDialog.d.ts +0 -9
  1023. package/local-dist-new/react-ink/components/dialogs/UserMessageDialog.d.ts.map +0 -1
  1024. package/local-dist-new/react-ink/components/dialogs/UserMessageDialog.js +0 -7
  1025. package/local-dist-new/react-ink/components/dialogs/UserMessageDialog.js.map +0 -1
  1026. package/local-dist-new/react-ink/components/messages/AssistantMessage.d.ts +0 -13
  1027. package/local-dist-new/react-ink/components/messages/AssistantMessage.d.ts.map +0 -1
  1028. package/local-dist-new/react-ink/components/messages/AssistantMessage.js +0 -20
  1029. package/local-dist-new/react-ink/components/messages/AssistantMessage.js.map +0 -1
  1030. package/local-dist-new/react-ink/components/messages/BashMessage.d.ts +0 -9
  1031. package/local-dist-new/react-ink/components/messages/BashMessage.d.ts.map +0 -1
  1032. package/local-dist-new/react-ink/components/messages/BashMessage.js +0 -11
  1033. package/local-dist-new/react-ink/components/messages/BashMessage.js.map +0 -1
  1034. package/local-dist-new/react-ink/components/messages/BranchSummaryMessage.d.ts +0 -9
  1035. package/local-dist-new/react-ink/components/messages/BranchSummaryMessage.d.ts.map +0 -1
  1036. package/local-dist-new/react-ink/components/messages/BranchSummaryMessage.js +0 -6
  1037. package/local-dist-new/react-ink/components/messages/BranchSummaryMessage.js.map +0 -1
  1038. package/local-dist-new/react-ink/components/messages/CompactionMessage.d.ts +0 -9
  1039. package/local-dist-new/react-ink/components/messages/CompactionMessage.d.ts.map +0 -1
  1040. package/local-dist-new/react-ink/components/messages/CompactionMessage.js +0 -6
  1041. package/local-dist-new/react-ink/components/messages/CompactionMessage.js.map +0 -1
  1042. package/local-dist-new/react-ink/components/messages/CustomMessage.d.ts +0 -10
  1043. package/local-dist-new/react-ink/components/messages/CustomMessage.d.ts.map +0 -1
  1044. package/local-dist-new/react-ink/components/messages/CustomMessage.js +0 -9
  1045. package/local-dist-new/react-ink/components/messages/CustomMessage.js.map +0 -1
  1046. package/local-dist-new/react-ink/components/messages/SkillInvocationMessage.d.ts +0 -8
  1047. package/local-dist-new/react-ink/components/messages/SkillInvocationMessage.d.ts.map +0 -1
  1048. package/local-dist-new/react-ink/components/messages/SkillInvocationMessage.js +0 -10
  1049. package/local-dist-new/react-ink/components/messages/SkillInvocationMessage.js.map +0 -1
  1050. package/local-dist-new/react-ink/components/messages/ToolCallMessage.d.ts +0 -9
  1051. package/local-dist-new/react-ink/components/messages/ToolCallMessage.d.ts.map +0 -1
  1052. package/local-dist-new/react-ink/components/messages/ToolCallMessage.js +0 -8
  1053. package/local-dist-new/react-ink/components/messages/ToolCallMessage.js.map +0 -1
  1054. package/local-dist-new/react-ink/components/messages/ToolResultBlock.d.ts +0 -13
  1055. package/local-dist-new/react-ink/components/messages/ToolResultBlock.d.ts.map +0 -1
  1056. package/local-dist-new/react-ink/components/messages/ToolResultBlock.js +0 -8
  1057. package/local-dist-new/react-ink/components/messages/ToolResultBlock.js.map +0 -1
  1058. package/local-dist-new/react-ink/components/messages/UserMessage.d.ts +0 -10
  1059. package/local-dist-new/react-ink/components/messages/UserMessage.d.ts.map +0 -1
  1060. package/local-dist-new/react-ink/components/messages/UserMessage.js +0 -9
  1061. package/local-dist-new/react-ink/components/messages/UserMessage.js.map +0 -1
  1062. package/local-dist-new/react-ink/index.d.ts +0 -35
  1063. package/local-dist-new/react-ink/index.d.ts.map +0 -1
  1064. package/local-dist-new/react-ink/index.js +0 -35
  1065. package/local-dist-new/react-ink/index.js.map +0 -1
  1066. package/local-dist-new/react-ink/theme-adapter.d.ts +0 -10
  1067. package/local-dist-new/react-ink/theme-adapter.d.ts.map +0 -1
  1068. package/local-dist-new/react-ink/theme-adapter.js +0 -44
  1069. package/local-dist-new/react-ink/theme-adapter.js.map +0 -1
  1070. package/local-dist-new/react-ink/types.d.ts +0 -134
  1071. package/local-dist-new/react-ink/types.d.ts.map +0 -1
  1072. package/local-dist-new/react-ink/types.js +0 -2
  1073. package/local-dist-new/react-ink/types.js.map +0 -1
  1074. package/local-dist-new/react-ink/utils/message-groups.d.ts +0 -26
  1075. package/local-dist-new/react-ink/utils/message-groups.d.ts.map +0 -1
  1076. package/local-dist-new/react-ink/utils/message-groups.js +0 -240
  1077. package/local-dist-new/react-ink/utils/message-groups.js.map +0 -1
  1078. package/local-dist-new/react-ink/utils/selection-dialog.d.ts +0 -3
  1079. package/local-dist-new/react-ink/utils/selection-dialog.d.ts.map +0 -1
  1080. package/local-dist-new/react-ink/utils/selection-dialog.js +0 -18
  1081. package/local-dist-new/react-ink/utils/selection-dialog.js.map +0 -1
  1082. package/local-dist-new/react-ink/utils/session-browser.d.ts +0 -28
  1083. package/local-dist-new/react-ink/utils/session-browser.d.ts.map +0 -1
  1084. package/local-dist-new/react-ink/utils/session-browser.js +0 -191
  1085. package/local-dist-new/react-ink/utils/session-browser.js.map +0 -1
  1086. package/local-dist-new/react-ink/utils/tool-display.d.ts +0 -22
  1087. package/local-dist-new/react-ink/utils/tool-display.d.ts.map +0 -1
  1088. package/local-dist-new/react-ink/utils/tool-display.js +0 -349
  1089. package/local-dist-new/react-ink/utils/tool-display.js.map +0 -1
  1090. package/local-dist-new/react-ink.d.ts +0 -3
  1091. package/local-dist-new/react-ink.d.ts.map +0 -1
  1092. package/local-dist-new/react-ink.js +0 -2
  1093. package/local-dist-new/react-ink.js.map +0 -1
  1094. package/local-dist-new/tui.d.ts +0 -9
  1095. package/local-dist-new/tui.d.ts.map +0 -1
  1096. package/local-dist-new/tui.js +0 -8
  1097. package/local-dist-new/tui.js.map +0 -1
  1098. package/local-dist-new/ui/autocomplete.d.ts +0 -60
  1099. package/local-dist-new/ui/autocomplete.d.ts.map +0 -1
  1100. package/local-dist-new/ui/autocomplete.js +0 -393
  1101. package/local-dist-new/ui/autocomplete.js.map +0 -1
  1102. package/local-dist-new/ui/contracts.d.ts +0 -39
  1103. package/local-dist-new/ui/contracts.d.ts.map +0 -1
  1104. package/local-dist-new/ui/contracts.js +0 -2
  1105. package/local-dist-new/ui/contracts.js.map +0 -1
  1106. package/local-dist-new/ui/editor-component.d.ts +0 -101
  1107. package/local-dist-new/ui/editor-component.d.ts.map +0 -1
  1108. package/local-dist-new/ui/editor-component.js +0 -2
  1109. package/local-dist-new/ui/editor-component.js.map +0 -1
  1110. package/local-dist-new/ui/fuzzy.d.ts +0 -26
  1111. package/local-dist-new/ui/fuzzy.d.ts.map +0 -1
  1112. package/local-dist-new/ui/fuzzy.js +0 -177
  1113. package/local-dist-new/ui/fuzzy.js.map +0 -1
  1114. package/local-dist-new/ui/index.d.ts +0 -9
  1115. package/local-dist-new/ui/index.d.ts.map +0 -1
  1116. package/local-dist-new/ui/index.js +0 -6
  1117. package/local-dist-new/ui/index.js.map +0 -1
  1118. package/local-dist-new/ui/keybindings.d.ts +0 -52
  1119. package/local-dist-new/ui/keybindings.d.ts.map +0 -1
  1120. package/local-dist-new/ui/keybindings.js +0 -193
  1121. package/local-dist-new/ui/keybindings.js.map +0 -1
  1122. package/local-dist-new/ui/keys.d.ts +0 -168
  1123. package/local-dist-new/ui/keys.d.ts.map +0 -1
  1124. package/local-dist-new/ui/keys.js +0 -1093
  1125. package/local-dist-new/ui/keys.js.map +0 -1
  1126. package/local-dist-new/ui/theme-types.d.ts +0 -37
  1127. package/local-dist-new/ui/theme-types.d.ts.map +0 -1
  1128. package/local-dist-new/ui/theme-types.js +0 -2
  1129. package/local-dist-new/ui/theme-types.js.map +0 -1
  1130. package/local-dist-new/ui/utils.d.ts +0 -97
  1131. package/local-dist-new/ui/utils.d.ts.map +0 -1
  1132. package/local-dist-new/ui/utils.js +0 -860
  1133. package/local-dist-new/ui/utils.js.map +0 -1
  1134. package/observe.d.ts +0 -1
  1135. package/observe.js +0 -1
@@ -0,0 +1,2475 @@
1
+ // src/react-ink/theme-adapter.ts
2
+ import chalk from "chalk";
3
+ import stripAnsi from "strip-ansi";
4
+ function applyForeground(color, text) {
5
+ if (!color) return text;
6
+ try {
7
+ return chalk.hex(color)(text);
8
+ } catch {
9
+ return text;
10
+ }
11
+ }
12
+ function resolveColorToken(value, fallback) {
13
+ if (typeof value === "string" && value.trim().length > 0) {
14
+ return value;
15
+ }
16
+ return fallback;
17
+ }
18
+ function applyBackground(background, foreground, text) {
19
+ if (!background) return applyForeground(foreground, text);
20
+ try {
21
+ let styled = chalk.bgHex(background);
22
+ if (foreground) {
23
+ styled = styled.hex(foreground);
24
+ }
25
+ return styled(text);
26
+ } catch {
27
+ return applyForeground(foreground, text);
28
+ }
29
+ }
30
+ function createThemeAdapter(themeName, colors) {
31
+ const fallback = colors.text ?? "#e5e5e7";
32
+ return {
33
+ name: themeName,
34
+ colors,
35
+ color: (key, text) => applyForeground(resolveColorToken(colors[key], fallback), text),
36
+ background: (key, text, textKey = "text") => applyBackground(resolveColorToken(colors[key]), resolveColorToken(colors[textKey], fallback), ` ${stripAnsi(text)} `),
37
+ dim: (text) => applyForeground(resolveColorToken(colors.dim, "#666666"), text),
38
+ muted: (text) => applyForeground(resolveColorToken(colors.muted, "#808080"), text)
39
+ };
40
+ }
41
+
42
+ // src/react-host/loader.ts
43
+ import { createRequire } from "node:module";
44
+ import fs from "node:fs";
45
+ import path from "node:path";
46
+ import { fileURLToPath, pathToFileURL } from "node:url";
47
+ function findPackageRoot(start) {
48
+ let current = path.resolve(start);
49
+ while (true) {
50
+ const packageJson = path.join(current, "package.json");
51
+ if (fs.existsSync(packageJson)) {
52
+ return current;
53
+ }
54
+ const parent = path.dirname(current);
55
+ if (parent === current) {
56
+ return null;
57
+ }
58
+ current = parent;
59
+ }
60
+ }
61
+ function createPackageRequire(packageRoot) {
62
+ return createRequire(path.join(packageRoot, "package.json"));
63
+ }
64
+ function candidatePackageRoots() {
65
+ const roots = /* @__PURE__ */ new Set();
66
+ const addCandidate = (candidate) => {
67
+ if (!candidate) {
68
+ return;
69
+ }
70
+ const root = findPackageRoot(candidate);
71
+ if (root) {
72
+ roots.add(root);
73
+ }
74
+ };
75
+ const argv1 = process.argv[1];
76
+ let argv1Real;
77
+ if (argv1) {
78
+ try {
79
+ argv1Real = fs.realpathSync(argv1);
80
+ } catch {
81
+ argv1Real = argv1;
82
+ }
83
+ }
84
+ const packageRoot = fileURLToPath(new URL("../../..", import.meta.url));
85
+ addCandidate(process.env.INDUSAGI_REACT_HOST_ROOT);
86
+ addCandidate(argv1Real ? path.dirname(argv1Real) : void 0);
87
+ addCandidate(argv1 ? path.dirname(argv1) : void 0);
88
+ addCandidate(process.env.INIT_CWD);
89
+ addCandidate(process.cwd());
90
+ addCandidate(packageRoot);
91
+ return [...roots];
92
+ }
93
+ function resolveHostModule(specifier) {
94
+ const failures = [];
95
+ for (const packageRoot of candidatePackageRoots()) {
96
+ try {
97
+ return createPackageRequire(packageRoot).resolve(specifier);
98
+ } catch (error) {
99
+ failures.push(`${packageRoot}: ${String(error.message ?? error)}`);
100
+ }
101
+ }
102
+ throw new Error(
103
+ `Unable to resolve host module "${specifier}" from any detected package root.
104
+ ${failures.join("\n")}`
105
+ );
106
+ }
107
+ function normalizeModuleNamespace(moduleNamespace) {
108
+ const defaultExport = moduleNamespace.default;
109
+ if (defaultExport && typeof defaultExport === "object") {
110
+ return { ...defaultExport, ...moduleNamespace };
111
+ }
112
+ return moduleNamespace;
113
+ }
114
+ async function importHostModule(specifier) {
115
+ const resolved = resolveHostModule(specifier);
116
+ const moduleNamespace = await import(pathToFileURL(resolved).href);
117
+ return normalizeModuleNamespace(moduleNamespace);
118
+ }
119
+ var reactInstance = null;
120
+ var jsxRuntimeInstance = null;
121
+ var inkInstance = null;
122
+ function loadHostReact() {
123
+ if (!reactInstance) {
124
+ reactInstance = importHostModule("react");
125
+ }
126
+ return reactInstance;
127
+ }
128
+ function loadHostJsxRuntime() {
129
+ if (!jsxRuntimeInstance) {
130
+ jsxRuntimeInstance = importHostModule("react/jsx-runtime");
131
+ }
132
+ return jsxRuntimeInstance;
133
+ }
134
+ function loadHostInk() {
135
+ if (!inkInstance) {
136
+ inkInstance = importHostModule("ink");
137
+ }
138
+ return inkInstance;
139
+ }
140
+
141
+ // src/react-host/ink.ts
142
+ var ink = await loadHostInk();
143
+ var Box = ink.Box;
144
+ var Text = ink.Text;
145
+ var render = ink.render;
146
+ var useInput = ink.useInput;
147
+
148
+ // src/react-host/jsx-runtime.ts
149
+ var jsxRuntime = await loadHostJsxRuntime();
150
+ var Fragment = jsxRuntime.Fragment;
151
+ var jsx = jsxRuntime.jsx;
152
+ var jsxs = jsxRuntime.jsxs;
153
+
154
+ // src/react-ink/components/ChangelogBlock.tsx
155
+ function renderInline(text, theme, keyPrefix) {
156
+ const nodes = [];
157
+ const tokenPattern = /(\*\*[^*]+\*\*|`[^`]+`)/g;
158
+ let cursor = 0;
159
+ let tokenIndex = 0;
160
+ for (const match of text.matchAll(tokenPattern)) {
161
+ const matchedText = match[0];
162
+ const start = match.index ?? cursor;
163
+ if (start > cursor) {
164
+ nodes.push(text.slice(cursor, start));
165
+ }
166
+ if (matchedText.startsWith("**")) {
167
+ nodes.push(
168
+ /* @__PURE__ */ jsx(Text, { children: theme.color("accent", matchedText.slice(2, -2)) }, `${keyPrefix}-bold-${tokenIndex}`)
169
+ );
170
+ } else {
171
+ nodes.push(
172
+ /* @__PURE__ */ jsx(Text, { children: theme.color("accent", matchedText.slice(1, -1)) }, `${keyPrefix}-code-${tokenIndex}`)
173
+ );
174
+ }
175
+ cursor = start + matchedText.length;
176
+ tokenIndex += 1;
177
+ }
178
+ if (cursor < text.length) {
179
+ nodes.push(text.slice(cursor));
180
+ }
181
+ return nodes.length > 0 ? nodes : [text];
182
+ }
183
+ function renderMarkdownLine(line, theme, key) {
184
+ const trimmed = line.trim();
185
+ if (trimmed.length === 0) {
186
+ return /* @__PURE__ */ jsx(Text, { children: " " }, key);
187
+ }
188
+ if (/^-{3,}$/.test(trimmed)) {
189
+ const width = Math.max(20, (process.stdout.columns ?? 80) - 4);
190
+ return /* @__PURE__ */ jsx(Text, { children: theme.color("borderMuted", "\u2500".repeat(width)) }, key);
191
+ }
192
+ if (trimmed.startsWith("## ")) {
193
+ return /* @__PURE__ */ jsx(Text, { children: theme.color("accent", trimmed.slice(3)) }, key);
194
+ }
195
+ if (trimmed.startsWith("### ")) {
196
+ return /* @__PURE__ */ jsx(Text, { children: theme.color("warning", trimmed.slice(4)) }, key);
197
+ }
198
+ const bulletMatch = line.match(/^(\s*)-\s+(.*)$/);
199
+ if (bulletMatch) {
200
+ const indent = " ".repeat(bulletMatch[1]?.length ?? 0);
201
+ const content = bulletMatch[2] ?? "";
202
+ const bulletColor = indent.length > 0 ? "muted" : "accent";
203
+ return /* @__PURE__ */ jsxs(Text, { children: [
204
+ indent,
205
+ theme.color(bulletColor, "\u2022"),
206
+ " ",
207
+ renderInline(content, theme, key)
208
+ ] }, key);
209
+ }
210
+ return /* @__PURE__ */ jsx(Text, { children: renderInline(line, theme, key) }, key);
211
+ }
212
+ function ChangelogBlock({ markdown, theme, title }) {
213
+ const dividerWidth = Math.max(20, (process.stdout.columns ?? 80) - 2);
214
+ const divider = "\u2500".repeat(dividerWidth);
215
+ const lines = markdown.trim().length > 0 ? markdown.trim().split("\n") : ["No changelog entries found."];
216
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
217
+ /* @__PURE__ */ jsx(Text, { children: theme.color("borderMuted", divider) }),
218
+ /* @__PURE__ */ jsx(Text, { children: theme.color("accent", title) }),
219
+ /* @__PURE__ */ jsx(Text, { children: " " }),
220
+ lines.map((line, index) => renderMarkdownLine(line, theme, `${title}-${index}`)),
221
+ /* @__PURE__ */ jsx(Text, { children: theme.color("borderMuted", divider) })
222
+ ] });
223
+ }
224
+
225
+ // src/react-ink/components/DisplayBlockView.tsx
226
+ function DisplayBlockView({ block, theme }) {
227
+ switch (block.kind) {
228
+ case "changelog":
229
+ return /* @__PURE__ */ jsx(ChangelogBlock, { markdown: block.markdown, theme, title: block.title });
230
+ default:
231
+ return null;
232
+ }
233
+ }
234
+
235
+ // src/react-ink/components/Footer.tsx
236
+ import stripAnsi2 from "strip-ansi";
237
+ function toDisplayText(value) {
238
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean" || typeof value === "bigint") {
239
+ return String(value);
240
+ }
241
+ if (Array.isArray(value)) {
242
+ return value.map((entry) => toDisplayText(entry)).join("");
243
+ }
244
+ if (!value || typeof value !== "object") {
245
+ return "";
246
+ }
247
+ if ("props" in value) {
248
+ return toDisplayText(value.props?.children);
249
+ }
250
+ return "";
251
+ }
252
+ function sanitizeStatusText(value) {
253
+ return value.replace(/\s+/g, " ").trim();
254
+ }
255
+ function formatTokens(count) {
256
+ if (count < 1e3) return count.toString();
257
+ if (count < 1e4) return `${(count / 1e3).toFixed(1)}k`;
258
+ if (count < 1e6) return `${Math.round(count / 1e3)}k`;
259
+ if (count < 1e7) return `${(count / 1e6).toFixed(1)}M`;
260
+ return `${Math.round(count / 1e6)}M`;
261
+ }
262
+ function shortenPath(path2) {
263
+ const home = process.env.HOME || process.env.USERPROFILE;
264
+ if (home && path2.startsWith(home)) {
265
+ return `~${path2.slice(home.length)}`;
266
+ }
267
+ return path2;
268
+ }
269
+ function chunkLines(values, width) {
270
+ const lines = [];
271
+ let current = "";
272
+ for (const value of values) {
273
+ const next = current ? `${current} ${value}` : value;
274
+ if (stripAnsi2(next).length > width && current) {
275
+ lines.push(current);
276
+ current = value;
277
+ } else {
278
+ current = next;
279
+ }
280
+ }
281
+ if (current) {
282
+ lines.push(current);
283
+ }
284
+ return lines;
285
+ }
286
+ function Footer({ availableProviderCount, branch, extensionStatuses, snapshot, theme }) {
287
+ const cwdLineParts = [shortenPath(snapshot.cwd)];
288
+ if (branch) {
289
+ cwdLineParts.push(`(${toDisplayText(branch)})`);
290
+ }
291
+ if (snapshot.sessionName) {
292
+ cwdLineParts.push(`\u2022 ${snapshot.sessionName}`);
293
+ }
294
+ const statsParts = [];
295
+ if (snapshot.stats.tokens.input > 0) statsParts.push(`\u2191${formatTokens(snapshot.stats.tokens.input)}`);
296
+ if (snapshot.stats.tokens.output > 0) statsParts.push(`\u2193${formatTokens(snapshot.stats.tokens.output)}`);
297
+ if (snapshot.stats.tokens.cacheRead > 0) statsParts.push(`R${formatTokens(snapshot.stats.tokens.cacheRead)}`);
298
+ if (snapshot.stats.tokens.cacheWrite > 0) statsParts.push(`W${formatTokens(snapshot.stats.tokens.cacheWrite)}`);
299
+ if (snapshot.stats.cost > 0) statsParts.push(`$${snapshot.stats.cost.toFixed(3)}`);
300
+ let contextPart = snapshot.contextUsage ? `ctx:${snapshot.contextUsage.percent.toFixed(1)}%/${formatTokens(snapshot.contextUsage.contextWindow)}` : void 0;
301
+ if (contextPart && snapshot.autoCompactEnabled) {
302
+ contextPart += " (auto)";
303
+ }
304
+ if (contextPart) {
305
+ if ((snapshot.contextUsage?.percent ?? 0) > 90) {
306
+ statsParts.push(toDisplayText(theme.color("error", contextPart)));
307
+ } else if ((snapshot.contextUsage?.percent ?? 0) > 70) {
308
+ statsParts.push(toDisplayText(theme.color("warning", contextPart)));
309
+ } else {
310
+ statsParts.push(contextPart);
311
+ }
312
+ }
313
+ const modelParts = [
314
+ snapshot.model ? `${toDisplayText(snapshot.model.provider)}/${toDisplayText(snapshot.model.id)}` : "no-model",
315
+ `thinking:${toDisplayText(snapshot.thinkingLevel)}`,
316
+ snapshot.pendingMessageCount > 0 ? `pending:${snapshot.pendingMessageCount}` : void 0,
317
+ snapshot.pendingToolCallCount > 0 ? `tools:${snapshot.pendingToolCallCount}` : void 0,
318
+ availableProviderCount > 1 ? `providers:${availableProviderCount}` : void 0
319
+ ];
320
+ const statusValues = Array.from(extensionStatuses?.entries() ?? []).sort(([left], [right]) => left.localeCompare(right)).map(([key, text]) => sanitizeStatusText(`${key}: ${text}`)).filter(Boolean);
321
+ const width = Math.max(40, (process.stdout.columns ?? 80) - 2);
322
+ const cwdLine = cwdLineParts.join(" ");
323
+ const statsLine = statsParts.join(" ");
324
+ const modelLine = modelParts.filter(Boolean).join(" | ");
325
+ const statusLines = chunkLines(statusValues, width);
326
+ const mutedColor = typeof theme.colors.muted === "string" && theme.colors.muted.trim().length > 0 ? theme.colors.muted : "gray";
327
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
328
+ /* @__PURE__ */ jsx(Text, { color: mutedColor, children: cwdLine }),
329
+ /* @__PURE__ */ jsxs(Box, { justifyContent: "space-between", children: [
330
+ /* @__PURE__ */ jsx(Text, { color: mutedColor, children: statsLine }),
331
+ /* @__PURE__ */ jsx(Text, { color: mutedColor, children: modelLine })
332
+ ] }),
333
+ statusLines.map((line, index) => /* @__PURE__ */ jsx(Text, { color: mutedColor, children: line }, `footer-status:${index}`))
334
+ ] });
335
+ }
336
+
337
+ // src/react-ink/utils/message-groups.ts
338
+ function parseSkillBlock(text) {
339
+ const match = text.match(/^<skill name="([^"]+)" location="([^"]+)">\n([\s\S]*?)\n<\/skill>(?:\n\n([\s\S]+))?$/);
340
+ if (!match) return null;
341
+ return {
342
+ name: match[1] ?? "",
343
+ location: match[2] ?? "",
344
+ content: match[3] ?? "",
345
+ userMessage: match[4]?.trim() || void 0
346
+ };
347
+ }
348
+ function isTextContent(value) {
349
+ return typeof value === "object" && value !== null && value.type === "text";
350
+ }
351
+ function isImageContent(value) {
352
+ return typeof value === "object" && value !== null && value.type === "image";
353
+ }
354
+ function isThinkingContent(value) {
355
+ return typeof value === "object" && value !== null && value.type === "thinking";
356
+ }
357
+ function isToolCall(value) {
358
+ return typeof value === "object" && value !== null && value.type === "toolCall";
359
+ }
360
+ function previewText(value, maxLength = 88) {
361
+ const normalized = value.replace(/\s+/g, " ").trim();
362
+ if (normalized.length <= maxLength) return normalized;
363
+ return `${normalized.slice(0, maxLength - 1)}...`;
364
+ }
365
+ function safeStringify(value) {
366
+ if (value === void 0) return "";
367
+ if (typeof value === "string") return value;
368
+ try {
369
+ const serialized = JSON.stringify(value, null, 2);
370
+ return typeof serialized === "string" ? serialized : "";
371
+ } catch {
372
+ return String(value);
373
+ }
374
+ }
375
+ function parseJsonString(value) {
376
+ const trimmed = value.trim();
377
+ if (!trimmed.startsWith("{") && !trimmed.startsWith("[")) {
378
+ return void 0;
379
+ }
380
+ try {
381
+ return JSON.parse(trimmed);
382
+ } catch {
383
+ return void 0;
384
+ }
385
+ }
386
+ function extractStructuredText(value, showImages, seen = /* @__PURE__ */ new WeakSet()) {
387
+ if (value == null) {
388
+ return [];
389
+ }
390
+ if (typeof value === "string") {
391
+ const parsed = parseJsonString(value);
392
+ if (parsed !== void 0) {
393
+ const extracted = extractStructuredText(parsed, showImages, seen);
394
+ if (extracted.length > 0) {
395
+ return extracted;
396
+ }
397
+ }
398
+ return value.trim() ? [value] : [];
399
+ }
400
+ if (Array.isArray(value)) {
401
+ return value.flatMap((item) => extractStructuredText(item, showImages, seen));
402
+ }
403
+ if (typeof value !== "object") {
404
+ return [];
405
+ }
406
+ const record = value;
407
+ if (seen.has(record)) {
408
+ return [];
409
+ }
410
+ seen.add(record);
411
+ if (isTextContent(record)) {
412
+ return extractStructuredText(record.text, showImages, seen);
413
+ }
414
+ if (isImageContent(record)) {
415
+ return showImages ? [`[image: ${record.mimeType}]`] : [];
416
+ }
417
+ if ("content" in record) {
418
+ const extracted = extractStructuredText(record.content, showImages, seen);
419
+ if (extracted.length > 0) {
420
+ return extracted;
421
+ }
422
+ }
423
+ if ("details" in record) {
424
+ const extracted = extractStructuredText(record.details, showImages, seen);
425
+ if (extracted.length > 0) {
426
+ return extracted;
427
+ }
428
+ }
429
+ for (const key of ["text", "output", "stdout", "stderr", "message", "summary"]) {
430
+ if (!(key in record)) {
431
+ continue;
432
+ }
433
+ const extracted = extractStructuredText(record[key], showImages, seen);
434
+ if (extracted.length > 0) {
435
+ return extracted;
436
+ }
437
+ }
438
+ return [];
439
+ }
440
+ function extractToolText(value, showImages) {
441
+ if (value == null) {
442
+ return "";
443
+ }
444
+ const extracted = extractStructuredText(value, showImages).map((part) => part.trimEnd()).filter((part) => part.length > 0);
445
+ if (extracted.length > 0) {
446
+ return extracted.join("\n").trim();
447
+ }
448
+ const fallback = safeStringify(value).trim();
449
+ return fallback === "{}" ? "" : fallback;
450
+ }
451
+ function previewMultiline(value, options = {}) {
452
+ const { maxChars = 800, maxLines = 6 } = options;
453
+ const normalized = value.replace(/\r\n/g, "\n").trim();
454
+ if (!normalized) {
455
+ return "";
456
+ }
457
+ const lines = normalized.split("\n");
458
+ const clippedLines = lines.slice(0, maxLines);
459
+ let preview = clippedLines.join("\n");
460
+ let truncated = lines.length > maxLines;
461
+ if (preview.length > maxChars) {
462
+ preview = `${preview.slice(0, Math.max(0, maxChars - 1)).trimEnd()}\u2026`;
463
+ truncated = true;
464
+ }
465
+ if (truncated) {
466
+ return `${preview}
467
+ ...`;
468
+ }
469
+ return preview;
470
+ }
471
+ function formatUserContent(content, showImages) {
472
+ if (typeof content === "string") {
473
+ return content;
474
+ }
475
+ const lines = [];
476
+ for (const part of content) {
477
+ if (isTextContent(part)) lines.push(part.text);
478
+ if (showImages && isImageContent(part)) lines.push(`[image: ${part.mimeType}]`);
479
+ }
480
+ return lines.join("\n").trim();
481
+ }
482
+ function splitAssistantMessage(message, showThinking) {
483
+ const textParts = [];
484
+ const thinkingParts = [];
485
+ const toolCalls = [];
486
+ for (const part of message.content) {
487
+ if (isTextContent(part)) {
488
+ textParts.push(part.text);
489
+ continue;
490
+ }
491
+ if (showThinking && isThinkingContent(part)) {
492
+ thinkingParts.push(part.thinking);
493
+ continue;
494
+ }
495
+ if (isToolCall(part)) {
496
+ toolCalls.push(part);
497
+ }
498
+ }
499
+ return {
500
+ text: textParts.join(""),
501
+ thinking: thinkingParts,
502
+ toolCalls
503
+ };
504
+ }
505
+ function formatToolCall(toolCall) {
506
+ const args = Object.keys(toolCall.arguments ?? {}).length > 0 ? safeStringify(toolCall.arguments) : "{}";
507
+ return `${toolCall.name}
508
+ ${previewMultiline(args, { maxLines: 8, maxChars: 1600 })}`;
509
+ }
510
+ function formatToolResult(message, showImages) {
511
+ const contentText = extractToolText(message.content, showImages);
512
+ if (contentText) {
513
+ return contentText;
514
+ }
515
+ if (message.details !== void 0) {
516
+ return extractToolText(message.details, showImages);
517
+ }
518
+ return "";
519
+ }
520
+ function formatCustomContent(content, showImages) {
521
+ if (typeof content === "string") return content;
522
+ return content.map((part) => {
523
+ if (isTextContent(part)) return part.text;
524
+ if (showImages && isImageContent(part)) return `[image: ${part.mimeType}]`;
525
+ return "";
526
+ }).filter(Boolean).join("\n");
527
+ }
528
+ function formatMessageTimestamp(timestamp) {
529
+ return new Date(timestamp).toLocaleTimeString([], {
530
+ hour: "2-digit",
531
+ minute: "2-digit"
532
+ });
533
+ }
534
+ function extractMessagePreview(message) {
535
+ switch (message.role) {
536
+ case "user":
537
+ return previewText(formatUserContent(message.content, true));
538
+ case "assistant":
539
+ return previewText(splitAssistantMessage(message, false).text);
540
+ case "toolResult":
541
+ return previewText(formatToolResult(message, true));
542
+ case "bashExecution":
543
+ return previewText(`${message.command} ${message.output}`.trim());
544
+ case "branchSummary":
545
+ case "compactionSummary":
546
+ return previewText(message.summary);
547
+ case "custom":
548
+ return previewText(formatCustomContent(message.content, true));
549
+ default:
550
+ return previewText(safeStringify(message));
551
+ }
552
+ }
553
+ function parseSkillInvocation(content) {
554
+ const parsed = parseSkillBlock(content);
555
+ if (!parsed) return null;
556
+ return {
557
+ name: parsed.name,
558
+ location: parsed.location,
559
+ userMessage: parsed.userMessage
560
+ };
561
+ }
562
+
563
+ // src/react-ink/utils/tool-display.ts
564
+ import { homedir } from "node:os";
565
+ function asRecord(value) {
566
+ return typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
567
+ }
568
+ function asString(value) {
569
+ return typeof value === "string" ? value : void 0;
570
+ }
571
+ function asNumber(value) {
572
+ return typeof value === "number" && Number.isFinite(value) ? value : void 0;
573
+ }
574
+ function hasOutput(value) {
575
+ return value !== void 0;
576
+ }
577
+ function shortenPath2(path2) {
578
+ const home = homedir();
579
+ return path2.startsWith(home) ? `~${path2.slice(home.length)}` : path2;
580
+ }
581
+ function titleCase(value) {
582
+ return value.split(/[\s_-]+/).filter(Boolean).map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1)).join(" ");
583
+ }
584
+ function friendlyToolName(toolName) {
585
+ switch (toolName) {
586
+ case "ls":
587
+ return "LS";
588
+ case "read":
589
+ return "Read";
590
+ case "write":
591
+ return "Write";
592
+ case "edit":
593
+ return "Edit";
594
+ case "find":
595
+ return "Find";
596
+ case "grep":
597
+ return "Grep";
598
+ case "bash":
599
+ return "Bash";
600
+ case "task":
601
+ return "Task";
602
+ case "todoread":
603
+ return "Todo Read";
604
+ case "todowrite":
605
+ return "Todo Write";
606
+ default:
607
+ return titleCase(toolName.replace(/^composio__/, "composio "));
608
+ }
609
+ }
610
+ function summarizeCommand(command) {
611
+ return command ? previewText(command.replace(/\s+/g, " "), 88) : void 0;
612
+ }
613
+ function toolText(value, showImages = false) {
614
+ return extractToolText(value, showImages).trim();
615
+ }
616
+ function containsImage(value) {
617
+ if (Array.isArray(value)) {
618
+ return value.some((item) => containsImage(item));
619
+ }
620
+ const record = asRecord(value);
621
+ if (!record) {
622
+ return false;
623
+ }
624
+ if (record.type === "image") {
625
+ return true;
626
+ }
627
+ return Object.values(record).some((item) => containsImage(item));
628
+ }
629
+ function countMeaningfulLines(value) {
630
+ if (!value?.trim()) {
631
+ return 0;
632
+ }
633
+ return value.split(/\r?\n/).filter((line) => line.trim().length > 0).length;
634
+ }
635
+ function firstMeaningfulLine(value) {
636
+ if (!value?.trim()) {
637
+ return void 0;
638
+ }
639
+ return value.split(/\r?\n/).map((line) => line.trim()).find(Boolean);
640
+ }
641
+ function clipBody(value, maxLines = 8, maxChars = 1400) {
642
+ if (!value?.trim()) {
643
+ return void 0;
644
+ }
645
+ return previewMultiline(value, { maxLines, maxChars });
646
+ }
647
+ function extractDetails(value) {
648
+ return asRecord(asRecord(value)?.details);
649
+ }
650
+ function normalizeTodoStatus(value) {
651
+ switch (value) {
652
+ case "completed":
653
+ case "in_progress":
654
+ case "cancelled":
655
+ case "pending":
656
+ return value;
657
+ default:
658
+ return "pending";
659
+ }
660
+ }
661
+ function normalizeTodoPriority(value) {
662
+ switch (value) {
663
+ case "high":
664
+ case "medium":
665
+ case "low":
666
+ return value;
667
+ default:
668
+ return "medium";
669
+ }
670
+ }
671
+ function extractTodos(args, output) {
672
+ const detailTodos = extractDetails(output)?.todos;
673
+ const argTodos = asRecord(args)?.todos;
674
+ const source = Array.isArray(detailTodos) ? detailTodos : Array.isArray(argTodos) ? argTodos : [];
675
+ return source.map((todo) => {
676
+ const record = asRecord(todo);
677
+ const content = asString(record?.content)?.trim();
678
+ if (!content) return void 0;
679
+ return {
680
+ content,
681
+ priority: normalizeTodoPriority(record?.priority),
682
+ status: normalizeTodoStatus(record?.status)
683
+ };
684
+ }).filter((todo) => Boolean(todo));
685
+ }
686
+ function formatTodos(todos) {
687
+ if (todos.length === 0) return void 0;
688
+ const lines = todos.slice(0, 6).map((todo) => {
689
+ const statusLabel = todo.status === "completed" ? "[done]" : todo.status === "in_progress" ? "[doing]" : todo.status === "cancelled" ? "[skip]" : "[todo]";
690
+ return `${statusLabel} ${todo.priority} ${todo.content}`;
691
+ });
692
+ if (todos.length > lines.length) {
693
+ lines.push(`... ${todos.length - lines.length} more item(s)`);
694
+ }
695
+ return lines.join("\n");
696
+ }
697
+ function fallbackSummary(args, fallbackArgsText) {
698
+ if (fallbackArgsText?.trim()) {
699
+ return previewText(fallbackArgsText, 88);
700
+ }
701
+ const record = asRecord(args);
702
+ if (!record) return void 0;
703
+ return previewText(safeStringify(record), 88);
704
+ }
705
+ function fallbackBody(output, fallbackOutputText, showImages = false) {
706
+ const extracted = toolText(output, showImages);
707
+ if (extracted) {
708
+ return clipBody(extracted);
709
+ }
710
+ return clipBody(fallbackOutputText);
711
+ }
712
+ function describeToolSource(source) {
713
+ const { args, fallbackArgsText, fallbackOutputText, output, showImages = false, toolName } = source;
714
+ const argsRecord = asRecord(args);
715
+ const details = extractDetails(output);
716
+ const outputText = toolText(output, showImages);
717
+ const hasResult = hasOutput(output);
718
+ const title = friendlyToolName(toolName);
719
+ switch (toolName) {
720
+ case "read": {
721
+ const rawPath = asString(argsRecord?.file_path) ?? asString(argsRecord?.path) ?? "";
722
+ const offset = asNumber(argsRecord?.offset);
723
+ const limit = asNumber(argsRecord?.limit);
724
+ let summary = rawPath ? shortenPath2(rawPath) : void 0;
725
+ if (summary && (offset !== void 0 || limit !== void 0)) {
726
+ const start = offset ?? 1;
727
+ const end = limit !== void 0 ? start + limit - 1 : void 0;
728
+ summary += `:${start}${end ? `-${end}` : ""}`;
729
+ }
730
+ const responseSummary = containsImage(output) ? firstMeaningfulLine(outputText) ?? "Read image" : /unchanged/i.test(outputText) ? "Unchanged since last read" : countMeaningfulLines(outputText) > 0 ? `Read ${countMeaningfulLines(outputText)} ${countMeaningfulLines(outputText) === 1 ? "line" : "lines"}` : "Read file";
731
+ return {
732
+ title,
733
+ summary: hasResult ? responseSummary : summary,
734
+ body: hasResult ? clipBody(outputText, 10, 1800) : void 0,
735
+ emptyText: "Reading file..."
736
+ };
737
+ }
738
+ case "write": {
739
+ const rawPath = asString(argsRecord?.file_path) ?? asString(argsRecord?.path) ?? "";
740
+ const content = asString(argsRecord?.content);
741
+ const responseSummary = firstMeaningfulLine(outputText) ?? "Wrote file";
742
+ return {
743
+ title,
744
+ summary: hasResult ? responseSummary : rawPath ? shortenPath2(rawPath) : void 0,
745
+ body: hasResult ? clipBody(outputText, 8, 1500) : clipBody(content, 8, 1500),
746
+ emptyText: "Preparing file write..."
747
+ };
748
+ }
749
+ case "edit": {
750
+ const rawPath = asString(argsRecord?.file_path) ?? asString(argsRecord?.path) ?? "";
751
+ const oldText = asString(argsRecord?.oldText);
752
+ const newText = asString(argsRecord?.newText);
753
+ const replacementPreview = oldText || newText ? clipBody(
754
+ [
755
+ oldText ? `- ${previewText(oldText, 90)}` : void 0,
756
+ newText ? `+ ${previewText(newText, 90)}` : void 0
757
+ ].filter(Boolean).join("\n"),
758
+ 4,
759
+ 400
760
+ ) : void 0;
761
+ const responseSummary = firstMeaningfulLine(outputText) ?? "Applied edit";
762
+ return {
763
+ title,
764
+ summary: hasResult ? responseSummary : rawPath ? shortenPath2(rawPath) : void 0,
765
+ body: hasResult ? clipBody(outputText, 8, 1500) : replacementPreview,
766
+ emptyText: "Applying edit..."
767
+ };
768
+ }
769
+ case "ls": {
770
+ const rawPath = asString(argsRecord?.path) ?? ".";
771
+ const entryCount = countMeaningfulLines(outputText);
772
+ return {
773
+ title,
774
+ summary: hasResult ? `Listed ${entryCount} ${entryCount === 1 ? "entry" : "entries"}` : shortenPath2(rawPath),
775
+ body: hasResult ? clipBody(outputText, 10, 1400) : void 0,
776
+ emptyText: "Listing files..."
777
+ };
778
+ }
779
+ case "find": {
780
+ const pattern = asString(argsRecord?.pattern);
781
+ const rawPath = asString(argsRecord?.path) ?? ".";
782
+ const matchCount = countMeaningfulLines(outputText);
783
+ return {
784
+ title,
785
+ summary: hasResult ? `Found ${matchCount} ${matchCount === 1 ? "path" : "paths"}` : pattern ? `${pattern} in ${shortenPath2(rawPath)}` : shortenPath2(rawPath),
786
+ body: hasResult ? clipBody(outputText, 10, 1400) : void 0,
787
+ emptyText: "Searching files..."
788
+ };
789
+ }
790
+ case "grep": {
791
+ const pattern = asString(argsRecord?.pattern);
792
+ const rawPath = asString(argsRecord?.path) ?? ".";
793
+ const responseSummary = /no matches found/i.test(outputText) ? "Found 0 matches" : firstMeaningfulLine(outputText) ? "Search results" : "Search complete";
794
+ return {
795
+ title,
796
+ summary: hasResult ? responseSummary : pattern ? `/${pattern}/ in ${shortenPath2(rawPath)}` : shortenPath2(rawPath),
797
+ body: hasResult ? clipBody(outputText, 10, 1400) : void 0,
798
+ emptyText: "Searching text..."
799
+ };
800
+ }
801
+ case "bash": {
802
+ const command = summarizeCommand(asString(argsRecord?.command));
803
+ const firstLine = firstMeaningfulLine(outputText);
804
+ const responseSummary = firstLine ? previewText(firstLine, 88) : "Command finished";
805
+ return {
806
+ title,
807
+ summary: hasResult ? responseSummary : command,
808
+ body: clipBody(outputText, 8, 1800),
809
+ emptyText: "Running shell command..."
810
+ };
811
+ }
812
+ case "task": {
813
+ const subagentType = asString(details?.subagentType) ?? asString(argsRecord?.subagent_type) ?? "subagent";
814
+ const description = asString(details?.description) ?? asString(argsRecord?.description);
815
+ const responseSummary = firstMeaningfulLine(outputText || asString(details?.result)) ?? "Task finished";
816
+ return {
817
+ title,
818
+ summary: hasResult ? responseSummary : [subagentType, description].filter(Boolean).join(" - "),
819
+ body: hasResult ? clipBody(outputText || asString(details?.result), 8, 1400) : void 0,
820
+ emptyText: "Delegating to subagent..."
821
+ };
822
+ }
823
+ case "todoread":
824
+ case "todowrite": {
825
+ const todos = extractTodos(args, output);
826
+ const incompleteCount = asNumber(details?.incompleteCount) ?? todos.filter((todo) => todo.status !== "completed").length;
827
+ const summary = todos.length > 0 ? `${todos.length} item(s) | ${incompleteCount} open` : fallbackSummary(args, fallbackArgsText);
828
+ return {
829
+ title,
830
+ summary: summary ?? (toolName === "todoread" ? "Read todo list" : "Updated todo list"),
831
+ body: hasResult ? formatTodos(todos) ?? fallbackBody(output, fallbackOutputText, showImages) : void 0,
832
+ emptyText: toolName === "todoread" ? "Reading todo list..." : "Updating todo list..."
833
+ };
834
+ }
835
+ default:
836
+ return {
837
+ title,
838
+ summary: hasResult ? firstMeaningfulLine(outputText) ?? "Completed" : fallbackSummary(args, fallbackArgsText),
839
+ body: fallbackBody(output, fallbackOutputText, showImages),
840
+ emptyText: "Working..."
841
+ };
842
+ }
843
+ }
844
+ function describeToolExecution(tool) {
845
+ const callDescriptor = describeToolSource({
846
+ toolName: tool.toolName,
847
+ args: tool.args,
848
+ fallbackArgsText: tool.argsText
849
+ });
850
+ return {
851
+ ...callDescriptor,
852
+ body: clipBody(tool.outputText, 8, 1800),
853
+ emptyText: tool.status === "running" ? callDescriptor.emptyText : tool.status === "error" ? "Tool failed." : "Tool finished."
854
+ };
855
+ }
856
+ function describeToolCall(toolCall) {
857
+ return describeToolSource({
858
+ toolName: toolCall.name,
859
+ args: toolCall.arguments
860
+ });
861
+ }
862
+ function describeToolResult(message, showImages, args) {
863
+ return describeToolSource({
864
+ args,
865
+ toolName: message.toolName,
866
+ output: {
867
+ content: message.content,
868
+ details: message.details
869
+ },
870
+ showImages
871
+ });
872
+ }
873
+
874
+ // src/react-ink/components/ToolEventBlock.tsx
875
+ import stripAnsi3 from "strip-ansi";
876
+ function statusMarker(status) {
877
+ switch (status) {
878
+ case "error":
879
+ return "!";
880
+ case "success":
881
+ return "=";
882
+ default:
883
+ return ">";
884
+ }
885
+ }
886
+ function plainToolText(text) {
887
+ return stripAnsi3(text);
888
+ }
889
+ function splitVisibleLines(text) {
890
+ return (text ?? "").split(/\r?\n/).map((line) => line.trimEnd()).filter((line, index, lines) => {
891
+ if (line.length > 0) {
892
+ return true;
893
+ }
894
+ return index !== 0 && index !== lines.length - 1;
895
+ });
896
+ }
897
+ function clampContentLines(lines, maxContentLines) {
898
+ if (maxContentLines <= 0) {
899
+ return {
900
+ visibleLines: [],
901
+ hiddenLineCount: lines.length
902
+ };
903
+ }
904
+ if (lines.length <= maxContentLines) {
905
+ return {
906
+ visibleLines: lines,
907
+ hiddenLineCount: 0
908
+ };
909
+ }
910
+ const visibleLimit = Math.max(0, maxContentLines - 1);
911
+ return {
912
+ visibleLines: lines.slice(0, visibleLimit),
913
+ hiddenLineCount: lines.length - visibleLimit
914
+ };
915
+ }
916
+ function ToolEventBlock({
917
+ detail,
918
+ emptyText,
919
+ indent = 0,
920
+ marginBottom = 1,
921
+ maxContentLines = 10,
922
+ showSummaryInline = false,
923
+ showTitle = true,
924
+ status,
925
+ summary,
926
+ theme: _theme,
927
+ title
928
+ }) {
929
+ const normalizedSummary = summary?.trim();
930
+ const normalizedDetail = detail?.trim();
931
+ const responseText = showSummaryInline ? void 0 : normalizedSummary ?? emptyText?.trim();
932
+ const detailText = showSummaryInline ? normalizedDetail ?? emptyText?.trim() : normalizedDetail;
933
+ const responseLines = splitVisibleLines(responseText);
934
+ const detailLines = splitVisibleLines(detailText).filter((line) => !responseLines.includes(line));
935
+ const combinedLines = [
936
+ ...responseLines.map((text) => ({ kind: "response", text })),
937
+ ...detailLines.map((text) => ({ kind: "detail", text }))
938
+ ];
939
+ const { visibleLines, hiddenLineCount } = clampContentLines(combinedLines, maxContentLines);
940
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom, marginLeft: indent, children: [
941
+ showTitle ? /* @__PURE__ */ jsxs(Box, { children: [
942
+ /* @__PURE__ */ jsx(Text, { color: "white", children: plainToolText(`${statusMarker(status)} `) }),
943
+ /* @__PURE__ */ jsx(Text, { color: "white", children: plainToolText(title) }),
944
+ showSummaryInline && normalizedSummary ? /* @__PURE__ */ jsx(Text, { color: "white", children: plainToolText(` (${normalizedSummary})`) }) : null
945
+ ] }) : null,
946
+ visibleLines.map((line, index) => /* @__PURE__ */ jsx(
947
+ Box,
948
+ {
949
+ marginLeft: line.kind === "response" ? showTitle ? 2 : 0 : showTitle ? 4 : 2,
950
+ children: /* @__PURE__ */ jsx(Text, { color: "white", children: plainToolText(line.text) })
951
+ },
952
+ `${line.kind}:${index}:${line.text}`
953
+ )),
954
+ hiddenLineCount > 0 ? /* @__PURE__ */ jsx(Box, { marginLeft: showTitle ? 4 : 2, children: /* @__PURE__ */ jsx(Text, { color: "white", children: plainToolText(`... ${hiddenLineCount} more line(s)`) }) }) : null
955
+ ] });
956
+ }
957
+
958
+ // src/react-ink/components/messages/ToolCallMessage.tsx
959
+ function ToolCallMessage({ theme, toolCall }) {
960
+ const descriptor = describeToolCall(toolCall);
961
+ return /* @__PURE__ */ jsx(
962
+ ToolEventBlock,
963
+ {
964
+ detail: void 0,
965
+ emptyText: void 0,
966
+ indent: 2,
967
+ marginBottom: 0,
968
+ showSummaryInline: true,
969
+ status: "running",
970
+ summary: descriptor.summary,
971
+ theme,
972
+ title: descriptor.title
973
+ }
974
+ );
975
+ }
976
+
977
+ // src/react-ink/components/messages/ToolResultBlock.tsx
978
+ function ToolResultBlock({ expanded = false, message, nested = false, showImages, theme, toolCall }) {
979
+ const descriptor = describeToolResult(message, showImages, toolCall?.arguments);
980
+ return /* @__PURE__ */ jsx(
981
+ ToolEventBlock,
982
+ {
983
+ detail: descriptor.body,
984
+ emptyText: descriptor.emptyText,
985
+ indent: nested ? 4 : 2,
986
+ marginBottom: 0,
987
+ maxContentLines: expanded ? Number.MAX_SAFE_INTEGER : 10,
988
+ showSummaryInline: false,
989
+ showTitle: !nested,
990
+ status: message.isError ? "error" : "success",
991
+ summary: descriptor.summary,
992
+ theme,
993
+ title: descriptor.title
994
+ }
995
+ );
996
+ }
997
+
998
+ // src/react-ink/components/messages/AssistantMessage.tsx
999
+ function AssistantMessageView({
1000
+ expandToolOutputs = false,
1001
+ message,
1002
+ showImages,
1003
+ showThinking,
1004
+ theme,
1005
+ toolResults = []
1006
+ }) {
1007
+ const parts = splitAssistantMessage(message, showThinking);
1008
+ const toolResultsByCallId = new Map(toolResults.map((toolResult) => [toolResult.toolCallId, toolResult]));
1009
+ const matchedToolResultIds = /* @__PURE__ */ new Set();
1010
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
1011
+ /* @__PURE__ */ jsx(Text, { children: theme.color("accent", `Assistant ${message.provider}/${message.model} ${formatMessageTimestamp(message.timestamp)}`) }),
1012
+ parts.text ? /* @__PURE__ */ jsx(Text, { children: parts.text }) : null,
1013
+ parts.thinking.map((thinking, index) => /* @__PURE__ */ jsx(Text, { children: theme.muted(`[thinking] ${thinking}`) }, index)),
1014
+ parts.toolCalls.map((toolCall) => {
1015
+ const toolResult = toolResultsByCallId.get(toolCall.id);
1016
+ if (toolResult) {
1017
+ matchedToolResultIds.add(toolResult.toolCallId);
1018
+ }
1019
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
1020
+ /* @__PURE__ */ jsx(ToolCallMessage, { toolCall, theme }),
1021
+ toolResult ? /* @__PURE__ */ jsx(
1022
+ ToolResultBlock,
1023
+ {
1024
+ expanded: expandToolOutputs,
1025
+ message: toolResult,
1026
+ nested: true,
1027
+ showImages,
1028
+ theme,
1029
+ toolCall
1030
+ }
1031
+ ) : null
1032
+ ] }, toolCall.id);
1033
+ }),
1034
+ toolResults.filter((toolResult) => !matchedToolResultIds.has(toolResult.toolCallId)).map((toolResult) => /* @__PURE__ */ jsx(
1035
+ ToolResultBlock,
1036
+ {
1037
+ expanded: expandToolOutputs,
1038
+ message: toolResult,
1039
+ nested: true,
1040
+ showImages,
1041
+ theme
1042
+ },
1043
+ toolResult.toolCallId
1044
+ )),
1045
+ message.stopReason === "error" && message.errorMessage ? /* @__PURE__ */ jsx(Text, { children: theme.color("error", message.errorMessage) }) : null
1046
+ ] });
1047
+ }
1048
+
1049
+ // src/react-ink/components/messages/BashMessage.tsx
1050
+ function BashMessageView({ message, theme }) {
1051
+ const status = message.cancelled ? "cancelled" : message.exitCode === void 0 ? "running" : `exit ${message.exitCode}`;
1052
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
1053
+ /* @__PURE__ */ jsx(Text, { children: theme.color("bashBorder", `Bash ${status} ${message.command}`) }),
1054
+ message.output ? /* @__PURE__ */ jsx(Text, { children: message.output }) : /* @__PURE__ */ jsx(Text, { children: theme.muted("(no output)") })
1055
+ ] });
1056
+ }
1057
+
1058
+ // src/react-ink/components/messages/BranchSummaryMessage.tsx
1059
+ function BranchSummaryMessageView({ message, theme }) {
1060
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
1061
+ /* @__PURE__ */ jsx(Text, { children: theme.color("warning", "Branch Summary") }),
1062
+ /* @__PURE__ */ jsx(Text, { children: message.summary })
1063
+ ] });
1064
+ }
1065
+
1066
+ // src/react-ink/components/messages/CompactionMessage.tsx
1067
+ function CompactionMessageView({ message, theme }) {
1068
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
1069
+ /* @__PURE__ */ jsx(Text, { children: theme.color("success", `Compaction Summary ${message.tokensBefore} tokens before`) }),
1070
+ /* @__PURE__ */ jsx(Text, { children: message.summary })
1071
+ ] });
1072
+ }
1073
+
1074
+ // src/react-ink/components/messages/CustomMessage.tsx
1075
+ function CustomMessageView({ message, showImages, theme }) {
1076
+ if (!message.display) return null;
1077
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
1078
+ /* @__PURE__ */ jsx(Text, { children: theme.background("customMessage", ` ${message.customType} `, "customMessageText") }),
1079
+ /* @__PURE__ */ jsx(Text, { children: formatCustomContent(message.content, showImages) })
1080
+ ] });
1081
+ }
1082
+
1083
+ // src/react-ink/components/messages/SkillInvocationMessage.tsx
1084
+ function SkillInvocationMessage({ content, theme }) {
1085
+ const parsed = parseSkillInvocation(content);
1086
+ if (!parsed) return null;
1087
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
1088
+ /* @__PURE__ */ jsx(Text, { children: theme.color("accent", `Skill ${parsed.name}`) }),
1089
+ /* @__PURE__ */ jsx(Text, { children: parsed.location }),
1090
+ parsed.userMessage ? /* @__PURE__ */ jsx(Text, { children: parsed.userMessage }) : null
1091
+ ] });
1092
+ }
1093
+
1094
+ // src/react-ink/components/messages/UserMessage.tsx
1095
+ function UserMessageView({ message, showImages, theme }) {
1096
+ const content = formatUserContent(message.content, showImages);
1097
+ const lines = content.length > 0 ? content.split("\n") : [""];
1098
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
1099
+ /* @__PURE__ */ jsx(Text, { children: theme.background("userMessage", `You ${formatMessageTimestamp(message.timestamp)}`, "userMessageText") }),
1100
+ lines.map((line, index) => /* @__PURE__ */ jsx(Text, { children: theme.background("userMessage", line.length > 0 ? line : " ", "userMessageText") }, `user-message:${message.timestamp}:${index}`))
1101
+ ] });
1102
+ }
1103
+
1104
+ // src/react-ink/components/MessageRow.tsx
1105
+ function MessageRow({
1106
+ message,
1107
+ expandToolOutputs = false,
1108
+ showImages,
1109
+ showThinking,
1110
+ theme,
1111
+ toolResults = []
1112
+ }) {
1113
+ switch (message.role) {
1114
+ case "user": {
1115
+ const content = typeof message.content === "string" ? message.content : formatUserContent(message.content, showImages);
1116
+ const skill = typeof content === "string" ? parseSkillInvocation(content) : null;
1117
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
1118
+ skill ? /* @__PURE__ */ jsx(SkillInvocationMessage, { content, theme }) : null,
1119
+ /* @__PURE__ */ jsx(UserMessageView, { message, showImages, theme })
1120
+ ] });
1121
+ }
1122
+ case "assistant":
1123
+ return /* @__PURE__ */ jsx(
1124
+ AssistantMessageView,
1125
+ {
1126
+ expandToolOutputs,
1127
+ message,
1128
+ showImages,
1129
+ showThinking,
1130
+ theme,
1131
+ toolResults
1132
+ }
1133
+ );
1134
+ case "toolResult":
1135
+ return /* @__PURE__ */ jsx(ToolResultBlock, { expanded: expandToolOutputs, message, showImages, theme });
1136
+ case "bashExecution":
1137
+ return /* @__PURE__ */ jsx(BashMessageView, { message, theme });
1138
+ case "branchSummary":
1139
+ return /* @__PURE__ */ jsx(BranchSummaryMessageView, { message, theme });
1140
+ case "compactionSummary":
1141
+ return /* @__PURE__ */ jsx(CompactionMessageView, { message, theme });
1142
+ case "custom":
1143
+ return /* @__PURE__ */ jsx(CustomMessageView, { message, showImages, theme });
1144
+ default:
1145
+ return /* @__PURE__ */ jsx(Text, { children: String(message.role ?? "message") });
1146
+ }
1147
+ }
1148
+
1149
+ // src/react-ink/components/MessageList.tsx
1150
+ function hasToolCalls(message) {
1151
+ return message.role === "assistant" && message.content.some((part) => part.type === "toolCall");
1152
+ }
1153
+ function groupMessages(messages) {
1154
+ const entries = [];
1155
+ for (let index = 0; index < messages.length; index++) {
1156
+ const message = messages[index];
1157
+ if (hasToolCalls(message)) {
1158
+ const toolResults = [];
1159
+ let nextIndex = index + 1;
1160
+ while (nextIndex < messages.length && messages[nextIndex]?.role === "toolResult") {
1161
+ toolResults.push(messages[nextIndex]);
1162
+ nextIndex += 1;
1163
+ }
1164
+ entries.push({ type: "message", message, toolResults });
1165
+ index = nextIndex - 1;
1166
+ continue;
1167
+ }
1168
+ if (message.role === "toolResult") {
1169
+ entries.push({ type: "message", message, toolResults: [message] });
1170
+ continue;
1171
+ }
1172
+ entries.push({ type: "message", message, toolResults: [] });
1173
+ }
1174
+ return entries;
1175
+ }
1176
+ function getEntryTimestamp(entry) {
1177
+ return entry.type === "message" ? entry.message.timestamp : entry.block.timestamp;
1178
+ }
1179
+ function MessageList({
1180
+ displayBlocks = [],
1181
+ expandToolOutputs = false,
1182
+ maxItems,
1183
+ messages,
1184
+ showImages,
1185
+ showThinking,
1186
+ theme
1187
+ }) {
1188
+ const visible = [
1189
+ ...groupMessages(messages),
1190
+ ...displayBlocks.map((block) => ({ type: "displayBlock", block }))
1191
+ ].sort((left, right) => getEntryTimestamp(left) - getEntryTimestamp(right)).slice(-maxItems);
1192
+ return /* @__PURE__ */ jsx(Box, { flexDirection: "column", children: visible.map((entry, index) => entry.type === "message" ? /* @__PURE__ */ jsx(
1193
+ MessageRow,
1194
+ {
1195
+ message: entry.message,
1196
+ expandToolOutputs,
1197
+ showImages,
1198
+ showThinking,
1199
+ theme,
1200
+ toolResults: entry.toolResults
1201
+ },
1202
+ `${entry.message.role}:${entry.message.timestamp}:${index}`
1203
+ ) : /* @__PURE__ */ jsx(
1204
+ DisplayBlockView,
1205
+ {
1206
+ block: entry.block,
1207
+ theme
1208
+ },
1209
+ `${entry.block.kind}:${entry.block.timestamp}:${entry.block.id}`
1210
+ )) });
1211
+ }
1212
+
1213
+ // src/react-ink/components/StatusLine.tsx
1214
+ function StatusLine({ snapshot, status, theme }) {
1215
+ let text = status?.text;
1216
+ let tone = status?.kind ?? "info";
1217
+ if (!text) {
1218
+ if (snapshot.isCompacting) {
1219
+ text = "Compacting conversation context...";
1220
+ tone = "busy";
1221
+ } else if (snapshot.isBashRunning) {
1222
+ text = "Running bash command...";
1223
+ tone = "busy";
1224
+ } else if (snapshot.pendingToolCallCount > 0 || snapshot.pendingMessageCount > 0) {
1225
+ text = "Agent working...";
1226
+ tone = "busy";
1227
+ } else if (snapshot.isStreaming) {
1228
+ text = "Agent working...";
1229
+ tone = "busy";
1230
+ } else if (snapshot.error) {
1231
+ text = snapshot.error;
1232
+ tone = "error";
1233
+ }
1234
+ }
1235
+ if (!text) return null;
1236
+ const styled = tone === "error" ? theme.color("error", text) : tone === "warning" ? theme.color("warning", text) : tone === "success" ? theme.color("success", text) : theme.muted(text);
1237
+ return /* @__PURE__ */ jsx(Text, { children: styled });
1238
+ }
1239
+
1240
+ // src/react-ink/components/TaskPanel.tsx
1241
+ function TaskPanel({ expandToolOutputs = false, pendingMessages = [], snapshot, theme, toolExecutions }) {
1242
+ const recent = Object.values(toolExecutions).sort((left, right) => {
1243
+ if (left.status === "running" && right.status !== "running") return -1;
1244
+ if (left.status !== "running" && right.status === "running") return 1;
1245
+ return right.updatedAt - left.updatedAt;
1246
+ }).slice(0, 6);
1247
+ if (recent.length === 0 && pendingMessages.length === 0 && snapshot.pendingMessageCount === 0) {
1248
+ return null;
1249
+ }
1250
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, marginTop: 1, children: [
1251
+ /* @__PURE__ */ jsx(Text, { children: theme.color("accent", `Tool Activity${recent.length > 0 ? ` ${recent.length}` : ""}`) }),
1252
+ recent.map((tool) => {
1253
+ const descriptor = describeToolExecution(tool);
1254
+ return /* @__PURE__ */ jsx(
1255
+ ToolEventBlock,
1256
+ {
1257
+ detail: descriptor.body,
1258
+ emptyText: descriptor.emptyText,
1259
+ indent: 1,
1260
+ marginBottom: 0,
1261
+ maxContentLines: expandToolOutputs ? Number.MAX_SAFE_INTEGER : 10,
1262
+ showSummaryInline: true,
1263
+ status: tool.status,
1264
+ summary: descriptor.summary,
1265
+ theme,
1266
+ title: descriptor.title
1267
+ },
1268
+ tool.toolCallId
1269
+ );
1270
+ }),
1271
+ pendingMessages.length > 0 ? /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginTop: recent.length > 0 ? 1 : 0, children: [
1272
+ /* @__PURE__ */ jsx(Text, { children: theme.color("accent", `Queued Messages ${pendingMessages.length}`) }),
1273
+ pendingMessages.slice(0, 6).map((message) => /* @__PURE__ */ jsxs(Text, { children: [
1274
+ theme.muted(` ${message.mode === "steer" ? "Steering" : "Follow-up"}: `),
1275
+ message.text.length > 90 ? `${message.text.slice(0, 87)}...` : message.text
1276
+ ] }, message.id)),
1277
+ /* @__PURE__ */ jsx(Text, { children: theme.muted(" Alt+Up restores queued messages to the prompt") })
1278
+ ] }) : snapshot.pendingMessageCount > 0 ? /* @__PURE__ */ jsx(Text, { children: theme.muted(`${snapshot.pendingMessageCount} queued message(s) waiting for the next turn`) }) : null
1279
+ ] });
1280
+ }
1281
+
1282
+ // src/react-ink/components/dialogs/DialogFrame.tsx
1283
+ function DialogFrame({ children, footer, subtitle, title }) {
1284
+ return /* @__PURE__ */ jsxs(Box, { borderStyle: "round", flexDirection: "column", marginTop: 1, paddingX: 1, paddingY: 0, children: [
1285
+ /* @__PURE__ */ jsx(Text, { children: title }),
1286
+ subtitle ? /* @__PURE__ */ jsx(Text, { children: subtitle }) : null,
1287
+ /* @__PURE__ */ jsx(Box, { flexDirection: "column", marginTop: 1, children }),
1288
+ footer ? /* @__PURE__ */ jsx(Box, { marginTop: 1, children: footer }) : null
1289
+ ] });
1290
+ }
1291
+
1292
+ // src/react-host/index.ts
1293
+ var React = await loadHostReact();
1294
+ var Fragment2 = React.Fragment;
1295
+ var createElement = React.createElement;
1296
+ var useEffect = React.useEffect;
1297
+ var useMemo = React.useMemo;
1298
+ var useState = React.useState;
1299
+
1300
+ // src/react-ink/utils/selection-dialog.ts
1301
+ function matchesSearchQuery(value, query) {
1302
+ if (!query.trim()) {
1303
+ return true;
1304
+ }
1305
+ const haystack = value.toLowerCase();
1306
+ return query.toLowerCase().split(/\s+/).filter(Boolean).every((term) => haystack.includes(term));
1307
+ }
1308
+ function wrapSelectionIndex(current, direction, length) {
1309
+ if (length <= 0) {
1310
+ return 0;
1311
+ }
1312
+ return (current + direction + length) % length;
1313
+ }
1314
+
1315
+ // src/react-ink/components/dialogs/SelectableDialog.tsx
1316
+ function SelectableDialog({
1317
+ title,
1318
+ subtitle,
1319
+ items,
1320
+ isActive = true,
1321
+ searchEnabled = true,
1322
+ emptyText,
1323
+ noSearchResultsText = "No options matched the current search.",
1324
+ onClose,
1325
+ onSelect,
1326
+ getSearchText,
1327
+ renderItem
1328
+ }) {
1329
+ const [query, setQuery] = useState("");
1330
+ const [selectedIndex, setSelectedIndex] = useState(0);
1331
+ const filteredItems = useMemo(() => {
1332
+ if (!searchEnabled) {
1333
+ return items;
1334
+ }
1335
+ return items.filter((item) => matchesSearchQuery(getSearchText ? getSearchText(item) : String(item), query));
1336
+ }, [getSearchText, items, query, searchEnabled]);
1337
+ useEffect(() => {
1338
+ setSelectedIndex(0);
1339
+ }, [query]);
1340
+ useEffect(() => {
1341
+ if (selectedIndex >= filteredItems.length) {
1342
+ setSelectedIndex(0);
1343
+ }
1344
+ }, [filteredItems.length, selectedIndex]);
1345
+ const maxVisible = useMemo(() => Math.max(8, (process.stdout.rows ?? 24) - 16), []);
1346
+ const windowStart = Math.max(
1347
+ 0,
1348
+ Math.min(selectedIndex - Math.floor(maxVisible / 2), Math.max(0, filteredItems.length - maxVisible))
1349
+ );
1350
+ const visibleItems = filteredItems.slice(windowStart, windowStart + maxVisible);
1351
+ const showSearch = searchEnabled && items.length > 0;
1352
+ useInput(
1353
+ (input, key) => {
1354
+ if (key.escape) {
1355
+ onClose();
1356
+ return;
1357
+ }
1358
+ if (key.upArrow) {
1359
+ setSelectedIndex((current) => wrapSelectionIndex(current, -1, filteredItems.length));
1360
+ return;
1361
+ }
1362
+ if (key.downArrow) {
1363
+ setSelectedIndex((current) => wrapSelectionIndex(current, 1, filteredItems.length));
1364
+ return;
1365
+ }
1366
+ if (searchEnabled && (key.backspace || key.delete)) {
1367
+ setQuery((current) => current.slice(0, -1));
1368
+ return;
1369
+ }
1370
+ if (searchEnabled && key.ctrl && input === "u") {
1371
+ setQuery("");
1372
+ return;
1373
+ }
1374
+ if (key.return) {
1375
+ const item = filteredItems[selectedIndex];
1376
+ if (item) {
1377
+ void onSelect(item);
1378
+ }
1379
+ return;
1380
+ }
1381
+ if (searchEnabled && !key.ctrl && !key.meta && input) {
1382
+ setQuery((current) => current + input);
1383
+ }
1384
+ },
1385
+ { isActive }
1386
+ );
1387
+ return /* @__PURE__ */ jsxs(
1388
+ DialogFrame,
1389
+ {
1390
+ title,
1391
+ subtitle,
1392
+ footer: /* @__PURE__ */ jsx(Text, { children: searchEnabled ? "Type to filter, Up/Down wraps, Enter selects, Ctrl+U clears, Esc closes" : "Up/Down wraps, Enter selects, Esc closes" }),
1393
+ children: [
1394
+ showSearch ? /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
1395
+ /* @__PURE__ */ jsxs(Text, { children: [
1396
+ "Search: ",
1397
+ query || " "
1398
+ ] }),
1399
+ /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
1400
+ filteredItems.length,
1401
+ " match",
1402
+ filteredItems.length === 1 ? "" : "es"
1403
+ ] })
1404
+ ] }) : null,
1405
+ items.length === 0 ? /* @__PURE__ */ jsx(Box, { marginTop: showSearch ? 1 : 0, children: /* @__PURE__ */ jsx(Text, { children: emptyText }) }) : filteredItems.length === 0 ? /* @__PURE__ */ jsx(Box, { marginTop: showSearch ? 1 : 0, children: /* @__PURE__ */ jsx(Text, { children: noSearchResultsText }) }) : /* @__PURE__ */ jsx(Box, { flexDirection: "column", marginTop: showSearch ? 1 : 0, children: visibleItems.map((item, index) => {
1406
+ const actualIndex = windowStart + index;
1407
+ return /* @__PURE__ */ jsx(Box, { children: renderItem(item, actualIndex === selectedIndex, actualIndex) }, actualIndex);
1408
+ }) })
1409
+ ]
1410
+ }
1411
+ );
1412
+ }
1413
+
1414
+ // src/react-ink/components/dialogs/LoginDialog.tsx
1415
+ function LoginDialog(props) {
1416
+ if (props.mode === "logout") {
1417
+ return /* @__PURE__ */ jsx(
1418
+ SelectableDialog,
1419
+ {
1420
+ title: "Saved Credentials",
1421
+ items: props.accounts,
1422
+ emptyText: "No saved credentials were found.",
1423
+ onClose: props.onClose,
1424
+ onSelect: props.onSelect,
1425
+ getSearchText: (account) => account.label,
1426
+ renderItem: (account, selected) => /* @__PURE__ */ jsxs(Text, { children: [
1427
+ selected ? "> " : " ",
1428
+ account.label
1429
+ ] })
1430
+ }
1431
+ );
1432
+ }
1433
+ return /* @__PURE__ */ jsx(
1434
+ SelectableDialog,
1435
+ {
1436
+ title: "Login Providers",
1437
+ items: props.providers,
1438
+ emptyText: "No authenticated providers are configured.",
1439
+ onClose: props.onClose,
1440
+ onSelect: props.onSelect,
1441
+ getSearchText: (provider) => `${provider.label} ${provider.authKind}`,
1442
+ renderItem: (provider, selected) => /* @__PURE__ */ jsxs(Text, { children: [
1443
+ selected ? "> " : " ",
1444
+ provider.label,
1445
+ " (",
1446
+ provider.authKind,
1447
+ ")"
1448
+ ] })
1449
+ }
1450
+ );
1451
+ }
1452
+
1453
+ // src/react-ink/components/dialogs/ModelDialog.tsx
1454
+ function matchesModel(model, search) {
1455
+ return matchesSearchQuery(`${model.provider} ${model.id} ${model.name ?? ""}`, search);
1456
+ }
1457
+ function ModelDialog({ models, onClose, onSelect, search }) {
1458
+ const [query, setQuery] = useState(search ?? "");
1459
+ const [selectedIndex, setSelectedIndex] = useState(0);
1460
+ useEffect(() => {
1461
+ setQuery(search ?? "");
1462
+ }, [search]);
1463
+ const filtered = useMemo(
1464
+ () => models.filter((model) => matchesModel(model, query)),
1465
+ [models, query]
1466
+ );
1467
+ useEffect(() => {
1468
+ setSelectedIndex(0);
1469
+ }, [query]);
1470
+ useEffect(() => {
1471
+ if (selectedIndex >= filtered.length) {
1472
+ setSelectedIndex(0);
1473
+ }
1474
+ }, [filtered.length, selectedIndex]);
1475
+ const maxVisible = Math.max(8, (process.stdout.rows ?? 24) - 16);
1476
+ const windowStart = Math.max(
1477
+ 0,
1478
+ Math.min(selectedIndex - Math.floor(maxVisible / 2), Math.max(0, filtered.length - maxVisible))
1479
+ );
1480
+ const visibleModels = filtered.slice(windowStart, windowStart + maxVisible);
1481
+ useInput((input, key) => {
1482
+ if (key.escape) {
1483
+ onClose();
1484
+ return;
1485
+ }
1486
+ if (key.upArrow) {
1487
+ setSelectedIndex((current) => wrapSelectionIndex(current, -1, filtered.length));
1488
+ return;
1489
+ }
1490
+ if (key.downArrow) {
1491
+ setSelectedIndex((current) => wrapSelectionIndex(current, 1, filtered.length));
1492
+ return;
1493
+ }
1494
+ if (key.backspace || key.delete) {
1495
+ setQuery((current) => current.slice(0, -1));
1496
+ return;
1497
+ }
1498
+ if (key.ctrl && input === "u") {
1499
+ setQuery("");
1500
+ return;
1501
+ }
1502
+ if (key.return) {
1503
+ const selected = filtered[selectedIndex];
1504
+ if (selected) {
1505
+ void onSelect(selected);
1506
+ }
1507
+ return;
1508
+ }
1509
+ if (!key.ctrl && !key.meta && input) {
1510
+ setQuery((current) => current + input);
1511
+ }
1512
+ });
1513
+ return /* @__PURE__ */ jsxs(
1514
+ DialogFrame,
1515
+ {
1516
+ title: "Models",
1517
+ subtitle: "Type to search models by provider, id, or name",
1518
+ footer: /* @__PURE__ */ jsx(Text, { children: "Type to filter, Up/Down to move, Enter to select, Ctrl+U clears, Esc closes" }),
1519
+ children: [
1520
+ /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
1521
+ /* @__PURE__ */ jsxs(Text, { children: [
1522
+ "Search: ",
1523
+ query || " "
1524
+ ] }),
1525
+ /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
1526
+ filtered.length,
1527
+ " match",
1528
+ filtered.length === 1 ? "" : "es"
1529
+ ] })
1530
+ ] }),
1531
+ /* @__PURE__ */ jsx(Box, { flexDirection: "column", marginTop: 1, children: filtered.length === 0 ? /* @__PURE__ */ jsx(Text, { children: "No models matched the current search." }) : visibleModels.map((model, index) => {
1532
+ const actualIndex = windowStart + index;
1533
+ return /* @__PURE__ */ jsxs(Text, { children: [
1534
+ actualIndex === selectedIndex ? "> " : " ",
1535
+ model.provider,
1536
+ "/",
1537
+ model.id,
1538
+ model.name ? ` (${model.name})` : ""
1539
+ ] }, `${model.provider}/${model.id}`);
1540
+ }) })
1541
+ ]
1542
+ }
1543
+ );
1544
+ }
1545
+
1546
+ // src/react-ink/components/dialogs/OAuthDialog.tsx
1547
+ function OAuthDialog({ onChange, onClose, onSubmit, state }) {
1548
+ useInput((input, key) => {
1549
+ if (key.escape) {
1550
+ onClose();
1551
+ return;
1552
+ }
1553
+ if (key.return) {
1554
+ void onSubmit();
1555
+ return;
1556
+ }
1557
+ if (key.backspace || key.delete) {
1558
+ onChange({ inputValue: state.inputValue.slice(0, -1) });
1559
+ return;
1560
+ }
1561
+ if (input && !key.ctrl && !key.meta) {
1562
+ onChange({ inputValue: state.inputValue + input });
1563
+ }
1564
+ });
1565
+ return /* @__PURE__ */ jsxs(
1566
+ DialogFrame,
1567
+ {
1568
+ title: `${state.mode === "oauth" ? "OAuth Login" : "API Key Login"}: ${state.providerName}`,
1569
+ footer: /* @__PURE__ */ jsx(Text, { children: "Type to edit, Enter to submit, Esc to cancel" }),
1570
+ children: [
1571
+ state.progress ? /* @__PURE__ */ jsx(Text, { children: state.progress }) : null,
1572
+ state.authInfo ? /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginTop: 1, children: [
1573
+ /* @__PURE__ */ jsx(Text, { children: state.authInfo.instructions ?? "Open this URL in your browser to continue:" }),
1574
+ /* @__PURE__ */ jsx(Text, { children: state.authInfo.url })
1575
+ ] }) : null,
1576
+ state.prompt ? /* @__PURE__ */ jsx(Box, { flexDirection: "column", marginTop: 1, children: /* @__PURE__ */ jsx(Text, { children: state.prompt.message }) }) : null,
1577
+ /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginTop: 1, children: [
1578
+ /* @__PURE__ */ jsx(Text, { children: state.inputLabel }),
1579
+ /* @__PURE__ */ jsx(Text, { children: state.inputValue || " " })
1580
+ ] })
1581
+ ]
1582
+ }
1583
+ );
1584
+ }
1585
+
1586
+ // src/react-ink/components/dialogs/ScopedModelsDialog.tsx
1587
+ function modelKey(model) {
1588
+ return `${model.provider}/${model.id}`;
1589
+ }
1590
+ function ScopedModelsDialog({ models, onClose, onSave, selectedIds }) {
1591
+ const [query, setQuery] = useState("");
1592
+ const [selectedIndex, setSelectedIndex] = useState(0);
1593
+ const [enabledIds, setEnabledIds] = useState(() => new Set(selectedIds));
1594
+ useEffect(() => {
1595
+ setSelectedIndex(0);
1596
+ setQuery("");
1597
+ setEnabledIds(new Set(selectedIds));
1598
+ }, [selectedIds]);
1599
+ const filteredModels = useMemo(
1600
+ () => models.filter((model) => matchesSearchQuery(`${model.provider} ${model.id} ${model.name ?? ""}`, query)),
1601
+ [models, query]
1602
+ );
1603
+ useEffect(() => {
1604
+ setSelectedIndex(0);
1605
+ }, [query]);
1606
+ useEffect(() => {
1607
+ if (selectedIndex >= filteredModels.length) {
1608
+ setSelectedIndex(0);
1609
+ }
1610
+ }, [filteredModels.length, selectedIndex]);
1611
+ const maxVisible = useMemo(() => Math.max(8, (process.stdout.rows ?? 24) - 18), []);
1612
+ const windowStart = Math.max(
1613
+ 0,
1614
+ Math.min(selectedIndex - Math.floor(maxVisible / 2), Math.max(0, filteredModels.length - maxVisible))
1615
+ );
1616
+ const visibleModels = filteredModels.slice(windowStart, windowStart + maxVisible);
1617
+ const toggleSelectedModel = () => {
1618
+ const model = filteredModels[selectedIndex];
1619
+ if (!model) {
1620
+ return;
1621
+ }
1622
+ const id = modelKey(model);
1623
+ setEnabledIds((current) => {
1624
+ const next = new Set(current);
1625
+ if (next.has(id)) {
1626
+ next.delete(id);
1627
+ } else {
1628
+ next.add(id);
1629
+ }
1630
+ return next;
1631
+ });
1632
+ };
1633
+ useInput((input, key) => {
1634
+ if (key.escape) {
1635
+ onClose();
1636
+ return;
1637
+ }
1638
+ if (key.upArrow) {
1639
+ setSelectedIndex((current) => wrapSelectionIndex(current, -1, filteredModels.length));
1640
+ return;
1641
+ }
1642
+ if (key.downArrow) {
1643
+ setSelectedIndex((current) => wrapSelectionIndex(current, 1, filteredModels.length));
1644
+ return;
1645
+ }
1646
+ if (key.backspace || key.delete) {
1647
+ setQuery((current) => current.slice(0, -1));
1648
+ return;
1649
+ }
1650
+ if (key.ctrl && input === "u") {
1651
+ setQuery("");
1652
+ return;
1653
+ }
1654
+ if (key.ctrl && input === "a") {
1655
+ setEnabledIds(new Set(models.map(modelKey)));
1656
+ return;
1657
+ }
1658
+ if (key.ctrl && input === "k") {
1659
+ setEnabledIds(/* @__PURE__ */ new Set());
1660
+ return;
1661
+ }
1662
+ if (input === " ") {
1663
+ toggleSelectedModel();
1664
+ return;
1665
+ }
1666
+ if (key.return) {
1667
+ void onSave([...enabledIds].sort());
1668
+ return;
1669
+ }
1670
+ if (!key.ctrl && !key.meta && input && input !== " ") {
1671
+ setQuery((current) => current + input);
1672
+ }
1673
+ });
1674
+ return /* @__PURE__ */ jsx(
1675
+ DialogFrame,
1676
+ {
1677
+ title: "Scoped Models",
1678
+ subtitle: "Choose which models Ctrl+P cycles through",
1679
+ footer: /* @__PURE__ */ jsxs(Text, { children: [
1680
+ "Type to filter, Up/Down wraps, Space toggles, Ctrl+A selects all, Ctrl+K clears,",
1681
+ " ",
1682
+ "Ctrl+U clears search, Enter saves, Esc closes"
1683
+ ] }),
1684
+ children: models.length === 0 ? /* @__PURE__ */ jsx(Text, { children: "No authenticated models are currently available." }) : /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
1685
+ /* @__PURE__ */ jsxs(Text, { children: [
1686
+ "Search: ",
1687
+ query || " "
1688
+ ] }),
1689
+ /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
1690
+ filteredModels.length,
1691
+ " match",
1692
+ filteredModels.length === 1 ? "" : "es"
1693
+ ] }),
1694
+ /* @__PURE__ */ jsxs(Text, { children: [
1695
+ "Selected: ",
1696
+ enabledIds.size === 0 ? "all available models" : `${enabledIds.size} model(s)`
1697
+ ] }),
1698
+ /* @__PURE__ */ jsx(Box, { marginTop: 1, flexDirection: "column", children: filteredModels.length === 0 ? /* @__PURE__ */ jsx(Text, { children: "No models matched the current search." }) : visibleModels.map((model, index) => {
1699
+ const actualIndex = windowStart + index;
1700
+ const id = modelKey(model);
1701
+ const checked = enabledIds.has(id);
1702
+ return /* @__PURE__ */ jsxs(Text, { children: [
1703
+ actualIndex === selectedIndex ? "> " : " ",
1704
+ "[",
1705
+ checked ? "x" : " ",
1706
+ "] ",
1707
+ id
1708
+ ] }, id);
1709
+ }) })
1710
+ ] })
1711
+ }
1712
+ );
1713
+ }
1714
+
1715
+ // src/react-ink/utils/session-browser.ts
1716
+ function wrapSelectionIndex2(current, direction, length) {
1717
+ if (length <= 0) {
1718
+ return 0;
1719
+ }
1720
+ return (current + direction + length) % length;
1721
+ }
1722
+ function normalizeQueryText(text) {
1723
+ return text.toLowerCase().replace(/\s+/g, " ").trim();
1724
+ }
1725
+ function fuzzyScore(needle, haystack) {
1726
+ const query = needle.toLowerCase().trim();
1727
+ const text = haystack.toLowerCase();
1728
+ if (!query) {
1729
+ return { matches: true, score: 0 };
1730
+ }
1731
+ let score = 0;
1732
+ let searchIndex = 0;
1733
+ let firstMatch = -1;
1734
+ for (const char of query) {
1735
+ const index = text.indexOf(char, searchIndex);
1736
+ if (index < 0) {
1737
+ return { matches: false, score: 0 };
1738
+ }
1739
+ if (firstMatch < 0) {
1740
+ firstMatch = index;
1741
+ }
1742
+ score += index - searchIndex;
1743
+ searchIndex = index + 1;
1744
+ }
1745
+ return { matches: true, score: score + Math.max(firstMatch, 0) * 0.1 };
1746
+ }
1747
+ function buildSearchText(session) {
1748
+ return [
1749
+ session.id,
1750
+ session.name ?? "",
1751
+ session.firstMessage ?? "",
1752
+ session.allMessagesText ?? "",
1753
+ session.cwd ?? "",
1754
+ session.path,
1755
+ new Date(session.lastModified).toLocaleString()
1756
+ ].join(" ").trim();
1757
+ }
1758
+ function tokenizeQuotedQuery(query) {
1759
+ const tokens = [];
1760
+ let buffer = "";
1761
+ let inQuote = false;
1762
+ const pushBuffer = (kind) => {
1763
+ const value = buffer.trim();
1764
+ buffer = "";
1765
+ if (value) {
1766
+ tokens.push({ kind, value });
1767
+ }
1768
+ };
1769
+ for (const char of query) {
1770
+ if (char === '"') {
1771
+ pushBuffer(inQuote ? "phrase" : "fuzzy");
1772
+ inQuote = !inQuote;
1773
+ continue;
1774
+ }
1775
+ if (!inQuote && /\s/.test(char)) {
1776
+ pushBuffer("fuzzy");
1777
+ continue;
1778
+ }
1779
+ buffer += char;
1780
+ }
1781
+ if (!inQuote) {
1782
+ pushBuffer("fuzzy");
1783
+ }
1784
+ return { tokens, hadUnclosedQuote: inQuote };
1785
+ }
1786
+ function fallbackWhitespaceTokens(query) {
1787
+ return query.split(/\s+/).map((token) => token.trim()).filter(Boolean).map((value) => ({ kind: "fuzzy", value }));
1788
+ }
1789
+ function createRegexQuery(query) {
1790
+ const pattern = query.slice(3).trim();
1791
+ if (!pattern) {
1792
+ return { mode: "regex", tokens: [], regex: null, error: "Empty regex" };
1793
+ }
1794
+ try {
1795
+ return { mode: "regex", tokens: [], regex: new RegExp(pattern, "i") };
1796
+ } catch (error) {
1797
+ return {
1798
+ mode: "regex",
1799
+ tokens: [],
1800
+ regex: null,
1801
+ error: error instanceof Error ? error.message : String(error)
1802
+ };
1803
+ }
1804
+ }
1805
+ function parseSessionSearchQuery(query) {
1806
+ const trimmed = query.trim();
1807
+ if (!trimmed) {
1808
+ return { mode: "tokens", tokens: [], regex: null };
1809
+ }
1810
+ if (trimmed.startsWith("re:")) {
1811
+ return createRegexQuery(trimmed);
1812
+ }
1813
+ const tokenized = tokenizeQuotedQuery(trimmed);
1814
+ return {
1815
+ mode: "tokens",
1816
+ tokens: tokenized.hadUnclosedQuote ? fallbackWhitespaceTokens(trimmed) : tokenized.tokens,
1817
+ regex: null
1818
+ };
1819
+ }
1820
+ function scoreRegexMatch(text, regex) {
1821
+ if (!regex) {
1822
+ return { matches: false, score: 0 };
1823
+ }
1824
+ const index = text.search(regex);
1825
+ return index < 0 ? { matches: false, score: 0 } : { matches: true, score: index * 0.1 };
1826
+ }
1827
+ function scoreTokenMatch(text, parsed) {
1828
+ if (parsed.tokens.length === 0) {
1829
+ return { matches: true, score: 0 };
1830
+ }
1831
+ let totalScore = 0;
1832
+ let normalizedText;
1833
+ for (const token of parsed.tokens) {
1834
+ if (token.kind === "phrase") {
1835
+ normalizedText ??= normalizeQueryText(text);
1836
+ const phraseIndex = normalizedText.indexOf(normalizeQueryText(token.value));
1837
+ if (phraseIndex < 0) {
1838
+ return { matches: false, score: 0 };
1839
+ }
1840
+ totalScore += phraseIndex * 0.1;
1841
+ continue;
1842
+ }
1843
+ const fuzzy = fuzzyScore(token.value, text);
1844
+ if (!fuzzy.matches) {
1845
+ return { matches: false, score: 0 };
1846
+ }
1847
+ totalScore += fuzzy.score;
1848
+ }
1849
+ return { matches: true, score: totalScore };
1850
+ }
1851
+ function filterAndSortSessions(sessions, query, sortMode) {
1852
+ const parsed = parseSessionSearchQuery(query);
1853
+ if (parsed.error) {
1854
+ return { items: [], error: parsed.error };
1855
+ }
1856
+ if (!query.trim()) {
1857
+ const items = [...sessions].sort((left, right) => right.lastModified - left.lastModified);
1858
+ return { items };
1859
+ }
1860
+ const scored = sessions.map((session) => {
1861
+ const text = buildSearchText(session);
1862
+ const match = parsed.mode === "regex" ? scoreRegexMatch(text, parsed.regex) : scoreTokenMatch(text, parsed);
1863
+ return { session, match };
1864
+ }).filter((entry) => entry.match.matches);
1865
+ scored.sort((left, right) => {
1866
+ if (sortMode === "relevance" && left.match.score !== right.match.score) {
1867
+ return left.match.score - right.match.score;
1868
+ }
1869
+ return right.session.lastModified - left.session.lastModified;
1870
+ });
1871
+ return { items: scored.map((entry) => entry.session) };
1872
+ }
1873
+ function formatSessionAge(lastModified) {
1874
+ const ageMs = Date.now() - lastModified;
1875
+ const seconds = ageMs / 1e3;
1876
+ const minutes = seconds / 60;
1877
+ const hours = minutes / 60;
1878
+ const days = hours / 24;
1879
+ if (days >= 1) return `${Math.floor(days)}d ago`;
1880
+ if (hours >= 1) return `${Math.floor(hours)}h ago`;
1881
+ if (minutes >= 1) return `${Math.floor(minutes)}m ago`;
1882
+ return `${Math.max(0, Math.floor(seconds))}s ago`;
1883
+ }
1884
+ function formatSessionSize(bytes) {
1885
+ if (bytes >= 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
1886
+ if (bytes >= 1024) return `${(bytes / 1024).toFixed(1)} KB`;
1887
+ return `${bytes} B`;
1888
+ }
1889
+ function shrinkSessionId(id) {
1890
+ return id.length > 16 ? `${id.slice(0, 8)}...${id.slice(-4)}` : id;
1891
+ }
1892
+
1893
+ // src/react-ink/components/dialogs/SessionDialog.tsx
1894
+ var VISIBLE_SESSION_COUNT = 5;
1895
+ function buildMetadata(session, showPath) {
1896
+ const parts = [
1897
+ formatSessionAge(session.lastModified),
1898
+ typeof session.messageCount === "number" ? `${session.messageCount} msg` : void 0,
1899
+ typeof session.size === "number" ? formatSessionSize(session.size) : void 0,
1900
+ session.cwd || void 0
1901
+ ];
1902
+ if (showPath) {
1903
+ parts.push(session.path);
1904
+ }
1905
+ return parts.filter(Boolean).join(" | ");
1906
+ }
1907
+ function SessionDialog({
1908
+ currentSessionPath,
1909
+ currentSessions,
1910
+ onClose,
1911
+ onDeleteSession,
1912
+ onLoadAllSessions,
1913
+ onRenameSession,
1914
+ onSelect
1915
+ }) {
1916
+ const [scope, setScope] = useState("current");
1917
+ const [sortMode, setSortMode] = useState("relevance");
1918
+ const [showPath, setShowPath] = useState(false);
1919
+ const [query, setQuery] = useState("");
1920
+ const [selectedIndex, setSelectedIndex] = useState(0);
1921
+ const [allSessions, setAllSessions] = useState(null);
1922
+ const [loadingAll, setLoadingAll] = useState(false);
1923
+ const [progress, setProgress] = useState(null);
1924
+ const [loadError, setLoadError] = useState();
1925
+ const [confirmDeletePath, setConfirmDeletePath] = useState(null);
1926
+ const [renamePath, setRenamePath] = useState(null);
1927
+ const [renameValue, setRenameValue] = useState("");
1928
+ useEffect(() => {
1929
+ if (scope !== "all" || allSessions || loadingAll) {
1930
+ return;
1931
+ }
1932
+ let cancelled = false;
1933
+ setLoadingAll(true);
1934
+ setLoadError(void 0);
1935
+ setProgress(null);
1936
+ void onLoadAllSessions((next) => {
1937
+ if (!cancelled) {
1938
+ setProgress(next);
1939
+ }
1940
+ }).then((sessions) => {
1941
+ if (!cancelled) {
1942
+ setAllSessions(sessions);
1943
+ }
1944
+ }).catch((error) => {
1945
+ if (!cancelled) {
1946
+ setLoadError(error instanceof Error ? error.message : String(error));
1947
+ }
1948
+ }).finally(() => {
1949
+ if (!cancelled) {
1950
+ setLoadingAll(false);
1951
+ }
1952
+ });
1953
+ return () => {
1954
+ cancelled = true;
1955
+ };
1956
+ }, [allSessions, loadingAll, onLoadAllSessions, scope]);
1957
+ const sourceSessions = scope === "all" ? allSessions ?? [] : currentSessions;
1958
+ const filtered = useMemo(() => filterAndSortSessions(sourceSessions, query, sortMode), [query, sortMode, sourceSessions]);
1959
+ useEffect(() => {
1960
+ setSelectedIndex(0);
1961
+ setConfirmDeletePath(null);
1962
+ }, [query, scope, sortMode]);
1963
+ useEffect(() => {
1964
+ if (selectedIndex >= filtered.items.length) {
1965
+ setSelectedIndex(0);
1966
+ }
1967
+ }, [filtered.items.length, selectedIndex]);
1968
+ const selectedSession = filtered.items[selectedIndex];
1969
+ const windowStart = Math.max(
1970
+ 0,
1971
+ Math.min(selectedIndex - Math.floor(VISIBLE_SESSION_COUNT / 2), Math.max(0, filtered.items.length - VISIBLE_SESSION_COUNT))
1972
+ );
1973
+ const visibleSessions = filtered.items.slice(windowStart, windowStart + VISIBLE_SESSION_COUNT);
1974
+ const statusLine = scope === "all" && loadingAll ? progress ? `Loading all sessions ${progress.loaded}/${progress.total}` : "Loading all sessions..." : loadError ? loadError : filtered.error ? `Search error: ${filtered.error}` : filtered.items.length === 0 ? "0 matches" : `Showing ${windowStart + 1}-${windowStart + visibleSessions.length} of ${filtered.items.length} matches`;
1975
+ const beginRename = () => {
1976
+ if (!selectedSession || !onRenameSession) {
1977
+ return;
1978
+ }
1979
+ setRenamePath(selectedSession.path);
1980
+ setRenameValue(selectedSession.name ?? "");
1981
+ };
1982
+ const confirmRename = async () => {
1983
+ if (!selectedSession || !onRenameSession || renamePath !== selectedSession.path) {
1984
+ setRenamePath(null);
1985
+ return;
1986
+ }
1987
+ await onRenameSession(selectedSession, renameValue.trim());
1988
+ setRenamePath(null);
1989
+ };
1990
+ useInput((input, key) => {
1991
+ if (renamePath) {
1992
+ if (key.escape || key.ctrl && input === "c") {
1993
+ setRenamePath(null);
1994
+ return;
1995
+ }
1996
+ if (key.return) {
1997
+ void confirmRename();
1998
+ return;
1999
+ }
2000
+ if (key.backspace || key.delete) {
2001
+ setRenameValue((current) => current.slice(0, -1));
2002
+ return;
2003
+ }
2004
+ if (!key.ctrl && !key.meta && input) {
2005
+ setRenameValue((current) => current + input);
2006
+ }
2007
+ return;
2008
+ }
2009
+ if (confirmDeletePath) {
2010
+ if (key.escape || key.ctrl && input === "c") {
2011
+ setConfirmDeletePath(null);
2012
+ return;
2013
+ }
2014
+ if (key.return && selectedSession && onDeleteSession && confirmDeletePath === selectedSession.path) {
2015
+ void onDeleteSession(selectedSession);
2016
+ setConfirmDeletePath(null);
2017
+ }
2018
+ return;
2019
+ }
2020
+ if (key.escape || key.ctrl && input === "c") {
2021
+ onClose();
2022
+ return;
2023
+ }
2024
+ if (key.tab) {
2025
+ setScope((current) => current === "current" ? "all" : "current");
2026
+ return;
2027
+ }
2028
+ if (key.ctrl && input === "s") {
2029
+ setSortMode((current) => current === "recent" ? "relevance" : "recent");
2030
+ return;
2031
+ }
2032
+ if (key.ctrl && input === "p") {
2033
+ setShowPath((current) => !current);
2034
+ return;
2035
+ }
2036
+ if (key.ctrl && input === "r") {
2037
+ beginRename();
2038
+ return;
2039
+ }
2040
+ if (key.ctrl && input === "d") {
2041
+ if (selectedSession && selectedSession.path !== currentSessionPath && onDeleteSession) {
2042
+ setConfirmDeletePath(selectedSession.path);
2043
+ }
2044
+ return;
2045
+ }
2046
+ if (key.upArrow) {
2047
+ setSelectedIndex((current) => wrapSelectionIndex2(current, -1, filtered.items.length));
2048
+ return;
2049
+ }
2050
+ if (key.downArrow) {
2051
+ setSelectedIndex((current) => wrapSelectionIndex2(current, 1, filtered.items.length));
2052
+ return;
2053
+ }
2054
+ if (key.pageUp) {
2055
+ setSelectedIndex((current) => Math.max(0, current - VISIBLE_SESSION_COUNT));
2056
+ return;
2057
+ }
2058
+ if (key.pageDown) {
2059
+ setSelectedIndex((current) => Math.min(filtered.items.length - 1, current + VISIBLE_SESSION_COUNT));
2060
+ return;
2061
+ }
2062
+ if (key.return) {
2063
+ if (selectedSession) {
2064
+ void onSelect(selectedSession);
2065
+ }
2066
+ return;
2067
+ }
2068
+ if (key.backspace || key.delete) {
2069
+ setQuery((current) => current.slice(0, -1));
2070
+ return;
2071
+ }
2072
+ if (key.ctrl && input === "u") {
2073
+ setQuery("");
2074
+ return;
2075
+ }
2076
+ if (!key.ctrl && !key.meta && input) {
2077
+ setQuery((current) => current + input);
2078
+ }
2079
+ });
2080
+ return /* @__PURE__ */ jsxs(
2081
+ DialogFrame,
2082
+ {
2083
+ title: scope === "current" ? "Resume Session (Current Folder)" : "Resume Session (All)",
2084
+ subtitle: statusLine,
2085
+ footer: /* @__PURE__ */ jsx(Text, { children: 'Tab scope, Ctrl+S sort, Ctrl+P path, Ctrl+R rename, Ctrl+D delete, re:pattern regex, "phrase" exact' }),
2086
+ children: [
2087
+ /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
2088
+ /* @__PURE__ */ jsxs(Text, { children: [
2089
+ "Search: ",
2090
+ renamePath ? "(rename active)" : query || " "
2091
+ ] }),
2092
+ /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
2093
+ "Scope: ",
2094
+ scope,
2095
+ " | Sort: ",
2096
+ sortMode,
2097
+ " | Path: ",
2098
+ showPath ? "on" : "off"
2099
+ ] })
2100
+ ] }),
2101
+ renamePath ? /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginTop: 1, children: [
2102
+ /* @__PURE__ */ jsx(Text, { children: "Rename session" }),
2103
+ /* @__PURE__ */ jsx(Text, { children: renameValue || " " }),
2104
+ /* @__PURE__ */ jsx(Text, { dimColor: true, children: "Enter saves, Esc cancels" })
2105
+ ] }) : confirmDeletePath ? /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Text, { children: "Delete this session? Enter confirms, Esc cancels." }) }) : filtered.items.length === 0 ? /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Text, { children: scope === "current" ? "No sessions matched in the current folder." : "No sessions matched." }) }) : /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginTop: 1, children: [
2106
+ windowStart > 0 ? /* @__PURE__ */ jsx(Text, { dimColor: true, children: " ..." }) : null,
2107
+ visibleSessions.map((session, index) => {
2108
+ const actualIndex = windowStart + index;
2109
+ const selected = actualIndex === selectedIndex;
2110
+ const locked = session.path === currentSessionPath;
2111
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
2112
+ /* @__PURE__ */ jsxs(Text, { color: selected ? "cyan" : "white", children: [
2113
+ selected ? "> " : " ",
2114
+ session.name ? `${session.name} ` : "",
2115
+ shrinkSessionId(session.id),
2116
+ locked ? " (current)" : ""
2117
+ ] }),
2118
+ /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
2119
+ selected ? " " : " ",
2120
+ buildMetadata(session, showPath)
2121
+ ] })
2122
+ ] }, session.path);
2123
+ }),
2124
+ windowStart + visibleSessions.length < filtered.items.length ? /* @__PURE__ */ jsx(Text, { dimColor: true, children: " ..." }) : null
2125
+ ] })
2126
+ ]
2127
+ }
2128
+ );
2129
+ }
2130
+
2131
+ // src/react-ink/components/dialogs/SettingsDialog.tsx
2132
+ function getNextValue(values, currentValue, direction) {
2133
+ if (values.length === 0) {
2134
+ return void 0;
2135
+ }
2136
+ const currentIndex = Math.max(0, values.indexOf(currentValue));
2137
+ const nextIndex = (currentIndex + direction + values.length) % values.length;
2138
+ return values[nextIndex];
2139
+ }
2140
+ function SettingsDialog({ items, onClose }) {
2141
+ const [query, setQuery] = useState("");
2142
+ const [selectedIndex, setSelectedIndex] = useState(0);
2143
+ const filteredItems = useMemo(
2144
+ () => items.filter(
2145
+ (item) => matchesSearchQuery(`${item.label} ${item.description} ${item.value} ${item.values.join(" ")}`, query)
2146
+ ),
2147
+ [items, query]
2148
+ );
2149
+ useEffect(() => {
2150
+ setSelectedIndex(0);
2151
+ }, [query]);
2152
+ useEffect(() => {
2153
+ if (selectedIndex >= filteredItems.length) {
2154
+ setSelectedIndex(0);
2155
+ }
2156
+ }, [filteredItems.length, selectedIndex]);
2157
+ const maxVisible = useMemo(() => Math.max(8, (process.stdout.rows ?? 24) - 18), []);
2158
+ const selectedItem = filteredItems[selectedIndex];
2159
+ const windowStart = Math.max(
2160
+ 0,
2161
+ Math.min(selectedIndex - Math.floor(maxVisible / 2), Math.max(0, filteredItems.length - maxVisible))
2162
+ );
2163
+ const visibleItems = filteredItems.slice(windowStart, windowStart + maxVisible);
2164
+ const cycleValue = (direction) => {
2165
+ const item = filteredItems[selectedIndex];
2166
+ if (!item) {
2167
+ return;
2168
+ }
2169
+ const nextValue = getNextValue(item.values, item.value, direction);
2170
+ if (!nextValue || nextValue === item.value) {
2171
+ return;
2172
+ }
2173
+ void item.onChange(nextValue);
2174
+ };
2175
+ useInput((input, key) => {
2176
+ if (key.escape) {
2177
+ onClose();
2178
+ return;
2179
+ }
2180
+ if (key.upArrow) {
2181
+ setSelectedIndex((current) => wrapSelectionIndex(current, -1, filteredItems.length));
2182
+ return;
2183
+ }
2184
+ if (key.downArrow) {
2185
+ setSelectedIndex((current) => wrapSelectionIndex(current, 1, filteredItems.length));
2186
+ return;
2187
+ }
2188
+ if (key.backspace || key.delete) {
2189
+ setQuery((current) => current.slice(0, -1));
2190
+ return;
2191
+ }
2192
+ if (key.ctrl && input === "u") {
2193
+ setQuery("");
2194
+ return;
2195
+ }
2196
+ if (key.leftArrow) {
2197
+ cycleValue(-1);
2198
+ return;
2199
+ }
2200
+ if (key.rightArrow || key.return) {
2201
+ cycleValue(1);
2202
+ return;
2203
+ }
2204
+ if (!key.ctrl && !key.meta && input) {
2205
+ setQuery((current) => current + input);
2206
+ }
2207
+ });
2208
+ return /* @__PURE__ */ jsx(
2209
+ DialogFrame,
2210
+ {
2211
+ title: "Settings",
2212
+ footer: /* @__PURE__ */ jsx(Text, { children: "Type to filter, Up/Down wraps, Left/Right or Enter changes, Ctrl+U clears, Esc closes" }),
2213
+ children: items.length === 0 ? /* @__PURE__ */ jsx(Text, { children: "No settings are available." }) : /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
2214
+ /* @__PURE__ */ jsxs(Text, { children: [
2215
+ "Search: ",
2216
+ query || " "
2217
+ ] }),
2218
+ /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
2219
+ filteredItems.length,
2220
+ " match",
2221
+ filteredItems.length === 1 ? "" : "es"
2222
+ ] }),
2223
+ /* @__PURE__ */ jsx(Box, { marginTop: 1, flexDirection: "column", children: filteredItems.length === 0 ? /* @__PURE__ */ jsx(Text, { children: "No settings matched the current search." }) : visibleItems.map((item, index) => {
2224
+ const actualIndex = windowStart + index;
2225
+ return /* @__PURE__ */ jsxs(Text, { children: [
2226
+ actualIndex === selectedIndex ? "> " : " ",
2227
+ item.label,
2228
+ ": ",
2229
+ item.value
2230
+ ] }, item.id);
2231
+ }) }),
2232
+ selectedItem ? /* @__PURE__ */ jsxs(Box, { marginTop: 1, flexDirection: "column", children: [
2233
+ /* @__PURE__ */ jsx(Text, { children: selectedItem.description }),
2234
+ /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
2235
+ "Choices: ",
2236
+ selectedItem.values.join(" \xB7 ")
2237
+ ] })
2238
+ ] }) : null
2239
+ ] })
2240
+ }
2241
+ );
2242
+ }
2243
+
2244
+ // src/react-ink/components/dialogs/StartupSessionPicker.tsx
2245
+ var VISIBLE_SESSION_COUNT2 = 5;
2246
+ function metadata(session, showPath) {
2247
+ const parts = [
2248
+ formatSessionAge(session.lastModified),
2249
+ typeof session.messageCount === "number" ? `${session.messageCount} msg` : void 0,
2250
+ typeof session.size === "number" ? formatSessionSize(session.size) : void 0,
2251
+ session.cwd || void 0
2252
+ ];
2253
+ if (showPath) {
2254
+ parts.push(session.path);
2255
+ }
2256
+ return parts.filter(Boolean).join(" | ");
2257
+ }
2258
+ function StartupSessionPicker({ onClose, onSelect, sessions, totalCount }) {
2259
+ const [query, setQuery] = useState("");
2260
+ const [selectedIndex, setSelectedIndex] = useState(0);
2261
+ const [sortMode, setSortMode] = useState("relevance");
2262
+ const [showPath, setShowPath] = useState(false);
2263
+ const filtered = useMemo(() => filterAndSortSessions(sessions, query, sortMode), [query, sessions, sortMode]);
2264
+ useEffect(() => {
2265
+ setSelectedIndex(0);
2266
+ }, [query, sortMode]);
2267
+ useEffect(() => {
2268
+ if (selectedIndex >= filtered.items.length) {
2269
+ setSelectedIndex(0);
2270
+ }
2271
+ }, [filtered.items.length, selectedIndex]);
2272
+ const windowStart = Math.max(
2273
+ 0,
2274
+ Math.min(selectedIndex - Math.floor(VISIBLE_SESSION_COUNT2 / 2), Math.max(0, filtered.items.length - VISIBLE_SESSION_COUNT2))
2275
+ );
2276
+ const visibleSessions = filtered.items.slice(windowStart, windowStart + VISIBLE_SESSION_COUNT2);
2277
+ const visibleRangeStart = filtered.items.length === 0 ? 0 : windowStart + 1;
2278
+ const visibleRangeEnd = filtered.items.length === 0 ? 0 : windowStart + visibleSessions.length;
2279
+ useInput((input, key) => {
2280
+ if (key.ctrl && input === "c") {
2281
+ onClose();
2282
+ return;
2283
+ }
2284
+ if (key.escape) {
2285
+ onClose();
2286
+ return;
2287
+ }
2288
+ if (key.ctrl && input === "s") {
2289
+ setSortMode((current) => current === "recent" ? "relevance" : "recent");
2290
+ return;
2291
+ }
2292
+ if (key.ctrl && input === "p") {
2293
+ setShowPath((current) => !current);
2294
+ return;
2295
+ }
2296
+ if (key.upArrow) {
2297
+ setSelectedIndex((current) => wrapSelectionIndex2(current, -1, filtered.items.length));
2298
+ return;
2299
+ }
2300
+ if (key.downArrow) {
2301
+ setSelectedIndex((current) => wrapSelectionIndex2(current, 1, filtered.items.length));
2302
+ return;
2303
+ }
2304
+ if (key.pageUp) {
2305
+ setSelectedIndex((current) => Math.max(0, current - VISIBLE_SESSION_COUNT2));
2306
+ return;
2307
+ }
2308
+ if (key.pageDown) {
2309
+ setSelectedIndex((current) => Math.min(filtered.items.length - 1, current + VISIBLE_SESSION_COUNT2));
2310
+ return;
2311
+ }
2312
+ if (key.return) {
2313
+ const session = filtered.items[selectedIndex];
2314
+ if (session) {
2315
+ void onSelect(session);
2316
+ }
2317
+ return;
2318
+ }
2319
+ if (key.backspace || key.delete) {
2320
+ setQuery((current) => current.slice(0, -1));
2321
+ return;
2322
+ }
2323
+ if (key.ctrl && input === "u") {
2324
+ setQuery("");
2325
+ return;
2326
+ }
2327
+ if (!key.ctrl && !key.meta && input) {
2328
+ setQuery((current) => current + input);
2329
+ }
2330
+ });
2331
+ const subtitle = totalCount > 0 ? `${totalCount} session${totalCount === 1 ? "" : "s"} available` : void 0;
2332
+ return /* @__PURE__ */ jsxs(
2333
+ DialogFrame,
2334
+ {
2335
+ title: "Resume Session",
2336
+ subtitle,
2337
+ footer: /* @__PURE__ */ jsx(Text, { children: "Type to filter, Ctrl+S sort, Ctrl+P path, Up/Down wraps, Enter selects, Ctrl+U clears, Esc closes" }),
2338
+ children: [
2339
+ /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
2340
+ /* @__PURE__ */ jsxs(Text, { children: [
2341
+ "Search: ",
2342
+ query || " "
2343
+ ] }),
2344
+ /* @__PURE__ */ jsx(Text, { dimColor: true, children: filtered.error ? `Search error: ${filtered.error}` : filtered.items.length === 0 ? "0 matches" : `Showing ${visibleRangeStart}-${visibleRangeEnd} of ${filtered.items.length} matches | sort:${sortMode} path:${showPath ? "on" : "off"}` })
2345
+ ] }),
2346
+ filtered.items.length === 0 ? /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Text, { children: sessions.length === 0 ? "No saved sessions were found." : "No sessions matched the current search." }) }) : /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginTop: 1, children: [
2347
+ windowStart > 0 ? /* @__PURE__ */ jsx(Text, { dimColor: true, children: " ..." }) : null,
2348
+ visibleSessions.map((session, index) => {
2349
+ const actualIndex = windowStart + index;
2350
+ const selected = actualIndex === selectedIndex;
2351
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
2352
+ /* @__PURE__ */ jsxs(Text, { color: selected ? "cyan" : "white", children: [
2353
+ selected ? "> " : " ",
2354
+ session.name ? `${session.name} ` : "",
2355
+ shrinkSessionId(session.id)
2356
+ ] }),
2357
+ /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
2358
+ selected ? " " : " ",
2359
+ metadata(session, showPath)
2360
+ ] })
2361
+ ] }, session.path);
2362
+ }),
2363
+ windowStart + visibleSessions.length < filtered.items.length ? /* @__PURE__ */ jsx(Text, { dimColor: true, children: " ..." }) : null
2364
+ ] })
2365
+ ]
2366
+ }
2367
+ );
2368
+ }
2369
+
2370
+ // src/react-ink/components/dialogs/ThemeDialog.tsx
2371
+ function ThemeDialog({ themes, onClose, onSelect }) {
2372
+ return /* @__PURE__ */ jsx(
2373
+ SelectableDialog,
2374
+ {
2375
+ title: "Themes",
2376
+ items: themes,
2377
+ emptyText: "No themes are available.",
2378
+ onClose,
2379
+ onSelect,
2380
+ renderItem: (themeName, selected) => /* @__PURE__ */ jsxs(Text, { children: [
2381
+ selected ? "> " : " ",
2382
+ themeName
2383
+ ] })
2384
+ }
2385
+ );
2386
+ }
2387
+
2388
+ // src/react-ink/components/dialogs/TreeDialog.tsx
2389
+ function TreeDialog({ items, onClose, onSelect }) {
2390
+ return /* @__PURE__ */ jsx(
2391
+ SelectableDialog,
2392
+ {
2393
+ title: "Session Tree",
2394
+ items,
2395
+ emptyText: "This session does not have any navigable entries yet.",
2396
+ onClose,
2397
+ onSelect,
2398
+ getSearchText: (item) => item.label,
2399
+ renderItem: (item, selected) => /* @__PURE__ */ jsxs(Text, { children: [
2400
+ selected ? "> " : " ",
2401
+ item.isCurrent ? "* " : "",
2402
+ item.label
2403
+ ] })
2404
+ }
2405
+ );
2406
+ }
2407
+
2408
+ // src/react-ink/components/dialogs/UserMessageDialog.tsx
2409
+ function UserMessageDialog({ items, onClose, onSelect }) {
2410
+ return /* @__PURE__ */ jsx(
2411
+ SelectableDialog,
2412
+ {
2413
+ title: "Fork From Message",
2414
+ items,
2415
+ emptyText: "No user messages are available for forking.",
2416
+ onClose,
2417
+ onSelect,
2418
+ getSearchText: (item) => item.preview,
2419
+ renderItem: (item, selected) => /* @__PURE__ */ jsxs(Text, { children: [
2420
+ selected ? "> " : " ",
2421
+ item.preview
2422
+ ] })
2423
+ }
2424
+ );
2425
+ }
2426
+ export {
2427
+ AssistantMessageView,
2428
+ BashMessageView,
2429
+ BranchSummaryMessageView,
2430
+ ChangelogBlock,
2431
+ CompactionMessageView,
2432
+ CustomMessageView,
2433
+ DialogFrame,
2434
+ DisplayBlockView,
2435
+ Footer,
2436
+ LoginDialog,
2437
+ MessageList,
2438
+ MessageRow,
2439
+ ModelDialog,
2440
+ OAuthDialog,
2441
+ ScopedModelsDialog,
2442
+ SelectableDialog,
2443
+ SessionDialog,
2444
+ SettingsDialog,
2445
+ SkillInvocationMessage,
2446
+ StartupSessionPicker,
2447
+ StatusLine,
2448
+ TaskPanel,
2449
+ ThemeDialog,
2450
+ ToolCallMessage,
2451
+ ToolEventBlock,
2452
+ ToolResultBlock,
2453
+ TreeDialog,
2454
+ UserMessageDialog,
2455
+ UserMessageView,
2456
+ createThemeAdapter,
2457
+ describeToolCall,
2458
+ describeToolExecution,
2459
+ describeToolResult,
2460
+ describeToolSource,
2461
+ extractMessagePreview,
2462
+ extractToolText,
2463
+ formatCustomContent,
2464
+ formatMessageTimestamp,
2465
+ formatToolCall,
2466
+ formatToolResult,
2467
+ formatUserContent,
2468
+ matchesSearchQuery,
2469
+ parseSkillInvocation,
2470
+ previewMultiline,
2471
+ previewText,
2472
+ safeStringify,
2473
+ splitAssistantMessage,
2474
+ wrapSelectionIndex
2475
+ };