@selesai/code 0.13.39 → 0.14.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 (1401) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/dist/bun/runtime-setup.js +4 -1
  3. package/dist/cli/args.d.ts +3 -1
  4. package/dist/cli/args.js +76 -33
  5. package/dist/cli/auth-check.d.ts +18 -0
  6. package/dist/cli/auth-check.js +49 -0
  7. package/dist/cli/credential-print.d.ts +5 -15
  8. package/dist/cli/credential-print.js +42 -82
  9. package/dist/cli/file-processor.d.ts +1 -1
  10. package/dist/cli/file-processor.js +2 -1
  11. package/dist/cli/list-models.d.ts +1 -1
  12. package/dist/cli/list-models.js +2 -2
  13. package/dist/cli/startup-ui.js +38 -30
  14. package/dist/config.d.ts +35 -6
  15. package/dist/config.js +95 -17
  16. package/dist/core/agent-session-custom-tools.test.js +64 -0
  17. package/dist/core/agent-session-length-continuation.test.js +7 -3
  18. package/dist/core/agent-session-runtime.js +2 -2
  19. package/dist/core/agent-session-services.d.ts +1 -0
  20. package/dist/core/agent-session-services.js +14 -0
  21. package/dist/core/agent-session.d.ts +180 -40
  22. package/dist/core/agent-session.js +1061 -485
  23. package/dist/core/auth-storage.d.ts +25 -15
  24. package/dist/core/auth-storage.js +242 -66
  25. package/dist/core/bash-executor.js +42 -52
  26. package/dist/core/bug-report.js +1 -1
  27. package/dist/core/cache-warmer.d.ts +1 -0
  28. package/dist/core/cache-warmer.js +15 -1
  29. package/dist/core/compaction/branch-summarization.js +3 -0
  30. package/dist/core/compaction/compaction.d.ts +3 -1
  31. package/dist/core/compaction/compaction.js +156 -79
  32. package/dist/core/compaction/utils.d.ts +2 -1
  33. package/dist/core/compaction/utils.js +25 -18
  34. package/dist/core/crash-log.d.ts +5 -0
  35. package/dist/core/crash-log.js +69 -0
  36. package/dist/core/defaults.d.ts +1 -1
  37. package/dist/core/defaults.js +1 -1
  38. package/dist/core/export-html/template.css +10 -0
  39. package/dist/core/export-html/template.js +72 -18
  40. package/dist/core/export-html/tool-renderer.d.ts +3 -3
  41. package/dist/core/export-html/tool-renderer.js +5 -3
  42. package/dist/core/extensions/index.d.ts +2 -2
  43. package/dist/core/extensions/index.js +1 -1
  44. package/dist/core/extensions/loader.js +138 -55
  45. package/dist/core/extensions/runner.d.ts +38 -5
  46. package/dist/core/extensions/runner.js +220 -7
  47. package/dist/core/extensions/types.d.ts +438 -51
  48. package/dist/core/extensions/types.js +3 -0
  49. package/dist/core/extensions/virtual-modules.js +6 -0
  50. package/dist/core/extensions/wrapper.d.ts +2 -2
  51. package/dist/core/extensions/wrapper.js +3 -3
  52. package/dist/core/footer-data-provider.d.ts +1 -1
  53. package/dist/core/footer-data-provider.js +1 -1
  54. package/dist/core/handoff.d.ts +0 -1
  55. package/dist/core/handoff.js +0 -1
  56. package/dist/core/http-dispatcher.js +5 -0
  57. package/dist/core/index.d.ts +1 -1
  58. package/dist/core/intercom-rpc.d.ts +135 -0
  59. package/dist/core/intercom-rpc.js +64 -0
  60. package/dist/core/keybindings.d.ts +25 -24
  61. package/dist/core/keybindings.js +27 -6
  62. package/dist/core/mcp-servers.d.ts +134 -0
  63. package/dist/core/mcp-servers.js +223 -0
  64. package/dist/core/model-config.d.ts +122 -5
  65. package/dist/core/model-config.js +35 -1
  66. package/dist/core/model-registry.d.ts +23 -15
  67. package/dist/core/model-registry.js +46 -22
  68. package/dist/core/model-resolver.d.ts +6 -5
  69. package/dist/core/model-resolver.js +51 -21
  70. package/dist/core/model-runtime.d.ts +73 -14
  71. package/dist/core/model-runtime.js +398 -104
  72. package/dist/core/models-store.d.ts +12 -7
  73. package/dist/core/models-store.js +85 -15
  74. package/dist/core/nested-tool-calls.d.ts +102 -0
  75. package/dist/core/nested-tool-calls.js +178 -0
  76. package/dist/core/package-manager.d.ts +8 -1
  77. package/dist/core/package-manager.js +144 -61
  78. package/dist/core/package-manager.test.js +5 -5
  79. package/dist/core/pi-manifest.d.ts +9 -0
  80. package/dist/core/pi-manifest.js +25 -0
  81. package/dist/core/prompt-templates.d.ts +6 -1
  82. package/dist/core/prompt-templates.js +61 -35
  83. package/dist/core/provider-composer.d.ts +44 -19
  84. package/dist/core/provider-composer.js +166 -64
  85. package/dist/core/radius.d.ts +2 -0
  86. package/dist/core/radius.js +2 -0
  87. package/dist/core/release-rpc.d.ts +137 -0
  88. package/dist/core/release-rpc.js +77 -0
  89. package/dist/core/remote-catalog-provider.d.ts +8 -1
  90. package/dist/core/remote-catalog-provider.js +25 -13
  91. package/dist/core/resource-loader.d.ts +12 -1
  92. package/dist/core/resource-loader.js +180 -45
  93. package/dist/core/runtime-credentials.d.ts +5 -5
  94. package/dist/core/runtime-credentials.js +11 -8
  95. package/dist/core/sdk.d.ts +16 -7
  96. package/dist/core/sdk.js +57 -24
  97. package/dist/core/session-manager.d.ts +45 -9
  98. package/dist/core/session-manager.js +124 -31
  99. package/dist/core/settings-diagnostics.d.ts +8 -0
  100. package/dist/core/settings-diagnostics.js +20 -0
  101. package/dist/core/settings-manager.d.ts +62 -32
  102. package/dist/core/settings-manager.js +147 -69
  103. package/dist/core/skills.d.ts +5 -2
  104. package/dist/core/skills.js +58 -35
  105. package/dist/core/slash-commands.js +2 -1
  106. package/dist/core/source-info.d.ts +8 -0
  107. package/dist/core/source-info.js +16 -0
  108. package/dist/core/subagent-rpc.d.ts +110 -0
  109. package/dist/core/subagent-rpc.js +60 -0
  110. package/dist/core/system-prompt.d.ts +9 -3
  111. package/dist/core/system-prompt.js +9 -12
  112. package/dist/core/system-prompt.test.js +2 -7
  113. package/dist/core/tools/bash.d.ts +12 -0
  114. package/dist/core/tools/bash.js +33 -2
  115. package/dist/core/tools/edit-diff.d.ts +0 -5
  116. package/dist/core/tools/edit-diff.js +2 -5
  117. package/dist/core/tools/edit.d.ts +4 -0
  118. package/dist/core/tools/edit.js +31 -11
  119. package/dist/core/tools/find.d.ts +7 -0
  120. package/dist/core/tools/find.js +16 -19
  121. package/dist/core/tools/grep.d.ts +4 -0
  122. package/dist/core/tools/grep.js +5 -1
  123. package/dist/core/tools/index.d.ts +1 -1
  124. package/dist/core/tools/index.js +11 -2
  125. package/dist/core/tools/ls.d.ts +4 -0
  126. package/dist/core/tools/ls.js +5 -1
  127. package/dist/core/tools/output-accumulator.d.ts +11 -0
  128. package/dist/core/tools/output-accumulator.js +40 -10
  129. package/dist/core/tools/read.d.ts +17 -2
  130. package/dist/core/tools/read.js +23 -2
  131. package/dist/core/tools/render-utils.d.ts +6 -0
  132. package/dist/core/tools/render-utils.js +26 -0
  133. package/dist/core/tools/renderers/bash.js +19 -35
  134. package/dist/core/tools/renderers/edit.js +5 -4
  135. package/dist/core/tools/renderers/index.d.ts +2 -2
  136. package/dist/core/tools/renderers/read.js +3 -2
  137. package/dist/core/tools/tool-definition-wrapper.d.ts +5 -3
  138. package/dist/core/tools/tool-definition-wrapper.js +3 -1
  139. package/dist/core/tools/truncate.d.ts +14 -0
  140. package/dist/core/tools/truncate.js +29 -0
  141. package/dist/core/tools/write.d.ts +4 -0
  142. package/dist/core/tools/write.js +6 -2
  143. package/dist/core/trust-manager.js +3 -1
  144. package/dist/core/usage-totals.d.ts +2 -0
  145. package/dist/core/usage-totals.js +23 -0
  146. package/dist/core/virtual-models.d.ts +116 -0
  147. package/dist/core/virtual-models.js +123 -0
  148. package/dist/defaults/models.json +32 -0
  149. package/dist/defaults/settings.json +1 -9
  150. package/dist/extensions/agent-browser.ts +9 -0
  151. package/dist/extensions/codemode/execute.d.ts +15 -0
  152. package/dist/extensions/codemode/execute.js +633 -0
  153. package/dist/extensions/codemode/execute.lazy.d.ts +2 -0
  154. package/dist/extensions/codemode/execute.lazy.js +2 -0
  155. package/dist/extensions/codemode/index.d.ts +20 -0
  156. package/dist/extensions/codemode/index.js +31 -0
  157. package/dist/extensions/codemode/renderer.d.ts +11 -0
  158. package/dist/extensions/codemode/renderer.js +136 -0
  159. package/dist/extensions/codemode/tool.d.ts +129 -0
  160. package/dist/extensions/codemode/tool.js +275 -0
  161. package/dist/extensions/context-compaction-reminder.ts +1 -1
  162. package/dist/extensions/grep-app/index.ts +2 -10
  163. package/dist/extensions/herdr-agent-state.ts +1 -1
  164. package/dist/extensions/{pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/index.d.ts → index.d.ts} +0 -1
  165. package/dist/extensions/index.js +12 -0
  166. package/dist/extensions/jev/classifier-context.ts +54 -0
  167. package/dist/extensions/jev/classifier.test.ts +85 -0
  168. package/dist/extensions/jev/classifier.ts +105 -0
  169. package/dist/extensions/jev/decisions.test.ts +35 -47
  170. package/dist/extensions/jev/decisions.ts +58 -104
  171. package/dist/extensions/jev/test-support.ts +33 -38
  172. package/dist/extensions/jev-advisory-lifecycle.test.ts +12 -12
  173. package/dist/extensions/jev-advisory-memory.test.ts +9 -9
  174. package/dist/extensions/jev-advisory-recommendations.test.ts +8 -8
  175. package/dist/extensions/jev-ask-tool.test.ts +41 -45
  176. package/dist/extensions/jev-ask-tool.ts +10 -38
  177. package/dist/extensions/jev-find-source.test.ts +26 -0
  178. package/dist/extensions/jev-find-source.ts +58 -19
  179. package/dist/{core → extensions}/llama/client.d.ts +2 -0
  180. package/dist/{core → extensions}/llama/client.js +7 -3
  181. package/dist/{core → extensions}/llama/index.js +13 -2
  182. package/dist/{core → extensions}/llama/provider.d.ts +1 -1
  183. package/dist/extensions/llama/provider.js +235 -0
  184. package/dist/extensions/mcp/cli.d.ts +20 -0
  185. package/dist/extensions/mcp/cli.js +496 -0
  186. package/dist/extensions/mcp/cli.lazy.d.ts +2 -0
  187. package/dist/extensions/mcp/cli.lazy.js +2 -0
  188. package/dist/extensions/mcp/config.d.ts +83 -0
  189. package/dist/extensions/mcp/config.js +193 -0
  190. package/dist/extensions/mcp/index.d.ts +78 -0
  191. package/dist/extensions/mcp/index.js +1201 -0
  192. package/dist/extensions/mcp/log.d.ts +15 -0
  193. package/dist/extensions/mcp/log.js +65 -0
  194. package/dist/extensions/mcp/oauth.d.ts +97 -0
  195. package/dist/extensions/mcp/oauth.js +401 -0
  196. package/dist/extensions/mcp/resources.d.ts +41 -0
  197. package/dist/extensions/mcp/resources.js +260 -0
  198. package/dist/extensions/mcp/runtime.d.ts +96 -0
  199. package/dist/extensions/mcp/runtime.js +412 -0
  200. package/dist/extensions/mcp/runtime.lazy.d.ts +2 -0
  201. package/dist/extensions/mcp/runtime.lazy.js +2 -0
  202. package/dist/extensions/mcp/tools.d.ts +86 -0
  203. package/dist/extensions/mcp/tools.js +252 -0
  204. package/dist/extensions/mcp/ui.d.ts +59 -0
  205. package/dist/extensions/mcp/ui.js +185 -0
  206. package/dist/extensions/package.json +1 -1
  207. package/dist/extensions/pi-graft/tools.ts +6 -0
  208. package/dist/extensions/pi-hermes-memory/CHANGELOG.md +25 -0
  209. package/dist/extensions/pi-hermes-memory/README.md +140 -4
  210. package/dist/extensions/pi-hermes-memory/package-lock.json +624 -2720
  211. package/dist/extensions/pi-hermes-memory/package.json +9 -7
  212. package/dist/extensions/pi-hermes-memory/scripts/benchmark-memory-startup.mjs +72 -0
  213. package/dist/extensions/pi-hermes-memory/scripts/check-production-install.mjs +107 -0
  214. package/dist/extensions/pi-hermes-memory/src/auto-consolidation-warning.ts +2 -1
  215. package/dist/extensions/pi-hermes-memory/src/config.ts +35 -0
  216. package/dist/extensions/pi-hermes-memory/src/constants.ts +62 -15
  217. package/dist/extensions/pi-hermes-memory/src/handlers/auto-consolidate.ts +374 -50
  218. package/dist/extensions/pi-hermes-memory/src/handlers/background-review.ts +7 -4
  219. package/dist/extensions/pi-hermes-memory/src/handlers/correction-detector.ts +19 -14
  220. package/dist/extensions/pi-hermes-memory/src/handlers/insights.ts +75 -1
  221. package/dist/extensions/pi-hermes-memory/src/handlers/review-memory-ops.ts +322 -22
  222. package/dist/extensions/pi-hermes-memory/src/handlers/session-backfill.ts +8 -0
  223. package/dist/extensions/pi-hermes-memory/src/handlers/session-flush.ts +193 -54
  224. package/dist/extensions/pi-hermes-memory/src/handlers/skills-command.ts +6 -2
  225. package/dist/extensions/pi-hermes-memory/src/handlers/sync-markdown-memories.ts +33 -5
  226. package/dist/extensions/pi-hermes-memory/src/index.ts +116 -47
  227. package/dist/extensions/pi-hermes-memory/src/memory-initialization.ts +101 -0
  228. package/dist/extensions/pi-hermes-memory/src/store/atomic-lock-coordinator.ts +10 -2
  229. package/dist/extensions/pi-hermes-memory/src/store/db.ts +34 -9
  230. package/dist/extensions/pi-hermes-memory/src/store/memory-store.ts +44 -8
  231. package/dist/extensions/pi-hermes-memory/src/store/schema.ts +3 -1
  232. package/dist/extensions/pi-hermes-memory/src/store/sqlite-memory-store.ts +141 -0
  233. package/dist/extensions/pi-hermes-memory/src/store/standing-instructions.ts +17 -6
  234. package/dist/extensions/pi-hermes-memory/src/tools/memory-search-tool.ts +20 -10
  235. package/dist/extensions/pi-hermes-memory/src/tools/memory-tool.ts +1 -17
  236. package/dist/extensions/pi-hermes-memory/src/tools/session-search-tool.ts +2 -10
  237. package/dist/extensions/pi-hermes-memory/src/tools/skill-tool.ts +4 -8
  238. package/dist/extensions/pi-hermes-memory/src/types.ts +48 -0
  239. package/dist/extensions/pi-hermes-memory/tests/config.test.ts +108 -0
  240. package/dist/extensions/pi-hermes-memory/tests/handlers/auto-consolidate.test.ts +1185 -42
  241. package/dist/extensions/pi-hermes-memory/tests/handlers/insights.test.ts +57 -1
  242. package/dist/extensions/pi-hermes-memory/tests/handlers/lazy-memory-hooks.test.ts +128 -0
  243. package/dist/extensions/pi-hermes-memory/tests/handlers/review-memory-ops.test.ts +844 -1
  244. package/dist/extensions/pi-hermes-memory/tests/handlers/session-backfill.test.ts +16 -0
  245. package/dist/extensions/pi-hermes-memory/tests/handlers/session-flush.test.ts +512 -3
  246. package/dist/extensions/pi-hermes-memory/tests/handlers/skills-command.test.ts +38 -0
  247. package/dist/extensions/pi-hermes-memory/tests/handlers/sync-markdown-memories.test.ts +183 -2
  248. package/dist/extensions/pi-hermes-memory/tests/handlers/system-prompt.test.ts +1 -3
  249. package/dist/extensions/pi-hermes-memory/tests/index.test.ts +17 -0
  250. package/dist/extensions/pi-hermes-memory/tests/integration/corruption-recovery-integration.test.ts +21 -0
  251. package/dist/extensions/pi-hermes-memory/tests/lazy-startup.test.ts +313 -0
  252. package/dist/extensions/pi-hermes-memory/tests/memory-initialization.test.ts +182 -0
  253. package/dist/extensions/pi-hermes-memory/tests/prompt-injection.test.ts +184 -0
  254. package/dist/extensions/pi-hermes-memory/tests/skill-discovery-contract.test.ts +60 -0
  255. package/dist/extensions/pi-hermes-memory/tests/store/atomic-lock-lazy-probe.test.ts +80 -0
  256. package/dist/extensions/pi-hermes-memory/tests/store/db.test.ts +2 -0
  257. package/dist/extensions/pi-hermes-memory/tests/store/memory-store.test.ts +79 -0
  258. package/dist/extensions/pi-hermes-memory/tests/store/sqlite-memory-store.test.ts +268 -0
  259. package/dist/extensions/pi-hermes-memory/tests/store/standing-instructions.test.ts +29 -0
  260. package/dist/extensions/pi-hermes-memory/tests/store/usage-tracking.test.ts +170 -0
  261. package/dist/extensions/pi-hermes-memory/tests/tools/memory-search-tool.test.ts +80 -1
  262. package/dist/extensions/pi-hermes-memory/tests/tools/skill-tool.test.ts +51 -0
  263. package/dist/extensions/pi-intercom/CHANGELOG.md +66 -0
  264. package/dist/extensions/pi-intercom/README.md +115 -12
  265. package/dist/extensions/pi-intercom/broker/broker.ts +304 -24
  266. package/dist/extensions/pi-intercom/broker/client.ts +9 -2
  267. package/dist/extensions/pi-intercom/broker/cross-machine-provenance.test.ts +63 -0
  268. package/dist/extensions/pi-intercom/broker/mailbox-persistence.test.ts +523 -0
  269. package/dist/extensions/pi-intercom/broker/paths.test.ts +4 -4
  270. package/dist/extensions/pi-intercom/broker/paths.ts +4 -2
  271. package/dist/extensions/pi-intercom/broker/protocol.ts +64 -0
  272. package/dist/extensions/pi-intercom/broker/spawn.test.ts +58 -169
  273. package/dist/extensions/pi-intercom/broker/spawn.ts +40 -87
  274. package/dist/extensions/pi-intercom/cli.mjs +6 -0
  275. package/dist/extensions/pi-intercom/cli.test.ts +428 -0
  276. package/dist/extensions/pi-intercom/cli.ts +343 -0
  277. package/dist/extensions/pi-intercom/config.test.ts +61 -1
  278. package/dist/extensions/pi-intercom/config.ts +53 -2
  279. package/dist/extensions/pi-intercom/cross-machine-discovery.test.ts +218 -0
  280. package/dist/extensions/pi-intercom/cross-machine-discovery.ts +140 -0
  281. package/dist/extensions/pi-intercom/cross-machine-envelope.test.ts +106 -0
  282. package/dist/extensions/pi-intercom/cross-machine-envelope.ts +92 -0
  283. package/dist/extensions/pi-intercom/cross-machine-integration.test.ts +25 -0
  284. package/dist/extensions/pi-intercom/cross-machine-transport.test.ts +106 -0
  285. package/dist/extensions/pi-intercom/cross-machine-transport.ts +110 -0
  286. package/dist/extensions/pi-intercom/extension-api.ts +24 -0
  287. package/dist/extensions/pi-intercom/handover.test.ts +88 -0
  288. package/dist/extensions/pi-intercom/handover.ts +115 -0
  289. package/dist/extensions/pi-intercom/herdr-location.test.ts +173 -0
  290. package/dist/extensions/pi-intercom/herdr-location.ts +137 -0
  291. package/dist/extensions/pi-intercom/human-priority.pi.test.ts +489 -0
  292. package/dist/extensions/pi-intercom/index.ts +770 -172
  293. package/dist/extensions/pi-intercom/intercom.integration.test.ts +869 -21
  294. package/dist/extensions/pi-intercom/package.json +12 -2
  295. package/dist/extensions/pi-intercom/project-agent.ts +1 -1
  296. package/dist/extensions/pi-intercom/release-readiness.test.ts +116 -0
  297. package/dist/extensions/pi-intercom/release-readiness.ts +93 -0
  298. package/dist/extensions/pi-intercom/skills/pi-intercom/SKILL.md +26 -2
  299. package/dist/extensions/pi-intercom/test/handover-picker.test.ts +134 -0
  300. package/dist/extensions/pi-intercom/test/inline-message.test.ts +43 -0
  301. package/dist/extensions/pi-intercom/types.d.ts +247 -0
  302. package/dist/extensions/pi-intercom/types.js +2 -0
  303. package/dist/extensions/pi-intercom/types.ts +39 -1
  304. package/dist/extensions/pi-intercom/ui/handover-picker.ts +318 -0
  305. package/dist/extensions/pi-intercom/ui/inline-message.ts +10 -3
  306. package/dist/extensions/pi-intercom/ui/session-list.ts +28 -15
  307. package/dist/extensions/pi-subagents/.github/workflows/release.yml +5 -1
  308. package/dist/extensions/pi-subagents/.github/workflows/test.yml +188 -18
  309. package/dist/extensions/pi-subagents/CHANGELOG.md +514 -1
  310. package/dist/extensions/pi-subagents/README.md +7 -5
  311. package/dist/extensions/pi-subagents/VISION.md +6 -0
  312. package/dist/extensions/pi-subagents/agents/reviewer.md +7 -5
  313. package/dist/extensions/pi-subagents/agents/worker.md +1 -1
  314. package/dist/extensions/pi-subagents/docs/agents.md +75 -35
  315. package/dist/extensions/pi-subagents/docs/configuration.md +156 -25
  316. package/dist/extensions/pi-subagents/docs/extension-api.md +121 -29
  317. package/dist/extensions/pi-subagents/docs/missions.md +46 -14
  318. package/dist/extensions/pi-subagents/docs/models.md +22 -84
  319. package/dist/extensions/pi-subagents/docs/observability.md +57 -24
  320. package/dist/extensions/pi-subagents/docs/standalone-background.md +59 -0
  321. package/dist/extensions/pi-subagents/docs/tool-reference.md +167 -116
  322. package/dist/extensions/pi-subagents/docs/watchdog.md +41 -10
  323. package/dist/extensions/pi-subagents/docs/workflows.md +239 -163
  324. package/dist/extensions/pi-subagents/examples/typed-gate/.pi/agents/classifier.md +14 -0
  325. package/dist/extensions/pi-subagents/examples/typed-gate/README.md +42 -0
  326. package/dist/extensions/pi-subagents/examples/typed-gate/classify +38 -0
  327. package/dist/extensions/pi-subagents/examples/typed-gate/workflow.js +32 -0
  328. package/dist/extensions/pi-subagents/index.ts +11 -3
  329. package/dist/extensions/pi-subagents/inspector-runner.mjs +3 -3
  330. package/dist/extensions/pi-subagents/package-lock.json +517 -1129
  331. package/dist/extensions/pi-subagents/package.json +22 -11
  332. package/dist/extensions/pi-subagents/prompts/council.md +7 -4
  333. package/dist/extensions/pi-subagents/prompts/parallel-review.md +2 -2
  334. package/dist/extensions/pi-subagents/prompts/review-loop.md +2 -2
  335. package/dist/extensions/pi-subagents/runner-peer-loader.mjs +21 -0
  336. package/dist/extensions/pi-subagents/runner-peer-preload.mjs +30 -0
  337. package/dist/extensions/pi-subagents/scripts/build-package.mjs +79 -0
  338. package/dist/extensions/pi-subagents/skills/council-mode/SKILL.md +2 -2
  339. package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +46 -27
  340. package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +11 -7
  341. package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +78 -73
  342. package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +4 -5
  343. package/dist/extensions/pi-subagents/skills/pi-subagents/references/multi-lane-orchestration.md +10 -2
  344. package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +69 -67
  345. package/dist/extensions/pi-subagents/skills/pi-subagents/references/review-and-validation.md +3 -3
  346. package/dist/extensions/pi-subagents/src/agents/advertised-agent-prompt.ts +21 -10
  347. package/dist/extensions/pi-subagents/src/agents/agent-management.ts +113 -113
  348. package/dist/extensions/pi-subagents/src/agents/agent-memory.ts +91 -4
  349. package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +15 -9
  350. package/dist/extensions/pi-subagents/src/agents/agents.ts +432 -193
  351. package/dist/extensions/pi-subagents/src/agents/chain-serializer.ts +6 -1
  352. package/dist/extensions/pi-subagents/src/agents/global-npm-root.ts +58 -0
  353. package/dist/extensions/pi-subagents/src/agents/proactive-skills.ts +5 -2
  354. package/dist/extensions/pi-subagents/src/agents/runtime-agent-registry.ts +22 -18
  355. package/dist/extensions/pi-subagents/src/agents/skills.ts +43 -10
  356. package/dist/extensions/pi-subagents/src/api/delegation.ts +20 -1
  357. package/dist/extensions/pi-subagents/src/api/inspectors.ts +27 -0
  358. package/dist/extensions/pi-subagents/src/api/preflight.ts +140 -62
  359. package/dist/extensions/pi-subagents/src/api/required-child-extensions.ts +6 -0
  360. package/dist/extensions/pi-subagents/src/api/shared-types.ts +2 -0
  361. package/dist/extensions/pi-subagents/src/extension/config.ts +24 -40
  362. package/dist/extensions/pi-subagents/src/extension/control-notices.ts +4 -1
  363. package/dist/extensions/pi-subagents/src/extension/doctor.ts +18 -15
  364. package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +87 -13
  365. package/dist/extensions/pi-subagents/src/extension/herdr-pi-bridge.ts +162 -0
  366. package/dist/extensions/pi-subagents/src/extension/index.ts +331 -269
  367. package/dist/extensions/pi-subagents/src/extension/observability.ts +164 -0
  368. package/dist/extensions/pi-subagents/src/extension/public-execution.ts +76 -37
  369. package/dist/extensions/pi-subagents/src/extension/release-readiness.ts +367 -0
  370. package/dist/extensions/pi-subagents/src/extension/reply-workflow-script.ts +67 -0
  371. package/dist/extensions/pi-subagents/src/extension/rpc.ts +42 -12
  372. package/dist/extensions/pi-subagents/src/extension/schemas.ts +116 -205
  373. package/dist/extensions/pi-subagents/src/extension/subagent-guide.ts +13 -5
  374. package/dist/extensions/pi-subagents/src/extension/tool-activation.ts +146 -0
  375. package/dist/extensions/pi-subagents/src/extension/tool-description.ts +77 -90
  376. package/dist/extensions/pi-subagents/src/extension/upgrade-notice.ts +40 -0
  377. package/dist/extensions/pi-subagents/src/inspectors/actions.ts +148 -0
  378. package/dist/extensions/pi-subagents/src/inspectors/ghostty/actions.ts +74 -0
  379. package/dist/extensions/pi-subagents/src/inspectors/ghostty/plugin.ts +29 -0
  380. package/dist/extensions/pi-subagents/src/inspectors/herdr/actions.ts +100 -180
  381. package/dist/extensions/pi-subagents/src/inspectors/herdr/plugin.ts +20 -0
  382. package/dist/extensions/pi-subagents/src/inspectors/herdr/project-panes.ts +2 -2
  383. package/dist/extensions/pi-subagents/src/inspectors/{herdr/inspector-runner.ts → inspector-runner.ts} +13 -13
  384. package/dist/extensions/pi-subagents/src/inspectors/plugins.ts +75 -0
  385. package/dist/extensions/pi-subagents/src/inspectors/{herdr/session-roots-codec.ts → session-roots-codec.ts} +4 -15
  386. package/dist/extensions/pi-subagents/src/inspectors/{herdr/shell-command.ts → shell-command.ts} +1 -1
  387. package/dist/extensions/pi-subagents/src/inspectors/types.ts +51 -0
  388. package/dist/extensions/pi-subagents/src/integrations/herdr-status.ts +38 -53
  389. package/dist/extensions/pi-subagents/src/integrations/pi-web-session-liveness.ts +7 -1
  390. package/dist/extensions/pi-subagents/src/intercom/intercom-bridge.ts +53 -9
  391. package/dist/extensions/pi-subagents/src/intercom/native-supervisor-channel.ts +69 -55
  392. package/dist/extensions/pi-subagents/src/intercom/result-intercom.ts +7 -2
  393. package/dist/extensions/pi-subagents/src/missions/goal-driver.ts +45 -32
  394. package/dist/extensions/pi-subagents/src/missions/store.ts +11 -2
  395. package/dist/extensions/pi-subagents/src/missions/workflow-state.ts +1 -44
  396. package/dist/extensions/pi-subagents/src/policy/authority.ts +5 -1
  397. package/dist/extensions/pi-subagents/src/profiles/profiles.ts +30 -18
  398. package/dist/extensions/pi-subagents/src/runs/background/active-async-capacity.ts +59 -9
  399. package/dist/extensions/pi-subagents/src/runs/background/active-run-index.ts +18 -2
  400. package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +463 -248
  401. package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +112 -66
  402. package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +33 -20
  403. package/dist/extensions/pi-subagents/src/runs/background/async-retention.ts +47 -17
  404. package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +18 -5
  405. package/dist/extensions/pi-subagents/src/runs/background/auto-drain.ts +24 -11
  406. package/dist/extensions/pi-subagents/src/runs/background/await-async-run.ts +78 -0
  407. package/dist/extensions/pi-subagents/src/runs/background/binary-bootstrap.ts +66 -0
  408. package/dist/extensions/pi-subagents/src/runs/background/calendar-schedule.ts +90 -0
  409. package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +2 -2
  410. package/dist/extensions/pi-subagents/src/runs/background/chain-root-attachment.ts +19 -38
  411. package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +62 -3
  412. package/dist/extensions/pi-subagents/src/runs/background/fleet-view.ts +82 -10
  413. package/dist/extensions/pi-subagents/src/runs/background/notify.ts +272 -24
  414. package/dist/extensions/pi-subagents/src/runs/background/owned-process-tree.ts +30 -3
  415. package/dist/extensions/pi-subagents/src/runs/background/pid-namespace.ts +18 -0
  416. package/dist/extensions/pi-subagents/src/runs/background/process-terminal-candidate.ts +98 -0
  417. package/dist/extensions/pi-subagents/src/runs/background/process-terminal.ts +18 -97
  418. package/dist/extensions/pi-subagents/src/runs/background/result-delivery-ownership.ts +269 -7
  419. package/dist/extensions/pi-subagents/src/runs/background/result-files.ts +14 -5
  420. package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +77 -22
  421. package/dist/extensions/pi-subagents/src/runs/background/retained-children.ts +4 -3
  422. package/dist/extensions/pi-subagents/src/runs/background/retained-nested-route-tracker.ts +15 -3
  423. package/dist/extensions/pi-subagents/src/runs/background/run-child-session.ts +126 -45
  424. package/dist/extensions/pi-subagents/src/runs/background/run-id-resolver.ts +11 -6
  425. package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +18 -7
  426. package/dist/extensions/pi-subagents/src/runs/background/runner-aliases.ts +43 -51
  427. package/dist/extensions/pi-subagents/src/runs/background/runner-child-launch.ts +8 -1
  428. package/dist/extensions/pi-subagents/src/runs/background/runner-child-sessions.ts +5 -4
  429. package/dist/extensions/pi-subagents/src/runs/background/runner-http-dispatcher.ts +119 -0
  430. package/dist/extensions/pi-subagents/src/runs/background/runner-startup-failure.ts +56 -0
  431. package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +297 -69
  432. package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +67 -16
  433. package/dist/extensions/pi-subagents/src/runs/background/steering.ts +21 -3
  434. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner-bootstrap.ts +276 -0
  435. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +660 -578
  436. package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +177 -29
  437. package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +77 -28
  438. package/dist/extensions/pi-subagents/src/runs/background/wait-subscriptions.ts +10 -4
  439. package/dist/extensions/pi-subagents/src/runs/background/wait-tool.ts +7 -13
  440. package/dist/extensions/pi-subagents/src/runs/background/workflow-terminal-proof.ts +41 -23
  441. package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +19 -8
  442. package/dist/extensions/pi-subagents/src/runs/foreground/async-stop-action.ts +130 -7
  443. package/dist/extensions/pi-subagents/src/runs/foreground/command-action.ts +41 -0
  444. package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +267 -385
  445. package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +4 -2
  446. package/dist/extensions/pi-subagents/src/runs/foreground/prompt-audit.ts +6 -10
  447. package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +1158 -413
  448. package/dist/extensions/pi-subagents/src/runs/foreground/workflow-detach-reconcile.ts +3 -1
  449. package/dist/extensions/pi-subagents/src/runs/foreground/workflow-foreground-steering.ts +2 -1
  450. package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +200 -74
  451. package/dist/extensions/pi-subagents/src/runs/shared/async-status-projection.ts +133 -34
  452. package/dist/extensions/pi-subagents/src/runs/shared/capability-ceiling.ts +6 -1
  453. package/dist/extensions/pi-subagents/src/runs/shared/child-commands.ts +228 -0
  454. package/dist/extensions/pi-subagents/src/runs/shared/child-hooks.ts +18 -18
  455. package/dist/extensions/pi-subagents/src/runs/shared/child-launch-plan.ts +16 -4
  456. package/dist/extensions/pi-subagents/src/runs/shared/child-launch.ts +55 -12
  457. package/dist/extensions/pi-subagents/src/runs/shared/child-lifecycle.ts +6 -3
  458. package/dist/extensions/pi-subagents/src/runs/shared/child-runtime-config.ts +11 -1
  459. package/dist/extensions/pi-subagents/src/runs/shared/child-session.ts +367 -74
  460. package/dist/extensions/pi-subagents/src/runs/shared/child-tool-plan.ts +50 -86
  461. package/dist/extensions/pi-subagents/src/runs/shared/claude-code-adapter.ts +288 -0
  462. package/dist/extensions/pi-subagents/src/runs/shared/codex-exec-adapter.ts +129 -0
  463. package/dist/extensions/pi-subagents/src/runs/shared/cursor-agent-adapter.ts +114 -0
  464. package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +5 -5
  465. package/dist/extensions/pi-subagents/src/runs/shared/effective-system-prompt.ts +33 -0
  466. package/dist/extensions/pi-subagents/src/runs/shared/external-cli-contract.ts +49 -10
  467. package/dist/extensions/pi-subagents/src/runs/shared/external-cli-preflight.ts +61 -9
  468. package/dist/extensions/pi-subagents/src/runs/shared/external-cli-runner.ts +16 -9
  469. package/dist/extensions/pi-subagents/src/runs/shared/external-job-bridge.ts +55 -1
  470. package/dist/extensions/pi-subagents/src/runs/shared/git-environment.ts +1 -1
  471. package/dist/extensions/pi-subagents/src/runs/shared/herdr-connection.ts +134 -0
  472. package/dist/extensions/pi-subagents/src/runs/shared/herdr-external-adapters.ts +169 -0
  473. package/dist/extensions/pi-subagents/src/runs/shared/herdr-machine.ts +279 -0
  474. package/dist/extensions/pi-subagents/src/runs/shared/herdr-pi-protocol.ts +59 -0
  475. package/dist/extensions/pi-subagents/src/runs/shared/herdr-placed-run.ts +263 -0
  476. package/dist/extensions/pi-subagents/src/runs/shared/mcp-config-sources.ts +6 -2
  477. package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +108 -13
  478. package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-grant.ts +23 -7
  479. package/dist/extensions/pi-subagents/src/runs/shared/model-resolution-diagnostic.ts +76 -0
  480. package/dist/extensions/pi-subagents/src/runs/shared/{model-fallback.ts → model-resolution.ts} +65 -245
  481. package/dist/extensions/pi-subagents/src/runs/shared/model-scope.ts +30 -11
  482. package/dist/extensions/pi-subagents/src/runs/shared/nested-events.ts +24 -3
  483. package/dist/extensions/pi-subagents/src/runs/shared/orca-progress-tabs.ts +5 -4
  484. package/dist/extensions/pi-subagents/src/runs/shared/parallel-handoff.ts +55 -7
  485. package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +14 -4
  486. package/dist/extensions/pi-subagents/src/runs/shared/partial-output.ts +48 -0
  487. package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +12 -4
  488. package/dist/extensions/pi-subagents/src/runs/shared/run-history.ts +88 -1
  489. package/dist/extensions/pi-subagents/src/runs/shared/single-output.ts +12 -3
  490. package/dist/extensions/pi-subagents/src/runs/shared/structured-output.ts +160 -9
  491. package/dist/extensions/pi-subagents/src/runs/shared/subagent-control.ts +49 -35
  492. package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +58 -19
  493. package/dist/extensions/pi-subagents/src/runs/shared/tool-availability.ts +2 -2
  494. package/dist/extensions/pi-subagents/src/runs/shared/tool-budget.ts +21 -0
  495. package/dist/extensions/pi-subagents/src/runs/shared/usage-reconciliation.ts +73 -0
  496. package/dist/extensions/pi-subagents/src/runs/shared/workflow-async-child-guidance.ts +18 -0
  497. package/dist/extensions/pi-subagents/src/runs/shared/worktree-cleanup-apply.ts +160 -0
  498. package/dist/extensions/pi-subagents/src/runs/shared/worktree-cleanup-plan.ts +42 -20
  499. package/dist/extensions/pi-subagents/src/runs/shared/worktree-lock.ts +29 -0
  500. package/dist/extensions/pi-subagents/src/runs/shared/worktree-setup-command.ts +27 -4
  501. package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +94 -26
  502. package/dist/extensions/pi-subagents/src/shared/child-cache-retention.ts +43 -0
  503. package/dist/extensions/pi-subagents/src/shared/child-session-name.ts +5 -3
  504. package/dist/extensions/pi-subagents/src/shared/disabled-features.ts +123 -0
  505. package/dist/extensions/pi-subagents/src/shared/extension-context.ts +14 -1
  506. package/dist/extensions/pi-subagents/src/shared/file-lease.ts +74 -0
  507. package/dist/extensions/pi-subagents/src/shared/fork-context.ts +27 -77
  508. package/dist/extensions/pi-subagents/src/shared/launch-contract.ts +70 -10
  509. package/dist/extensions/pi-subagents/src/shared/model-info.ts +10 -1
  510. package/dist/extensions/pi-subagents/src/shared/opencode-session-headers.ts +30 -0
  511. package/dist/extensions/pi-subagents/src/shared/owner-record.ts +107 -0
  512. package/dist/extensions/pi-subagents/src/shared/package-version.ts +17 -0
  513. package/dist/extensions/pi-subagents/src/shared/parent-wake.ts +66 -0
  514. package/dist/extensions/pi-subagents/src/shared/process-identity.ts +87 -0
  515. package/dist/extensions/pi-subagents/src/shared/pruned-fork.ts +71 -58
  516. package/dist/extensions/pi-subagents/src/shared/required-child-extensions.ts +115 -0
  517. package/dist/extensions/pi-subagents/src/shared/settings-file-lease.ts +36 -0
  518. package/dist/extensions/pi-subagents/src/shared/settings.ts +7 -4
  519. package/dist/extensions/pi-subagents/src/shared/shortcuts.ts +1 -5
  520. package/dist/extensions/pi-subagents/src/shared/types.ts +155 -48
  521. package/dist/extensions/pi-subagents/src/slash/delegation-adapters.ts +28 -2
  522. package/dist/extensions/pi-subagents/src/slash/delegation-request.ts +15 -1
  523. package/dist/extensions/pi-subagents/src/slash/prompt-template-bridge.ts +19 -4
  524. package/dist/extensions/pi-subagents/src/slash/prompt-workflows.ts +13 -2
  525. package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +15 -15
  526. package/dist/extensions/pi-subagents/src/slash/subagent-cost.ts +46 -9
  527. package/dist/extensions/pi-subagents/src/slash/subagents-admin.ts +29 -16
  528. package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +201 -26
  529. package/dist/extensions/pi-subagents/src/tui/fleet.ts +33 -16
  530. package/dist/extensions/pi-subagents/src/tui/render.ts +334 -103
  531. package/dist/extensions/pi-subagents/src/tui/running-tone.ts +28 -0
  532. package/dist/extensions/pi-subagents/src/watchdog/child-status.ts +27 -28
  533. package/dist/extensions/pi-subagents/src/watchdog/diff-tool.ts +47 -12
  534. package/dist/extensions/pi-subagents/src/watchdog/lsp-diagnostics.ts +2 -2
  535. package/dist/extensions/pi-subagents/src/watchdog/model-selection.ts +22 -2
  536. package/dist/extensions/pi-subagents/src/watchdog/permission-arbiter.ts +17 -17
  537. package/dist/extensions/pi-subagents/src/watchdog/register-child.ts +24 -8
  538. package/dist/extensions/pi-subagents/src/watchdog/register-main.ts +43 -39
  539. package/dist/extensions/pi-subagents/src/watchdog/render.ts +2 -2
  540. package/dist/extensions/pi-subagents/src/watchdog/review.ts +127 -78
  541. package/dist/extensions/pi-subagents/src/watchdog/rules.ts +1 -1
  542. package/dist/extensions/pi-subagents/src/watchdog/runtime.ts +107 -31
  543. package/dist/extensions/pi-subagents/src/watchdog/scope.ts +1 -1
  544. package/dist/extensions/pi-subagents/src/watchdog/settings.ts +22 -14
  545. package/dist/extensions/pi-subagents/src/watchdog/tool-actions.ts +14 -13
  546. package/dist/extensions/pi-subagents/src/watchdog/turn-delta.ts +35 -6
  547. package/dist/extensions/pi-subagents/src/watchdog/types.ts +6 -4
  548. package/dist/extensions/pi-subagents/src/watchdog/warning-format.ts +2 -2
  549. package/dist/extensions/pi-subagents/src/workflows/chat-progress.ts +3 -3
  550. package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +500 -65
  551. package/dist/extensions/pi-subagents/src/workflows/structured-workflow-scripts.ts +177 -0
  552. package/dist/extensions/pi-subagents/src/workflows/workflow-checklist.ts +8 -2
  553. package/dist/extensions/pi-subagents/src/workflows/workflow-child-summary.ts +5 -3
  554. package/dist/extensions/pi-subagents/src/workflows/workflow-receipt.ts +70 -10
  555. package/dist/extensions/pi-subagents/src/workflows/workflow-resources.ts +57 -18
  556. package/dist/extensions/pi-subagents/src/workflows/workflow-reuse.ts +120 -0
  557. package/dist/extensions/pi-subagents/src/workflows/workflow-revival.ts +123 -0
  558. package/dist/extensions/pi-subagents/src/workflows/workflow-settlement.ts +5 -2
  559. package/dist/extensions/pi-subagents/test/fixtures/cwd-workflow-child.ts +37 -0
  560. package/dist/extensions/pi-subagents/test/fixtures/herdr-allocation-lock-child.ts +16 -0
  561. package/dist/extensions/pi-subagents/test/fixtures/herdr-provision-child.ts +15 -0
  562. package/dist/extensions/pi-subagents/test/fixtures/native-nested-wait-provider.ts +76 -0
  563. package/dist/extensions/pi-subagents/test/fixtures/runner-bootstrap-harness.ts +36 -0
  564. package/dist/extensions/pi-subagents/test/fixtures/schedule-history-writer.mjs +48 -0
  565. package/dist/extensions/pi-subagents/test/fixtures/settings-race-writer.mjs +57 -0
  566. package/dist/extensions/pi-subagents/test/fixtures/workflow-cwd-access-failure.ts +33 -0
  567. package/dist/extensions/pi-subagents/test/integration/acceptance-file-report.test.ts +40 -7
  568. package/dist/extensions/pi-subagents/test/integration/async-attention-clearing.test.ts +192 -0
  569. package/dist/extensions/pi-subagents/test/integration/async-execution.part-1.test.ts +435 -276
  570. package/dist/extensions/pi-subagents/test/integration/async-execution.part-2.test.ts +435 -397
  571. package/dist/extensions/pi-subagents/test/integration/async-execution.part-3.test.ts +918 -497
  572. package/dist/extensions/pi-subagents/test/integration/async-execution.part-4.test.ts +264 -17
  573. package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +185 -22
  574. package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +3 -2
  575. package/dist/extensions/pi-subagents/test/integration/claude-code-dispatch.test.ts +127 -0
  576. package/dist/extensions/pi-subagents/test/integration/deadline-checkpoint.test.ts +126 -0
  577. package/dist/extensions/pi-subagents/test/integration/doctor-executor.test.ts +29 -1
  578. package/dist/extensions/pi-subagents/test/integration/error-handling.test.ts +88 -0
  579. package/dist/extensions/pi-subagents/test/integration/external-cli-runner.test.ts +450 -13
  580. package/dist/extensions/pi-subagents/test/integration/foreign-workflow-steering.test.ts +10 -6
  581. package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +105 -86
  582. package/dist/extensions/pi-subagents/test/integration/in-process-child.test.ts +403 -18
  583. package/dist/extensions/pi-subagents/test/integration/inline-workflow-visibility.test.ts +351 -0
  584. package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +195 -10
  585. package/dist/extensions/pi-subagents/test/integration/model-resolution-diagnostic.test.ts +108 -0
  586. package/dist/extensions/pi-subagents/test/integration/nested-async-wait.test.ts +61 -0
  587. package/dist/extensions/pi-subagents/test/integration/orca-progress-tabs.test.ts +5 -4
  588. package/dist/extensions/pi-subagents/test/integration/recovered-assistant-error.test.ts +1 -1
  589. package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +6 -4
  590. package/dist/extensions/pi-subagents/test/integration/render-widget-mouse.test.ts +84 -0
  591. package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +242 -16
  592. package/dist/extensions/pi-subagents/test/integration/result-publication.test.ts +2 -2
  593. package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +221 -4
  594. package/dist/extensions/pi-subagents/test/integration/single-execution.part-1.test.ts +1435 -248
  595. package/dist/extensions/pi-subagents/test/integration/single-execution.part-2.test.ts +454 -515
  596. package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +140 -21
  597. package/dist/extensions/pi-subagents/test/integration/stop-all-background.test.ts +142 -0
  598. package/dist/extensions/pi-subagents/test/integration/structured-workflows.test.ts +105 -0
  599. package/dist/extensions/pi-subagents/test/integration/workflow-result-publication.test.ts +90 -11
  600. package/dist/extensions/pi-subagents/test/integration/workflow-steer-inbox.test.ts +18 -15
  601. package/dist/extensions/pi-subagents/test/integration/workflow-worktree-admission.test.ts +100 -0
  602. package/dist/extensions/pi-subagents/test/smoke/clean-install.mjs +106 -0
  603. package/dist/extensions/pi-subagents/test/smoke/npm-background.mjs +43 -0
  604. package/dist/extensions/pi-subagents/test/smoke/packed-runner-selection.mjs +42 -0
  605. package/dist/extensions/pi-subagents/test/smoke/runner-loader-capability.mjs +50 -0
  606. package/dist/extensions/pi-subagents/test/smoke/sdk-child.ts +57 -0
  607. package/dist/extensions/pi-subagents/test/smoke/{pi085-extension.ts → sdk-extension.ts} +2 -2
  608. package/dist/extensions/pi-subagents/test/smoke/standalone-background.mjs +140 -0
  609. package/dist/extensions/pi-subagents/test/smoke/standalone-fault.ts +43 -0
  610. package/dist/extensions/pi-subagents/test/smoke/standalone-matrix.mjs +65 -0
  611. package/dist/extensions/pi-subagents/test/smoke/standalone-observer.ts +8 -0
  612. package/dist/extensions/pi-subagents/test/smoke/standalone-parent.ts +220 -0
  613. package/dist/extensions/pi-subagents/test/smoke/standalone-provider.ts +58 -0
  614. package/dist/extensions/pi-subagents/test/smoke/standalone-release.json +8 -0
  615. package/dist/extensions/pi-subagents/test/smoke/standalone-revival.ts +109 -0
  616. package/dist/extensions/pi-subagents/test/smoke/standalone-shared.ts +79 -0
  617. package/dist/extensions/pi-subagents/test/smoke/tool-activation.test.ts +128 -0
  618. package/dist/extensions/pi-subagents/test/support/async-execution-fixture.ts +6 -25
  619. package/dist/extensions/pi-subagents/test/support/async-result-timeout-evidence.ts +61 -0
  620. package/dist/extensions/pi-subagents/test/support/fake-child-session.ts +130 -9
  621. package/dist/extensions/pi-subagents/test/support/foreign-workflow-steer-host.mjs +15 -7
  622. package/dist/extensions/pi-subagents/test/support/helpers.ts +11 -14
  623. package/dist/extensions/pi-subagents/test/support/isolated-temp-root.mjs +21 -3
  624. package/dist/extensions/pi-subagents/test/support/native-peer-loader.mjs +15 -0
  625. package/dist/extensions/pi-subagents/test/support/node-command.ts +29 -6
  626. package/dist/extensions/pi-subagents/test/support/notify-diagnostics-fixture.ts +5 -3
  627. package/dist/extensions/pi-subagents/test/support/single-execution-fixture.ts +7 -15
  628. package/dist/extensions/pi-subagents/test/support/watchdog-stable-host-loader.mjs +23 -0
  629. package/dist/extensions/pi-subagents/test/unit/acceptance-compaction.test.ts +3 -3
  630. package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +158 -155
  631. package/dist/extensions/pi-subagents/test/unit/active-async-capacity.test.ts +52 -1
  632. package/dist/extensions/pi-subagents/test/unit/advertised-agent-prompt.test.ts +21 -17
  633. package/dist/extensions/pi-subagents/test/unit/advertised-agent-refresh.test.ts +105 -36
  634. package/dist/extensions/pi-subagents/test/unit/advertisement-barrier.test.ts +151 -0
  635. package/dist/extensions/pi-subagents/test/unit/agent-disabled.test.ts +1 -2
  636. package/dist/extensions/pi-subagents/test/unit/agent-eject-disable.test.ts +33 -3
  637. package/dist/extensions/pi-subagents/test/unit/agent-end-auto-drain.test.ts +149 -0
  638. package/dist/extensions/pi-subagents/test/unit/agent-exclude-dirs.test.ts +246 -0
  639. package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +62 -87
  640. package/dist/extensions/pi-subagents/test/unit/agent-global-root-override.test.ts +86 -0
  641. package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +398 -48
  642. package/dist/extensions/pi-subagents/test/unit/agent-memory.test.ts +126 -1
  643. package/dist/extensions/pi-subagents/test/unit/agent-name-resolution.test.ts +75 -0
  644. package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +94 -42
  645. package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +73 -3
  646. package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +428 -2
  647. package/dist/extensions/pi-subagents/test/unit/async-permission-session.test.ts +4 -4
  648. package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +112 -1
  649. package/dist/extensions/pi-subagents/test/unit/async-result-timeout-evidence.test.ts +53 -0
  650. package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +92 -4
  651. package/dist/extensions/pi-subagents/test/unit/async-retention.test.ts +58 -6
  652. package/dist/extensions/pi-subagents/test/unit/async-run-history.test.ts +123 -0
  653. package/dist/extensions/pi-subagents/test/unit/async-spawn-package-dir.test.ts +203 -0
  654. package/dist/extensions/pi-subagents/test/unit/async-spawn-preload.test.ts +26 -35
  655. package/dist/extensions/pi-subagents/test/unit/async-status-projection.test.ts +185 -0
  656. package/dist/extensions/pi-subagents/test/unit/authority-policy.test.ts +9 -1
  657. package/dist/extensions/pi-subagents/test/unit/auto-drain.test.ts +106 -1
  658. package/dist/extensions/pi-subagents/test/unit/await-async-run.test.ts +202 -0
  659. package/dist/extensions/pi-subagents/test/unit/binary-async-spawn.test.ts +115 -0
  660. package/dist/extensions/pi-subagents/test/unit/binary-pi-spawn.test.ts +27 -0
  661. package/dist/extensions/pi-subagents/test/unit/calendar-schedule.test.ts +70 -0
  662. package/dist/extensions/pi-subagents/test/unit/capability-ceiling-agent-allowlist.test.ts +38 -0
  663. package/dist/extensions/pi-subagents/test/unit/chain-root-attachment.test.ts +10 -2
  664. package/dist/extensions/pi-subagents/test/unit/changelog-format.test.ts +11 -0
  665. package/dist/extensions/pi-subagents/test/unit/child-cache-retention.test.ts +87 -0
  666. package/dist/extensions/pi-subagents/test/unit/child-commands.test.ts +243 -0
  667. package/dist/extensions/pi-subagents/test/unit/child-external-job-bridge.test.ts +126 -0
  668. package/dist/extensions/pi-subagents/test/unit/child-launch-plan.test.ts +12 -1
  669. package/dist/extensions/pi-subagents/test/unit/child-lifecycle.test.ts +36 -0
  670. package/dist/extensions/pi-subagents/test/unit/child-runtime-config.test.ts +24 -0
  671. package/dist/extensions/pi-subagents/test/unit/child-session-commands.test.ts +162 -0
  672. package/dist/extensions/pi-subagents/test/unit/child-session-host-sdk.test.ts +226 -0
  673. package/dist/extensions/pi-subagents/test/unit/child-session-parent-providers.test.ts +200 -0
  674. package/dist/extensions/pi-subagents/test/unit/child-session-queued.test.ts +260 -0
  675. package/dist/extensions/pi-subagents/test/unit/child-tool-plan-permission-system.test.ts +3 -98
  676. package/dist/extensions/pi-subagents/test/unit/child-tool-plan.test.ts +222 -1
  677. package/dist/extensions/pi-subagents/test/unit/claude-code-adapter.test.ts +314 -0
  678. package/dist/extensions/pi-subagents/test/unit/claude-code-dispatch.test.ts +182 -0
  679. package/dist/extensions/pi-subagents/test/unit/codex-exec-adapter.test.ts +157 -0
  680. package/dist/extensions/pi-subagents/test/unit/command-action.test.ts +50 -0
  681. package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +25 -11
  682. package/dist/extensions/pi-subagents/test/unit/completion-replay.test.ts +3 -1
  683. package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +18 -0
  684. package/dist/extensions/pi-subagents/test/unit/control-notices.test.ts +7 -1
  685. package/dist/extensions/pi-subagents/test/unit/cursor-agent-adapter.test.ts +220 -0
  686. package/dist/extensions/pi-subagents/test/unit/default-extensions.test.ts +104 -32
  687. package/dist/extensions/pi-subagents/test/unit/delegation-api.test.ts +138 -1
  688. package/dist/extensions/pi-subagents/test/unit/disabled-features.test.ts +227 -0
  689. package/dist/extensions/pi-subagents/test/unit/doctor.test.ts +48 -9
  690. package/dist/extensions/pi-subagents/test/unit/dynamic-fanout.test.ts +7 -4
  691. package/dist/extensions/pi-subagents/test/unit/extension-lazy-loading.test.ts +21 -0
  692. package/dist/extensions/pi-subagents/test/unit/extension-maintenance-lifecycle.test.ts +66 -0
  693. package/dist/extensions/pi-subagents/test/unit/extension-module-preload.test.ts +49 -0
  694. package/dist/extensions/pi-subagents/test/unit/external-cli-runner.test.ts +104 -3
  695. package/dist/extensions/pi-subagents/test/unit/file-lease.test.ts +17 -0
  696. package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +316 -0
  697. package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +58 -7
  698. package/dist/extensions/pi-subagents/test/unit/fork-context.test.ts +25 -96
  699. package/dist/extensions/pi-subagents/test/unit/ghostty-inspector.test.ts +92 -0
  700. package/dist/extensions/pi-subagents/test/unit/global-npm-root.test.ts +108 -0
  701. package/dist/extensions/pi-subagents/test/unit/herdr-connection.test.ts +43 -0
  702. package/dist/extensions/pi-subagents/test/unit/herdr-external-adapters.test.ts +89 -0
  703. package/dist/extensions/pi-subagents/test/unit/herdr-inspector-bootstrap.test.ts +11 -20
  704. package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +113 -19
  705. package/dist/extensions/pi-subagents/test/unit/herdr-machine.test.ts +161 -0
  706. package/dist/extensions/pi-subagents/test/unit/herdr-native-placement.test.ts +187 -0
  707. package/dist/extensions/pi-subagents/test/unit/herdr-session-roots-codec.test.ts +7 -12
  708. package/dist/extensions/pi-subagents/test/unit/herdr-shell-command.test.ts +2 -2
  709. package/dist/extensions/pi-subagents/test/unit/herdr-status-bridge.test.ts +182 -87
  710. package/dist/extensions/pi-subagents/test/unit/host-peer-runtime-imports.test.ts +68 -49
  711. package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +295 -135
  712. package/dist/extensions/pi-subagents/test/unit/inspect-rpc.test.ts +3 -3
  713. package/dist/extensions/pi-subagents/test/unit/inspector-authority-policy.test.ts +144 -0
  714. package/dist/extensions/pi-subagents/test/unit/inspector-registration.test.ts +128 -0
  715. package/dist/extensions/pi-subagents/test/unit/intercom-bridge.test.ts +49 -1
  716. package/dist/extensions/pi-subagents/test/unit/mcp-direct-tool-grant.test.ts +74 -1
  717. package/dist/extensions/pi-subagents/test/unit/mcp-direct-tool-resolution.test.ts +112 -0
  718. package/dist/extensions/pi-subagents/test/unit/mission-global-projection.test.ts +215 -0
  719. package/dist/extensions/pi-subagents/test/unit/mission-goal-driver.test.ts +65 -1
  720. package/dist/extensions/pi-subagents/test/unit/mission-store.test.ts +2 -1
  721. package/dist/extensions/pi-subagents/test/unit/model-resolution-diagnostic.test.ts +78 -0
  722. package/dist/extensions/pi-subagents/test/unit/model-resolution.test.ts +153 -0
  723. package/dist/extensions/pi-subagents/test/unit/model-scope.test.ts +43 -1
  724. package/dist/extensions/pi-subagents/test/unit/mutation-evidence.test.ts +1 -21
  725. package/dist/extensions/pi-subagents/test/unit/native-supervisor-channel.test.ts +279 -2
  726. package/dist/extensions/pi-subagents/test/unit/nested-control-fanout.test.ts +73 -0
  727. package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +297 -3
  728. package/dist/extensions/pi-subagents/test/unit/notify-diagnostics.test.ts +1 -1
  729. package/dist/extensions/pi-subagents/test/unit/notify.test.ts +431 -23
  730. package/dist/extensions/pi-subagents/test/unit/observability.test.ts +198 -0
  731. package/dist/extensions/pi-subagents/test/unit/opencode-session-headers.test.ts +32 -0
  732. package/dist/extensions/pi-subagents/test/unit/orca-progress-tabs.test.ts +89 -21
  733. package/dist/extensions/pi-subagents/test/unit/owned-process-tree.test.ts +31 -1
  734. package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +18 -24
  735. package/dist/extensions/pi-subagents/test/unit/parent-wake.test.ts +206 -0
  736. package/dist/extensions/pi-subagents/test/unit/partial-output.test.ts +53 -0
  737. package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +216 -32
  738. package/dist/extensions/pi-subagents/test/unit/pi-spawn-host-root.test.ts +82 -0
  739. package/dist/extensions/pi-subagents/test/unit/pi-subagents-policy-guidance.test.ts +28 -0
  740. package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +193 -104
  741. package/dist/extensions/pi-subagents/test/unit/proactive-skills.test.ts +16 -1
  742. package/dist/extensions/pi-subagents/test/unit/process-identity.test.ts +75 -0
  743. package/dist/extensions/pi-subagents/test/unit/process-terminal.test.ts +17 -1
  744. package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +89 -9
  745. package/dist/extensions/pi-subagents/test/unit/prompt-audit-optional-peers.test.ts +6 -0
  746. package/dist/extensions/pi-subagents/test/unit/prompt-audit-provider-routing.test.ts +69 -0
  747. package/dist/extensions/pi-subagents/test/unit/prompt-template-bridge.test.ts +2 -2
  748. package/dist/extensions/pi-subagents/test/unit/prompt-workflows.test.ts +23 -1
  749. package/dist/extensions/pi-subagents/test/unit/pruned-fork.test.ts +117 -3
  750. package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +35 -14
  751. package/dist/extensions/pi-subagents/test/unit/readonly-drain-observation.test.ts +3 -2
  752. package/dist/extensions/pi-subagents/test/unit/release-readiness.test.ts +715 -0
  753. package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +261 -9
  754. package/dist/extensions/pi-subagents/test/unit/reply-workflow-script.test.ts +37 -0
  755. package/dist/extensions/pi-subagents/test/unit/required-child-extensions.test.ts +114 -0
  756. package/dist/extensions/pi-subagents/test/unit/result-intercom.test.ts +11 -1
  757. package/dist/extensions/pi-subagents/test/unit/result-takeover.test.ts +332 -0
  758. package/dist/extensions/pi-subagents/test/unit/retained-children.test.ts +22 -2
  759. package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +125 -18
  760. package/dist/extensions/pi-subagents/test/unit/run-child-session.test.ts +230 -0
  761. package/dist/extensions/pi-subagents/test/unit/run-id-resolver.test.ts +50 -1
  762. package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +301 -4
  763. package/dist/extensions/pi-subagents/test/unit/runner-bootstrap.test.ts +182 -0
  764. package/dist/extensions/pi-subagents/test/unit/runner-http-dispatcher.test.ts +136 -0
  765. package/dist/extensions/pi-subagents/test/unit/runner-peer-loader.test.ts +68 -0
  766. package/dist/extensions/pi-subagents/test/unit/runner-peer-symlinks.test.ts +50 -0
  767. package/dist/extensions/pi-subagents/test/unit/running-tone.test.ts +13 -0
  768. package/dist/extensions/pi-subagents/test/unit/runtime-agent-registration.test.ts +155 -4
  769. package/dist/extensions/pi-subagents/test/unit/schedule-claim-initialization.test.ts +71 -0
  770. package/dist/extensions/pi-subagents/test/unit/schedule-claim-preservation.test.ts +98 -0
  771. package/dist/extensions/pi-subagents/test/unit/schedule-history-transactions.test.ts +201 -0
  772. package/dist/extensions/pi-subagents/test/unit/scheduled-mission.test.ts +317 -0
  773. package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +412 -11
  774. package/dist/extensions/pi-subagents/test/unit/scheduled-store-root.test.ts +2 -8
  775. package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +70 -71
  776. package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +748 -5
  777. package/dist/extensions/pi-subagents/test/unit/session-liveness-delivery.test.ts +337 -0
  778. package/dist/extensions/pi-subagents/test/unit/settings-atomic-save.test.ts +419 -0
  779. package/dist/extensions/pi-subagents/test/unit/settings-transactions.test.ts +88 -0
  780. package/dist/extensions/pi-subagents/test/unit/single-output.test.ts +13 -1
  781. package/dist/extensions/pi-subagents/test/unit/skills-disable-model-invocation.test.ts +164 -0
  782. package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +35 -2
  783. package/dist/extensions/pi-subagents/test/unit/slash-bridge.test.ts +2 -2
  784. package/dist/extensions/pi-subagents/test/unit/stale-run-reconciler.test.ts +334 -9
  785. package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +170 -0
  786. package/dist/extensions/pi-subagents/test/unit/steering.test.ts +34 -5
  787. package/dist/extensions/pi-subagents/test/unit/structured-output-validation.test.ts +199 -0
  788. package/dist/extensions/pi-subagents/test/unit/structured-workflow-resources.test.ts +241 -0
  789. package/dist/extensions/pi-subagents/test/unit/subagent-control.test.ts +47 -38
  790. package/dist/extensions/pi-subagents/test/unit/subagent-cost.test.ts +97 -0
  791. package/dist/extensions/pi-subagents/test/unit/subagent-guide.test.ts +10 -0
  792. package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +343 -44
  793. package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +410 -11
  794. package/dist/extensions/pi-subagents/test/unit/supervisor-ask-registration.test.ts +459 -22
  795. package/dist/extensions/pi-subagents/test/unit/temp-paths.test.ts +43 -3
  796. package/dist/extensions/pi-subagents/test/unit/timeout-defaults.test.ts +11 -1
  797. package/dist/extensions/pi-subagents/test/unit/tool-activation-stale-peer.test.ts +32 -0
  798. package/dist/extensions/pi-subagents/test/unit/tool-activation.test.ts +313 -0
  799. package/dist/extensions/pi-subagents/test/unit/tool-budget.test.ts +14 -0
  800. package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +76 -89
  801. package/dist/extensions/pi-subagents/test/unit/typed-gate-output.test.ts +141 -0
  802. package/dist/extensions/pi-subagents/test/unit/upgrade-notice.test.ts +31 -0
  803. package/dist/extensions/pi-subagents/test/unit/usage-reconciliation-owners.test.ts +66 -0
  804. package/dist/extensions/pi-subagents/test/unit/usage-reconciliation.test.ts +23 -0
  805. package/dist/extensions/pi-subagents/test/unit/wait-completions.test.ts +195 -1
  806. package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +3 -1
  807. package/dist/extensions/pi-subagents/test/unit/watchdog-child-status.test.ts +48 -45
  808. package/dist/extensions/pi-subagents/test/unit/watchdog-compaction-scope.test.ts +94 -0
  809. package/dist/extensions/pi-subagents/test/unit/watchdog-diff-tool.test.ts +48 -3
  810. package/dist/extensions/pi-subagents/test/unit/watchdog-native-scheduling.test.ts +107 -0
  811. package/dist/extensions/pi-subagents/test/unit/watchdog-permission-arbiter.test.ts +95 -7
  812. package/dist/extensions/pi-subagents/test/unit/watchdog-register-child.test.ts +79 -0
  813. package/dist/extensions/pi-subagents/test/unit/watchdog-render.test.ts +7 -4
  814. package/dist/extensions/pi-subagents/test/unit/watchdog-review.test.ts +111 -24
  815. package/dist/extensions/pi-subagents/test/unit/watchdog-rules.test.ts +1 -1
  816. package/dist/extensions/pi-subagents/test/unit/watchdog-runtime.test.ts +283 -2
  817. package/dist/extensions/pi-subagents/test/unit/watchdog-scope.test.ts +3 -0
  818. package/dist/extensions/pi-subagents/test/unit/watchdog-settings.test.ts +12 -1
  819. package/dist/extensions/pi-subagents/test/unit/watchdog-stable-host-layout.test.ts +23 -0
  820. package/dist/extensions/pi-subagents/test/unit/watchdog-tool-actions.test.ts +30 -0
  821. package/dist/extensions/pi-subagents/test/unit/watchdog-turn-delta.test.ts +39 -2
  822. package/dist/extensions/pi-subagents/test/unit/widget-nested-render.test.ts +18 -1
  823. package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +8 -4
  824. package/dist/extensions/pi-subagents/test/unit/workflow-child-summary.test.ts +10 -0
  825. package/dist/extensions/pi-subagents/test/unit/workflow-detach-reconcile.test.ts +6 -3
  826. package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +44 -1
  827. package/dist/extensions/pi-subagents/test/unit/workflow-receipt.test.ts +28 -1
  828. package/dist/extensions/pi-subagents/test/unit/workflow-revival.test.ts +85 -0
  829. package/dist/extensions/pi-subagents/test/unit/workflow-scripts-feature.test.ts +177 -0
  830. package/dist/extensions/pi-subagents/test/unit/workflow-terminal-proof.test.ts +8 -0
  831. package/dist/extensions/pi-subagents/test/unit/workflow-worktree-admission.test.ts +29 -0
  832. package/dist/extensions/pi-subagents/test/unit/worktree-cleanup-plan.test.ts +343 -4
  833. package/dist/extensions/pi-subagents/test/unit/worktree-lock.test.ts +123 -0
  834. package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +252 -22
  835. package/dist/extensions/pi-subagents/tsconfig.build.json +13 -0
  836. package/dist/extensions/pi-tool-display/tests/custom-tool-overrides.test.ts +1 -1
  837. package/dist/extensions/pi-tool-display/tests/tool-overrides-config.test.ts +1 -1
  838. package/dist/extensions/pi-tool-display/tests/tool-overrides-mcp.test.ts +24 -1
  839. package/dist/extensions/pi-tool-display/tests/tool-overrides-registration.test.ts +6 -2
  840. package/dist/extensions/pi-web-agent/src/extension.ts +1 -5
  841. package/dist/extensions/pi-zentui/.github/workflows/ci.yml +67 -4
  842. package/dist/extensions/pi-zentui/AGENTS.md +3 -2
  843. package/dist/extensions/pi-zentui/README.md +60 -32
  844. package/dist/extensions/pi-zentui/docs/configuration.md +662 -51
  845. package/dist/extensions/pi-zentui/docs/footer-format.md +174 -5
  846. package/dist/extensions/pi-zentui/extensions/zentui/accent-rail-editor.ts +15 -4
  847. package/dist/extensions/pi-zentui/extensions/zentui/average-token-rate.ts +146 -0
  848. package/dist/extensions/pi-zentui/extensions/zentui/codex-quota-display.ts +34 -0
  849. package/dist/extensions/pi-zentui/extensions/zentui/codex-quota.ts +298 -0
  850. package/dist/extensions/pi-zentui/extensions/zentui/component-colors.ts +172 -0
  851. package/dist/extensions/pi-zentui/extensions/zentui/component-settings.ts +243 -0
  852. package/dist/extensions/pi-zentui/extensions/zentui/config.ts +851 -114
  853. package/dist/extensions/pi-zentui/extensions/zentui/custom-value-colors.ts +93 -0
  854. package/dist/extensions/pi-zentui/extensions/zentui/custom-variable-demand.ts +61 -0
  855. package/dist/extensions/pi-zentui/extensions/zentui/custom-variable-format.ts +80 -0
  856. package/dist/extensions/pi-zentui/extensions/zentui/custom-variables.ts +152 -0
  857. package/dist/extensions/pi-zentui/extensions/zentui/editor-metadata-format.ts +138 -23
  858. package/dist/extensions/pi-zentui/extensions/zentui/editor-mouse.ts +89 -0
  859. package/dist/extensions/pi-zentui/extensions/zentui/extension-status-controller.ts +148 -0
  860. package/dist/extensions/pi-zentui/extensions/zentui/extension-status-settings.ts +40 -0
  861. package/dist/extensions/pi-zentui/extensions/zentui/extension-status.ts +109 -1
  862. package/dist/extensions/pi-zentui/extensions/zentui/footer-format.ts +203 -23
  863. package/dist/extensions/pi-zentui/extensions/zentui/footer-layout.ts +80 -3
  864. package/dist/extensions/pi-zentui/extensions/zentui/footer-text.ts +1 -1
  865. package/dist/extensions/pi-zentui/extensions/zentui/footer.ts +432 -125
  866. package/dist/extensions/pi-zentui/extensions/zentui/format.ts +92 -4
  867. package/dist/extensions/pi-zentui/extensions/zentui/git.ts +47 -30
  868. package/dist/extensions/pi-zentui/extensions/zentui/github-status.ts +575 -0
  869. package/dist/extensions/pi-zentui/extensions/zentui/host-project-changes.ts +25 -0
  870. package/dist/extensions/pi-zentui/extensions/zentui/host-template-values.ts +29 -0
  871. package/dist/extensions/pi-zentui/extensions/zentui/icons.ts +53 -13
  872. package/dist/extensions/pi-zentui/extensions/zentui/index.ts +778 -258
  873. package/dist/extensions/pi-zentui/extensions/zentui/interaction-summary.ts +70 -5
  874. package/dist/extensions/pi-zentui/extensions/zentui/layered-editor.ts +55 -0
  875. package/dist/extensions/pi-zentui/extensions/zentui/live-context.ts +6 -1
  876. package/dist/extensions/pi-zentui/extensions/zentui/live-metadata-demand.ts +72 -0
  877. package/dist/extensions/pi-zentui/extensions/zentui/live-metadata-display.ts +21 -0
  878. package/dist/extensions/pi-zentui/extensions/zentui/live-metadata.ts +255 -0
  879. package/dist/extensions/pi-zentui/extensions/zentui/minimalist-editor.ts +476 -36
  880. package/dist/extensions/pi-zentui/extensions/zentui/minimalist-settings.ts +118 -0
  881. package/dist/extensions/pi-zentui/extensions/zentui/minimalist-template.ts +177 -0
  882. package/dist/extensions/pi-zentui/extensions/zentui/omp-editor-frame.ts +148 -0
  883. package/dist/extensions/pi-zentui/extensions/zentui/omp-statusline.ts +569 -0
  884. package/dist/extensions/pi-zentui/extensions/zentui/omp-template-lookups.ts +344 -0
  885. package/dist/extensions/pi-zentui/extensions/zentui/omp-template-metrics.ts +91 -0
  886. package/dist/extensions/pi-zentui/extensions/zentui/omp-template-modes.ts +323 -0
  887. package/dist/extensions/pi-zentui/extensions/zentui/omp-ui.ts +210 -0
  888. package/dist/extensions/pi-zentui/extensions/zentui/package-version.ts +30 -12
  889. package/dist/extensions/pi-zentui/extensions/zentui/project-demand.ts +46 -0
  890. package/dist/extensions/pi-zentui/extensions/zentui/project-discovery.ts +58 -0
  891. package/dist/extensions/pi-zentui/extensions/zentui/project-refresh.ts +10 -3
  892. package/dist/extensions/pi-zentui/extensions/zentui/project-state.ts +37 -0
  893. package/dist/extensions/pi-zentui/extensions/zentui/repository-root.ts +1 -0
  894. package/dist/extensions/pi-zentui/extensions/zentui/runtime.ts +119 -43
  895. package/dist/extensions/pi-zentui/extensions/zentui/selector-border.ts +40 -29
  896. package/dist/extensions/pi-zentui/extensions/zentui/settings-command.ts +1268 -722
  897. package/dist/extensions/pi-zentui/extensions/zentui/settings-keys.ts +59 -0
  898. package/dist/extensions/pi-zentui/extensions/zentui/settings-list-selection.ts +13 -0
  899. package/dist/extensions/pi-zentui/extensions/zentui/settings-previews.ts +11 -4
  900. package/dist/extensions/pi-zentui/extensions/zentui/state.ts +24 -11
  901. package/dist/extensions/pi-zentui/extensions/zentui/style.ts +6 -0
  902. package/dist/extensions/pi-zentui/extensions/zentui/telemetry.ts +113 -11
  903. package/dist/extensions/pi-zentui/extensions/zentui/thinking-experimental.ts +234 -46
  904. package/dist/extensions/pi-zentui/extensions/zentui/thinking-steps.ts +20 -5
  905. package/dist/extensions/pi-zentui/extensions/zentui/token-rate.ts +313 -0
  906. package/dist/extensions/pi-zentui/extensions/zentui/turn-summary-format.ts +59 -0
  907. package/dist/extensions/pi-zentui/extensions/zentui/turn-summary-rate.ts +52 -0
  908. package/dist/extensions/pi-zentui/extensions/zentui/ui.ts +640 -172
  909. package/dist/extensions/pi-zentui/extensions/zentui/user-message-styles.ts +72 -34
  910. package/dist/extensions/pi-zentui/extensions/zentui/user-message.ts +219 -34
  911. package/dist/extensions/pi-zentui/extensions/zentui/working-line.ts +495 -119
  912. package/dist/extensions/pi-zentui/omp.ts +157 -0
  913. package/dist/extensions/pi-zentui/package-lock.json +3762 -1507
  914. package/dist/extensions/pi-zentui/package.json +50 -12
  915. package/dist/extensions/pi-zentui/test/accent-rail-editor.test.ts +13 -2
  916. package/dist/extensions/pi-zentui/test/average-token-rate.test.ts +297 -0
  917. package/dist/extensions/pi-zentui/test/behavior-compatibility.mjs +89 -0
  918. package/dist/extensions/pi-zentui/test/codex-quota-lifecycle.test.ts +284 -0
  919. package/dist/extensions/pi-zentui/test/codex-quota-rendering.test.ts +466 -0
  920. package/dist/extensions/pi-zentui/test/codex-quota.test.ts +440 -0
  921. package/dist/extensions/pi-zentui/test/component-colors.test.ts +554 -0
  922. package/dist/extensions/pi-zentui/test/component-settings.test.ts +364 -0
  923. package/dist/extensions/pi-zentui/test/config-component-independence.test.ts +402 -0
  924. package/dist/extensions/pi-zentui/test/config-extension-status-choice.test.ts +233 -0
  925. package/dist/extensions/pi-zentui/test/config-hidden-extension-status-colors.test.ts +118 -0
  926. package/dist/extensions/pi-zentui/test/config-hidden-extension-status-placement.test.ts +142 -0
  927. package/dist/extensions/pi-zentui/test/config-minimalist-templates.test.ts +240 -0
  928. package/dist/extensions/pi-zentui/test/config-template-variables.test.ts +85 -0
  929. package/dist/extensions/pi-zentui/test/config.test.ts +80 -17
  930. package/dist/extensions/pi-zentui/test/custom-value-colors-integration.test.ts +453 -0
  931. package/dist/extensions/pi-zentui/test/custom-value-colors.test.ts +399 -0
  932. package/dist/extensions/pi-zentui/test/custom-variable-alias-prototypes.test.ts +177 -0
  933. package/dist/extensions/pi-zentui/test/custom-variable-consumers.test.ts +194 -0
  934. package/dist/extensions/pi-zentui/test/custom-variable-demand.test.ts +169 -0
  935. package/dist/extensions/pi-zentui/test/custom-variable-probe-reservation.test.ts +141 -0
  936. package/dist/extensions/pi-zentui/test/custom-variables-lifecycle.integration.test.ts +365 -0
  937. package/dist/extensions/pi-zentui/test/custom-variables.test.ts +330 -0
  938. package/dist/extensions/pi-zentui/test/editor-metadata-format.test.ts +121 -0
  939. package/dist/extensions/pi-zentui/test/editor-mouse.test.ts +507 -0
  940. package/dist/extensions/pi-zentui/test/editor-viewport-indicators.test.ts +247 -20
  941. package/dist/extensions/pi-zentui/test/extension-compliance.test.ts +204 -260
  942. package/dist/extensions/pi-zentui/test/extension-status-controller.test.ts +323 -0
  943. package/dist/extensions/pi-zentui/test/extension-status-lifecycle.integration.test.ts +466 -0
  944. package/dist/extensions/pi-zentui/test/extension-status-settings.test.ts +79 -0
  945. package/dist/extensions/pi-zentui/test/footer-alignment.test.ts +135 -0
  946. package/dist/extensions/pi-zentui/test/footer-authority.test.ts +69 -0
  947. package/dist/extensions/pi-zentui/test/footer-auto-compaction.test.ts +148 -0
  948. package/dist/extensions/pi-zentui/test/footer-format-cache.test.ts +186 -0
  949. package/dist/extensions/pi-zentui/test/footer-format.test.ts +154 -4
  950. package/dist/extensions/pi-zentui/test/footer-hidden.test.ts +312 -0
  951. package/dist/extensions/pi-zentui/test/footer-hyperlink.test.ts +22 -0
  952. package/dist/extensions/pi-zentui/test/footer-layout.test.ts +80 -0
  953. package/dist/extensions/pi-zentui/test/footer-thinking-level.test.ts +123 -0
  954. package/dist/extensions/pi-zentui/test/format.test.ts +75 -1
  955. package/dist/extensions/pi-zentui/test/git-probes.test.ts +182 -0
  956. package/dist/extensions/pi-zentui/test/github-status.test.ts +931 -0
  957. package/dist/extensions/pi-zentui/test/host-template-surfaces.test.ts +287 -0
  958. package/dist/extensions/pi-zentui/test/icons.test.ts +86 -16
  959. package/dist/extensions/pi-zentui/test/layered-editor.test.ts +53 -0
  960. package/dist/extensions/pi-zentui/test/live-context-integration.test.ts +154 -7
  961. package/dist/extensions/pi-zentui/test/live-context.test.ts +45 -0
  962. package/dist/extensions/pi-zentui/test/live-metadata-lifecycle.integration.test.ts +963 -0
  963. package/dist/extensions/pi-zentui/test/live-metadata.test.ts +767 -0
  964. package/dist/extensions/pi-zentui/test/minimalist-cache-hit-colors.test.ts +183 -0
  965. package/dist/extensions/pi-zentui/test/minimalist-editor.test.ts +222 -4
  966. package/dist/extensions/pi-zentui/test/minimalist-settings.test.ts +103 -0
  967. package/dist/extensions/pi-zentui/test/minimalist-templates.test.ts +489 -0
  968. package/dist/extensions/pi-zentui/test/omp-editor-composers.test.ts +324 -0
  969. package/dist/extensions/pi-zentui/test/omp-statusline.test.ts +579 -0
  970. package/dist/extensions/pi-zentui/test/omp-template-lookups.test.ts +630 -0
  971. package/dist/extensions/pi-zentui/test/omp-template-metrics.test.ts +72 -0
  972. package/dist/extensions/pi-zentui/test/omp-template-modes.test.ts +557 -0
  973. package/dist/extensions/pi-zentui/test/omp-ui.test.ts +93 -0
  974. package/dist/extensions/pi-zentui/test/package-contents.mjs +1 -0
  975. package/dist/extensions/pi-zentui/test/pi-version-policy.test.ts +37 -0
  976. package/dist/extensions/pi-zentui/test/project-demand-integration.test.ts +542 -0
  977. package/dist/extensions/pi-zentui/test/project-discovery.test.ts +412 -0
  978. package/dist/extensions/pi-zentui/test/project-refresh.test.ts +44 -0
  979. package/dist/extensions/pi-zentui/test/project-state.test.ts +38 -1
  980. package/dist/extensions/pi-zentui/test/responsive-dependencies.test.ts +7 -7
  981. package/dist/extensions/pi-zentui/test/runtime.test.ts +127 -2
  982. package/dist/extensions/pi-zentui/test/selesai-v030-gate.json +939 -0
  983. package/dist/extensions/pi-zentui/test/settings-command.test.ts +1330 -82
  984. package/dist/extensions/pi-zentui/test/settings-keys.test.ts +41 -0
  985. package/dist/extensions/pi-zentui/test/settings-list-selection.test.ts +88 -0
  986. package/dist/extensions/pi-zentui/test/settings-previews.test.ts +4 -1
  987. package/dist/extensions/pi-zentui/test/state.test.ts +15 -1
  988. package/dist/extensions/pi-zentui/test/telemetry-lifecycle-integration.test.ts +214 -12
  989. package/dist/extensions/pi-zentui/test/telemetry-snapshot.test.ts +246 -0
  990. package/dist/extensions/pi-zentui/test/thinking-experimental-cache.test.ts +246 -0
  991. package/dist/extensions/pi-zentui/test/thinking-experimental-rows.test.ts +22 -0
  992. package/dist/extensions/pi-zentui/test/thinking-experimental-tui.mjs +113 -51
  993. package/dist/extensions/pi-zentui/test/thinking-experimental.test.ts +576 -76
  994. package/dist/extensions/pi-zentui/test/thinking-steps.test.ts +23 -0
  995. package/dist/extensions/pi-zentui/test/token-rate.test.ts +450 -0
  996. package/dist/extensions/pi-zentui/test/turn-summary-format.test.ts +207 -0
  997. package/dist/extensions/pi-zentui/test/turn-summary-lifecycle.integration.test.ts +72 -5
  998. package/dist/extensions/pi-zentui/test/turn-summary-rate.test.ts +158 -0
  999. package/dist/extensions/pi-zentui/test/usage-lifecycle-integration.test.ts +421 -0
  1000. package/dist/extensions/pi-zentui/test/usage-snapshot.test.ts +154 -0
  1001. package/dist/extensions/pi-zentui/test/user-message-cache.test.ts +239 -0
  1002. package/dist/extensions/pi-zentui/test/user-message-native-reduced-capabilities.test.ts +61 -0
  1003. package/dist/extensions/pi-zentui/test/user-message-native.test.ts +447 -0
  1004. package/dist/extensions/pi-zentui/test/user-message-styles.test.ts +2 -2
  1005. package/dist/extensions/pi-zentui/test/working-line-editor-placement.test.ts +317 -0
  1006. package/dist/extensions/pi-zentui/test/working-line-generation-cache.test.ts +238 -0
  1007. package/dist/extensions/pi-zentui/test/working-line-lifecycle.integration.test.ts +674 -179
  1008. package/dist/extensions/pi-zentui/test/working-line-message-ownership.test.ts +239 -0
  1009. package/dist/extensions/pi-zentui/test/working-line-metric-animation.test.ts +284 -0
  1010. package/dist/extensions/pi-zentui/test/working-line-placement.test.ts +298 -0
  1011. package/dist/extensions/pi-zentui/test/working-line.test.ts +386 -18
  1012. package/dist/extensions/pi-zentui/test/wrapped-editor-consumers.integration.test.ts +579 -0
  1013. package/dist/extensions/pi-zentui/test/wrapped-editor-usage.integration.test.ts +298 -0
  1014. package/dist/extensions/pi-zentui/tsconfig.json +1 -1
  1015. package/dist/extensions/pi-zentui/vitest.host.config.ts +33 -0
  1016. package/dist/extensions/question/index.ts +1 -5
  1017. package/dist/extensions/rtk.test.ts +28 -15
  1018. package/dist/extensions/rtk.ts +22 -22
  1019. package/dist/extensions/skills-index/index.test.ts +99 -0
  1020. package/dist/extensions/skills-index/index.ts +105 -0
  1021. package/dist/extensions/skills-index/package.json +9 -0
  1022. package/dist/extensions/tokenin-onboarding.ts +52 -210
  1023. package/dist/extensions/tool-search/index.d.ts +11 -0
  1024. package/dist/extensions/tool-search/index.js +14 -0
  1025. package/dist/extensions/tool-search/tool.d.ts +72 -0
  1026. package/dist/extensions/tool-search/tool.js +188 -0
  1027. package/dist/index.d.ts +21 -9
  1028. package/dist/index.js +17 -5
  1029. package/dist/main.d.ts +10 -0
  1030. package/dist/main.js +107 -43
  1031. package/dist/migrations.js +4 -3
  1032. package/dist/modes/index.d.ts +2 -1
  1033. package/dist/modes/interactive/bug-report.js +4 -0
  1034. package/dist/modes/interactive/components/armin.d.ts +3 -0
  1035. package/dist/modes/interactive/components/armin.js +7 -5
  1036. package/dist/modes/interactive/components/assistant-message.js +1 -1
  1037. package/dist/modes/interactive/components/auth-url.d.ts +13 -0
  1038. package/dist/modes/interactive/components/auth-url.js +36 -0
  1039. package/dist/modes/interactive/components/bash-execution.d.ts +5 -1
  1040. package/dist/modes/interactive/components/bash-execution.js +17 -14
  1041. package/dist/modes/interactive/components/branch-summary-message.d.ts +2 -1
  1042. package/dist/modes/interactive/components/branch-summary-message.js +5 -2
  1043. package/dist/modes/interactive/components/compaction-summary-message.d.ts +2 -1
  1044. package/dist/modes/interactive/components/compaction-summary-message.js +5 -2
  1045. package/dist/modes/interactive/components/config-selector.js +13 -3
  1046. package/dist/modes/interactive/components/custom-editor.js +7 -0
  1047. package/dist/modes/interactive/components/custom-entry.d.ts +3 -1
  1048. package/dist/modes/interactive/components/custom-entry.js +8 -2
  1049. package/dist/modes/interactive/components/custom-message.js +1 -0
  1050. package/dist/modes/interactive/components/first-time-setup.d.ts +4 -4
  1051. package/dist/modes/interactive/components/first-time-setup.js +8 -2
  1052. package/dist/modes/interactive/components/footer.d.ts +7 -0
  1053. package/dist/modes/interactive/components/footer.js +44 -4
  1054. package/dist/modes/interactive/components/index.d.ts +0 -1
  1055. package/dist/modes/interactive/components/index.js +0 -1
  1056. package/dist/modes/interactive/components/login-dialog.d.ts +2 -0
  1057. package/dist/modes/interactive/components/login-dialog.js +11 -5
  1058. package/dist/modes/interactive/components/mermaid.d.ts +10 -0
  1059. package/dist/modes/interactive/components/mermaid.js +74 -0
  1060. package/dist/modes/interactive/components/model-selector.d.ts +14 -9
  1061. package/dist/modes/interactive/components/model-selector.js +79 -31
  1062. package/dist/modes/interactive/components/oauth-selector.d.ts +8 -2
  1063. package/dist/modes/interactive/components/oauth-selector.js +24 -21
  1064. package/dist/modes/interactive/components/pi-logo.d.ts +18 -0
  1065. package/dist/modes/interactive/components/pi-logo.js +36 -0
  1066. package/dist/modes/interactive/components/radius-login-selector.d.ts +14 -0
  1067. package/dist/modes/interactive/components/radius-login-selector.js +84 -0
  1068. package/dist/modes/interactive/components/scoped-models-selector.d.ts +4 -0
  1069. package/dist/modes/interactive/components/scoped-models-selector.js +26 -0
  1070. package/dist/modes/interactive/components/settings-selector.d.ts +8 -11
  1071. package/dist/modes/interactive/components/settings-selector.js +60 -102
  1072. package/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -1
  1073. package/dist/modes/interactive/components/skill-invocation-message.js +5 -2
  1074. package/dist/modes/interactive/components/themed-text.d.ts +16 -0
  1075. package/dist/modes/interactive/components/themed-text.js +28 -0
  1076. package/dist/modes/interactive/components/tool-execution.d.ts +11 -18
  1077. package/dist/modes/interactive/components/tool-execution.js +34 -47
  1078. package/dist/modes/interactive/components/tree-selector.js +7 -0
  1079. package/dist/modes/interactive/components/user-message.d.ts +3 -1
  1080. package/dist/modes/interactive/components/user-message.js +14 -6
  1081. package/dist/modes/interactive/components/visual-truncate.d.ts +27 -3
  1082. package/dist/modes/interactive/components/visual-truncate.js +39 -6
  1083. package/dist/modes/interactive/external-editor.js +2 -1
  1084. package/dist/modes/interactive/interactive-mode.d.ts +41 -8
  1085. package/dist/modes/interactive/interactive-mode.js +854 -492
  1086. package/dist/modes/interactive/program-status-reporter.d.ts +33 -0
  1087. package/dist/modes/interactive/program-status-reporter.js +109 -0
  1088. package/dist/modes/interactive/theme/dark.json +59 -72
  1089. package/dist/modes/interactive/theme/light.json +57 -69
  1090. package/dist/modes/interactive/theme/system-theme.d.ts +54 -0
  1091. package/dist/modes/interactive/theme/system-theme.js +545 -0
  1092. package/dist/modes/interactive/theme/theme-controller.d.ts +46 -6
  1093. package/dist/modes/interactive/theme/theme-controller.js +127 -47
  1094. package/dist/modes/interactive/theme/theme-json.d.ts +1 -0
  1095. package/dist/modes/interactive/theme/theme-json.js +3 -1
  1096. package/dist/modes/interactive/theme/theme-schema.json +7 -2
  1097. package/dist/modes/interactive/theme/theme.d.ts +66 -39
  1098. package/dist/modes/interactive/theme/theme.js +243 -320
  1099. package/dist/modes/interactive/tui-renderer.d.ts +2 -1
  1100. package/dist/modes/interactive/tui-renderer.js +1 -0
  1101. package/dist/modes/json-event.d.ts +33 -0
  1102. package/dist/modes/json-event.js +28 -0
  1103. package/dist/modes/print-mode.js +12 -2
  1104. package/dist/modes/rpc/intercom-bridge.d.ts +14 -0
  1105. package/dist/modes/rpc/intercom-bridge.js +75 -0
  1106. package/dist/modes/rpc/intercom-bridge.test.js +65 -0
  1107. package/dist/modes/rpc/release-bridge.d.ts +35 -0
  1108. package/dist/modes/rpc/release-bridge.js +159 -0
  1109. package/dist/modes/rpc/release-bridge.test.d.ts +1 -0
  1110. package/dist/modes/rpc/release-bridge.test.js +347 -0
  1111. package/dist/modes/rpc/rpc-client.d.ts +43 -27
  1112. package/dist/modes/rpc/rpc-client.js +97 -37
  1113. package/dist/modes/rpc/rpc-intercom-transport.test.d.ts +1 -0
  1114. package/dist/modes/rpc/rpc-intercom-transport.test.js +85 -0
  1115. package/dist/modes/rpc/rpc-mode.d.ts +1 -13
  1116. package/dist/modes/rpc/rpc-mode.js +250 -34
  1117. package/dist/modes/rpc/rpc-release-transport.test.d.ts +1 -0
  1118. package/dist/modes/rpc/rpc-release-transport.test.js +329 -0
  1119. package/dist/modes/rpc/rpc-subagent-transport.test.d.ts +1 -0
  1120. package/dist/modes/rpc/rpc-subagent-transport.test.js +60 -0
  1121. package/dist/modes/rpc/rpc-types.d.ts +22 -23
  1122. package/dist/modes/rpc/rpc-types.js +0 -6
  1123. package/dist/modes/rpc/subagent-bridge.d.ts +23 -0
  1124. package/dist/modes/rpc/subagent-bridge.js +93 -0
  1125. package/dist/modes/rpc/test-fixtures/intercom-host.d.ts +1 -0
  1126. package/dist/modes/rpc/test-fixtures/intercom-host.js +13 -0
  1127. package/dist/package-manager-cli.js +16 -5
  1128. package/dist/rpc-entry.js +1 -0
  1129. package/dist/skills/pi-subagents/SKILL.md +109 -35
  1130. package/dist/skills/pi-subagents/references/constraints-and-recipes.md +38 -238
  1131. package/dist/skills/pi-subagents/references/execution-controls.md +181 -83
  1132. package/dist/skills/pi-subagents/references/management-authoring-rpc.md +9 -9
  1133. package/dist/skills/pi-subagents/references/multi-lane-orchestration.md +24 -2
  1134. package/dist/skills/pi-subagents/references/prompting-and-roles.md +121 -91
  1135. package/dist/skills/pi-subagents/references/review-and-validation.md +73 -0
  1136. package/dist/utils/ansi.d.ts +8 -0
  1137. package/dist/utils/ansi.js +30 -11
  1138. package/dist/utils/clipboard-image.js +14 -17
  1139. package/dist/utils/clipboard.d.ts +2 -0
  1140. package/dist/utils/clipboard.js +17 -11
  1141. package/dist/utils/frontmatter.js +2 -1
  1142. package/dist/utils/image-convert.d.ts +12 -0
  1143. package/dist/utils/image-convert.js +45 -6
  1144. package/dist/utils/image-resize-core.d.ts +12 -0
  1145. package/dist/utils/image-resize-core.js +5 -0
  1146. package/dist/utils/image-resize-worker.js +3 -2
  1147. package/dist/utils/image-resize.js +9 -10
  1148. package/dist/utils/mime.js +1 -1
  1149. package/dist/utils/output-files.d.ts +14 -0
  1150. package/dist/utils/output-files.js +29 -0
  1151. package/dist/utils/paths.d.ts +6 -3
  1152. package/dist/utils/paths.js +28 -5
  1153. package/dist/utils/shell.d.ts +1 -3
  1154. package/dist/utils/shell.js +3 -30
  1155. package/dist/utils/syntax-highlight.d.ts +1 -0
  1156. package/dist/utils/syntax-highlight.js +68 -2
  1157. package/dist/utils/tool-result-images.d.ts +20 -0
  1158. package/dist/utils/tool-result-images.js +47 -0
  1159. package/dist/utils/tools-manager.d.ts +5 -0
  1160. package/dist/utils/tools-manager.js +6 -6
  1161. package/dist/utils/version-check.d.ts +4 -0
  1162. package/dist/utils/version-check.js +20 -2
  1163. package/docs/cli-integration.md +104 -0
  1164. package/docs/cli.md +333 -0
  1165. package/docs/codemode.md +230 -0
  1166. package/docs/configuration.md +47 -0
  1167. package/docs/environment-variables.md +5 -0
  1168. package/docs/extensions.md +107 -30
  1169. package/docs/json.md +8 -4
  1170. package/docs/keybindings.md +10 -10
  1171. package/docs/mcp.md +262 -0
  1172. package/docs/models.md +104 -3
  1173. package/docs/providers.md +20 -2
  1174. package/docs/rpc-subagent.schema.json +491 -0
  1175. package/docs/rpc.md +223 -13
  1176. package/docs/sdk.md +41 -33
  1177. package/docs/security.md +21 -20
  1178. package/docs/settings.md +18 -46
  1179. package/docs/terminal-setup.md +14 -0
  1180. package/docs/virtual-models.md +114 -0
  1181. package/examples/extensions/jev-router.ts +113 -0
  1182. package/examples/extensions/tokenin-usage-widget.ts +124 -0
  1183. package/examples/rpc-client.ts +35 -0
  1184. package/examples/sdk/14-codemode-mcp.ts +67 -0
  1185. package/package.json +16 -8
  1186. package/dist/core/agent-session-auto-handoff.test.js +0 -195
  1187. package/dist/core/built-in-extensions.d.ts +0 -2
  1188. package/dist/core/built-in-extensions.js +0 -2
  1189. package/dist/core/llama/provider.js +0 -143
  1190. package/dist/core/settings-manager-auto-handoff.test.js +0 -53
  1191. package/dist/extensions/capability-gateway/catalog.ts +0 -177
  1192. package/dist/extensions/capability-gateway/index.test.ts +0 -226
  1193. package/dist/extensions/capability-gateway/index.ts +0 -669
  1194. package/dist/extensions/capability-gateway/integration.test.ts +0 -803
  1195. package/dist/extensions/capability-gateway/package.json +0 -16
  1196. package/dist/extensions/capability-gateway/routing.test.ts +0 -574
  1197. package/dist/extensions/capability-gateway/routing.ts +0 -403
  1198. package/dist/extensions/pi-subagents/runner-server-preload.mjs +0 -13
  1199. package/dist/extensions/pi-subagents/src/runs/shared/completion-evidence.ts +0 -89
  1200. package/dist/extensions/pi-subagents/src/runs/shared/completion-guard.ts +0 -259
  1201. package/dist/extensions/pi-subagents/src/runs/shared/llm-intent-arbiter.ts +0 -312
  1202. package/dist/extensions/pi-subagents/src/runs/shared/model-exclusions.ts +0 -374
  1203. package/dist/extensions/pi-subagents/src/runs/shared/readonly-model-continuation.ts +0 -69
  1204. package/dist/extensions/pi-subagents/src/runs/shared/readonly-session-evidence.ts +0 -307
  1205. package/dist/extensions/pi-subagents/src/runs/shared/task-intent.ts +0 -211
  1206. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/cli.d.ts +0 -3
  1207. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/register-bedrock.d.ts +0 -2
  1208. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/restore-sandbox-env.d.ts +0 -17
  1209. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/args.d.ts +0 -57
  1210. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/config-selector.d.ts +0 -16
  1211. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/file-processor.d.ts +0 -15
  1212. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/initial-message.d.ts +0 -18
  1213. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/list-models.d.ts +0 -9
  1214. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/project-trust.d.ts +0 -10
  1215. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/session-picker.d.ts +0 -10
  1216. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/startup-ui.d.ts +0 -20
  1217. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli.d.ts +0 -3
  1218. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/config.d.ts +0 -96
  1219. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-runtime.d.ts +0 -119
  1220. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-services.d.ts +0 -85
  1221. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session.d.ts +0 -620
  1222. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-guidance.d.ts +0 -5
  1223. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-storage.d.ts +0 -56
  1224. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/bash-executor.d.ts +0 -32
  1225. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/cache-stats.d.ts +0 -49
  1226. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/branch-summarization.d.ts +0 -93
  1227. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/compaction.d.ts +0 -128
  1228. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/index.d.ts +0 -7
  1229. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/utils.d.ts +0 -38
  1230. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/defaults.d.ts +0 -3
  1231. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/diagnostics.d.ts +0 -15
  1232. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/event-bus.d.ts +0 -9
  1233. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/exec.d.ts +0 -29
  1234. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/experimental.d.ts +0 -2
  1235. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/ansi-to-html.d.ts +0 -22
  1236. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/index.d.ts +0 -37
  1237. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/tool-renderer.d.ts +0 -34
  1238. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/index.d.ts +0 -12
  1239. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/loader.d.ts +0 -23
  1240. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/runner.d.ts +0 -171
  1241. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/types.d.ts +0 -1261
  1242. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/wrapper.d.ts +0 -20
  1243. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/footer-data-provider.d.ts +0 -54
  1244. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/http-dispatcher.d.ts +0 -22
  1245. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/index.d.ts +0 -13
  1246. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/keybindings.d.ts +0 -358
  1247. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/messages.d.ts +0 -77
  1248. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-config.d.ts +0 -512
  1249. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-registry.d.ts +0 -43
  1250. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-resolver.d.ts +0 -121
  1251. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-runtime.d.ts +0 -82
  1252. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/models-store.d.ts +0 -17
  1253. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/output-guard.d.ts +0 -7
  1254. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/package-manager.d.ts +0 -210
  1255. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/project-trust.d.ts +0 -15
  1256. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/prompt-templates.d.ts +0 -54
  1257. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-attribution.d.ts +0 -4
  1258. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-composer.d.ts +0 -55
  1259. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/radius.d.ts +0 -2
  1260. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/remote-catalog-provider.d.ts +0 -5
  1261. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resolve-config-value.d.ts +0 -30
  1262. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resource-loader.d.ts +0 -206
  1263. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/runtime-credentials.d.ts +0 -15
  1264. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/sdk.d.ts +0 -106
  1265. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-cwd.d.ts +0 -19
  1266. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-manager.d.ts +0 -356
  1267. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/settings-manager.d.ts +0 -297
  1268. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/skills.d.ts +0 -60
  1269. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/slash-commands.d.ts +0 -15
  1270. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/source-info.d.ts +0 -18
  1271. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/system-prompt.d.ts +0 -28
  1272. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/telemetry.d.ts +0 -3
  1273. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/timings.d.ts +0 -10
  1274. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/bash.d.ts +0 -68
  1275. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit-diff.d.ts +0 -106
  1276. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit.d.ts +0 -51
  1277. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/file-mutation-queue.d.ts +0 -6
  1278. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/find.d.ts +0 -35
  1279. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/grep.d.ts +0 -37
  1280. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/index.d.ts +0 -40
  1281. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/ls.d.ts +0 -37
  1282. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/output-accumulator.d.ts +0 -52
  1283. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/path-utils.d.ts +0 -10
  1284. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/read.d.ts +0 -35
  1285. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/render-utils.d.ts +0 -24
  1286. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/tool-definition-wrapper.d.ts +0 -14
  1287. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/truncate.d.ts +0 -70
  1288. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/write.d.ts +0 -26
  1289. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/trust-manager.d.ts +0 -36
  1290. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/usage-totals.d.ts +0 -19
  1291. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/client.d.ts +0 -61
  1292. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/huggingface.d.ts +0 -23
  1293. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/index.d.ts +0 -3
  1294. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/provider.d.ts +0 -10
  1295. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/ui.d.ts +0 -42
  1296. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/index.d.ts +0 -35
  1297. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/main.d.ts +0 -12
  1298. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/migrations.d.ts +0 -33
  1299. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/index.d.ts +0 -9
  1300. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/armin.d.ts +0 -34
  1301. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/assistant-message.d.ts +0 -22
  1302. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bash-execution.d.ts +0 -34
  1303. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
  1304. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
  1305. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
  1306. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/config-selector.d.ts +0 -102
  1307. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/countdown-timer.d.ts +0 -14
  1308. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-editor.d.ts +0 -21
  1309. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-entry.d.ts +0 -19
  1310. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-message.d.ts +0 -20
  1311. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  1312. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/diff.d.ts +0 -12
  1313. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/dynamic-border.d.ts +0 -15
  1314. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/earendil-announcement.d.ts +0 -5
  1315. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-editor.d.ts +0 -22
  1316. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-input.d.ts +0 -23
  1317. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-selector.d.ts +0 -26
  1318. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/first-time-setup.d.ts +0 -25
  1319. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/footer.d.ts +0 -32
  1320. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/index.d.ts +0 -34
  1321. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/keybinding-hints.d.ts +0 -13
  1322. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/login-dialog.d.ts +0 -52
  1323. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/model-selector.d.ts +0 -54
  1324. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/oauth-selector.d.ts +0 -33
  1325. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -42
  1326. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector-search.d.ts +0 -23
  1327. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector.d.ts +0 -95
  1328. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/settings-selector.d.ts +0 -77
  1329. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
  1330. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
  1331. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/status-indicator.d.ts +0 -28
  1332. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/theme-selector.d.ts +0 -11
  1333. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
  1334. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tool-execution.d.ts +0 -63
  1335. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tree-selector.d.ts +0 -94
  1336. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/trust-selector.d.ts +0 -23
  1337. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
  1338. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message.d.ts +0 -14
  1339. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
  1340. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/interactive-mode.d.ts +0 -394
  1341. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/model-search.d.ts +0 -12
  1342. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme-controller.d.ts +0 -29
  1343. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme.d.ts +0 -120
  1344. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/print-mode.d.ts +0 -28
  1345. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/jsonl.d.ts +0 -17
  1346. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-client.d.ts +0 -246
  1347. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-mode.d.ts +0 -20
  1348. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-types.d.ts +0 -457
  1349. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/package-manager-cli.d.ts +0 -8
  1350. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/rpc-entry.d.ts +0 -3
  1351. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/ansi.d.ts +0 -2
  1352. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/changelog.d.ts +0 -22
  1353. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/child-process.d.ts +0 -18
  1354. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-image.d.ts +0 -11
  1355. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-native.d.ts +0 -11
  1356. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard.d.ts +0 -4
  1357. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/deprecation.d.ts +0 -4
  1358. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/exif-orientation.d.ts +0 -5
  1359. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/frontmatter.d.ts +0 -8
  1360. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/fs-watch.d.ts +0 -5
  1361. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/git.d.ts +0 -26
  1362. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/html.d.ts +0 -7
  1363. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-convert.d.ts +0 -10
  1364. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-process.d.ts +0 -18
  1365. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-core.d.ts +0 -30
  1366. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-worker.d.ts +0 -2
  1367. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize.d.ts +0 -16
  1368. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/json.d.ts +0 -3
  1369. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/mime.d.ts +0 -3
  1370. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/open-browser.d.ts +0 -9
  1371. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/paths.d.ts +0 -31
  1372. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/photon.d.ts +0 -21
  1373. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/pi-user-agent.d.ts +0 -2
  1374. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/shell.d.ts +0 -31
  1375. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/sleep.d.ts +0 -5
  1376. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/syntax-highlight.d.ts +0 -12
  1377. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/tools-manager.d.ts +0 -3
  1378. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/version-check.d.ts +0 -15
  1379. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/windows-self-update.d.ts +0 -3
  1380. package/dist/extensions/pi-subagents/test/smoke/pi085-child.ts +0 -31
  1381. package/dist/extensions/pi-subagents/test/smoke/pi085-clean-install.mjs +0 -74
  1382. package/dist/extensions/pi-subagents/test/unit/completion-evidence.test.ts +0 -150
  1383. package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +0 -766
  1384. package/dist/extensions/pi-subagents/test/unit/llm-intent-arbiter.test.ts +0 -327
  1385. package/dist/extensions/pi-subagents/test/unit/model-exclusions.test.ts +0 -309
  1386. package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +0 -1093
  1387. package/dist/extensions/pi-subagents/test/unit/readonly-model-continuation.test.ts +0 -94
  1388. package/dist/extensions/pi-subagents/test/unit/readonly-session-evidence.test.ts +0 -1329
  1389. package/dist/extensions/pi-subagents/test/unit/task-intent.test.ts +0 -153
  1390. package/dist/extensions/pi-zentui/extensions/zentui/accent-rail-layout-patch.ts +0 -457
  1391. package/dist/extensions/pi-zentui/test/accent-rail-layout-patch.test.ts +0 -669
  1392. package/dist/extensions/pi-zentui/test/thinking-experimental-docs.test.ts +0 -51
  1393. package/dist/modes/interactive/components/daxnuts.d.ts +0 -22
  1394. package/dist/modes/interactive/components/daxnuts.js +0 -139
  1395. /package/dist/core/{agent-session-auto-handoff.test.d.ts → agent-session-custom-tools.test.d.ts} +0 -0
  1396. /package/dist/{core → extensions}/llama/huggingface.d.ts +0 -0
  1397. /package/dist/{core → extensions}/llama/huggingface.js +0 -0
  1398. /package/dist/{core → extensions}/llama/index.d.ts +0 -0
  1399. /package/dist/{core → extensions}/llama/ui.d.ts +0 -0
  1400. /package/dist/{core → extensions}/llama/ui.js +0 -0
  1401. /package/dist/{core/settings-manager-auto-handoff.test.d.ts → modes/rpc/intercom-bridge.test.d.ts} +0 -0
