eve 0.66.2 → 0.67.0

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 (398) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/src/channel/channel-address.d.ts +0 -2
  3. package/dist/src/channel/channel-address.js +1 -1
  4. package/dist/src/channel/channel-operations.d.ts +0 -5
  5. package/dist/src/channel/channel-operations.js +1 -1
  6. package/dist/src/channel/compiled-channel.d.ts +8 -0
  7. package/dist/src/channel/compiled-channel.js +2 -2
  8. package/dist/src/channel/conversation-context.js +1 -1
  9. package/dist/src/channel/routes.d.ts +1 -2
  10. package/dist/src/channel/schedule.d.ts +2 -2
  11. package/dist/src/channel/schedule.js +1 -1
  12. package/dist/src/channel/types.d.ts +8 -13
  13. package/dist/src/chunks/{use-eve-agent-PbSMyJ6e.js → use-eve-agent-DzdyI97Z.js} +0 -5
  14. package/dist/src/chunks/{use-eve-agent-Di1u2zKu.js → use-eve-agent-OCHP4s0z.js} +0 -5
  15. package/dist/src/cli/acp/command.js +3 -3
  16. package/dist/src/cli/commands/logs.d.ts +3 -3
  17. package/dist/src/cli/commands/logs.js +1 -1
  18. package/dist/src/cli/commands/register-integration-commands.js +1 -1
  19. package/dist/src/cli/commands/registry-declared-setups.d.ts +0 -1
  20. package/dist/src/cli/commands/registry-declared-setups.js +1 -1
  21. package/dist/src/cli/commands/registry.d.ts +5 -1
  22. package/dist/src/cli/commands/registry.js +1 -1
  23. package/dist/src/cli/commands/trace.js +1 -1
  24. package/dist/src/cli/dev/command.d.ts +9 -5
  25. package/dist/src/cli/dev/command.js +1 -3
  26. package/dist/src/cli/dev/run-interactive-ui.d.ts +0 -1
  27. package/dist/src/cli/dev/run-interactive-ui.js +1 -1
  28. package/dist/src/cli/dev/tui/argument-typeahead.d.ts +1 -2
  29. package/dist/src/cli/dev/tui/argument-typeahead.js +2 -2
  30. package/dist/src/cli/dev/tui/blocks.d.ts +5 -1
  31. package/dist/src/cli/dev/tui/blocks.js +4 -4
  32. package/dist/src/cli/dev/tui/flow-drawer.d.ts +11 -0
  33. package/dist/src/cli/dev/tui/flow-drawer.js +1 -0
  34. package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
  35. package/dist/src/cli/dev/tui/prompt-commands.d.ts +199 -0
  36. package/dist/src/cli/dev/tui/prompt-commands.js +2 -2
  37. package/dist/src/cli/dev/tui/question-panel.d.ts +4 -4
  38. package/dist/src/cli/dev/tui/question-panel.js +1 -1
  39. package/dist/src/cli/dev/tui/registry-result-message.d.ts +15 -4
  40. package/dist/src/cli/dev/tui/registry-result-message.js +4 -4
  41. package/dist/src/cli/dev/tui/runner.d.ts +18 -6
  42. package/dist/src/cli/dev/tui/runner.js +3 -2
  43. package/dist/src/cli/dev/tui/setup-commands.d.ts +5 -22
  44. package/dist/src/cli/dev/tui/setup-commands.js +2 -1
  45. package/dist/src/cli/dev/tui/setup-flow.d.ts +2 -10
  46. package/dist/src/cli/dev/tui/setup-panel.d.ts +4 -23
  47. package/dist/src/cli/dev/tui/setup-panel.js +3 -3
  48. package/dist/src/cli/dev/tui/terminal-renderer.d.ts +11 -7
  49. package/dist/src/cli/dev/tui/terminal-renderer.js +11 -11
  50. package/dist/src/cli/dev/tui/theme.d.ts +1 -1
  51. package/dist/src/cli/dev/tui/tui-prompter.js +1 -1
  52. package/dist/src/cli/dev/tui/tui.js +1 -1
  53. package/dist/src/cli/dev/url-target.js +1 -1
  54. package/dist/src/cli/invoke/command.d.ts +2 -5
  55. package/dist/src/cli/invoke/command.js +1 -1
  56. package/dist/src/cli/invoke/invoke.d.ts +2 -2
  57. package/dist/src/cli/invoke/invoke.js +1 -1
  58. package/dist/src/cli/invoke/result.d.ts +14 -194
  59. package/dist/src/cli/invoke/result.js +1 -1
  60. package/dist/src/cli/run.d.ts +0 -4
  61. package/dist/src/cli/run.js +2 -2
  62. package/dist/src/cli/telemetry/index.js +1 -1
  63. package/dist/src/client/message-reducer.js +1 -1
  64. package/dist/src/compiled/.vendor-stamp.json +6 -6
  65. package/dist/src/compiled/@workflow/core/create-hook.d.ts +38 -1
  66. package/dist/src/compiled/@workflow/core/global.d.ts +2 -0
  67. package/dist/src/compiled/@workflow/core/index.js +2 -2
  68. package/dist/src/compiled/@workflow/core/private.js +1 -1
  69. package/dist/src/compiled/@workflow/core/runtime/constants.d.ts +9 -0
  70. package/dist/src/compiled/@workflow/core/runtime/helpers.js +1 -1
  71. package/dist/src/compiled/@workflow/core/runtime/hook-wake.d.ts +89 -0
  72. package/dist/src/compiled/@workflow/core/runtime/open-hook-wait-state.d.ts +55 -0
  73. package/dist/src/compiled/@workflow/core/runtime/quickjs-runtime.d.ts +2 -0
  74. package/dist/src/compiled/@workflow/core/runtime/suspension-handler.d.ts +8 -1
  75. package/dist/src/compiled/@workflow/core/runtime.js +4 -4
  76. package/dist/src/compiled/@workflow/core/serialization/types.d.ts +8 -0
  77. package/dist/src/compiled/@workflow/core/serialization.d.ts +8 -0
  78. package/dist/src/compiled/@workflow/core/serialization.js +1 -1
  79. package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
  80. package/dist/src/compiled/@workflow/core/workflow.js +1 -1
  81. package/dist/src/compiled/@workflow/errors/index.d.ts +23 -0
  82. package/dist/src/compiled/@workflow/errors/index.js +1 -1
  83. package/dist/src/compiled/@workflow/world/events.d.ts +34 -0
  84. package/dist/src/compiled/@workflow/world/hooks.d.ts +27 -0
  85. package/dist/src/compiled/@workflow/world/index.d.ts +2 -2
  86. package/dist/src/compiled/@workflow/world/interfaces.d.ts +24 -0
  87. package/dist/src/compiled/@workflow/world/spec-version.d.ts +32 -11
  88. package/dist/src/compiled/@workflow/world-local/index.js +3 -3
  89. package/dist/src/compiled/@workflow/world-vercel/index.js +17 -17
  90. package/dist/src/compiled/_chunks/workflow/{attribute-changes-89Nwz7XW.js → attribute-changes-DzJovO_f.js} +1 -1
  91. package/dist/src/compiled/_chunks/workflow/dist-BQSf8Hax.js +1 -0
  92. package/dist/src/compiled/_chunks/workflow/dist-BfMqXLK3.js +3 -0
  93. package/dist/src/compiled/_chunks/workflow/frames-qKc30rjg.js +3 -0
  94. package/dist/src/compiled/_chunks/workflow/{global-DIlFoH2w.js → global-BQnKzRXo.js} +1 -1
  95. package/dist/src/compiled/_chunks/workflow/{helpers-k3zcudWr.js → helpers-CNMO7zB1.js} +1 -1
  96. package/dist/src/compiled/_chunks/workflow/{logger-Bzc8jWWj.js → logger-BCEj9caG.js} +1 -1
  97. package/dist/src/compiled/_chunks/workflow/resume-hook-QS_cMwHn.js +1 -0
  98. package/dist/src/compiled/_chunks/workflow/run-CA5wWV2S.js +1 -0
  99. package/dist/src/compiled/_chunks/workflow/serialization-CJ265vSe.js +3 -0
  100. package/dist/src/compiled/_chunks/workflow/sleep-CBn94Ayv.js +1 -0
  101. package/dist/src/compiled/_chunks/workflow/{wait-until-DXLZx3tU.js → wait-until-Bo2U6ON9.js} +1 -1
  102. package/dist/src/compiled/_chunks/workflow/{ws-transport-BSM_Cl7a.js → ws-transport-BrsMYqJg.js} +1 -1
  103. package/dist/src/compiler/compile-from-memory.d.ts +0 -1
  104. package/dist/src/compiler/compile-from-memory.js +1 -1
  105. package/dist/src/compiler/extension-compatibility.d.ts +25 -18
  106. package/dist/src/compiler/extension-compatibility.js +1 -1
  107. package/dist/src/compiler/manifest.d.ts +48 -14
  108. package/dist/src/compiler/manifest.js +1 -1
  109. package/dist/src/compiler/normalize-agent-config.js +1 -1
  110. package/dist/src/compiler/normalize-channel.js +1 -1
  111. package/dist/src/compiler/normalize-connection.js +1 -1
  112. package/dist/src/compiler/normalize-manifest-helpers.js +1 -1
  113. package/dist/src/compiler/normalize-subagent.d.ts +0 -2
  114. package/dist/src/compiler/normalize-subagent.js +1 -1
  115. package/dist/src/compiler/remote-agent-node.d.ts +0 -2
  116. package/dist/src/compiler/remote-agent-node.js +1 -1
  117. package/dist/src/compiler/workspace-resources.js +1 -1
  118. package/dist/src/context/dynamic-subagent-lifecycle.js +1 -1
  119. package/dist/src/context/keys.d.ts +0 -3
  120. package/dist/src/context/keys.js +1 -1
  121. package/dist/src/context/memory-lifecycle.d.ts +1 -0
  122. package/dist/src/context/memory-lifecycle.js +1 -1
  123. package/dist/src/discover/project.js +1 -1
  124. package/dist/src/eve-channel/create-request.d.ts +0 -3
  125. package/dist/src/eve-channel/create-request.js +1 -1
  126. package/dist/src/eve-channel/index.js +1 -1
  127. package/dist/src/eve-channel/request.js +1 -1
  128. package/dist/src/eve-channel/types.d.ts +1 -1
  129. package/dist/src/execution/delegated-session-context.d.ts +2 -0
  130. package/dist/src/execution/delegated-session-context.js +1 -0
  131. package/dist/src/execution/dynamic-connections.d.ts +4 -1
  132. package/dist/src/execution/dynamic-connections.js +1 -1
  133. package/dist/src/execution/dynamic-workflow/tool.js +1 -1
  134. package/dist/src/execution/effective-agent-config.js +1 -1
  135. package/dist/src/execution/legacy-session/input.d.ts +0 -2
  136. package/dist/src/execution/legacy-session/input.js +1 -1
  137. package/dist/src/execution/legacy-session/prepare-step.d.ts +0 -1
  138. package/dist/src/execution/legacy-session/turn-workflow.js +1 -1
  139. package/dist/src/execution/node-step.d.ts +4 -2
  140. package/dist/src/execution/node-step.js +1 -1
  141. package/dist/src/execution/proxied-deliver-step.js +1 -1
  142. package/dist/src/execution/publish-channel-event.d.ts +23 -0
  143. package/dist/src/execution/publish-channel-event.js +1 -0
  144. package/dist/src/execution/runtime-context.js +1 -1
  145. package/dist/src/execution/session/entry-input.d.ts +4 -0
  146. package/dist/src/execution/session/entry-input.js +1 -1
  147. package/dist/src/execution/session/entry.js +1 -1
  148. package/dist/src/execution/session/event-sink.d.ts +1 -1
  149. package/dist/src/execution/session/event-sink.js +1 -1
  150. package/dist/src/execution/session/finalization.d.ts +1 -4
  151. package/dist/src/execution/session/finalization.js +1 -1
  152. package/dist/src/execution/session/handoff.d.ts +1 -3
  153. package/dist/src/execution/session/handoff.js +1 -1
  154. package/dist/src/execution/session/input-queue.d.ts +0 -1
  155. package/dist/src/execution/session/input-queue.js +1 -1
  156. package/dist/src/execution/session/next-input.d.ts +0 -1
  157. package/dist/src/execution/session/next-input.js +1 -1
  158. package/dist/src/execution/session/program.d.ts +0 -3
  159. package/dist/src/execution/session/program.js +1 -1
  160. package/dist/src/execution/session/turn-step-result.d.ts +1 -2
  161. package/dist/src/execution/session/turn-step-result.js +1 -1
  162. package/dist/src/execution/session/turn-step.js +1 -1
  163. package/dist/src/execution/session/turn.d.ts +2 -2
  164. package/dist/src/execution/session/turn.js +1 -1
  165. package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
  166. package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -1
  167. package/dist/src/execution/tools/agent-router-workflow.js +1 -1
  168. package/dist/src/execution/tools/agent-router.d.ts +0 -2
  169. package/dist/src/execution/tools/agent-router.js +1 -1
  170. package/dist/src/execution/tools/ask-question-workflow.js +1 -1
  171. package/dist/src/execution/tools/connection-search.d.ts +1 -0
  172. package/dist/src/execution/tools/connection-search.js +1 -1
  173. package/dist/src/execution/tools/sleep-workflow.js +1 -1
  174. package/dist/src/execution/tools/subagent/invoke-preparation.js +1 -1
  175. package/dist/src/execution/workflow-runtime.js +1 -1
  176. package/dist/src/extensions/code/extension/lib/connect-authentication.js +1 -1
  177. package/dist/src/extensions/code/extension/lib/github-shell.js +1 -1
  178. package/dist/src/extensions/code/extension/lib/prwatch-github.js +1 -1
  179. package/dist/src/framework/sources/registry.js +1 -1
  180. package/dist/src/harness/approval-delivery-coordinator.d.ts +3 -13
  181. package/dist/src/harness/approval-delivery-coordinator.js +1 -1
  182. package/dist/src/harness/emission.d.ts +2 -3
  183. package/dist/src/harness/emission.js +1 -1
  184. package/dist/src/harness/input-request-resolution.d.ts +2 -0
  185. package/dist/src/harness/input-request-resolution.js +1 -1
  186. package/dist/src/harness/input-requests.d.ts +3 -3
  187. package/dist/src/harness/input-requests.js +1 -1
  188. package/dist/src/harness/pending-input-batches.d.ts +3 -3
  189. package/dist/src/harness/pending-input-batches.js +1 -1
  190. package/dist/src/harness/proxy-input-requests.d.ts +2 -0
  191. package/dist/src/harness/proxy-input-requests.js +1 -1
  192. package/dist/src/harness/session-limit-enforcement.d.ts +2 -3
  193. package/dist/src/harness/session-limit-enforcement.js +1 -1
  194. package/dist/src/harness/tool-loop.js +2 -2
  195. package/dist/src/harness/tools.js +1 -1
  196. package/dist/src/harness/types.d.ts +11 -13
  197. package/dist/src/instrumentation/session-context.js +1 -1
  198. package/dist/src/instrumentation/session-init.js +1 -1
  199. package/dist/src/internal/application/package.js +1 -1
  200. package/dist/src/internal/authored-definition/core.js +1 -1
  201. package/dist/src/internal/authored-module-loader.js +1 -2
  202. package/dist/src/internal/authored-package-boundary.d.ts +0 -1
  203. package/dist/src/internal/authored-package-boundary.js +1 -1
  204. package/dist/src/internal/authored-relative-extension-resolver.js +1 -1
  205. package/dist/src/internal/external-resources-snapshot.d.ts +46 -0
  206. package/dist/src/internal/external-resources-snapshot.js +1 -0
  207. package/dist/src/internal/external-resources.d.ts +20 -0
  208. package/dist/src/internal/external-resources.js +1 -0
  209. package/dist/src/internal/invocation/workflow-execution.d.ts +0 -2
  210. package/dist/src/internal/invocation/workflow-execution.js +1 -1
  211. package/dist/src/internal/nitro/host/build-application.js +1 -1
  212. package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
  213. package/dist/src/internal/nitro/host/instrumentation-entry.d.ts +3 -0
  214. package/dist/src/internal/nitro/host/instrumentation-entry.js +2 -0
  215. package/dist/src/internal/nitro/host/start-development-server.d.ts +0 -8
  216. package/dist/src/internal/nitro/host/start-development-server.js +2 -2
  217. package/dist/src/internal/nitro/host.d.ts +1 -1
  218. package/dist/src/internal/nitro/host.js +1 -1
  219. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
  220. package/dist/src/internal/nitro/routes/index.js +72 -3
  221. package/dist/src/internal/workflow/development-world-client.js +1 -1
  222. package/dist/src/node_modules/.pnpm/{@vercel_cli-config@0.2.7 → @vercel_cli-config@0.3.0}/node_modules/@vercel/cli-config/dist/index.js +1 -1
  223. package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38 → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/authorization.js +1 -1
  224. package/dist/src/node_modules/.pnpm/@vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494/node_modules/@vercel/connect/dist/connector.js +1 -0
  225. package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38 → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/installation.js +1 -1
  226. package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38 → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/token.js +1 -1
  227. package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/token-util.js +1 -1
  228. package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/token.js +1 -1
  229. package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/version.js +1 -1
  230. package/dist/src/protocol/message.d.ts +4 -0
  231. package/dist/src/protocol/message.js +1 -1
  232. package/dist/src/public/channels/chat-sdk/chatSdkChannel.d.ts +0 -1
  233. package/dist/src/public/channels/chat-sdk/chatSdkChannel.js +1 -1
  234. package/dist/src/public/channels/mcp.js +1 -1
  235. package/dist/src/public/channels/slack/activity-plan.d.ts +2 -1
  236. package/dist/src/public/channels/slack/activity-plan.js +1 -1
  237. package/dist/src/public/channels/slack/activity.d.ts +2 -0
  238. package/dist/src/public/channels/slack/activity.js +1 -1
  239. package/dist/src/public/channels/slack/api.d.ts +7 -0
  240. package/dist/src/public/channels/slack/api.js +1 -1
  241. package/dist/src/public/channels/slack/app-manifest.d.ts +9 -0
  242. package/dist/src/public/channels/slack/app-manifest.js +1 -0
  243. package/dist/src/public/channels/slack/attachments.d.ts +5 -2
  244. package/dist/src/public/channels/slack/attachments.js +1 -1
  245. package/dist/src/public/channels/slack/inbound-content.js +6 -3
  246. package/dist/src/public/channels/slack/index.d.ts +1 -0
  247. package/dist/src/public/channels/slack/input-response.d.ts +2 -0
  248. package/dist/src/public/channels/slack/input-response.js +1 -1
  249. package/dist/src/public/channels/slack/interaction-cards.js +1 -1
  250. package/dist/src/public/channels/slack/interactions.d.ts +2 -0
  251. package/dist/src/public/channels/slack/interactions.js +1 -1
  252. package/dist/src/public/channels/slack/slackChannel.d.ts +7 -1
  253. package/dist/src/public/channels/slack/slackChannel.js +1 -1
  254. package/dist/src/public/channels/slack/slash-command.d.ts +5 -1
  255. package/dist/src/public/channels/slack/slash-command.js +1 -1
  256. package/dist/src/public/channels/slack/transport.d.ts +76 -0
  257. package/dist/src/public/channels/slack/transport.js +1 -0
  258. package/dist/src/public/definitions/remote-agent.d.ts +0 -9
  259. package/dist/src/public/definitions/workspace-agent.d.ts +0 -3
  260. package/dist/src/public/definitions/workspace-agent.js +1 -1
  261. package/dist/src/runtime/agent/bootstrap.d.ts +0 -1
  262. package/dist/src/runtime/agent/bootstrap.js +1 -1
  263. package/dist/src/runtime/connections/mcp-client.js +1 -1
  264. package/dist/src/runtime/connections/mcp-tracing.d.ts +27 -0
  265. package/dist/src/runtime/connections/mcp-tracing.js +1 -0
  266. package/dist/src/runtime/resolve-agent-graph.js +1 -1
  267. package/dist/src/runtime/resolve-agent.js +1 -1
  268. package/dist/src/runtime/subagents/dynamic-agent-config.d.ts +0 -2
  269. package/dist/src/runtime/subagents/dynamic-agent-config.js +1 -1
  270. package/dist/src/runtime/subagents/dynamic-remote-agent-config.d.ts +0 -2
  271. package/dist/src/runtime/subagents/dynamic-remote-agent-config.js +1 -1
  272. package/dist/src/runtime/types.d.ts +1 -2
  273. package/dist/src/services/dev-client/vercel-auth-error.d.ts +1 -1
  274. package/dist/src/setup/cli/channel-setup-prompter.d.ts +2 -9
  275. package/dist/src/setup/cli/channel-setup-prompter.js +1 -1
  276. package/dist/src/setup/cli/index.d.ts +1 -1
  277. package/dist/src/setup/connection-connector.js +1 -1
  278. package/dist/src/setup/flows/model-login-connection.d.ts +0 -16
  279. package/dist/src/setup/flows/model-login-connection.js +1 -1
  280. package/dist/src/setup/flows/model-login-options.d.ts +59 -0
  281. package/dist/src/setup/flows/model-login-options.js +1 -0
  282. package/dist/src/setup/flows/model-login.js +1 -1
  283. package/dist/src/setup/flows/model-source-change.d.ts +0 -2
  284. package/dist/src/setup/flows/model-source-change.js +1 -1
  285. package/dist/src/setup/flows/registry-session.d.ts +15 -13
  286. package/dist/src/setup/flows/registry-session.js +1 -1
  287. package/dist/src/setup/flows/registry.js +1 -1
  288. package/dist/src/setup/flows/vercel-model-login.js +1 -1
  289. package/dist/src/setup/integrations/photon/setup-flow.js +1 -1
  290. package/dist/src/setup/prompter.d.ts +2 -2
  291. package/dist/src/setup/registry-setup-client.js +1 -1
  292. package/dist/src/setup/registry-setup-protocol.d.ts +0 -4
  293. package/dist/src/setup/scaffold/create/project.js +1 -1
  294. package/dist/src/setup/slack-connect-lifecycle.js +1 -1
  295. package/dist/src/setup/verified-remote-agent.d.ts +1 -0
  296. package/dist/src/setup/verified-remote-agent.js +1 -1
  297. package/dist/src/shared/action-types.d.ts +2 -2
  298. package/dist/src/shared/agent-definition.d.ts +0 -9
  299. package/dist/src/shared/agent-turn-outcome.d.ts +1 -1
  300. package/dist/src/shared/channel-definition.d.ts +2 -2
  301. package/dist/src/shared/conversation-context.d.ts +0 -4
  302. package/dist/src/shared/conversation-context.js +1 -1
  303. package/dist/src/shared/validate-authorization.js +1 -1
  304. package/dist/src/shared/vercel-connect-metadata.d.ts +12 -0
  305. package/dist/src/shared/vercel-connect-metadata.js +1 -0
  306. package/dist/src/subagents/agent-handle-errors.d.ts +0 -4
  307. package/dist/src/subagents/agent-handle-errors.js +1 -1
  308. package/dist/src/subagents/callback-route.js +1 -1
  309. package/dist/src/subagents/callback-step.d.ts +0 -22
  310. package/dist/src/subagents/callback-step.js +1 -1
  311. package/dist/src/subagents/event-proxy-step.js +1 -1
  312. package/dist/src/subagents/hitl-proxy.d.ts +3 -5
  313. package/dist/src/subagents/hitl-proxy.js +1 -1
  314. package/dist/src/subagents/invocation.d.ts +5 -6
  315. package/dist/src/subagents/parent-notification.d.ts +1 -18
  316. package/dist/src/subagents/parent-notification.js +1 -1
  317. package/dist/src/subagents/remote-dispatch.js +1 -1
  318. package/dist/src/subagents/tool.d.ts +0 -3
  319. package/dist/src/subagents/tool.js +1 -1
  320. package/dist/src/svelte/index.js +1 -1
  321. package/dist/src/svelte/use-eve-agent.js +1 -1
  322. package/dist/src/tools/framework/agent-contract.d.ts +0 -2
  323. package/dist/src/tools/framework/agent-contract.js +1 -1
  324. package/dist/src/tracing/agent-action-instrumentation.js +1 -1
  325. package/dist/src/tracing/agent-approval-instrumentation.js +1 -1
  326. package/dist/src/tracing/agent-memory-instrumentation.js +1 -1
  327. package/dist/src/tracing/agent-otel-provider.js +2 -2
  328. package/dist/src/tracing/agent-otel-session-context.js +1 -1
  329. package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
  330. package/dist/src/tracing/agent-tool-span-context.d.ts +15 -0
  331. package/dist/src/tracing/agent-tool-span-context.js +1 -0
  332. package/dist/src/tracing/otel-declaration.d.ts +4 -9
  333. package/dist/src/vue/index.js +1 -1
  334. package/dist/src/vue/use-eve-agent.js +1 -1
  335. package/docs/agent-config.md +12 -13
  336. package/docs/channels/chat-sdk.mdx +1 -1
  337. package/docs/channels/custom.mdx +1 -1
  338. package/docs/channels/eve.mdx +4 -4
  339. package/docs/channels/mcp.mdx +10 -10
  340. package/docs/channels/slack.mdx +32 -3
  341. package/docs/concepts/sessions-runs-and-streaming.md +5 -6
  342. package/docs/connections/overview.mdx +22 -0
  343. package/docs/guides/deployment/overview.md +1 -1
  344. package/docs/guides/deployment/self-hosting.md +1 -1
  345. package/docs/guides/deployment/vercel.mdx +2 -2
  346. package/docs/guides/dev-tui.md +7 -7
  347. package/docs/guides/dynamic-capabilities.md +2 -2
  348. package/docs/guides/frontend/overview.mdx +5 -3
  349. package/docs/guides/hooks.md +4 -2
  350. package/docs/guides/instrumentation/agent-runs.mdx +7 -7
  351. package/docs/guides/instrumentation/instrumentation.mdx +22 -5
  352. package/docs/guides/instrumentation/otel.mdx +30 -0
  353. package/docs/guides/remote-agents.md +3 -4
  354. package/docs/guides/self-modification.md +1 -1
  355. package/docs/memory/custom-provider.md +1 -1
  356. package/docs/protocols/acp.md +1 -1
  357. package/docs/reference/cli.md +91 -97
  358. package/docs/schedules.mdx +4 -5
  359. package/docs/subagents/index.mdx +5 -7
  360. package/docs/tools/human-in-the-loop.md +4 -0
  361. package/docs/tools/overview.mdx +2 -0
  362. package/docs/tools/workflows.mdx +1 -1
  363. package/docs/tutorial/remember-definitions.mdx +1 -1
  364. package/docs/tutorial/ship-it.mdx +1 -1
  365. package/package.json +8 -7
  366. package/dist/src/cli/commands/channels.d.ts +0 -9
  367. package/dist/src/cli/commands/channels.js +0 -1
  368. package/dist/src/compiled/_chunks/workflow/dist-CNT2vjZ4.js +0 -1
  369. package/dist/src/compiled/_chunks/workflow/dist-DtXwQbZr.js +0 -3
  370. package/dist/src/compiled/_chunks/workflow/frames-DnrfSd1P.js +0 -3
  371. package/dist/src/compiled/_chunks/workflow/resume-hook-BmJ263ZR.js +0 -1
  372. package/dist/src/compiled/_chunks/workflow/run-NLvREued.js +0 -1
  373. package/dist/src/compiled/_chunks/workflow/serialization-HCDeQWcR.js +0 -3
  374. package/dist/src/compiled/_chunks/workflow/sleep-Bi508qmg.js +0 -1
  375. package/dist/src/execution/effective-output-schema.d.ts +0 -22
  376. package/dist/src/execution/effective-output-schema.js +0 -1
  377. package/dist/src/node_modules/.pnpm/@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38/node_modules/@vercel/connect/dist/connector.js +0 -1
  378. package/dist/src/public/channels/slack/api-errors.d.ts +0 -33
  379. package/dist/src/public/channels/slack/api-errors.js +0 -1
  380. package/dist/src/shared/run-mode.d.ts +0 -7
  381. package/dist/src/shared/run-mode.js +0 -1
  382. package/dist/src/subagents/parent-result.d.ts +0 -14
  383. package/dist/src/subagents/parent-result.js +0 -1
  384. /package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38 → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/index.js +0 -0
  385. /package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38 → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/internal/base-url.js +0 -0
  386. /package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38 → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/internal/default-scopes.js +0 -0
  387. /package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38 → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/internal/env.js +0 -0
  388. /package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38 → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/internal/url-validation.js +0 -0
  389. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/auth-errors.js +0 -0
  390. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/exchange-vercel-oidc-token.js +0 -0
  391. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/get-context.js +0 -0
  392. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/get-vercel-oidc-token-sync.js +0 -0
  393. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/get-vercel-oidc-token-with-refresh.js +0 -0
  394. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/index.js +0 -0
  395. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/oauth.js +0 -0
  396. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/token-error.js +0 -0
  397. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/token-io.js +0 -0
  398. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/verify-vercel-oidc-token.js +0 -0
