@selesai/code 0.13.15 → 0.13.18

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 (473) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +2 -14
  3. package/dist/bun/cli.d.ts +3 -1
  4. package/dist/bun/cli.js +3 -9
  5. package/dist/bun/{register-bedrock.js → runtime-setup.js} +5 -0
  6. package/dist/bun/sandbox-env-setup.d.ts +1 -0
  7. package/dist/bun/sandbox-env-setup.js +3 -0
  8. package/dist/cli/auth-command.d.ts +23 -0
  9. package/dist/cli/auth-command.js +102 -0
  10. package/dist/cli/config-selector.js +2 -1
  11. package/dist/cli/setup.d.ts +1 -0
  12. package/dist/cli/setup.js +11 -0
  13. package/dist/cli.js +2 -14
  14. package/dist/config.d.ts +3 -2
  15. package/dist/config.js +9 -4
  16. package/dist/core/agent-session-runtime.js +15 -7
  17. package/dist/core/agent-session.d.ts +2 -6
  18. package/dist/core/agent-session.js +15 -4
  19. package/dist/core/compaction/branch-summarization.d.ts +1 -1
  20. package/dist/core/compaction/branch-summarization.js +2 -1
  21. package/dist/core/extensions/loader.js +3 -0
  22. package/dist/core/extensions/types.d.ts +16 -2
  23. package/dist/core/http-dispatcher.js +2 -0
  24. package/dist/core/keybindings.d.ts +5 -0
  25. package/dist/core/keybindings.js +4 -0
  26. package/dist/core/messages.d.ts +1 -1
  27. package/dist/core/model-config.d.ts +15 -0
  28. package/dist/core/model-config.js +3 -0
  29. package/dist/core/model-runtime.d.ts +1 -0
  30. package/dist/core/model-runtime.js +5 -2
  31. package/dist/core/provider-composer.js +8 -2
  32. package/dist/core/session-export.d.ts +3 -0
  33. package/dist/core/session-export.js +31 -0
  34. package/dist/core/session-manager.d.ts +3 -2
  35. package/dist/core/session-manager.js +40 -13
  36. package/dist/core/skills.d.ts +1 -1
  37. package/dist/core/skills.js +4 -2
  38. package/dist/core/system-prompt.js +10 -10
  39. package/dist/core/tools/bash.js +3 -117
  40. package/dist/core/tools/edit.d.ts +1 -12
  41. package/dist/core/tools/edit.js +5 -163
  42. package/dist/core/tools/find.js +4 -55
  43. package/dist/core/tools/grep.js +4 -60
  44. package/dist/core/tools/ls.js +4 -49
  45. package/dist/core/tools/read.d.ts +4 -0
  46. package/dist/core/tools/read.js +10 -122
  47. package/dist/core/tools/renderers/bash.d.ts +11 -0
  48. package/dist/core/tools/renderers/bash.js +129 -0
  49. package/dist/core/tools/renderers/edit.d.ts +22 -0
  50. package/dist/core/tools/renderers/edit.js +166 -0
  51. package/dist/core/tools/renderers/find.d.ts +9 -0
  52. package/dist/core/tools/renderers/find.js +63 -0
  53. package/dist/core/tools/renderers/grep.d.ts +9 -0
  54. package/dist/core/tools/renderers/grep.js +68 -0
  55. package/dist/core/tools/renderers/index.d.ts +27 -0
  56. package/dist/core/tools/renderers/index.js +46 -0
  57. package/dist/core/tools/renderers/ls.d.ts +9 -0
  58. package/dist/core/tools/renderers/ls.js +57 -0
  59. package/dist/core/tools/renderers/read.d.ts +10 -0
  60. package/dist/core/tools/renderers/read.js +128 -0
  61. package/dist/core/tools/renderers/write.d.ts +9 -0
  62. package/dist/core/tools/renderers/write.js +152 -0
  63. package/dist/core/tools/write.js +5 -146
  64. package/dist/extensions/capability-gateway/index.ts +12 -1
  65. package/dist/extensions/capability-gateway/integration.test.ts +23 -0
  66. package/dist/extensions/pi-hermes-memory/CHANGELOG.md +18 -0
  67. package/dist/extensions/pi-hermes-memory/README.md +16 -12
  68. package/dist/extensions/pi-hermes-memory/docs/ROADMAP.md +1 -1
  69. package/dist/extensions/pi-hermes-memory/package-lock.json +587 -62
  70. package/dist/extensions/pi-hermes-memory/package.json +4 -4
  71. package/dist/extensions/pi-hermes-memory/src/config.ts +32 -0
  72. package/dist/extensions/pi-hermes-memory/src/constants.ts +12 -2
  73. package/dist/extensions/pi-hermes-memory/src/handlers/background-review.ts +109 -51
  74. package/dist/extensions/pi-hermes-memory/src/handlers/index-sessions.ts +9 -3
  75. package/dist/extensions/pi-hermes-memory/src/handlers/review-memory-ops.ts +257 -98
  76. package/dist/extensions/pi-hermes-memory/src/handlers/session-backfill.ts +9 -2
  77. package/dist/extensions/pi-hermes-memory/src/handlers/sync-markdown-memories.ts +5 -0
  78. package/dist/extensions/pi-hermes-memory/src/index.ts +22 -2
  79. package/dist/extensions/pi-hermes-memory/src/paths.ts +1 -1
  80. package/dist/extensions/pi-hermes-memory/src/store/db.ts +6 -0
  81. package/dist/extensions/pi-hermes-memory/src/store/fts-query.ts +58 -1
  82. package/dist/extensions/pi-hermes-memory/src/store/memory-store.ts +60 -8
  83. package/dist/extensions/pi-hermes-memory/src/store/session-indexer.ts +169 -7
  84. package/dist/extensions/pi-hermes-memory/src/store/session-search.ts +7 -21
  85. package/dist/extensions/pi-hermes-memory/src/store/sqlite-memory-store.ts +134 -15
  86. package/dist/extensions/pi-hermes-memory/src/tools/memory-search-tool.ts +4 -2
  87. package/dist/extensions/pi-hermes-memory/src/tools/memory-tool.ts +24 -9
  88. package/dist/extensions/pi-hermes-memory/src/types.ts +11 -0
  89. package/dist/extensions/pi-hermes-memory/tests/config.test.ts +42 -0
  90. package/dist/extensions/pi-hermes-memory/tests/handlers/background-review.test.ts +159 -3
  91. package/dist/extensions/pi-hermes-memory/tests/handlers/review-memory-ops.test.ts +452 -0
  92. package/dist/extensions/pi-hermes-memory/tests/handlers/session-backfill.test.ts +39 -0
  93. package/dist/extensions/pi-hermes-memory/tests/integration/corruption-recovery-integration.test.ts +91 -0
  94. package/dist/extensions/pi-hermes-memory/tests/store/db.test.ts +29 -0
  95. package/dist/extensions/pi-hermes-memory/tests/store/fts-query.test.ts +116 -0
  96. package/dist/extensions/pi-hermes-memory/tests/store/memory-store.test.ts +163 -0
  97. package/dist/extensions/pi-hermes-memory/tests/store/session-indexer.test.ts +233 -0
  98. package/dist/extensions/pi-hermes-memory/tests/store/session-search.test.ts +12 -0
  99. package/dist/extensions/pi-hermes-memory/tests/store/sqlite-memory-store.test.ts +175 -0
  100. package/dist/extensions/pi-hermes-memory/tests/store/sqlite-native.test.ts +2 -2
  101. package/dist/extensions/pi-hermes-memory/tests/tools/memory-search-tool.test.ts +22 -0
  102. package/dist/extensions/pi-hermes-memory/tests/tools/memory-tool.test.ts +37 -1
  103. package/dist/extensions/pi-intercom/CHANGELOG.md +13 -0
  104. package/dist/extensions/pi-intercom/README.md +16 -2
  105. package/dist/extensions/pi-intercom/broker/spawn.test.ts +19 -2
  106. package/dist/extensions/pi-intercom/broker/spawn.ts +4 -4
  107. package/dist/extensions/pi-intercom/index.ts +1 -1
  108. package/dist/extensions/pi-intercom/intercom.integration.test.ts +121 -2
  109. package/dist/extensions/pi-intercom/package.json +1 -1
  110. package/dist/extensions/pi-intercom/project-agent.test.ts +1 -1
  111. package/dist/extensions/pi-intercom/project-agent.ts +1 -6
  112. package/dist/extensions/pi-intercom/skills/pi-intercom/SKILL.md +7 -6
  113. package/dist/extensions/pi-rewind-hook/index.test.ts +7 -0
  114. package/dist/extensions/pi-subagents/.github/workflows/test.yml +36 -4
  115. package/dist/extensions/pi-subagents/CHANGELOG.md +120 -0
  116. package/dist/extensions/pi-subagents/README.md +3 -3
  117. package/dist/extensions/pi-subagents/agents/researcher.md +23 -13
  118. package/dist/extensions/pi-subagents/agents/reviewer.md +1 -1
  119. package/dist/extensions/pi-subagents/agents/scout.md +1 -1
  120. package/dist/extensions/pi-subagents/docs/agents.md +32 -16
  121. package/dist/extensions/pi-subagents/docs/configuration.md +41 -15
  122. package/dist/extensions/pi-subagents/docs/extension-api.md +109 -6
  123. package/dist/extensions/pi-subagents/docs/missions.md +2 -0
  124. package/dist/extensions/pi-subagents/docs/models.md +58 -1
  125. package/dist/extensions/pi-subagents/docs/observability.md +50 -12
  126. package/dist/extensions/pi-subagents/docs/tool-reference.md +17 -10
  127. package/dist/extensions/pi-subagents/docs/watchdog.md +1 -1
  128. package/dist/extensions/pi-subagents/docs/workflows.md +26 -9
  129. package/dist/extensions/pi-subagents/package-lock.json +747 -177
  130. package/dist/extensions/pi-subagents/package.json +6 -4
  131. package/dist/extensions/pi-subagents/runner-server-preload.mjs +13 -0
  132. package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +2 -1
  133. package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +1 -1
  134. package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +21 -4
  135. package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +2 -1
  136. package/dist/extensions/pi-subagents/skills/pi-subagents/references/multi-lane-orchestration.md +2 -0
  137. package/dist/extensions/pi-subagents/src/agents/advertised-agent-prompt.ts +63 -0
  138. package/dist/extensions/pi-subagents/src/agents/agent-management.ts +61 -16
  139. package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +2 -0
  140. package/dist/extensions/pi-subagents/src/agents/agents.ts +8 -0
  141. package/dist/extensions/pi-subagents/src/api/capability-ceiling.ts +0 -1
  142. package/dist/extensions/pi-subagents/src/api/{pi-args.ts → child-tool-plan.ts} +1 -1
  143. package/dist/extensions/pi-subagents/src/api/preflight.ts +7 -4
  144. package/dist/extensions/pi-subagents/src/api/shared-types.ts +2 -2
  145. package/dist/extensions/pi-subagents/src/api/workflow-resources.ts +6 -0
  146. package/dist/extensions/pi-subagents/src/extension/config.ts +4 -2
  147. package/dist/extensions/pi-subagents/src/extension/doctor.ts +2 -10
  148. package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +9 -11
  149. package/dist/extensions/pi-subagents/src/extension/index.ts +99 -10
  150. package/dist/extensions/pi-subagents/src/extension/public-execution.ts +13 -0
  151. package/dist/extensions/pi-subagents/src/extension/rpc.ts +7 -23
  152. package/dist/extensions/pi-subagents/src/extension/schemas.ts +11 -8
  153. package/dist/extensions/pi-subagents/src/extension/tool-description.ts +25 -7
  154. package/dist/extensions/pi-subagents/src/integrations/pi-web-session-liveness.ts +73 -0
  155. package/dist/extensions/pi-subagents/src/intercom/native-supervisor-channel.ts +228 -136
  156. package/dist/extensions/pi-subagents/src/intercom/supervisor-ui.ts +244 -0
  157. package/dist/extensions/pi-subagents/src/missions/workflow-state.ts +37 -16
  158. package/dist/extensions/pi-subagents/src/runs/background/active-async-capacity.ts +18 -18
  159. package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +51 -25
  160. package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +46 -3
  161. package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +14 -3
  162. package/dist/extensions/pi-subagents/src/runs/background/async-retention.ts +9 -0
  163. package/dist/extensions/pi-subagents/src/runs/background/async-status-snapshot.ts +10 -12
  164. package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +18 -15
  165. package/dist/extensions/pi-subagents/src/runs/background/auto-drain.ts +40 -29
  166. package/dist/extensions/pi-subagents/src/runs/background/chain-root-attachment.ts +8 -0
  167. package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +79 -247
  168. package/dist/extensions/pi-subagents/src/runs/background/notify.ts +88 -12
  169. package/dist/extensions/pi-subagents/src/runs/background/owned-process-tree.ts +6 -6
  170. package/dist/extensions/pi-subagents/src/runs/background/process-terminal.ts +24 -24
  171. package/dist/extensions/pi-subagents/src/runs/background/retained-nested-route-tracker.ts +96 -0
  172. package/dist/extensions/pi-subagents/src/runs/background/run-child-session.ts +642 -0
  173. package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +75 -6
  174. package/dist/extensions/pi-subagents/src/runs/background/runner-aliases.ts +163 -0
  175. package/dist/extensions/pi-subagents/src/runs/background/runner-child-launch.ts +86 -0
  176. package/dist/extensions/pi-subagents/src/runs/background/runner-child-sessions.ts +31 -0
  177. package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +18 -4
  178. package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +3 -1
  179. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +597 -1092
  180. package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +3 -0
  181. package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +4 -0
  182. package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +20 -17
  183. package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +296 -394
  184. package/dist/extensions/pi-subagents/src/runs/foreground/foreground-control.ts +4 -0
  185. package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +3 -1
  186. package/dist/extensions/pi-subagents/src/runs/foreground/prompt-audit.ts +9 -5
  187. package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +630 -283
  188. package/dist/extensions/pi-subagents/src/runs/foreground/workflow-detach-reconcile.ts +8 -5
  189. package/dist/extensions/pi-subagents/src/runs/foreground/workflow-foreground-steering.ts +78 -98
  190. package/dist/extensions/pi-subagents/src/runs/shared/abort-recovery.ts +3 -3
  191. package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +16 -3
  192. package/dist/extensions/pi-subagents/src/runs/shared/agent-contract.ts +1 -1
  193. package/dist/extensions/pi-subagents/src/runs/shared/async-status-projection.ts +47 -47
  194. package/dist/extensions/pi-subagents/src/runs/shared/capability-ceiling.ts +1 -2
  195. package/dist/extensions/pi-subagents/src/runs/shared/child-hooks.ts +174 -0
  196. package/dist/extensions/pi-subagents/src/runs/shared/child-identity.ts +14 -3
  197. package/dist/extensions/pi-subagents/src/runs/shared/child-launch.ts +319 -0
  198. package/dist/extensions/pi-subagents/src/runs/shared/child-lifecycle.ts +25 -0
  199. package/dist/extensions/pi-subagents/src/runs/shared/child-runtime-config.ts +126 -0
  200. package/dist/extensions/pi-subagents/src/runs/shared/child-session.ts +373 -0
  201. package/dist/extensions/pi-subagents/src/runs/shared/child-tool-plan.ts +530 -0
  202. package/dist/extensions/pi-subagents/src/runs/shared/completion-evidence.ts +2 -2
  203. package/dist/extensions/pi-subagents/src/runs/shared/completion-guard.ts +2 -1
  204. package/dist/extensions/pi-subagents/src/runs/shared/external-cli-preflight.ts +16 -0
  205. package/dist/extensions/pi-subagents/src/runs/shared/host-step-status.ts +11 -11
  206. package/dist/extensions/pi-subagents/src/runs/shared/llm-intent-arbiter.ts +30 -20
  207. package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +5 -4
  208. package/dist/extensions/pi-subagents/src/runs/shared/model-exclusions.ts +84 -15
  209. package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +88 -12
  210. package/dist/extensions/pi-subagents/src/runs/shared/nested-events.ts +37 -53
  211. package/dist/extensions/pi-subagents/src/runs/shared/nested-path.ts +1 -1
  212. package/dist/extensions/pi-subagents/src/runs/shared/orca-progress-tabs.ts +18 -7
  213. package/dist/extensions/pi-subagents/src/runs/shared/parallel-handoff.ts +57 -12
  214. package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +3 -4
  215. package/dist/extensions/pi-subagents/src/runs/shared/permissions.ts +0 -11
  216. package/dist/extensions/pi-subagents/src/runs/shared/process-signal.ts +4 -1
  217. package/dist/extensions/pi-subagents/src/runs/shared/readonly-drain-observation.ts +42 -0
  218. package/dist/extensions/pi-subagents/src/runs/shared/readonly-model-continuation.ts +69 -0
  219. package/dist/extensions/pi-subagents/src/runs/shared/readonly-session-evidence.ts +307 -0
  220. package/dist/extensions/pi-subagents/src/runs/shared/run-fanout-budget.ts +8 -21
  221. package/dist/extensions/pi-subagents/src/runs/shared/runtime-acknowledged-extensions.ts +3 -30
  222. package/dist/extensions/pi-subagents/src/runs/shared/structured-output.ts +17 -4
  223. package/dist/extensions/pi-subagents/src/runs/shared/subagent-control.ts +2 -0
  224. package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +99 -386
  225. package/dist/extensions/pi-subagents/src/runs/shared/tool-availability.ts +18 -62
  226. package/dist/extensions/pi-subagents/src/runs/shared/tool-budget.ts +0 -14
  227. package/dist/extensions/pi-subagents/src/runs/shared/worktree-cleanup-plan.ts +31 -9
  228. package/dist/extensions/pi-subagents/src/runs/shared/worktree-setup-command.ts +190 -0
  229. package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +506 -226
  230. package/dist/extensions/pi-subagents/src/shared/child-session-name.ts +1 -1
  231. package/dist/extensions/pi-subagents/src/shared/jsonl-writer.ts +11 -0
  232. package/dist/extensions/pi-subagents/src/shared/model-response-aliases.ts +13 -0
  233. package/dist/extensions/pi-subagents/src/shared/thinking-ceiling.ts +0 -6
  234. package/dist/extensions/pi-subagents/src/shared/types.ts +145 -89
  235. package/dist/extensions/pi-subagents/src/shared/utils.ts +13 -6
  236. package/dist/extensions/pi-subagents/src/shared/watch-strategy.ts +2 -0
  237. package/dist/extensions/pi-subagents/src/shared/workflow-child-permit.ts +18 -13
  238. package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +0 -6
  239. package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +1 -1
  240. package/dist/extensions/pi-subagents/src/tui/fleet.ts +11 -6
  241. package/dist/extensions/pi-subagents/src/tui/render.ts +277 -46
  242. package/dist/extensions/pi-subagents/src/watchdog/child-status.ts +0 -1
  243. package/dist/extensions/pi-subagents/src/watchdog/register-child.ts +12 -12
  244. package/dist/extensions/pi-subagents/src/workflows/chat-progress.ts +3 -3
  245. package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +116 -15
  246. package/dist/extensions/pi-subagents/src/workflows/workflow-checklist.ts +15 -18
  247. package/dist/extensions/pi-subagents/src/workflows/workflow-child-summary.ts +57 -8
  248. package/dist/extensions/pi-subagents/src/workflows/workflow-preflight.ts +19 -19
  249. package/dist/extensions/pi-subagents/src/workflows/workflow-receipt.ts +3 -3
  250. package/dist/extensions/pi-subagents/src/workflows/workflow-resources.ts +97 -22
  251. package/dist/extensions/pi-subagents/src/workflows/workflow-settlement.ts +3 -0
  252. package/dist/extensions/pi-subagents/test/integration/acceptance-file-report.test.ts +336 -21
  253. package/dist/extensions/pi-subagents/test/integration/async-execution.part-1.test.ts +1181 -0
  254. package/dist/extensions/pi-subagents/test/integration/async-execution.part-2.test.ts +2240 -0
  255. package/dist/extensions/pi-subagents/test/integration/async-execution.part-3.test.ts +2268 -0
  256. package/dist/extensions/pi-subagents/test/integration/async-execution.part-4.test.ts +1512 -0
  257. package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +231 -16
  258. package/dist/extensions/pi-subagents/test/integration/error-handling.test.ts +4 -18
  259. package/dist/extensions/pi-subagents/test/integration/foreign-workflow-steering.test.ts +95 -0
  260. package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +9 -15
  261. package/dist/extensions/pi-subagents/test/integration/in-process-child.test.ts +374 -0
  262. package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +20 -10
  263. package/dist/extensions/pi-subagents/test/integration/orca-progress-tabs.test.ts +18 -6
  264. package/dist/extensions/pi-subagents/test/integration/recovered-assistant-error.test.ts +151 -0
  265. package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +42 -1
  266. package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +150 -25
  267. package/dist/extensions/pi-subagents/test/integration/result-publication.test.ts +354 -0
  268. package/dist/extensions/pi-subagents/test/integration/shared-cwd-terminal-evidence.test.ts +117 -0
  269. package/dist/extensions/pi-subagents/test/integration/single-execution.part-1.test.ts +3678 -0
  270. package/dist/extensions/pi-subagents/test/integration/{single-execution.test.ts → single-execution.part-2.test.ts} +500 -4207
  271. package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +1 -2
  272. package/dist/extensions/pi-subagents/test/integration/workflow-result-publication.test.ts +127 -0
  273. package/dist/extensions/pi-subagents/test/integration/workflow-steer-inbox.test.ts +365 -0
  274. package/dist/extensions/pi-subagents/test/smoke/pi085-child.ts +31 -0
  275. package/dist/extensions/pi-subagents/test/smoke/pi085-clean-install.mjs +74 -0
  276. package/dist/extensions/pi-subagents/test/smoke/pi085-extension.ts +16 -0
  277. package/dist/extensions/pi-subagents/test/support/async-execution-fixture.ts +699 -0
  278. package/dist/extensions/pi-subagents/test/support/fake-child-session.ts +418 -0
  279. package/dist/extensions/pi-subagents/test/support/foreign-workflow-steer-host.mjs +13 -0
  280. package/dist/extensions/pi-subagents/test/support/mock-pi.ts +30 -76
  281. package/dist/extensions/pi-subagents/test/support/notify-diagnostics-fixture.ts +84 -0
  282. package/dist/extensions/pi-subagents/test/support/result-publication-capacity-preload.mjs +70 -0
  283. package/dist/extensions/pi-subagents/test/support/runner-child-session-factory.ts +17 -0
  284. package/dist/extensions/pi-subagents/test/support/single-execution-fixture.ts +390 -0
  285. package/dist/extensions/pi-subagents/test/unit/acceptance-compaction.test.ts +120 -0
  286. package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +24 -3
  287. package/dist/extensions/pi-subagents/test/unit/advertised-agent-prompt.test.ts +87 -0
  288. package/dist/extensions/pi-subagents/test/unit/advertised-agent-refresh.test.ts +163 -0
  289. package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +70 -31
  290. package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +78 -3
  291. package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +2 -8
  292. package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +1 -1
  293. package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +73 -66
  294. package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +51 -1
  295. package/dist/extensions/pi-subagents/test/unit/async-retention.test.ts +49 -1
  296. package/dist/extensions/pi-subagents/test/unit/async-spawn-preload.test.ts +103 -0
  297. package/dist/extensions/pi-subagents/test/unit/async-status-projection.test.ts +3 -3
  298. package/dist/extensions/pi-subagents/test/unit/capability-ceiling-agent-allowlist.test.ts +9 -8
  299. package/dist/extensions/pi-subagents/test/unit/capability-ceiling.test.ts +10 -7
  300. package/dist/extensions/pi-subagents/test/unit/chain-root-attachment.test.ts +48 -6
  301. package/dist/extensions/pi-subagents/test/unit/child-runtime-config.test.ts +90 -0
  302. package/dist/extensions/pi-subagents/test/unit/{pi-args-permission-system.test.ts → child-tool-plan-permission-system.test.ts} +48 -86
  303. package/dist/extensions/pi-subagents/test/unit/child-tool-plan.test.ts +33 -0
  304. package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +18 -18
  305. package/dist/extensions/pi-subagents/test/unit/completion-evidence.test.ts +9 -9
  306. package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +8 -7
  307. package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +225 -65
  308. package/dist/extensions/pi-subagents/test/unit/extension-bindings.test.ts +17 -22
  309. package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +11 -1
  310. package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +47 -3
  311. package/dist/extensions/pi-subagents/test/unit/foreign-workflow-steering.test.ts +74 -0
  312. package/dist/extensions/pi-subagents/test/unit/fork-cache-key.test.ts +23 -29
  313. package/dist/extensions/pi-subagents/test/unit/host-peer-runtime-imports.test.ts +96 -4
  314. package/dist/extensions/pi-subagents/test/unit/host-step-status.test.ts +4 -4
  315. package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +116 -55
  316. package/dist/extensions/pi-subagents/test/unit/index-segment.test.ts +58 -1
  317. package/dist/extensions/pi-subagents/test/unit/llm-intent-arbiter.test.ts +104 -3
  318. package/dist/extensions/pi-subagents/test/unit/mission-lifecycle.test.ts +10 -1
  319. package/dist/extensions/pi-subagents/test/unit/mission-store.test.ts +31 -1
  320. package/dist/extensions/pi-subagents/test/unit/model-exclusions.test.ts +102 -51
  321. package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +196 -6
  322. package/dist/extensions/pi-subagents/test/unit/native-supervisor-channel.test.ts +181 -38
  323. package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +62 -70
  324. package/dist/extensions/pi-subagents/test/unit/nested-events.test.ts +58 -53
  325. package/dist/extensions/pi-subagents/test/unit/notify-diagnostics.test.ts +42 -0
  326. package/dist/extensions/pi-subagents/test/unit/notify.test.ts +84 -0
  327. package/dist/extensions/pi-subagents/test/unit/orca-progress-tabs.test.ts +13 -5
  328. package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +21 -5
  329. package/dist/extensions/pi-subagents/test/unit/parallel-handoff.test.ts +5 -4
  330. package/dist/extensions/pi-subagents/test/unit/permissions.test.ts +2 -6
  331. package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +28 -2
  332. package/dist/extensions/pi-subagents/test/unit/pi-web-session-liveness.test.ts +209 -0
  333. package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +38 -1
  334. package/dist/extensions/pi-subagents/test/unit/prompt-audit-optional-peers.test.ts +43 -0
  335. package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +24 -2
  336. package/dist/extensions/pi-subagents/test/unit/readonly-drain-observation.test.ts +174 -0
  337. package/dist/extensions/pi-subagents/test/unit/readonly-model-continuation.test.ts +94 -0
  338. package/dist/extensions/pi-subagents/test/unit/readonly-session-evidence.test.ts +1329 -0
  339. package/dist/extensions/pi-subagents/test/unit/recursion-guard.test.ts +29 -80
  340. package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +11 -8
  341. package/dist/extensions/pi-subagents/test/unit/result-files.test.ts +2 -2
  342. package/dist/extensions/pi-subagents/test/unit/retained-nested-route-tracker.test.ts +175 -0
  343. package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +38 -12
  344. package/dist/extensions/pi-subagents/test/unit/run-fanout-budget.test.ts +2 -5
  345. package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +89 -1
  346. package/dist/extensions/pi-subagents/test/unit/runtime-acknowledged-extensions.test.ts +2 -16
  347. package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +27 -3
  348. package/dist/extensions/pi-subagents/test/unit/scheduled-supervisor-demand.test.ts +215 -0
  349. package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +15 -11
  350. package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +237 -1
  351. package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +2 -5
  352. package/dist/extensions/pi-subagents/test/unit/streamed-progress-bounds.test.ts +2 -2
  353. package/dist/extensions/pi-subagents/test/unit/subagent-guide.test.ts +14 -1
  354. package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +130 -739
  355. package/dist/extensions/pi-subagents/test/unit/supervisor-ask-registration.test.ts +682 -0
  356. package/dist/extensions/pi-subagents/test/unit/supervisor-ui.test.ts +137 -0
  357. package/dist/extensions/pi-subagents/test/unit/tool-budget.test.ts +1 -11
  358. package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +23 -3
  359. package/dist/extensions/pi-subagents/test/unit/wait-completions.test.ts +8 -1
  360. package/dist/extensions/pi-subagents/test/unit/watchdog-tool-actions.test.ts +19 -1
  361. package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +72 -4
  362. package/dist/extensions/pi-subagents/test/unit/workflow-checklist.test.ts +17 -3
  363. package/dist/extensions/pi-subagents/test/unit/workflow-child-summary.test.ts +34 -0
  364. package/dist/extensions/pi-subagents/test/unit/workflow-detach-reconcile.test.ts +12 -2
  365. package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +46 -6
  366. package/dist/extensions/pi-subagents/test/unit/workflow-receipt.test.ts +3 -3
  367. package/dist/extensions/pi-subagents/test/unit/workflow-resources.test.ts +133 -1
  368. package/dist/extensions/pi-subagents/test/unit/workflow-resume-hint.test.ts +53 -2
  369. package/dist/extensions/pi-subagents/test/unit/worktree-cleanup-plan.test.ts +222 -14
  370. package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +526 -85
  371. package/dist/extensions/pi-web-agent/src/backends/config.ts +1 -0
  372. package/dist/extensions/pi-web-agent/src/backends/settings-reader.ts +5 -3
  373. package/dist/extensions/pi-web-agent/src/search/tokenin.ts +7 -3
  374. package/dist/extensions/pi-web-agent/src/types.ts +1 -1
  375. package/dist/extensions/pi-zentui/README.md +17 -0
  376. package/dist/extensions/pi-zentui/assets/screenshots/footer-status-hyperlink.png +0 -0
  377. package/dist/extensions/pi-zentui/docs/configuration.md +71 -2
  378. package/dist/extensions/pi-zentui/extensions/zentui/config.ts +11 -0
  379. package/dist/extensions/pi-zentui/extensions/zentui/editor-transfer.ts +14 -0
  380. package/dist/extensions/pi-zentui/extensions/zentui/extension-status.ts +29 -13
  381. package/dist/extensions/pi-zentui/extensions/zentui/footer-layout.ts +5 -4
  382. package/dist/extensions/pi-zentui/extensions/zentui/footer-text.ts +11 -0
  383. package/dist/extensions/pi-zentui/extensions/zentui/footer.ts +11 -10
  384. package/dist/extensions/pi-zentui/extensions/zentui/index.ts +77 -3
  385. package/dist/extensions/pi-zentui/extensions/zentui/presets.ts +77 -0
  386. package/dist/extensions/pi-zentui/extensions/zentui/settings-command.ts +103 -2
  387. package/dist/extensions/pi-zentui/extensions/zentui/working-line-extension-segments.ts +115 -0
  388. package/dist/extensions/pi-zentui/extensions/zentui/working-line.ts +87 -5
  389. package/dist/extensions/pi-zentui/package-lock.json +277 -517
  390. package/dist/extensions/pi-zentui/package.json +7 -4
  391. package/dist/extensions/pi-zentui/test/config-presets.test.ts +238 -0
  392. package/dist/extensions/pi-zentui/test/editor-transfer.test.ts +24 -1
  393. package/dist/extensions/pi-zentui/test/extension-compliance.test.ts +570 -2
  394. package/dist/extensions/pi-zentui/test/extension-status.test.ts +90 -0
  395. package/dist/extensions/pi-zentui/test/footer-hyperlink.test.ts +243 -0
  396. package/dist/extensions/pi-zentui/test/package-contents.mjs +1 -0
  397. package/dist/extensions/pi-zentui/test/presets.test.ts +121 -0
  398. package/dist/extensions/pi-zentui/test/settings-command.test.ts +205 -1
  399. package/dist/extensions/pi-zentui/test/working-line-extension-segments.test.ts +139 -0
  400. package/dist/extensions/pi-zentui/test/working-line-lifecycle.integration.test.ts +237 -3
  401. package/dist/extensions/pi-zentui/test/working-line.test.ts +94 -2
  402. package/dist/index.d.ts +1 -1
  403. package/dist/main.js +4 -1
  404. package/dist/modes/interactive/chat-viewport.d.ts +19 -0
  405. package/dist/modes/interactive/chat-viewport.js +27 -0
  406. package/dist/modes/interactive/components/assistant-message.d.ts +6 -2
  407. package/dist/modes/interactive/components/assistant-message.js +30 -13
  408. package/dist/modes/interactive/components/custom-editor.d.ts +10 -1
  409. package/dist/modes/interactive/components/custom-editor.js +39 -1
  410. package/dist/modes/interactive/components/first-time-setup.js +1 -1
  411. package/dist/modes/interactive/components/index.d.ts +1 -1
  412. package/dist/modes/interactive/components/markdown-transform.d.ts +2 -0
  413. package/dist/modes/interactive/components/markdown-transform.js +18 -0
  414. package/dist/modes/interactive/components/model-selector.js +19 -17
  415. package/dist/modes/interactive/components/scoped-models-selector.js +21 -23
  416. package/dist/modes/interactive/components/settings-selector.d.ts +7 -1
  417. package/dist/modes/interactive/components/settings-selector.js +128 -20
  418. package/dist/modes/interactive/components/settings-submenu.d.ts +71 -0
  419. package/dist/modes/interactive/components/settings-submenu.js +164 -0
  420. package/dist/modes/interactive/components/status-indicator.d.ts +3 -1
  421. package/dist/modes/interactive/components/status-indicator.js +10 -3
  422. package/dist/modes/interactive/components/thinking-selector.d.ts +15 -3
  423. package/dist/modes/interactive/components/thinking-selector.js +75 -18
  424. package/dist/modes/interactive/components/tool-execution.d.ts +21 -4
  425. package/dist/modes/interactive/components/tool-execution.js +35 -33
  426. package/dist/modes/interactive/components/trust-selector.js +2 -2
  427. package/dist/modes/interactive/interactive-mode.d.ts +13 -15
  428. package/dist/modes/interactive/interactive-mode.js +144 -80
  429. package/dist/modes/interactive/session-share.d.ts +15 -0
  430. package/dist/modes/interactive/session-share.js +183 -0
  431. package/dist/modes/interactive/theme/dark.json +2 -1
  432. package/dist/modes/interactive/theme/light.json +2 -1
  433. package/dist/modes/interactive/theme/theme-controller.d.ts +1 -0
  434. package/dist/modes/interactive/theme/theme-controller.js +5 -0
  435. package/dist/modes/interactive/theme/theme-json.d.ts +83 -0
  436. package/dist/modes/interactive/theme/theme-json.js +129 -0
  437. package/dist/modes/interactive/theme/theme-schema.json +9 -1
  438. package/dist/modes/interactive/theme/theme.d.ts +14 -5
  439. package/dist/modes/interactive/theme/theme.js +18 -119
  440. package/dist/modes/interactive/tui-renderer.d.ts +20 -0
  441. package/dist/modes/interactive/tui-renderer.js +65 -0
  442. package/dist/utils/exif-orientation.js +2 -3
  443. package/dist/utils/management-http.d.ts +24 -0
  444. package/dist/utils/management-http.js +53 -0
  445. package/dist/utils/text.d.ts +7 -0
  446. package/dist/utils/text.js +8 -0
  447. package/dist/utils/tools-manager.d.ts +1 -0
  448. package/dist/utils/tools-manager.js +43 -21
  449. package/docs/docs.json +0 -4
  450. package/package.json +4 -4
  451. package/dist/extensions/pi-subagents/src/runs/shared/child-protocol.ts +0 -415
  452. package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +0 -1059
  453. package/dist/extensions/pi-subagents/src/runs/shared/subagent-startup-retry.ts +0 -116
  454. package/dist/extensions/pi-subagents/src/shared/post-exit-stdio-guard.ts +0 -85
  455. package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +0 -224
  456. package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +0 -6986
  457. package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +0 -447
  458. package/dist/extensions/pi-subagents/test/support/real-session-child-cli.mjs +0 -185
  459. package/dist/extensions/pi-subagents/test/support/real-session-runner.ts +0 -311
  460. package/dist/extensions/pi-subagents/test/unit/capability-ceiling-pi-args.test.ts +0 -84
  461. package/dist/extensions/pi-subagents/test/unit/child-protocol.test.ts +0 -202
  462. package/dist/extensions/pi-subagents/test/unit/close-grace-timer.test.ts +0 -101
  463. package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +0 -2347
  464. package/dist/extensions/pi-subagents/test/unit/subagent-startup-retry.test.ts +0 -104
  465. package/dist/extensions/pi-subagents/test/unit/windows-hide-spawn.test.ts +0 -49
  466. package/dist/skills/imagegen-frontend-mobile/SKILL.md +0 -1465
  467. package/dist/skills/imagegen-frontend-web/SKILL.md +0 -987
  468. package/dist/skills/implanger/SKILL.md +0 -70
  469. package/dist/skills/output/SKILL.md +0 -49
  470. package/dist/skills/planger/SKILL.md +0 -167
  471. package/dist/skills/workflow/SKILL.md +0 -95
  472. package/docs/workflows.md +0 -18
  473. /package/dist/bun/{register-bedrock.d.ts → runtime-setup.d.ts} +0 -0
