@selesai/code 0.9.11 → 0.9.12

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 (580) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/config.d.ts +4 -6
  3. package/dist/config.js +10 -14
  4. package/dist/core/agent-session.d.ts +0 -1
  5. package/dist/core/agent-session.js +3 -49
  6. package/dist/core/extensions/types.d.ts +0 -2
  7. package/dist/core/settings-manager.d.ts +0 -2
  8. package/dist/core/settings-manager.js +0 -3
  9. package/dist/core/tools/index.d.ts +0 -1
  10. package/dist/core/tools/index.js +0 -1
  11. package/dist/defaults/settings.json +0 -1
  12. package/dist/extensions/model-prompt-injector/index.test.ts +0 -10
  13. package/dist/extensions/model-prompt-injector/index.ts +0 -3
  14. package/dist/extensions/pi-intercom/CHANGELOG.md +53 -16
  15. package/dist/extensions/pi-intercom/README.md +41 -8
  16. package/dist/extensions/pi-intercom/banner.png +0 -0
  17. package/dist/extensions/pi-intercom/broker/broker.ts +498 -215
  18. package/dist/extensions/pi-intercom/broker/client.ts +39 -12
  19. package/dist/extensions/pi-intercom/broker/extension.test.ts +102 -3
  20. package/dist/extensions/pi-intercom/broker/paths.test.ts +2 -2
  21. package/dist/extensions/pi-intercom/broker/protocol.ts +26 -0
  22. package/dist/extensions/pi-intercom/broker/spawn.test.ts +5 -20
  23. package/dist/extensions/pi-intercom/config.test.ts +41 -0
  24. package/dist/extensions/pi-intercom/config.ts +21 -0
  25. package/dist/extensions/pi-intercom/extension-api.ts +40 -0
  26. package/dist/extensions/pi-intercom/index.ts +362 -26
  27. package/dist/extensions/pi-intercom/intercom.integration.test.ts +819 -13
  28. package/dist/extensions/pi-intercom/package.json +1 -1
  29. package/dist/extensions/pi-intercom/project-agent.ts +2 -2
  30. package/dist/extensions/pi-intercom/skills/pi-intercom/SKILL.md +8 -110
  31. package/dist/extensions/pi-intercom/types.ts +32 -5
  32. package/dist/extensions/pi-intercom/ui/inline-message.ts +6 -0
  33. package/dist/extensions/pi-subagents/.github/assets/subagent-fleet-inspector.png +0 -0
  34. package/dist/extensions/pi-subagents/.github/workflows/release.yml +28 -0
  35. package/dist/extensions/pi-subagents/.github/workflows/test.yml +51 -0
  36. package/dist/extensions/pi-subagents/.greptile/config.json +33 -0
  37. package/dist/extensions/pi-subagents/.greptile/files.json +8 -0
  38. package/dist/extensions/pi-subagents/.greptile/rules.md +16 -0
  39. package/dist/extensions/pi-subagents/CHANGELOG.md +309 -87
  40. package/dist/extensions/pi-subagents/README.md +15 -17
  41. package/dist/extensions/pi-subagents/agents/oracle.md +3 -1
  42. package/dist/extensions/pi-subagents/agents/researcher.md +32 -13
  43. package/dist/extensions/pi-subagents/agents/reviewer.md +13 -2
  44. package/dist/extensions/pi-subagents/agents/scout.md +2 -2
  45. package/dist/extensions/pi-subagents/agents/worker.md +2 -1
  46. package/dist/extensions/pi-subagents/async-retention-discovery-worker.mjs +180 -0
  47. package/dist/extensions/pi-subagents/docs/configuration.md +106 -27
  48. package/dist/extensions/pi-subagents/docs/extension-api.md +85 -21
  49. package/dist/extensions/pi-subagents/docs/missions.md +41 -4
  50. package/dist/extensions/pi-subagents/docs/models.md +52 -9
  51. package/dist/extensions/pi-subagents/docs/observability.md +103 -16
  52. package/dist/extensions/pi-subagents/docs/tool-reference.md +60 -45
  53. package/dist/extensions/pi-subagents/docs/watchdog.md +60 -3
  54. package/dist/extensions/pi-subagents/docs/workflows.md +181 -7
  55. package/dist/extensions/pi-subagents/index.ts +10 -1
  56. package/dist/extensions/pi-subagents/install.mjs +4 -4
  57. package/dist/extensions/pi-subagents/package-lock.json +1483 -1470
  58. package/dist/extensions/pi-subagents/package.json +6 -3
  59. package/dist/extensions/pi-subagents/prompts/council.md +60 -0
  60. package/dist/extensions/pi-subagents/prompts/parallel-review.md +5 -1
  61. package/dist/extensions/pi-subagents/prompts/review-loop.md +9 -5
  62. package/dist/extensions/pi-subagents/skills/council-mode/SKILL.md +254 -0
  63. package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +18 -17
  64. package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +31 -9
  65. package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +107 -140
  66. package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +9 -12
  67. package/dist/extensions/pi-subagents/skills/pi-subagents/references/multi-lane-orchestration.md +39 -0
  68. package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +44 -92
  69. package/dist/extensions/pi-subagents/src/agents/agent-management.ts +261 -368
  70. package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +6 -2
  71. package/dist/extensions/pi-subagents/src/agents/agents.ts +388 -85
  72. package/dist/extensions/pi-subagents/src/agents/builtin-names.ts +14 -0
  73. package/dist/extensions/pi-subagents/src/agents/runtime-agent-registry.ts +418 -0
  74. package/dist/extensions/pi-subagents/src/agents/skills.ts +1 -1
  75. package/dist/extensions/pi-subagents/src/api/agents.ts +7 -0
  76. package/dist/extensions/pi-subagents/src/api/external-job-provider.ts +195 -0
  77. package/dist/extensions/pi-subagents/src/api/preflight.ts +88 -27
  78. package/dist/extensions/pi-subagents/src/api/project-panes.ts +2 -0
  79. package/dist/extensions/pi-subagents/src/api/shared-types.ts +2 -0
  80. package/dist/extensions/pi-subagents/src/extension/config.ts +20 -11
  81. package/dist/extensions/pi-subagents/src/extension/doctor.ts +14 -6
  82. package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +5 -4
  83. package/dist/extensions/pi-subagents/src/extension/index.ts +270 -187
  84. package/dist/extensions/pi-subagents/src/extension/public-execution.ts +65 -28
  85. package/dist/extensions/pi-subagents/src/extension/rpc.ts +120 -11
  86. package/dist/extensions/pi-subagents/src/extension/schemas.ts +46 -64
  87. package/dist/extensions/pi-subagents/src/extension/tool-description.ts +51 -37
  88. package/dist/extensions/pi-subagents/src/extension/tool-result.ts +19 -0
  89. package/dist/extensions/pi-subagents/src/inspectors/herdr/actions.ts +2 -2
  90. package/dist/extensions/pi-subagents/src/inspectors/herdr/client.ts +3 -3
  91. package/dist/extensions/pi-subagents/src/inspectors/herdr/focus.ts +55 -0
  92. package/dist/extensions/pi-subagents/src/inspectors/herdr/inspector-runner.ts +2 -1
  93. package/dist/extensions/pi-subagents/src/inspectors/herdr/project-panes.ts +230 -46
  94. package/dist/extensions/pi-subagents/src/integrations/herdr-status.ts +26 -4
  95. package/dist/extensions/pi-subagents/src/intercom/native-supervisor-channel.ts +32 -10
  96. package/dist/extensions/pi-subagents/src/missions/lifecycle.ts +6 -1
  97. package/dist/extensions/pi-subagents/src/missions/store.ts +4 -9
  98. package/dist/extensions/pi-subagents/src/missions/workflow-state.ts +2 -2
  99. package/dist/extensions/pi-subagents/src/policy/authority.ts +2 -0
  100. package/dist/extensions/pi-subagents/src/profiles/profiles.ts +3 -1
  101. package/dist/extensions/pi-subagents/src/runs/background/active-run-index.ts +31 -8
  102. package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +210 -52
  103. package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +63 -33
  104. package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +71 -17
  105. package/dist/extensions/pi-subagents/src/runs/background/async-retention.ts +886 -0
  106. package/dist/extensions/pi-subagents/src/runs/background/async-status-snapshot.ts +14 -5
  107. package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +49 -56
  108. package/dist/extensions/pi-subagents/src/runs/background/auto-drain.ts +1 -0
  109. package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +3 -33
  110. package/dist/extensions/pi-subagents/src/runs/background/chain-root-attachment.ts +5 -0
  111. package/dist/extensions/pi-subagents/src/runs/background/completion-dedupe.ts +5 -1
  112. package/dist/extensions/pi-subagents/src/runs/background/completion-replay.ts +22 -12
  113. package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +105 -71
  114. package/dist/extensions/pi-subagents/src/runs/background/fleet-view.ts +68 -19
  115. package/dist/extensions/pi-subagents/src/runs/background/index-segment.ts +59 -0
  116. package/dist/extensions/pi-subagents/src/runs/background/inspect-rpc.ts +443 -0
  117. package/dist/extensions/pi-subagents/src/runs/background/notify.ts +94 -10
  118. package/dist/extensions/pi-subagents/src/runs/background/result-files.ts +158 -90
  119. package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +141 -53
  120. package/dist/extensions/pi-subagents/src/runs/background/resume-guidance.ts +8 -5
  121. package/dist/extensions/pi-subagents/src/runs/background/retained-children.ts +14 -4
  122. package/dist/extensions/pi-subagents/src/runs/background/run-id-query.ts +7 -0
  123. package/dist/extensions/pi-subagents/src/runs/background/run-id-resolver.ts +13 -14
  124. package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +46 -25
  125. package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +823 -0
  126. package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +9 -3
  127. package/dist/extensions/pi-subagents/src/runs/background/steering.ts +11 -1
  128. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +594 -216
  129. package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +17 -13
  130. package/dist/extensions/pi-subagents/src/runs/background/terminal-run-index.ts +138 -0
  131. package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +23 -4
  132. package/dist/extensions/pi-subagents/src/runs/background/wait-subscriptions.ts +82 -4
  133. package/dist/extensions/pi-subagents/src/runs/background/wait-tool.ts +5 -3
  134. package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +21 -14
  135. package/dist/extensions/pi-subagents/src/runs/foreground/async-stop-action.ts +23 -2
  136. package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +153 -58
  137. package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +7 -9
  138. package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +1283 -1657
  139. package/dist/extensions/pi-subagents/src/runs/foreground/workflow-detach-reconcile.ts +274 -0
  140. package/dist/extensions/pi-subagents/src/runs/foreground/workflow-foreground-steering.ts +6 -5
  141. package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +59 -10
  142. package/dist/extensions/pi-subagents/src/runs/shared/agent-contract.ts +1 -1
  143. package/dist/extensions/pi-subagents/src/runs/shared/chain-outputs.ts +1 -3
  144. package/dist/extensions/pi-subagents/src/runs/shared/child-identity.ts +36 -0
  145. package/dist/extensions/pi-subagents/src/runs/shared/completion-guard.ts +52 -2
  146. package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +1 -1
  147. package/dist/extensions/pi-subagents/src/runs/shared/extension-bindings.ts +78 -0
  148. package/dist/extensions/pi-subagents/src/runs/shared/external-cli-runner.ts +2 -0
  149. package/dist/extensions/pi-subagents/src/runs/shared/external-job-bridge.ts +460 -0
  150. package/dist/extensions/pi-subagents/src/runs/shared/external-job-runner.ts +389 -0
  151. package/dist/extensions/pi-subagents/src/runs/shared/fast-mode-extension.ts +10 -0
  152. package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +14 -0
  153. package/dist/extensions/pi-subagents/src/runs/shared/model-exclusions.ts +243 -0
  154. package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +201 -85
  155. package/dist/extensions/pi-subagents/src/runs/shared/model-scope.ts +106 -39
  156. package/dist/extensions/pi-subagents/src/runs/shared/mutation-evidence.ts +145 -0
  157. package/dist/extensions/pi-subagents/src/runs/shared/orca-progress-tabs.ts +150 -27
  158. package/dist/extensions/pi-subagents/src/runs/shared/parallel-handoff.ts +46 -4
  159. package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +19 -15
  160. package/dist/extensions/pi-subagents/src/runs/shared/permissions.ts +5 -1
  161. package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +86 -2
  162. package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +9 -9
  163. package/dist/extensions/pi-subagents/src/runs/shared/session-lease.ts +0 -6
  164. package/dist/extensions/pi-subagents/src/runs/shared/structured-output.ts +18 -4
  165. package/dist/extensions/pi-subagents/src/runs/shared/subagent-control.ts +51 -7
  166. package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +62 -21
  167. package/dist/extensions/pi-subagents/src/runs/shared/tool-availability.ts +1 -3
  168. package/dist/extensions/pi-subagents/src/runs/shared/tool-timeout.ts +1 -3
  169. package/dist/extensions/pi-subagents/src/runs/shared/workflow-graph.ts +1 -23
  170. package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +14 -2
  171. package/dist/extensions/pi-subagents/src/shared/artifacts.ts +2 -2
  172. package/dist/extensions/pi-subagents/src/shared/atomic-json.ts +22 -2
  173. package/dist/extensions/pi-subagents/src/shared/capacity-resilient-json.ts +102 -0
  174. package/dist/extensions/pi-subagents/src/shared/completion-owner.ts +14 -0
  175. package/dist/extensions/pi-subagents/src/shared/file-system-retry.ts +49 -1
  176. package/dist/extensions/pi-subagents/src/shared/fork-context.ts +59 -1
  177. package/dist/extensions/pi-subagents/src/shared/launch-contract.ts +12 -5
  178. package/dist/extensions/pi-subagents/src/shared/model-info.ts +20 -0
  179. package/dist/extensions/pi-subagents/src/shared/prompt-resources.ts +0 -40
  180. package/dist/extensions/pi-subagents/src/shared/settings.ts +11 -30
  181. package/dist/extensions/pi-subagents/src/shared/thinking-ceiling.ts +52 -0
  182. package/dist/extensions/pi-subagents/src/shared/types.ts +228 -49
  183. package/dist/extensions/pi-subagents/src/shared/utils.ts +11 -3
  184. package/dist/extensions/pi-subagents/src/shared/watch-strategy.ts +10 -0
  185. package/dist/extensions/pi-subagents/src/slash/prompt-workflows.ts +0 -162
  186. package/dist/extensions/pi-subagents/src/slash/slash-bridge.ts +2 -5
  187. package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +105 -13
  188. package/dist/extensions/pi-subagents/src/slash/slash-live-state.ts +6 -36
  189. package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +829 -0
  190. package/dist/extensions/pi-subagents/src/tui/fleet.ts +1415 -0
  191. package/dist/extensions/pi-subagents/src/tui/render.ts +78 -7
  192. package/dist/extensions/pi-subagents/src/watchdog/change-signature.ts +1 -1
  193. package/dist/extensions/pi-subagents/src/watchdog/lsp-diagnostics.ts +1 -0
  194. package/dist/extensions/pi-subagents/src/watchdog/permission-arbiter.ts +59 -51
  195. package/dist/extensions/pi-subagents/src/watchdog/register-main.ts +8 -2
  196. package/dist/extensions/pi-subagents/src/watchdog/tool-actions.ts +2 -1
  197. package/dist/extensions/pi-subagents/src/workflows/chat-progress.ts +4 -4
  198. package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +471 -86
  199. package/dist/extensions/pi-subagents/src/workflows/workflow-receipt.ts +140 -0
  200. package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +2 -2
  201. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/cli.d.ts +3 -0
  202. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/register-bedrock.d.ts +2 -0
  203. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/restore-sandbox-env.d.ts +17 -0
  204. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/args.d.ts +57 -0
  205. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/config-selector.d.ts +16 -0
  206. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/file-processor.d.ts +15 -0
  207. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/initial-message.d.ts +18 -0
  208. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/list-models.d.ts +9 -0
  209. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/project-trust.d.ts +10 -0
  210. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/session-picker.d.ts +10 -0
  211. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/startup-ui.d.ts +20 -0
  212. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli.d.ts +3 -0
  213. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/config.d.ts +96 -0
  214. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-runtime.d.ts +119 -0
  215. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-services.d.ts +85 -0
  216. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session.d.ts +620 -0
  217. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-guidance.d.ts +5 -0
  218. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-storage.d.ts +56 -0
  219. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/bash-executor.d.ts +32 -0
  220. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/cache-stats.d.ts +49 -0
  221. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/branch-summarization.d.ts +93 -0
  222. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/compaction.d.ts +128 -0
  223. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/index.d.ts +7 -0
  224. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/utils.d.ts +38 -0
  225. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/defaults.d.ts +3 -0
  226. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/diagnostics.d.ts +15 -0
  227. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/event-bus.d.ts +9 -0
  228. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/exec.d.ts +29 -0
  229. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/experimental.d.ts +2 -0
  230. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/ansi-to-html.d.ts +22 -0
  231. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/index.d.ts +37 -0
  232. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/tool-renderer.d.ts +34 -0
  233. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/index.d.ts +12 -0
  234. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/loader.d.ts +23 -0
  235. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/runner.d.ts +171 -0
  236. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/types.d.ts +1261 -0
  237. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/wrapper.d.ts +20 -0
  238. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/footer-data-provider.d.ts +54 -0
  239. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/http-dispatcher.d.ts +22 -0
  240. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/index.d.ts +13 -0
  241. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/keybindings.d.ts +358 -0
  242. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/messages.d.ts +77 -0
  243. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-config.d.ts +512 -0
  244. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-registry.d.ts +43 -0
  245. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-resolver.d.ts +121 -0
  246. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-runtime.d.ts +82 -0
  247. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/models-store.d.ts +17 -0
  248. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/output-guard.d.ts +7 -0
  249. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/package-manager.d.ts +210 -0
  250. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/project-trust.d.ts +15 -0
  251. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/prompt-templates.d.ts +54 -0
  252. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-attribution.d.ts +4 -0
  253. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-composer.d.ts +55 -0
  254. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/radius.d.ts +2 -0
  255. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/remote-catalog-provider.d.ts +5 -0
  256. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resolve-config-value.d.ts +30 -0
  257. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resource-loader.d.ts +206 -0
  258. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/runtime-credentials.d.ts +15 -0
  259. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/sdk.d.ts +106 -0
  260. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-cwd.d.ts +19 -0
  261. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-manager.d.ts +356 -0
  262. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/settings-manager.d.ts +297 -0
  263. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/skills.d.ts +60 -0
  264. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/slash-commands.d.ts +15 -0
  265. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/source-info.d.ts +18 -0
  266. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/system-prompt.d.ts +28 -0
  267. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/telemetry.d.ts +3 -0
  268. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/timings.d.ts +10 -0
  269. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/bash.d.ts +68 -0
  270. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit-diff.d.ts +106 -0
  271. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit.d.ts +51 -0
  272. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/file-mutation-queue.d.ts +6 -0
  273. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/find.d.ts +35 -0
  274. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/grep.d.ts +37 -0
  275. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/index.d.ts +40 -0
  276. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/ls.d.ts +37 -0
  277. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/output-accumulator.d.ts +52 -0
  278. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/path-utils.d.ts +10 -0
  279. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/read.d.ts +35 -0
  280. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/render-utils.d.ts +24 -0
  281. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  282. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/truncate.d.ts +70 -0
  283. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/write.d.ts +26 -0
  284. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/trust-manager.d.ts +36 -0
  285. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/usage-totals.d.ts +19 -0
  286. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/index.d.ts +3 -0
  287. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/client.d.ts +61 -0
  288. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/huggingface.d.ts +23 -0
  289. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/index.d.ts +3 -0
  290. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/provider.d.ts +10 -0
  291. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/ui.d.ts +42 -0
  292. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/index.d.ts +35 -0
  293. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/main.d.ts +12 -0
  294. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/migrations.d.ts +33 -0
  295. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/index.d.ts +9 -0
  296. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/armin.d.ts +34 -0
  297. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/assistant-message.d.ts +22 -0
  298. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  299. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  300. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  301. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  302. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/config-selector.d.ts +102 -0
  303. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  304. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  305. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-entry.d.ts +19 -0
  306. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-message.d.ts +20 -0
  307. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  308. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/diff.d.ts +12 -0
  309. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  310. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  311. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-editor.d.ts +22 -0
  312. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-input.d.ts +23 -0
  313. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  314. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  315. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/footer.d.ts +32 -0
  316. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/index.d.ts +34 -0
  317. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  318. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/login-dialog.d.ts +52 -0
  319. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/model-selector.d.ts +54 -0
  320. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
  321. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  322. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  323. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector.d.ts +95 -0
  324. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/settings-selector.d.ts +77 -0
  325. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  326. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  327. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/status-indicator.d.ts +28 -0
  328. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  329. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  330. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tool-execution.d.ts +63 -0
  331. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tree-selector.d.ts +94 -0
  332. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  333. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  334. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message.d.ts +14 -0
  335. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  336. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/interactive-mode.d.ts +394 -0
  337. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/model-search.d.ts +12 -0
  338. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme-controller.d.ts +29 -0
  339. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme.d.ts +120 -0
  340. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/print-mode.d.ts +28 -0
  341. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/jsonl.d.ts +17 -0
  342. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-client.d.ts +246 -0
  343. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-mode.d.ts +20 -0
  344. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-types.d.ts +457 -0
  345. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/package-manager-cli.d.ts +8 -0
  346. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/rpc-entry.d.ts +3 -0
  347. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/ansi.d.ts +2 -0
  348. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/changelog.d.ts +22 -0
  349. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/child-process.d.ts +18 -0
  350. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-image.d.ts +11 -0
  351. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-native.d.ts +11 -0
  352. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard.d.ts +4 -0
  353. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/deprecation.d.ts +4 -0
  354. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/exif-orientation.d.ts +5 -0
  355. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/frontmatter.d.ts +8 -0
  356. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/fs-watch.d.ts +5 -0
  357. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/git.d.ts +26 -0
  358. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/html.d.ts +7 -0
  359. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-convert.d.ts +10 -0
  360. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-process.d.ts +18 -0
  361. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-core.d.ts +30 -0
  362. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-worker.d.ts +2 -0
  363. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize.d.ts +16 -0
  364. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/json.d.ts +3 -0
  365. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/mime.d.ts +3 -0
  366. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/open-browser.d.ts +9 -0
  367. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/paths.d.ts +31 -0
  368. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/photon.d.ts +21 -0
  369. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/pi-user-agent.d.ts +2 -0
  370. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/shell.d.ts +31 -0
  371. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/sleep.d.ts +5 -0
  372. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/syntax-highlight.d.ts +12 -0
  373. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/tools-manager.d.ts +3 -0
  374. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/version-check.d.ts +15 -0
  375. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/windows-self-update.d.ts +3 -0
  376. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/index.mjs +1 -1
  377. package/dist/extensions/pi-subagents/test/integration/acceptance-file-report.test.ts +0 -54
  378. package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +1053 -414
  379. package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +194 -4
  380. package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +59 -4
  381. package/dist/extensions/pi-subagents/test/integration/error-handling.test.ts +0 -77
  382. package/dist/extensions/pi-subagents/test/integration/external-cli-runner.test.ts +107 -6
  383. package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +211 -897
  384. package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +265 -375
  385. package/dist/extensions/pi-subagents/test/integration/orca-progress-tabs.test.ts +77 -7
  386. package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +1 -1
  387. package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +10 -10
  388. package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +547 -30
  389. package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +2112 -310
  390. package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +274 -34
  391. package/dist/extensions/pi-subagents/test/integration/slash-live-state.test.ts +1 -1
  392. package/dist/extensions/pi-subagents/test/integration/template-resolution.test.ts +20 -3
  393. package/dist/extensions/pi-subagents/test/support/isolated-temp-root.mjs +9 -0
  394. package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +30 -5
  395. package/dist/extensions/pi-subagents/test/support/mock-pi.ts +2 -0
  396. package/dist/extensions/pi-subagents/test/support/real-session-runner.ts +4 -2
  397. package/dist/extensions/pi-subagents/test/support/register-loader.mjs +1 -0
  398. package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +197 -0
  399. package/dist/extensions/pi-subagents/test/unit/agent-contract.test.ts +14 -0
  400. package/dist/extensions/pi-subagents/test/unit/agent-disabled.test.ts +1 -1
  401. package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +204 -27
  402. package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +444 -145
  403. package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +256 -4
  404. package/dist/extensions/pi-subagents/test/unit/artifacts.test.ts +9 -7
  405. package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +152 -22
  406. package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +29 -0
  407. package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +205 -23
  408. package/dist/extensions/pi-subagents/test/unit/async-retention.test.ts +579 -0
  409. package/dist/extensions/pi-subagents/test/unit/atomic-json.test.ts +24 -0
  410. package/dist/extensions/pi-subagents/test/unit/authority-policy.test.ts +1 -0
  411. package/dist/extensions/pi-subagents/test/unit/auto-drain.test.ts +3 -3
  412. package/dist/extensions/pi-subagents/test/unit/capacity-resilient-json.test.ts +155 -0
  413. package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +2 -2
  414. package/dist/extensions/pi-subagents/test/unit/completion-dedupe.test.ts +7 -0
  415. package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +123 -0
  416. package/dist/extensions/pi-subagents/test/unit/completion-replay.test.ts +81 -3
  417. package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +109 -7
  418. package/dist/extensions/pi-subagents/test/unit/default-extensions.test.ts +2 -2
  419. package/dist/extensions/pi-subagents/test/unit/doctor.test.ts +5 -2
  420. package/dist/extensions/pi-subagents/test/unit/dynamic-fanout.test.ts +3 -2
  421. package/dist/extensions/pi-subagents/test/unit/extension-bindings.test.ts +79 -0
  422. package/dist/extensions/pi-subagents/test/unit/external-cli-runner.test.ts +22 -0
  423. package/dist/extensions/pi-subagents/test/unit/external-job-runner.test.ts +961 -0
  424. package/dist/extensions/pi-subagents/test/unit/file-system-retry.test.ts +64 -0
  425. package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +1110 -0
  426. package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +1664 -0
  427. package/dist/extensions/pi-subagents/test/unit/fork-context.test.ts +81 -1
  428. package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +138 -11
  429. package/dist/extensions/pi-subagents/test/unit/herdr-status-bridge.test.ts +41 -2
  430. package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +210 -79
  431. package/dist/extensions/pi-subagents/test/unit/index-segment.test.ts +95 -0
  432. package/dist/extensions/pi-subagents/test/unit/inspect-rpc.test.ts +596 -0
  433. package/dist/extensions/pi-subagents/test/unit/mission-lifecycle.test.ts +10 -1
  434. package/dist/extensions/pi-subagents/test/unit/mission-store.test.ts +3 -5
  435. package/dist/extensions/pi-subagents/test/unit/model-exclusions.test.ts +167 -0
  436. package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +319 -18
  437. package/dist/extensions/pi-subagents/test/unit/model-info.test.ts +78 -0
  438. package/dist/extensions/pi-subagents/test/unit/model-scope-settings.test.ts +19 -5
  439. package/dist/extensions/pi-subagents/test/unit/model-scope.test.ts +44 -0
  440. package/dist/extensions/pi-subagents/test/unit/mutation-evidence.test.ts +129 -0
  441. package/dist/extensions/pi-subagents/test/unit/native-supervisor-channel.test.ts +231 -2
  442. package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +28 -1
  443. package/dist/extensions/pi-subagents/test/unit/notify.test.ts +106 -2
  444. package/dist/extensions/pi-subagents/test/unit/orca-progress-tabs.test.ts +204 -7
  445. package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +59 -4
  446. package/dist/extensions/pi-subagents/test/unit/path-handling.test.ts +2 -6
  447. package/dist/extensions/pi-subagents/test/unit/pi-args-permission-system.test.ts +34 -2
  448. package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +116 -6
  449. package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +12 -3
  450. package/dist/extensions/pi-subagents/test/unit/pi-spawn.test.ts +56 -61
  451. package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +416 -1
  452. package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +9 -2
  453. package/dist/extensions/pi-subagents/test/unit/project-panes-public-api.test.ts +42 -0
  454. package/dist/extensions/pi-subagents/test/unit/prompt-workflows.test.ts +21 -30
  455. package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +86 -11
  456. package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +49 -1
  457. package/dist/extensions/pi-subagents/test/unit/result-files.test.ts +233 -5
  458. package/dist/extensions/pi-subagents/test/unit/retained-children.test.ts +28 -5
  459. package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +323 -20
  460. package/dist/extensions/pi-subagents/test/unit/run-id-resolver.test.ts +66 -10
  461. package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +68 -5
  462. package/dist/extensions/pi-subagents/test/unit/runtime-agent-registration.test.ts +174 -0
  463. package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +679 -0
  464. package/dist/extensions/pi-subagents/test/unit/scheduled-store-root.test.ts +67 -0
  465. package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +55 -44
  466. package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +399 -84
  467. package/dist/extensions/pi-subagents/test/unit/session-lease.test.ts +13 -0
  468. package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +1 -1
  469. package/dist/extensions/pi-subagents/test/unit/slash-bridge.test.ts +15 -10
  470. package/dist/extensions/pi-subagents/test/unit/stale-run-reconciler.test.ts +11 -7
  471. package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +2 -0
  472. package/dist/extensions/pi-subagents/test/unit/steering.test.ts +40 -1
  473. package/dist/extensions/pi-subagents/test/unit/subagent-action-recovery.test.ts +10 -2
  474. package/dist/extensions/pi-subagents/test/unit/subagent-control.test.ts +38 -3
  475. package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +110 -12
  476. package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +204 -19
  477. package/dist/extensions/pi-subagents/test/unit/temp-paths.test.ts +25 -0
  478. package/dist/extensions/pi-subagents/test/unit/thinking-ceiling.test.ts +73 -0
  479. package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +90 -50
  480. package/dist/extensions/pi-subagents/test/unit/tool-timeout.test.ts +1 -2
  481. package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +234 -7
  482. package/dist/extensions/pi-subagents/test/unit/watch-strategy.test.ts +24 -0
  483. package/dist/extensions/pi-subagents/test/unit/watchdog-permission-arbiter.test.ts +36 -0
  484. package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +37 -9
  485. package/dist/extensions/pi-subagents/test/unit/workflow-detach-reconcile.test.ts +302 -0
  486. package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +167 -7
  487. package/dist/extensions/pi-subagents/test/unit/workflow-receipt.test.ts +113 -0
  488. package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +6 -6
  489. package/dist/extensions/ponytail/index.js +31 -25
  490. package/dist/extensions/ponytail/ponytail-config.cjs +34 -7
  491. package/dist/extensions/ponytail/ponytail-instructions.cjs +7 -9
  492. package/dist/extensions/ponytail/test/extension.test.js +7 -8
  493. package/dist/extensions/ponytail/test/helpers.test.js +1 -1
  494. package/dist/skills/brandkit/SKILL.md +799 -0
  495. package/dist/skills/design-taste-frontend/SKILL.md +1207 -0
  496. package/dist/skills/design-taste-frontend-v1/SKILL.md +227 -0
  497. package/dist/skills/full-output-enforcement/SKILL.md +50 -0
  498. package/dist/skills/gpt-taste/SKILL.md +75 -0
  499. package/dist/skills/high-end-visual-design/SKILL.md +99 -0
  500. package/dist/skills/image-to-code/SKILL.md +1229 -0
  501. package/dist/skills/imagegen-frontend-mobile/SKILL.md +1466 -0
  502. package/dist/skills/imagegen-frontend-web/SKILL.md +988 -0
  503. package/dist/skills/industrial-brutalist-ui/SKILL.md +93 -0
  504. package/dist/skills/minimalist-ui/SKILL.md +86 -0
  505. package/dist/skills/pi-subagents/SKILL.md +18 -17
  506. package/dist/skills/pi-subagents/references/constraints-and-recipes.md +31 -9
  507. package/dist/skills/pi-subagents/references/execution-controls.md +95 -143
  508. package/dist/skills/pi-subagents/references/management-authoring-rpc.md +9 -12
  509. package/dist/skills/pi-subagents/references/multi-lane-orchestration.md +39 -0
  510. package/dist/skills/pi-subagents/references/prompting-and-roles.md +45 -94
  511. package/dist/skills/ponytail/SKILL.md +12 -8
  512. package/dist/skills/ponytail-audit/SKILL.md +0 -1
  513. package/dist/skills/ponytail-debt/SKILL.md +0 -1
  514. package/dist/skills/ponytail-gain/SKILL.md +0 -1
  515. package/dist/skills/ponytail-help/SKILL.md +4 -3
  516. package/dist/skills/ponytail-review/SKILL.md +0 -1
  517. package/dist/skills/redesign-existing-projects/SKILL.md +179 -0
  518. package/dist/skills/stitch-design-taste/SKILL.md +185 -0
  519. package/dist/skills/unlazy/CHANGELOG.md +100 -0
  520. package/dist/skills/unlazy/CONTRIBUTING.md +66 -0
  521. package/dist/skills/unlazy/LICENSE +21 -0
  522. package/dist/skills/unlazy/README.md +242 -0
  523. package/dist/skills/unlazy/SECURITY.md +70 -0
  524. package/dist/skills/unlazy/SKILL.md +100 -0
  525. package/dist/skills/unlazy/package.json +13 -0
  526. package/dist/skills/unlazy/references/dispatch.md +82 -0
  527. package/dist/skills/unlazy/references/gates.md +132 -0
  528. package/dist/skills/unlazy/references/method.md +49 -0
  529. package/dist/skills/unlazy/references/orchestration.md +99 -0
  530. package/dist/skills/unlazy/references/parallel.md +123 -0
  531. package/dist/skills/unlazy/references/token-economy.md +39 -0
  532. package/dist/skills/unlazy/research/validation-protocol.md +81 -0
  533. package/dist/skills/unlazy/scripts/dispatch-check.mjs +108 -0
  534. package/dist/skills/unlazy/scripts/gate-check.mjs +894 -0
  535. package/dist/skills/unlazy/scripts/gate-lint.mjs +178 -0
  536. package/dist/skills/unlazy/scripts/install-hooks.mjs +206 -0
  537. package/dist/skills/unlazy/scripts/lib/check-supervisor.mjs +46 -0
  538. package/dist/skills/unlazy/scripts/lib/dispatch.mjs +283 -0
  539. package/dist/skills/unlazy/scripts/lib/gates.mjs +629 -0
  540. package/dist/skills/unlazy/scripts/lib/process-tree.mjs +161 -0
  541. package/dist/skills/unlazy/scripts/lib/regex-worker.mjs +9 -0
  542. package/dist/skills/unlazy/scripts/stop-hook.mjs +174 -0
  543. package/dist/skills/unlazy/templates/PLAN.md +65 -0
  544. package/dist/skills/unlazy/templates/gates-leaf.md +51 -0
  545. package/dist/skills/unlazy/templates/gates-node.md +50 -0
  546. package/dist/skills/unlazy/tests/contract-tests.mjs +127 -0
  547. package/dist/skills/unlazy/tests/dispatch-tests.mjs +481 -0
  548. package/dist/skills/unlazy/tests/hardening-tests.mjs +903 -0
  549. package/dist/skills/unlazy/tests/lint-tests.mjs +242 -0
  550. package/dist/skills/unlazy/tests/run-tests.mjs +554 -0
  551. package/dist/skills/unlazy/tests/self-check.mjs +165 -0
  552. package/dist/skills/unlazy/tests/stress-tests.mjs +356 -0
  553. package/dist/skills/web-design-guidelines/SKILL.md +40 -0
  554. package/docs/settings.md +0 -5
  555. package/package.json +1 -1
  556. package/dist/core/tools/schema-prune.d.ts +0 -16
  557. package/dist/core/tools/schema-prune.js +0 -39
  558. package/dist/core/tools/schema-prune.test.d.ts +0 -1
  559. package/dist/core/tools/schema-prune.test.js +0 -111
  560. package/dist/extensions/pi-subagents/UPSTREAM-V0.50-MAPPING.md +0 -172
  561. package/dist/extensions/pi-subagents/prompts/parallel-context-build.md +0 -55
  562. package/dist/extensions/pi-subagents/prompts/parallel-handoff-plan.md +0 -61
  563. package/dist/extensions/pi-subagents/src/agents/task-aware-routing.ts +0 -132
  564. package/dist/extensions/pi-subagents/src/extension/chain-validation.ts +0 -181
  565. package/dist/extensions/pi-subagents/src/runs/foreground/chain-clarify.ts +0 -1354
  566. package/dist/extensions/pi-subagents/src/runs/foreground/chain-execution.ts +0 -1581
  567. package/dist/extensions/pi-subagents/src/shared/env.ts +0 -16
  568. package/dist/extensions/pi-subagents/src/shared/session-lineage.ts +0 -71
  569. package/dist/extensions/pi-subagents/src/slash/inline-subagents.ts +0 -136
  570. package/dist/extensions/pi-subagents/src/workflows/workflow-auto-relaunch.ts +0 -41
  571. package/dist/extensions/pi-subagents/test/integration/chain-clarify.test.ts +0 -466
  572. package/dist/extensions/pi-subagents/test/integration/chain-execution.test.ts +0 -1859
  573. package/dist/extensions/pi-subagents/test/integration/parallel-execution.test.ts +0 -733
  574. package/dist/extensions/pi-subagents/test/unit/builtin-agent-documentation.test.ts +0 -63
  575. package/dist/extensions/pi-subagents/test/unit/chain-validation.test.ts +0 -326
  576. package/dist/extensions/pi-subagents/test/unit/handoff-adoption.test.ts +0 -103
  577. package/dist/extensions/pi-subagents/test/unit/inline-subagents.test.ts +0 -127
  578. package/dist/extensions/pi-subagents/test/unit/session-lineage.test.ts +0 -73
  579. package/dist/extensions/pi-subagents/test/unit/task-aware-routing.test.ts +0 -213
  580. package/dist/extensions/pi-subagents/test/unit/workflow-auto-relaunch.test.ts +0 -65