@@ -1,2 +1,2 @@
1
- import{sanitizeForTerminal}from"#cli/ui/output.js";import{sliceVisible,visibleLength}from"#cli/ui/terminal-text.js";const ARGUMENT_LIMIT={add:1,login:1,model:2};function isArgumentTypeaheadCommand(e){return e===`model`||e===`add`||e===`login`}function argumentTypeaheadLoadingLabel(e){return e===`model`?`models`:e===`add`?`registry`:`connections`}function argumentTypeaheadQuery(e){if(!e.startsWith(`/`))return;let t=e.indexOf(` `);if(t<0)return;let n=e.slice(1,t);if(!isArgumentTypeaheadCommand(n))return;let r=[],i=t;for(;i<e.length;){for(;e[i]===` `;)i+=1;if(i===e.length)break;let t=i;for(;i<e.length&&e[i]!==` `;)i+=1;r.push({value:e.slice(t,i),start:t})}let a=r.length+ +!!e.endsWith(` `);if(e.slice(t).includes(`
2
- `)||a>ARGUMENT_LIMIT[n])return;let o=r.at(-1),s=r.map(e=>e.value);return!e.endsWith(` `)&&o!==void 0&&s.pop(),{command:n,argument:e.endsWith(` `)?``:o?.value??``,completed:s,argumentStart:e.endsWith(` `)?e.length:o?.start??e.length}}function sanitizeSuggestion(e){let t={value:sanitizeForTerminal(e.value),label:sanitizeForTerminal(e.label)};return e.hint!==void 0&&(t.hint=sanitizeForTerminal(e.hint)),e.next!==void 0&&(t.next=e.next.map(sanitizeSuggestion)),t}function argumentTypeaheadFor(e,t,n){let r=t.map(sanitizeSuggestion),i=e.completed.length===0?r:r.find(t=>t.value===e.completed[0])?.next??[],a=e.argument.toLowerCase(),o=i.filter(e=>e.value.toLowerCase().includes(a)||e.label.toLowerCase().includes(a)||(e.hint?.toLowerCase().includes(a)??!1)),s=n?.suggestions[n.selectedIndex],c=s===void 0?-1:o.findIndex(e=>e.value===s.value);return{...e,suggestions:o,selectedIndex:c>=0?c:0}}function moveArgumentTypeaheadSelection(e,t){return e.suggestions.length===0?e:{...e,selectedIndex:(e.selectedIndex+t+e.suggestions.length)%e.suggestions.length}}function selectedArgumentSuggestion(e){return e.suggestions[e.selectedIndex]}function argumentTypeaheadCompletion(e,t){return`/${e.command} ${[...e.completed,t.value].join(` `)}`}function renderArgumentSuggestions(e,t,n){let r=t.colors,i=Math.min(8,e.suggestions.length),a=Math.max(0,Math.min(e.selectedIndex-Math.floor(i/2),e.suggestions.length-i));return e.suggestions.slice(a,a+i).map((t,i)=>{let o=a+i===e.selectedIndex?r.bold(t.value):r.dim(t.value),s=`${` `.repeat(e.argumentStart+2)}${o}`;return visibleLength(s)>n?sliceVisible(s,n):s})}export{argumentTypeaheadCompletion,argumentTypeaheadFor,argumentTypeaheadLoadingLabel,argumentTypeaheadQuery,isArgumentTypeaheadCommand,moveArgumentTypeaheadSelection,renderArgumentSuggestions,selectedArgumentSuggestion};
1
+ import{PROMPT_COMMANDS}from"./prompt-commands.js";import{sanitizeForTerminal}from"#cli/ui/output.js";import{sliceVisible,visibleLength}from"#cli/ui/terminal-text.js";function typeaheadCommand(e){let t=PROMPT_COMMANDS.find(t=>t.name===e);if(t?.typeahead!==void 0)return{name:t.name,...t.typeahead}}function argumentTypeaheadLoadingLabel(e){return typeaheadCommand(e)?.loadingLabel??`suggestions`}function argumentTypeaheadQuery(e){if(!e.startsWith(`/`))return;let t=e.indexOf(` `);if(t<0)return;let n=typeaheadCommand(e.slice(1,t));if(n===void 0)return;let r=[],i=t;for(;i<e.length;){for(;e[i]===` `;)i+=1;if(i===e.length)break;let t=i;for(;i<e.length&&e[i]!==` `;)i+=1;r.push({value:e.slice(t,i),start:t})}let a=r.length+ +!!e.endsWith(` `);if(e.slice(t).includes(`
2
+ `)||a>n.maxArguments)return;let o=r.at(-1),s=r.map(e=>e.value);return!e.endsWith(` `)&&o!==void 0&&s.pop(),{command:n.name,argument:e.endsWith(` `)?``:o?.value??``,completed:s,argumentStart:e.endsWith(` `)?e.length:o?.start??e.length}}function sanitizeSuggestion(e){let t={value:sanitizeForTerminal(e.value),label:sanitizeForTerminal(e.label)};return e.hint!==void 0&&(t.hint=sanitizeForTerminal(e.hint)),e.next!==void 0&&(t.next=e.next.map(sanitizeSuggestion)),t}function argumentTypeaheadFor(e,t,n){let r=t.map(sanitizeSuggestion),i=e.completed.length===0?r:r.find(t=>t.value===e.completed[0])?.next??[],a=e.argument.toLowerCase(),o=i.filter(e=>e.value.toLowerCase().includes(a)||e.label.toLowerCase().includes(a)||(e.hint?.toLowerCase().includes(a)??!1)),s=n?.suggestions[n.selectedIndex],c=s===void 0?-1:o.findIndex(e=>e.value===s.value);return{...e,suggestions:o,selectedIndex:c>=0?c:0}}function moveArgumentTypeaheadSelection(e,t){return e.suggestions.length===0?e:{...e,selectedIndex:(e.selectedIndex+t+e.suggestions.length)%e.suggestions.length}}function selectedArgumentSuggestion(e){return e.suggestions[e.selectedIndex]}function argumentTypeaheadCompletion(e,t){return`/${e.command} ${[...e.completed,t.value].join(` `)}`}function renderArgumentSuggestions(e,t,n){let r=t.colors,i=Math.min(8,e.suggestions.length),a=Math.max(0,Math.min(e.selectedIndex-Math.floor(i/2),e.suggestions.length-i));return e.suggestions.slice(a,a+i).map((t,i)=>{let o=a+i===e.selectedIndex?r.bold(t.value):r.dim(t.value),s=`${` `.repeat(e.argumentStart+2)}${o}`;return visibleLength(s)>n?sliceVisible(s,n):s})}export{argumentTypeaheadCompletion,argumentTypeaheadFor,argumentTypeaheadLoadingLabel,argumentTypeaheadQuery,moveArgumentTypeaheadSelection,renderArgumentSuggestions,selectedArgumentSuggestion};
@@ -47,7 +47,7 @@ export interface Block {
47
47
  detail?: string;
48
48
  /** Structured remediation shown between an error's body and its detail. */
49
49
  hint?: string;
50
- /** Tool, connection, or synthetic command lifecycle status. */
50
+ /** Tool, connection, or completed command lifecycle status. */
51
51
  status?: ToolStatus;
52
52
  /** When true, treat `body` as pre-styled and only wrap + indent it. */
53
53
  preformatted?: boolean;
@@ -108,6 +108,10 @@ export interface ToolGroupItem {
108
108
  export interface RenderBlockContext {
109
109
  /** Current shared square-pulse frame for live activity blocks. */
110
110
  activityPulse: string;
111
+ /** An open setup panel owns the pulse, so a running command's gutter holds still. */
112
+ setupFlowOpen?: boolean;
113
+ /** A transient panel keeps its command echo live without a progress glyph. */
114
+ transientPanelOpen?: boolean;
111
115
  /** Whether prose responses are parsed and styled as Markdown. */
112
116
  renderMarkdown?: boolean;
113
117
  /**
@@ -1,8 +1,8 @@
1
- import{renderMarkdown}from"./markdown.js";import{isPromptControlCommand}from"./prompt-commands.js";import{elisionText}from"./rail.js";import{renderTool}from"./tool-rows.js";import{clipVisible,sliceVisible,visibleLength,wrapVisibleLine}from"#cli/ui/terminal-text.js";function renderBlockLines(e,t,n,r){let i=e.depth??0,a=nestingPrefix(i,n),o=renderBody(e,Math.max(8,t-visibleLength(a)),n,r);if(e.closesRail===!0&&i>0){let e=closingPrefix(i,n);return o.map((t,n)=>`${n===o.length-1?e:a}${t}`)}return o.map(e=>`${a}${e}`)}function nestingPrefix(e,t){return e<=0?``:` ${`${t.colors.dim(t.glyph.rule)} `.repeat(e)}`}function closingPrefix(e,t){return` ${`${t.colors.dim(t.glyph.rule)} `.repeat(e-1)}${t.colors.dim(t.glyph.corner)} `}function renderBody(e,t,n,r){if(e.elided!==void 0&&e.kind===`subagent-step`)return[` ${elisionText(e.elided,n)}`];switch(e.kind){case`user`:return renderUser(e,t,n);case`assistant`:case`subagent-step`:return renderProse(e,t,n,r);case`reasoning`:return renderReasoning(e,t,n);case`tool`:case`subagent-tool`:return renderTool(e,t,n,r);case`error`:return renderError(e,t,n);case`notice`:return renderNotice(e,t,n);case`warning`:return renderWarning(e,t,n);case`result`:return renderResult(e,t,n);case`flow`:return renderFlow(e,t,n);case`command`:return renderCommand(e,n);case`question`:case`connection-auth`:return renderPreformatted(e,t,n);case`sandbox`:return renderSandbox(e,t,n,r);case`log`:return renderLog(e,t,n);case`subagent`:return renderSubagentHeader(e,t,n,r);case`subagent-close`:{let r=` ${n.colors.dim(n.glyph.corner)}`;return e.body!==void 0&&e.body.length>0?[clipVisible(`${r} ${n.colors.dim(e.body)}`,Math.max(1,t))]:[r]}case`turn-stats`:return renderTurnStats(e,t,n);case`session-boundary`:case`agent-header`:return(e.body??``).split(`
2
- `)}}function renderUser(e,t,n){let r=e.promptOrigin===`steer`?n.colors.yellow(n.glyph.user):n.colors.cyan(n.glyph.user);return wrap(e.body??``,t-2).map(e=>`${r} ${e}`)}function renderProse(e,t,n,r){let i=[],a=e.kind===`subagent-step`;if(a&&e.collapsed===!0){let r=firstNonEmptyLine(e.body)??(e.reasoning===void 0?void 0:firstNonEmptyLine(e.reasoning));return r===void 0?[]:[n.colors.dim(sliceVisible(r,Math.max(1,t)))]}let o=r.renderMarkdown??!0,s=a?``:`${n.colors.bold(n.glyph.brand)} `,c=a?``:` `;e.reasoning&&e.reasoning.trim().length>0&&i.push(...renderReasoningLines(e.reasoning,t,n));let l=(e.body??``).trim();return l.length===0&&i.length===0?[`${s}${n.colors.dim(`thinking${n.glyph.ellipsis}`)}`]:(l.length>0&&(o?renderMarkdown(l,t-c.length):l).split(`
1
+ import{isPromptControlCommand}from"./prompt-commands.js";import{renderMarkdown}from"./markdown.js";import{elisionText}from"./rail.js";import{renderTool}from"./tool-rows.js";import{clipVisible,sliceVisible,visibleLength,wrapVisibleLine}from"#cli/ui/terminal-text.js";function renderBlockLines(e,t,n,r){let i=e.depth??0,a=nestingPrefix(i,n),o=renderBody(e,Math.max(8,t-visibleLength(a)),n,r);if(e.closesRail===!0&&i>0){let e=closingPrefix(i,n);return o.map((t,n)=>`${n===o.length-1?e:a}${t}`)}return o.map(e=>`${a}${e}`)}function nestingPrefix(e,t){return e<=0?``:` ${`${t.colors.dim(t.glyph.rule)} `.repeat(e)}`}function closingPrefix(e,t){return` ${`${t.colors.dim(t.glyph.rule)} `.repeat(e-1)}${t.colors.dim(t.glyph.corner)} `}function renderBody(e,t,n,r){if(e.elided!==void 0&&e.kind===`subagent-step`)return[` ${elisionText(e.elided,n)}`];switch(e.kind){case`user`:return renderUser(e,t,n);case`assistant`:case`subagent-step`:return renderProse(e,t,n,r);case`reasoning`:return renderReasoning(e,t,n);case`tool`:case`subagent-tool`:return renderTool(e,t,n,r);case`error`:return renderError(e,t,n);case`notice`:return renderNotice(e,t,n);case`warning`:return renderWarning(e,t,n);case`result`:return renderResult(e,t,n);case`flow`:return renderFlow(e,t,n);case`command`:return renderCommand(e,n,r);case`question`:case`connection-auth`:return renderPreformatted(e,t,n);case`sandbox`:return renderSandbox(e,t,n,r);case`log`:return renderLog(e,t,n);case`subagent`:return renderSubagentHeader(e,t,n,r);case`subagent-close`:{let r=` ${n.colors.dim(n.glyph.corner)}`;return e.body!==void 0&&e.body.length>0?[clipVisible(`${r} ${n.colors.dim(e.body)}`,Math.max(1,t))]:[r]}case`turn-stats`:return renderTurnStats(e,t,n);case`session-boundary`:case`agent-header`:return(e.body??``).split(`
2
+ `)}}function renderUser(e,t,n){let r=e.promptOrigin===`steer`?n.colors.yellow(n.glyph.user):n.glyph.user;return wrap(e.body??``,t-2).map(e=>`${r} ${n.colors.bold(e)}`)}function renderProse(e,t,n,r){let i=[],a=e.kind===`subagent-step`;if(a&&e.collapsed===!0){let r=firstNonEmptyLine(e.body)??(e.reasoning===void 0?void 0:firstNonEmptyLine(e.reasoning));return r===void 0?[]:[n.colors.dim(sliceVisible(r,Math.max(1,t)))]}let o=r.renderMarkdown??!0,s=a?``:`${n.colors.bold(n.glyph.brand)} `,c=a?``:` `;e.reasoning&&e.reasoning.trim().length>0&&i.push(...renderReasoningLines(e.reasoning,t,n));let l=(e.body??``).trim();return l.length===0&&i.length===0?[`${s}${n.colors.dim(`thinking${n.glyph.ellipsis}`)}`]:(l.length>0&&(o?renderMarkdown(l,t-c.length):l).split(`
3
3
  `).flatMap(e=>wrapVisibleLine(e,t-c.length)).forEach((e,t)=>{t===0&&!a&&i.length===0?i.push(`${s}${e}`):i.push(`${c}${e}`)}),i.length>0?i:[`${s}`])}function renderReasoning(e,t,n){return e.collapsed?[`${n.colors.gray(n.glyph.reasoning)} ${n.colors.dim(e.title??`thinking`)}`]:renderReasoningLines(e.body??``,t,n,n.glyph.reasoning)}function renderReasoningLines(e,t,n,r){let i=r?2:0,a=wrap(e.trim(),t-i);return a.length===0?[]:a.map((e,t)=>`${r?t===0?`${n.colors.gray(r)} `:` `:``}${n.colors.dim(n.colors.italic(e))}`)}function renderError(e,t,n){let r=n.colors.red(n.colors.bold(n.glyph.error)),i=e.title??`Error`,a=[`${r} ${n.colors.red(n.colors.bold(i))}`];for(let r of wrap(e.body??``,t-2))a.push(` ${colorizeError(r,n)}`);if(e.hint!==void 0&&e.hint.trim().length>0)for(let[r,i]of wrap(e.hint,t-4).entries()){let e=r===0?`${n.glyph.arrow} `:` `;a.push(` ${n.colors.cyan(`${e}${i}`)}`)}return a.push(...renderErrorDetail(e.detail,t,n)),a}function renderErrorDetail(e,t,n){if(e===void 0||e.trim().length===0)return[];let r=e.split(`
4
- `),i=r.slice(0,12),a=i.map(e=>` ${n.colors.dim(truncatePlain(e,Math.max(1,t-2)))}`),o=r.length-i.length;return o>0&&a.push(` ${n.colors.dim(`${n.glyph.ellipsis} +${o} more line${o===1?``:`s`}`)}`),a}const URL_PATTERN=/(https?:\/\/\S+)/u;function colorizeError(e,t){return URL_PATTERN.test(e)?e.split(URL_PATTERN).map((e,n)=>n%2==1?t.colors.cyan(e):t.colors.red(e)).join(``):t.colors.red(e)}function renderNotice(e,t,n){let r=n.colors.dim(n.glyph.dot),i=wrap(e.body??``,t-2);return i.length===0?[r]:i.map(e=>`${r} ${n.colors.dim(e)}`)}function renderAttentionRows(e,t,n){let r=n.colors.yellow(n.glyph.warning);return wrap(e,t-2).map((e,t)=>`${t===0?r:` `} ${paintCommands(e,n)}`)}function renderWarning(e,t,n){return renderAttentionRows(e.body??``,t,n)}function paintCommands(e,t){return e.replace(/\/[a-z:-]+/g,e=>isPromptControlCommand(e)?t.colors.blue(e):e)}function renderCommand(e,t){let n=t.colors,r=e.status===`error`?`${n.red(t.glyph.error)} `:``;return[`${n.cyan(t.glyph.user)} ${r}${n.bold(e.body??``)}`]}function paintOutcomeMarker(e,t,n=e){let r=n.trimStart().slice(0,1);return r===`✓`?e.replace(r,t.colors.green(t.glyph.success)):r===`⨯`?e.replace(r,t.colors.red(t.glyph.error)):r===`–`?e.replace(r,t.colors.yellow(t.glyph.dash)):e}function renderFlow(e,t,n){let r=n.colors,i=e.title??`info`,a=i===`success`?r.green(n.glyph.success):i===`warning`?r.yellow(n.glyph.warning):i===`error`?r.red(n.glyph.error):r.dim(n.glyph.dot),o=wrap(e.body??``,t-2),paint=e=>i===`info`?r.dim(e):paintOutcomeMarker(e,n);return o.map((e,t)=>`${t===0?a:` `} ${paint(e)}`)}function renderResult(e,t,n){let r=wrap(e.body??``,t-7);if(e.status===`done`){let e=n.colors.dim(n.glyph.elbow),t=n.colors.green(n.glyph.success),i=n.colors.dim(n.glyph.rule),a=n.colors.dim(n.glyph.corner);return r.length===0?[` ${e} ${t}`]:r.map((n,o)=>o===0?` ${e} ${t} ${n}`:` ${o===r.length-1?a:i} ${n}`)}let i=n.colors.dim(n.glyph.elbow);if(r.length===0)return[` ${i}`];let dim=e=>paintOutcomeMarker(n.colors.dim(e.replaceAll(`\x1B[22m`,`\x1B[22m\x1B[2m`)),n,e);return r.map((e,t)=>t===0?` ${i} ${dim(e)}`:` ${dim(e)}`)}function renderPreformatted(e,t,n){let r=e.kind===`connection-auth`?n.colors.yellow(n.glyph.connection):n.colors.yellow(n.colors.bold(n.glyph.question)),i=e.kind===`question`?` `:` `,a=wrap(e.title??``,t-2),o=a.length===0?[`${r} `]:a.map((e,t)=>t===0?`${r} ${n.colors.bold(e)}`:` ${n.colors.bold(e)}`);for(let n of(e.body??``).split(`
4
+ `),i=r.slice(0,12),a=i.map(e=>` ${n.colors.dim(truncatePlain(e,Math.max(1,t-2)))}`),o=r.length-i.length;return o>0&&a.push(` ${n.colors.dim(`${n.glyph.ellipsis} +${o} more line${o===1?``:`s`}`)}`),a}const URL_PATTERN=/(https?:\/\/\S+)/u;function colorizeError(e,t){return URL_PATTERN.test(e)?e.split(URL_PATTERN).map((e,n)=>n%2==1?t.colors.cyan(e):t.colors.red(e)).join(``):t.colors.red(e)}function renderNotice(e,t,n){let r=n.colors.dim(n.glyph.dot),i=wrap(e.body??``,t-2);return i.length===0?[r]:i.map(e=>`${r} ${n.colors.dim(e)}`)}function renderAttentionRows(e,t,n){let r=n.colors.yellow(n.glyph.warning);return wrap(e,t-2).map((e,t)=>`${t===0?r:` `} ${paintCommands(e,n)}`)}function renderWarning(e,t,n){return renderAttentionRows(e.body??``,t,n)}function paintCommands(e,t){return e.replace(/\/[a-z:-]+/g,e=>isPromptControlCommand(e)?t.colors.blue(e):e)}function renderCommand(e,t,n){let r=t.colors;return[`${e.live===!0?n.transientPanelOpen===!0?t.glyph.user:n.setupFlowOpen===!0?r.gray(t.glyph.square):r.gray(n.activityPulse):e.status===`done`?r.gray(`*`):t.glyph.user} ${e.result===void 0?e.body??``:r.dim(e.result)}`]}function renderFlow(e,t,n){let r=wrap(e.body??``,t-2),i=n.colors.dim(`*`);return r.map((e,t)=>`${t===0?i:` `} ${e}`)}function renderResult(e,t,n){let r=wrap(e.body??``,t-7),i=n.colors.dim(n.glyph.elbow);if(r.length===0)return[` ${i}`];let dim=e=>n.colors.dim(e.replaceAll(`\x1B[22m`,`\x1B[22m\x1B[2m`));return r.map((e,t)=>t===0?` ${i} ${dim(e)}`:` ${dim(e)}`)}function renderPreformatted(e,t,n){let r=e.kind===`connection-auth`?n.colors.yellow(n.glyph.connection):n.colors.yellow(n.colors.bold(n.glyph.question)),i=e.kind===`question`?` `:` `,a=wrap(e.title??``,t-2),o=a.length===0?[`${r} `]:a.map((e,t)=>t===0?`${r} ${n.colors.bold(e)}`:` ${n.colors.bold(e)}`);for(let n of(e.body??``).split(`
5
5
  `))for(let e of wrapVisibleLine(n,Math.max(1,t-i.length)))o.push(`${i}${e}`);return o}function renderSandbox(e,t,n,r){let i=n.colors.cyan(n.glyph.rule),a=n.colors.dim(`sandbox ${n.glyph.dot} `),o=visibleLength(a),s=` `.repeat(o),c=r.previous?.kind===`sandbox`,l=(e.body??``).split(`
6
6
  `),u=[];for(let e of l){let r=wrapVisibleLine(e,Math.max(1,t-2-o));for(let e of r){let t=u.length===0&&!c?a:s;u.push(`${i} ${t}${n.colors.gray(e)}`)}}return u.length>0?u:[`${i}`]}function renderLog(e,t,n){let r=e.title===`stderr`,i=r?n.colors.red:n.colors.gray,a=n.colors.dim(n.glyph.rule),o=r?`stderr`:`stdout`,s=[`${n.colors.dim(n.glyph.reasoning)} ${n.colors.dim(o)}`];e.elided!==void 0&&e.elided>0&&s.push(`${a} ${elisionText(e.elided,n)}`);for(let r of(e.body??``).split(`
7
- `))for(let e of wrapVisibleLine(r,Math.max(1,t-2)))s.push(`${a} ${n.colors.dim(i(e))}`);return s}function renderTurnStats(e,t,n){let r=`${n.glyph.corner} ${e.body??``}`;return[n.colors.dim(truncatePlain(r,Math.max(1,t)))]}function renderSubagentHeader(e,t,n,r){let i=truncatePlain(e.title===void 0||e.title===`agent`?`self`:e.title,Math.max(8,t-16)),a=e.subtitle!==void 0&&e.subtitle.startsWith(`#`),o=a?`:${e.subtitle.slice(1)}`:``,s=` ${e.status===`done`?n.colors.green(n.glyph.subagent):r.activityPulse.trim().length>0?n.colors.orange(n.glyph.subagent):n.colors.dim(n.glyph.subagent)} subagent(${i}${o})`;return!a&&e.subtitle!==void 0&&e.subtitle.length>0&&(s+=` ${n.colors.dim(e.subtitle)}`),[s]}function firstNonEmptyLine(e){return e===void 0?void 0:e.split(/\r?\n/u).find(e=>e.trim().length>0)?.trim()}function wrap(e,t){return e.trim().length===0?[]:e.split(`
7
+ `))for(let e of wrapVisibleLine(r,Math.max(1,t-2)))s.push(`${a} ${n.colors.dim(i(e))}`);return s}function renderTurnStats(e,t,n){let r=e.body??``;return[n.colors.dim(truncatePlain(r,Math.max(1,t)))]}function renderSubagentHeader(e,t,n,r){let i=truncatePlain(e.title===void 0||e.title===`agent`?`self`:e.title,Math.max(8,t-16)),a=e.subtitle!==void 0&&e.subtitle.startsWith(`#`),o=a?`:${e.subtitle.slice(1)}`:``,s=` ${e.status===`done`?n.colors.green(n.glyph.subagent):r.activityPulse.trim().length>0?n.colors.orange(n.glyph.subagent):n.colors.dim(n.glyph.subagent)} subagent(${i}${o})`;return!a&&e.subtitle!==void 0&&e.subtitle.length>0&&(s+=` ${n.colors.dim(e.subtitle)}`),[s]}function firstNonEmptyLine(e){return e===void 0?void 0:e.split(/\r?\n/u).find(e=>e.trim().length>0)?.trim()}function wrap(e,t){return e.trim().length===0?[]:e.split(`
8
8
  `).flatMap(e=>wrapVisibleLine(e,Math.max(1,t)))}function truncatePlain(e,t){return visibleLength(e)<=t?e:sliceVisible(e,t)}export{renderAttentionRows,renderBlockLines};
@@ -0,0 +1,11 @@
1
+ import type { Theme } from "./theme.js";
2
+ import { type FlowPanelState } from "./setup-panel.js";
3
+ /** Temporary setup content enclosed by a drawer and its navigation controls. */
4
+ export interface FlowDrawer {
5
+ readonly rows: string[];
6
+ readonly controls: string[];
7
+ }
8
+ /** Frames an active setup flow above the terminal footer. */
9
+ export declare function renderFlowDrawer(state: FlowPanelState, theme: Theme, width: number): FlowDrawer;
10
+ /** Frames a transient command panel with the same rules as a setup flow. */
11
+ export declare function renderTransientDrawer(body: readonly string[], controls: readonly string[], theme: Theme, width: number): FlowDrawer;
@@ -0,0 +1 @@
1
+ import{renderFlowPanel}from"./setup-panel.js";function renderFlowDrawer(e,t,n){let r=renderFlowPanel({...e,title:``},t,n),i=e.content.kind===`question`?r.lastIndexOf(``):-1,a=i===-1?[]:r.slice(i+1).map(e=>e.trimStart());return{rows:frameDrawer(i===-1?r:r.slice(0,i),t,n),controls:a}}function renderTransientDrawer(e,t,n,r){return{rows:frameDrawer(e,n,r),controls:t.map(e=>` ${n.colors.dim(e)}`)}}function frameDrawer(e,t,n){let r=t.colors.dim(t.glyph.dash.repeat(Math.max(1,n)));return[r,``,...e,``,r]}export{renderFlowDrawer,renderTransientDrawer};
@@ -1 +1 @@
1
- import{isPromptCommandAvailableFor}from"./prompt-commands.js";import{toErrorMessage}from"#shared/errors.js";const LOGIN_CONNECTIONS={vercel:`vercel`,chatgpt:`chatgpt`,"vercel-api-key":`ai-gateway-key`,"openai-api-key":`openai`,"anthropic-api-key":`anthropic`};function createPromptCommandHandler(e){return{async handle(t,n){let{target:r}=e;if(r.kind===`remote`&&!isPromptCommandAvailableFor(t.name,`remote`))return{message:`/${t.name} needs eve dev running the local server (it is not available with --url).`};if(t.name===`model`){if(t.argument.length===0)return{message:`Choose a model from the inline /model suggestions.`};if(r.kind!==`local`)return{message:`/model needs eve dev running the local server (it is not available with --url).`};let n=r.agentRoot??r.workspaceRoot;try{let{modelChangeRefusalForUneditableModel:r}=await import(`#setup/flows/model.js`),{changeAgentModel:i,changeAgentModelSettings:a,formatApplyModelOutcome:o,formatApplyModelSettingsOutcome:s}=await import(`#setup/flows/model-source-change.js`),[c,l,...u]=t.argument.split(/\s+/u);if(c===void 0||u.length>0||l!==void 0&&![`default`,`none`,`minimal`,`low`,`medium`,`high`,`xhigh`].includes(l))return{message:"Use `/model provider/model [default|none|minimal|low|medium|high|xhigh]`."};let d=await(e.modelChangeRefusal??r)(n);return d===null?l===void 0?{message:o(await(e.applyModel??i)({appRoot:n,slug:c}))}:{message:s(await a({appRoot:n,patch:{model:{kind:`set`,value:c},reasoning:l==="default"?{kind:`remove`}:{kind:`set`,value:l},gatewayServiceTier:{kind:`keep`}}}))}:{message:d}}catch(e){return{message:`Couldn't change the model: ${toErrorMessage(e)}`}}}if(t.name===`add`&&t.argument.length===0)return{message:`Choose an integration from the inline /add suggestions.`};let i=t.name===`login`&&t.argument.length>0?LOGIN_CONNECTIONS[t.argument]:void 0;if(t.name===`login`&&t.argument.length>0&&i===void 0)return{message:"Use `/login vercel|chatgpt|vercel-api-key|openai-api-key|anthropic-api-key`."};let a=n.renderer.setupFlow;if(a===void 0)return{message:`/${t.name} is not supported by this renderer.`};let o;try{o=await import(`./setup-commands.js`)}catch(e){return{message:`/${t.name} failed: ${toErrorMessage(e)}`}}let{runTuiSetupCommand:s,SETUP_FLOW_CONFIG:c}=o,l=c[t.name];a.begin(l.title,l.indicator);let u=!0;try{let o={command:t.name,appRoot:r.workspaceRoot,renderer:a,withExclusiveTerminal:n.withExclusiveTerminal,chatGptAccountLabel:n.chatGptAccountLabel};r.agentRoot!==void 0&&(o.agentRoot=r.agentRoot),n.initialModelStep!==void 0&&(o.initialModelStep=n.initialModelStep),n.onOnboardingScreen!==void 0&&(o.onOnboardingScreen=n.onOnboardingScreen),t.name===`add`&&(o.initialRegistryAddress=t.argument),i!==void 0&&(o.initialLoginConnection=i),e.flows!==void 0&&(o.flows=e.flows);let c=await s(o);u=c.preserveFlowDiagnostics;let{preserveFlowDiagnostics:l,partial:d,...f}=c;return n.settleOutcome===void 0?f:await n.settleOutcome(f)}finally{a.end({preserveDiagnostics:u})}}}}export{createPromptCommandHandler};
1
+ import{isPromptCommandAvailableFor}from"./prompt-commands.js";import{LOGIN_CONNECTION_COMMAND_HINT,loginConnectionForCommand}from"#setup/flows/model-login-options.js";import{toErrorMessage}from"#shared/errors.js";function createPromptCommandHandler(e){return{async handle(t,n){let{target:r}=e;if(r.kind===`remote`&&!isPromptCommandAvailableFor(t.name,`remote`))return{message:`/${t.name} needs eve dev running the local server (it is not available when connected to a remote agent).`};if(t.name===`model`){if(t.argument.length===0)return{message:`Choose a model from the inline /model suggestions.`};if(r.kind!==`local`)return{message:`/model needs eve dev running the local server (it is not available when connected to a remote agent).`};let n=r.agentRoot??r.workspaceRoot,i=modelFailure("Use `/model provider/model [default|none|minimal|low|medium|high|xhigh]`.");try{let{modelChangeRefusalForUneditableModel:r}=await import(`#setup/flows/model.js`),{changeAgentModel:a,changeAgentModelSettings:o}=await import(`#setup/flows/model-source-change.js`),[s,c,...l]=t.argument.split(/\s+/u);if(s===void 0||l.length>0||c!==void 0&&![`default`,`none`,`minimal`,`low`,`medium`,`high`,`xhigh`].includes(c))return i;let u=await(e.modelChangeRefusal??r)(n);if(u!==null)return modelFailure(u);let d=c===void 0?s:`${s} ${c}`;if(c!==void 0){let e=await o({appRoot:n,patch:{model:{kind:`set`,value:s},reasoning:c==="default"?{kind:`remove`}:{kind:`set`,value:c},gatewayServiceTier:{kind:`keep`}}});return e.kind===`rejected`?modelFailure(e.message):e.kind===`unchanged`?{message:``,summary:`Model already set to ${d}`}:{message:``,summary:`Model set to ${d}`}}let f=await(e.applyModel??a)({appRoot:n,slug:s});return f.kind===`rejected`?modelFailure(f.message):f.kind===`unchanged`?{message:``,summary:`Model already set to ${f.model}`}:{message:``,summary:`Model set to ${f.to}`}}catch(e){return modelFailure(toErrorMessage(e))}}if(t.name===`add`&&t.argument.length===0)return{message:`Choose an integration from the inline /add suggestions.`};let i=t.name===`login`&&t.argument.length>0?loginConnectionForCommand(t.argument):void 0;if(t.name===`login`&&t.argument.length>0&&i===void 0)return{message:`Use \`/login ${LOGIN_CONNECTION_COMMAND_HINT}\`.`};let a=n.renderer.setupFlow;if(a===void 0)return{message:`/${t.name} is not supported by this renderer.`};let o;try{o=await import(`./setup-commands.js`)}catch(e){return{message:`/${t.name} failed: ${toErrorMessage(e)}`}}let{runTuiSetupCommand:s}=o;a.begin(``);let c=!0;try{let o={command:t.name,appRoot:r.workspaceRoot,renderer:a,withExclusiveTerminal:n.withExclusiveTerminal,chatGptAccountLabel:n.chatGptAccountLabel};r.agentRoot!==void 0&&(o.agentRoot=r.agentRoot),n.initialModelStep!==void 0&&(o.initialModelStep=n.initialModelStep),n.onOnboardingScreen!==void 0&&(o.onOnboardingScreen=n.onOnboardingScreen),t.name===`add`&&(o.initialRegistryAddress=t.argument),i!==void 0&&(o.initialLoginConnection=i),e.flows!==void 0&&(o.flows=e.flows);let l=await s(o);c=l.preserveFlowDiagnostics;let{preserveFlowDiagnostics:u,partial:d,...f}=l;return n.settleOutcome===void 0?f:await n.settleOutcome(f)}finally{a.end({preserveDiagnostics:c})}}}}function modelFailure(e){return{message:e,summary:`Couldn't change the model`,failed:!0}}export{createPromptCommandHandler};
@@ -41,9 +41,203 @@ export interface PromptCommandSpec {
41
41
  readonly argumentHint?: string;
42
42
  /** Accepts a trailing argument (enables `/name <arg>` parsing). */
43
43
  readonly takesArgument: boolean;
44
+ /** Whether recalling this command would reopen a modal or take over prompt navigation. */
45
+ readonly history: "keep" | "omit";
46
+ /** Inline argument suggestions, when this command has a catalog-backed grammar. */
47
+ readonly typeahead?: {
48
+ readonly maxArguments: number;
49
+ readonly loadingLabel: string;
50
+ };
44
51
  /** Maps a recognized invocation to its parsed command. */
45
52
  readonly build: (argument: string) => PromptCommand;
46
53
  }
54
+ /**
55
+ * Every slash command the prompt accepts, in typeahead display order. One
56
+ * module owns the command list so the runner's dispatch, the renderer's
57
+ * transcript-echo suppression, and command discovery cannot drift apart.
58
+ */
59
+ declare const PROMPT_COMMAND_DEFINITIONS: ({
60
+ name: string;
61
+ history: "omit";
62
+ aliases: never[];
63
+ description: string;
64
+ argumentHint: string;
65
+ takesArgument: true;
66
+ typeahead: {
67
+ maxArguments: number;
68
+ loadingLabel: string;
69
+ };
70
+ build: (argument: string) => {
71
+ type: "extension";
72
+ name: "model";
73
+ argument: string;
74
+ };
75
+ targets: "local"[];
76
+ } | {
77
+ name: string;
78
+ history: "keep";
79
+ aliases: never[];
80
+ description: string;
81
+ takesArgument: false;
82
+ build: () => {
83
+ type: "reset";
84
+ };
85
+ targets: ("local" | "remote")[];
86
+ argumentHint?: undefined;
87
+ typeahead?: undefined;
88
+ } | {
89
+ name: string;
90
+ history: "keep";
91
+ aliases: string[];
92
+ description: string;
93
+ takesArgument: false;
94
+ build: () => {
95
+ type: "clear";
96
+ };
97
+ targets: ("local" | "remote")[];
98
+ argumentHint?: undefined;
99
+ typeahead?: undefined;
100
+ } | {
101
+ name: string;
102
+ history: "keep";
103
+ aliases: never[];
104
+ description: string;
105
+ takesArgument: false;
106
+ build: () => {
107
+ type: "compact";
108
+ };
109
+ targets: ("local" | "remote")[];
110
+ argumentHint?: undefined;
111
+ typeahead?: undefined;
112
+ } | {
113
+ name: string;
114
+ history: "keep";
115
+ aliases: never[];
116
+ description: string;
117
+ takesArgument: false;
118
+ build: () => {
119
+ type: "cancel";
120
+ };
121
+ targets: ("local" | "remote")[];
122
+ argumentHint?: undefined;
123
+ typeahead?: undefined;
124
+ } | {
125
+ name: string;
126
+ history: "omit";
127
+ aliases: never[];
128
+ description: string;
129
+ argumentHint: string;
130
+ takesArgument: true;
131
+ typeahead: {
132
+ maxArguments: number;
133
+ loadingLabel: string;
134
+ };
135
+ build: (argument: string) => {
136
+ type: "extension";
137
+ name: "login";
138
+ argument: string;
139
+ };
140
+ targets: "local"[];
141
+ } | {
142
+ name: string;
143
+ history: "omit";
144
+ aliases: never[];
145
+ description: string;
146
+ takesArgument: true;
147
+ typeahead: {
148
+ maxArguments: number;
149
+ loadingLabel: string;
150
+ };
151
+ build: (argument: string) => {
152
+ type: "extension";
153
+ name: "add";
154
+ argument: string;
155
+ };
156
+ targets: "local"[];
157
+ argumentHint?: undefined;
158
+ } | {
159
+ name: string;
160
+ history: "keep";
161
+ aliases: never[];
162
+ description: string;
163
+ takesArgument: false;
164
+ build: () => {
165
+ type: "extension";
166
+ name: "deploy";
167
+ argument: string;
168
+ };
169
+ targets: "local"[];
170
+ argumentHint?: undefined;
171
+ typeahead?: undefined;
172
+ } | {
173
+ name: string;
174
+ history: "omit";
175
+ aliases: never[];
176
+ description: string;
177
+ argumentHint: string;
178
+ takesArgument: true;
179
+ build: (argument: string) => {
180
+ type: "traces";
181
+ argument: string;
182
+ };
183
+ targets: "local"[];
184
+ typeahead?: undefined;
185
+ } | {
186
+ name: string;
187
+ history: "omit";
188
+ aliases: never[];
189
+ description: string;
190
+ argumentHint: string;
191
+ takesArgument: true;
192
+ typeahead: {
193
+ maxArguments: number;
194
+ loadingLabel: string;
195
+ };
196
+ build: (argument: string) => {
197
+ type: "loglevel";
198
+ argument: string;
199
+ };
200
+ targets: ("local" | "remote")[];
201
+ } | {
202
+ argumentHint?: undefined;
203
+ typeahead?: undefined;
204
+ name: string;
205
+ history: "omit";
206
+ aliases: never[];
207
+ description: string;
208
+ takesArgument: false;
209
+ build: () => {
210
+ type: "info";
211
+ };
212
+ targets: "local"[];
213
+ } | {
214
+ argumentHint?: undefined;
215
+ typeahead?: undefined;
216
+ name: string;
217
+ history: "omit";
218
+ aliases: never[];
219
+ description: string;
220
+ takesArgument: false;
221
+ build: () => {
222
+ type: "help";
223
+ };
224
+ targets: ("local" | "remote")[];
225
+ } | {
226
+ argumentHint?: undefined;
227
+ typeahead?: undefined;
228
+ name: string;
229
+ history: "keep";
230
+ aliases: string[];
231
+ description: string;
232
+ takesArgument: false;
233
+ build: () => {
234
+ type: "exit";
235
+ };
236
+ targets: ("local" | "remote")[];
237
+ })[];
238
+ export type ArgumentTypeaheadCommand = Extract<(typeof PROMPT_COMMAND_DEFINITIONS)[number], {
239
+ typeahead: object;
240
+ }>["name"];
47
241
  export declare const PROMPT_COMMANDS: readonly PromptCommandSpec[];
48
242
  export declare function promptCommandsFor(target: PromptCommandTarget): readonly PromptCommandSpec[];
49
243
  /** Whether a command runs against this target — the one authority dispatch shares with discovery. */
@@ -57,6 +251,11 @@ export declare function isPromptCommandAvailableFor(name: PromptCommandExtension
57
251
  * message.
58
252
  */
59
253
  export declare function parsePromptCommand(prompt: string): PromptCommand | null;
254
+ /** Resolve an invocation and its history policy from the same command definition. */
255
+ export declare function promptCommandSpec(prompt: string): {
256
+ spec: PromptCommandSpec;
257
+ argument: string;
258
+ } | undefined;
60
259
  /** True for prompts that are commands, which never echo as user messages. */
61
260
  export declare function isPromptControlCommand(prompt: string): boolean;
62
261
  /**
@@ -1,2 +1,2 @@
1
- const PROMPT_COMMAND_DEFINITIONS=[{name:`model`,aliases:[],description:`Choose a model, speed, and reasoning`,argumentHint:`[provider/model]`,takesArgument:!0,build:e=>({type:`extension`,name:`model`,argument:e}),targets:[`local`]},{name:`reset`,aliases:[],description:`Start a fresh session`,takesArgument:!1,build:()=>({type:`reset`}),targets:[`local`,`remote`]},{name:`clear`,aliases:[`new`],description:`Clear the current session context`,takesArgument:!1,build:()=>({type:`clear`}),targets:[`local`,`remote`]},{name:`compact`,aliases:[],description:`Compact the current session context`,takesArgument:!1,build:()=>({type:`compact`}),targets:[`local`,`remote`]},{name:`cancel`,aliases:[],description:`Cancel the running turn`,takesArgument:!1,build:()=>({type:`cancel`}),targets:[`local`,`remote`]},{name:`login`,aliases:[],description:`Connect a model provider`,argumentHint:`[connection]`,takesArgument:!0,build:e=>({type:`extension`,name:`login`,argument:e}),targets:[`local`]},{name:`add`,aliases:[],description:`Add an integration from the registry`,takesArgument:!0,build:e=>({type:`extension`,name:`add`,argument:e}),targets:[`local`]},{name:`deploy`,aliases:[],description:`Deploy the agent to Vercel`,takesArgument:!1,build:()=>({type:`extension`,name:`deploy`,argument:``}),targets:[`local`]},{name:`traces`,aliases:[],description:`Open the local trace viewer`,argumentHint:`[trace]`,takesArgument:!0,build:e=>({type:`traces`,argument:e}),targets:[`local`]},{name:`loglevel`,aliases:[],description:`Show or hide captured stdout/stderr/sandbox logs`,argumentHint:`[all|stderr|sandbox|none]`,takesArgument:!0,build:e=>({type:`loglevel`,argument:e}),targets:[`local`,`remote`]},{name:`info`,aliases:[],description:`Show application and messaging information`,takesArgument:!1,build:()=>({type:`info`}),targets:[`local`]},{name:`help`,aliases:[],description:`Show available commands`,takesArgument:!1,build:()=>({type:`help`}),targets:[`local`,`remote`]},{name:`exit`,aliases:[`quit`],description:`Quit the TUI`,takesArgument:!1,build:()=>({type:`exit`}),targets:[`local`,`remote`]}],PROMPT_COMMANDS=PROMPT_COMMAND_DEFINITIONS;function promptCommandsFor(e){let t=PROMPT_COMMAND_DEFINITIONS.filter(t=>t.targets.some(t=>t===e));return e===`remote`?[...t.filter(e=>e.name===`help`),...t.filter(e=>e.name!==`help`)]:t}function isPromptCommandAvailableFor(e,t){return(PROMPT_COMMAND_DEFINITIONS.find(t=>t.name===e)?.targets)?.includes(t)??!1}function parsePromptCommand(e){let t=e.trim();if(!t.startsWith(`/`))return null;for(let e of PROMPT_COMMANDS)for(let n of[e.name,...e.aliases]){let r=`/${n}`;if(t===r)return e.build(``);if(e.takesArgument&&t.startsWith(`${r} `))return e.build(t.slice(r.length).trim())}return null}function isPromptControlCommand(e){return parsePromptCommand(e)!==null}function formatPromptCommandHelp(e=PROMPT_COMMANDS){let t=e.map(e=>{let t=e.argumentHint===void 0?``:` ${e.argumentHint}`,n=e.aliases.map(e=>` (/${e})`).join(``);return{invocation:`/${e.name}${t}${n}`,description:e.description}}),n=Math.max(...t.map(e=>e.invocation.length))+2;return t.map(e=>e.invocation.padEnd(n)+e.description).join(`
2
- `)}export{PROMPT_COMMANDS,formatPromptCommandHelp,isPromptCommandAvailableFor,isPromptControlCommand,parsePromptCommand,promptCommandsFor};
1
+ const PROMPT_COMMAND_DEFINITIONS=[{name:`model`,history:`omit`,aliases:[],description:`Choose a model, speed, and reasoning`,argumentHint:`[provider/model]`,takesArgument:!0,typeahead:{maxArguments:2,loadingLabel:`models`},build:e=>({type:`extension`,name:`model`,argument:e}),targets:[`local`]},{name:`reset`,history:`keep`,aliases:[],description:`Start a fresh session`,takesArgument:!1,build:()=>({type:`reset`}),targets:[`local`,`remote`]},{name:`clear`,history:`keep`,aliases:[`new`],description:`Clear the current session context`,takesArgument:!1,build:()=>({type:`clear`}),targets:[`local`,`remote`]},{name:`compact`,history:`keep`,aliases:[],description:`Compact the current session context`,takesArgument:!1,build:()=>({type:`compact`}),targets:[`local`,`remote`]},{name:`cancel`,history:`keep`,aliases:[],description:`Cancel the running turn`,takesArgument:!1,build:()=>({type:`cancel`}),targets:[`local`,`remote`]},{name:`login`,history:`omit`,aliases:[],description:`Connect a model provider`,argumentHint:`[connection]`,takesArgument:!0,typeahead:{maxArguments:1,loadingLabel:`connections`},build:e=>({type:`extension`,name:`login`,argument:e}),targets:[`local`]},{name:`add`,history:`omit`,aliases:[],description:`Add an integration from the registry`,takesArgument:!0,typeahead:{maxArguments:1,loadingLabel:`registry`},build:e=>({type:`extension`,name:`add`,argument:e}),targets:[`local`]},{name:`deploy`,history:`keep`,aliases:[],description:`Deploy the agent to Vercel`,takesArgument:!1,build:()=>({type:`extension`,name:`deploy`,argument:``}),targets:[`local`]},{name:`traces`,history:`omit`,aliases:[],description:`Open the local trace viewer`,argumentHint:`[trace]`,takesArgument:!0,build:e=>({type:`traces`,argument:e}),targets:[`local`]},{name:`loglevel`,history:`omit`,aliases:[],description:`Show or hide captured stdout/stderr/sandbox logs`,argumentHint:`[all|stderr|sandbox|none]`,takesArgument:!0,typeahead:{maxArguments:1,loadingLabel:`log levels`},build:e=>({type:`loglevel`,argument:e}),targets:[`local`,`remote`]},{name:`info`,history:`omit`,aliases:[],description:`Show application and messaging information`,takesArgument:!1,build:()=>({type:`info`}),targets:[`local`]},{name:`help`,history:`omit`,aliases:[],description:`Show available commands`,takesArgument:!1,build:()=>({type:`help`}),targets:[`local`,`remote`]},{name:`exit`,history:`keep`,aliases:[`quit`],description:`Quit the TUI`,takesArgument:!1,build:()=>({type:`exit`}),targets:[`local`,`remote`]}],PROMPT_COMMANDS=PROMPT_COMMAND_DEFINITIONS;function promptCommandsFor(e){let t=PROMPT_COMMAND_DEFINITIONS.filter(t=>t.targets.some(t=>t===e));return e===`remote`?[...t.filter(e=>e.name===`help`),...t.filter(e=>e.name!==`help`)]:t}function isPromptCommandAvailableFor(e,t){return(PROMPT_COMMAND_DEFINITIONS.find(t=>t.name===e)?.targets)?.includes(t)??!1}function parsePromptCommand(e){let t=promptCommandSpec(e);return t===void 0?null:t.spec.build(t.argument)}function promptCommandSpec(e){let t=e.trim();if(t.startsWith(`/`))for(let e of PROMPT_COMMANDS)for(let n of[e.name,...e.aliases]){let r=`/${n}`;if(t===r)return{spec:e,argument:``};if(e.takesArgument&&t.startsWith(`${r} `))return{spec:e,argument:t.slice(r.length).trim()}}}function isPromptControlCommand(e){return parsePromptCommand(e)!==null}function formatPromptCommandHelp(e=PROMPT_COMMANDS){let t=e.map(e=>{let t=e.argumentHint===void 0?``:` ${e.argumentHint}`,n=e.aliases.map(e=>` (/${e})`).join(``);return{invocation:`/${e.name}${t}${n}`,description:e.description}}),n=Math.max(...t.map(e=>e.invocation.length))+2;return t.map(e=>e.invocation.padEnd(n)+e.description).join(`
2
+ `)}export{PROMPT_COMMANDS,formatPromptCommandHelp,isPromptCommandAvailableFor,isPromptControlCommand,parsePromptCommand,promptCommandSpec,promptCommandsFor};
@@ -1,8 +1,7 @@
1
1
  /**
2
- * Pure rendering for the HITL question panel — the overlay a pending question
3
- * request (such as one from `ask_question` or `ctx.ask()`) opens above the
4
- * input area. A full-width rule separates
5
- * it from the transcript, options render as numbered rows with their
2
+ * Pure rendering for the HITL question drawer — a pending question request
3
+ * (such as one from `ask_question` or `ctx.ask()`) opens above the input area.
4
+ * Options render as numbered rows with their
6
5
  * descriptions always visible, and the trailing "Type your own answer" row
7
6
  * carries an inline elbow editor that receives focus the moment the cursor
8
7
  * rests on it (the provider-key grammar from the setup panel). The renderer
@@ -23,3 +22,4 @@ export interface QuestionPanelState {
23
22
  readonly caretVisible: boolean;
24
23
  }
25
24
  export declare function renderQuestionPanel(state: QuestionPanelState, theme: Theme, width: number): string[];
25
+ export declare function renderQuestionChoices(options: readonly AgentTUIInputOption[], cursor: number, theme: Theme, forceCursor?: boolean): string[];
@@ -1 +1 @@
1
- import{visibleLine}from"./line-editor.js";import{clipVisible,renderInputWithBlockCursor,wrapVisibleLine}from"#cli/ui/terminal-text.js";function selectedRow(e,t){let n=t.colors;return`${n.bold(` ${t.glyph.selectedPointer} ${e}`)} ${n.dim(`↵`)}`}function renderQuestionPanel(e,t,n){let r=t.colors,i=t.glyph,a=[];for(let t of e.prompt.split(/\r?\n/u))for(let e of wrapVisibleLine(t,Math.max(8,n-2)))a.push(` ${r.bold(e)}`);a.push(``);for(let[n,r]of e.options.entries())a.push(...optionRows(r.label,r.description,n,e,t));if(e.allowFreeform){let o=e.options.length,s=e.cursor===o;a.push(...optionRows(`Type your own answer`,void 0,o,e,t)),(s||e.editor.text.length>0)&&a.push(` ${r.dim(i.elbow)} ${freeformEditorBody(e,s,t,n)}`)}return a.push(``,` ${r.dim(`Esc to dismiss`)}`),a.map(e=>clipVisible(e,n))}function optionRows(e,t,n,r,i){let a=i.colors,o=`${n+1}. ${e}`,s=[r.cursor===n?` ${selectedRow(o,i)}`:` ${a.dim(`${n+1}.`)} ${e}`];return t!==void 0&&t.length>0&&s.push(` ${a.dim(t)}`),s}function freeformEditorBody(e,t,n,r){let i=n.colors,a=Math.max(4,r-12);if(!t){let t=visibleLine(e.editor,a,n.glyph.ellipsis);return i.dim(`${t.before}${t.under}${t.after}`)}return renderInputWithBlockCursor({...visibleLine(e.editor,a,n.glyph.ellipsis),visible:e.caretVisible,inverse:i.inverse})}export{renderQuestionPanel};
1
+ import{visibleLine}from"./line-editor.js";import{clipVisible,renderInputText,renderInputWithBlockCursor,wrapVisibleLine}from"#cli/ui/terminal-text.js";import{renderOptionRow}from"#setup/cli/option-row.js";const FREEFORM_ROW_LABEL=`Type your own answer…`;function renderQuestionPanel(e,t,n){let r=t.colors,i=[];for(let t of e.prompt.split(/\r?\n/u))for(let e of wrapVisibleLine(t,Math.max(8,n-2)))i.push(` ${r.bold(e)}`);return i.push(``),i.push(...renderQuestionChoices(e.options,e.cursor,t)),e.allowFreeform&&i.push(renderFreeformRow(e,t,n)),i.map(e=>clipVisible(e,n))}function renderQuestionChoices(e,t,n,r=!1){return e.flatMap((e,i)=>{let a=r||t===i,o=[` ${renderOptionRow({colors:n.colors,glyphs:{pointer:n.glyph.pointer,selectedPointer:n.glyph.selectedPointer,success:n.glyph.success,placeholder:n.glyph.option,dot:n.glyph.dot,warning:n.glyph.warning},label:e.label,isCursor:a,state:{kind:`available`,checked:!1},placeholder:!1,presentation:`minimal`})}`];return e.description!==void 0&&e.description.length>0&&o.push(` ${n.colors.dim(e.description)}`),o})}function renderFreeformRow(e,t,n){let r=t.colors,i=e.cursor===e.options.length,a=Math.max(4,n-6);if(!i){let n=visibleLine(e.editor,a,t.glyph.ellipsis),i=e.editor.text.length===0?FREEFORM_ROW_LABEL:`${n.before}${n.under}${n.after}`;return` ${r.dim(i)}`}let o=e.editor.text.length===0,s=o?{text:FREEFORM_ROW_LABEL,cursor:0}:e.editor;return` ${renderInputWithBlockCursor({...visibleLine(s,a,t.glyph.ellipsis),visible:e.caretVisible,inverse:r.inverse,render:o?e=>r.dim(renderInputText(e)):void 0})}`}export{renderQuestionChoices,renderQuestionPanel};
@@ -1,5 +1,5 @@
1
1
  import type { RegistryCatalogItem } from "#cli/commands/registry.js";
2
- import type { RegistrySessionResult } from "#setup/flows/registry-session.js";
2
+ import type { RegistrySessionOutcome, RegistrySessionResult } from "#setup/flows/registry-session.js";
3
3
  /** Builds the shared transient progress update for `/add` and initial onboarding. */
4
4
  export declare function registryItemProgress(renderer: {
5
5
  replaceContent?(content?: {
@@ -12,6 +12,17 @@ export declare function registryItemProgress(renderer: {
12
12
  setNavigation?(navigation: undefined): void;
13
13
  setStatus(status: string | undefined): void;
14
14
  }): (item: RegistryCatalogItem, index: number, total: number) => void;
15
- export declare function registryResultTone(result: RegistrySessionResult): "success" | "error" | undefined;
16
- /** Formats structured registry setup results after their temporary panel closes. */
17
- export declare function formatRegistrySessionResult(result: RegistrySessionResult): string;
15
+ export interface RegistryCommandOutcome {
16
+ failed: boolean;
17
+ /** Replaces the echoed `/add` once it settles. */
18
+ summary: string;
19
+ /** Detail hung under the summary; empty when the summary says it all. */
20
+ message: string;
21
+ }
22
+ /** The one-line record of an `/add` item left in place of its invocation. */
23
+ export declare function registryOutcomeSummary(outcome: RegistrySessionOutcome): string;
24
+ /**
25
+ * Summarizes an `/add` session in place of its echoed command. One item folds
26
+ * into the summary itself; several items list one marked row each.
27
+ */
28
+ export declare function registryCommandOutcome(result: RegistrySessionResult, notes?: readonly string[]): RegistryCommandOutcome;
@@ -1,4 +1,4 @@
1
- function registryItemProgress(e){return(t,n,r)=>{e.setNavigation?.(void 0),e.replaceContent?.(),e.setStatus(`Adding ${t.title??t.name} · ${n+1} of ${r}`)}}function registryResultTone(e){if(e.failures.length>0&&e.items.length===0)return`error`;if(!e.outcomes?.some(e=>e.kind===`cancelled`))return e.items.length>0?`success`:void 0}function joinedTitles(e){return e.length===0?``:e.length===1?e[0]:e.length===2?`${e[0]} and ${e[1]}`:`${e.slice(0,-1).join(`, `)}, and ${e.at(-1)}`}function formatFailureMessage(e){return e.replace(" Try again with `",`
2
- Try again with \``)}function resultHeadline(e,t){let n=e.filter(e=>e.kind===`failed`).length,r=e.filter(e=>e.kind===`cancelled`).length;if(n===0&&r===0)return`Added ${joinedTitles(t)}`;let i=e.length-n-r,a=[i>0?`${i} added`:void 0,n>0?`${n} failed`:void 0,r>0?`${r} cancelled`:void 0].filter(e=>e!==void 0);return`${e.length} ${e.length===1?`addition`:`additions`}: ${a.join(`, `)}`}function formatRegistrySessionResult(e){let t=e.outcomes??[...e.items.map(e=>({kind:`installed`,...e})),...e.failures.map(e=>({kind:`failed`,...e}))],n=[resultHeadline(t,e.items.map(e=>e.title))];for(let e of t){let t=e.kind===`installed`?`✓`:e.kind===`failed`?`⨯`:`–`;if(n.push(``,` ${t} ${e.title}`),e.kind===`cancelled`){n.push(` Cancelled.`);continue}if(e.kind===`failed`){n.push(...formatFailureMessage(e.message).split(`
3
- `).map(e=>` ${e}`));continue}if(e.facts.length===0&&e.output.length===0){n.push(` Installed.`);continue}let r=e.facts.filter(e=>e.label.length>0),i=Math.max(0,...r.map(e=>e.label.length));for(let t of e.facts)n.push(t.label.length===0?` ${t.value}`:` ${t.label.padEnd(i)} ${t.value}`);for(let t of e.output)n.push(` ${t}`)}return e.cancelled===!0&&n.push(``,`Setup stopped before the remaining selections were added.`),n.join(`
4
- `)}export{formatRegistrySessionResult,registryItemProgress,registryResultTone};
1
+ function registryItemProgress(e){return(t,n,r)=>{e.setNavigation?.(void 0),e.replaceContent?.(),e.setStatus(`Adding ${t.title??t.name} · ${n+1} of ${r}`)}}function outcomeDetails(e){switch(e.kind){case`installed`:{let t=e.facts.filter(e=>e.label.length>0),n=Math.max(0,...t.map(e=>e.label.length));return[...e.facts.map(e=>e.label.length===0?e.value:`${e.label.padEnd(n)} ${e.value}`),...e.output]}case`incomplete`:return[`Finish with \`${e.resumeCommand}\``];case`failed`:return e.message.replace(" Try again with `",`
2
+ Try again with \``).split(`
3
+ `);case`cancelled`:return[]}}function registryOutcomeSummary(e){switch(e.kind){case`installed`:return`Added ${e.title}`;case`incomplete`:return`Added ${e.title} · setup not finished`;case`failed`:return`Couldn't add ${e.title}`;case`cancelled`:return`${e.title} not added`}}function hasFailedOutcome(e){return e.some(e=>e.kind===`failed`)}function registryCommandOutcome(e,t=[]){let{outcomes:n}=e,r=n.filter(e=>e.kind===`installed`||e.kind===`incomplete`).length,i=n.length===1?registryOutcomeSummary(n[0]):`Added ${r} of ${n.length} items`,a=n.length===1?outcomeDetails(n[0]):n.flatMap(e=>[`* ${registryOutcomeSummary(e)}`,...outcomeDetails(e).map(e=>` ${e}`)]);return a.push(...t.map(e=>`⚠ ${e}`)),{failed:hasFailedOutcome(n),summary:i,message:a.join(`
4
+ `)}}export{registryCommandOutcome,registryItemProgress,registryOutcomeSummary};
@@ -6,7 +6,7 @@ import { inspectApplication } from "#services/inspect-application.js";
6
6
  import { type SubagentView } from "./subagent-pump.js";
7
7
  export type { SubagentRun, SubagentStepUpdate, SubagentToolUpdate, SubagentView, } from "./subagent-pump.js";
8
8
  import { type DevBootProgressReporter } from "#internal/dev-boot-progress.js";
9
- import { type PromptCommand, type PromptCommandSpec } from "./prompt-commands.js";
9
+ import { type PromptCommand, type PromptCommandSpec, type ArgumentTypeaheadCommand } from "./prompt-commands.js";
10
10
  import type { PromptArgumentSuggestion } from "./argument-typeahead.js";
11
11
  import { type RemoteConnectionControllerOptions, type RemoteConnectionSnapshot } from "./remote-connection.js";
12
12
  import type { RemoteAuthFlow } from "./remote-auth.js";
@@ -191,8 +191,10 @@ export type AgentTUIRenderer = {
191
191
  /** Clears the setup attention line once its issue is resolved. */
192
192
  clearSetupWarning?(): void;
193
193
  /** Commits the startup `/deploy` invocation to the transcript. */
194
- renderCommandInvocation?(text: string, status?: "failed"): void;
195
- renderCommandResult?(text: string, tone?: "success" | "error"): void;
194
+ renderCommandInvocation?(text: string): void;
195
+ finishCommand?(outcome: CommandPresentation): void;
196
+ choosePromptCommand?(commands: readonly PromptCommandSpec[]): Promise<string | undefined>;
197
+ showInfoPanel?(text: string): Promise<void>;
196
198
  readonly setupFlow?: SetupFlowRenderer;
197
199
  /**
198
200
  * The renderer's full-screen local trace viewer, opened by `/traces`.
@@ -306,12 +308,22 @@ export interface PromptCommandHandlerContext {
306
308
  readonly withExclusiveTerminal?: <T>(task: () => Promise<T>) => Promise<T>;
307
309
  readonly disabledConnectionReasons?: Readonly<Record<string, string>>;
308
310
  }
311
+ /** One atomic transcript decision for an invocation, including no-output commands. */
312
+ export type CommandPresentation = {
313
+ kind: "dismiss";
314
+ } | {
315
+ kind: "result";
316
+ message?: string;
317
+ summary?: string;
318
+ };
309
319
  /** What one handled slash command leaves behind for the runner to apply. */
310
320
  export interface PromptCommandOutcome {
311
321
  /** Outcome line rendered under the echoed command; absent renders nothing. */
312
322
  message?: string;
313
- /** Promotes an outcome to a top-level status. */
314
- tone?: "success" | "error";
323
+ /** The command failed; completed and cancelled commands share the normal settled presentation. */
324
+ failed?: true;
325
+ /** Replaces the echoed invocation once the command settles. */
326
+ summary?: string;
315
327
  /** Post-command work after setup settles. */
316
328
  effect?: VercelStatusEffect | ModelAccessChange;
317
329
  cancelled?: true;
@@ -371,7 +383,7 @@ export type EveTUIRunnerOptions = TuiDisplayOptions & {
371
383
  /** Commands shown in discovery for this local or remote session. */
372
384
  availablePromptCommands?: readonly PromptCommandSpec[];
373
385
  /** Catalog entries available to inline `/model`, `/add`, and `/login` completion. */
374
- argumentSuggestions?: (command: "model" | "add" | "login") => Promise<readonly PromptArgumentSuggestion[]>;
386
+ argumentSuggestions?: (command: ArgumentTypeaheadCommand) => Promise<readonly PromptArgumentSuggestion[]>;
375
387
  /** Gives setup subprocesses exclusive terminal and development-host ownership. */
376
388
  withExclusiveTerminal?: <T>(task: () => Promise<T>) => Promise<T>;
377
389
  /** Remote target and mutable OIDC token source, when connected through `--url`. */