@@ -2,20 +2,37 @@ import { CustomEditor, type KeybindingsManager, type Theme } from "@earendil-wor
2
2
  import {
3
3
  type AutocompleteProvider,
4
4
  type Component,
5
+ CURSOR_MARKER,
5
6
  type EditorComponent,
6
7
  type EditorTheme,
8
+ sliceByColumn,
7
9
  type TUI,
8
10
  truncateToWidth,
9
11
  visibleWidth,
10
12
  } from "@earendil-works/pi-tui";
11
13
  import { ACCENT_RAIL_CHROME_WIDTH, renderAccentRailEditorFrame } from "./accent-rail-editor";
12
- import { renderCompletionPalette } from "./completion-menu";
14
+ import type { CodexQuota } from "./codex-quota";
15
+ import { renderCodexQuota } from "./codex-quota-display";
16
+ import { omitTrailingNativeCompletionCountRow, renderCompletionPalette } from "./completion-menu";
17
+ import { componentColor, editorShellColor } from "./component-colors";
13
18
  import type { EditorStyle, ZentuiConfig } from "./config";
14
19
  import {
15
20
  type EditorMetadataZones,
16
21
  renderEditorMetadataFormatSplit,
22
+ sanitizeEditorMetadataText,
17
23
  } from "./editor-metadata-format";
