@prometheus-ai/agent 0.5.4 → 0.5.8

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 (1145) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/cli.js +25110 -0
  3. package/dist/types/async/index.d.ts +0 -1
  4. package/dist/types/async/job-manager.d.ts +33 -0
  5. package/dist/types/autolearn/controller.d.ts +25 -0
  6. package/dist/types/autolearn/managed-skills.d.ts +45 -0
  7. package/dist/types/autoresearch/state.d.ts +1 -1
  8. package/dist/types/autoresearch/tools/init-experiment.d.ts +1 -1
  9. package/dist/types/autoresearch/tools/log-experiment.d.ts +1 -1
  10. package/dist/types/autoresearch/tools/run-experiment.d.ts +1 -1
  11. package/dist/types/autoresearch/tools/update-notes.d.ts +1 -1
  12. package/dist/types/autoresearch/types.d.ts +1 -1
  13. package/dist/types/capability/context-file.d.ts +0 -13
  14. package/dist/types/capability/mcp.d.ts +1 -0
  15. package/dist/types/capability/rule-buckets.d.ts +1 -1
  16. package/dist/types/capability/rule.d.ts +6 -1
  17. package/dist/types/capability/types.d.ts +0 -4
  18. package/dist/types/cli/args.d.ts +23 -3
  19. package/dist/types/cli/bench-cli.d.ts +78 -0
  20. package/dist/types/cli/claude-trace-cli.d.ts +7 -0
  21. package/dist/types/cli/dry-balance-cli.d.ts +16 -2
  22. package/dist/types/cli/gallery-cli.d.ts +43 -0
  23. package/dist/types/cli/gallery-fixtures/agentic.d.ts +2 -0
  24. package/dist/types/cli/gallery-fixtures/codeintel.d.ts +3 -0
  25. package/dist/types/cli/gallery-fixtures/edit.d.ts +3 -0
  26. package/dist/types/cli/gallery-fixtures/fs.d.ts +2 -0
  27. package/dist/types/cli/gallery-fixtures/index.d.ts +4 -0
  28. package/dist/types/cli/gallery-fixtures/interaction.d.ts +3 -0
  29. package/dist/types/cli/gallery-fixtures/memory.d.ts +2 -0
  30. package/dist/types/cli/gallery-fixtures/misc.d.ts +3 -0
  31. package/dist/types/cli/gallery-fixtures/search.d.ts +3 -0
  32. package/dist/types/cli/gallery-fixtures/shell.d.ts +3 -0
  33. package/dist/types/cli/gallery-fixtures/types.d.ts +55 -0
  34. package/dist/types/cli/gallery-fixtures/web.d.ts +2 -0
  35. package/dist/types/cli/gallery-screenshot.d.ts +35 -0
  36. package/dist/types/cli/grievances-cli.d.ts +1 -1
  37. package/dist/types/cli/list-models.d.ts +6 -14
  38. package/dist/types/cli/models-cli.d.ts +49 -0
  39. package/dist/types/cli/session-picker.d.ts +1 -1
  40. package/dist/types/cli/setup-cli.d.ts +1 -1
  41. package/dist/types/cli/setup-model-picker.d.ts +14 -0
  42. package/dist/types/cli/startup-cwd.d.ts +2 -0
  43. package/dist/types/cli/update-cli.d.ts +13 -40
  44. package/dist/types/cli/usage-cli.d.ts +81 -0
  45. package/dist/types/cli-commands.d.ts +12 -0
  46. package/dist/types/collab/crypto.d.ts +7 -0
  47. package/dist/types/collab/guest.d.ts +37 -0
  48. package/dist/types/collab/host.d.ts +29 -0
  49. package/dist/types/collab/protocol.d.ts +119 -0
  50. package/dist/types/collab/relay-client.d.ts +22 -0
  51. package/dist/types/commands/bench.d.ts +29 -0
  52. package/dist/types/commands/gallery.d.ts +47 -0
  53. package/dist/types/commands/install.d.ts +1 -1
  54. package/dist/types/commands/join.d.ts +12 -0
  55. package/dist/types/commands/launch.d.ts +8 -4
  56. package/dist/types/commands/models.d.ts +33 -0
  57. package/dist/types/commands/read.d.ts +1 -1
  58. package/dist/types/commands/say.d.ts +24 -0
  59. package/dist/types/commands/token.d.ts +25 -0
  60. package/dist/types/commands/usage.d.ts +34 -0
  61. package/dist/types/commit/agentic/tools/analyze-file.d.ts +1 -1
  62. package/dist/types/commit/agentic/tools/git-file-diff.d.ts +1 -1
  63. package/dist/types/commit/agentic/tools/git-hunk.d.ts +1 -1
  64. package/dist/types/commit/agentic/tools/git-overview.d.ts +1 -1
  65. package/dist/types/commit/agentic/tools/propose-changelog.d.ts +1 -1
  66. package/dist/types/commit/agentic/tools/propose-commit.d.ts +1 -1
  67. package/dist/types/commit/agentic/tools/recent-commits.d.ts +1 -1
  68. package/dist/types/commit/agentic/tools/schemas.d.ts +1 -1
  69. package/dist/types/commit/agentic/tools/split-commit.d.ts +1 -1
  70. package/dist/types/commit/analysis/conventional.d.ts +2 -2
  71. package/dist/types/commit/analysis/summary.d.ts +2 -2
  72. package/dist/types/commit/changelog/generate.d.ts +3 -3
  73. package/dist/types/commit/changelog/index.d.ts +2 -2
  74. package/dist/types/commit/map-reduce/index.d.ts +3 -3
  75. package/dist/types/commit/map-reduce/map-phase.d.ts +2 -2
  76. package/dist/types/commit/map-reduce/reduce-phase.d.ts +2 -2
  77. package/dist/types/commit/model-selection.d.ts +10 -4
  78. package/dist/types/commit/shared-llm.d.ts +1 -1
  79. package/dist/types/config/api-key-resolver.d.ts +43 -0
  80. package/dist/types/config/append-only-context-mode.d.ts +2 -1
  81. package/dist/types/config/keybindings.d.ts +12 -7
  82. package/dist/types/config/model-discovery.d.ts +57 -0
  83. package/dist/types/config/model-equivalence.d.ts +1 -1
  84. package/dist/types/config/model-registry.d.ts +86 -222
  85. package/dist/types/config/model-resolver.d.ts +43 -12
  86. package/dist/types/config/model-roles.d.ts +29 -0
  87. package/dist/types/config/models-config-schema.d.ts +536 -43
  88. package/dist/types/config/models-config.d.ts +391 -0
  89. package/dist/types/config/settings-schema.d.ts +1202 -324
  90. package/dist/types/config/settings.d.ts +15 -3
  91. package/dist/types/dap/config.d.ts +14 -1
  92. package/dist/types/dap/types.d.ts +10 -0
  93. package/dist/types/debug/log-viewer.d.ts +1 -1
  94. package/dist/types/debug/raw-sse.d.ts +1 -1
  95. package/dist/types/debug/report-bundle.d.ts +3 -0
  96. package/dist/types/debug/terminal-info.d.ts +0 -1
  97. package/dist/types/discovery/at-imports.d.ts +15 -0
  98. package/dist/types/discovery/prometheus-extension-roots.d.ts +7 -7
  99. package/dist/types/edit/diff.d.ts +3 -2
  100. package/dist/types/edit/file-snapshot-store.d.ts +18 -0
  101. package/dist/types/edit/hashline/noop-loop-guard.d.ts +72 -0
  102. package/dist/types/edit/hashline/params.d.ts +1 -1
  103. package/dist/types/edit/index.d.ts +0 -1
  104. package/dist/types/edit/modes/apply-patch.d.ts +1 -1
  105. package/dist/types/edit/modes/patch.d.ts +1 -1
  106. package/dist/types/edit/modes/replace.d.ts +1 -1
  107. package/dist/types/edit/renderer.d.ts +1 -0
  108. package/dist/types/eval/__tests__/completion-bridge.test.d.ts +1 -0
  109. package/dist/types/eval/__tests__/helpers-local-roots.test.d.ts +1 -0
  110. package/dist/types/eval/__tests__/js-context-manager.test.d.ts +1 -0
  111. package/dist/types/eval/backend.d.ts +7 -2
  112. package/dist/types/eval/bridge-timeout.d.ts +1 -1
  113. package/dist/types/eval/completion-bridge.d.ts +25 -0
  114. package/dist/types/eval/idle-timeout.d.ts +1 -5
  115. package/dist/types/eval/js/context-manager.d.ts +1 -0
  116. package/dist/types/eval/js/executor.d.ts +2 -0
  117. package/dist/types/eval/js/index.d.ts +1 -1
  118. package/dist/types/eval/js/shared/helpers.d.ts +7 -1
  119. package/dist/types/eval/js/shared/rewrite-imports.d.ts +6 -6
  120. package/dist/types/eval/js/shared/runtime.d.ts +6 -1
  121. package/dist/types/eval/js/worker-protocol.d.ts +6 -0
  122. package/dist/types/eval/py/__tests__/prelude.test.d.ts +1 -0
  123. package/dist/types/eval/py/executor.d.ts +12 -0
  124. package/dist/types/eval/py/index.d.ts +1 -1
  125. package/dist/types/eval/py/kernel.d.ts +6 -1
  126. package/dist/types/eval/py/runtime.d.ts +9 -0
  127. package/dist/types/exa/index.d.ts +1 -19
  128. package/dist/types/exa/mcp-client.d.ts +10 -3
  129. package/dist/types/exa/types.d.ts +0 -83
  130. package/dist/types/exec/bash-executor.d.ts +7 -0
  131. package/dist/types/export/custom-share.d.ts +1 -2
  132. package/dist/types/export/html/index.d.ts +39 -0
  133. package/dist/types/export/html/template-js.d.ts +2 -0
  134. package/dist/types/export/share.d.ts +61 -0
  135. package/dist/types/export/ttsr.d.ts +14 -0
  136. package/dist/types/extensibility/custom-commands/types.d.ts +9 -4
  137. package/dist/types/extensibility/custom-tools/loader.d.ts +30 -4
  138. package/dist/types/extensibility/custom-tools/types.d.ts +16 -8
  139. package/dist/types/extensibility/extensions/index.d.ts +1 -1
  140. package/dist/types/extensibility/extensions/loader.d.ts +20 -1
  141. package/dist/types/extensibility/extensions/model-api.d.ts +17 -0
  142. package/dist/types/extensibility/extensions/runner.d.ts +5 -2
  143. package/dist/types/extensibility/extensions/types.d.ts +72 -11
  144. package/dist/types/extensibility/hooks/index.d.ts +2 -1
  145. package/dist/types/extensibility/hooks/loader.d.ts +1 -1
  146. package/dist/types/extensibility/hooks/types.d.ts +11 -5
  147. package/dist/types/extensibility/{legacy-pi-ai-shim.d.ts → legacy-package-ai-shim.d.ts} +2 -2
  148. package/dist/types/extensibility/plugins/{legacy-pi-compat.d.ts → legacy-package-compat.d.ts} +20 -3
  149. package/dist/types/extensibility/plugins/loader.d.ts +11 -0
  150. package/dist/types/extensibility/plugins/marketplace-auto-update.d.ts +8 -0
  151. package/dist/types/extensibility/plugins/types.d.ts +2 -2
  152. package/dist/types/extensibility/shared-events.d.ts +3 -3
  153. package/dist/types/extensibility/skills.d.ts +10 -0
  154. package/dist/types/extensibility/slash-commands.d.ts +1 -11
  155. package/dist/types/goals/guided-setup.d.ts +18 -0
  156. package/dist/types/goals/state.d.ts +1 -1
  157. package/dist/types/goals/tools/goal-tool.d.ts +1 -1
  158. package/dist/types/hindsight/mental-models.d.ts +17 -8
  159. package/dist/types/hindsight/transcript.d.ts +1 -1
  160. package/dist/types/index.d.ts +5 -0
  161. package/dist/types/internal-urls/artifact-protocol.d.ts +2 -2
  162. package/dist/types/internal-urls/history-protocol.d.ts +14 -0
  163. package/dist/types/internal-urls/index.d.ts +1 -0
  164. package/dist/types/internal-urls/local-protocol.d.ts +14 -2
  165. package/dist/types/internal-urls/types.d.ts +1 -1
  166. package/dist/types/irc/bus.d.ts +79 -0
  167. package/dist/types/lib/xai-http.d.ts +1 -1
  168. package/dist/types/lsp/client.d.ts +10 -0
  169. package/dist/types/lsp/config.d.ts +2 -2
  170. package/dist/types/lsp/edits.d.ts +9 -0
  171. package/dist/types/lsp/format-options.d.ts +32 -0
  172. package/dist/types/lsp/index.d.ts +2 -7
  173. package/dist/types/lsp/types.d.ts +13 -1
  174. package/dist/types/lsp/utils.d.ts +6 -2
  175. package/dist/types/main.d.ts +23 -8
  176. package/dist/types/mcp/json-rpc.d.ts +5 -0
  177. package/dist/types/mcp/manager.d.ts +8 -0
  178. package/dist/types/mcp/oauth-discovery.d.ts +6 -1
  179. package/dist/types/mcp/oauth-flow.d.ts +13 -3
  180. package/dist/types/mcp/startup-events.d.ts +11 -0
  181. package/dist/types/mcp/tool-bridge.d.ts +2 -0
  182. package/dist/types/mcp/transports/stdio.d.ts +13 -0
  183. package/dist/types/mcp/types.d.ts +2 -0
  184. package/dist/types/memories/index.d.ts +7 -15
  185. package/dist/types/memories/storage.d.ts +0 -10
  186. package/dist/types/memory-backend/index.d.ts +3 -1
  187. package/dist/types/memory-backend/local-backend.d.ts +4 -3
  188. package/dist/types/memory-backend/resolve.d.ts +2 -2
  189. package/dist/types/memory-backend/runtime.d.ts +4 -0
  190. package/dist/types/memory-backend/types.d.ts +67 -2
  191. package/dist/types/mnemopi/config.d.ts +31 -1
  192. package/dist/types/mnemopi/state.d.ts +40 -2
  193. package/dist/types/modes/acp/acp-agent.d.ts +1 -2
  194. package/dist/types/modes/components/agent-dashboard.d.ts +17 -1
  195. package/dist/types/modes/components/agent-hub.d.ts +82 -0
  196. package/dist/types/modes/components/assistant-message.d.ts +5 -12
  197. package/dist/types/modes/components/bash-execution.d.ts +1 -1
  198. package/dist/types/modes/components/chat-block.d.ts +64 -0
  199. package/dist/types/modes/components/collab-prompt-message.d.ts +10 -0
  200. package/dist/types/modes/components/compaction-summary-message.d.ts +25 -5
  201. package/dist/types/modes/components/copy-selector.d.ts +1 -1
  202. package/dist/types/modes/components/custom-editor.d.ts +49 -2
  203. package/dist/types/modes/components/custom-editor.test.d.ts +1 -0
  204. package/dist/types/modes/components/dynamic-border.d.ts +1 -1
  205. package/dist/types/modes/components/extensions/extension-dashboard.d.ts +1 -1
  206. package/dist/types/modes/components/extensions/extension-list.d.ts +1 -1
  207. package/dist/types/modes/components/extensions/inspector-panel.d.ts +1 -1
  208. package/dist/types/modes/components/footer.d.ts +1 -1
  209. package/dist/types/modes/components/hook-editor.d.ts +5 -0
  210. package/dist/types/modes/components/hook-input.d.ts +4 -0
  211. package/dist/types/modes/components/hook-selector.d.ts +5 -7
  212. package/dist/types/modes/components/index.d.ts +1 -0
  213. package/dist/types/modes/components/late-diagnostics-message.d.ts +20 -0
  214. package/dist/types/modes/components/logout-account-selector.d.ts +8 -0
  215. package/dist/types/modes/components/mcp-add-wizard.d.ts +2 -1
  216. package/dist/types/modes/components/model-selector.d.ts +1 -1
  217. package/dist/types/modes/components/oauth-selector.d.ts +10 -1
  218. package/dist/types/modes/components/overlay-box.d.ts +17 -0
  219. package/dist/types/modes/components/plan-review-overlay.d.ts +61 -0
  220. package/dist/types/modes/components/plan-toc.d.ts +41 -0
  221. package/dist/types/modes/components/read-tool-group.d.ts +8 -0
  222. package/dist/types/modes/components/reset-usage-selector.d.ts +12 -0
  223. package/dist/types/modes/components/segment-track.d.ts +11 -6
  224. package/dist/types/modes/components/session-selector.d.ts +18 -9
  225. package/dist/types/modes/components/settings-defs.d.ts +9 -2
  226. package/dist/types/modes/components/settings-selector.d.ts +17 -4
  227. package/dist/types/modes/components/snapcompact-shape-preview.d.ts +31 -0
  228. package/dist/types/modes/components/status-line/component.d.ts +61 -0
  229. package/dist/types/modes/components/status-line/index.d.ts +1 -0
  230. package/dist/types/modes/components/status-line/types.d.ts +47 -3
  231. package/dist/types/modes/components/tiny-title-download-progress.d.ts +1 -1
  232. package/dist/types/modes/components/tool-execution.d.ts +49 -2
  233. package/dist/types/modes/components/transcript-container.d.ts +76 -26
  234. package/dist/types/modes/components/tree-selector.d.ts +2 -2
  235. package/dist/types/modes/components/ttsr-notification.d.ts +5 -1
  236. package/dist/types/modes/components/usage-row.d.ts +3 -0
  237. package/dist/types/modes/components/user-message-selector.d.ts +1 -1
  238. package/dist/types/modes/components/user-message.d.ts +2 -1
  239. package/dist/types/modes/components/visual-truncate.d.ts +1 -1
  240. package/dist/types/modes/components/welcome.d.ts +12 -2
  241. package/dist/types/modes/controllers/command-controller.d.ts +3 -2
  242. package/dist/types/modes/controllers/event-controller.d.ts +7 -1
  243. package/dist/types/modes/controllers/extension-ui-controller.d.ts +0 -1
  244. package/dist/types/modes/controllers/input-controller.d.ts +25 -3
  245. package/dist/types/modes/controllers/mcp-command-controller.d.ts +8 -0
  246. package/dist/types/modes/controllers/selector-controller.d.ts +5 -2
  247. package/dist/types/modes/controllers/session-focus-controller.d.ts +31 -0
  248. package/dist/types/modes/controllers/streaming-reveal.d.ts +22 -0
  249. package/dist/types/modes/controllers/tan-command-controller.d.ts +6 -0
  250. package/dist/types/modes/controllers/tool-args-reveal.d.ts +43 -0
  251. package/dist/types/modes/gradient-highlight.d.ts +9 -4
  252. package/dist/types/modes/image-references.d.ts +14 -3
  253. package/dist/types/modes/index.d.ts +8 -7
  254. package/dist/types/modes/interactive-mode.d.ts +92 -16
  255. package/dist/types/modes/magic-keywords.d.ts +14 -2
  256. package/dist/types/modes/markdown-prose.d.ts +1 -1
  257. package/dist/types/modes/oauth-manual-input.d.ts +7 -0
  258. package/dist/types/modes/rpc/rpc-client.d.ts +48 -2
  259. package/dist/types/modes/rpc/rpc-mode.d.ts +67 -2
  260. package/dist/types/modes/rpc/rpc-subagents.d.ts +24 -0
  261. package/dist/types/modes/rpc/rpc-types.d.ts +113 -1
  262. package/dist/types/modes/runtime-init.d.ts +4 -0
  263. package/dist/types/modes/session-observer-registry.d.ts +9 -0
  264. package/dist/types/modes/setup-version.d.ts +11 -0
  265. package/dist/types/modes/setup-wizard/index.d.ts +7 -2
  266. package/dist/types/modes/setup-wizard/lazy.d.ts +2 -0
  267. package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +4 -1
  268. package/dist/types/modes/setup-wizard/scenes/types.d.ts +11 -2
  269. package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +6 -2
  270. package/dist/types/modes/setup-wizard/wizard-overlay.d.ts +1 -1
  271. package/dist/types/modes/theme/theme.d.ts +42 -7
  272. package/dist/types/modes/types.d.ts +62 -13
  273. package/dist/types/modes/utils/context-usage.d.ts +6 -1
  274. package/dist/types/modes/utils/copy-targets.d.ts +21 -1
  275. package/dist/types/modes/utils/ui-helpers.d.ts +4 -4
  276. package/dist/types/modes/workflow.d.ts +3 -3
  277. package/dist/types/plan-mode/approved-plan.d.ts +27 -8
  278. package/dist/types/plan-mode/plan-protection.d.ts +4 -4
  279. package/dist/types/registry/agent-lifecycle.d.ts +51 -0
  280. package/dist/types/registry/agent-registry.d.ts +33 -5
  281. package/dist/types/sdk.d.ts +46 -4
  282. package/dist/types/secrets/index.d.ts +1 -1
  283. package/dist/types/secrets/obfuscator.d.ts +9 -3
  284. package/dist/types/session/agent-session.d.ts +136 -66
  285. package/dist/types/session/agent-storage.d.ts +2 -1
  286. package/dist/types/session/auth-broker-config.d.ts +4 -0
  287. package/dist/types/session/auth-storage.d.ts +1 -1
  288. package/dist/types/session/codex-auto-reset.d.ts +111 -0
  289. package/dist/types/session/indexed-session-storage.d.ts +3 -3
  290. package/dist/types/session/messages.d.ts +26 -15
  291. package/dist/types/session/session-context.d.ts +39 -0
  292. package/dist/types/session/session-entries.d.ts +159 -0
  293. package/dist/types/session/session-history-format.d.ts +12 -0
  294. package/dist/types/session/session-listing.d.ts +69 -0
  295. package/dist/types/session/session-loader.d.ts +16 -0
  296. package/dist/types/session/session-manager.d.ts +107 -440
  297. package/dist/types/session/session-migrations.d.ts +12 -0
  298. package/dist/types/session/session-paths.d.ts +25 -0
  299. package/dist/types/session/session-persistence.d.ts +8 -0
  300. package/dist/types/session/session-storage.d.ts +11 -7
  301. package/dist/types/session/snapcompact-inline.d.ts +145 -0
  302. package/dist/types/session/snapcompact-savings-journal.d.ts +46 -0
  303. package/dist/types/session/streaming-output.d.ts +46 -0
  304. package/dist/types/session/tool-choice-queue.d.ts +6 -6
  305. package/dist/types/session/yield-queue.d.ts +10 -1
  306. package/dist/types/slash-commands/acp-builtins.d.ts +16 -0
  307. package/dist/types/slash-commands/available-commands.d.ts +34 -0
  308. package/dist/types/slash-commands/builtin-registry.d.ts +10 -0
  309. package/dist/types/slash-commands/helpers/active-oauth-account.d.ts +14 -0
  310. package/dist/types/slash-commands/helpers/logout.d.ts +15 -0
  311. package/dist/types/slash-commands/helpers/reset-usage.d.ts +27 -0
  312. package/dist/types/slash-commands/helpers/stats-dashboard.d.ts +13 -0
  313. package/dist/types/slash-commands/types.d.ts +5 -9
  314. package/dist/types/ssh/connection-manager.d.ts +8 -0
  315. package/dist/types/stt/asr-client.d.ts +90 -0
  316. package/dist/types/stt/asr-protocol.d.ts +97 -0
  317. package/dist/types/stt/asr-worker.d.ts +2 -0
  318. package/dist/types/stt/downloader.d.ts +38 -0
  319. package/dist/types/stt/endpointer.d.ts +59 -0
  320. package/dist/types/stt/index.d.ts +5 -1
  321. package/dist/types/stt/models.d.ts +120 -0
  322. package/dist/types/stt/recorder.d.ts +17 -0
  323. package/dist/types/stt/stt-controller.d.ts +6 -0
  324. package/dist/types/stt/transcriber.d.ts +5 -7
  325. package/dist/types/stt/wav.d.ts +29 -0
  326. package/dist/types/system-prompt.d.ts +9 -1
  327. package/dist/types/task/commands.d.ts +1 -1
  328. package/dist/types/task/discovery.d.ts +1 -2
  329. package/dist/types/task/executor.d.ts +61 -2
  330. package/dist/types/task/index.d.ts +37 -6
  331. package/dist/types/task/output-manager.d.ts +0 -7
  332. package/dist/types/task/parallel.d.ts +2 -2
  333. package/dist/types/task/prometheus-command.d.ts +2 -2
  334. package/dist/types/task/render.d.ts +20 -7
  335. package/dist/types/task/repair-args.d.ts +8 -7
  336. package/dist/types/task/types.d.ts +109 -52
  337. package/dist/types/task/worktree.d.ts +2 -0
  338. package/dist/types/telemetry-export.d.ts +2 -2
  339. package/dist/types/thinking.d.ts +4 -0
  340. package/dist/types/tiny/models.d.ts +1 -1
  341. package/dist/types/tiny/title-client.d.ts +12 -1
  342. package/dist/types/tiny/title-protocol.d.ts +1 -0
  343. package/dist/types/tools/archive-reader.d.ts +5 -0
  344. package/dist/types/tools/ask.d.ts +6 -1
  345. package/dist/types/tools/ast-edit.d.ts +4 -1
  346. package/dist/types/tools/ast-grep.d.ts +4 -1
  347. package/dist/types/tools/bash.d.ts +5 -2
  348. package/dist/types/tools/browser/attach.d.ts +4 -4
  349. package/dist/types/tools/browser/cmux/cmux-tab.d.ts +202 -0
  350. package/dist/types/tools/browser/cmux/rpc.d.ts +70 -0
  351. package/dist/types/tools/browser/cmux/socket-client.d.ts +19 -0
  352. package/dist/types/tools/browser/registry.d.ts +17 -3
  353. package/dist/types/tools/browser/render.d.ts +2 -0
  354. package/dist/types/tools/browser/tab-protocol.d.ts +2 -0
  355. package/dist/types/tools/browser/tab-supervisor.d.ts +16 -4
  356. package/dist/types/tools/browser/tab-worker.d.ts +18 -1
  357. package/dist/types/tools/browser.d.ts +3 -1
  358. package/dist/types/tools/checkpoint.d.ts +1 -1
  359. package/dist/types/tools/conflict-detect.d.ts +16 -0
  360. package/dist/types/tools/debug.d.ts +1 -1
  361. package/dist/types/tools/eval-render.d.ts +1 -8
  362. package/dist/types/tools/eval.d.ts +9 -1
  363. package/dist/types/tools/fetch.d.ts +17 -8
  364. package/dist/types/tools/find.d.ts +1 -8
  365. package/dist/types/tools/gh-cache-invalidation.d.ts +6 -0
  366. package/dist/types/tools/gh.d.ts +4 -1
  367. package/dist/types/tools/github-cache.d.ts +19 -0
  368. package/dist/types/tools/grouped-file-output.d.ts +46 -12
  369. package/dist/types/tools/image-gen.d.ts +1 -1
  370. package/dist/types/tools/index.d.ts +89 -8
  371. package/dist/types/tools/inspect-image.d.ts +1 -1
  372. package/dist/types/tools/irc.d.ts +79 -39
  373. package/dist/types/tools/job.d.ts +8 -2
  374. package/dist/types/tools/learn.d.ts +51 -0
  375. package/dist/types/tools/manage-skill.d.ts +40 -0
  376. package/dist/types/tools/memory-edit.d.ts +2 -2
  377. package/dist/types/tools/memory-recall.d.ts +1 -1
  378. package/dist/types/tools/memory-reflect.d.ts +1 -1
  379. package/dist/types/tools/memory-render.d.ts +4 -1
  380. package/dist/types/tools/memory-retain.d.ts +1 -1
  381. package/dist/types/tools/path-utils.d.ts +17 -5
  382. package/dist/types/tools/plan-mode-guard.d.ts +18 -9
  383. package/dist/types/tools/read.d.ts +3 -2
  384. package/dist/types/tools/render-mermaid.d.ts +1 -1
  385. package/dist/types/tools/render-utils.d.ts +47 -27
  386. package/dist/types/tools/renderers.d.ts +10 -2
  387. package/dist/types/tools/report-tool-issue.d.ts +6 -1
  388. package/dist/types/tools/resolve.d.ts +1 -1
  389. package/dist/types/tools/review.d.ts +1 -1
  390. package/dist/types/tools/search-tool-bm25.d.ts +1 -1
  391. package/dist/types/tools/search.d.ts +7 -3
  392. package/dist/types/tools/sqlite-reader.d.ts +4 -0
  393. package/dist/types/tools/ssh.d.ts +2 -1
  394. package/dist/types/tools/todo.d.ts +7 -15
  395. package/dist/types/tools/tool-result.d.ts +2 -0
  396. package/dist/types/tools/tool-timeouts.d.ts +1 -1
  397. package/dist/types/tools/tts.d.ts +26 -1
  398. package/dist/types/tools/write.d.ts +6 -3
  399. package/dist/types/tools/yield.d.ts +8 -0
  400. package/dist/types/tts/downloader.d.ts +20 -0
  401. package/dist/types/tts/index.d.ts +8 -0
  402. package/dist/types/tts/models.d.ts +82 -0
  403. package/dist/types/tts/player.d.ts +32 -0
  404. package/dist/types/tts/runtime.d.ts +6 -0
  405. package/dist/types/tts/streaming-player.d.ts +41 -0
  406. package/dist/types/tts/tts-client.d.ts +93 -0
  407. package/dist/types/tts/tts-protocol.d.ts +95 -0
  408. package/dist/types/tts/tts-worker.d.ts +2 -0
  409. package/dist/types/tts/vocalizer.d.ts +41 -0
  410. package/dist/types/tts/wav.d.ts +8 -0
  411. package/dist/types/tui/code-cell.d.ts +0 -2
  412. package/dist/types/tui/hyperlink.d.ts +13 -7
  413. package/dist/types/tui/output-block.d.ts +16 -22
  414. package/dist/types/tui/status-line.d.ts +3 -0
  415. package/dist/types/utils/block-context.d.ts +35 -0
  416. package/dist/types/utils/changelog.d.ts +8 -0
  417. package/dist/types/utils/clipboard.d.ts +4 -3
  418. package/dist/types/utils/enhanced-paste.d.ts +20 -0
  419. package/dist/types/utils/file-mentions.d.ts +7 -0
  420. package/dist/types/utils/git.d.ts +22 -3
  421. package/dist/types/utils/image-loading.d.ts +30 -1
  422. package/dist/types/utils/session-color.d.ts +15 -3
  423. package/dist/types/utils/thinking-display.d.ts +17 -0
  424. package/dist/types/utils/title-generator.d.ts +3 -2
  425. package/dist/types/utils/tool-choice.d.ts +8 -0
  426. package/dist/types/utils/tools-manager.d.ts +2 -1
  427. package/dist/types/web/kagi.d.ts +2 -2
  428. package/dist/types/web/parallel.d.ts +3 -0
  429. package/dist/types/web/scrapers/github.d.ts +22 -0
  430. package/dist/types/web/scrapers/readthedocs.d.ts +3 -0
  431. package/dist/types/web/scrapers/types.d.ts +12 -0
  432. package/dist/types/web/search/index.d.ts +1 -1
  433. package/dist/types/web/search/providers/anthropic.d.ts +2 -1
  434. package/dist/types/web/search/providers/base.d.ts +2 -1
  435. package/dist/types/web/search/providers/brave.d.ts +2 -1
  436. package/dist/types/web/search/providers/codex.d.ts +2 -1
  437. package/dist/types/web/search/providers/exa.d.ts +2 -1
  438. package/dist/types/web/search/providers/gemini.d.ts +10 -6
  439. package/dist/types/web/search/providers/jina.d.ts +7 -2
  440. package/dist/types/web/search/providers/kagi.d.ts +7 -2
  441. package/dist/types/web/search/providers/kimi.d.ts +7 -2
  442. package/dist/types/web/search/providers/parallel.d.ts +2 -1
  443. package/dist/types/web/search/providers/perplexity.d.ts +10 -2
  444. package/dist/types/web/search/providers/searxng.d.ts +2 -1
  445. package/dist/types/web/search/providers/synthetic.d.ts +7 -3
  446. package/dist/types/web/search/providers/tavily.d.ts +2 -1
  447. package/dist/types/web/search/providers/zai.d.ts +2 -1
  448. package/dist/types/web/search/types.d.ts +1 -1
  449. package/examples/extensions/api-demo.ts +2 -2
  450. package/package.json +41 -15
  451. package/scripts/bench-guard.ts +71 -0
  452. package/scripts/build-binary.ts +24 -25
  453. package/scripts/bundle-dist.ts +97 -0
  454. package/scripts/generate-share-viewer.ts +34 -0
  455. package/scripts/prometheus +42 -0
  456. package/scripts/prometheus.ts +20 -0
  457. package/src/async/index.ts +0 -1
  458. package/src/async/job-manager.ts +106 -3
  459. package/src/auto-thinking/classifier.ts +2 -1
  460. package/src/autolearn/controller.ts +139 -0
  461. package/src/autolearn/managed-skills.ts +257 -0
  462. package/src/autoresearch/dashboard.ts +1 -1
  463. package/src/autoresearch/prompt-setup.md +6 -6
  464. package/src/autoresearch/prompt.md +6 -6
  465. package/src/autoresearch/state.ts +1 -1
  466. package/src/autoresearch/storage.ts +2 -1
  467. package/src/autoresearch/tools/init-experiment.ts +1 -1
  468. package/src/autoresearch/tools/log-experiment.ts +1 -1
  469. package/src/autoresearch/tools/run-experiment.ts +1 -1
  470. package/src/autoresearch/tools/update-notes.ts +1 -1
  471. package/src/autoresearch/types.ts +1 -1
  472. package/src/capability/context-file.ts +0 -14
  473. package/src/capability/fs.ts +10 -0
  474. package/src/capability/index.ts +1 -6
  475. package/src/capability/mcp.ts +1 -0
  476. package/src/capability/rule-buckets.ts +4 -2
  477. package/src/capability/rule.ts +10 -1
  478. package/src/capability/types.ts +0 -4
  479. package/src/cli/args.ts +66 -13
  480. package/src/cli/auth-broker-cli.ts +6 -7
  481. package/src/cli/auth-gateway-cli.ts +8 -9
  482. package/src/cli/bench-cli.ts +437 -0
  483. package/src/cli/claude-trace-cli.ts +28 -50
  484. package/src/cli/completion-gen.ts +28 -28
  485. package/src/cli/dry-balance-cli.ts +56 -23
  486. package/src/cli/gallery-cli.ts +231 -0
  487. package/src/cli/gallery-fixtures/agentic.ts +407 -0
  488. package/src/cli/gallery-fixtures/codeintel.ts +187 -0
  489. package/src/cli/gallery-fixtures/edit.ts +194 -0
  490. package/src/cli/gallery-fixtures/fs.ts +220 -0
  491. package/src/cli/gallery-fixtures/index.ts +40 -0
  492. package/src/cli/gallery-fixtures/interaction.ts +49 -0
  493. package/src/cli/gallery-fixtures/memory.ts +81 -0
  494. package/src/cli/gallery-fixtures/misc.ts +250 -0
  495. package/src/cli/gallery-fixtures/search.ts +213 -0
  496. package/src/cli/gallery-fixtures/shell.ts +167 -0
  497. package/src/cli/gallery-fixtures/types.ts +57 -0
  498. package/src/cli/gallery-fixtures/web.ts +158 -0
  499. package/src/cli/gallery-screenshot.ts +279 -0
  500. package/src/cli/grievances-cli.ts +1 -1
  501. package/src/cli/list-models.ts +16 -174
  502. package/src/cli/models-cli.ts +429 -0
  503. package/src/cli/session-picker.ts +2 -1
  504. package/src/cli/setup-cli.ts +148 -47
  505. package/src/cli/setup-model-picker.ts +43 -0
  506. package/src/cli/startup-cwd.ts +68 -0
  507. package/src/cli/update-cli.ts +144 -272
  508. package/src/cli/usage-cli.ts +774 -0
  509. package/src/cli-commands.ts +36 -0
  510. package/src/cli.ts +141 -32
  511. package/src/collab/crypto.ts +63 -0
  512. package/src/collab/guest.ts +451 -0
  513. package/src/collab/host.ts +565 -0
  514. package/src/collab/protocol.ts +241 -0
  515. package/src/collab/relay-client.ts +216 -0
  516. package/src/commands/bench.ts +42 -0
  517. package/src/commands/complete.ts +1 -1
  518. package/src/commands/gallery.ts +52 -0
  519. package/src/commands/install.ts +1 -1
  520. package/src/commands/join.ts +39 -0
  521. package/src/commands/launch.ts +8 -4
  522. package/src/commands/models.ts +61 -0
  523. package/src/commands/read.ts +6 -3
  524. package/src/commands/say.ts +102 -0
  525. package/src/commands/setup.ts +1 -1
  526. package/src/commands/token.ts +89 -0
  527. package/src/commands/usage.ts +43 -0
  528. package/src/commit/agentic/agent.ts +2 -1
  529. package/src/commit/agentic/tools/analyze-file.ts +42 -20
  530. package/src/commit/agentic/tools/git-file-diff.ts +1 -1
  531. package/src/commit/agentic/tools/git-hunk.ts +1 -1
  532. package/src/commit/agentic/tools/git-overview.ts +1 -1
  533. package/src/commit/agentic/tools/propose-changelog.ts +1 -1
  534. package/src/commit/agentic/tools/propose-commit.ts +1 -1
  535. package/src/commit/agentic/tools/recent-commits.ts +1 -1
  536. package/src/commit/agentic/tools/schemas.ts +1 -1
  537. package/src/commit/agentic/tools/split-commit.ts +9 -2
  538. package/src/commit/analysis/conventional.ts +2 -2
  539. package/src/commit/analysis/summary.ts +3 -3
  540. package/src/commit/changelog/generate.ts +3 -3
  541. package/src/commit/changelog/index.ts +2 -2
  542. package/src/commit/map-reduce/index.ts +3 -3
  543. package/src/commit/map-reduce/map-phase.ts +2 -2
  544. package/src/commit/map-reduce/reduce-phase.ts +2 -2
  545. package/src/commit/model-selection.ts +35 -12
  546. package/src/commit/pipeline.ts +4 -4
  547. package/src/commit/shared-llm.ts +1 -1
  548. package/src/config/api-key-resolver.ts +67 -0
  549. package/src/config/append-only-context-mode.ts +6 -12
  550. package/src/config/keybindings.ts +9 -4
  551. package/src/config/mcp-schema.json +4 -0
  552. package/src/config/model-discovery.ts +574 -0
  553. package/src/config/model-equivalence.ts +5 -4
  554. package/src/config/model-registry.ts +659 -1093
  555. package/src/config/model-resolver.ts +374 -174
  556. package/src/config/model-roles.ts +88 -0
  557. package/src/config/models-config-schema.ts +61 -9
  558. package/src/config/models-config.ts +130 -0
  559. package/src/config/settings-schema.ts +1441 -387
  560. package/src/config/settings.ts +261 -69
  561. package/src/dap/client.ts +138 -53
  562. package/src/dap/config.ts +41 -2
  563. package/src/dap/defaults.json +1 -0
  564. package/src/dap/session.ts +263 -161
  565. package/src/dap/types.ts +10 -0
  566. package/src/debug/index.ts +50 -60
  567. package/src/debug/log-viewer.ts +1 -1
  568. package/src/debug/protocol-probe.ts +1 -1
  569. package/src/debug/raw-sse-buffer.ts +7 -4
  570. package/src/debug/raw-sse.ts +1 -1
  571. package/src/debug/report-bundle.ts +9 -0
  572. package/src/debug/terminal-info.ts +0 -3
  573. package/src/discovery/agents-md.ts +25 -21
  574. package/src/discovery/agents.ts +9 -15
  575. package/src/discovery/at-imports.ts +273 -0
  576. package/src/discovery/builtin-rules/index.ts +4 -0
  577. package/src/discovery/builtin-rules/ts-no-test-timers.md +55 -0
  578. package/src/discovery/builtin-rules/ts-redundant-clear-guard.md +75 -0
  579. package/src/discovery/builtin.ts +45 -23
  580. package/src/discovery/claude-plugins.ts +44 -5
  581. package/src/discovery/helpers.ts +50 -9
  582. package/src/discovery/prometheus-extension-roots.ts +10 -10
  583. package/src/discovery/prometheus-plugins.ts +10 -10
  584. package/src/edit/diff.ts +191 -4
  585. package/src/edit/file-snapshot-store.ts +34 -1
  586. package/src/edit/hashline/block-resolver.ts +20 -1
  587. package/src/edit/hashline/diff.ts +123 -2
  588. package/src/edit/hashline/execute.ts +60 -4
  589. package/src/edit/hashline/filesystem.ts +2 -1
  590. package/src/edit/hashline/noop-loop-guard.ts +99 -0
  591. package/src/edit/hashline/params.ts +1 -1
  592. package/src/edit/index.ts +47 -18
  593. package/src/edit/modes/apply-patch.ts +1 -1
  594. package/src/edit/modes/patch.ts +59 -3
  595. package/src/edit/modes/replace.ts +58 -24
  596. package/src/edit/notebook.ts +22 -2
  597. package/src/edit/renderer.ts +315 -151
  598. package/src/eval/__tests__/agent-bridge.test.ts +105 -39
  599. package/src/eval/__tests__/budget-bridge.test.ts +1 -1
  600. package/src/eval/__tests__/completion-bridge.test.ts +412 -0
  601. package/src/eval/__tests__/helpers-local-roots.test.ts +58 -0
  602. package/src/eval/__tests__/js-context-manager.test.ts +241 -0
  603. package/src/eval/__tests__/llm-bridge.test.ts +6 -4
  604. package/src/eval/__tests__/shared-executors.test.ts +34 -92
  605. package/src/eval/agent-bridge.ts +39 -23
  606. package/src/eval/backend.ts +15 -2
  607. package/src/eval/bridge-timeout.ts +1 -1
  608. package/src/eval/completion-bridge.ts +203 -0
  609. package/src/eval/idle-timeout.ts +3 -10
  610. package/src/eval/js/context-manager.ts +108 -31
  611. package/src/eval/js/executor.ts +9 -2
  612. package/src/eval/js/index.ts +7 -3
  613. package/src/eval/js/shared/helpers.ts +59 -13
  614. package/src/eval/js/shared/local-module-loader.ts +2 -2
  615. package/src/eval/js/shared/prelude.txt +167 -30
  616. package/src/eval/js/shared/rewrite-imports.ts +58 -34
  617. package/src/eval/js/shared/runtime.ts +24 -16
  618. package/src/eval/js/tool-bridge.ts +4 -0
  619. package/src/eval/js/worker-core.ts +1 -0
  620. package/src/eval/js/worker-entry.ts +6 -0
  621. package/src/eval/js/worker-protocol.ts +6 -0
  622. package/src/eval/llm-bridge.ts +2 -1
  623. package/src/eval/py/__tests__/prelude.test.ts +19 -0
  624. package/src/eval/py/executor.ts +70 -26
  625. package/src/eval/py/index.ts +13 -4
  626. package/src/eval/py/kernel.ts +48 -9
  627. package/src/eval/py/prelude.py +73 -24
  628. package/src/eval/py/runner.py +133 -28
  629. package/src/eval/py/runtime.ts +38 -1
  630. package/src/exa/index.ts +1 -26
  631. package/src/exa/mcp-client.ts +10 -10
  632. package/src/exa/types.ts +0 -97
  633. package/src/exec/bash-executor.ts +104 -7
  634. package/src/export/custom-share.ts +1 -1
  635. package/src/export/html/index.ts +119 -17
  636. package/src/export/html/share-loader.js +102 -0
  637. package/src/export/html/template-js.ts +6 -0
  638. package/src/export/html/template.css +745 -459
  639. package/src/export/html/template.css.d.ts +2 -0
  640. package/src/export/html/template.html +6 -3
  641. package/src/export/html/template.js +277 -891
  642. package/src/export/html/tool-views.generated.d.ts +2 -0
  643. package/src/export/html/tool-views.generated.js +38 -0
  644. package/src/export/share.ts +269 -0
  645. package/src/export/ttsr.ts +122 -1
  646. package/src/extensibility/custom-commands/loader.ts +7 -4
  647. package/src/extensibility/custom-commands/types.ts +9 -4
  648. package/src/extensibility/custom-tools/loader.ts +51 -23
  649. package/src/extensibility/custom-tools/types.ts +16 -8
  650. package/src/extensibility/extensions/get-commands-handler.ts +2 -1
  651. package/src/extensibility/extensions/index.ts +1 -0
  652. package/src/extensibility/extensions/loader.ts +70 -20
  653. package/src/extensibility/extensions/model-api.ts +41 -0
  654. package/src/extensibility/extensions/runner.ts +12 -2
  655. package/src/extensibility/extensions/types.ts +83 -11
  656. package/src/extensibility/extensions/wrapper.ts +41 -5
  657. package/src/extensibility/hooks/index.ts +2 -1
  658. package/src/extensibility/hooks/loader.ts +6 -3
  659. package/src/extensibility/hooks/types.ts +11 -5
  660. package/src/extensibility/{legacy-pi-ai-shim.ts → legacy-package-ai-shim.ts} +2 -2
  661. package/src/extensibility/plugins/doctor.ts +1 -2
  662. package/src/extensibility/plugins/installer.ts +2 -2
  663. package/src/extensibility/plugins/{legacy-pi-compat.ts → legacy-package-compat.ts} +165 -77
  664. package/src/extensibility/plugins/loader.ts +34 -23
  665. package/src/extensibility/plugins/manager.ts +226 -95
  666. package/src/extensibility/plugins/marketplace-auto-update.ts +49 -0
  667. package/src/extensibility/plugins/types.ts +3 -3
  668. package/src/extensibility/shared-events.ts +3 -3
  669. package/src/extensibility/skills.ts +113 -9
  670. package/src/extensibility/slash-commands.ts +1 -97
  671. package/src/goals/guided-setup.ts +133 -0
  672. package/src/goals/state.ts +1 -1
  673. package/src/goals/tools/goal-tool.ts +38 -28
  674. package/src/hindsight/bank.ts +17 -2
  675. package/src/hindsight/client.ts +27 -2
  676. package/src/hindsight/mental-models.ts +59 -12
  677. package/src/hindsight/state.ts +12 -3
  678. package/src/hindsight/transcript.ts +1 -1
  679. package/src/index.ts +5 -0
  680. package/src/internal-urls/artifact-protocol.ts +11 -2
  681. package/src/internal-urls/docs-index.generated.ts +9 -7
  682. package/src/internal-urls/history-protocol.ts +113 -0
  683. package/src/internal-urls/index.ts +1 -0
  684. package/src/internal-urls/issue-pr-protocol.ts +22 -9
  685. package/src/internal-urls/local-protocol.ts +42 -7
  686. package/src/internal-urls/memory-protocol.ts +4 -31
  687. package/src/internal-urls/router.ts +3 -1
  688. package/src/internal-urls/types.ts +1 -1
  689. package/src/irc/bus.ts +303 -0
  690. package/src/lib/xai-http.ts +3 -3
  691. package/src/lsp/client.ts +245 -104
  692. package/src/lsp/clients/biome-client.ts +101 -39
  693. package/src/lsp/clients/lsp-linter-client.ts +2 -10
  694. package/src/lsp/config.ts +15 -5
  695. package/src/lsp/defaults.json +6 -0
  696. package/src/lsp/edits.ts +143 -95
  697. package/src/lsp/format-options.ts +119 -0
  698. package/src/lsp/index.ts +233 -93
  699. package/src/lsp/render.ts +11 -35
  700. package/src/lsp/types.ts +13 -1
  701. package/src/lsp/utils.ts +31 -12
  702. package/src/main.ts +396 -216
  703. package/src/mcp/config-writer.ts +7 -3
  704. package/src/mcp/json-rpc.ts +35 -5
  705. package/src/mcp/manager.ts +31 -16
  706. package/src/mcp/oauth-discovery.ts +34 -4
  707. package/src/mcp/oauth-flow.ts +61 -8
  708. package/src/mcp/render.ts +7 -1
  709. package/src/mcp/startup-events.ts +21 -0
  710. package/src/mcp/tool-bridge.ts +2 -0
  711. package/src/mcp/transports/stdio.ts +224 -4
  712. package/src/mcp/types.ts +2 -0
  713. package/src/memories/index.ts +174 -1128
  714. package/src/memories/storage.ts +2 -41
  715. package/src/memory-backend/index.ts +14 -1
  716. package/src/memory-backend/local-backend.ts +18 -3
  717. package/src/memory-backend/off-backend.ts +9 -0
  718. package/src/memory-backend/resolve.ts +4 -6
  719. package/src/memory-backend/runtime.ts +66 -0
  720. package/src/memory-backend/types.ts +82 -2
  721. package/src/mnemopi/backend.ts +220 -28
  722. package/src/mnemopi/config.ts +138 -33
  723. package/src/mnemopi/state.ts +91 -11
  724. package/src/modes/acp/acp-agent.ts +149 -142
  725. package/src/modes/acp/acp-event-mapper.ts +5 -1
  726. package/src/modes/components/agent-dashboard.ts +17 -11
  727. package/src/modes/components/agent-hub.ts +1346 -0
  728. package/src/modes/components/assistant-message.ts +190 -80
  729. package/src/modes/components/bash-execution.ts +1 -1
  730. package/src/modes/components/btw-panel.ts +5 -1
  731. package/src/modes/components/chat-block.ts +111 -0
  732. package/src/modes/components/collab-prompt-message.ts +30 -0
  733. package/src/modes/components/compaction-summary-message.ts +168 -33
  734. package/src/modes/components/copy-selector.ts +2 -45
  735. package/src/modes/components/custom-editor.test.ts +96 -0
  736. package/src/modes/components/custom-editor.ts +405 -118
  737. package/src/modes/components/custom-message.ts +1 -3
  738. package/src/modes/components/diff.ts +13 -2
  739. package/src/modes/components/dynamic-border.ts +12 -3
  740. package/src/modes/components/execution-shared.ts +1 -2
  741. package/src/modes/components/extensions/extension-dashboard.ts +8 -5
  742. package/src/modes/components/extensions/extension-list.ts +1 -1
  743. package/src/modes/components/extensions/inspector-panel.ts +7 -3
  744. package/src/modes/components/extensions/state-manager.ts +36 -41
  745. package/src/modes/components/footer.ts +4 -2
  746. package/src/modes/components/history-search.ts +1 -1
  747. package/src/modes/components/hook-editor.ts +8 -0
  748. package/src/modes/components/hook-input.ts +8 -0
  749. package/src/modes/components/hook-message.ts +1 -3
  750. package/src/modes/components/hook-selector.ts +6 -7
  751. package/src/modes/components/index.ts +1 -0
  752. package/src/modes/components/late-diagnostics-message.ts +60 -0
  753. package/src/modes/components/login-dialog.ts +1 -1
  754. package/src/modes/components/logout-account-selector.ts +130 -0
  755. package/src/modes/components/mcp-add-wizard.ts +14 -1
  756. package/src/modes/components/model-selector.ts +177 -75
  757. package/src/modes/components/oauth-selector.ts +102 -16
  758. package/src/modes/components/overlay-box.ts +108 -0
  759. package/src/modes/components/plan-review-overlay.ts +845 -0
  760. package/src/modes/components/plan-toc.ts +138 -0
  761. package/src/modes/components/plugin-settings.ts +22 -5
  762. package/src/modes/components/read-tool-group.ts +442 -39
  763. package/src/modes/components/reset-usage-selector.ts +161 -0
  764. package/src/modes/components/segment-track.ts +44 -7
  765. package/src/modes/components/session-selector.ts +97 -37
  766. package/src/modes/components/settings-defs.ts +28 -6
  767. package/src/modes/components/settings-selector.ts +541 -93
  768. package/src/modes/components/skill-message.ts +0 -1
  769. package/src/modes/components/snapcompact-shape-preview-doc.md +11 -0
  770. package/src/modes/components/snapcompact-shape-preview.ts +193 -0
  771. package/src/modes/components/{status-line.ts → status-line/component.ts} +205 -168
  772. package/src/modes/components/status-line/index.ts +1 -0
  773. package/src/modes/components/status-line/presets.ts +3 -3
  774. package/src/modes/components/status-line/segments.ts +26 -7
  775. package/src/modes/components/status-line/types.ts +40 -9
  776. package/src/modes/components/tiny-title-download-progress.ts +1 -1
  777. package/src/modes/components/tips.txt +7 -3
  778. package/src/modes/components/todo-reminder.ts +0 -2
  779. package/src/modes/components/tool-execution.ts +236 -103
  780. package/src/modes/components/transcript-container.ts +724 -99
  781. package/src/modes/components/tree-selector.ts +19 -4
  782. package/src/modes/components/ttsr-notification.ts +72 -30
  783. package/src/modes/components/usage-row.ts +18 -0
  784. package/src/modes/components/user-message-selector.ts +1 -1
  785. package/src/modes/components/user-message.ts +28 -12
  786. package/src/modes/components/visual-truncate.ts +1 -1
  787. package/src/modes/components/welcome.ts +80 -22
  788. package/src/modes/controllers/command-controller-shared.ts +7 -6
  789. package/src/modes/controllers/command-controller.ts +210 -180
  790. package/src/modes/controllers/event-controller.ts +352 -142
  791. package/src/modes/controllers/extension-ui-controller.ts +167 -208
  792. package/src/modes/controllers/input-controller.ts +778 -162
  793. package/src/modes/controllers/mcp-command-controller.ts +232 -80
  794. package/src/modes/controllers/selector-controller.ts +284 -145
  795. package/src/modes/controllers/session-focus-controller.ts +112 -0
  796. package/src/modes/controllers/ssh-command-controller.ts +2 -2
  797. package/src/modes/controllers/streaming-reveal.ts +295 -0
  798. package/src/modes/controllers/tan-command-controller.ts +173 -0
  799. package/src/modes/controllers/tool-args-reveal.ts +174 -0
  800. package/src/modes/gradient-highlight.ts +21 -9
  801. package/src/modes/image-references.ts +33 -7
  802. package/src/modes/index.ts +8 -25
  803. package/src/modes/interactive-mode.ts +840 -186
  804. package/src/modes/magic-keywords.ts +28 -6
  805. package/src/modes/markdown-prose.ts +1 -1
  806. package/src/modes/oauth-manual-input.ts +30 -3
  807. package/src/modes/rpc/rpc-client.ts +186 -3
  808. package/src/modes/rpc/rpc-mode.ts +318 -24
  809. package/src/modes/rpc/rpc-subagents.ts +265 -0
  810. package/src/modes/rpc/rpc-types.ts +111 -2
  811. package/src/modes/runtime-init.ts +28 -3
  812. package/src/modes/session-observer-registry.ts +72 -3
  813. package/src/modes/setup-version.ts +11 -0
  814. package/src/modes/setup-wizard/index.ts +16 -4
  815. package/src/modes/setup-wizard/lazy.ts +16 -0
  816. package/src/modes/setup-wizard/scenes/glyph.ts +25 -7
  817. package/src/modes/setup-wizard/scenes/providers.ts +45 -12
  818. package/src/modes/setup-wizard/scenes/sign-in.ts +14 -13
  819. package/src/modes/setup-wizard/scenes/splash.ts +1 -1
  820. package/src/modes/setup-wizard/scenes/theme.ts +29 -2
  821. package/src/modes/setup-wizard/scenes/types.ts +11 -2
  822. package/src/modes/setup-wizard/scenes/web-search.ts +26 -9
  823. package/src/modes/setup-wizard/wizard-overlay.ts +40 -3
  824. package/src/modes/shared.ts +2 -0
  825. package/src/modes/theme/defaults/dark-poimandres.json +1 -1
  826. package/src/modes/theme/defaults/light-poimandres.json +1 -1
  827. package/src/modes/theme/shimmer.ts +20 -9
  828. package/src/modes/theme/theme-schema.json +1 -1
  829. package/src/modes/theme/theme.ts +342 -82
  830. package/src/modes/types.ts +60 -18
  831. package/src/modes/utils/context-usage.ts +88 -8
  832. package/src/modes/utils/copy-targets.ts +133 -27
  833. package/src/modes/utils/hotkeys-markdown.ts +3 -2
  834. package/src/modes/utils/ui-helpers.ts +191 -110
  835. package/src/modes/workflow.ts +10 -10
  836. package/src/plan-mode/approved-plan.ts +66 -43
  837. package/src/plan-mode/plan-protection.ts +4 -4
  838. package/src/priority.json +5 -1
  839. package/src/prompts/agents/designer.md +1 -1
  840. package/src/prompts/agents/explore.md +3 -3
  841. package/src/prompts/agents/librarian.md +2 -3
  842. package/src/prompts/agents/oracle.md +2 -2
  843. package/src/prompts/agents/plan.md +6 -6
  844. package/src/prompts/agents/reviewer.md +1 -1
  845. package/src/prompts/agents/task.md +6 -5
  846. package/src/prompts/bench.md +12 -0
  847. package/src/prompts/ci-green-request.md +5 -7
  848. package/src/prompts/goals/goal-budget-limit.md +2 -2
  849. package/src/prompts/goals/goal-continuation.md +4 -4
  850. package/src/prompts/goals/goal-mode-active.md +1 -1
  851. package/src/prompts/goals/guided-goal-interview.md +8 -0
  852. package/src/prompts/goals/guided-goal-system.md +12 -0
  853. package/src/prompts/memories/consolidation.md +2 -7
  854. package/src/prompts/memories/consolidation_system.md +4 -0
  855. package/src/prompts/memories/identity_review.md +2 -2
  856. package/src/prompts/memories/read-path.md +11 -10
  857. package/src/prompts/memories/stage_one_system.md +2 -2
  858. package/src/prompts/review-custom-request.md +1 -1
  859. package/src/prompts/system/agent-creation-architect.md +2 -2
  860. package/src/prompts/system/auto-continue.md +1 -1
  861. package/src/prompts/system/autolearn-guidance-learn.md +1 -0
  862. package/src/prompts/system/autolearn-guidance.md +7 -0
  863. package/src/prompts/system/autolearn-nudge.md +3 -0
  864. package/src/prompts/system/background-tan-dispatch.md +8 -0
  865. package/src/prompts/system/btw-user.md +2 -2
  866. package/src/prompts/system/commit-message-system.md +13 -1
  867. package/src/prompts/system/custom-system-prompt.md +1 -1
  868. package/src/prompts/system/eager-task.md +7 -0
  869. package/src/prompts/system/eager-todo.md +11 -6
  870. package/src/prompts/system/empty-stop-retry.md +4 -6
  871. package/src/prompts/system/irc-autoreply.md +6 -0
  872. package/src/prompts/system/irc-incoming.md +3 -4
  873. package/src/prompts/system/manual-continue.md +7 -0
  874. package/src/prompts/system/omfg-user.md +3 -4
  875. package/src/prompts/system/orchestrate-notice.md +10 -10
  876. package/src/prompts/system/personalities/default.md +26 -0
  877. package/src/prompts/system/personalities/friendly.md +17 -0
  878. package/src/prompts/system/personalities/pragmatic.md +15 -0
  879. package/src/prompts/system/plan-mode-active.md +70 -77
  880. package/src/prompts/system/plan-mode-approved.md +1 -1
  881. package/src/prompts/system/plan-mode-subagent.md +4 -5
  882. package/src/prompts/system/plan-mode-tool-decision-reminder.md +1 -1
  883. package/src/prompts/system/project-prompt.md +2 -2
  884. package/src/prompts/system/snapcompact-context-frames-note.md +1 -0
  885. package/src/prompts/system/snapcompact-context-stub.md +1 -0
  886. package/src/prompts/system/snapcompact-system-frames-note.md +1 -0
  887. package/src/prompts/system/snapcompact-system-stub.md +1 -0
  888. package/src/prompts/system/snapcompact-toolresult-note.md +1 -0
  889. package/src/prompts/system/subagent-system-prompt.md +7 -8
  890. package/src/prompts/system/system-prompt.md +28 -57
  891. package/src/prompts/system/tiny-title-system.md +1 -1
  892. package/src/prompts/system/title-marker-instruction.md +1 -0
  893. package/src/prompts/system/title-system-marker.md +16 -0
  894. package/src/prompts/system/title-system.md +16 -3
  895. package/src/prompts/system/ttsr-tool-reminder.md +1 -1
  896. package/src/prompts/system/workflow-notice.md +4 -4
  897. package/src/prompts/tools/ast-edit.md +1 -1
  898. package/src/prompts/tools/ast-grep.md +2 -2
  899. package/src/prompts/tools/bash.md +16 -8
  900. package/src/prompts/tools/browser.md +33 -43
  901. package/src/prompts/tools/debug.md +1 -1
  902. package/src/prompts/tools/eval.md +31 -51
  903. package/src/prompts/tools/find.md +0 -1
  904. package/src/prompts/tools/github.md +8 -7
  905. package/src/prompts/tools/goal.md +1 -1
  906. package/src/prompts/tools/image-gen.md +1 -1
  907. package/src/prompts/tools/inspect-image-system.md +1 -1
  908. package/src/prompts/tools/irc.md +39 -31
  909. package/src/prompts/tools/job.md +2 -1
  910. package/src/prompts/tools/learn.md +7 -0
  911. package/src/prompts/tools/lsp-late-diagnostic.md +8 -0
  912. package/src/prompts/tools/lsp.md +2 -2
  913. package/src/prompts/tools/manage-skill.md +9 -0
  914. package/src/prompts/tools/memory-edit.md +1 -1
  915. package/src/prompts/tools/patch.md +2 -2
  916. package/src/prompts/tools/read.md +31 -39
  917. package/src/prompts/tools/recall.md +1 -1
  918. package/src/prompts/tools/reflect.md +1 -1
  919. package/src/prompts/tools/render-mermaid.md +2 -2
  920. package/src/prompts/tools/replace.md +4 -10
  921. package/src/prompts/tools/rewind.md +2 -2
  922. package/src/prompts/tools/search-tool-bm25.md +1 -9
  923. package/src/prompts/tools/search.md +0 -1
  924. package/src/prompts/tools/ssh.md +0 -4
  925. package/src/prompts/tools/task-summary.md +5 -16
  926. package/src/prompts/tools/task.md +47 -31
  927. package/src/prompts/tools/todo.md +6 -3
  928. package/src/registry/agent-lifecycle.ts +218 -0
  929. package/src/registry/agent-registry.ts +46 -5
  930. package/src/sdk.ts +692 -219
  931. package/src/secrets/index.ts +8 -1
  932. package/src/secrets/obfuscator.ts +40 -19
  933. package/src/session/agent-session.ts +1577 -806
  934. package/src/session/agent-storage.ts +18 -9
  935. package/src/session/auth-broker-config.ts +30 -1
  936. package/src/session/auth-storage.ts +6 -0
  937. package/src/session/codex-auto-reset.ts +202 -0
  938. package/src/session/history-storage.ts +3 -2
  939. package/src/session/indexed-session-storage.ts +7 -10
  940. package/src/session/messages.ts +59 -95
  941. package/src/session/session-context.ts +352 -0
  942. package/src/session/session-dump-format.ts +12 -3
  943. package/src/session/session-entries.ts +194 -0
  944. package/src/session/session-history-format.ts +246 -0
  945. package/src/session/session-listing.ts +588 -0
  946. package/src/session/session-loader.ts +106 -0
  947. package/src/session/session-manager.ts +1003 -2920
  948. package/src/session/session-migrations.ts +78 -0
  949. package/src/session/session-paths.ts +193 -0
  950. package/src/session/session-persistence.ts +131 -0
  951. package/src/session/session-storage.ts +91 -30
  952. package/src/session/snapcompact-inline.ts +542 -0
  953. package/src/session/snapcompact-savings-journal.ts +113 -0
  954. package/src/session/streaming-output.ts +248 -11
  955. package/src/session/tool-choice-queue.ts +23 -11
  956. package/src/session/yield-queue.ts +20 -2
  957. package/src/slash-commands/acp-builtins.ts +25 -1
  958. package/src/slash-commands/available-commands.ts +105 -0
  959. package/src/slash-commands/builtin-registry.ts +575 -49
  960. package/src/slash-commands/helpers/active-oauth-account.ts +44 -0
  961. package/src/slash-commands/helpers/context-report.ts +28 -1
  962. package/src/slash-commands/helpers/logout.ts +88 -0
  963. package/src/slash-commands/helpers/reset-usage.ts +66 -0
  964. package/src/slash-commands/helpers/stats-dashboard.ts +85 -0
  965. package/src/slash-commands/helpers/usage-report.ts +38 -3
  966. package/src/slash-commands/types.ts +5 -9
  967. package/src/ssh/connection-manager.ts +27 -0
  968. package/src/ssh/ssh-executor.ts +60 -4
  969. package/src/stt/asr-client.ts +520 -0
  970. package/src/stt/asr-protocol.ts +65 -0
  971. package/src/stt/asr-worker.ts +790 -0
  972. package/src/stt/downloader.ts +107 -47
  973. package/src/stt/endpointer.ts +259 -0
  974. package/src/stt/index.ts +5 -1
  975. package/src/stt/models.ts +150 -0
  976. package/src/stt/recorder.ts +254 -67
  977. package/src/stt/stt-controller.ts +201 -22
  978. package/src/stt/transcriber.ts +37 -68
  979. package/src/stt/wav.ts +173 -0
  980. package/src/system-prompt.ts +52 -10
  981. package/src/task/agents.ts +3 -4
  982. package/src/task/commands.ts +3 -2
  983. package/src/task/discovery.ts +17 -24
  984. package/src/task/executor.ts +1054 -529
  985. package/src/task/index.ts +862 -757
  986. package/src/task/output-manager.ts +0 -11
  987. package/src/task/parallel.ts +3 -3
  988. package/src/task/prometheus-command.ts +2 -2
  989. package/src/task/render.ts +529 -182
  990. package/src/task/repair-args.ts +21 -9
  991. package/src/task/types.ts +144 -66
  992. package/src/task/worktree.ts +64 -56
  993. package/src/telemetry-export.ts +27 -9
  994. package/src/thinking.ts +9 -7
  995. package/src/tiny/models.ts +2 -2
  996. package/src/tiny/text.ts +5 -1
  997. package/src/tiny/title-client.ts +72 -20
  998. package/src/tiny/title-protocol.ts +1 -1
  999. package/src/tiny/worker.ts +23 -99
  1000. package/src/tool-discovery/tool-index.ts +2 -0
  1001. package/src/tools/archive-reader.ts +94 -2
  1002. package/src/tools/ask.ts +234 -177
  1003. package/src/tools/ast-edit.ts +136 -80
  1004. package/src/tools/ast-grep.ts +41 -45
  1005. package/src/tools/auto-generated-guard.ts +20 -3
  1006. package/src/tools/bash-interactive.ts +28 -8
  1007. package/src/tools/bash.ts +198 -35
  1008. package/src/tools/browser/attach.ts +26 -7
  1009. package/src/tools/browser/cmux/cmux-tab.ts +1264 -0
  1010. package/src/tools/browser/cmux/rpc.ts +156 -0
  1011. package/src/tools/browser/cmux/socket-client.ts +309 -0
  1012. package/src/tools/browser/launch.ts +11 -2
  1013. package/src/tools/browser/readable.ts +19 -2
  1014. package/src/tools/browser/registry.ts +52 -5
  1015. package/src/tools/browser/render.ts +13 -5
  1016. package/src/tools/browser/tab-protocol.ts +2 -0
  1017. package/src/tools/browser/tab-supervisor.ts +256 -34
  1018. package/src/tools/browser/tab-worker.ts +259 -91
  1019. package/src/tools/browser.ts +44 -2
  1020. package/src/tools/checkpoint.ts +1 -1
  1021. package/src/tools/conflict-detect.ts +50 -4
  1022. package/src/tools/debug.ts +27 -12
  1023. package/src/tools/eval-render.ts +32 -35
  1024. package/src/tools/eval.ts +26 -12
  1025. package/src/tools/fetch.ts +450 -99
  1026. package/src/tools/find.ts +182 -142
  1027. package/src/tools/gh-cache-invalidation.ts +255 -0
  1028. package/src/tools/gh-renderer.ts +104 -51
  1029. package/src/tools/gh.ts +232 -37
  1030. package/src/tools/github-cache.ts +97 -7
  1031. package/src/tools/grouped-file-output.ts +159 -52
  1032. package/src/tools/image-gen.ts +237 -132
  1033. package/src/tools/index.ts +147 -26
  1034. package/src/tools/inspect-image-renderer.ts +74 -45
  1035. package/src/tools/inspect-image.ts +12 -6
  1036. package/src/tools/irc.ts +626 -173
  1037. package/src/tools/job.ts +106 -29
  1038. package/src/tools/learn.ts +144 -0
  1039. package/src/tools/manage-skill.ts +104 -0
  1040. package/src/tools/memory-edit.ts +4 -4
  1041. package/src/tools/memory-recall.ts +7 -9
  1042. package/src/tools/memory-reflect.ts +5 -9
  1043. package/src/tools/memory-render.ts +23 -6
  1044. package/src/tools/memory-retain.ts +4 -4
  1045. package/src/tools/path-utils.ts +102 -48
  1046. package/src/tools/plan-mode-guard.ts +101 -40
  1047. package/src/tools/read.ts +475 -120
  1048. package/src/tools/render-mermaid.ts +1 -1
  1049. package/src/tools/render-utils.ts +132 -76
  1050. package/src/tools/renderers.ts +12 -1
  1051. package/src/tools/report-tool-issue.ts +14 -6
  1052. package/src/tools/resolve.ts +20 -3
  1053. package/src/tools/review.ts +2 -2
  1054. package/src/tools/search-tool-bm25.ts +37 -24
  1055. package/src/tools/search.ts +233 -115
  1056. package/src/tools/sqlite-reader.ts +26 -17
  1057. package/src/tools/ssh.ts +20 -14
  1058. package/src/tools/todo.ts +197 -191
  1059. package/src/tools/tool-result.ts +8 -0
  1060. package/src/tools/tool-timeouts.ts +1 -1
  1061. package/src/tools/tts.ts +205 -74
  1062. package/src/tools/write.ts +291 -155
  1063. package/src/tools/yield.ts +10 -1
  1064. package/src/tts/downloader.ts +64 -0
  1065. package/src/tts/index.ts +8 -0
  1066. package/src/tts/models.ts +137 -0
  1067. package/src/tts/player.ts +137 -0
  1068. package/src/tts/runtime.ts +21 -0
  1069. package/src/tts/streaming-player.ts +266 -0
  1070. package/src/tts/tts-client.ts +647 -0
  1071. package/src/tts/tts-protocol.ts +60 -0
  1072. package/src/tts/tts-worker.ts +505 -0
  1073. package/src/tts/vocalizer.ts +162 -0
  1074. package/src/tts/wav.ts +58 -0
  1075. package/src/tui/code-cell.ts +2 -7
  1076. package/src/tui/hyperlink.ts +40 -26
  1077. package/src/tui/output-block.ts +60 -108
  1078. package/src/tui/status-line.ts +5 -1
  1079. package/src/utils/block-context.ts +312 -0
  1080. package/src/utils/changelog.ts +27 -1
  1081. package/src/utils/clipboard.ts +91 -22
  1082. package/src/utils/commit-message-generator.ts +8 -3
  1083. package/src/utils/enhanced-paste.ts +230 -0
  1084. package/src/utils/file-mentions.ts +3 -1
  1085. package/src/utils/git.ts +315 -15
  1086. package/src/utils/image-loading.ts +65 -4
  1087. package/src/utils/session-color.ts +83 -9
  1088. package/src/utils/thinking-display.ts +37 -0
  1089. package/src/utils/title-generator.ts +73 -10
  1090. package/src/utils/tool-choice.ts +16 -0
  1091. package/src/utils/tools-manager.ts +19 -1
  1092. package/src/web/kagi.ts +28 -26
  1093. package/src/web/parallel.ts +7 -3
  1094. package/src/web/scrapers/arxiv.ts +1 -1
  1095. package/src/web/scrapers/github.ts +351 -3
  1096. package/src/web/scrapers/go-pkg.ts +1 -1
  1097. package/src/web/scrapers/iacr.ts +1 -1
  1098. package/src/web/scrapers/readthedocs.ts +1 -1
  1099. package/src/web/scrapers/twitter.ts +2 -1
  1100. package/src/web/scrapers/types.ts +87 -8
  1101. package/src/web/scrapers/wikipedia.ts +1 -1
  1102. package/src/web/scrapers/youtube.ts +9 -3
  1103. package/src/web/search/index.ts +15 -2
  1104. package/src/web/search/providers/anthropic.ts +62 -21
  1105. package/src/web/search/providers/base.ts +2 -1
  1106. package/src/web/search/providers/brave.ts +5 -2
  1107. package/src/web/search/providers/codex.ts +87 -51
  1108. package/src/web/search/providers/exa.ts +101 -10
  1109. package/src/web/search/providers/gemini.ts +49 -24
  1110. package/src/web/search/providers/jina.ts +15 -5
  1111. package/src/web/search/providers/kagi.ts +9 -2
  1112. package/src/web/search/providers/kimi.ts +45 -20
  1113. package/src/web/search/providers/parallel.ts +39 -24
  1114. package/src/web/search/providers/perplexity.ts +226 -63
  1115. package/src/web/search/providers/searxng.ts +19 -3
  1116. package/src/web/search/providers/synthetic.ts +16 -11
  1117. package/src/web/search/providers/tavily.ts +12 -9
  1118. package/src/web/search/providers/zai.ts +22 -9
  1119. package/src/web/search/render.ts +59 -64
  1120. package/src/web/search/types.ts +5 -1
  1121. package/dist/types/discovery/context-files.d.ts +0 -17
  1122. package/dist/types/exa/factory.d.ts +0 -13
  1123. package/dist/types/exa/render.d.ts +0 -19
  1124. package/dist/types/exa/researcher.d.ts +0 -9
  1125. package/dist/types/exa/search.d.ts +0 -9
  1126. package/dist/types/exa/websets.d.ts +0 -9
  1127. package/dist/types/export/html/template.generated.d.ts +0 -1
  1128. package/dist/types/modes/components/session-observer-overlay.d.ts +0 -11
  1129. package/dist/types/modes/components/status-line.d.ts +0 -77
  1130. package/dist/types/slash-commands/headless-plan.d.ts +0 -3
  1131. package/dist/types/stt/setup.d.ts +0 -18
  1132. package/scripts/generate-template.ts +0 -33
  1133. package/src/discovery/context-files.ts +0 -49
  1134. package/src/exa/factory.ts +0 -60
  1135. package/src/exa/render.ts +0 -244
  1136. package/src/exa/researcher.ts +0 -36
  1137. package/src/exa/search.ts +0 -47
  1138. package/src/exa/websets.ts +0 -248
  1139. package/src/export/html/template.generated.ts +0 -2
  1140. package/src/modes/components/session-observer-overlay.ts +0 -852
  1141. package/src/slash-commands/headless-plan.ts +0 -142
  1142. package/src/stt/setup.ts +0 -52
  1143. package/src/stt/transcribe.py +0 -70
  1144. /package/dist/types/extensibility/{legacy-pi-coding-agent-shim.d.ts → legacy-package-agent-shim.d.ts} +0 -0
  1145. /package/src/extensibility/{legacy-pi-coding-agent-shim.ts → legacy-package-agent-shim.ts} +0 -0
