@oh-my-pi/pi-coding-agent 17.0.8 → 17.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (340) hide show
  1. package/CHANGELOG.md +87 -1
  2. package/README.md +1 -1
  3. package/dist/cli.js +5495 -5021
  4. package/dist/types/async/job-manager.d.ts +37 -1
  5. package/dist/types/cli/args.d.ts +2 -0
  6. package/dist/types/cli/bench-cli.d.ts +41 -0
  7. package/dist/types/commands/bench.d.ts +15 -3
  8. package/dist/types/commands/launch.d.ts +4 -0
  9. package/dist/types/config/__tests__/model-registry.test.d.ts +1 -0
  10. package/dist/types/config/model-registry.d.ts +30 -1
  11. package/dist/types/config/models-config-schema.d.ts +18 -6
  12. package/dist/types/config/models-config.d.ts +14 -5
  13. package/dist/types/config/provider-globals.d.ts +2 -2
  14. package/dist/types/config/service-tier.d.ts +5 -1
  15. package/dist/types/config/settings-schema.d.ts +350 -50
  16. package/dist/types/config/settings.d.ts +7 -0
  17. package/dist/types/dap/client.d.ts +20 -0
  18. package/dist/types/exec/bash-executor.d.ts +38 -0
  19. package/dist/types/exec/direnv.d.ts +33 -0
  20. package/dist/types/export/html/args.d.ts +15 -0
  21. package/dist/types/export/html/index.d.ts +11 -26
  22. package/dist/types/export/html/web-palette.d.ts +55 -116
  23. package/dist/types/extensibility/extensions/loader.d.ts +3 -0
  24. package/dist/types/extensibility/extensions/types.d.ts +17 -2
  25. package/dist/types/extensibility/legacy-pi-coding-agent-shim.d.ts +1 -0
  26. package/dist/types/extensibility/legacy-pi-tui-shim.d.ts +10 -0
  27. package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +14 -1
  28. package/dist/types/internal-urls/registry-helpers.d.ts +11 -0
  29. package/dist/types/live/controller.d.ts +40 -0
  30. package/dist/types/live/protocol.d.ts +85 -0
  31. package/dist/types/live/protocol.test.d.ts +1 -0
  32. package/dist/types/live/transport.d.ts +48 -0
  33. package/dist/types/live/visualizer.d.ts +33 -0
  34. package/dist/types/lsp/client.d.ts +18 -1
  35. package/dist/types/mcp/config-writer.test.d.ts +1 -0
  36. package/dist/types/mcp/manager.d.ts +6 -2
  37. package/dist/types/mcp/oauth-discovery.d.ts +2 -0
  38. package/dist/types/mcp/render.d.ts +2 -2
  39. package/dist/types/mcp/smithery-auth.d.ts +1 -1
  40. package/dist/types/mcp/smithery-auth.test.d.ts +1 -0
  41. package/dist/types/mcp/tool-bridge.d.ts +7 -3
  42. package/dist/types/mcp/types.d.ts +6 -0
  43. package/dist/types/memory-backend/tool-names.d.ts +2 -0
  44. package/dist/types/modes/components/login-dialog.d.ts +2 -2
  45. package/dist/types/modes/components/oauth-selector.d.ts +8 -0
  46. package/dist/types/modes/components/plan-review-overlay.d.ts +26 -0
  47. package/dist/types/modes/components/settings-defs.d.ts +8 -1
  48. package/dist/types/modes/components/status-line/component.jj-cache.test.d.ts +1 -0
  49. package/dist/types/modes/components/tool-execution.d.ts +9 -1
  50. package/dist/types/modes/controllers/command-controller.d.ts +1 -1
  51. package/dist/types/modes/controllers/event-controller.d.ts +6 -1
  52. package/dist/types/modes/controllers/live-command-controller.d.ts +14 -0
  53. package/dist/types/modes/controllers/mcp-command-controller.d.ts +3 -0
  54. package/dist/types/modes/interactive-mode.d.ts +5 -0
  55. package/dist/types/modes/rpc/rpc-client.d.ts +10 -1
  56. package/dist/types/modes/rpc/rpc-frame.d.ts +16 -0
  57. package/dist/types/modes/rpc/rpc-messages.d.ts +26 -0
  58. package/dist/types/modes/rpc/rpc-types.d.ts +40 -0
  59. package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +1 -1
  60. package/dist/types/modes/setup-wizard/scenes/types.d.ts +9 -1
  61. package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +1 -1
  62. package/dist/types/modes/theme/theme.d.ts +1 -1
  63. package/dist/types/modes/types.d.ts +3 -1
  64. package/dist/types/modes/utils/context-usage.d.ts +12 -2
  65. package/dist/types/plan-mode/plan-files.d.ts +10 -0
  66. package/dist/types/registry/agent-lifecycle.d.ts +21 -9
  67. package/dist/types/registry/agent-registry.d.ts +11 -4
  68. package/dist/types/sdk.d.ts +15 -1
  69. package/dist/types/secrets/index.d.ts +15 -2
  70. package/dist/types/secrets/obfuscator.d.ts +113 -15
  71. package/dist/types/session/acp-permission-gate.d.ts +19 -0
  72. package/dist/types/session/agent-session-events.d.ts +84 -0
  73. package/dist/types/session/agent-session-types.d.ts +314 -0
  74. package/dist/types/session/agent-session.d.ts +120 -750
  75. package/dist/types/session/async-job-delivery.d.ts +28 -0
  76. package/dist/types/session/bash-runner.d.ts +75 -0
  77. package/dist/types/session/blob-store.d.ts +11 -1
  78. package/dist/types/session/blob-store.test.d.ts +1 -0
  79. package/dist/types/session/checkpoint-entries.d.ts +28 -0
  80. package/dist/types/session/eval-runner.d.ts +49 -0
  81. package/dist/types/session/irc-bridge.d.ts +46 -0
  82. package/dist/types/session/messages.d.ts +22 -0
  83. package/dist/types/session/model-controls.d.ts +180 -0
  84. package/dist/types/session/prewalk.d.ts +46 -0
  85. package/dist/types/session/queued-messages.d.ts +22 -0
  86. package/dist/types/session/redis-session-storage.d.ts +1 -0
  87. package/dist/types/session/retry-fallback-chains.d.ts +74 -0
  88. package/dist/types/session/role-models.d.ts +15 -0
  89. package/dist/types/session/session-advisors.d.ts +228 -0
  90. package/dist/types/session/session-entries.d.ts +8 -0
  91. package/dist/types/session/session-handoff.d.ts +70 -0
  92. package/dist/types/session/session-history-format.d.ts +6 -1
  93. package/dist/types/session/session-loader.d.ts +6 -4
  94. package/dist/types/session/session-maintenance.d.ts +246 -0
  95. package/dist/types/session/session-manager.d.ts +41 -0
  96. package/dist/types/session/session-memory.d.ts +56 -0
  97. package/dist/types/session/session-provider-boundary.d.ts +62 -0
  98. package/dist/types/session/session-stats.d.ts +48 -0
  99. package/dist/types/session/session-tools.d.ts +143 -0
  100. package/dist/types/session/session-workspace.d.ts +32 -0
  101. package/dist/types/session/stream-guards.d.ts +44 -0
  102. package/dist/types/session/todo-tracker.d.ts +56 -0
  103. package/dist/types/session/ttsr-coordinator.d.ts +51 -0
  104. package/dist/types/session/turn-recovery.d.ts +225 -0
  105. package/dist/types/system-prompt.d.ts +2 -0
  106. package/dist/types/task/executor.d.ts +4 -1
  107. package/dist/types/task/output-manager.d.ts +3 -1
  108. package/dist/types/task/types.d.ts +14 -0
  109. package/dist/types/tools/approval.d.ts +1 -0
  110. package/dist/types/tools/browser/launch.d.ts +5 -0
  111. package/dist/types/tools/hub/jobs.d.ts +1 -1
  112. package/dist/types/tools/image-gen.d.ts +4 -4
  113. package/dist/types/tools/image-providers.d.ts +38 -0
  114. package/dist/types/tools/index.d.ts +8 -0
  115. package/dist/types/tools/path-utils.d.ts +8 -0
  116. package/dist/types/tools/report-tool-issue.d.ts +24 -9
  117. package/dist/types/tools/todo.d.ts +10 -4
  118. package/dist/types/tools/xdev.d.ts +5 -1
  119. package/dist/types/tts/streaming-player.d.ts +14 -0
  120. package/dist/types/tts/vocalizer.d.ts +5 -0
  121. package/dist/types/utils/jj.d.ts +29 -0
  122. package/dist/types/utils/lang-from-path.d.ts +1 -0
  123. package/dist/types/utils/title-generator.d.ts +30 -0
  124. package/dist/types/vibe/runtime.d.ts +36 -8
  125. package/dist/types/web/search/index.d.ts +1 -1
  126. package/dist/types/web/search/provider.d.ts +15 -5
  127. package/dist/types/web/search/providers/firecrawl.d.ts +9 -0
  128. package/dist/types/web/search/types.d.ts +95 -1
  129. package/package.json +13 -12
  130. package/scripts/generate-share-viewer.ts +4 -6
  131. package/scripts/legacy-pi-virtual-module.ts +1 -1
  132. package/src/advisor/__tests__/advisor.test.ts +643 -0
  133. package/src/advisor/runtime.ts +144 -43
  134. package/src/async/job-manager.ts +90 -2
  135. package/src/cli/args.ts +2 -0
  136. package/src/cli/auth-gateway-cli.ts +18 -3
  137. package/src/cli/bench-cli.ts +395 -29
  138. package/src/cli/flag-tables.ts +3 -0
  139. package/src/cli/gc-cli.ts +2 -2
  140. package/src/cli/grievances-cli.ts +2 -2
  141. package/src/cli/usage-cli.ts +11 -2
  142. package/src/collab/host.ts +3 -2
  143. package/src/commands/bench.ts +18 -4
  144. package/src/commands/launch.ts +4 -0
  145. package/src/config/__tests__/model-registry.test.ts +147 -0
  146. package/src/config/model-registry.ts +50 -2
  147. package/src/config/model-resolver.ts +0 -1
  148. package/src/config/models-config-schema.ts +15 -4
  149. package/src/config/provider-globals.ts +9 -9
  150. package/src/config/service-tier.ts +26 -1
  151. package/src/config/settings-schema.ts +250 -54
  152. package/src/config/settings.ts +81 -2
  153. package/src/dap/client.ts +37 -4
  154. package/src/edit/index.ts +49 -12
  155. package/src/eval/py/executor.ts +103 -33
  156. package/src/exec/bash-executor.ts +89 -6
  157. package/src/exec/direnv.ts +145 -0
  158. package/src/export/html/args.ts +20 -0
  159. package/src/export/html/index.ts +45 -47
  160. package/src/export/html/template.css +19 -1
  161. package/src/export/html/template.html +6 -0
  162. package/src/export/html/template.js +21 -0
  163. package/src/export/html/tool-views.generated.js +31 -31
  164. package/src/export/html/web-palette.ts +116 -132
  165. package/src/export/share.ts +249 -49
  166. package/src/extensibility/extensions/loader.ts +29 -1
  167. package/src/extensibility/extensions/runner.ts +6 -0
  168. package/src/extensibility/extensions/types.ts +33 -2
  169. package/src/extensibility/legacy-pi-coding-agent-shim.ts +1 -0
  170. package/src/extensibility/legacy-pi-tui-shim.ts +10 -0
  171. package/src/extensibility/plugins/legacy-pi-compat.ts +870 -311
  172. package/src/hindsight/state.ts +64 -6
  173. package/src/internal-urls/local-protocol.ts +2 -1
  174. package/src/internal-urls/memory-protocol.ts +2 -2
  175. package/src/internal-urls/registry-helpers.ts +40 -0
  176. package/src/internal-urls/skill-protocol.ts +2 -2
  177. package/src/internal-urls/ssh-protocol.ts +2 -1
  178. package/src/internal-urls/vault-protocol.ts +2 -1
  179. package/src/live/audio-worklet.txt +59 -0
  180. package/src/live/browser-runtime.txt +221 -0
  181. package/src/live/controller.ts +464 -0
  182. package/src/live/prompts/agent-final-message.md +3 -0
  183. package/src/live/prompts/live-instructions.md +23 -0
  184. package/src/live/protocol.test.ts +140 -0
  185. package/src/live/protocol.ts +233 -0
  186. package/src/live/transport.ts +490 -0
  187. package/src/live/visualizer.ts +234 -0
  188. package/src/lsp/client.ts +52 -9
  189. package/src/lsp/clients/biome-client.ts +3 -4
  190. package/src/lsp/index.ts +44 -11
  191. package/src/main.ts +9 -1
  192. package/src/mcp/config-writer.test.ts +43 -0
  193. package/src/mcp/config-writer.ts +109 -82
  194. package/src/mcp/manager.ts +39 -8
  195. package/src/mcp/oauth-discovery.ts +10 -2
  196. package/src/mcp/render.ts +94 -35
  197. package/src/mcp/smithery-auth.test.ts +29 -0
  198. package/src/mcp/smithery-auth.ts +3 -2
  199. package/src/mcp/tool-bridge.ts +107 -11
  200. package/src/mcp/types.ts +7 -0
  201. package/src/memories/index.ts +40 -20
  202. package/src/memory-backend/tool-names.ts +2 -0
  203. package/src/mnemopi/backend.ts +24 -7
  204. package/src/modes/acp/acp-agent.ts +56 -10
  205. package/src/modes/acp/acp-event-mapper.ts +8 -1
  206. package/src/modes/components/agent-hub.ts +27 -10
  207. package/src/modes/components/login-dialog.ts +14 -4
  208. package/src/modes/components/oauth-selector.ts +24 -7
  209. package/src/modes/components/plan-review-overlay.ts +350 -35
  210. package/src/modes/components/settings-defs.ts +28 -3
  211. package/src/modes/components/settings-selector.ts +178 -6
  212. package/src/modes/components/status-line/component.jj-cache.test.ts +229 -0
  213. package/src/modes/components/status-line/component.ts +123 -2
  214. package/src/modes/components/tool-execution.test.ts +63 -2
  215. package/src/modes/components/tool-execution.ts +11 -2
  216. package/src/modes/controllers/command-controller.ts +70 -22
  217. package/src/modes/controllers/event-controller.ts +111 -16
  218. package/src/modes/controllers/extension-ui-controller.test.ts +1 -0
  219. package/src/modes/controllers/extension-ui-controller.ts +20 -4
  220. package/src/modes/controllers/live-command-controller.ts +178 -0
  221. package/src/modes/controllers/mcp-command-controller.ts +80 -41
  222. package/src/modes/controllers/omfg-controller.ts +44 -40
  223. package/src/modes/controllers/selector-controller.ts +18 -10
  224. package/src/modes/controllers/session-focus-controller.ts +6 -1
  225. package/src/modes/interactive-mode.ts +160 -38
  226. package/src/modes/rpc/rpc-client.ts +94 -3
  227. package/src/modes/rpc/rpc-frame.ts +164 -4
  228. package/src/modes/rpc/rpc-messages.ts +127 -0
  229. package/src/modes/rpc/rpc-mode.ts +79 -7
  230. package/src/modes/rpc/rpc-types.ts +34 -2
  231. package/src/modes/runtime-init.ts +2 -0
  232. package/src/modes/setup-wizard/scenes/model.ts +5 -7
  233. package/src/modes/setup-wizard/scenes/providers.ts +3 -2
  234. package/src/modes/setup-wizard/scenes/sign-in.ts +8 -2
  235. package/src/modes/setup-wizard/scenes/theme.ts +13 -3
  236. package/src/modes/setup-wizard/scenes/types.ts +9 -1
  237. package/src/modes/setup-wizard/scenes/web-search.ts +23 -10
  238. package/src/modes/setup-wizard/wizard-overlay.ts +1 -1
  239. package/src/modes/theme/theme.ts +1 -1
  240. package/src/modes/types.ts +3 -1
  241. package/src/modes/utils/context-usage.ts +23 -7
  242. package/src/modes/utils/ui-helpers.ts +10 -5
  243. package/src/plan-mode/plan-files.ts +40 -0
  244. package/src/prompts/bench/cache-prefix-chunk.md +1 -0
  245. package/src/prompts/bench/cache-prefix.md +3 -0
  246. package/src/prompts/bench/cache-suffix.md +1 -0
  247. package/src/prompts/goals/guided-goal-system.md +24 -3
  248. package/src/prompts/system/custom-system-prompt.md +1 -1
  249. package/src/prompts/system/project-prompt.md +8 -1
  250. package/src/prompts/system/subagent-async-pending.md +6 -0
  251. package/src/prompts/system/system-prompt.md +1 -1
  252. package/src/prompts/system/workflow-notice.md +48 -40
  253. package/src/prompts/system/xdev-mount-notice.md +4 -0
  254. package/src/prompts/tools/task.md +12 -2
  255. package/src/prompts/tools/todo.md +3 -1
  256. package/src/registry/agent-lifecycle.ts +116 -46
  257. package/src/registry/agent-registry.ts +35 -8
  258. package/src/registry/persisted-agents.ts +26 -2
  259. package/src/sdk.ts +255 -139
  260. package/src/secrets/index.ts +127 -4
  261. package/src/secrets/obfuscator.ts +2328 -105
  262. package/src/session/acp-permission-gate.ts +165 -0
  263. package/src/session/agent-session-error-log.test.ts +1 -1
  264. package/src/session/agent-session-events.ts +66 -0
  265. package/src/session/agent-session-types.ts +334 -0
  266. package/src/session/agent-session.ts +1910 -12213
  267. package/src/session/artifacts.ts +6 -5
  268. package/src/session/async-job-delivery.ts +74 -0
  269. package/src/session/bash-runner.ts +326 -0
  270. package/src/session/blob-store.test.ts +56 -0
  271. package/src/session/blob-store.ts +18 -2
  272. package/src/session/checkpoint-entries.ts +81 -0
  273. package/src/session/eval-runner.ts +212 -0
  274. package/src/session/indexed-session-storage.ts +9 -2
  275. package/src/session/irc-bridge.ts +203 -0
  276. package/src/session/messages.ts +263 -1
  277. package/src/session/model-controls.ts +714 -0
  278. package/src/session/prewalk.ts +252 -0
  279. package/src/session/queued-messages.ts +93 -0
  280. package/src/session/redis-session-storage.ts +51 -11
  281. package/src/session/retry-fallback-chains.ts +455 -0
  282. package/src/session/role-models.ts +85 -0
  283. package/src/session/session-advisors.ts +1679 -0
  284. package/src/session/session-context.test.ts +224 -1
  285. package/src/session/session-context.ts +47 -5
  286. package/src/session/session-entries.ts +8 -0
  287. package/src/session/session-handoff.ts +308 -0
  288. package/src/session/session-history-format.ts +20 -9
  289. package/src/session/session-loader.ts +10 -51
  290. package/src/session/session-maintenance.ts +2983 -0
  291. package/src/session/session-manager.ts +390 -30
  292. package/src/session/session-memory.ts +222 -0
  293. package/src/session/session-provider-boundary.ts +307 -0
  294. package/src/session/session-stats.ts +293 -0
  295. package/src/session/session-tools.ts +943 -0
  296. package/src/session/session-workspace.ts +53 -0
  297. package/src/session/stream-guards.ts +417 -0
  298. package/src/session/todo-tracker.ts +380 -0
  299. package/src/session/ttsr-coordinator.ts +496 -0
  300. package/src/session/turn-recovery.ts +1629 -0
  301. package/src/slash-commands/builtin-registry.ts +92 -11
  302. package/src/slash-commands/helpers/usage-report.ts +25 -4
  303. package/src/system-prompt.ts +41 -17
  304. package/src/task/executor.ts +288 -70
  305. package/src/task/index.ts +148 -111
  306. package/src/task/output-manager.ts +25 -3
  307. package/src/task/persisted-revive.ts +4 -3
  308. package/src/task/structured-subagent.ts +4 -1
  309. package/src/task/types.ts +16 -0
  310. package/src/tools/approval.ts +55 -10
  311. package/src/tools/bash-interactive.ts +26 -0
  312. package/src/tools/bash-skill-urls.ts +28 -2
  313. package/src/tools/bash.ts +339 -123
  314. package/src/tools/browser/launch.ts +9 -1
  315. package/src/tools/browser/tab-supervisor.ts +8 -5
  316. package/src/tools/browser.ts +94 -47
  317. package/src/tools/hub/index.ts +1 -1
  318. package/src/tools/hub/jobs.ts +67 -8
  319. package/src/tools/image-gen.ts +20 -28
  320. package/src/tools/image-providers.ts +50 -0
  321. package/src/tools/index.ts +12 -0
  322. package/src/tools/path-utils.ts +49 -2
  323. package/src/tools/read.ts +156 -88
  324. package/src/tools/renderers.ts +7 -1
  325. package/src/tools/report-tool-issue.ts +79 -28
  326. package/src/tools/todo.ts +101 -11
  327. package/src/tools/vibe.ts +1 -2
  328. package/src/tools/write.ts +51 -1
  329. package/src/tools/xdev.ts +67 -3
  330. package/src/tts/streaming-player.ts +62 -4
  331. package/src/tts/vocalizer.ts +18 -1
  332. package/src/utils/jj.ts +125 -4
  333. package/src/utils/lang-from-path.ts +7 -0
  334. package/src/utils/title-generator.ts +137 -1
  335. package/src/vibe/runtime.ts +852 -72
  336. package/src/web/search/index.ts +3 -6
  337. package/src/web/search/provider.ts +31 -16
  338. package/src/web/search/providers/firecrawl.ts +46 -13
  339. package/src/web/search/providers/xai.ts +7 -1
  340. package/src/web/search/types.ts +8 -1