@@ -3,7 +3,7 @@ import { StringEnum } from "@earendil-works/pi-ai";
3
3
  import { randomUUID } from "crypto";
4
4
  import { Type } from "typebox";
5
5
  import { Text } from "@earendil-works/pi-tui";
6
- import { IntercomClient } from "./broker/client.ts";
6
+ import { IntercomClient, type SendResult } from "./broker/client.ts";
7
7
  import { spawnBrokerIfNeeded } from "./broker/spawn.ts";
8
8
  import { SessionListOverlay } from "./ui/session-list.ts";
9
9
  import { ComposeOverlay, type ComposeResult } from "./ui/compose.ts";
@@ -14,18 +14,28 @@ import type { Attachment, BrokerMessage, Message, MessageControl, MessageReceipt
14
14
  import {
15
15
  INTERCOM_EXTENSION_REGISTER_EVENT,
16
16
  INTERCOM_EXTENSION_REGISTRY_READY_EVENT,
17
+ INTERCOM_OUTBOX_REQUEST_EVENT,
18
+ INTERCOM_OUTBOX_RESULT_EVENT,
17
19
  type IntercomExtensionChannel,
18
20
  type IntercomExtensionEvent,
19
21
  type IntercomExtensionOwner,
20
22
  type IntercomExtensionRegistration,
21
23
  type IntercomExtensionState,
24
+ type IntercomOutboxRequestV1,
25
+ type IntercomOutboxResultCode,
26
+ type IntercomOutboxResultStatus,
27
+ type IntercomOutboxResultV1,
22
28
  } from "./extension-api.ts";
23
29
  import { ReplyTracker } from "./reply-tracker.ts";
30
+ import { realpathSync } from "node:fs";
24
31
  import { resolve as resolvePath } from "node:path";
32
+ import { fileURLToPath } from "node:url";
25
33
  import { sameCwd } from "./cwd.ts";
26
34
  import { formatContextUsage } from "./format-context.ts";
27
35
  import { openProjectPane, resolveTargetInCwd, waitForProjectSession, type ProjectPaneLaunch } from "./project-agent.ts";
28
36
 
37
+ const INTERCOM_TOOL_NAME = "intercom";
38
+ const INTERCOM_SKILL_PATH = realpathSync(fileURLToPath(new URL("./skills/pi-intercom/SKILL.md", import.meta.url)));
29
39
  const SUBAGENT_CONTROL_INTERCOM_EVENT = "subagent:control-intercom";
30
40
  const SUBAGENT_RESULT_INTERCOM_EVENT = "subagent:result-intercom";
31
41
  const SUBAGENT_RESULT_INTERCOM_DELIVERY_EVENT = "subagent:result-intercom-delivery";
@@ -65,6 +75,24 @@ interface DeliveryTarget {
65
75
  projectPane?: ProjectPaneLaunch;
66
76
  }
67
77
 
78
+ interface OutboxTarget {
79
+ id: string;
80
+ label: string;
81
+ }
82
+
83
+ interface OutboxRequestTrace {
84
+ requestId: string;
85
+ extensionId?: string;
86
+ extensionName?: string;
87
+ to?: string;
88
+ message?: string;
89
+ }
90
+
91
+ interface PendingOutboxRequest {
92
+ generation: number;
93
+ request: OutboxRequestTrace;
94
+ }
95
+
68
96
  type ContactSupervisorReason = "need_decision" | "progress_update" | "interview_request";
69
97
 
70
98
  interface SupervisorInterviewQuestion extends Record<string, unknown> {
@@ -88,6 +116,30 @@ function getErrorMessage(error: unknown): string {
88
116
  return error instanceof Error ? error.message : String(error);
89
117
  }
90
118
 
119
+ function isIntercomSkillRead(input: unknown, cwd: string): boolean {
120
+ if (!input || typeof input !== "object") return false;
121
+ const inputPath = Reflect.get(input, "path");
122
+ if (typeof inputPath !== "string") return false;
123
+ const normalizedPath = inputPath.startsWith("@") ? inputPath.slice(1) : inputPath;
124
+ try {
125
+ return realpathSync(resolvePath(cwd, normalizedPath)) === INTERCOM_SKILL_PATH;
126
+ } catch {
127
+ return false;
128
+ }
129
+ }
130
+
131
+ function deliveryDetails(result: SendResult): Record<string, unknown> {
132
+ return {
133
+ messageId: result.id,
134
+ delivered: result.delivered,
135
+ delivery: result.delivery,
136
+ retryable: result.retryable,
137
+ outcomeKnown: result.outcomeKnown,
138
+ ...(result.code ? { code: result.code } : {}),
139
+ ...(result.reason ? { reason: result.reason } : {}),
140
+ };
141
+ }
142
+
91
143
  function toError(error: unknown): Error {
92
144
  return error instanceof Error ? error : new Error(String(error));
93
145
  }
@@ -416,6 +468,44 @@ function parseSubagentIntercomPayload(payload: unknown): { to: string; message:
416
468
  const requestId = typeof record.requestId === "string" ? record.requestId : undefined;
417
469
  return { to: record.to, message: record.message, ...(requestId ? { requestId } : {}) };
418
470
  }
471
+ function parseOutboxRequestPayload(payload: unknown): { ok: true; request: IntercomOutboxRequestV1 } | { ok: false; requestId?: string; extensionId?: string; extensionName?: string; detail: string } {
472
+ if (typeof payload !== "object" || payload === null || Array.isArray(payload)) {
473
+ return { ok: false, detail: "request must be an object" };
474
+ }
475
+ const record = payload as Record<string, unknown>;
476
+ const requestId = typeof record.requestId === "string" && record.requestId.trim() ? record.requestId : undefined;
477
+ const extensionId = typeof record.extensionId === "string" && record.extensionId.trim() ? record.extensionId.trim() : undefined;
478
+ const extensionName = typeof record.extensionName === "string" && record.extensionName.trim() ? record.extensionName.trim() : undefined;
479
+ if (record.version !== 1) {
480
+ return { ok: false, requestId, extensionId, extensionName, detail: "version must be 1" };
481
+ }
482
+ if (!requestId) {
483
+ return { ok: false, extensionId, extensionName, detail: "requestId is required" };
484
+ }
485
+ if (!extensionId) {
486
+ return { ok: false, requestId, extensionName, detail: "extensionId is required" };
487
+ }
488
+ if (!extensionName) {
489
+ return { ok: false, requestId, extensionId, detail: "extensionName is required" };
490
+ }
491
+ if (typeof record.to !== "string" || !record.to.trim()) {
492
+ return { ok: false, requestId, extensionId, extensionName, detail: "to is required" };
493
+ }
494
+ if (typeof record.message !== "string" || !record.message.trim()) {
495
+ return { ok: false, requestId, extensionId, extensionName, detail: "message is required" };
496
+ }
497
+ return {
498
+ ok: true,
499
+ request: {
500
+ version: 1,
501
+ requestId,
502
+ extensionId,
503
+ extensionName,
504
+ to: record.to.trim(),
505
+ message: record.message,
506
+ },
507
+ };
508
+ }
419
509
  function resolveIntercomPresenceName(sessionName: string | undefined, sessionId: string): string {
420
510
  const trimmedName = sessionName?.trim();
421
511
  if (trimmedName) {
@@ -434,8 +524,16 @@ function buildPresenceIdentity(pi: ExtensionAPI, sessionId: string): { name: str
434
524
  function resolveConfiguredIntercomSessionId(piSessionId: string, config: IntercomConfig): string {
435
525
  return process.env[STABLE_INTERCOM_SESSION_ID_ENV]?.trim() || config.stableId || piSessionId;
436
526
  }
527
+ // The tmux pane id (e.g. "%212") the session was launched in. $TMUX_PANE is
528
+ // inherited at process start and immutable for the lifetime — moving the pane
529
+ // between windows keeps its id — so it is a stable join key a peer can use to
530
+ // live-resolve the current window via tmux. Absent outside tmux.
531
+ function currentTmuxPane(): string | undefined {
532
+ const pane = process.env.TMUX_PANE?.trim();
533
+ return pane ? pane : undefined;
534
+ }
437
535
  function formatIntercomContactSnippet(sessionId: string): string {
438
- return `Use pi-intercom: intercom({ action: "send", to: "${sessionId}", message: "..." })`;
536
+ return `Use pi-intercom: intercom({ action: "send", to: "${sessionId}", message: "..." })`;
439
537
  }
440
538
  function formatSessionLabel(session: SessionInfo, duplicates: Set<string>): string {
441
539
  if (!session.name) {
@@ -450,7 +548,8 @@ function formatSessionListRow(session: SessionInfo, currentCwd: string, isSelf:
450
548
  const tags = [isSelf ? "self" : session.cwd === currentCwd ? "same cwd" : undefined, session.status]
451
549
  .filter((tag): tag is string => Boolean(tag));
452
550
  const suffix = tags.length ? ` [${tags.join(", ")}]` : "";
453
- return `• ${name} (${idPrefix}) — ${session.cwd} (${session.model}${formatContextUsage(session)})${suffix}`;
551
+ const pane = session.tmuxPane ? ` · tmux ${session.tmuxPane}` : "";
552
+ return `• ${name} (${idPrefix}) — ${session.cwd} (${session.model}${formatContextUsage(session)}${pane})${suffix}`;
454
553
  }
455
554
  function previewText(value: unknown, maxLength = 72): string | undefined {
456
555
  if (typeof value !== "string") {
@@ -523,9 +622,28 @@ export default function piIntercomExtension(pi: ExtensionAPI) {
523
622
  let runtimeGeneration = 0;
524
623
  let agentRunning = false;
525
624
  const activeTools = new Map<string, string>();
625
+ let intercomToolHiddenByPolicy = false;
526
626
  const replyTracker = new ReplyTracker();
627
+ function hideIntercomTool(): void {
628
+ if (config.toolVisibility !== "after-first-use") return;
629
+ const activeToolNames = pi.getActiveTools();
630
+ if (!activeToolNames.includes(INTERCOM_TOOL_NAME)) return;
631
+ pi.setActiveTools(activeToolNames.filter((name) => name !== INTERCOM_TOOL_NAME));
632
+ intercomToolHiddenByPolicy = true;
633
+ }
634
+ function activateIntercomTool(): void {
635
+ if (!intercomToolHiddenByPolicy) return;
636
+ const activeToolNames = pi.getActiveTools();
637
+ if (!activeToolNames.includes(INTERCOM_TOOL_NAME)) {
638
+ pi.setActiveTools([...activeToolNames, INTERCOM_TOOL_NAME]);
639
+ }
640
+ intercomToolHiddenByPolicy = false;
641
+ }
642
+
527
643
  const seenInboundMessages = new Map<string, number>();
528
644
  const latestOutboundReceipts = new Map<string, { status: MessageReceiptStatus; timestamp: number; detail?: string }>();
645
+ const outboxRequestIds = new Set<string>();
646
+ const pendingOutboxRequests = new Map<string, PendingOutboxRequest>();
529
647
  function dismissIncomingAsk(messageId: string): void {
530
648
  replyTracker.dismissPendingAsk(messageId);
531
649
  }
@@ -770,6 +888,7 @@ export default function piIntercomExtension(pi: ExtensionAPI) {
770
888
  }
771
889
 
772
890
  const identity = buildPresenceIdentity(pi, currentIntercomSessionId ?? currentSessionId);
891
+ const tmuxPane = currentTmuxPane();
773
892
  return {
774
893
  ...identity,
775
894
  cwd: liveContext.cwd,
@@ -778,6 +897,7 @@ export default function piIntercomExtension(pi: ExtensionAPI) {
778
897
  startedAt: sessionStartedAt,
779
898
  lastActivity: Date.now(),
780
899
  status: currentStatus(),
900
+ ...(tmuxPane ? { tmuxPane } : {}),
781
901
  ...(localExtensions.size > 0
782
902
  ? {
783
903
  extensions: currentExtensionCapabilities(),
@@ -861,6 +981,207 @@ export default function piIntercomExtension(pi: ExtensionAPI) {
861
981
  return Boolean(resolvedTo && activeClient?.sessionId && resolvedTo === activeClient.sessionId)
862
982
  || targets.has(to.trim().toLowerCase());
863
983
  }
984
+ function buildOutboxResult(request: OutboxRequestTrace, status: IntercomOutboxResultStatus, options: {
985
+ code?: IntercomOutboxResultCode;
986
+ detail?: string;
987
+ messageId?: string;
988
+ } = {}): IntercomOutboxResultV1 {
989
+ return {
990
+ version: 1,
991
+ requestId: request.requestId,
992
+ status,
993
+ ...(options.code ? { code: options.code } : {}),
994
+ ...(request.extensionId ? { extensionId: request.extensionId } : {}),
995
+ ...(request.extensionName ? { extensionName: request.extensionName } : {}),
996
+ ...(options.messageId ? { messageId: options.messageId } : {}),
997
+ ...(options.detail ? { detail: options.detail } : {}),
998
+ };
999
+ }
1000
+ function emitOutboxResult(result: IntercomOutboxResultV1, request: OutboxRequestTrace): void {
1001
+ pi.appendEntry("intercom_outbox_result", {
1002
+ ...result,
1003
+ ...(request.to ? { to: request.to } : {}),
1004
+ ...(request.message ? { message: { text: request.message } } : {}),
1005
+ timestamp: Date.now(),
1006
+ });
1007
+ pi.events.emit(INTERCOM_OUTBOX_RESULT_EVENT, result);
1008
+ }
1009
+ function settleOutboxRequest(requestId: string, status: IntercomOutboxResultStatus, options: {
1010
+ code?: IntercomOutboxResultCode;
1011
+ detail?: string;
1012
+ messageId?: string;
1013
+ } = {}): boolean {
1014
+ const pending = pendingOutboxRequests.get(requestId);
1015
+ if (!pending) {
1016
+ return false;
1017
+ }
1018
+ pendingOutboxRequests.delete(requestId);
1019
+ emitOutboxResult(buildOutboxResult(pending.request, status, options), pending.request);
1020
+ return true;
1021
+ }
1022
+ function failPendingOutboxRequests(generation: number, code: IntercomOutboxResultCode, detail: string): void {
1023
+ for (const [requestId, pending] of [...pendingOutboxRequests]) {
1024
+ if (pending.generation === generation) {
1025
+ settleOutboxRequest(requestId, "failed", { code, detail });
1026
+ }
1027
+ }
1028
+ }
1029
+ function resolveOutboxTarget(sessions: SessionInfo[], currentId: string, to: string): { ok: true; target: OutboxTarget } | { ok: false; code: "target_not_found" | "target_ambiguous" | "self_target"; detail: string } {
1030
+ const byId = sessions.find((session) => session.id === to);
1031
+ const lowerName = to.toLowerCase();
1032
+ const byName = byId ? [] : sessions.filter((session) => session.name?.toLowerCase() === lowerName);
1033
+ const byPrefix = byId || byName.length > 0 ? [] : sessions.filter((session) => session.id.startsWith(to));
1034
+ const matches = byId ? [byId] : byName.length > 0 ? byName : byPrefix;
1035
+ if (matches.length === 0) {
1036
+ return { ok: false, code: "target_not_found", detail: `Session "${to}" is not currently connected.` };
1037
+ }
1038
+ if (matches.length > 1) {
1039
+ return { ok: false, code: "target_ambiguous", detail: `Multiple sessions match "${to}".` };
1040
+ }
1041
+ const target = matches[0]!;
1042
+ if (target.id === currentId) {
1043
+ return { ok: false, code: "self_target", detail: "Cannot message the current session." };
1044
+ }
1045
+ return { ok: true, target: { id: target.id, label: target.name || target.id } };
1046
+ }
1047
+ function handleOutboxRequest(payload: unknown): void {
1048
+ const parsed = parseOutboxRequestPayload(payload);
1049
+ if (parsed.ok === false) {
1050
+ if (parsed.requestId) {
1051
+ const trace: OutboxRequestTrace = {
1052
+ requestId: parsed.requestId,
1053
+ ...(parsed.extensionId ? { extensionId: parsed.extensionId } : {}),
1054
+ ...(parsed.extensionName ? { extensionName: parsed.extensionName } : {}),
1055
+ };
1056
+ emitOutboxResult(buildOutboxResult(trace, "rejected", { code: "invalid_request", detail: parsed.detail }), trace);
1057
+ }
1058
+ return;
1059
+ }
1060
+
1061
+ const request = parsed.request;
1062
+ const trace: OutboxRequestTrace = {
1063
+ requestId: request.requestId,
1064
+ extensionId: request.extensionId,
1065
+ extensionName: request.extensionName,
1066
+ to: request.to,
1067
+ message: request.message,
1068
+ };
1069
+ if (outboxRequestIds.has(request.requestId)) {
1070
+ emitOutboxResult(buildOutboxResult(trace, "rejected", { code: "duplicate_request", detail: "requestId has already been used in this session runtime" }), trace);
1071
+ return;
1072
+ }
1073
+ outboxRequestIds.add(request.requestId);
1074
+
1075
+ const outboxGeneration = runtimeGeneration;
1076
+ pendingOutboxRequests.set(request.requestId, { generation: outboxGeneration, request: trace });
1077
+
1078
+ void (async () => {
1079
+ const liveContext = getLiveContext(runtimeContext, outboxGeneration);
1080
+ if (!liveContext) {
1081
+ settleOutboxRequest(request.requestId, "failed", { code: "session_unavailable", detail: "Intercom session is not active" });
1082
+ return;
1083
+ }
1084
+ if (config.confirmSend && !liveContext.hasUI) {
1085
+ settleOutboxRequest(request.requestId, "blocked", { code: "confirmation_unavailable", detail: "confirmSend is enabled but no UI is available" });
1086
+ return;
1087
+ }
1088
+
1089
+ let activeClient: IntercomClient;
1090
+ try {
1091
+ activeClient = await ensureConnected("background");
1092
+ } catch (error) {
1093
+ settleOutboxRequest(request.requestId, "failed", { code: "session_unavailable", detail: getErrorMessage(error) });
1094
+ return;
1095
+ }
1096
+ if (!getLiveContext(liveContext, outboxGeneration)) {
1097
+ settleOutboxRequest(request.requestId, "failed", { code: "session_ended", detail: "Session ended before target resolution" });
1098
+ return;
1099
+ }
1100
+
1101
+ let target: OutboxTarget;
1102
+ try {
1103
+ const currentClientSessionId = activeClient.sessionId;
1104
+ const sessions = await activeClient.listSessions();
1105
+ if (!currentClientSessionId) {
1106
+ settleOutboxRequest(request.requestId, "failed", { code: "session_unavailable", detail: "Current session is not registered with intercom" });
1107
+ return;
1108
+ }
1109
+ const resolved = resolveOutboxTarget(sessions, currentClientSessionId, request.to);
1110
+ if (resolved.ok === false) {
1111
+ settleOutboxRequest(request.requestId, "blocked", { code: resolved.code, detail: resolved.detail });
1112
+ return;
1113
+ }
1114
+ target = resolved.target;
1115
+ } catch (error) {
1116
+ settleOutboxRequest(request.requestId, "failed", { code: "session_unavailable", detail: getErrorMessage(error) });
1117
+ return;
1118
+ }
1119
+ if (!getLiveContext(liveContext, outboxGeneration)) {
1120
+ settleOutboxRequest(request.requestId, "failed", { code: "session_ended", detail: "Session ended before confirmation" });
1121
+ return;
1122
+ }
1123
+
1124
+ if (config.confirmSend) {
1125
+ let confirmed = false;
1126
+ try {
1127
+ confirmed = await liveContext.ui.confirm(
1128
+ "Send extension message",
1129
+ `Allow ${request.extensionName} (${request.extensionId}) to send to "${target.label}":\n\n${request.message}`,
1130
+ );
1131
+ } catch (error) {
1132
+ settleOutboxRequest(request.requestId, "blocked", { code: "confirmation_unavailable", detail: getErrorMessage(error) });
1133
+ return;
1134
+ }
1135
+ if (!getLiveContext(liveContext, outboxGeneration)) {
1136
+ settleOutboxRequest(request.requestId, "failed", { code: "session_ended", detail: "Session ended during confirmation" });
1137
+ return;
1138
+ }
1139
+ if (!confirmed) {
1140
+ settleOutboxRequest(request.requestId, "rejected", { code: "user_cancelled", detail: "User cancelled the outbox request" });
1141
+ return;
1142
+ }
1143
+ }
1144
+
1145
+ try {
1146
+ if (!getLiveContext(liveContext, outboxGeneration) || client !== activeClient || !activeClient.isConnected()) {
1147
+ settleOutboxRequest(request.requestId, "failed", { code: "session_ended", detail: "Session ended before delivery" });
1148
+ return;
1149
+ }
1150
+ const result = await activeClient.send(target.id, {
1151
+ messageId: request.requestId,
1152
+ text: request.message,
1153
+ provenance: {
1154
+ type: "extension_outbox",
1155
+ extensionId: request.extensionId,
1156
+ extensionName: request.extensionName,
1157
+ requestId: request.requestId,
1158
+ },
1159
+ });
1160
+ if (!getLiveContext(liveContext, outboxGeneration)) {
1161
+ settleOutboxRequest(request.requestId, "failed", { code: "session_ended", detail: "Session ended during delivery" });
1162
+ return;
1163
+ }
1164
+ if (!result.delivered) {
1165
+ settleOutboxRequest(request.requestId, "failed", { code: "delivery_failed", messageId: result.id, detail: result.reason ?? "Delivery failed" });
1166
+ return;
1167
+ }
1168
+ pi.appendEntry("intercom_sent", {
1169
+ to: target.label,
1170
+ message: { text: request.message },
1171
+ messageId: result.id,
1172
+ timestamp: Date.now(),
1173
+ extension: { id: request.extensionId, name: request.extensionName, requestId: request.requestId },
1174
+ });
1175
+ settleOutboxRequest(request.requestId, "sent", { messageId: result.id });
1176
+ } catch (error) {
1177
+ const live = getLiveContext(liveContext, outboxGeneration);
1178
+ settleOutboxRequest(request.requestId, "failed", {
1179
+ code: live ? "session_unavailable" : "session_ended",
1180
+ detail: getErrorMessage(error),
1181
+ });
1182
+ }
1183
+ })();
1184
+ }
864
1185
  function shouldTriggerInboundMessage(entry: InboundMessageEntry, forceTrigger = false): boolean {
865
1186
  if (forceTrigger) {
866
1187
  return true;
@@ -899,6 +1220,10 @@ export default function piIntercomExtension(pi: ExtensionAPI) {
899
1220
  : { deliverAs: "steer" }
900
1221
  );
901
1222
  }
1223
+ function sendIncomingBrokerMessage(entry: InboundMessageEntry, delivery: "trigger" | "steer", generation = runtimeGeneration): void {
1224
+ activateIntercomTool();
1225
+ sendIncomingMessage(entry, delivery, generation);
1226
+ }
902
1227
  function handleIncomingMessage(ctx: ExtensionContext, from: SessionInfo, message: Message): void {
903
1228
  const messageGeneration = runtimeGeneration;
904
1229
  const liveContext = getLiveContext(ctx, messageGeneration);
@@ -956,11 +1281,11 @@ export default function piIntercomExtension(pi: ExtensionAPI) {
956
1281
  }
957
1282
  return;
958
1283
  }
959
- sendIncomingMessage(entry, "steer");
1284
+ sendIncomingBrokerMessage(entry, "steer");
960
1285
  return;
961
1286
  }
962
1287
  if (getLiveContext(liveContext, messageGeneration)) {
963
- sendIncomingMessage(entry, "trigger", messageGeneration);
1288
+ sendIncomingBrokerMessage(entry, "trigger", messageGeneration);
964
1289
  }
965
1290
  })();
966
1291
  }
@@ -1202,7 +1527,7 @@ export default function piIntercomExtension(pi: ExtensionAPI) {
1202
1527
  return { id: existing.session.id, label: options.to || existing.session.name || existing.session.id };
1203
1528
  }
1204
1529
  if (!options.openProjectPaneIfMissing) {
1205
- throw new Error(`${existing.reason ?? `No intercom session is connected in ${targetCwd}.`} Pass openProjectPaneIfMissing: true to open a Herdr project pane and start Pi there.`);
1530
+ throw new Error(`${existing.reason ?? `No intercom session is connected in ${targetCwd}.`} Pass openProjectPaneIfMissing: true to open a Herdr project pane and start Selesai there.`);
1206
1531
  }
1207
1532
 
1208
1533
  const beforeSessionIds = new Set(sessions.map((session) => session.id));
@@ -1247,11 +1572,14 @@ export default function piIntercomExtension(pi: ExtensionAPI) {
1247
1572
  });
1248
1573
  }
1249
1574
  function startSessionRuntime(ctx: ExtensionContext): void {
1575
+ hideIntercomTool();
1250
1576
  const previousClient = client;
1577
+ failPendingOutboxRequests(runtimeGeneration, "session_ended", "Session replaced");
1251
1578
  shuttingDown = false;
1252
1579
  disposed = false;
1253
1580
  runtimeStarted = true;
1254
1581
  runtimeGeneration += 1;
1582
+ outboxRequestIds.clear();
1255
1583
  reconnectAttempt = 0;
1256
1584
  clearReconnectTimer();
1257
1585
  clearStartupConnectTimer();
@@ -1385,6 +1713,7 @@ export default function piIntercomExtension(pi: ExtensionAPI) {
1385
1713
  acknowledge: true,
1386
1714
  });
1387
1715
  });
1716
+ const unsubscribeOutboxRequest = pi.events.on(INTERCOM_OUTBOX_REQUEST_EVENT, handleOutboxRequest);
1388
1717
  pi.on("session_start", (_event, ctx) => {
1389
1718
  if (!config.enabled) {
1390
1719
  return;
@@ -1396,8 +1725,10 @@ export default function piIntercomExtension(pi: ExtensionAPI) {
1396
1725
  unsubscribeExtensionRegister();
1397
1726
  unsubscribeSubagentControlIntercom();
1398
1727
  unsubscribeSubagentResultIntercom();
1728
+ unsubscribeOutboxRequest();
1399
1729
  shuttingDown = true;
1400
1730
  disposed = true;
1731
+ failPendingOutboxRequests(runtimeGeneration, "session_ended", "Session shutting down");
1401
1732
  runtimeGeneration += 1;
1402
1733
  clearStartupConnectTimer();
1403
1734
  clearReconnectTimer();
@@ -1468,13 +1799,6 @@ export default function piIntercomExtension(pi: ExtensionAPI) {
1468
1799
  syncPresenceIdentity(sessionId);
1469
1800
  replyTracker.beginTurn();
1470
1801
  });
1471
- pi.on("session_info_changed", (_event, ctx) => {
1472
- if (!getLiveContext(ctx)) {
1473
- return;
1474
- }
1475
- currentSessionId = ctx.sessionManager.getSessionId();
1476
- syncPresenceIdentity(ctx.sessionManager.getSessionId());
1477
- });
1478
1802
  pi.on("model_select", (event, ctx) => {
1479
1803
  if (!getLiveContext(ctx)) {
1480
1804
  return;
@@ -1495,7 +1819,17 @@ export default function piIntercomExtension(pi: ExtensionAPI) {
1495
1819
  return new InlineMessageComponent(details.from, details.message, theme, details.replyCommand, details.bodyText, !options.expanded);
1496
1820
  });
1497
1821
 
1498
- pi.on("tool_result", (event) => {
1822
+ pi.on("input", (event) => {
1823
+ if (/^\/skill: pi-intercom(?:\s|$)/u.test(event.text.trimStart())) {
1824
+ activateIntercomTool();
1825
+ }
1826
+ });
1827
+
1828
+ pi.on("tool_result", (event, ctx) => {
1829
+ if (event.toolName === "read" && event.isError !== true && isIntercomSkillRead(event.input, ctx.cwd)) {
1830
+ activateIntercomTool();
1831
+ return;
1832
+ }
1499
1833
  if (event.toolName !== "intercom" && event.toolName !== "contact_supervisor") {
1500
1834
  return;
1501
1835
  }
@@ -1628,7 +1962,7 @@ export default function piIntercomExtension(pi: ExtensionAPI) {
1628
1962
  const errorText = result.reason ?? "Session may not exist or has disconnected.";
1629
1963
  return {
1630
1964
  content: [{ type: "text", text: `Message to "${metadata.orchestratorTarget}" was not delivered: ${errorText}` }],
1631
- details: { messageId: result.id, delivered: false, reason: result.reason },
1965
+ details: deliveryDetails(result),
1632
1966
  };
1633
1967
  }
1634
1968
  pi.appendEntry("intercom_sent", {
@@ -1791,7 +2125,7 @@ Use this to communicate findings, request help, or coordinate work with other se
1791
2125
 
1792
2126
  Target a session by name, full session ID, or the short id shown in parentheses
1793
2127
  by "list" (a leading prefix of the ID is enough). Prefer the short id when two
1794
- sessions share a name.
2128
+ sessions share a name. Re-list before reusing a session ID; skip if it resolves to self.
1795
2129
 
1796
2130
  Usage:
1797
2131
  intercom({ action: "list" }) → List active sessions
@@ -1839,7 +2173,7 @@ Usage:
1839
2173
  description: "Working directory filter for 'list-cwd'. For send/ask, scopes target lookup to that directory; omit 'to' to target the sole live peer there. Absolute, or relative to the current session's cwd; '.' means the current cwd.",
1840
2174
  })),
1841
2175
  openProjectPaneIfMissing: Type.Optional(Type.Boolean({
1842
- description: "For send/ask with cwd, open a visible Herdr project pane and launch Pi there when no matching live session is connected.",
2176
+ description: "For send/ask with cwd, open a visible Herdr project pane and launch Selesai there when no matching live session is connected.",
1843
2177
  })),
1844
2178
  focus: Type.Optional(Type.Boolean({
1845
2179
  description: "For openProjectPaneIfMissing, focus the new Herdr pane. Defaults to true.",
@@ -1847,6 +2181,7 @@ Usage:
1847
2181
  }),
1848
2182
 
1849
2183
  async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
2184
+ activateIntercomTool();
1850
2185
  let connectedClient: IntercomClient;
1851
2186
  try {
1852
2187
  connectedClient = await ensureConnected("tool");
@@ -2040,7 +2375,7 @@ Usage:
2040
2375
  const errorText = result.reason ?? "Session may not exist or has disconnected.";
2041
2376
  return {
2042
2377
  content: [{ type: "text", text: `Message to "${targetDisplay}" was not delivered: ${errorText}` }],
2043
- details: { messageId: result.id, delivered: false, reason: result.reason },
2378
+ details: deliveryDetails(result),
2044
2379
  };
2045
2380
  }
2046
2381
  pi.appendEntry("intercom_sent", {
@@ -2060,8 +2395,7 @@ Usage:
2060
2395
  : inferredAsk ? `Reply sent to ${targetDisplay} (inferred from pending ask)` : `Message sent to ${targetDisplay}`,
2061
2396
  }],
2062
2397
  details: {
2063
- messageId: result.id,
2064
- delivered: true,
2398
+ ...deliveryDetails(result),
2065
2399
  ...(effectiveReplyTo ? { replyTo: effectiveReplyTo } : {}),
2066
2400
  ...(target.projectPane ? { openedProjectPane: true, paneId: target.projectPane.paneId, projectRoot: target.projectPane.projectRoot } : {}),
2067
2401
  },
@@ -2152,7 +2486,7 @@ Usage:
2152
2486
  retryOf,
2153
2487
  });
2154
2488
 
2155
- deliveryState = sendResult.delivered ? "socket_delivered" : "delivery_failed";
2489
+ deliveryState = sendResult.delivery;
2156
2490
  if (!sendResult.delivered) {
2157
2491
  const errorText = sendResult.reason ?? "Session may not exist or has disconnected.";
2158
2492
  rejectReplyWaiter(new Error(`Message to "${targetDisplay}" was not delivered: ${errorText}`));
@@ -2165,7 +2499,7 @@ Usage:
2165
2499
  }
2166
2500
  return {
2167
2501
  content: [{ type: "text", text: `Message to "${targetDisplay}" was not delivered: ${errorText}` }],
2168
- details: { error: true },
2502
+ details: { error: true, ...deliveryDetails(sendResult) },
2169
2503
  };
2170
2504
  }
2171
2505
  pi.appendEntry("intercom_sent", {
@@ -2223,6 +2557,7 @@ Usage:
2223
2557
  }
2224
2558
  const result = await connectedClient.send(target.from.id, {
2225
2559
  text: message,
2560
+ attachments,
2226
2561
  replyTo: target.message.id,
2227
2562
  });
2228
2563
  if (!result.delivered) {
@@ -2232,19 +2567,19 @@ Usage:
2232
2567
  }
2233
2568
  return {
2234
2569
  content: [{ type: "text", text: `Reply to "${target.from.name || target.from.id}" was not delivered: ${errorText}` }],
2235
- details: { messageId: result.id, delivered: false, reason: result.reason },
2570
+ details: deliveryDetails(result),
2236
2571
  };
2237
2572
  }
2238
2573
  dismissIncomingAsk(target.message.id);
2239
2574
  pi.appendEntry("intercom_sent", {
2240
2575
  to: target.from.name || target.from.id,
2241
- message: { text: message, replyTo: target.message.id },
2576
+ message: { text: message, attachments, replyTo: target.message.id },
2242
2577
  messageId: result.id,
2243
2578
  timestamp: Date.now(),
2244
2579
  });
2245
2580
  return {
2246
2581
  content: [{ type: "text", text: `Reply sent to ${target.from.name || target.from.id}` }],
2247
- details: { messageId: result.id, delivered: true, replyTo: target.message.id },
2582
+ details: { ...deliveryDetails(result), replyTo: target.message.id },
2248
2583
  };
2249
2584
  } catch (error) {
2250
2585
  return {
@@ -2426,6 +2761,7 @@ Usage:
2426
2761
  ).catch(() => undefined);
2427
2762
 
2428
2763
  if (result?.sent && result.messageId && result.text && getLiveContext(ctx, overlayGeneration)) {
2764
+ activateIntercomTool();
2429
2765
  pi.appendEntry("intercom_sent", {
2430
2766
  to: selectedSession.name || selectedSession.id,
2431
2767
  message: { text: result.text },
@@ -2442,7 +2778,7 @@ Usage:
2442
2778
  });
2443
2779
 
2444
2780
  pi.registerCommand("intercom-id", {
2445
- description: "Insert a stable pi-intercom handoff snippet for this session into the editor",
2781
+ description: "Insert a stable pi-intercom handoff snippet for this session into the editor",
2446
2782
  handler: async (_args, ctx) => insertIntercomId(ctx),
2447
2783
  });
2448
2784