@@ -2,17 +2,21 @@
2
2
  'use strict';
3
3
 
4
4
  // ============================================================
5
- // DATA LOADING
5
+ // BOOT
6
6
  // ============================================================
7
-
8
- const base64 = document.getElementById('session-data').textContent;
9
- const binary = atob(base64);
10
- const bytes = new Uint8Array(binary.length);
11
- for (let i = 0; i < binary.length; i++) {
12
- bytes[i] = binary.charCodeAt(i);
13
- }
14
- const data = JSON.parse(new TextDecoder('utf-8').decode(bytes));
15
- const { header, entries, leafId: defaultLeafId, systemPrompt, tools } = data;
7
+ //
8
+ // Two boot paths share this template:
9
+ // - Static export: session JSON rides base64-embedded in #session-data.
10
+ // - Share viewer: share-loader.js sets `window.__PROMETHEUS_SESSION_DATA__` to
11
+ // a promise resolving to the session JSON (fetched + decrypted).
12
+ // The entire app lives in bootSession(); its body keeps the original
13
+ // one-level indentation to avoid a whole-file reindent.
14
+ function bootSession(data) {
15
+ const { header, entries, leafId: defaultLeafId, systemPrompt, tools, subSessions } = data;
16
+
17
+ // Session render context: scopes entry lookups and tool-view host
18
+ // wiring to one transcript (main session or an embedded subagent).
19
+ const mainSctx = { entries, prefix: '', idPrefix: 'entry-' };
16
20
 
17
21
  // ============================================================
18
22
  // URL PARAMETER HANDLING
@@ -229,6 +233,13 @@
229
233
  const displayIndent = multipleRoots ? Math.max(0, indent - 1) : indent;
230
234
  const connector = showConnector && !isVirtualRootChild ? (isLast ? '└─ ' : '├─ ') : '';
231
235
  const connectorPosition = connector ? displayIndent - 1 : -1;
236
+ // Chain rows (no connector of their own) under a last-sibling (`└─`)
237
+ // branch stay anchored by a vertical drawn one level right of the
238
+ // suppressed gutter — below the branch head's content — never in the
239
+ // `└─` corner column itself (#2298, #2325). Chains under `├─` heads
240
+ // are already anchored by the sibling line (`show: true` gutter).
241
+ const nearestGutter = !connector ? gutters[gutters.length - 1] : undefined;
242
+ const chainAnchorLevel = nearestGutter && !nearestGutter.show ? nearestGutter.position + 1 : -1;
232
243
 
233
244
  const totalChars = displayIndent * 3;
234
245
  const prefixChars = [];
@@ -238,7 +249,12 @@
238
249
 
239
250
  const gutter = gutters.find(g => g.position === level);
240
251
  if (gutter) {
241
- prefixChars.push(posInLevel === 0 ? (gutter.show ? '│' : ' ') : ' ');
252
+ // Standard tree semantics: `│` only while more siblings continue
253
+ // below (`show`), space below a `└─`.
254
+ prefixChars.push(posInLevel === 0 && gutter.show ? '│' : ' ');
255
+ } else if (level === chainAnchorLevel) {
256
+ // Chain anchor for rows under a `└─` branch head.
257
+ prefixChars.push(posInLevel === 0 ? '│' : ' ');
242
258
  } else if (connector && level === connectorPosition) {
243
259
  if (posInLevel === 0) {
244
260
  prefixChars.push(isLast ? '└' : '├');
@@ -434,6 +450,26 @@
434
450
  return div.innerHTML;
435
451
  }
436
452
 
453
+ function isDotOnlyThinking(text) {
454
+ let sawDot = false;
455
+ for (let i = 0; i < text.length; i++) {
456
+ const code = text.charCodeAt(i);
457
+ if (code === 0x2e || code === 0x2026) {
458
+ sawDot = true;
459
+ continue;
460
+ }
461
+ if (code === 0x20 || code === 0x09 || code === 0x0a || code === 0x0d) continue;
462
+ return false;
463
+ }
464
+ return sawDot;
465
+ }
466
+
467
+ function visibleThinkingText(block) {
468
+ const text = block.thinking.trim();
469
+ if (!text) return '';
470
+ return isDotOnlyThinking(text) ? '' : text;
471
+ }
472
+
437
473
  /**
438
474
  * Truncate string to maxLen chars, append "..." if truncated.
439
475
  */
@@ -618,29 +654,8 @@
618
654
  return text.replace(/\t/g, ' ');
619
655
  }
620
656
 
621
- /** Safely coerce value to string for display. Returns null if invalid type. */
622
- function str(value) {
623
- if (typeof value === 'string') return value;
624
- if (value == null) return '';
625
- return null;
626
- }
627
-
628
- function getLanguageFromPath(filePath) {
629
- const ext = filePath.split('.').pop()?.toLowerCase();
630
- const extToLang = {
631
- ts: 'typescript', tsx: 'typescript', js: 'javascript', jsx: 'javascript',
632
- py: 'python', rb: 'ruby', rs: 'rust', go: 'go', java: 'java',
633
- c: 'c', cpp: 'cpp', h: 'c', hpp: 'cpp', cs: 'csharp',
634
- php: 'php', sh: 'bash', bash: 'bash', zsh: 'bash',
635
- sql: 'sql', html: 'html', css: 'css', scss: 'scss',
636
- json: 'json', yaml: 'yaml', yml: 'yaml', xml: 'xml',
637
- md: 'markdown', dockerfile: 'dockerfile'
638
- };
639
- return extToLang[ext];
640
- }
641
-
642
- function findToolResult(toolCallId) {
643
- for (const entry of entries) {
657
+ function findToolResult(toolCallId, entryList) {
658
+ for (const entry of entryList) {
644
659
  if (entry.type === 'message' && entry.message.role === 'toolResult') {
645
660
  if (entry.message.toolCallId === toolCallId) {
646
661
  return entry.message;
@@ -709,884 +724,222 @@
709
724
  // ============================================================
710
725
  // TOOL CALL RENDERING
711
726
  // ============================================================
712
-
713
- // Shared helpers for per-tool renderers.
714
- function toolHead(label, pathHtml, badges) {
715
- let html = '<div class="tool-header"><span class="tool-name">' + escapeHtml(label) + '</span>';
716
- if (pathHtml) html += ' <span class="tool-path">' + pathHtml + '</span>';
717
- if (badges) {
718
- for (const badge of badges) {
719
- if (badge != null && badge !== '') {
720
- html += ' <span class="tool-badge">' + escapeHtml(String(badge)) + '</span>';
721
- }
722
- }
723
- }
724
- html += '</div>';
725
- return html;
726
- }
727
-
728
- function invalidArgHtml() {
729
- return '<span class="tool-error">[invalid arg]</span>';
730
- }
731
-
732
- function pathDisplay(filePath, offset, limit) {
733
- if (filePath == null) return invalidArgHtml();
734
- let html = escapeHtml(shortenPath(filePath || ''));
735
- if (offset !== undefined || limit !== undefined) {
736
- const start = offset == null ? 1 : offset;
737
- const end = limit !== undefined ? start + limit - 1 : '';
738
- html += '<span class="line-numbers">:' + start + (end ? '-' + end : '') + '</span>';
739
- }
740
- return html;
741
- }
742
-
743
- function codeBlock(code, lang) {
744
- if (code == null || code === '') return '';
745
- const text = String(code);
746
- let highlighted;
747
- try {
748
- highlighted = lang ? hljs.highlight(text, { language: lang }).value : escapeHtml(text);
749
- } catch {
750
- highlighted = escapeHtml(text);
751
- }
752
- return '<div class="tool-output"><pre><code class="hljs">' + highlighted + '</code></pre></div>';
753
- }
754
-
755
- // Per-tool renderers. Each accepts (name, args, result, ctx) and returns the inner HTML.
756
- function renderBash(name, args, result, ctx) {
757
- const command = str(args.command);
758
- const cwd = str(args.cwd);
759
- const env = args.env && typeof args.env === 'object' ? args.env : null;
760
- const cmdDisplay = command === null ? invalidArgHtml() : escapeHtml(command || '...');
761
- let prefix = '';
762
- if (env) {
763
- for (const [k, v] of Object.entries(env)) {
764
- prefix += escapeHtml(k) + '=' + escapeHtml(String(v)) + ' ';
765
- }
766
- }
767
- let html = '<div class="tool-command">$ ' + prefix + cmdDisplay + '</div>';
768
- const badges = [];
769
- if (cwd) badges.push('cwd=' + shortenPath(cwd));
770
- if (args.timeout) badges.push('timeout=' + args.timeout + 's');
771
- if (args.pty) badges.push('pty');
772
- if (args.head) badges.push('head=' + args.head);
773
- if (args.tail) badges.push('tail=' + args.tail);
774
- if (badges.length) {
775
- html += '<div class="tool-meta">' + badges.map(b => '<span class="tool-badge">' + escapeHtml(b) + '</span>').join(' ') + '</div>';
776
- }
777
- if (result) {
778
- html += ctx.renderResultImages();
779
- const output = ctx.getResultText().trim();
780
- if (output) html += formatExpandableOutput(output, 5);
781
- }
782
- return html;
783
- }
784
-
785
- function renderJsLike(name, args, result, ctx) {
786
- let html = toolHead(name, '');
787
- const cells = result && result.details && Array.isArray(result.details.cells) ? result.details.cells : null;
788
- if (cells) {
789
- for (const cell of cells) {
790
- html += '<div class="tool-cell">';
791
- if (cell && cell.title) html += '<div class="tool-cell-title">' + escapeHtml(String(cell.title)) + '</div>';
792
- const code = cell && typeof cell.code === 'string' ? cell.code : '';
793
- const lang = cell && cell.language === 'js' ? 'javascript' : 'python';
794
- html += codeBlock(code, lang);
795
- html += '</div>';
796
- }
797
- } else if (typeof args.input === 'string') {
798
- html += codeBlock(args.input, null);
799
- } else {
800
- html += '<div class="tool-error">[missing input]</div>';
801
- }
802
- if (result) {
803
- html += ctx.renderResultImages();
804
- const output = ctx.getResultText();
805
- if (output) html += formatExpandableOutput(output, 10);
806
- }
807
- return html;
808
- }
809
-
810
- function renderRead(name, args, result, ctx) {
811
- const filePath = str(args.file_path == null ? args.path : args.file_path);
812
- let pathHtml = pathDisplay(filePath, args.offset, args.limit);
813
- if (args.sel) pathHtml += '<span class="line-numbers">:' + escapeHtml(String(args.sel)) + '</span>';
814
- let html = toolHead('read', pathHtml);
815
- if (result) {
816
- html += ctx.renderResultImages();
817
- const output = ctx.getResultText();
818
- const lang = filePath ? getLanguageFromPath(filePath) : null;
819
- if (output) html += formatExpandableOutput(output, 10, lang);
820
- }
821
- return html;
822
- }
823
-
824
- function renderWrite(name, args, result, ctx) {
825
- const filePath = str(args.file_path == null ? args.path : args.file_path);
826
- const content = str(args.content);
827
- const pathHtml = filePath === null ? invalidArgHtml() : escapeHtml(shortenPath(filePath || ''));
828
- const lineCount = (content != null && content !== '') ? content.split('\n').length : 0;
829
- const badges = lineCount > 10 ? ['(' + lineCount + ' lines)'] : null;
830
- let html = toolHead('write', pathHtml, badges);
831
- if (content === null) {
832
- html += '<div class="tool-error">[invalid content arg - expected string]</div>';
833
- } else if (content) {
834
- const lang = filePath ? getLanguageFromPath(filePath) : null;
835
- html += formatExpandableOutput(content, 10, lang);
836
- }
837
- if (result) {
838
- const output = ctx.getResultText().trim();
839
- if (output) html += '<div class="tool-output"><div>' + escapeHtml(output) + '</div></div>';
840
- }
841
- return html;
842
- }
843
-
844
- function renderEdit(name, args, result, ctx) {
845
- const filePath = str(args.file_path == null ? args.path : args.file_path);
846
- const pathHtml = filePath ? escapeHtml(shortenPath(filePath)) : '';
847
- let html = toolHead('edit', pathHtml);
848
- if (typeof args.input === 'string' && args.input.length) {
849
- html += codeBlock(args.input, null);
850
- } else if (Array.isArray(args.edits)) {
851
- html += '<div class="tool-args">';
852
- for (const e of args.edits) {
853
- const op = e && typeof e.op === 'string' ? e.op : '?';
854
- const sel = e && typeof e.sel === 'string' ? e.sel : '?';
855
- html += '<div class="tool-arg"><span class="tool-arg-key">' + escapeHtml(op) + '</span> <span class="tool-arg-val">' + escapeHtml(sel) + '</span></div>';
856
- }
857
- html += '</div>';
858
- }
859
- if (result?.details?.diff) {
860
- const diffLines = String(result.details.diff).split('\n');
861
- html += '<div class="tool-diff">';
862
- for (const line of diffLines) {
863
- const cls = line.match(/^\+/) ? 'diff-added' : line.match(/^-/) ? 'diff-removed' : 'diff-context';
864
- html += '<div class="' + cls + '">' + escapeHtml(replaceTabs(line)) + '</div>';
865
- }
866
- html += '</div>';
867
- } else if (result) {
868
- const output = ctx.getResultText().trim();
869
- if (output) html += '<div class="tool-output"><pre>' + escapeHtml(output) + '</pre></div>';
870
- }
871
- return html;
872
- }
873
-
874
- function renderAstEdit(name, args, result, ctx) {
875
- const lang = args.lang || null;
876
- const paths = Array.isArray(args.paths) ? args.paths.map(p => shortenPath(String(p))).join(', ') : (args.path ? shortenPath(String(args.path)) : '');
877
- const pathHtml = paths ? escapeHtml(paths) : '';
878
- const badges = [];
879
- if (lang) badges.push(lang);
880
- if (args.glob) badges.push('glob=' + args.glob);
881
- if (args.sel) badges.push('sel=' + args.sel);
882
- let html = toolHead('ast_edit', pathHtml, badges);
883
- if (Array.isArray(args.ops)) {
884
- for (const op of args.ops) {
885
- html += '<div class="tool-cell">';
886
- html += '<div class="tool-cell-title">pattern</div>';
887
- html += codeBlock(String(op?.pat == null ? '' : op.pat), lang);
888
- html += '<div class="tool-cell-title">replacement</div>';
889
- html += codeBlock(String(op?.out == null ? '' : op.out), lang);
890
- html += '</div>';
891
- }
892
- }
893
- if (result) {
894
- const output = ctx.getResultText();
895
- if (output) html += formatExpandableOutput(output, 10);
896
- }
897
- return html;
727
+ //
728
+ // Tool calls render through the bundled <prometheus-tool-view> web component
729
+ // (tool-views.generated.js the same React renderers collab-web uses).
730
+ // Payloads are handed over via a global store keyed by data-key, which
731
+ // survives innerHTML serialization and cloneNode round trips.
732
+
733
+ const TOOL_VIEW_DATA = new Map();
734
+ globalThis.__PROMETHEUS_TOOL_VIEW_DATA = TOOL_VIEW_DATA;
735
+ let toolViewSeq = 0;
736
+
737
+ function renderToolCall(call, sctx) {
738
+ const result = findToolResult(call.id, sctx.entries);
739
+ const statusClass = result ? (result.isError ? 'error' : 'success') : 'pending';
740
+ const key = 'tv' + (++toolViewSeq);
741
+ TOOL_VIEW_DATA.set(key, {
742
+ name: call.name,
743
+ args: call.arguments || {},
744
+ result: result || undefined,
745
+ host: {
746
+ hasAgent: (id) => !!lookupSubSession(sctx.prefix, id),
747
+ openAgent: (id) => openSubSession(joinKey(sctx.prefix, id)),
748
+ },
749
+ });
750
+ return '<prometheus-tool-view class="tool-execution ' + statusClass + '" data-key="' + key + '" open></prometheus-tool-view>';
898
751
  }
899
752
 
900
- function renderAstGrep(name, args, result, ctx) {
901
- const lang = args.lang || null;
902
- const pathHtml = args.path ? escapeHtml(shortenPath(String(args.path))) : '';
903
- const badges = [];
904
- if (lang) badges.push(lang);
905
- if (args.glob) badges.push('glob=' + args.glob);
906
- if (args.sel) badges.push('sel=' + args.sel);
907
- let html = toolHead('ast_grep', pathHtml, badges);
908
- if (Array.isArray(args.pat)) {
909
- for (const pat of args.pat) {
910
- html += '<div class="tool-cell">' + codeBlock(String(pat == null ? '' : pat), lang) + '</div>';
911
- }
912
- }
913
- if (result) {
914
- const output = ctx.getResultText();
915
- if (output) html += formatExpandableOutput(output, 10);
916
- }
917
- return html;
918
- }
753
+ // ============================================================
754
+ // SUB-SESSION OVERLAY
755
+ // ============================================================
756
+ //
757
+ // Task tool cards expose agent chips (wired through the payload `host`
758
+ // above); clicking one opens that subagent's transcript in a stacked
759
+ // overlay. Keys are slash-joined agent ids relative to the main
760
+ // session: top-level agent 'ToolAsk', its child 'ToolAsk/Helper'.
919
761
 
920
- function renderGrep(name, args, result, ctx) {
921
- const pattern = str(args.pattern);
922
- const pathHtml = args.path ? escapeHtml(shortenPath(String(args.path))) : escapeHtml('.');
923
- const patHtml = pattern === null ? invalidArgHtml() : escapeHtml(pattern);
924
- let head = '<span class="tool-name">grep</span> <span class="tool-pattern">/' + patHtml + '/</span>';
925
- head += ' <span class="tool-arg-key">in</span> <span class="tool-path">' + pathHtml + '</span>';
926
- const badges = [];
927
- if (args.glob) badges.push('glob=' + args.glob);
928
- if (args.type) badges.push('type=' + args.type);
929
- if (args.i) badges.push('i');
930
- if (args.multiline) badges.push('multiline');
931
- for (const b of badges) head += ' <span class="tool-badge">' + escapeHtml(b) + '</span>';
932
- let html = '<div class="tool-header">' + head + '</div>';
933
- if (result) {
934
- const output = ctx.getResultText();
935
- if (output) html += formatExpandableOutput(output, 10);
936
- }
937
- return html;
762
+ function joinKey(prefix, id) {
763
+ return prefix ? prefix + '/' + id : id;
938
764
  }
939
765
 
940
- function renderFind(name, args, result, ctx) {
941
- const paths = Array.isArray(args.paths) ? args.paths.map(p => shortenPath(String(p))).join(', ') : (str(args.pattern) || '.');
942
- const patHtml = paths ? escapeHtml(paths) : invalidArgHtml();
943
- const badges = [];
944
- if (args.limit) badges.push('limit=' + args.limit);
945
- if (args.hidden === false) badges.push('no-hidden');
946
- let html = toolHead('find', '<span class="tool-pattern">' + patHtml + '</span>', badges.length ? badges : null);
947
- if (result) {
948
- const output = ctx.getResultText();
949
- if (output) html += formatExpandableOutput(output, 10);
950
- }
951
- return html;
766
+ function lookupSubSession(prefix, id) {
767
+ return subSessions ? subSessions[joinKey(prefix, id)] : undefined;
952
768
  }
953
769
 
954
- function renderLsp(name, args, result, ctx) {
955
- const action = str(args.action) || '?';
956
- let head = '<span class="tool-name">lsp</span> <span class="tool-badge">' + escapeHtml(action) + '</span>';
957
- if (args.file && args.file !== '*') {
958
- head += ' <span class="tool-path">' + escapeHtml(shortenPath(String(args.file))) + '</span>';
959
- } else if (args.file === '*') {
960
- head += ' <span class="tool-badge">workspace</span>';
961
- }
962
- if (args.line) head += '<span class="line-numbers">:' + args.line + '</span>';
963
- if (args.symbol) head += ' <span class="tool-arg-val">' + escapeHtml(String(args.symbol)) + '</span>';
964
- if (args.query) head += ' <span class="tool-arg-key">query=</span><span class="tool-arg-val">' + escapeHtml(String(args.query)) + '</span>';
965
- if (args.new_name) head += ' <span class="tool-arg-key">→</span> <span class="tool-arg-val">' + escapeHtml(String(args.new_name)) + '</span>';
966
- let html = '<div class="tool-header">' + head + '</div>';
967
- if (result) {
968
- const output = ctx.getResultText();
969
- if (output) html += formatExpandableOutput(output, 12);
970
- }
971
- return html;
972
- }
973
-
974
- function todoRoman(n) {
975
- if (n <= 0) return '';
976
- var pairs = [[1000,'M'],[900,'CM'],[500,'D'],[400,'CD'],[100,'C'],[90,'XC'],[50,'L'],[40,'XL'],[10,'X'],[9,'IX'],[5,'V'],[4,'IV'],[1,'I']];
977
- var out = '', rem = n;
978
- for (var i = 0; i < pairs.length; i++) {
979
- while (rem >= pairs[i][0]) { out += pairs[i][1]; rem -= pairs[i][0]; }
770
+ // Render context per sub-session (entries scoped to that transcript).
771
+ const subSctxCache = new Map();
772
+ function getSubSctx(key) {
773
+ let sctx = subSctxCache.get(key);
774
+ if (!sctx) {
775
+ sctx = {
776
+ entries: subSessions[key].entries,
777
+ prefix: key,
778
+ idPrefix: 'sub-' + key.replace(/[^A-Za-z0-9_-]/g, '_') + '-entry-',
779
+ };
780
+ subSctxCache.set(key, sctx);
980
781
  }
981
- return out;
782
+ return sctx;
982
783
  }
983
784
 
984
- function renderTodo(name, args, result, ctx) {
985
- let html = toolHead('todo');
986
- const ops = Array.isArray(args.ops) ? args.ops : null;
987
- if (ops) {
988
- html += '<div class="tool-args">';
989
- for (const op of ops) {
990
- const t = op && op.op ? op.op : '?';
991
- let line = '<span class="tool-arg-key">' + escapeHtml(t) + '</span>';
992
- if (op?.id) line += ' <span class="tool-arg-val">' + escapeHtml(String(op.id)) + '</span>';
993
- if (op?.status) line += ' <span class="tool-badge">' + escapeHtml(String(op.status)) + '</span>';
994
- if (op?.content) line += ' ' + escapeHtml(truncate(String(op.content), 80));
995
- if (op?.task && typeof op.task === 'object' && op.task.content) line += ' ' + escapeHtml(truncate(String(op.task.content), 80));
996
- html += '<div class="tool-arg">' + line + '</div>';
997
- }
998
- html += '</div>';
999
- }
1000
- const phases = result?.details?.phases;
1001
- if (Array.isArray(phases)) {
1002
- html += '<div class="todo-tree">';
1003
- for (var __i = 0; __i < phases.length; __i++) {
1004
- var phase = phases[__i];
1005
- var phaseLabel = todoRoman(__i + 1) + '. ' + String(phase.name || '');
1006
- html += '<div class="todo-phase">' + escapeHtml(phaseLabel) + '</div>';
1007
- if (Array.isArray(phase.tasks)) {
1008
- for (const task of phase.tasks) {
1009
- const status = task.status || 'pending';
1010
- const icon = status === 'completed' ? '✓' : status === 'in_progress' ? '→' : status === 'abandoned' ? '✕' : '○';
1011
- html += '<div class="todo-task todo-' + status + '"><span class="todo-icon">' + icon + '</span> ' + escapeHtml(String(task.content || '')) + '</div>';
1012
- }
1013
- }
1014
- }
1015
- html += '</div>';
1016
- } else if (result) {
1017
- const output = ctx.getResultText();
1018
- if (output) html += formatExpandableOutput(output, 8);
785
+ /**
786
+ * Root-to-leaf path through an arbitrary entry list (subagent
787
+ * transcripts are linear chains; same parent-walk as getPath).
788
+ */
789
+ function getPathIn(entryList, targetId) {
790
+ const map = new Map();
791
+ for (const e of entryList) map.set(e.id, e);
792
+ let current = targetId ? map.get(targetId) : undefined;
793
+ if (!current && entryList.length > 0) current = entryList[entryList.length - 1];
794
+ const path = [];
795
+ while (current) {
796
+ path.unshift(current);
797
+ if (!current.parentId || current.parentId === current.id) break;
798
+ current = map.get(current.parentId);
1019
799
  }
1020
- return html;
800
+ return path;
1021
801
  }
1022
802
 
1023
- function renderTask(name, args, result, ctx) {
1024
- const agent = str(args.agent) || '?';
1025
- const tasks = Array.isArray(args.tasks) ? args.tasks : [];
1026
- const badges = ['agent=' + agent, tasks.length + ' subtask' + (tasks.length === 1 ? '' : 's')];
1027
- if (args.isolated) badges.push('isolated');
1028
- let html = toolHead('task', '', badges);
1029
- if (tasks.length) {
1030
- html += '<div class="tool-args">';
1031
- for (const t of tasks) {
1032
- const id = t?.id ? escapeHtml(String(t.id)) : '?';
1033
- const desc = t?.description ? escapeHtml(String(t.description)) : '';
1034
- html += '<div class="tool-arg"><span class="tool-arg-key">' + id + '</span> ' + desc + '</div>';
803
+ const overlayStack = []; // slash-joined keys, root-first chain
804
+ const subSessionBodyCache = new Map(); // key -> rendered body element
805
+ let subOverlayEl = null;
806
+ let subOverlayLastFocus = null;
807
+
808
+ function ensureSubOverlay() {
809
+ if (subOverlayEl) return subOverlayEl;
810
+ subOverlayEl = document.createElement('div');
811
+ subOverlayEl.id = 'subsession-overlay';
812
+ subOverlayEl.innerHTML = `
813
+ <div class="subsession-backdrop"></div>
814
+ <div class="subsession-panel" role="dialog" aria-modal="true" aria-label="Subagent session" tabindex="-1">
815
+ <div class="subsession-header">
816
+ <nav class="subsession-breadcrumb" aria-label="Subagent breadcrumb"></nav>
817
+ <button type="button" class="subsession-close" title="Close (Esc)" aria-label="Close subagent view">&times;</button>
818
+ </div>
819
+ <div class="subsession-meta"></div>
820
+ <div class="subsession-body"></div>
821
+ </div>`;
822
+ subOverlayEl.querySelector('.subsession-backdrop').addEventListener('click', popSubSession);
823
+ subOverlayEl.querySelector('.subsession-close').addEventListener('click', closeAllSubSessions);
824
+ document.body.appendChild(subOverlayEl);
825
+ return subOverlayEl;
826
+ }
827
+
828
+ function buildSubSessionBody(key) {
829
+ let body = subSessionBodyCache.get(key);
830
+ if (body) return body;
831
+ const sub = subSessions[key];
832
+ const sctx = getSubSctx(key);
833
+ body = document.createElement('div');
834
+ body.className = 'subsession-messages';
835
+ for (const entry of getPathIn(sub.entries, sub.leafId)) {
836
+ const node = renderEntryToNode(entry, sctx);
837
+ if (node) body.appendChild(node);
838
+ }
839
+ if (!body.firstChild) {
840
+ const empty = document.createElement('div');
841
+ empty.className = 'subsession-empty';
842
+ empty.textContent = '(no renderable entries)';
843
+ body.appendChild(empty);
844
+ }
845
+ subSessionBodyCache.set(key, body);
846
+ return body;
847
+ }
848
+
849
+ function subSessionMetaText(key) {
850
+ const sub = subSessions[key];
851
+ const stats = computeStats(sub.entries);
852
+ const parts = [];
853
+ if (stats.models.length > 0) parts.push(stats.models.join(', '));
854
+ parts.push(sub.entries.length + (sub.entries.length === 1 ? ' entry' : ' entries'));
855
+ return parts.join(' · ');
856
+ }
857
+
858
+ function renderSubOverlay() {
859
+ const key = overlayStack[overlayStack.length - 1];
860
+ const el = ensureSubOverlay();
861
+
862
+ const crumbs = el.querySelector('.subsession-breadcrumb');
863
+ crumbs.innerHTML = '';
864
+ const segments = key.split('/');
865
+ for (let i = 0; i < segments.length; i++) {
866
+ if (i > 0) {
867
+ const sep = document.createElement('span');
868
+ sep.className = 'subsession-crumb-sep';
869
+ sep.textContent = '›';
870
+ crumbs.appendChild(sep);
1035
871
  }
1036
- html += '</div>';
1037
- }
1038
- if (result) {
1039
- const output = ctx.getResultText();
1040
- if (output) html += formatExpandableOutput(output, 12);
1041
- }
1042
- return html;
1043
- }
1044
-
1045
- function renderWebSearch(name, args, result, ctx) {
1046
- const query = str(args.query);
1047
- const queryHtml = query === null ? invalidArgHtml() : escapeHtml(query);
1048
- const badges = [];
1049
- if (args.recency) badges.push('recency=' + args.recency);
1050
- if (args.limit) badges.push('limit=' + args.limit);
1051
- let html = toolHead('web_search', '<span class="tool-pattern">' + queryHtml + '</span>', badges);
1052
- if (result) {
1053
- const output = ctx.getResultText();
1054
- if (output) html += formatExpandableOutput(output, 12, 'markdown');
1055
- }
1056
- return html;
1057
- }
1058
-
1059
- function renderFetch(name, args, result, ctx) {
1060
- const url = str(args.url) || '';
1061
- const badges = args.method ? [String(args.method)] : null;
1062
- let html = toolHead('fetch', '<span class="tool-path">' + escapeHtml(url) + '</span>', badges);
1063
- if (result) {
1064
- const output = ctx.getResultText();
1065
- if (output) html += formatExpandableOutput(output, 10);
1066
- }
1067
- return html;
1068
- }
1069
-
1070
- function renderDebug(name, args, result, ctx) {
1071
- const action = str(args.action) || '?';
1072
- const badges = [];
1073
- if (args.adapter) badges.push(args.adapter);
1074
- if (args.program) badges.push('program=' + shortenPath(String(args.program)));
1075
- if (args.file) badges.push('file=' + shortenPath(String(args.file)));
1076
- if (args.line) badges.push('line=' + args.line);
1077
- let head = '<span class="tool-name">debug</span> <span class="tool-badge">' + escapeHtml(action) + '</span>';
1078
- for (const b of badges) head += ' <span class="tool-badge">' + escapeHtml(String(b)) + '</span>';
1079
- let html = '<div class="tool-header">' + head + '</div>';
1080
- if (args.expression) html += codeBlock(String(args.expression));
1081
- if (result) {
1082
- const output = ctx.getResultText();
1083
- if (output) html += formatExpandableOutput(output, 10);
1084
- }
1085
- return html;
1086
- }
1087
-
1088
- function renderBrowser(name, args, result, ctx) {
1089
- const action = str(args.action) || '?';
1090
- const tabName = str(args.name);
1091
- const badges = [];
1092
- if (tabName) badges.push('name=' + tabName);
1093
- if (args.url) badges.push(String(args.url));
1094
- if (args.app && typeof args.app === 'object') {
1095
- if (args.app.path) badges.push('app=' + shortenPath(String(args.app.path)));
1096
- else if (args.app.cdp_url) badges.push('cdp=' + String(args.app.cdp_url));
1097
- }
1098
- if (args.all) badges.push('all');
1099
- if (args.kill) badges.push('kill');
1100
- let head = '<span class="tool-name">browser</span> <span class="tool-badge">' + escapeHtml(action) + '</span>';
1101
- for (const b of badges) head += ' <span class="tool-badge">' + escapeHtml(String(b)) + '</span>';
1102
- let html = '<div class="tool-header">' + head + '</div>';
1103
- if (action === 'run' && args.code) {
1104
- html += codeBlock(String(args.code), 'javascript');
1105
- }
1106
- if (result) {
1107
- html += ctx.renderResultImages();
1108
- const output = ctx.getResultText();
1109
- if (output) html += formatExpandableOutput(output, 10);
1110
- }
1111
- return html;
1112
- }
1113
-
1114
- function renderInspectImage(name, args, result, ctx) {
1115
- const p = str(args.path == null ? args.url : args.path) || '';
1116
- let html = toolHead('inspect_image', escapeHtml(shortenPath(p)));
1117
- if (result) {
1118
- html += ctx.renderResultImages();
1119
- const output = ctx.getResultText();
1120
- if (output) html += formatExpandableOutput(output, 8);
1121
- }
1122
- return html;
1123
- }
1124
-
1125
- function renderGenerateImage(name, args, result, ctx) {
1126
- const subject = str(args.subject) || '';
1127
- const badges = args.aspect_ratio ? [String(args.aspect_ratio)] : null;
1128
- let html = toolHead('generate_image', '', badges);
1129
- if (subject) html += '<div class="tool-output"><div>' + escapeHtml(subject) + '</div></div>';
1130
- if (result) {
1131
- html += ctx.renderResultImages();
1132
- }
1133
- return html;
1134
- }
1135
-
1136
- function renderAsk(name, args, result, ctx) {
1137
- let html = toolHead('ask');
1138
- const questions = Array.isArray(args.questions) ? args.questions : null;
1139
- if (questions) {
1140
- html += '<div class="tool-args">';
1141
- for (const q of questions) {
1142
- html += '<div class="tool-arg"><span class="tool-arg-key">Q:</span> ' + escapeHtml(String(q?.question || '')) + '</div>';
1143
- if (Array.isArray(q?.options)) {
1144
- for (const opt of q.options) {
1145
- html += '<div class="tool-arg"><span class="tool-arg-key"> -</span> ' + escapeHtml(String(opt?.label || '')) + '</div>';
1146
- }
1147
- }
872
+ if (i === segments.length - 1) {
873
+ const span = document.createElement('span');
874
+ span.className = 'subsession-crumb current';
875
+ span.textContent = segments[i];
876
+ crumbs.appendChild(span);
877
+ } else {
878
+ const btn = document.createElement('button');
879
+ btn.type = 'button';
880
+ btn.className = 'subsession-crumb';
881
+ btn.textContent = segments[i];
882
+ const ancestorKey = segments.slice(0, i + 1).join('/');
883
+ btn.addEventListener('click', () => popSubSessionTo(ancestorKey));
884
+ crumbs.appendChild(btn);
1148
885
  }
1149
- html += '</div>';
1150
886
  }
1151
- if (result) {
1152
- const output = ctx.getResultText();
1153
- if (output) html += formatExpandableOutput(output, 8);
1154
- }
1155
- return html;
1156
- }
1157
-
1158
- function renderResolve(name, args, result, ctx) {
1159
- const action = str(args.action) || '?';
1160
- let html = toolHead('resolve', '', [action]);
1161
- if (args.reason) html += '<div class="tool-output"><div>' + escapeHtml(String(args.reason)) + '</div></div>';
1162
- if (result) {
1163
- const output = ctx.getResultText();
1164
- if (output) html += formatExpandableOutput(output, 6);
1165
- }
1166
- return html;
1167
- }
1168
-
1169
- function renderGh(name, args, result, ctx) {
1170
- const op = str(args.op);
1171
- const badges = [];
1172
- if (op) badges.push(op);
1173
- if (args.repo) badges.push(String(args.repo));
1174
- if (args.issue) badges.push('#' + args.issue);
1175
- if (args.pr) badges.push(Array.isArray(args.pr) ? 'PRs ' + args.pr.join(',') : 'PR ' + args.pr);
1176
- if (args.branch) badges.push('branch=' + args.branch);
1177
- if (args.query) badges.push('query=' + truncate(String(args.query), 60));
1178
- if (args.run) badges.push('run=' + args.run);
1179
- if (args.title) badges.push('title=' + truncate(String(args.title), 40));
1180
- let html = toolHead(name, '', badges);
1181
- if (args.body) html += '<div class="tool-output"><div>' + escapeHtml(truncate(String(args.body), 400)) + '</div></div>';
1182
- if (result) {
1183
- const output = ctx.getResultText();
1184
- if (output) html += formatExpandableOutput(output, 12, 'markdown');
1185
- }
1186
- return html;
1187
- }
1188
-
1189
- function renderMermaid(name, args, result, ctx) {
1190
- let html = toolHead('render_mermaid');
1191
- const code = args.code || args.source;
1192
- if (code) html += codeBlock(String(code), 'mermaid');
1193
- if (result) {
1194
- html += ctx.renderResultImages();
1195
- const output = ctx.getResultText();
1196
- if (output) html += formatExpandableOutput(output, 6);
1197
- }
1198
- return html;
1199
- }
1200
887
 
1201
- function renderYield(name, args, result, ctx) {
1202
- let html = toolHead('yield');
1203
- if (args.data !== undefined) {
1204
- html += '<div class="tool-output"><pre>' + escapeHtml(JSON.stringify(args.data, null, 2)) + '</pre></div>';
1205
- }
1206
- if (result) {
1207
- const output = ctx.getResultText();
1208
- if (output) html += formatExpandableOutput(output, 6);
1209
- }
1210
- return html;
1211
- }
888
+ el.querySelector('.subsession-meta').textContent = subSessionMetaText(key);
1212
889
 
1213
- function renderReportFinding(name, args, result, ctx) {
1214
- const badges = [];
1215
- if (args.priority) badges.push('priority=' + args.priority);
1216
- if (args.confidence != null) badges.push('confidence=' + args.confidence);
1217
- if (args.file_path) badges.push(shortenPath(String(args.file_path)));
1218
- let html = toolHead('report_finding', args.title ? escapeHtml(String(args.title)) : '', badges);
1219
- if (args.body) html += '<div class="tool-output"><div>' + escapeHtml(String(args.body)) + '</div></div>';
1220
- return html;
1221
- }
890
+ const bodyHost = el.querySelector('.subsession-body');
891
+ bodyHost.innerHTML = '';
892
+ bodyHost.appendChild(buildSubSessionBody(key));
893
+ bodyHost.scrollTop = 0;
1222
894
 
1223
- function renderReportToolIssue(name, args, result, ctx) {
1224
- const pathHtml = args.tool ? '<span class="tool-badge">' + escapeHtml(String(args.tool)) + '</span>' : '';
1225
- let html = toolHead('report_tool_issue', pathHtml);
1226
- if (args.report) html += '<div class="tool-output"><div>' + escapeHtml(String(args.report)) + '</div></div>';
1227
- return html;
895
+ el.classList.add('open');
896
+ el.querySelector('.subsession-panel').focus();
1228
897
  }
1229
898
 
1230
- function renderJob(name, args, result, ctx) {
1231
- const badges = [];
1232
- const pollIds = Array.isArray(args.poll) ? args.poll : Array.isArray(args.jobs) ? args.jobs : Array.isArray(args.jobIds) ? args.jobIds : [];
1233
- const cancelIds = Array.isArray(args.cancel) ? args.cancel : args.jobId ? [String(args.jobId)] : [];
1234
- if (cancelIds.length > 0) badges.push('cancel ' + cancelIds.length);
1235
- if (pollIds.length > 0) badges.push('poll ' + pollIds.length);
1236
- let html = toolHead('job', '', badges);
1237
- if (result) {
1238
- const output = ctx.getResultText();
1239
- if (output) html += formatExpandableOutput(output, 8);
899
+ function openSubSession(key) {
900
+ if (!subSessions || !subSessions[key]) return;
901
+ if (overlayStack.length === 0) {
902
+ subOverlayLastFocus = document.activeElement;
1240
903
  }
1241
- return html;
1242
- }
1243
-
1244
- // Parse `*** Cell <attrs>` headers (canonical), plus legacy
1245
- // `*** Begin <LANG>` headers and `===== <info> =====` bars used in
1246
- // older transcripts. Cells emitted before each format cutover still
1247
- // need to render in HTML exports.
1248
- function parseEvalCells(input) {
1249
- const text = String(input);
1250
- if (/^[*]{2,}\s*Cell\b/im.test(text)) return parseEvalCellsCell(text);
1251
- if (/^[*]{2,}\s*Begin\b/im.test(text)) return parseEvalCellsBegin(text);
1252
- return parseEvalCellsLegacy(text);
1253
- }
1254
-
1255
- function evalLangAlias(token) {
1256
- const t = String(token || '').toUpperCase();
1257
- if (t === 'PY' || t === 'PYTHON' || t === 'IPY' || t === 'IPYTHON') return 'py';
1258
- if (t === 'JS' || t === 'JAVASCRIPT') return 'js';
1259
- if (t === 'TS' || t === 'TYPESCRIPT') return 'ts';
1260
- return null;
904
+ overlayStack.push(key);
905
+ renderSubOverlay();
1261
906
  }
1262
907
 
1263
- // Tokenize a `*** Cell` header attribute list, preserving quoted
1264
- // segments. Mirrors `tokenizeCellAttrs` in src/eval/parse.ts.
1265
- function tokenizeCellAttrsHtml(input) {
1266
- const tokens = [];
1267
- let i = 0;
1268
- while (i < input.length) {
1269
- while (i < input.length && /\s/.test(input[i])) i++;
1270
- if (i >= input.length) break;
1271
- let tok = '';
1272
- while (i < input.length && !/\s/.test(input[i])) {
1273
- const ch = input[i];
1274
- if (ch === '"' || ch === "'") {
1275
- tok += ch; i++;
1276
- while (i < input.length && input[i] !== ch) { tok += input[i]; i++; }
1277
- if (i < input.length) { tok += input[i]; i++; }
1278
- } else { tok += ch; i++; }
1279
- }
1280
- tokens.push(tok);
1281
- }
1282
- return tokens;
1283
- }
1284
-
1285
- function parseEvalCellsCell(text) {
1286
- const STARS = '\\*{2,}';
1287
- const CELL = new RegExp('^' + STARS + '\\s*Cell\\b\\s*(.*)$', 'i');
1288
- const END = new RegExp('^' + STARS + '\\s*End\\b.*$', 'i');
1289
- const ATTR = /^([a-zA-Z][\w-]*)(?::(?:"([^"]*)"|'([^']*)'|(.*)))?$/;
1290
- const DUR = /^\d+(?:ms|s|m)?$/;
1291
- const ID_KEYS = ['id', 'title', 'name', 'cell', 'file', 'label'];
1292
- const T_KEYS = ['t', 'timeout', 'duration', 'time'];
1293
- const RST_KEYS = ['rst', 'reset'];
1294
- const lines = text.split('\n');
1295
- if (lines.length && lines[lines.length - 1] === '') lines.pop();
1296
- const cells = [];
1297
- let i = 0;
1298
- while (i < lines.length && lines[i].trim() === '') i++;
1299
- while (i < lines.length) {
1300
- const m = CELL.exec(lines[i]);
1301
- if (!m) { i++; continue; }
1302
- const tokens = tokenizeCellAttrsHtml(m[1] || '');
1303
- let lang = null;
1304
- let title = '';
1305
- const attrs = [];
1306
- let bareReset = false;
1307
- const titleParts = [];
1308
- for (const tok of tokens) {
1309
- const lower = tok.toLowerCase();
1310
- if (RST_KEYS.indexOf(lower) >= 0) { bareReset = true; continue; }
1311
- const am = ATTR.exec(tok);
1312
- if (am && tok.indexOf(':') >= 0) {
1313
- const key = am[1].toLowerCase();
1314
- const value = am[2] !== undefined ? am[2] : am[3] !== undefined ? am[3] : (am[4] || '');
1315
- const lc = evalLangAlias(key);
1316
- if (lc) {
1317
- if (!lang) lang = lc;
1318
- if (!title && value) title = value;
1319
- continue;
1320
- }
1321
- if (ID_KEYS.indexOf(key) >= 0) { if (!title) title = value; continue; }
1322
- if (T_KEYS.indexOf(key) >= 0) { attrs.push('t=' + value); continue; }
1323
- if (RST_KEYS.indexOf(key) >= 0) { attrs.push('rst'); continue; }
1324
- continue;
1325
- }
1326
- const lc = evalLangAlias(tok);
1327
- if (lc && !lang) { lang = lc; continue; }
1328
- if (DUR.test(tok)) { attrs.push('t=' + tok); continue; }
1329
- titleParts.push(tok);
1330
- }
1331
- if (!title && titleParts.length) title = titleParts.join(' ');
1332
- if (bareReset) attrs.push('rst');
1333
- lang = lang || 'py';
1334
- i++;
1335
- const codeLines = [];
1336
- while (i < lines.length) {
1337
- if (END.test(lines[i])) { i++; break; }
1338
- if (CELL.test(lines[i])) break;
1339
- codeLines.push(lines[i]);
1340
- i++;
1341
- }
1342
- while (codeLines.length && codeLines[codeLines.length - 1].trim() === '') codeLines.pop();
1343
- cells.push({ lang, title, attrs, code: codeLines.join('\n') });
1344
- while (i < lines.length && lines[i].trim() === '') i++;
1345
- }
1346
- return cells;
1347
- }
1348
-
1349
- function parseEvalCellsBegin(text) {
1350
- const STARS = '\\*{2,}';
1351
- const BEGIN = new RegExp('^' + STARS + '\\s*Begin\\b\\s*(\\S+)?\\s*$', 'i');
1352
- const END = new RegExp('^' + STARS + '\\s*End\\b.*$', 'i');
1353
- const TITLE = new RegExp('^' + STARS + '\\s*Title\\s*:\\s*(.+?)\\s*$', 'i');
1354
- const TIMEOUT = new RegExp('^' + STARS + '\\s*Timeout\\s*:\\s*(\\S+)\\s*$', 'i');
1355
- const RESET = new RegExp('^' + STARS + '\\s*Reset\\s*$', 'i');
1356
- const lines = text.split('\n');
1357
- if (lines.length && lines[lines.length - 1] === '') lines.pop();
1358
- const cells = [];
1359
- let i = 0;
1360
- while (i < lines.length && lines[i].trim() === '') i++;
1361
- while (i < lines.length) {
1362
- const beginMatch = BEGIN.exec(lines[i]);
1363
- if (!beginMatch) { i++; continue; }
1364
- const lang = evalLangAlias(beginMatch[1]) || 'py';
1365
- i++;
1366
- let title = '';
1367
- const attrs = [];
1368
- while (i < lines.length) {
1369
- const tm = TITLE.exec(lines[i]);
1370
- if (tm) { if (!title) title = tm[1]; i++; continue; }
1371
- const to = TIMEOUT.exec(lines[i]);
1372
- if (to) { attrs.push('t=' + to[1]); i++; continue; }
1373
- if (RESET.test(lines[i])) { attrs.push('rst'); i++; continue; }
1374
- break;
1375
- }
1376
- const codeLines = [];
1377
- while (i < lines.length) {
1378
- if (END.test(lines[i])) { i++; break; }
1379
- if (BEGIN.test(lines[i])) break;
1380
- codeLines.push(lines[i]);
1381
- i++;
1382
- }
1383
- while (codeLines.length && codeLines[codeLines.length - 1].trim() === '') codeLines.pop();
1384
- cells.push({ lang, title, attrs, code: codeLines.join('\n') });
1385
- while (i < lines.length && lines[i].trim() === '') i++;
1386
- }
1387
- return cells;
1388
- }
1389
-
1390
- function parseEvalCellsLegacy(input) {
1391
- const HEADER = /^={5,}\s*(.*?)\s*={5,}\s*$/;
1392
- const lines = String(input).split('\n');
1393
- const cells = [];
1394
- let inheritedLang = 'py';
1395
- let current = null;
1396
- for (const line of lines) {
1397
- const m = line.match(HEADER);
1398
- if (m) {
1399
- if (current) cells.push(current);
1400
- const info = m[1] || '';
1401
- let lang = inheritedLang;
1402
- let title = '';
1403
- const langMatch = info.match(/^(py|js|ts)(?::"([^"]*)")?/);
1404
- if (langMatch) {
1405
- lang = langMatch[1];
1406
- if (langMatch[2]) title = langMatch[2];
1407
- }
1408
- if (!title) {
1409
- const idMatch = info.match(/id:"([^"]*)"/);
1410
- if (idMatch) title = idMatch[1];
1411
- }
1412
- inheritedLang = lang;
1413
- const attrs = [];
1414
- const tMatch = info.match(/(?:^|\s)t:(\S+)/);
1415
- if (tMatch) attrs.push('t=' + tMatch[1]);
1416
- if (/(?:^|\s)rst(?:\s|$)/.test(info)) attrs.push('rst');
1417
- current = { lang, title, attrs, code: '' };
1418
- } else {
1419
- if (!current) current = { lang: inheritedLang, title: '', attrs: [], code: '' };
1420
- current.code += (current.code ? '\n' : '') + line;
1421
- }
1422
- }
1423
- if (current) cells.push(current);
1424
- return cells.map(c => ({ ...c, code: c.code.replace(/\s+$/, '') }));
1425
- }
1426
-
1427
- function evalLangToHljs(lang) {
1428
- return lang === 'py' ? 'python' : lang === 'js' ? 'javascript' : lang === 'ts' ? 'typescript' : null;
1429
- }
1430
-
1431
- function renderEval(name, args, result, ctx) {
1432
- let html = toolHead('eval');
1433
- if (typeof args.input !== 'string') {
1434
- html += '<div class="tool-error">[missing input]</div>';
908
+ function popSubSession() {
909
+ if (overlayStack.length === 0) return;
910
+ overlayStack.pop();
911
+ if (overlayStack.length === 0) {
912
+ hideSubOverlay();
1435
913
  } else {
1436
- const cells = parseEvalCells(args.input);
1437
- if (cells.length === 0) {
1438
- html += codeBlock(args.input, 'python');
1439
- } else {
1440
- for (const cell of cells) {
1441
- html += '<div class="tool-cell">';
1442
- const titleParts = [];
1443
- if (cell.title) titleParts.push(cell.title);
1444
- titleParts.push(cell.lang);
1445
- if (cell.attrs && cell.attrs.length) titleParts.push(...cell.attrs);
1446
- html += '<div class="tool-cell-title">' + escapeHtml(titleParts.join(' · ')) + '</div>';
1447
- html += codeBlock(cell.code, evalLangToHljs(cell.lang));
1448
- html += '</div>';
1449
- }
1450
- }
1451
- }
1452
- if (result) {
1453
- html += ctx.renderResultImages();
1454
- const output = ctx.getResultText();
1455
- if (output) html += formatExpandableOutput(output, 12);
914
+ renderSubOverlay();
1456
915
  }
1457
- return html;
1458
916
  }
1459
917
 
1460
- function renderSearch(name, args, result, ctx) {
1461
- const pattern = str(args.pattern);
1462
- const paths = Array.isArray(args.paths) ? args.paths.map(p => shortenPath(String(p))).join(', ') : (args.path ? shortenPath(String(args.path)) : '.');
1463
- const patHtml = pattern === null ? invalidArgHtml() : escapeHtml(pattern);
1464
- let head = '<span class="tool-name">search</span> <span class="tool-pattern">/' + patHtml + '/</span>';
1465
- head += ' <span class="tool-arg-key">in</span> <span class="tool-path">' + escapeHtml(paths) + '</span>';
1466
- const badges = [];
1467
- if (args.i) badges.push('i');
1468
- if (args.skip) badges.push('skip=' + args.skip);
1469
- if (args.gitignore === false) badges.push('no-gitignore');
1470
- for (const b of badges) head += ' <span class="tool-badge">' + escapeHtml(b) + '</span>';
1471
- let html = '<div class="tool-header">' + head + '</div>';
1472
- if (result) {
1473
- const output = ctx.getResultText();
1474
- if (output) html += formatExpandableOutput(output, 12);
918
+ function popSubSessionTo(key) {
919
+ // Rebuild the chain root..key (the stack is always a prefix chain).
920
+ const segments = key.split('/');
921
+ overlayStack.length = 0;
922
+ for (let i = 1; i <= segments.length; i++) {
923
+ overlayStack.push(segments.slice(0, i).join('/'));
1475
924
  }
1476
- return html;
925
+ renderSubOverlay();
1477
926
  }
1478
927
 
1479
- function renderIrc(name, args, result, ctx) {
1480
- const op = str(args.op) || '?';
1481
- const badges = [op];
1482
- if (args.to) badges.push('to=' + args.to);
1483
- if (args.awaitReply === false) badges.push('no-reply');
1484
- let html = toolHead('irc', '', badges);
1485
- if (args.message) html += '<div class="tool-output"><div>' + escapeHtml(String(args.message)) + '</div></div>';
1486
- if (result) {
1487
- const output = ctx.getResultText();
1488
- if (output) html += formatExpandableOutput(output, 8);
1489
- }
1490
- return html;
928
+ function closeAllSubSessions() {
929
+ if (overlayStack.length === 0) return;
930
+ overlayStack.length = 0;
931
+ hideSubOverlay();
1491
932
  }
1492
933
 
1493
-
1494
- function renderGenericTool(name, args, result, ctx) {
1495
- let html = toolHead(name);
1496
- const argText = JSON.stringify(args, null, 2);
1497
- if (argText && argText !== '{}') {
1498
- html += '<div class="tool-output"><pre>' + escapeHtml(argText) + '</pre></div>';
934
+ function hideSubOverlay() {
935
+ if (subOverlayEl) {
936
+ subOverlayEl.classList.remove('open');
937
+ subOverlayEl.querySelector('.subsession-body').innerHTML = '';
1499
938
  }
1500
- if (result) {
1501
- html += ctx.renderResultImages();
1502
- const output = ctx.getResultText();
1503
- if (output) html += formatExpandableOutput(output, 10);
939
+ if (subOverlayLastFocus && typeof subOverlayLastFocus.focus === 'function') {
940
+ subOverlayLastFocus.focus();
1504
941
  }
1505
- return html;
1506
- }
1507
-
1508
- const TOOL_RENDERERS = {
1509
- bash: renderBash,
1510
- eval: renderEval,
1511
- js: renderJsLike,
1512
- python: renderJsLike,
1513
- notebook: renderJsLike,
1514
- read: renderRead,
1515
- write: renderWrite,
1516
- edit: renderEdit,
1517
- ast_edit: renderAstEdit,
1518
- ast_grep: renderAstGrep,
1519
- grep: renderGrep,
1520
- search: renderSearch,
1521
- find: renderFind,
1522
- lsp: renderLsp,
1523
- todo: renderTodo,
1524
- task: renderTask,
1525
- web_search: renderWebSearch,
1526
- fetch: renderFetch,
1527
- debug: renderDebug,
1528
- puppeteer: renderBrowser,
1529
- browser: renderBrowser,
1530
- inspect_image: renderInspectImage,
1531
- generate_image: renderGenerateImage,
1532
- ask: renderAsk,
1533
- resolve: renderResolve,
1534
- github: renderGh,
1535
- render_mermaid: renderMermaid,
1536
- yield: renderYield,
1537
- report_finding: renderReportFinding,
1538
- report_tool_issue: renderReportToolIssue,
1539
- await: renderJob,
1540
- poll: renderJob,
1541
- cancel_job: renderJob,
1542
- job: renderJob,
1543
- irc: renderIrc,
1544
- };
1545
-
1546
- function renderToolCall(call) {
1547
- const result = findToolResult(call.id);
1548
- const isError = result?.isError || false;
1549
- const statusClass = result ? (isError ? 'error' : 'success') : 'pending';
1550
- const rawArgs = call.arguments || {};
1551
- const intent = typeof rawArgs._i === 'string' ? rawArgs._i.trim() : '';
1552
- // Strip internal _i intent so renderers don't dump it as JSON.
1553
- const args = {};
1554
- for (const k of Object.keys(rawArgs)) {
1555
- if (k !== '_i') args[k] = rawArgs[k];
1556
- }
1557
- const name = call.name;
1558
-
1559
- const ctx = {
1560
- intent,
1561
- getResultText: () => {
1562
- if (!result) return '';
1563
- const textBlocks = result.content.filter(c => c.type === 'text');
1564
- return textBlocks.map(c => c.text).join('\n');
1565
- },
1566
- getResultImages: () => {
1567
- if (!result) return [];
1568
- return result.content.filter(c => c.type === 'image');
1569
- },
1570
- renderResultImages: () => {
1571
- if (!result) return '';
1572
- const images = result.content.filter(c => c.type === 'image');
1573
- if (images.length === 0) return '';
1574
- return '<div class="tool-images">' +
1575
- images.map(img => '<img src="data:' + img.mimeType + ';base64,' + img.data + '" class="tool-image" />').join('') +
1576
- '</div>';
1577
- },
1578
- };
1579
-
1580
- const renderer = TOOL_RENDERERS[name] || renderGenericTool;
1581
- let html = '<div class="tool-execution ' + statusClass + '">';
1582
- if (intent) html += '<div class="tool-intent">' + escapeHtml(intent) + '</div>';
1583
- try {
1584
- html += renderer(name, args, result, ctx);
1585
- } catch (err) {
1586
- html += renderGenericTool(name, args, result, ctx);
1587
- }
1588
- html += '</div>';
1589
- return html;
942
+ subOverlayLastFocus = null;
1590
943
  }
1591
944
 
1592
945
 
@@ -1671,11 +1024,12 @@
1671
1024
  </button>`;
1672
1025
  }
1673
1026
 
1674
- function renderEntry(entry) {
1027
+ function renderEntry(entry, sctx) {
1675
1028
  const ts = formatTimestamp(entry.timestamp);
1676
1029
  const tsHtml = ts ? `<div class="message-timestamp">${ts}</div>` : '';
1677
- const entryId = `entry-${entry.id}`;
1678
- const copyBtnHtml = renderCopyLinkButton(entry.id);
1030
+ const entryId = `${sctx.idPrefix}${entry.id}`;
1031
+ // Share links target main-session entries only; overlays skip them.
1032
+ const copyBtnHtml = sctx.prefix === '' ? renderCopyLinkButton(entry.id) : '';
1679
1033
 
1680
1034
  if (entry.type === 'message') {
1681
1035
  const msg = entry.message;
@@ -1722,9 +1076,11 @@
1722
1076
  for (const block of msg.content) {
1723
1077
  if (block.type === 'text' && block.text.trim()) {
1724
1078
  html += `<div class="assistant-text markdown-content">${safeMarkedParse(block.text)}</div>`;
1725
- } else if (block.type === 'thinking' && block.thinking.trim()) {
1079
+ } else if (block.type === 'thinking') {
1080
+ const thinking = visibleThinkingText(block);
1081
+ if (!thinking) continue;
1726
1082
  html += `<div class="thinking-block">
1727
- <div class="thinking-text">${escapeHtml(block.thinking)}</div>
1083
+ <div class="thinking-text">${escapeHtml(thinking)}</div>
1728
1084
  <div class="thinking-collapsed">Thinking ...</div>
1729
1085
  </div>`;
1730
1086
  }
@@ -1732,7 +1088,7 @@
1732
1088
 
1733
1089
  for (const block of msg.content) {
1734
1090
  if (block.type === 'toolCall') {
1735
- html += renderToolCall(block);
1091
+ html += renderToolCall(block, sctx);
1736
1092
  }
1737
1093
  }
1738
1094
 
@@ -1920,14 +1276,16 @@
1920
1276
  // Cache for rendered entry DOM nodes
1921
1277
  const entryCache = new Map();
1922
1278
 
1923
- function renderEntryToNode(entry) {
1924
- // Check cache first
1925
- if (entryCache.has(entry.id)) {
1279
+ function renderEntryToNode(entry, sctx) {
1280
+ // Cache main-session nodes only; sub-session bodies are cached whole
1281
+ // per key in subSessionBodyCache, so each entry renders once anyway.
1282
+ const cacheable = sctx.prefix === '';
1283
+ if (cacheable && entryCache.has(entry.id)) {
1926
1284
  return entryCache.get(entry.id).cloneNode(true);
1927
1285
  }
1928
1286
 
1929
1287
  // Render to HTML string, then parse to node
1930
- const html = renderEntry(entry);
1288
+ const html = renderEntry(entry, sctx);
1931
1289
  if (!html) return null;
1932
1290
 
1933
1291
  const template = document.createElement('template');
@@ -1935,7 +1293,7 @@
1935
1293
  const node = template.content.firstElementChild;
1936
1294
 
1937
1295
  // Cache the node
1938
- if (node) {
1296
+ if (cacheable && node) {
1939
1297
  entryCache.set(entry.id, node.cloneNode(true));
1940
1298
  }
1941
1299
  return node;
@@ -1955,7 +1313,7 @@
1955
1313
  const fragment = document.createDocumentFragment();
1956
1314
 
1957
1315
  for (const entry of path) {
1958
- const node = renderEntryToNode(entry);
1316
+ const node = renderEntryToNode(entry, mainSctx);
1959
1317
  if (node) {
1960
1318
  fragment.appendChild(node);
1961
1319
  }
@@ -2189,13 +1547,13 @@
2189
1547
  document.getElementById('sidebar-close').addEventListener('click', closeSidebar);
2190
1548
 
2191
1549
  // Toggle states
2192
- let thinkingExpanded = true;
1550
+ let thinkingExpanded = false;
2193
1551
  let toolOutputsExpanded = false;
2194
1552
 
2195
1553
  const toggleThinking = () => {
2196
1554
  thinkingExpanded = !thinkingExpanded;
2197
1555
  document.querySelectorAll('.thinking-text').forEach(el => {
2198
- el.style.display = thinkingExpanded ? '' : 'none';
1556
+ el.style.display = thinkingExpanded ? 'block' : 'none';
2199
1557
  });
2200
1558
  document.querySelectorAll('.thinking-collapsed').forEach(el => {
2201
1559
  el.style.display = thinkingExpanded ? 'none' : 'block';
@@ -2215,6 +1573,11 @@
2215
1573
  // Keyboard shortcuts
2216
1574
  document.addEventListener('keydown', (e) => {
2217
1575
  if (e.key === 'Escape') {
1576
+ if (overlayStack.length > 0) {
1577
+ e.preventDefault();
1578
+ popSubSession();
1579
+ return;
1580
+ }
2218
1581
  searchInput.value = '';
2219
1582
  searchQuery = '';
2220
1583
  navigateTo(leafId, 'bottom');
@@ -2241,4 +1604,27 @@
2241
1604
  // Fallback: use last entry if no leafId
2242
1605
  navigateTo(entries[entries.length - 1].id, 'none');
2243
1606
  }
1607
+ } // end bootSession
1608
+
1609
+ function showLoadError(err) {
1610
+ const messages = document.getElementById('messages');
1611
+ if (!messages) return;
1612
+ const div = document.createElement('div');
1613
+ div.className = 'share-load-error';
1614
+ div.textContent = 'Failed to load session: ' + (err && err.message ? err.message : String(err));
1615
+ messages.appendChild(div);
1616
+ }
1617
+
1618
+ const pending = window.__PROMETHEUS_SESSION_DATA__;
1619
+ if (pending && typeof pending.then === 'function') {
1620
+ pending.then(bootSession, showLoadError);
1621
+ } else {
1622
+ const base64 = document.getElementById('session-data').textContent;
1623
+ const binary = atob(base64);
1624
+ const bytes = new Uint8Array(binary.length);
1625
+ for (let i = 0; i < binary.length; i++) {
1626
+ bytes[i] = binary.charCodeAt(i);
1627
+ }
1628
+ bootSession(JSON.parse(new TextDecoder('utf-8').decode(bytes)));
1629
+ }
2244
1630
  })();