@@ -47,6 +47,8 @@ export declare const XDEV_KEEP_TOP_LEVEL: Record<string, true>;
47
47
  * declared `loadMode`.
48
48
  */
49
49
  export declare const XDEV_TRANSPORT_TOOLS: Record<string, true>;
50
+ /** Controls which mounted-device docs are inlined into the system prompt. */
51
+ export type XdevDocsMode = "inline" | "builtins" | "catalog";
50
52
  /**
51
53
  * Whether an enabled tool is presented under `xd://` (rather than top-level)
52
54
  * while the `xd://` transport is active. Discoverable tools mount unless they
@@ -120,7 +122,9 @@ export declare class XdevRegistry {
120
122
  * Dynamic mounts embed at most {@link EXTERNAL_DESCRIPTION_CAP} description
121
123
  * chars (schema always intact); `read xd://<tool>` returns the full text.
122
124
  */
123
- docsAll(): string;
125
+ docsAll(mode?: XdevDocsMode, inlinePatterns?: readonly string[]): string;
126
+ /** Docs for selected mounted devices under the configured prompt-doc policy. */
127
+ docsFor(names: Iterable<string>, mode: XdevDocsMode, inlinePatterns?: readonly string[]): string;
124
128
  /**
125
129
  * Execute a device write: `content` is the JSON args object (empty, `?`, or
126
130
  * `help` returns docs). Args validate against the wrapped tool's schema —
@@ -18,6 +18,19 @@ export interface StreamingPlayerLookup {
18
18
  * - win32: none (PowerShell `SoundPlayer` is file-only).
19
19
  */