24
+ import {
25
+ EditorMouseForwarder,
26
+ type EditorMouseHandler,
27
+ editorMouseCells,
28
+ rememberEditorMouseLayout,
29
+ } from "./editor-mouse";
30
+ import { collectFooterFormatReferences, parseFooterFormat } from "./footer-format";
31
+ import { bashModeLabel } from "./format";
32
+ import type { HostTemplateValues } from "./host-template-values";
18
33
  import { type MinimalistEditorMetadata, renderMinimalistFrame } from "./minimalist-editor";
34
+ import { minimalistTemplateReferences } from "./minimalist-template";
35
+ import { getOmpEditorFrame, renderWithOmpEditorFrame } from "./omp-editor-frame";
19
36
  import {
20
37
  EDITOR_ACCENT_FALLBACK,
21
38
  EDITOR_BORDER_FALLBACK,
@@ -23,6 +40,9 @@ import {
23
40
  safeThemeFg,
24
41
  } from "./style";
25
42
 
43
+ // Reserve at least four label cells beside Minimalist metadata.
44
+ const MIN_WORKING_LINE_BORDER_WIDTH = 16;
45
+
26
46
  const LEGACY_SPLIT_POLISHED_FRAME = Symbol.for("pi-zentui.polished-frame");
27
47
 
28
48
  export type ViewportCounts = {
@@ -35,6 +55,7 @@ type PolishedFrameSplit = {
35
55
  /** Logical, unframed autocomplete payload rows owned by this module. */
36
56
  trailingLines: string[];
37
57
  viewport: ViewportCounts;
58
+ nativeStatusLine?: string;
38
59
  };
39
60
 
40
61
  type PolishedFrameProvenance = {
@@ -48,7 +69,10 @@ type AutocompleteListInternals = Pick<Component, "render">;
48
69
 
49
70
  type AutocompleteEditorInternals = {
50
71
  autocompleteList?: AutocompleteListInternals;
72
+ debugChildren?: readonly AutocompleteListInternals[];
51
73
  isShowingAutocomplete?: () => boolean;
74
+ getPaddingX?: () => number;
75
+ getBorderStyle?: () => unknown;
52
76
  };
53
77
 
54
78
  type AutocompleteCapture = {
@@ -59,6 +83,7 @@ type AutocompleteCapture = {
59
83
 
60
84
  type WrappedEditor = EditorComponent &
61
85
  AutocompleteEditorInternals & {
86
+ handleMouse?: EditorMouseHandler;
62
87
  focused?: boolean;
63
88
  onEscape?: () => void;
64
89
  onCtrlD?: () => void;
@@ -81,9 +106,11 @@ type WrappedEditor = EditorComponent &
81
106
  };
82
107
 
83
108
  export type EditorMeta = {
109
+ codexQuota?: CodexQuota;
84
110
  modelLabel: string;
85
111
  modelId?: string;
86
112
  modelName?: string;
113
+ fastMode?: string;
87
114
  providerLabel: string;
88
115
  sessionName?: string;
89
116
  contextPercent?: number;
@@ -91,6 +118,8 @@ export type EditorMeta = {
91
118
  inputTokens?: number;
92
119
  outputTokens?: number;
93
120
  cacheHitRate?: number;
121
+ customVariables?: ReadonlyMap<string, string>;
122
+ hostTemplateValues?: HostTemplateValues;
94
123
  };
95
124
 
96
125
  export type PolishedEditorFrameOptions = {
@@ -103,11 +132,14 @@ export type PolishedEditorFrameOptions = {
103
132
  modelMeta: EditorMeta;
104
133
  thinkingLevel?: string;
105
134
  rightStatus?: string;
135
+ workingLineFrame?: string;
136
+ shellMode?: boolean;
106
137
  borderColor?: (text: string) => string;
107
138
  };
108
139
 
109
140
  type PolishedFrameOptions = {
110
141
  width: number;
142
+ baseWidth: number;
111
143
  baseRendered: string[];
112
144
  autocompleteSource: AutocompleteEditorInternals;
113
145
  autocompleteCapture?: AutocompleteCapture;
@@ -116,8 +148,11 @@ type PolishedFrameOptions = {
116
148
  modelMeta: EditorMeta;
117
149
  thinkingLevel: string | undefined;
118
150
  rightStatus?: string;
151
+ shellMode?: boolean;
119
152
  ownedFrame?: PolishedFrameSplit;
120
153
  trustedBaseFrame?: boolean;
154
+ getWorkingLineFrame: () => string | undefined;
155
+ reportWorkingLineBorder: (active: boolean) => void;
121
156
  borderColor?: (text: string) => string;
122
157
  };
123
158
 
@@ -127,7 +162,9 @@ type PolishedFrameResult = {
127
162
  };
128
163
 
129
164
  type AccentRailFrameAdapterOptions = {
165
+ codexQuota?: CodexQuota;
130
166
  width: number;
167
+ baseWidth: number;
131
168
  baseRendered: string[];
132
169
  autocompleteSource: AutocompleteEditorInternals;
133
170
  autocompleteCapture?: AutocompleteCapture;
@@ -139,13 +176,15 @@ type AccentRailFrameAdapterOptions = {
139
176
 
140
177
  type MinimalistFrameAdapterOptions = {
141
178
  width: number;
179
+ baseWidth: number;
142
180
  baseRendered: string[];
143
181
  autocompleteSource: AutocompleteEditorInternals;
144
182
  autocompleteCapture?: AutocompleteCapture;
145
183
  uiTheme: Theme;
146
184
  config: ZentuiConfig;
147
185
  inputText: string;
148
- metadata: MinimalistEditorMetadata;
186
+ getMetadata: () => MinimalistEditorMetadata;
187
+ reportWorkingLineBorder: (active: boolean) => void;
149
188
  ownedFrame?: PolishedFrameSplit;
150
189
  trustedBaseFrame?: boolean;
151
190
  borderColor?: (text: string) => string;
@@ -180,10 +219,25 @@ function stripNativeRightPadding(value: string): string {
180
219
  return value.replace(/ +$/, "");
181
220
  }
182
221
 
222
+ // Mirrors the native editor's per-render padding clamp: effective horizontal
223
+ // padding never exceeds half of the rendered width.
224
+ function nativeHorizontalPadding(source: AutocompleteEditorInternals, baseWidth: number): number {
225
+ try {
226
+ if (typeof source.getPaddingX !== "function") return 0;
227
+ const padding = source.getPaddingX.call(source);
228
+ if (!Number.isFinite(padding)) return 0;
229
+ const maxPadding = Math.max(0, Math.floor((baseWidth - 1) / 2));
230
+ return Math.min(Math.max(0, Math.floor(padding)), maxPadding);
231
+ } catch {
232
+ return 0;
233
+ }
234
+ }
235
+
183
236
  function autocompleteCount(
184
237
  source: AutocompleteEditorInternals,
185
238
  capture: AutocompleteCapture | undefined,
186
239
  baseRendered: string[],
240
+ baseWidth: number,
187
241
  ): AutocompleteCount {
188
242
  try {
189
243
  const showing = source.isShowingAutocomplete;
@@ -195,13 +249,18 @@ function autocompleteCount(
195
249
  capture.rows.length >= baseRendered.length
196
250
  )
197
251
  return { known: false };
252
+ const paddingX = nativeHorizontalPadding(source, baseWidth);
253
+ const leftPadding = " ".repeat(paddingX);
198
254
  const suffix = baseRendered.slice(-capture.rows.length);
199
255
  if (
200
256
  !suffix.every((line, index) => {
201
257
  const captured = capture.rows[index];
258
+ const unpadded =
259
+ paddingX > 0 && line.startsWith(leftPadding) ? line.slice(leftPadding.length) : line;
202
260
  return (
203
261
  captured !== undefined &&
204
- (line === captured || stripNativeRightPadding(line) === stripNativeRightPadding(captured))
262
+ (line === captured ||
263
+ stripNativeRightPadding(unpadded) === stripNativeRightPadding(captured))
205
264
  );
206
265
  })
207
266
  )
@@ -212,6 +271,17 @@ function autocompleteCount(
212
271
  }
213
272
  }
214
273
 
274
+ // The native editor renders autocomplete rows wrapped in its horizontal
275
+ // padding; prefer the raw captured rows so decoration starts at column zero.
276
+ function capturedAutocompleteLines(
277
+ capture: AutocompleteCapture | undefined,
278
+ baseRendered: string[],
279
+ count: number,
280
+ ): string[] {
281
+ if (count <= 0) return [];
282
+ return capture && capture.rows.length === count ? capture.rows : baseRendered.slice(-count);
283
+ }
284
+
215
285
  /** @internal Exported only for descriptor-safety regression tests. */
216
286
  export function renderWithAutocompleteCapture<T>(
217
287
  source: AutocompleteEditorInternals,
@@ -231,7 +301,7 @@ export function renderWithAutocompleteCapture<T>(
231
301
  let own: PropertyDescriptor | undefined;
232
302
  let predecessor: (...args: unknown[]) => unknown;
233
303
  try {
234
- const candidate = source.autocompleteList;
304
+ const candidate = source.autocompleteList ?? source.debugChildren?.[0];
235
305
  if (!candidate) return { value: render() };
236
306
  own = Object.getOwnPropertyDescriptor(candidate, "render");
237
307
  const current = Reflect.get(candidate, "render");
@@ -319,6 +389,20 @@ function isLowRailPolishedStyle(style: EditorStyle): boolean {
319
389
  return style === "opencode-copy-friendly";
320
390
  }
321
391
 
392
+ function isShellModeInput(text: string): boolean {
393
+ return bashModeLabel(text) !== "";
394
+ }
395
+
396
+ export function editorWantsContext(config: ZentuiConfig): boolean {
397
+ const editor = config.components.editor;
398
+ if (!editor.enabled || editor.style === "accent-rail") return false;
399
+ if (editor.style === "minimalist")
400
+ return minimalistTemplateReferences(editor.styles.minimalist).has("context");
401
+ return collectFooterFormatReferences(
402
+ parseFooterFormat(sanitizeEditorMetadataText(editor.styles[editor.style].metadataFormat)),
403
+ ).has("context");
404
+ }
405
+
322
406
  function selectedPolishedConfig(config: ZentuiConfig) {
323
407
  switch (config.components.editor.style) {
324
408
  case "opencode":
@@ -337,23 +421,31 @@ function lowRailPrompt(config: ZentuiConfig, uiTheme: Theme, reset: string): str
337
421
  ? `${renderStyleForSourceOrFallback(
338
422
  uiTheme,
339
423
  config.components.editor.colorSource,
340
- config.colors.editorPrompt ?? config.colors.editorAccent,
424
+ componentColor(config, "editor", "prompt") ?? componentColor(config, "editor", "accent"),
341
425
  EDITOR_ACCENT_FALLBACK,
342
426
  promptIcon,
343
427
  )}${reset} `
344
428
  : "";
345
429
  }
346
430
 
347
- function getEditorChromeWidths(config: ZentuiConfig, uiTheme: Theme, reset: string) {
431
+ function getEditorChromeWidths(
432
+ config: ZentuiConfig,
433
+ uiTheme: Theme,
434
+ reset: string,
435
+ shellMode = false,
436
+ ) {
348
437
  const lowRail = isLowRailPolishedStyle(config.components.editor.style);
349
438
  const prompt = lowRailPrompt(config, uiTheme, reset);
439
+ const chromeColor = shellMode
440
+ ? editorShellColor(config)
441
+ : { color: componentColor(config, "editor", "accent"), fallback: EDITOR_ACCENT_FALLBACK };
350
442
  const rail = lowRail
351
443
  ? ""
352
444
  : `${renderStyleForSourceOrFallback(
353
445
  uiTheme,
354
446
  config.components.editor.colorSource,
355
- config.colors.editorAccent,
356
- EDITOR_ACCENT_FALLBACK,
447
+ chromeColor.color,
448
+ chromeColor.fallback,
357
449
  config.icons.rail,
358
450
  )}${reset} `;
359
451
  return {
@@ -436,7 +528,7 @@ function parseEditorBorder(
436
528
  if (/^─+$/.test(plain)) return {};
437
529
 
438
530
  const arrow = direction === "above" ? "↑" : "↓";
439
- const match = new RegExp(`^─── ${arrow} ([1-9]\\d*) more ─*$`).exec(plain);
531
+ const match = new RegExp(`^─{3,} ${arrow} ([1-9]\\d*) more ─*$`).exec(plain);
440
532
  return match?.[1] ? { count: match[1] } : undefined;
441
533
  }
442
534
 
@@ -451,10 +543,144 @@ function renderEditorBorder(
451
543
  return `${indicator}${"─".repeat(Math.max(0, width - visibleWidth(indicator)))}`;
452
544
  }
453
545
 
546
+ /** Slice native chrome in terminal cells without dropping the zero-width caret. */
547
+ function sliceEditorColumns(line: string, start: number, length: number): string | undefined {
548
+ const markerIndex = line.indexOf(CURSOR_MARKER);
549
+ if (markerIndex < 0) return sliceByColumn(line, start, length, true);
550
+ if (line.indexOf(CURSOR_MARKER, markerIndex + CURSOR_MARKER.length) >= 0) return undefined;
551
+ const before = line.slice(0, markerIndex);
552
+ const after = line.slice(markerIndex + CURSOR_MARKER.length);
553
+ const markerColumn = visibleWidth(before);
554
+ if (markerColumn < start || markerColumn > start + length) return undefined;
555
+ const beforeLength = markerColumn - start;
556
+ return (
557
+ sliceByColumn(before, start, beforeLength, true) +
558
+ CURSOR_MARKER +
559
+ sliceByColumn(after, 0, length - beforeLength, true)
560
+ );
561
+ }
562
+
563
+ type NormalizedBaseFrame = PolishedFrameSplit & { nativeFrame: boolean };
564
+
565
+ /** Both hosts feed the same unframed payload into the existing style renderers. */
566
+ function normalizeBaseFrame(
567
+ baseRendered: string[],
568
+ baseWidth: number,
569
+ source: AutocompleteEditorInternals,
570
+ capture: AutocompleteCapture | undefined,
571
+ ownedFrame: PolishedFrameSplit | undefined,
572
+ trustedBaseFrame: boolean,
573
+ ): NormalizedBaseFrame | undefined {
574
+ if (ownedFrame) return { ...ownedFrame, nativeFrame: false };
575
+ const native = getOmpEditorFrame(baseRendered);
576
+ if (native) return { ...native, viewport: {}, nativeFrame: true };
577
+ if (source.getBorderStyle?.() === "band") {
578
+ if (!trustedBaseFrame && source.getPaddingX?.() !== 0) return undefined;
579
+ const autocomplete = autocompleteCount(source, capture, baseRendered, baseWidth);
580
+ if (!autocomplete.known) return undefined;
581
+ const end = baseRendered.length - autocomplete.count;
582
+ if (end < 2) return undefined;
583
+ const editorLines: string[] = [];
584
+ for (let index = 1; index < end; index++) {
585
+ const row = baseRendered[index];
586
+ const plain = ansiStrippedText(row.replaceAll(CURSOR_MARKER, ""));
587
+ if (!plain.startsWith(index === 1 ? "╰─ " : " ")) return undefined;
588
+ const rowWidth = visibleWidth(row.replaceAll(CURSOR_MARKER, ""));
589
+ if (rowWidth < 3 || rowWidth > baseWidth) return undefined;
590
+ const content = sliceEditorColumns(row, 3, rowWidth - 3);
591
+ if (content === undefined) return undefined;
592
+ editorLines.push(content);
593
+ }
594
+ return {
595
+ editorLines,
596
+ trailingLines: capturedAutocompleteLines(capture, baseRendered, autocomplete.count),
597
+ viewport: {},
598
+ nativeFrame: true,
599
+ nativeStatusLine: baseRendered[0],
600
+ };
601
+ }
602
+ const top = ansiStrippedText(baseRendered[0] ?? "");
603
+ if (top.startsWith("╭")) {
604
+ // The native subclass explicitly selects zero padding. A predecessor with
605
+ // unknown padding is not safe to unwrap: leading spaces may be prompt text.
606
+ if (
607
+ !/^╭.*╮$/.test(top) ||
608
+ visibleWidth(top) !== baseWidth ||
609
+ top.includes(CURSOR_MARKER) ||
610
+ (typeof source.getBorderStyle === "function" && source.getBorderStyle() !== "box") ||
611
+ baseWidth < 4 ||
612
+ (!trustedBaseFrame &&
613
+ (typeof source.getPaddingX !== "function" || source.getPaddingX() !== 0))
614
+ )
615
+ return undefined;
616
+ const editorLines: string[] = [];
617
+ for (let index = 1; index < baseRendered.length; index++) {
618
+ const row = baseRendered[index] ?? "";
619
+ const plain = ansiStrippedText(row.replaceAll(CURSOR_MARKER, ""));
620
+ const rowWidth = visibleWidth(row.replaceAll(CURSOR_MARKER, ""));
621
+ const last = plain.startsWith("╰─") && plain.endsWith("╯");
622
+ if (
623
+ rowWidth < 3 ||
624
+ rowWidth > baseWidth + 1 ||
625
+ (!last && !(plain.startsWith("│") && /[│█]$/.test(plain)))
626
+ )
627
+ return undefined;
628
+ const leftWidth = last ? 2 : 1;
629
+ const content = sliceEditorColumns(row, leftWidth, rowWidth - leftWidth - 1);
630
+ if (content === undefined) return undefined;
631
+ editorLines.push(content);
632
+ if (last) {
633
+ return {
634
+ editorLines,
635
+ trailingLines: baseRendered.slice(index + 1),
636
+ viewport: {},
637
+ nativeFrame: true,
638
+ nativeStatusLine: /[^╭╮─\s]/u.test(top) ? baseRendered[0] : undefined,
639
+ };
640
+ }
641
+ }
642
+ return undefined;
643
+ }
644
+ // Other OMP composer shapes are not Pi frames, even when the source is native.
645
+ if (typeof source.getBorderStyle === "function") return undefined;
646
+ const autocomplete = autocompleteCount(source, capture, baseRendered, baseWidth);
647
+ if (!autocomplete.known) return undefined;
648
+ const frame = autocomplete.count > 0 ? baseRendered.slice(0, -autocomplete.count) : baseRendered;
649
+ if (frame.length < 2) return undefined;
650
+ const parsedTop = parseEditorBorder(frame[0] ?? "", "above");
651
+ const parsedBottom = parseEditorBorder(frame.at(-1) ?? "", "below");
652
+ if (!trustedBaseFrame && (!parsedTop || !parsedBottom)) return undefined;
653
+ return {
654
+ editorLines: frame.slice(1, -1),
655
+ trailingLines: capturedAutocompleteLines(capture, baseRendered, autocomplete.count),
656
+ viewport: { above: parsedTop?.count, below: parsedBottom?.count },
657
+ nativeFrame: false,
658
+ };
659
+ }
660
+
661
+ function rememberNormalizedMouseLayout(
662
+ lines: string[],
663
+ baseRendered: string[],
664
+ frame: NormalizedBaseFrame,
665
+ layout: Parameters<typeof rememberEditorMouseLayout>[4],
666
+ ): void {
667
+ // OMP's merged bottom has different per-row offsets and completion origins.
668
+ // Until its geometry is exposed, consume decorated clicks rather than send
669
+ // Pi coordinates to a predecessor's native input handler.
670
+ rememberEditorMouseLayout(
671
+ lines,
672
+ baseRendered,
673
+ frame.editorLines.length,
674
+ frame.trailingLines.length,
675
+ frame.nativeFrame ? { body: [], completion: [] } : layout,
676
+ );
677
+ }
678
+
454
679
  function unwrapPolishedFrameOnly(
455
680
  lines: string[],
456
681
  config: ZentuiConfig,
457
682
  uiTheme: Theme,
683
+ shellMode = false,
458
684
  ): { editorLines: string[]; viewport: ViewportCounts } | undefined {
459
685
  if (lines.length < 5) return undefined;
460
686
  const top = parseEditorBorder(lines[0] ?? "", "above");
@@ -486,7 +712,7 @@ function unwrapPolishedFrameOnly(
486
712
  return { editorLines: unwrapped, viewport };
487
713
  }
488
714
 
489
- const { rail } = getEditorChromeWidths(config, uiTheme, "\x1b[0m");
715
+ const { rail } = getEditorChromeWidths(config, uiTheme, "\x1b[0m", shellMode);
490
716
  if (!rail || interior.some((line) => !line.startsWith(rail))) return undefined;
491
717
  const unrailed = interior.map((line) => line.slice(rail.length));
492
718
  if (
@@ -501,12 +727,18 @@ function splitPolishedFrame(
501
727
  lines: string[],
502
728
  config: ZentuiConfig,
503
729
  uiTheme: Theme,
730
+ shellMode = false,
504
731
  ): PolishedFrameSplit | undefined {
505
732
  if (!parseEditorBorder(lines[0] ?? "", "above")) return undefined;
506
733
 
507
734
  for (let bottomIndex = lines.length - 1; bottomIndex >= 4; bottomIndex--) {
508
735
  if (!parseEditorBorder(lines[bottomIndex] ?? "", "below")) continue;
509
- const frame = unwrapPolishedFrameOnly(lines.slice(0, bottomIndex + 1), config, uiTheme);
736
+ const frame = unwrapPolishedFrameOnly(
737
+ lines.slice(0, bottomIndex + 1),
738
+ config,
739
+ uiTheme,
740
+ shellMode,
741
+ );
510
742
  if (frame) return { ...frame, trailingLines: lines.slice(bottomIndex + 1) };
511
743
  }
512
744
  return undefined;
@@ -528,7 +760,12 @@ function inspectPolishedFrameProvenance(
528
760
  const unsafe =
529
761
  Boolean(provenance && !provenanceMatches) ||
530
762
  LEGACY_SPLIT_POLISHED_FRAME in base ||
531
- (!ownedFrame && Boolean(splitPolishedFrame(rendered, config, uiTheme)));
763
+ // A predecessor may return cached rows from either input mode.
764
+ (!ownedFrame &&
765
+ Boolean(
766
+ splitPolishedFrame(rendered, config, uiTheme) ||
767
+ splitPolishedFrame(rendered, config, uiTheme, true),
768
+ ));
532
769
  return { safe: !unsafe, ownedFrame };
533
770
  }
534
771
 
@@ -559,7 +796,9 @@ function readVimStatus(editor: WrappedEditor, uiTheme: Theme): string | undefine
559
796
  }
560
797
 
561
798
  function renderAccentRailFrameFromBase({
799
+ codexQuota,
562
800
  width,
801
+ baseWidth,
563
802
  baseRendered,
564
803
  autocompleteSource,
565
804
  autocompleteCapture,
@@ -568,41 +807,26 @@ function renderAccentRailFrameFromBase({
568
807
  ownedFrame,
569
808
  trustedBaseFrame = false,
570
809
  }: AccentRailFrameAdapterOptions): PolishedFrameResult {
571
- if (width < ACCENT_RAIL_CHROME_WIDTH + 1 || baseRendered.length < 2) {
810
+ if (width < ACCENT_RAIL_CHROME_WIDTH + 1) {
572
811
  return { lines: clampRenderedLines(baseRendered, width), decorated: false };
573
812
  }
574
813
  if (ownedFrame && !isPolishedFrameSplit(ownedFrame, baseRendered.length)) {
575
814
  return { lines: clampRenderedLines(baseRendered, width), decorated: false };
576
815
  }
577
- const autocomplete = ownedFrame
578
- ? { known: true as const, count: ownedFrame.trailingLines.length }
579
- : autocompleteCount(autocompleteSource, autocompleteCapture, baseRendered);
580
- if (!autocomplete.known) {
581
- return { lines: clampRenderedLines(baseRendered, width), decorated: false };
582
- }
583
- const editorFrame =
584
- !ownedFrame && autocomplete.count > 0
585
- ? baseRendered.slice(0, -autocomplete.count)
586
- : baseRendered;
587
- const autocompleteLines = ownedFrame
588
- ? ownedFrame.trailingLines
589
- : autocomplete.count > 0
590
- ? baseRendered.slice(-autocomplete.count)
591
- : [];
592
- if (editorFrame.length < 2) {
593
- return { lines: clampRenderedLines(baseRendered, width), decorated: false };
594
- }
595
- const parsedTop = parseEditorBorder(editorFrame[0] ?? "", "above");
596
- const parsedBottom = parseEditorBorder(editorFrame.at(-1) ?? "", "below");
597
- if (!ownedFrame && !trustedBaseFrame && (!parsedTop || !parsedBottom)) {
598
- return { lines: clampRenderedLines(baseRendered, width), decorated: false };
599
- }
600
- const editorLines = ownedFrame?.editorLines ?? editorFrame.slice(1, -1);
601
- const viewport = ownedFrame?.viewport ?? {
602
- above: parsedTop?.count,
603
- below: parsedBottom?.count,
604
- };
816
+ const frame = normalizeBaseFrame(
817
+ baseRendered,
818
+ baseWidth,
819
+ autocompleteSource,
820
+ autocompleteCapture,
821
+ ownedFrame,
822
+ trustedBaseFrame,
823
+ );
824
+ if (!frame) return { lines: clampRenderedLines(baseRendered, width), decorated: false };
825
+ const { editorLines, trailingLines: autocompleteLines, viewport } = frame;
826
+ const quotaRow = renderCodexQuota(codexQuota, uiTheme, config, "editor");
827
+ const quotaVisible = quotaRow && visibleWidth(quotaRow) <= width - ACCENT_RAIL_CHROME_WIDTH;
605
828
  const renderedLines = renderAccentRailEditorFrame({
829
+ codexQuota,
606
830
  width,
607
831
  editorLines,
608
832
  autocompleteLines,
@@ -611,77 +835,97 @@ function renderAccentRailFrameFromBase({
611
835
  config,
612
836
  });
613
837
  const lines = renderedLines.length === 1 ? ["", ...renderedLines, ""] : renderedLines;
838
+ if (frame.nativeStatusLine !== undefined) lines.unshift(frame.nativeStatusLine);
839
+ const bodyStart =
840
+ (renderedLines.length === 1 ? 1 : 0) +
841
+ (config.components.editor.viewportIndicators && viewport.above ? 1 : 0);
842
+ rememberNormalizedMouseLayout(lines, baseRendered, frame, {
843
+ body: editorMouseCells(editorLines.length, ACCENT_RAIL_CHROME_WIDTH, bodyStart),
844
+ completion: editorMouseCells(
845
+ autocompleteLines.length,
846
+ 0,
847
+ bodyStart +
848
+ editorLines.length +
849
+ (quotaVisible ? 1 : 0) +
850
+ (config.components.editor.viewportIndicators && viewport.below ? 1 : 0),
851
+ ),
852
+ });
614
853
  POLISHED_FRAME_SPLITS.set(lines, {
615
854
  rows: Object.freeze([...lines]),
616
- split: { editorLines, trailingLines: autocompleteLines, viewport },
855
+ split: {
856
+ editorLines,
857
+ trailingLines: autocompleteLines,
858
+ viewport,
859
+ nativeStatusLine: frame.nativeStatusLine,
860
+ },
617
861
  });
618
862
  return { lines, decorated: true };
619
863
  }
620
864
 
621
865
  function renderMinimalistFrameFromBase({
622
866
  width,
867
+ baseWidth,
623
868
  baseRendered,
624
869
  autocompleteSource,
625
870
  autocompleteCapture,
626
871
  uiTheme,
627
872
  config,
628
873
  inputText,
629
- metadata,
874
+ getMetadata,
875
+ reportWorkingLineBorder,
630
876
  ownedFrame,
631
877
  trustedBaseFrame = false,
632
878
  borderColor,
633
879
  }: MinimalistFrameAdapterOptions): PolishedFrameResult {
634
- if (width <= 4 || baseRendered.length < 2) {
880
+ if (width <= 4) {
635
881
  return { lines: clampRenderedLines(baseRendered, width), decorated: false };
636
882
  }
637
883
  if (ownedFrame && !isPolishedFrameSplit(ownedFrame, baseRendered.length)) {
638
884
  return { lines: clampRenderedLines(baseRendered, width), decorated: false };
639
885
  }
640
- const autocomplete = ownedFrame
641
- ? { known: true as const, count: ownedFrame.trailingLines.length }
642
- : autocompleteCount(autocompleteSource, autocompleteCapture, baseRendered);
643
- if (!autocomplete.known) {
644
- return { lines: clampRenderedLines(baseRendered, width), decorated: false };
645
- }
646
- const editorFrame =
647
- !ownedFrame && autocomplete.count > 0
648
- ? baseRendered.slice(0, -autocomplete.count)
649
- : baseRendered;
650
- const autocompleteLines = ownedFrame
651
- ? ownedFrame.trailingLines
652
- : autocomplete.count > 0
653
- ? baseRendered.slice(-autocomplete.count)
654
- : [];
655
- if (editorFrame.length < 2) {
656
- return { lines: clampRenderedLines(baseRendered, width), decorated: false };
657
- }
658
- const parsedTop = parseEditorBorder(editorFrame[0] ?? "", "above");
659
- const parsedBottom = parseEditorBorder(editorFrame.at(-1) ?? "", "below");
660
- if (!ownedFrame && !trustedBaseFrame && (!parsedTop || !parsedBottom)) {
661
- return { lines: clampRenderedLines(baseRendered, width), decorated: false };
662
- }
663
- const viewport = ownedFrame?.viewport ?? {
664
- above: parsedTop?.count,
665
- below: parsedBottom?.count,
666
- };
667
- return {
668
- lines: renderMinimalistFrame({
669
- width,
670
- editorLines: ownedFrame?.editorLines ?? editorFrame.slice(1, -1),
671
- autocompleteLines,
672
- viewport: config.components.editor.viewportIndicators ? viewport : undefined,
673
- inputText,
674
- metadata,
675
- uiTheme,
676
- config,
677
- borderColor,
678
- }),
679
- decorated: true,
680
- };
886
+ const frame = normalizeBaseFrame(
887
+ baseRendered,
888
+ baseWidth,
889
+ autocompleteSource,
890
+ autocompleteCapture,
891
+ ownedFrame,
892
+ trustedBaseFrame,
893
+ );
894
+ if (!frame) return { lines: clampRenderedLines(baseRendered, width), decorated: false };
895
+ const { editorLines, trailingLines: autocompleteLines, viewport } = frame;
896
+ // Publish safe geometry before reading the controller-gated Working frame.
897
+ reportWorkingLineBorder(
898
+ width >= MIN_WORKING_LINE_BORDER_WIDTH &&
899
+ Boolean(
900
+ ownedFrame ||
901
+ frame.nativeFrame ||
902
+ (typeof autocompleteSource.isShowingAutocomplete === "function" &&
903
+ autocompleteCapture?.compatible),
904
+ ),
905
+ );
906
+ const metadata = getMetadata();
907
+ const lines = renderMinimalistFrame({
908
+ width,
909
+ editorLines,
910
+ autocompleteLines,
911
+ viewport: config.components.editor.viewportIndicators ? viewport : undefined,
912
+ inputText,
913
+ metadata,
914
+ uiTheme,
915
+ config,
916
+ borderColor,
917
+ });
918
+ if (frame.nativeStatusLine !== undefined) lines.unshift(frame.nativeStatusLine);
919
+ rememberNormalizedMouseLayout(lines, baseRendered, frame, {
920
+ body: editorMouseCells(editorLines.length, 2, 1),
921
+ completion: editorMouseCells(autocompleteLines.length, 2, editorLines.length + 2),
922
+ });
923
+ return { lines, decorated: true };
681
924
  }
682
925
 
683
926
  function renderPolishedFrame({
684
927
  width,
928
+ baseWidth,
685
929
  baseRendered,
686
930
  autocompleteSource,
687
931
  autocompleteCapture,
@@ -690,48 +934,40 @@ function renderPolishedFrame({
690
934
  modelMeta,
691
935
  thinkingLevel,
692
936
  rightStatus,
937
+ shellMode = false,
693
938
  ownedFrame,
694
939
  trustedBaseFrame = false,
940
+ getWorkingLineFrame,
941
+ reportWorkingLineBorder,
695
942
  borderColor,
696
943
  }: PolishedFrameOptions): PolishedFrameResult {
697
944
  if (width <= 2) return { lines: clampRenderedLines(baseRendered, width), decorated: false };
698
945
 
699
- if (baseRendered.length < 2) {
700
- return { lines: clampRenderedLines(baseRendered, width), decorated: false };
701
- }
702
946
  if (ownedFrame && !isPolishedFrameSplit(ownedFrame, baseRendered.length)) {
703
947
  return { lines: clampRenderedLines(baseRendered, width), decorated: false };
704
948
  }
705
949
 
706
- const autocomplete = ownedFrame
707
- ? { known: true, count: ownedFrame.trailingLines.length }
708
- : autocompleteCount(autocompleteSource, autocompleteCapture, baseRendered);
709
- if (!autocomplete.known) {
710
- return { lines: clampRenderedLines(baseRendered, width), decorated: false };
711
- }
712
- const editorFrame =
713
- !ownedFrame && autocomplete.count > 0
714
- ? baseRendered.slice(0, -autocomplete.count)
715
- : baseRendered;
716
- const autocompleteLines = ownedFrame
717
- ? ownedFrame.trailingLines
718
- : autocomplete.count > 0
719
- ? baseRendered.slice(-autocomplete.count)
720
- : [];
721
- if (editorFrame.length < 2) {
722
- return { lines: clampRenderedLines(baseRendered, width), decorated: false };
723
- }
724
-
725
- const parsedTop = parseEditorBorder(editorFrame[0] ?? "", "above");
726
- const parsedBottom = parseEditorBorder(editorFrame.at(-1) ?? "", "below");
727
- if (!ownedFrame && !trustedBaseFrame && (!parsedTop || !parsedBottom)) {
728
- return { lines: clampRenderedLines(baseRendered, width), decorated: false };
729
- }
730
- const editorLines = ownedFrame?.editorLines ?? editorFrame.slice(1, -1);
731
- const viewport = ownedFrame?.viewport ?? {
732
- above: parsedTop?.count,
733
- below: parsedBottom?.count,
734
- };
950
+ const frame = normalizeBaseFrame(
951
+ baseRendered,
952
+ baseWidth,
953
+ autocompleteSource,
954
+ autocompleteCapture,
955
+ ownedFrame,
956
+ trustedBaseFrame,
957
+ );
958
+ if (!frame) return { lines: clampRenderedLines(baseRendered, width), decorated: false };
959
+ const { editorLines, trailingLines: autocompleteLines, viewport } = frame;
960
+ // Publish safe geometry before reading the controller-gated Working frame.
961
+ reportWorkingLineBorder(
962
+ width >= MIN_WORKING_LINE_BORDER_WIDTH &&
963
+ Boolean(
964
+ ownedFrame ||
965
+ frame.nativeFrame ||
966
+ (typeof autocompleteSource.isShowingAutocomplete === "function" &&
967
+ autocompleteCapture?.compatible),
968
+ ),
969
+ );
970
+ const workingLineFrame = getWorkingLineFrame();
735
971
  const lines = renderPolishedEditorFrame({
736
972
  width,
737
973
  editorLines,
@@ -742,14 +978,27 @@ function renderPolishedFrame({
742
978
  modelMeta,
743
979
  thinkingLevel,
744
980
  rightStatus,
981
+ workingLineFrame,
982
+ shellMode,
745
983
  borderColor,
746
984
  });
985
+ if (frame.nativeStatusLine !== undefined) lines.unshift(frame.nativeStatusLine);
986
+ const { railWidth } = getEditorChromeWidths(config, uiTheme, "\x1b[0m", shellMode);
987
+ const completionCount =
988
+ selectedPolishedConfig(config)?.completionMenu === "palette"
989
+ ? omitTrailingNativeCompletionCountRow(autocompleteLines).length
990
+ : autocompleteLines.length;
991
+ rememberNormalizedMouseLayout(lines, baseRendered, frame, {
992
+ body: editorMouseCells(editorLines.length, railWidth, 2),
993
+ completion: editorMouseCells(completionCount, 0, editorLines.length + 5),
994
+ });
747
995
  POLISHED_FRAME_SPLITS.set(lines, {
748
996
  rows: Object.freeze([...lines]),
749
997
  split: {
750
998
  editorLines,
751
999
  trailingLines: autocompleteLines,
752
1000
  viewport,
1001
+ nativeStatusLine: frame.nativeStatusLine,
753
1002
  },
754
1003
  });
755
1004
  return { lines, decorated: true };
@@ -766,33 +1015,61 @@ export function renderPolishedEditorFrame({
766
1015
  modelMeta,
767
1016
  thinkingLevel,
768
1017
  rightStatus,
1018
+ workingLineFrame,
1019
+ shellMode = false,
769
1020
  borderColor,
770
1021
  }: PolishedEditorFrameOptions): string[] {
771
1022
  if (width <= 2) return clampRenderedLines(editorLines, width);
772
1023
  const reset = "\x1b[0m";
773
1024
  const colorSource = config.components.editor.colorSource;
774
- const { prompt, promptWidth, rail, railWidth } = getEditorChromeWidths(config, uiTheme, reset);
775
- const innerWidth = Math.max(0, width - railWidth);
776
- const lowRailContinuation = " ".repeat(promptWidth);
777
- const metadataZones = renderEditorMetadataFormatSplit(
778
- selectedPolishedConfig(config)?.metadataFormat ??
779
- config.components.editor.styles.opencode.metadataFormat,
780
- {
781
- model: modelMeta.modelLabel,
782
- modelId: modelMeta.modelId ?? "",
783
- modelName: modelMeta.modelName ?? "",
784
- provider: modelMeta.providerLabel,
785
- thinking: thinkingLevel ?? "",
786
- sessionName: modelMeta.sessionName ?? "",
787
- contextPercent: modelMeta.contextPercent,
788
- contextWindow: modelMeta.contextWindow,
789
- inputTokens: modelMeta.inputTokens,
790
- outputTokens: modelMeta.outputTokens,
791
- cacheHitRate: modelMeta.cacheHitRate,
792
- },
793
- uiTheme,
1025
+ const { prompt, promptWidth, rail, railWidth } = getEditorChromeWidths(
794
1026
  config,
1027
+ uiTheme,
1028
+ reset,
1029
+ shellMode,
795
1030
  );
1031
+ const innerWidth = Math.max(0, width - railWidth);
1032
+ const lowRailContinuation = " ".repeat(promptWidth);
1033
+ const renderMetadata = (codexQuota?: CodexQuota, includeCustom = true) =>
1034
+ renderEditorMetadataFormatSplit(
1035
+ selectedPolishedConfig(config)?.metadataFormat ??
1036
+ config.components.editor.styles.opencode.metadataFormat,
1037
+ {
1038
+ codexQuota,
1039
+ model: modelMeta.modelLabel,
1040
+ modelId: modelMeta.modelId ?? "",
1041
+ modelName: modelMeta.modelName ?? "",
1042
+ provider: modelMeta.providerLabel,
1043
+ thinking: thinkingLevel ?? "",
1044
+ fastMode: modelMeta.fastMode,
1045
+ sessionName: modelMeta.sessionName ?? "",
1046
+ contextPercent: modelMeta.contextPercent,
1047
+ contextWindow: modelMeta.contextWindow,
1048
+ inputTokens: modelMeta.inputTokens,
1049
+ outputTokens: modelMeta.outputTokens,
1050
+ cacheHitRate: modelMeta.cacheHitRate,
1051
+ customVariables: includeCustom ? modelMeta.customVariables : undefined,
1052
+ hostTemplateValues: modelMeta.hostTemplateValues,
1053
+ },
1054
+ uiTheme,
1055
+ config,
1056
+ shellMode,
1057
+ );
1058
+ let metadataZones = renderMetadata(modelMeta.codexQuota);
1059
+ // Quota is atomic: never clip away its labels or trailing stale warning.
1060
+ const metadataBudget = isLowRailPolishedStyle(config.components.editor.style)
1061
+ ? width - 1
1062
+ : innerWidth;
1063
+ const naturalWidth = () =>
1064
+ Object.values(metadataZones).reduce((sum, zone) => sum + visibleWidth(zone), 0) +
1065
+ Object.values(metadataZones).filter(Boolean).length -
1066
+ 1 +
1067
+ (rightStatus ? visibleWidth(rightStatus) + 1 : 0);
1068
+ // Configured extension values yield whole before any built-in metadata is cropped.
1069
+ const includeCustom = naturalWidth() <= metadataBudget;
1070
+ if (!includeCustom) metadataZones = renderMetadata(modelMeta.codexQuota, false);
1071
+ if (modelMeta.codexQuota && naturalWidth() > metadataBudget)
1072
+ metadataZones = renderMetadata(undefined, includeCustom);
796
1073
  const lowRailMeta = composeEditorMetadataLine(metadataZones, rightStatus, Math.max(0, width - 1));
797
1074
  const railedMeta = composeEditorMetadataLine(metadataZones, rightStatus, innerWidth);
798
1075
 
@@ -800,7 +1077,7 @@ export function renderPolishedEditorFrame({
800
1077
  renderStyleForSourceOrFallback(
801
1078
  uiTheme,
802
1079
  colorSource,
803
- config.colors.editorBorder,
1080
+ componentColor(config, "editor", "border"),
804
1081
  EDITOR_BORDER_FALLBACK,
805
1082
  text,
806
1083
  );
@@ -818,13 +1095,23 @@ export function renderPolishedEditorFrame({
818
1095
  return renderStaticBorder(text);
819
1096
  }
820
1097
  };
821
- const top = renderBorder(
1098
+ let top = renderBorder(
822
1099
  renderEditorBorder(
823
1100
  width,
824
1101
  "above",
825
1102
  config.components.editor.viewportIndicators ? viewport.above : undefined,
826
1103
  ),
827
1104
  );
1105
+ if (workingLineFrame && width >= MIN_WORKING_LINE_BORDER_WIDTH) {
1106
+ const label = truncateToWidth(workingLineFrame, width - 6, "…");
1107
+ top = `${renderBorder("── ")}${label}${renderBorder(
1108
+ ` ${renderEditorBorder(
1109
+ width - visibleWidth(label) - 4,
1110
+ "above",
1111
+ config.components.editor.viewportIndicators ? viewport.above : undefined,
1112
+ )}`,
1113
+ )}`;
1114
+ }
828
1115
  const bottom = renderBorder(
829
1116
  renderEditorBorder(
830
1117
  width,
@@ -874,6 +1161,11 @@ export class PolishedEditor extends CustomEditor {
874
1161
  private readonly getConfig: () => ZentuiConfig;
875
1162
  private readonly uiTheme: Theme;
876
1163
 
1164
+ private readonly mouse = new EditorMouseForwarder();
1165
+ private workingLineBorderCapable = false;
1166
+ private metadataDecorated = false;
1167
+ private metadataDecoratedStyle?: EditorStyle;
1168
+
877
1169
  constructor(
878
1170
  tui: TUI,
879
1171
  theme: EditorTheme,
@@ -884,8 +1176,12 @@ export class PolishedEditor extends CustomEditor {
884
1176
  getThinkingLevel: () => string | undefined,
885
1177
  getMinimalistMetadata: () => MinimalistEditorMetadata = () => ({ cwd: "" }),
886
1178
  onMinimalistDecorationChange: (active: boolean) => void = () => {},
1179
+ private readonly onWorkingLineBorderCapabilityChange: () => void = () => {},
1180
+ private readonly onMetadataDecorationChange: () => void = () => {},
887
1181
  ) {
888
1182
  super(tui, theme, keybindings, { paddingX: 0 });
1183
+ // OMP accepts the legacy constructor but ignores its options argument.
1184
+ this.setPaddingX(0);
889
1185
  this.borderColor = (text: string) => safeThemeFg(uiTheme, "border", text);
890
1186
  this.uiTheme = uiTheme;
891
1187
  this.getConfig = getConfig;
@@ -893,35 +1189,117 @@ export class PolishedEditor extends CustomEditor {
893
1189
  this.getThinkingLevel = getThinkingLevel;
894
1190
  this.getMinimalistMetadata = getMinimalistMetadata;
895
1191
  this.onMinimalistDecorationChange = onMinimalistDecorationChange;
1192
+ // Pi defines focused as an instance field; observe its public focus lifecycle
1193
+ // without shadowing the native cursor's value with a prototype accessor.
1194
+ let focused = this.focused;
1195
+ Object.defineProperty(this, "focused", {
1196
+ configurable: true,
1197
+ enumerable: true,
1198
+ get: () => focused,
1199
+ set: (value: boolean) => {
1200
+ focused = value;
1201
+ if (!value) this.reportWorkingLineBorder(false);
1202
+ },
1203
+ });
1204
+ // Resolve subclass prototype overrides before installing the instance adapter.
1205
+ // Their super call reaches the native prototype directly, so translate once.
1206
+ const handleMouse = (this as unknown as { handleMouse?: EditorMouseHandler }).handleMouse;
1207
+ if (typeof handleMouse === "function") {
1208
+ Object.defineProperty(this, "handleMouse", {
1209
+ value: (event: Parameters<EditorMouseHandler>[0]) =>
1210
+ this.mouse.forward(this, handleMouse, event),
1211
+ writable: true,
1212
+ configurable: true,
1213
+ });
1214
+ }
1215
+ }
1216
+
1217
+ /** OMP's native tree adapter falls back to render() for a null description. */
1218
+ describe(): null {
1219
+ return null;
1220
+ }
1221
+
1222
+ isMetadataDecorated(): boolean {
1223
+ return (
1224
+ this.metadataDecorated &&
1225
+ this.metadataDecoratedStyle === this.getConfig().components.editor.style
1226
+ );
1227
+ }
1228
+ private reportMetadataDecoration(active: boolean): void {
1229
+ const style = active ? this.getConfig().components.editor.style : undefined;
1230
+ if (this.metadataDecorated === active && this.metadataDecoratedStyle === style) return;
1231
+ this.metadataDecorated = active;
1232
+ this.metadataDecoratedStyle = style;
1233
+ this.onMetadataDecorationChange();
896
1234
  }
897
1235
 
898
1236
  private reportMinimalistDecoration(active: boolean): void {
899
1237
  this.onMinimalistDecorationChange(active);
900
1238
  }
901
1239
 
1240
+ private renderBase(width: number): string[] {
1241
+ return this.mouse.baseRendered(
1242
+ width,
1243
+ renderWithOmpEditorFrame(this as unknown as AutocompleteEditorInternals, width, () =>
1244
+ super.render(width),
1245
+ ),
1246
+ );
1247
+ }
1248
+
1249
+ canEmbedWorkingLineBorder(): boolean {
1250
+ return this.focused && this.workingLineBorderCapable;
1251
+ }
1252
+
1253
+ private reportWorkingLineBorder = (active: boolean): void => {
1254
+ active = active && this.focused;
1255
+ if (this.workingLineBorderCapable === active) return;
1256
+ this.workingLineBorderCapable = active;
1257
+ this.onWorkingLineBorderCapabilityChange();
1258
+ };
1259
+
1260
+ private renderFallback(lines: string[], width: number): string[] {
1261
+ this.reportMetadataDecoration(false);
1262
+ this.reportWorkingLineBorder(false);
1263
+ return clampRenderedLines(lines, width);
1264
+ }
1265
+
902
1266
  render(width: number): string[] {
1267
+ try {
1268
+ return this.mouse.rendered(this.renderDecorated(width));
1269
+ } catch (error) {
1270
+ this.reportMetadataDecoration(false);
1271
+ this.reportWorkingLineBorder(false);
1272
+ throw error;
1273
+ }
1274
+ }
1275
+
1276
+ private renderDecorated(width: number): string[] {
903
1277
  const config = this.getConfig();
904
1278
  if (!config.components.editor.enabled) {
905
1279
  this.reportMinimalistDecoration(false);
906
- return clampRenderedLines(super.render(width), width);
1280
+ return this.renderFallback(this.renderBase(width), width);
907
1281
  }
908
1282
  if (config.components.editor.style === "accent-rail") {
1283
+ this.reportMetadataDecoration(false);
1284
+ this.reportWorkingLineBorder(false);
909
1285
  this.reportMinimalistDecoration(false);
910
1286
  if (width < ACCENT_RAIL_CHROME_WIDTH + 1) {
911
- return clampRenderedLines(super.render(width), width);
1287
+ return this.renderFallback(this.renderBase(width), width);
912
1288
  }
913
1289
  let captured: { value: string[]; capture?: AutocompleteCapture };
914
1290
  try {
915
1291
  captured = renderWithAutocompleteCapture(
916
1292
  this as unknown as AutocompleteEditorInternals,
917
- () => super.render(width - ACCENT_RAIL_CHROME_WIDTH),
1293
+ () => this.renderBase(width - ACCENT_RAIL_CHROME_WIDTH),
918
1294
  );
919
1295
  } catch {
920
- return clampRenderedLines(super.render(width), width);
1296
+ return this.renderFallback(this.renderBase(width), width);
921
1297
  }
922
1298
  try {
923
1299
  const result = renderAccentRailFrameFromBase({
1300
+ codexQuota: this.getModelMeta().codexQuota,
924
1301
  width,
1302
+ baseWidth: width - ACCENT_RAIL_CHROME_WIDTH,
925
1303
  baseRendered: captured.value,
926
1304
  autocompleteSource: this as unknown as AutocompleteEditorInternals,
927
1305
  autocompleteCapture: captured.capture,
@@ -933,86 +1311,104 @@ export class PolishedEditor extends CustomEditor {
933
1311
  } catch {
934
1312
  // Decoration is optional; preserve the completed same-render rows below.
935
1313
  }
936
- return clampRenderedLines(captured.value, width);
1314
+ return this.renderFallback(captured.value, width);
937
1315
  }
938
1316
  if (config.components.editor.style === "minimalist") {
939
1317
  if (width <= 4) {
940
1318
  this.reportMinimalistDecoration(false);
941
- return clampRenderedLines(super.render(width), width);
1319
+ return this.renderFallback(this.renderBase(width), width);
942
1320
  }
943
1321
  let captured: { value: string[]; capture?: AutocompleteCapture };
944
1322
  try {
945
1323
  captured = renderWithAutocompleteCapture(
946
1324
  this as unknown as AutocompleteEditorInternals,
947
- () => super.render(Math.max(0, width - 4)),
1325
+ () => this.renderBase(Math.max(0, width - 4)),
948
1326
  );
949
1327
  } catch {
950
1328
  this.reportMinimalistDecoration(false);
951
- return clampRenderedLines(super.render(width), width);
1329
+ return this.renderFallback(this.renderBase(width), width);
952
1330
  }
953
1331
  try {
954
1332
  const result = renderMinimalistFrameFromBase({
955
1333
  width,
1334
+ baseWidth: Math.max(0, width - 4),
956
1335
  baseRendered: captured.value,
957
1336
  autocompleteSource: this as unknown as AutocompleteEditorInternals,
958
1337
  autocompleteCapture: captured.capture,
959
1338
  uiTheme: this.uiTheme,
960
1339
  config,
961
1340
  inputText: this.getText(),
962
- metadata: this.getMinimalistMetadata(),
1341
+ getMetadata: this.getMinimalistMetadata,
1342
+ reportWorkingLineBorder: this.reportWorkingLineBorder,
963
1343
  trustedBaseFrame: true,
964
1344
  borderColor: this.borderColor,
965
1345
  });
1346
+ this.reportMetadataDecoration(result.decorated);
966
1347
  this.reportMinimalistDecoration(result.decorated);
1348
+ if (!result.decorated) this.reportWorkingLineBorder(false);
967
1349
  return result.lines;
968
1350
  } catch {
969
1351
  this.reportMinimalistDecoration(false);
970
- return clampRenderedLines(captured.value, width);
1352
+ return this.renderFallback(captured.value, width);
971
1353
  }
972
1354
  }
973
1355
  this.reportMinimalistDecoration(false);
974
1356
  if (width <= 2) {
975
- return clampRenderedLines(super.render(width), width);
1357
+ return this.renderFallback(this.renderBase(width), width);
976
1358
  }
977
1359
 
978
- const { railWidth } = getEditorChromeWidths(config, this.uiTheme, "\x1b[0m");
1360
+ const shellMode = isShellModeInput(this.getText());
1361
+ const { railWidth } = getEditorChromeWidths(config, this.uiTheme, "\x1b[0m", shellMode);
979
1362
  const innerWidth = Math.max(0, width - railWidth);
980
1363
  let captured: { value: string[]; capture?: AutocompleteCapture };
981
1364
  try {
982
1365
  captured = renderWithAutocompleteCapture(this as unknown as AutocompleteEditorInternals, () =>
983
- super.render(innerWidth),
1366
+ this.renderBase(innerWidth),
984
1367
  );
985
1368
  } catch {
986
- return clampRenderedLines(super.render(width), width);
1369
+ return this.renderFallback(this.renderBase(width), width);
987
1370
  }
988
1371
  try {
989
1372
  const result = renderPolishedFrame({
990
1373
  width,
1374
+ baseWidth: innerWidth,
991
1375
  baseRendered: captured.value,
992
1376
  autocompleteSource: this as unknown as AutocompleteEditorInternals,
993
1377
  autocompleteCapture: captured.capture,
994
1378
  uiTheme: this.uiTheme,
995
1379
  config,
996
1380
  modelMeta: this.getModelMeta(),
1381
+ getWorkingLineFrame: () => this.getMinimalistMetadata().workingLineFrame,
1382
+ reportWorkingLineBorder: this.reportWorkingLineBorder,
997
1383
  thinkingLevel: this.getThinkingLevel(),
1384
+ shellMode,
998
1385
  trustedBaseFrame: true,
999
1386
  borderColor: this.borderColor,
1000
1387
  });
1001
- if (result.decorated) return result.lines;
1388
+ if (result.decorated) {
1389
+ this.reportMetadataDecoration(true);
1390
+ return result.lines;
1391
+ }
1002
1392
  } catch {
1003
1393
  // Decoration is optional; preserve the completed same-render rows below.
1004
1394
  }
1005
- return clampRenderedLines(captured.value, width);
1395
+ return this.renderFallback(captured.value, width);
1006
1396
  }
1007
1397
  }
1008
1398
 
1009
1399
  export class WrappedPolishedEditor implements EditorComponent {
1400
+ declare readonly handleMouse?: EditorMouseHandler;
1010
1401
  declare readonly addToHistory?: (text: string) => void;
1011
1402
  declare readonly insertTextAtCursor?: (text: string) => void;
1012
1403
  declare readonly setAutocompleteProvider?: (provider: AutocompleteProvider) => void;
1013
1404
  declare readonly setPaddingX?: (padding: number) => void;
1014
1405
  declare readonly setAutocompleteMaxVisible?: (maxVisible: number) => void;
1015
1406
 
1407
+ private readonly mouse = new EditorMouseForwarder();
1408
+ private workingLineBorderCapable = false;
1409
+ private metadataDecorated = false;
1410
+ private metadataDecoratedStyle?: EditorStyle;
1411
+
1016
1412
  constructor(
1017
1413
  private readonly base: WrappedEditor,
1018
1414
  private readonly uiTheme: Theme,
@@ -1021,7 +1417,15 @@ export class WrappedPolishedEditor implements EditorComponent {
1021
1417
  private readonly getThinkingLevel: () => string | undefined,
1022
1418
  private readonly getMinimalistMetadata: () => MinimalistEditorMetadata = () => ({ cwd: "" }),
1023
1419
  private readonly onMinimalistDecorationChange: (active: boolean) => void = () => {},
1420
+ private readonly onWorkingLineBorderCapabilityChange: () => void = () => {},
1421
+ private readonly onMetadataDecorationChange: () => void = () => {},
1024
1422
  ) {
1423
+ if (typeof base.handleMouse === "function") {
1424
+ this.handleMouse = (event) => {
1425
+ const handler = base.handleMouse;
1426
+ return typeof handler === "function" ? this.mouse.forward(base, handler, event) : undefined;
1427
+ };
1428
+ }
1025
1429
  if (typeof base.addToHistory === "function") {
1026
1430
  this.addToHistory = (text) => base.addToHistory?.(text);
1027
1431
  }
@@ -1043,7 +1447,11 @@ export class WrappedPolishedEditor implements EditorComponent {
1043
1447
  return Boolean(this.base.focused);
1044
1448
  }
1045
1449
  set focused(value: boolean) {
1046
- this.base.focused = value;
1450
+ try {
1451
+ this.base.focused = value;
1452
+ } finally {
1453
+ if (!value) this.reportWorkingLineBorder(false);
1454
+ }
1047
1455
  }
1048
1456
 
1049
1457
  get borderColor(): ((str: string) => string) | undefined {
@@ -1116,28 +1524,75 @@ export class WrappedPolishedEditor implements EditorComponent {
1116
1524
  this.base.disableSubmit = value;
1117
1525
  }
1118
1526
 
1527
+ isMetadataDecorated(): boolean {
1528
+ return (
1529
+ this.metadataDecorated &&
1530
+ this.metadataDecoratedStyle === this.getConfig().components.editor.style
1531
+ );
1532
+ }
1533
+ private reportMetadataDecoration(active: boolean): void {
1534
+ const style = active ? this.getConfig().components.editor.style : undefined;
1535
+ if (this.metadataDecorated === active && this.metadataDecoratedStyle === style) return;
1536
+ this.metadataDecorated = active;
1537
+ this.metadataDecoratedStyle = style;
1538
+ this.onMetadataDecorationChange();
1539
+ }
1540
+
1119
1541
  private reportMinimalistDecoration(active: boolean): void {
1120
1542
  this.onMinimalistDecorationChange(active);
1121
1543
  }
1122
1544
 
1545
+ private renderBase(width: number): string[] {
1546
+ return this.mouse.baseRendered(width, this.base.render(width));
1547
+ }
1548
+
1549
+ canEmbedWorkingLineBorder(): boolean {
1550
+ return this.focused && this.workingLineBorderCapable;
1551
+ }
1552
+
1553
+ private reportWorkingLineBorder = (active: boolean): void => {
1554
+ active = active && this.focused;
1555
+ if (this.workingLineBorderCapable === active) return;
1556
+ this.workingLineBorderCapable = active;
1557
+ this.onWorkingLineBorderCapabilityChange();
1558
+ };
1559
+
1560
+ private renderFallback(lines: string[], width: number): string[] {
1561
+ this.reportMetadataDecoration(false);
1562
+ this.reportWorkingLineBorder(false);
1563
+ return clampRenderedLines(lines, width);
1564
+ }
1565
+
1123
1566
  render(width: number): string[] {
1567
+ try {
1568
+ return this.mouse.rendered(this.renderDecorated(width));
1569
+ } catch (error) {
1570
+ this.reportMetadataDecoration(false);
1571
+ this.reportWorkingLineBorder(false);
1572
+ throw error;
1573
+ }
1574
+ }
1575
+
1576
+ private renderDecorated(width: number): string[] {
1124
1577
  const config = this.getConfig();
1125
1578
  if (!config.components.editor.enabled) {
1126
1579
  this.reportMinimalistDecoration(false);
1127
- return clampRenderedLines(this.base.render(width), width);
1580
+ return this.renderFallback(this.renderBase(width), width);
1128
1581
  }
1129
1582
  if (config.components.editor.style === "accent-rail") {
1583
+ this.reportMetadataDecoration(false);
1584
+ this.reportWorkingLineBorder(false);
1130
1585
  this.reportMinimalistDecoration(false);
1131
1586
  if (width < ACCENT_RAIL_CHROME_WIDTH + 1) {
1132
- return clampRenderedLines(this.base.render(width), width);
1587
+ return this.renderFallback(this.renderBase(width), width);
1133
1588
  }
1134
1589
  let captured: { value: string[]; capture?: AutocompleteCapture };
1135
1590
  try {
1136
1591
  captured = renderWithAutocompleteCapture(this.base, () =>
1137
- this.base.render(width - ACCENT_RAIL_CHROME_WIDTH),
1592
+ this.renderBase(width - ACCENT_RAIL_CHROME_WIDTH),
1138
1593
  );
1139
1594
  } catch {
1140
- return clampRenderedLines(this.base.render(width), width);
1595
+ return this.renderFallback(this.renderBase(width), width);
1141
1596
  }
1142
1597
  try {
1143
1598
  const provenance = inspectPolishedFrameProvenance(
@@ -1148,7 +1603,9 @@ export class WrappedPolishedEditor implements EditorComponent {
1148
1603
  );
1149
1604
  if (provenance.safe) {
1150
1605
  const result = renderAccentRailFrameFromBase({
1606
+ codexQuota: this.getModelMeta().codexQuota,
1151
1607
  width,
1608
+ baseWidth: width - ACCENT_RAIL_CHROME_WIDTH,
1152
1609
  baseRendered: captured.value,
1153
1610
  autocompleteSource: this.base,
1154
1611
  autocompleteCapture: captured.capture,
@@ -1161,21 +1618,21 @@ export class WrappedPolishedEditor implements EditorComponent {
1161
1618
  } catch {
1162
1619
  // Decoration is optional; preserve the completed same-render rows below.
1163
1620
  }
1164
- return clampRenderedLines(captured.value, width);
1621
+ return this.renderFallback(captured.value, width);
1165
1622
  }
1166
1623
  if (config.components.editor.style === "minimalist") {
1167
1624
  if (width <= 4) {
1168
1625
  this.reportMinimalistDecoration(false);
1169
- return clampRenderedLines(this.base.render(width), width);
1626
+ return this.renderFallback(this.renderBase(width), width);
1170
1627
  }
1171
1628
  let captured: { value: string[]; capture?: AutocompleteCapture };
1172
1629
  try {
1173
1630
  captured = renderWithAutocompleteCapture(this.base, () =>
1174
- this.base.render(Math.max(0, width - 4)),
1631
+ this.renderBase(Math.max(0, width - 4)),
1175
1632
  );
1176
1633
  } catch {
1177
1634
  this.reportMinimalistDecoration(false);
1178
- return clampRenderedLines(this.base.render(width), width);
1635
+ return this.renderFallback(this.renderBase(width), width);
1179
1636
  }
1180
1637
  try {
1181
1638
  const provenance = inspectPolishedFrameProvenance(
@@ -1187,17 +1644,20 @@ export class WrappedPolishedEditor implements EditorComponent {
1187
1644
  if (provenance.safe) {
1188
1645
  const result = renderMinimalistFrameFromBase({
1189
1646
  width,
1647
+ baseWidth: Math.max(0, width - 4),
1190
1648
  baseRendered: captured.value,
1191
1649
  autocompleteSource: this.base,
1192
1650
  autocompleteCapture: captured.capture,
1193
1651
  uiTheme: this.uiTheme,
1194
1652
  config,
1195
1653
  inputText: this.base.getText(),
1196
- metadata: this.getMinimalistMetadata(),
1654
+ getMetadata: this.getMinimalistMetadata,
1655
+ reportWorkingLineBorder: this.reportWorkingLineBorder,
1197
1656
  ownedFrame: provenance.ownedFrame,
1198
1657
  borderColor: this.borderColor,
1199
1658
  });
1200
1659
  if (result.decorated) {
1660
+ this.reportMetadataDecoration(true);
1201
1661
  this.reportMinimalistDecoration(true);
1202
1662
  return result.lines;
1203
1663
  }
@@ -1206,18 +1666,19 @@ export class WrappedPolishedEditor implements EditorComponent {
1206
1666
  // Decoration is optional; preserve the completed same-render rows below.
1207
1667
  }
1208
1668
  this.reportMinimalistDecoration(false);
1209
- return clampRenderedLines(captured.value, width);
1669
+ return this.renderFallback(captured.value, width);
1210
1670
  }
1211
1671
  this.reportMinimalistDecoration(false);
1212
- if (width <= 2) return clampRenderedLines(this.base.render(width), width);
1672
+ if (width <= 2) return this.renderFallback(this.renderBase(width), width);
1213
1673
 
1214
- const { railWidth } = getEditorChromeWidths(config, this.uiTheme, "\x1b[0m");
1674
+ const shellMode = isShellModeInput(this.base.getText());
1675
+ const { railWidth } = getEditorChromeWidths(config, this.uiTheme, "\x1b[0m", shellMode);
1215
1676
  const innerWidth = Math.max(0, width - railWidth);
1216
1677
  let captured: { value: string[]; capture?: AutocompleteCapture };
1217
1678
  try {
1218
- captured = renderWithAutocompleteCapture(this.base, () => this.base.render(innerWidth));
1679
+ captured = renderWithAutocompleteCapture(this.base, () => this.renderBase(innerWidth));
1219
1680
  } catch {
1220
- return clampRenderedLines(this.base.render(width), width);
1681
+ return this.renderFallback(this.renderBase(width), width);
1221
1682
  }
1222
1683
  let result: PolishedFrameResult | undefined;
1223
1684
  try {
@@ -1230,14 +1691,18 @@ export class WrappedPolishedEditor implements EditorComponent {
1230
1691
  if (provenance.safe) {
1231
1692
  result = renderPolishedFrame({
1232
1693
  width,
1694
+ baseWidth: innerWidth,
1233
1695
  baseRendered: captured.value,
1234
1696
  autocompleteSource: this.base,
1235
1697
  autocompleteCapture: captured.capture,
1236
1698
  uiTheme: this.uiTheme,
1237
1699
  config,
1238
1700
  modelMeta: this.getModelMeta(),
1701
+ getWorkingLineFrame: () => this.getMinimalistMetadata().workingLineFrame,
1702
+ reportWorkingLineBorder: this.reportWorkingLineBorder,
1239
1703
  thinkingLevel: this.getThinkingLevel(),
1240
1704
  rightStatus: readVimStatus(this.base, this.uiTheme),
1705
+ shellMode,
1241
1706
  ownedFrame: provenance.ownedFrame,
1242
1707
  borderColor: this.borderColor,
1243
1708
  });
@@ -1245,8 +1710,11 @@ export class WrappedPolishedEditor implements EditorComponent {
1245
1710
  } catch {
1246
1711
  // Decoration is optional; preserve the completed same-render rows below.
1247
1712
  }
1248
- if (result?.decorated) return result.lines;
1249
- return clampRenderedLines(captured.value, width);
1713
+ if (result?.decorated) {
1714
+ this.reportMetadataDecoration(true);
1715
+ return result.lines;
1716
+ }
1717
+ return this.renderFallback(captured.value, width);
1250
1718
  }
1251
1719
 
1252
1720
  invalidate(): void {