@@ -1,6 +1,7 @@
1
- import { Container, SelectList } from "@earendil-works/pi-tui";
2
- import { getSelectListTheme } from "../theme/theme.js";
1
+ import { Container, fuzzyFilter, getKeybindings, Input, SelectList, Spacer, Text, } from "@earendil-works/pi-tui";
2
+ import { getSelectListTheme, theme } from "../theme/theme.js";
3
3
  import { DynamicBorder } from "./dynamic-border.js";
4
+ import { keyDisplayText } from "./keybinding-hints.js";
4
5
  const THINKING_SELECT_LIST_LAYOUT = {
5
6
  minPrimaryColumnWidth: 12,
6
7
  maxPrimaryColumnWidth: 32,
@@ -18,33 +19,89 @@ const LEVEL_DESCRIPTIONS = {
18
19
  * Component that renders a thinking level selector with borders
19
20
  */
20
21
  export class ThinkingSelectorComponent extends Container {
22
+ searchInput;
21
23
  selectList;
22
- constructor(currentLevel, availableLevels, onSelect, onCancel) {
24
+ selectListChildIndex;
25
+ allItems;
26
+ onSelect;
27
+ onCancel;
28
+ onSelectAsDefault;
29
+ _focused = false;
30
+ get focused() {
31
+ return this._focused;
32
+ }
33
+ set focused(value) {
34
+ this._focused = value;
35
+ this.searchInput.focused = value;
36
+ }
37
+ constructor(currentLevel, availableLevels, onSelect, onCancel, onSelectAsDefault, defaultThinkingLevel) {
23
38
  super();
24
- const thinkingLevels = availableLevels.map((level) => ({
39
+ this.onSelect = onSelect;
40
+ this.onCancel = onCancel;
41
+ this.onSelectAsDefault = onSelectAsDefault;
42
+ this.allItems = availableLevels.map((level) => ({
25
43
  value: level,
26
- label: level,
27
- description: LEVEL_DESCRIPTIONS[level],
44
+ label: `${level === currentLevel ? "✓ " : " "}${level}`,
45
+ description: level === defaultThinkingLevel ? `${LEVEL_DESCRIPTIONS[level]} · default` : LEVEL_DESCRIPTIONS[level],
28
46
  }));
29
47
  // Add top border
30
48
  this.addChild(new DynamicBorder());
49
+ this.addChild(new Spacer(1));
50
+ this.addChild(new Text("Thinking Level", 0, 0));
51
+ this.addChild(new Spacer(1));
52
+ this.addChild(new Text(`${keyDisplayText("app.thinking.cycle")} cycles thinking levels in-session`, 0, 0));
53
+ this.addChild(new Spacer(1));
54
+ this.searchInput = new Input();
55
+ this.searchInput.onSubmit = () => this.selectList.handleInput("\r");
56
+ this.addChild(this.searchInput);
57
+ this.addChild(new Spacer(1));
31
58
  // Create selector
32
- this.selectList = new SelectList(thinkingLevels, thinkingLevels.length, getSelectListTheme(), THINKING_SELECT_LIST_LAYOUT);
33
- // Preselect current level
34
- const currentIndex = thinkingLevels.findIndex((item) => item.value === currentLevel);
35
- if (currentIndex !== -1) {
36
- this.selectList.setSelectedIndex(currentIndex);
37
- }
38
- this.selectList.onSelect = (item) => {
39
- onSelect(item.value);
40
- };
41
- this.selectList.onCancel = () => {
42
- onCancel();
43
- };
59
+ this.selectList = this.buildSelectList(this.allItems, currentLevel);
60
+ this.selectListChildIndex = this.children.length;
44
61
  this.addChild(this.selectList);
62
+ this.addChild(new Spacer(1));
63
+ this.addChild(new Text(theme.fg("dim", ` ${keyDisplayText("tui.select.confirm")} to select · ${keyDisplayText("app.thinking.save")} to set as default · ${keyDisplayText("tui.select.cancel")} to cancel`), 0, 0));
45
64
  // Add bottom border
46
65
  this.addChild(new DynamicBorder());
47
66
  }
67
+ buildSelectList(items, preselect) {
68
+ const list = new SelectList(items, Math.max(1, items.length), getSelectListTheme(), THINKING_SELECT_LIST_LAYOUT);
69
+ const currentIndex = items.findIndex((item) => item.value === preselect);
70
+ if (currentIndex !== -1) {
71
+ list.setSelectedIndex(currentIndex);
72
+ }
73
+ list.onSelect = (item) => this.onSelect(item.value);
74
+ list.onCancel = () => this.onCancel();
75
+ return list;
76
+ }
77
+ applyFilter(query) {
78
+ const filtered = query
79
+ ? fuzzyFilter(this.allItems, query, (item) => `${item.value} ${item.description ?? ""}`)
80
+ : this.allItems;
81
+ const selectedValue = this.selectList.getSelectedItem()?.value;
82
+ const newList = this.buildSelectList(filtered, selectedValue);
83
+ this.children[this.selectListChildIndex] = newList;
84
+ this.selectList = newList;
85
+ }
86
+ handleInput(keyData) {
87
+ const kb = getKeybindings();
88
+ if (kb.matches(keyData, "app.thinking.save") && this.onSelectAsDefault) {
89
+ const item = this.selectList.getSelectedItem();
90
+ if (item)
91
+ this.onSelectAsDefault(item.value);
92
+ return;
93
+ }
94
+ const isNav = kb.matches(keyData, "tui.select.up") ||
95
+ kb.matches(keyData, "tui.select.down") ||
96
+ kb.matches(keyData, "tui.select.confirm") ||
97
+ kb.matches(keyData, "tui.select.cancel");
98
+ if (isNav) {
99
+ this.selectList.handleInput(keyData);
100
+ return;
101
+ }
102
+ this.searchInput.handleInput(keyData);
103
+ this.applyFilter(this.searchInput.getValue());
104
+ }
48
105
  getSelectList() {
49
106
  return this.selectList;
50
107
  }
@@ -1,5 +1,19 @@
1
- import { Container, type TUI } from "@earendil-works/pi-tui";
2
- import type { ToolDefinition } from "../../../core/extensions/types.ts";
1
+ import type { AgentToolResult } from "@earendil-works/pi-agent-core";
2
+ import { type Component, Container, type TUI, type TuiMouseEvent } from "@earendil-works/pi-tui";
3
+ import type { ToolDefinition, ToolRenderContext, ToolRenderResultOptions } from "../../../core/extensions/types.ts";
4
+ import type { Theme } from "../theme/theme.ts";
5
+ /**
6
+ * What this component needs from a tool: how to draw it. It neither executes tools nor reads their
7
+ * parameter schemas, so a definition and a bare renderer pair are equally acceptable.
8
+ *
9
+ * The renderer parameters are `any` on purpose: a `ToolDefinition` types them from its schema, and
10
+ * narrowing them here would make those definitions unassignable.
11
+ */
12
+ export interface ToolRenderers {
13
+ renderShell?: "default" | "self";
14
+ renderCall?: (args: any, theme: Theme, context: ToolRenderContext<any, any>) => Component;
15
+ renderResult?: (result: AgentToolResult<any>, options: ToolRenderResultOptions, theme: Theme, context: ToolRenderContext<any, any>) => Component;
16
+ }
3
17
  export interface ToolExecutionOptions {
4
18
  showImages?: boolean;
5
19
  imageWidthCells?: number;
@@ -7,7 +21,9 @@ export interface ToolExecutionOptions {
7
21
  export declare class ToolExecutionComponent extends Container {
8
22
  private contentBox;
9
23
  private contentText;
24
+ private contentTextRegion;
10
25
  private selfRenderContainer;
26
+ private selfRenderHeight;
11
27
  private callRendererComponent?;
12
28
  private resultRendererComponent?;
13
29
  private rendererState;
@@ -21,7 +37,6 @@ export declare class ToolExecutionComponent extends Container {
21
37
  private imageWidthCells;
22
38
  private isPartial;
23
39
  private toolDefinition?;
24
- private builtInToolDefinition?;
25
40
  private ui;
26
41
  private cwd;
27
42
  private executionStarted;
@@ -29,7 +44,7 @@ export declare class ToolExecutionComponent extends Container {
29
44
  private result?;
30
45
  private convertedImages;
31
46
  private hideComponent;
32
- constructor(toolName: string, toolCallId: string, args: any, options: ToolExecutionOptions | undefined, toolDefinition: ToolDefinition<any, any> | undefined, ui: TUI, cwd: string);
47
+ constructor(toolName: string, toolCallId: string, args: any, options: ToolExecutionOptions | undefined, toolDefinition: ToolRenderers | ToolDefinition<any, any, any> | undefined, ui: TUI, cwd: string);
33
48
  private getCallRenderer;
34
49
  private getResultRenderer;
35
50
  private hasRendererDefinition;
@@ -37,6 +52,7 @@ export declare class ToolExecutionComponent extends Container {
37
52
  private getRenderContext;
38
53
  private createCallFallback;
39
54
  private createResultFallback;
55
+ private createResultRegion;
40
56
  updateArgs(args: any): void;
41
57
  markExecutionStarted(): void;
42
58
  setArgsComplete(): void;
@@ -56,6 +72,7 @@ export declare class ToolExecutionComponent extends Container {
56
72
  setImageWidthCells(width: number): void;
57
73
  invalidate(): void;
58
74
  render(width: number): string[];
75
+ handleMouse(event: TuiMouseEvent): ReturnType<Container["handleMouse"]>;
59
76
  private updateDisplay;
60
77
  private getTextOutput;
61
78
  private formatToolExecution;
@@ -1,5 +1,4 @@
1
- import { Box, Container, getCapabilities, Image, Spacer, Text } from "@earendil-works/pi-tui";
2
- import { createAllToolDefinitions } from "../../../core/tools/index.js";
1
+ import { Box, Container, getCapabilities, Image, MouseRegion, Spacer, Text, } from "@earendil-works/pi-tui";
3
2
  import { getTextOutput as getRenderedTextOutput } from "../../../core/tools/render-utils.js";
4
3
  import { convertToPng } from "../../../utils/image-convert.js";
5
4
  import { keyHint } from "./keybinding-hints.js";
@@ -8,7 +7,9 @@ const FALLBACK_PREVIEW_LINES = 10;
8
7
  export class ToolExecutionComponent extends Container {
9
8
  contentBox;
10
9
  contentText;
10
+ contentTextRegion;
11
11
  selfRenderContainer;
12
+ selfRenderHeight = 0;
12
13
  callRendererComponent;
13
14
  resultRendererComponent;
14
15
  rendererState = {};
@@ -22,7 +23,6 @@ export class ToolExecutionComponent extends Container {
22
23
  imageWidthCells;
23
24
  isPartial = true;
24
25
  toolDefinition;
25
- builtInToolDefinition;
26
26
  ui;
27
27
  cwd;
28
28
  executionStarted = false;
@@ -36,7 +36,6 @@ export class ToolExecutionComponent extends Container {
36
36
  this.toolCallId = toolCallId;
37
37
  this.args = args;
38
38
  this.toolDefinition = toolDefinition;
39
- this.builtInToolDefinition = createAllToolDefinitions(cwd)[toolName];
40
39
  this.showImages = options.showImages ?? true;
41
40
  this.imageWidthCells = options.imageWidthCells ?? 60;
42
41
  this.ui = ui;
@@ -47,44 +46,27 @@ export class ToolExecutionComponent extends Container {
47
46
  // contentText is reserved for generic fallback rendering when no tool definition exists.
48
47
  this.contentBox = new Box(1, 1, (text) => theme.bg("toolPendingBg", text));
49
48
  this.contentText = new Text("", 1, 1, (text) => theme.bg("toolPendingBg", text));
49
+ this.contentTextRegion = this.createResultRegion(this.contentText);
50
50
  this.selfRenderContainer = new Container();
51
51
  if (this.hasRendererDefinition()) {
52
52
  this.addChild(this.getRenderShell() === "self" ? this.selfRenderContainer : this.contentBox);
53
53
  }
54
54
  else {
55
- this.addChild(this.contentText);
55
+ this.addChild(this.contentTextRegion);
56
56
  }
57
57
  this.updateDisplay();
58
58
  }
59
59
  getCallRenderer() {
60
- if (!this.builtInToolDefinition) {
61
- return this.toolDefinition?.renderCall;
62
- }
63
- if (!this.toolDefinition) {
64
- return this.builtInToolDefinition.renderCall;
65
- }
66
- return this.toolDefinition.renderCall ?? this.builtInToolDefinition.renderCall;
60
+ return this.toolDefinition?.renderCall;
67
61
  }
68
62
  getResultRenderer() {
69
- if (!this.builtInToolDefinition) {
70
- return this.toolDefinition?.renderResult;
71
- }
72
- if (!this.toolDefinition) {
73
- return this.builtInToolDefinition.renderResult;
74
- }
75
- return this.toolDefinition.renderResult ?? this.builtInToolDefinition.renderResult;
63
+ return this.toolDefinition?.renderResult;
76
64
  }
77
65
  hasRendererDefinition() {
78
- return this.builtInToolDefinition !== undefined || this.toolDefinition !== undefined;
66
+ return this.toolDefinition !== undefined;
79
67
  }
80
68
  getRenderShell() {
81
- if (!this.builtInToolDefinition) {
82
- return this.toolDefinition?.renderShell ?? "default";
83
- }
84
- if (!this.toolDefinition) {
85
- return this.builtInToolDefinition.renderShell ?? "default";
86
- }
87
- return this.toolDefinition.renderShell ?? this.builtInToolDefinition.renderShell ?? "default";
69
+ return this.toolDefinition?.renderShell ?? "default";
88
70
  }
89
71
  getRenderContext(lastComponent) {
90
72
  return {
@@ -122,6 +104,14 @@ export class ToolExecutionComponent extends Container {
122
104
  }
123
105
  return new Text(text, 0, 0);
124
106
  }
107
+ createResultRegion(component) {
108
+ return new MouseRegion(component, (event) => {
109
+ if (!this.result || event.type !== "click" || event.button !== "left")
110
+ return undefined;
111
+ this.setExpanded(!this.expanded);
112
+ return { handled: true };
113
+ });
114
+ }
125
115
  updateArgs(args) {
126
116
  this.args = args;
127
117
  this.updateDisplay();
@@ -189,6 +179,7 @@ export class ToolExecutionComponent extends Container {
189
179
  }
190
180
  if (this.hasRendererDefinition() && this.getRenderShell() === "self") {
191
181
  const contentLines = this.selfRenderContainer.render(width);
182
+ this.selfRenderHeight = contentLines.length;
192
183
  if (contentLines.length === 0 && this.imageComponents.length === 0) {
193
184
  return [];
194
185
  }
@@ -211,6 +202,17 @@ export class ToolExecutionComponent extends Container {
211
202
  }
212
203
  return super.render(width);
213
204
  }
205
+ handleMouse(event) {
206
+ if (!this.hasRendererDefinition() || this.getRenderShell() !== "self")
207
+ return super.handleMouse(event);
208
+ if (event.y <= 0 || event.y > this.selfRenderHeight)
209
+ return undefined;
210
+ return this.selfRenderContainer.handleMouse({
211
+ ...event,
212
+ y: event.y - 1,
213
+ height: this.selfRenderHeight,
214
+ });
215
+ }
214
216
  updateDisplay() {
215
217
  const bgFn = this.isPartial
216
218
  ? (text) => theme.bg("toolPendingBg", text)
@@ -227,19 +229,19 @@ export class ToolExecutionComponent extends Container {
227
229
  renderContainer.clear();
228
230
  const callRenderer = this.getCallRenderer();
229
231
  if (!callRenderer) {
230
- renderContainer.addChild(this.createCallFallback());
232
+ renderContainer.addChild(this.createResultRegion(this.createCallFallback()));
231
233
  hasContent = true;
232
234
  }
233
235
  else {
234
236
  try {
235
237
  const component = callRenderer(this.args, theme, this.getRenderContext(this.callRendererComponent));
236
238
  this.callRendererComponent = component;
237
- renderContainer.addChild(component);
239
+ renderContainer.addChild(this.createResultRegion(component));
238
240
  hasContent = true;
239
241
  }
240
242
  catch {
241
243
  this.callRendererComponent = undefined;
242
- renderContainer.addChild(this.createCallFallback());
244
+ renderContainer.addChild(this.createResultRegion(this.createCallFallback()));
243
245
  hasContent = true;
244
246
  }
245
247
  }
@@ -248,7 +250,7 @@ export class ToolExecutionComponent extends Container {
248
250
  if (!resultRenderer) {
249
251
  const component = this.createResultFallback();
250
252
  if (component) {
251
- renderContainer.addChild(component);
253
+ renderContainer.addChild(this.createResultRegion(component));
252
254
  hasContent = true;
253
255
  }
254
256
  }
@@ -256,14 +258,14 @@ export class ToolExecutionComponent extends Container {
256
258
  try {
257
259
  const component = resultRenderer({ content: this.result.content, details: this.result.details }, { expanded: this.expanded, isPartial: this.isPartial }, theme, this.getRenderContext(this.resultRendererComponent));
258
260
  this.resultRendererComponent = component;
259
- renderContainer.addChild(component);
261
+ renderContainer.addChild(this.createResultRegion(component));
260
262
  hasContent = true;
261
263
  }
262
264
  catch {
263
265
  this.resultRendererComponent = undefined;
264
266
  const component = this.createResultFallback();
265
267
  if (component) {
266
- renderContainer.addChild(component);
268
+ renderContainer.addChild(this.createResultRegion(component));
267
269
  hasContent = true;
268
270
  }
269
271
  }
@@ -61,10 +61,10 @@ export class TrustSelectorComponent extends Container {
61
61
  }
62
62
  const isSelected = i === this.selectedIndex;
63
63
  const isCurrent = this.isSavedOption(option);
64
- const checkmark = isCurrent ? theme.fg("success", " ✓") : "";
64
+ const currentMarker = isCurrent ? theme.fg("accent", "✓ ") : " ";
65
65
  const prefix = isSelected ? theme.fg("accent", "→ ") : " ";
66
66
  const label = isSelected ? theme.fg("accent", option.label) : theme.fg("text", option.label);
67
- this.listContainer.addChild(new Text(`${prefix}${label}${checkmark}`, 1, 0));
67
+ this.listContainer.addChild(new Text(`${prefix}${currentMarker}${label}`, 1, 0));
68
68
  }
69
69
  }
70
70
  handleInput(keyData) {
@@ -3,12 +3,11 @@
3
3
  * Handles TUI rendering and user interaction, delegating business logic to AgentSession.
4
4
  */
5
5
  import type { ImageContent } from "@earendil-works/pi-ai/compat";
6
- import type { Terminal } from "@earendil-works/pi-tui";
7
- import { type TUI, TuiAltScreen, TuiMainScreen } from "@earendil-works/pi-tui";
8
6
  import { type AgentSessionRuntime } from "../../core/agent-session-runtime.ts";
9
7
  import { SessionManager } from "../../core/session-manager.ts";
10
8
  import type { FullscreenExitOutput, TuiMode } from "../../core/settings-manager.ts";
11
9
  import { type LatestPiRelease } from "../../utils/version-check.ts";
10
+ export { createInteractiveTui, createInteractiveTuiReference } from "./tui-renderer.ts";
12
11
  type PendingUserInput = {
13
12
  text: string;
14
13
  images?: ImageContent[];
@@ -37,18 +36,6 @@ export interface InteractiveModeOptions {
37
36
  /** Initial interactive theme setting for this invocation. */
38
37
  initialThemeSetting?: string;
39
38
  }
40
- interface InteractiveTuiOptions {
41
- tuiMode: TuiMode;
42
- showHardwareCursor: boolean;
43
- logDirectory: string;
44
- terminal?: Terminal;
45
- onRightClickPaste?: () => void;
46
- fullscreenCopyOnSelect?: boolean;
47
- }
48
- /** Composition root for selecting the interactive terminal renderer. */
49
- export declare function createInteractiveTui(options: InteractiveTuiOptions): TuiMainScreen | TuiAltScreen;
50
- /** Stable reference for components while InteractiveMode replaces the active renderer. */
51
- export declare function createInteractiveTuiReference(getTui: () => TUI): TUI;
52
39
  export declare class InteractiveMode {
53
40
  private runtimeHost;
54
41
  private renderer;
@@ -78,6 +65,7 @@ export declare class InteractiveMode {
78
65
  private pendingUserInputs;
79
66
  private pendingInputImages;
80
67
  private activeStatusIndicator;
68
+ private activeWorkingIndicatorEmbedded;
81
69
  private readonly idleStatus;
82
70
  private workingMessage;
83
71
  private workingVisible;
@@ -191,6 +179,10 @@ export declare class InteractiveMode {
191
179
  /**
192
180
  * Get a registered tool definition by name (for custom rendering).
193
181
  */
182
+ /**
183
+ * Extension-registered definition, falling back to the built-in one. The renderer components take
184
+ * whatever this returns, so they never reach into the tool registry themselves.
185
+ */
194
186
  private getRegisteredToolDefinition;
195
187
  /**
196
188
  * Set up keyboard shortcuts registered by extensions.
@@ -200,6 +192,7 @@ export declare class InteractiveMode {
200
192
  * Set extension status text in the footer.
201
193
  */
202
194
  private setExtensionStatus;
195
+ private setEditorWorkingStatusIndicator;
203
196
  private showStatusIndicator;
204
197
  private clearStatusIndicator;
205
198
  private showWorkingStatusIndicator;
@@ -304,6 +297,12 @@ export declare class InteractiveMode {
304
297
  * @param options.populateHistory Add user messages to editor history
305
298
  */
306
299
  private renderSessionEntries;
300
+ /**
301
+ * Render billing usage for a compaction or branch summary. The notice is derived
302
+ * from persisted summary usage and is not stored as a separate session entry.
303
+ */
304
+ private addCompactionCostNotice;
305
+ private maybeShowAssistantDiagnostics;
307
306
  /**
308
307
  * Show a transcript notice when a completed assistant message paid for a
309
308
  * significant cache miss. Only states observable facts: the miss itself,
@@ -444,4 +443,3 @@ export declare class InteractiveMode {
444
443
  private handleCompactCommand;
445
444
  stop(fullscreenExitOutput?: FullscreenExitOutput): void;
446
445
  }
447
- export {};