20
20
  export declare function streamingPlayerCommandsFor(platform: NodeJS.Platform, sampleRate: number, lookup?: StreamingPlayerLookup): PlayerCommand[];
21
+ /**
22
+ * Test seams for {@link StreamingAudioPlayer}: override backend discovery and
23
+ * the per-file fallback so playback logic can be exercised without a real audio
24
+ * device. Both default to the platform lookup and {@link playAudioFile}.
25
+ */
26
+ export interface StreamingPlayerOptions {
27
+ /** Ordered backend commands for a sample rate; defaults to {@link streamingPlayerCommandsFor}. */
28
+ commandsFor?: (sampleRate: number) => PlayerCommand[];
29
+ /** Per-file fallback playback; defaults to {@link playAudioFile}. */
30
+ playAudio?: (wavPath: string, signal: AbortSignal) => Promise<void>;
31
+ /** Max seconds of streamed PCM retained for the nonzero-exit replay; defaults to {@link REPLAY_RETENTION_SECONDS}. */
32
+ replayRetentionSeconds?: number;
33
+ }
21
34
  /**
22
35
  * Single-session gapless player. Lifecycle: {@link start} once, {@link write}
23
36
  * chunks in order, then {@link end} to drain or {@link stop} to abort. Not
@@ -25,6 +38,7 @@ export declare function streamingPlayerCommandsFor(platform: NodeJS.Platform, sa
25
38
  */
26
39
  export declare class StreamingAudioPlayer {
27
40
  #private;
41
+ constructor(options?: StreamingPlayerOptions);
28
42
  /** Pick a backend and begin draining. Idempotent; the first call's rate wins. */
29
43
  start(sampleRate: number): void;
30
44
  /** Queue a mono float32 PCM chunk for playback in arrival order. */
@@ -11,6 +11,11 @@ export declare class Vocalizer {
11
11
  constructor(createPlayer?: () => VocalizerPlayer);
12
12
  /** Wire (or drop) the per-session enhanced-rewrite service. */
13
13
  setEnhancer(enhancer: SpeechEnhancer | null): void;
14
+ /**
15
+ * Suppress new vocalization until the returned idempotent release function runs.
16
+ * Existing synthesis and playback stop immediately; nested scopes release independently.
17
+ */
18
+ suspend(): () => void;
14
19
  /**
15
20
  * Stream a delta of assistant text into the pipeline. No-op when
16
21
  * vocalization is disabled. The synthesis session (worker, player) is only
@@ -1,3 +1,4 @@
1
+ import * as git from "./git.js";
1
2
  /** Result from a completed `jj` subprocess invocation. */
2
3
  export interface JjCommandResult {
3
4
  /** Process exit code reported by `jj`. */
@@ -32,14 +33,41 @@ export declare class JjCommandError extends Error {
32
33
  /** Create an error for a failed checked `jj` command. */
33
34
  constructor(args: readonly string[], result: JjCommandResult);
34
35
  }
36
+ declare function parseWorkingCopyLabel(raw: string): string | null;
37
+ declare function parseStatusSummary(raw: string): git.GitStatusSummary;
35
38
  /** Run `jj diff --git` for the current workspace commit and return the raw Git-format diff text. */
36
39
  export declare const diff: ((cwd: string, options?: DiffOptions) => Promise<string>) & {
37
40
  /** List changed file paths. */
38
41
  changedFiles(cwd: string, options?: Pick<DiffOptions, "files" | "signal">): Promise<string[]>;
39
42
  };
43
+ /** Jujutsu working-copy metadata used by status displays. */
44
+ export declare const workingCopy: {
45
+ /**
46
+ * Label `@` with its nearest bookmark, falling back to its short change ID.
47
+ * Returns `null` when `jj` is unavailable or the query fails.
48
+ */
49
+ label(cwd: string, signal?: AbortSignal): Promise<string | null>;
50
+ /** Parse working-copy label query output. */
51
+ parseLabel: typeof parseWorkingCopyLabel;
52
+ };
53
+ /** Jujutsu working-copy status derived from the changes in `@`. */
54
+ export declare const status: {
55
+ /**
56
+ * Count changes in `@` relative to its parent using the Git status shape.
57
+ * Jujutsu has no index, so `staged` is always zero.
58
+ */
59
+ summary(cwd: string, signal?: AbortSignal): Promise<git.GitStatusSummary | null>;
60
+ /** Parse `jj diff --summary` output into status counts. */
61
+ parse: typeof parseStatusSummary;
62
+ };
40
63
  export declare const repo: {
41
64
  /** Clear cached workspace roots. Intended for tests that mutate JJ metadata under an existing path. */
42
65
  clearRootCache(): void;
66
+ /**
67
+ * Resolve the current workspace root synchronously from on-disk metadata.
68
+ * Intended for render paths that cannot await filesystem I/O.
69
+ */
70
+ rootSync(cwd: string): string | null;
43
71
  /** Resolve the current Jujutsu workspace root, or `null` when `cwd` is not in a JJ repository. */
44
72
  root(cwd: string): Promise<string | null>;
45
73
  /** Full Jujutsu workspace metadata. */
@@ -72,3 +100,4 @@ export declare const repo: {
72
100
  * - `false` for directories backed by neither tool.
73
101
  */
74
102
  export declare function isPureJjRepo(cwd: string): Promise<boolean>;
103
+ export {};
@@ -2,6 +2,7 @@
2
2
  * Language id for syntax highlighting and UI (icons, read tool), or undefined if unknown.
3
3
  */
4
4
  export declare function getLanguageFromPath(filePath: string): string | undefined;
5
+ export declare function isMarkdownPath(filePath: string): boolean;
5
6
  /**
6
7
  * LSP language identifier; falls back to `plaintext`.
7
8
  */
@@ -24,6 +24,36 @@ export declare function formatSessionTerminalTitle(sessionName: string | undefin
24
24
  */
25
25
  export declare function setTerminalTitle(title: string): void;
26
26
  export declare function setSessionTerminalTitle(sessionName: string | undefined, cwd?: string): void;
27
+ /**
28
+ * Set a terminal title from an extension's `setTitle()`. Unlike the session base
29
+ * title, this owns the terminal verbatim: the run-state separator will not rewrite
30
+ * it on the next spinner tick or state change. Cleared when the app next sets an
31
+ * authoritative session title via {@link setSessionTerminalTitle}.
32
+ */
33
+ export declare function setExtensionTerminalTitle(title: string): void;
34
+ export type TerminalTitleState = "idle" | "working" | "attention";
35
+ /**
36
+ * Compose the terminal title from the `π` brand, a state-carrying SEPARATOR, and
37
+ * the session label. The brand never gains a prefix glyph — the separator slot
38
+ * expresses the run state instead. Pure (no I/O) so the state→separator contract
39
+ * is unit-testable:
40
+ * - `idle` (user's turn): `π > label` — reads like a prompt awaiting input;
41
+ * - `working`: `π ⠋ label` — spinner frames animate the separator;
42
+ * - `attention`: `π ! label` — agent blocked on the user;
43
+ * - disabled: `π: label` — the pre-state layout.
44
+ * Without a label the separator trails the brand (`π >`) so the state stays visible.
45
+ */
46
+ export declare function buildTerminalTitleWithState(label: string | undefined, state: TerminalTitleState, frame: number, enabled: boolean): string;
47
+ /**
48
+ * Reflect the agent run state in the terminal title's separator: `working`
49
+ * animates spinner frames in the separator slot, `idle` shows `>` (your turn),
50
+ * `attention` shows `!` (agent blocked on you). Gated off by `tui.titleState`.
51
+ */
52
+ export declare function setTerminalTitleState(state: TerminalTitleState): void;
53
+ /** Enable/disable the run-state separator (driven by the `tui.titleState` setting). */
54
+ export declare function setTerminalTitleStateEnabled(enabled: boolean): void;
55
+ /** Stop the spinner timer; call on session/UI teardown. */
56
+ export declare function disposeTerminalTitleState(): void;
27
57
  /**
28
58
  * Save the current terminal title on terminals that support xterm window ops.
29
59
  */
@@ -1,4 +1,6 @@
1
1
  import type { AsyncJobManager } from "../async/job-manager.js";
2
+ import type { SessionEntry } from "../session/session-entries.js";
3
+ import { SessionManager } from "../session/session-manager.js";
2
4
  import type { ToolSession } from "../tools/index.js";
3
5
  /** The two worker CLI flavors the director drives. */
4
6
  export type VibeCli = "fast" | "good";
@@ -12,6 +14,21 @@ export type VibeCli = "fast" | "good";
12
14
  export declare const VIBE_CLI_AGENT: Record<VibeCli, string>;
13
15
  /** Worker session lifecycle as shown to the director. */
14
16
  export type VibeSessionState = "starting" | "running" | "idle" | "dead";
17
+ export interface VibeOwnerScope {
18
+ ownerId: string;
19
+ parentSessionId: string;
20
+ parentSessionFile: string | null;
21
+ }
22
+ export interface VibeParentSession {
23
+ getAgentId?: () => string | null;
24
+ getSessionId?: () => string | null;
25
+ getSessionFile: () => string | null;
26
+ sessionManager?: ToolSession["sessionManager"] & Partial<Pick<SessionManager, "appendModeChange" | "appendEntriesAtomically" | "recoverPersistenceFromCurrentState">>;
27
+ asyncJobManager?: AsyncJobManager;
28
+ settings: ToolSession["settings"];
29
+ getActiveModelString?: () => string | undefined;
30
+ getModelString?: () => string | undefined;
31
+ }
15
32
  /**
16
33
  * Live per-session "screen" for rich rendering: what the worker is doing right
17
34
  * now (tool trace, current tool, streamed text tail) plus roster metadata.
@@ -70,13 +87,15 @@ export interface VibeWaitOutcome {
70
87
  stillRunning: string[];
71
88
  timedOut: boolean;
72
89
  }
90
+ /** Child ids claimed by any valid Vibe spawn event, independent of current parent scope. */
91
+ export declare function persistedVibeChildIds(entries: Iterable<SessionEntry>): Set<string>;
73
92
  /** Thrown from a turn job body so the job manager marks the job failed while carrying the formatted result. */
74
93
  export declare class VibeTurnError extends Error {
75
94
  }
76
95
  /**
77
- * Process-global registry of vibe worker sessions, scoped per owner agent id
78
- * (same convention as AsyncJobManager owner filters). The interactive mode
79
- * kills an owner's sessions on vibe-mode exit via {@link killAll}.
96
+ * Process-global registry of vibe worker sessions, scoped by both owner agent
97
+ * id and stable parent session id. Persisted lifecycle events rebuild idle
98
+ * records after a process restart; live turn jobs remain process-local.
80
99
  */
81
100
  export declare class VibeSessionRegistry {
82
101
  #private;
@@ -94,14 +113,21 @@ export declare class VibeSessionRegistry {
94
113
  ownerId: string;
95
114
  state?: VibeSessionState;
96
115
  }): void;
97
- listIds(owner: string): string[];
116
+ ownerScope(session: VibeParentSession): VibeOwnerScope;
117
+ /** Re-open spawn admission after an explicit Vibe-mode entry. */
118
+ activateScope(scope: VibeOwnerScope): void;
119
+ listIds(session: ToolSession): string[];
120
+ /** Ids of every live worker owned by `ownerId`, across all parent scopes (status-line tok/s aggregation). */
121
+ listIdsByOwner(ownerId: string): string[];
98
122
  /**
99
123
  * Live screen snapshots for rich rendering (the "TV wall"): one entry per
100
124
  * session in creation order, carrying the in-flight turn's trace, current
101
125
  * tool, and streamed text tail. All strings are one-line sanitized here so
102
126
  * renderers can print them verbatim.
103
127
  */
104
- screens(owner: string, ids?: string[]): VibeScreenSnapshot[];
128
+ screens(session: ToolSession, ids?: string[]): VibeScreenSnapshot[];
129
+ /** Reconcile resumable and terminal workers from the persisted parent journal. */
130
+ rehydrate(session: VibeParentSession): Promise<number>;
105
131
  /** Spawn a persistent worker session and start its first turn in the background. */
106
132
  spawn(session: ToolSession, args: {
107
133
  cli: VibeCli;
@@ -128,10 +154,12 @@ export declare class VibeSessionRegistry {
128
154
  timeoutMs?: number;
129
155
  signal?: AbortSignal;
130
156
  }): Promise<VibeWaitOutcome>;
131
- /** Terminate a worker: cancel its in-flight turn and dispose + unregister its session. */
157
+ /** Detach one parent's process-local workers without tombstoning their persisted conversations. */
158
+ suspendScope(scope: VibeOwnerScope, manager?: AsyncJobManager): Promise<number>;
159
+ /** Terminate one worker; a tombstone failure still tears it down before reconciliation and error delivery. */
132
160
  kill(session: ToolSession, id: string): Promise<VibeKillOutcome>;
133
- /** Kill every session belonging to `owner` (vibe-mode exit / teardown). Returns the number killed. */
134
- killAll(owner: string, manager?: AsyncJobManager): Promise<number>;
161
+ /** Kill every live session in one parent scope after durably recording the complete mode-exit intent. */
162
+ killAll(session: VibeParentSession, ownerScope?: VibeOwnerScope): Promise<number>;
135
163
  }
136
164
  /**
137
165
  * Aggregate tok/s across every live vibe worker session owned by `ownerId`.
@@ -71,6 +71,6 @@ export declare class WebSearchTool implements AgentTool<typeof webSearchSchema,
71
71
  /** Web search tool as CustomTool (for TUI rendering support) */
72
72
  export declare const webSearchCustomTool: CustomTool<typeof webSearchSchema, SearchRenderDetails>;
73
73
  export declare function getSearchTools(): CustomTool<any, any>[];
74
- export { getSearchProvider, setExcludedSearchProviders, setPreferredSearchProvider } from "./provider.js";
74
+ export { getSearchProvider, setExcludedSearchProviders, setSearchProviderOrder } from "./provider.js";
75
75
  export type { SearchProviderId as SearchProvider, SearchResponse } from "./types.js";
76
76
  export { isSearchProviderId, isSearchProviderPreference } from "./types.js";
@@ -18,8 +18,14 @@ export declare function formatSearchProviderFailures(failures: readonly {
18
18
  * underlying module; subsequent calls return the cached singleton.
19
19
  */
20
20
  export declare function getSearchProvider(id: SearchProviderId): Promise<SearchProvider>;
21
- /** Set the preferred web search provider from settings */
22
- export declare function setPreferredSearchProvider(provider: SearchProviderId | "auto"): void;
21
+ /**
22
+ * Prioritize configured providers while retaining every unlisted provider in
23
+ * its built-in relative order. Invalid IDs are ignored defensively. Listed
24
+ * providers are treated as explicit selections: they resolve through
25
+ * `isExplicitlyAvailable`, so e.g. a hand-listed Perplexity may fall back to
26
+ * anonymous search exactly like the retired single-preference setting did.
27
+ */
28
+ export declare function setSearchProviderOrder(providers: readonly SearchProviderId[]): void;
23
29
  /** Set providers that web search should never use, including fallbacks. */
24
30
  export declare function setExcludedSearchProviders(providers: readonly SearchProviderId[]): void;
25
31
  /** `true` when settings exclude `id` from web search (auto chain and the Public Web fan-out). */
@@ -28,12 +34,16 @@ export interface SearchProviderCandidate {
28
34
  id: SearchProviderId;
29
35
  explicit: boolean;
30
36
  }
31
- /** Return provider candidates in fallback order without loading their modules. */
32
- export declare function resolveProviderCandidates(preferredProvider?: SearchProviderId | "auto"): SearchProviderCandidate[];
37
+ /**
38
+ * Return provider candidates in fallback order without loading their modules.
39
+ * `forcedProvider` (a per-request `provider` argument) is terminal-first and
40
+ * bypasses exclusion; configured-order entries carry `explicit: true`.
41
+ */
42
+ export declare function resolveProviderCandidates(forcedProvider?: SearchProviderId): SearchProviderCandidate[];
33
43
  /**
34
44
  * Resolve the complete available provider chain.
35
45
  *
36
46
  * This compatibility helper loads every candidate. Search execution should use
37
47
  * {@link resolveProviderCandidates} so fallback modules load only when reached.
38
48
  */
39
- export declare function resolveProviderChain(authStorage: AuthStorage, preferredProvider?: SearchProviderId | "auto"): Promise<SearchProvider[]>;
49
+ export declare function resolveProviderChain(authStorage: AuthStorage, forcedProvider?: SearchProviderId): Promise<SearchProvider[]>;
@@ -23,6 +23,15 @@ export declare function searchFirecrawl(params: SearchParams): Promise<SearchRes
23
23
  export declare class FirecrawlProvider extends SearchProvider {
24
24
  readonly id = "firecrawl";
25
25
  readonly label = "Firecrawl";
26
+ /**
27
+ * Auto-chain admission: requires a credential so an unconfigured Firecrawl
28
+ * doesn't displace other providers that the user has set up with API keys.
29
+ */
26
30
  isAvailable(authStorage: AuthStorage): boolean;
31
+ /**
32
+ * Firecrawl supports keyless mode, so an explicit user selection
33
+ * (`webSearch: firecrawl`) works without any credential configured.
34
+ */
35
+ isExplicitlyAvailable(_authStorage: AuthStorage): boolean;
27
36
  search(params: SearchParams): Promise<SearchResponse>;
28
37
  }
@@ -54,7 +54,7 @@ export declare const SEARCH_PROVIDER_OPTIONS: readonly [{
54
54
  }, {
55
55
  readonly value: "firecrawl";
56
56
  readonly label: "Firecrawl";
57
- readonly description: "Requires FIRECRAWL_API_KEY";
57
+ readonly description: "Uses Firecrawl API when FIRECRAWL_API_KEY is set; falls back to keyless mode";
58
58
  }, {
59
59
  readonly value: "brave";
60
60
  readonly label: "Brave";
@@ -108,6 +108,100 @@ export type SearchProviderId = Exclude<(typeof SEARCH_PROVIDER_OPTIONS)[number][
108
108
  * share one source of truth and never drift apart.
109
109
  */
110
110
  export declare const SEARCH_PROVIDER_ORDER: readonly SearchProviderId[];
111
+ /** Concrete provider choices (no `auto` sentinel) — for list-valued settings like order/exclude. */
112
+ export declare const SEARCH_PROVIDER_CHOICES: ({
113
+ readonly value: "perplexity";
114
+ readonly label: "Perplexity";
115
+ readonly description: "Uses auth when configured; explicit selection falls back to anonymous search";
116
+ } | {
117
+ readonly value: "gemini";
118
+ readonly label: "Gemini";
119
+ readonly description: "Google Search grounding via Gemini (uses google-gemini-cli or google-antigravity OAuth)";
120
+ } | {
121
+ readonly value: "anthropic";
122
+ readonly label: "Anthropic";
123
+ readonly description: "Claude's native web_search tool (uses Anthropic OAuth or ANTHROPIC_API_KEY)";
124
+ } | {
125
+ readonly value: "codex";
126
+ readonly label: "OpenAI";
127
+ readonly description: "OpenAI's native web_search (uses ChatGPT OAuth via /login openai-codex)";
128
+ } | {
129
+ readonly value: "xai";
130
+ readonly label: "xAI";
131
+ readonly description: "Grok web search via xAI Responses API (requires XAI_API_KEY)";
132
+ } | {
133
+ readonly value: "zai";
134
+ readonly label: "Z.AI";
135
+ readonly description: "Calls Z.AI webSearchPrime MCP";
136
+ } | {
137
+ readonly value: "exa";
138
+ readonly label: "Exa";
139
+ readonly description: "Uses Exa API when EXA_API_KEY is set; falls back to Exa MCP";
140
+ } | {
141
+ readonly value: "tinyfish";
142
+ readonly label: "TinyFish";
143
+ readonly description: "Requires TINYFISH_API_KEY";
144
+ } | {
145
+ readonly value: "jina";
146
+ readonly label: "Jina";
147
+ readonly description: "Requires JINA_API_KEY";
148
+ } | {
149
+ readonly value: "kagi";
150
+ readonly label: "Kagi";
151
+ readonly description: "Requires KAGI_API_KEY and Kagi Search API beta access";
152
+ } | {
153
+ readonly value: "tavily";
154
+ readonly label: "Tavily";
155
+ readonly description: "Requires TAVILY_API_KEY";
156
+ } | {
157
+ readonly value: "firecrawl";
158
+ readonly label: "Firecrawl";
159
+ readonly description: "Uses Firecrawl API when FIRECRAWL_API_KEY is set; falls back to keyless mode";
160
+ } | {
161
+ readonly value: "brave";
162
+ readonly label: "Brave";
163
+ readonly description: "Requires BRAVE_API_KEY";
164
+ } | {
165
+ readonly value: "kimi";
166
+ readonly label: "Kimi";
167
+ readonly description: "Kimi Code search (requires a Kimi Code Console key via KIMI_SEARCH_API_KEY/MOONSHOT_SEARCH_API_KEY or /login kimi-code; not MOONSHOT_API_KEY)";
168
+ } | {
169
+ readonly value: "parallel";
170
+ readonly label: "Parallel";
171
+ readonly description: "Requires PARALLEL_API_KEY";
172
+ } | {
173
+ readonly value: "synthetic";
174
+ readonly label: "Synthetic";
175
+ readonly description: "Requires SYNTHETIC_API_KEY";
176
+ } | {
177
+ readonly value: "searxng";
178
+ readonly label: "SearXNG";
179
+ readonly description: "Requires SEARXNG_ENDPOINT or searxng.endpoint";
180
+ } | {
181
+ readonly value: "startpage";
182
+ readonly label: "Startpage";
183
+ readonly description: "Credential-free scrape of Startpage (Google-backed) results; may be bot-challenged";
184
+ } | {
185
+ readonly value: "duckduckgo";
186
+ readonly label: "DuckDuckGo";
187
+ readonly description: "Credential-free best-effort fallback; may be bot-challenged on datacenter/shared-egress IPs";
188
+ } | {
189
+ readonly value: "ecosia";
190
+ readonly label: "Ecosia";
191
+ readonly description: "Credential-free browser-backed scrape of Ecosia (Google-backed) results";
192
+ } | {
193
+ readonly value: "google";
194
+ readonly label: "Google";
195
+ readonly description: "Credential-free browser-backed fallback; slower and may be bot-challenged";
196
+ } | {
197
+ readonly value: "mojeek";
198
+ readonly label: "Mojeek";
199
+ readonly description: "Credential-free browser-backed scrape of Mojeek's independent index";
200
+ } | {
201
+ readonly value: "public";
202
+ readonly label: "Public Web";
203
+ readonly description: "Queries every credential-free engine in parallel and consolidates deduplicated results";
204
+ })[];
111
205
  export declare const SEARCH_PROVIDER_PREFERENCES: readonly ["auto", ...SearchProviderId[]];
112
206
  /** Display labels, derived from {@link SEARCH_PROVIDER_OPTIONS}. */
113
207
  export declare const SEARCH_PROVIDER_LABELS: Record<SearchProviderId, string>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@oh-my-pi/pi-coding-agent",
4
- "version": "17.0.8",
4
+ "version": "17.1.0",
5
5
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
6
6
  "homepage": "https://omp.sh",
7
7
  "author": "Can Boluk",
@@ -51,18 +51,19 @@
51
51
  "dependencies": {
52
52
  "@agentclientprotocol/sdk": "1.2.1",
53
53
  "@babel/parser": "^7.29.7",
54
+ "@babel/traverse": "^7.29.7",
54
55
  "@mozilla/readability": "^0.6.0",
55
- "@oh-my-pi/hashline": "17.0.8",
56
- "@oh-my-pi/omp-stats": "17.0.8",
57
- "@oh-my-pi/pi-agent-core": "17.0.8",
58
- "@oh-my-pi/pi-ai": "17.0.8",
59
- "@oh-my-pi/pi-catalog": "17.0.8",
60
- "@oh-my-pi/pi-mnemopi": "17.0.8",
61
- "@oh-my-pi/pi-natives": "17.0.8",
62
- "@oh-my-pi/pi-tui": "17.0.8",
63
- "@oh-my-pi/pi-utils": "17.0.8",
64
- "@oh-my-pi/pi-wire": "17.0.8",
65
- "@oh-my-pi/snapcompact": "17.0.8",
56
+ "@oh-my-pi/hashline": "17.1.0",
57
+ "@oh-my-pi/omp-stats": "17.1.0",
58
+ "@oh-my-pi/pi-agent-core": "17.1.0",
59
+ "@oh-my-pi/pi-ai": "17.1.0",
60
+ "@oh-my-pi/pi-catalog": "17.1.0",
61
+ "@oh-my-pi/pi-mnemopi": "17.1.0",
62
+ "@oh-my-pi/pi-natives": "17.1.0",
63
+ "@oh-my-pi/pi-tui": "17.1.0",
64
+ "@oh-my-pi/pi-utils": "17.1.0",
65
+ "@oh-my-pi/pi-wire": "17.1.0",
66
+ "@oh-my-pi/snapcompact": "17.1.0",
66
67
  "@opentelemetry/api": "^1.9.1",
67
68
  "@opentelemetry/api-logs": "^0.220.0",
68
69
  "@opentelemetry/context-async-hooks": "^2.9.0",
@@ -10,7 +10,7 @@
10
10
  * The relay repo's build script runs this and embeds the output via go:embed.
11
11
  */
12
12
  import * as path from "node:path";
13
- import { generateThemeVars, getTemplate } from "../src/export/html";
13
+ import { generateThemeStyles, getTemplate } from "../src/export/html";
14
14
 
15
15
  const outPath = process.argv[2];
16
16
  if (!outPath) {
@@ -19,13 +19,11 @@ if (!outPath) {
19
19
  }
20
20
 
21
21
  const loaderJs = await Bun.file(new URL("../src/export/html/share-loader.js", import.meta.url).pathname).text();
22
- // Pin the omp brand palette (collab-web pink/purple identity) the viewer is
23
- // a public artifact matching the live my.omp.sh client, not a per-user export
24
- // that should mirror the host's terminal theme.
25
- const themeVars = await generateThemeVars("web");
22
+ // Public artifacts use the bundled omp web themes rather than TUI themes.
23
+ const themeStyles = await generateThemeStyles("web");
26
24
 
27
25
  const html = getTemplate()
28
- .replace("<theme-vars/>", () => `<style>:root { ${themeVars} }</style>`)
26
+ .replace("<theme-vars/>", () => `<style>${themeStyles}</style>`)
29
27
  .replace("<title>Session Export</title>", () => "<title>omp session</title>")
30
28
  .replace("{{SESSION_DATA}}</script>", () => `</script>\n <script>${loaderJs}</script>`);
31
29
 
@@ -19,7 +19,7 @@ const BUNDLED_PACKAGES: readonly BundledPackage[] = [
19
19
  { dir: "ai", identifier: "PiAi", rootShim: "legacy-pi-ai-shim.ts" },
20
20
  { dir: "coding-agent", identifier: "PiCodingAgent", rootShim: "legacy-pi-coding-agent-shim.ts" },
21
21
  { dir: "natives", identifier: "PiNatives", rootShim: null },
22
- { dir: "tui", identifier: "PiTui", rootShim: null },
22
+ { dir: "tui", identifier: "PiTui", rootShim: "legacy-pi-tui-shim.ts" },
23
23
  { dir: "utils", identifier: "PiUtils", rootShim: null },
24
24
  ];
25
25