@fitchmultz/pi-subagents 0.49.0 → 0.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (999) hide show
  1. package/CHANGELOG.md +29 -1
  2. package/README.md +88 -94
  3. package/dist/agent/contracts.js +122 -0
  4. package/dist/agent/cwd.js +51 -0
  5. package/dist/agent/host.js +82 -0
  6. package/dist/agent/index.js +422 -0
  7. package/dist/agent/journal-tail.js +183 -0
  8. package/dist/agent/launch.js +87 -0
  9. package/dist/agent/legacy.js +141 -0
  10. package/dist/agent/notifications.js +119 -0
  11. package/dist/agent/observe-screen.js +132 -0
  12. package/dist/agent/observe.js +234 -0
  13. package/dist/agent/process.js +173 -0
  14. package/dist/agent/receipts.js +75 -0
  15. package/dist/agent/runner.js +372 -0
  16. package/dist/agent/saved.js +195 -0
  17. package/dist/agent/shell.js +43 -0
  18. package/dist/agent/storage.js +113 -0
  19. package/dist/agent/typebox.js +20 -0
  20. package/dist/agent/usage.js +232 -0
  21. package/dist/agent/view.js +164 -0
  22. package/dist/build-info.js +1 -0
  23. package/dist/index.js +8 -0
  24. package/dist/pi-intercom/bridge-config.js +12 -19
  25. package/dist/pi-intercom/bridge-http.js +1 -2
  26. package/dist/pi-intercom/bridge-mailbox.js +2 -7
  27. package/dist/pi-intercom/bridge-protocol.js +3 -10
  28. package/dist/pi-intercom/bridge-routes.js +15 -186
  29. package/dist/pi-intercom/bridge-session.js +2 -96
  30. package/dist/pi-intercom/bridge.js +12 -35
  31. package/dist/pi-intercom/broker/broker.js +33 -38
  32. package/dist/pi-intercom/broker/client-last.js +48 -0
  33. package/dist/pi-intercom/broker/client.js +41 -1
  34. package/dist/pi-intercom/broker/connection.js +5 -18
  35. package/dist/pi-intercom/broker/last.js +173 -0
  36. package/dist/pi-intercom/broker/paths.js +28 -9
  37. package/dist/pi-intercom/broker/server-connection.js +18 -0
  38. package/dist/pi-intercom/broker/spawn.js +32 -16
  39. package/dist/pi-intercom/broker/targets.js +24 -0
  40. package/dist/pi-intercom/config.js +0 -23
  41. package/dist/pi-intercom/connection.js +30 -70
  42. package/dist/pi-intercom/identity.js +14 -44
  43. package/dist/pi-intercom/inbound-delivery.js +8 -69
  44. package/dist/pi-intercom/inbound-journal.js +3 -68
  45. package/dist/pi-intercom/inbound-record.js +2 -48
  46. package/dist/pi-intercom/inbound.js +6 -53
  47. package/dist/pi-intercom/index.js +8 -47
  48. package/dist/pi-intercom/last-message.js +58 -0
  49. package/dist/pi-intercom/lifecycle.js +8 -33
  50. package/dist/pi-intercom/message-format.js +1 -32
  51. package/dist/pi-intercom/outbound.js +9 -1
  52. package/dist/pi-intercom/reply-tracker.js +2 -12
  53. package/dist/pi-intercom/reply-wait.js +16 -107
  54. package/dist/pi-intercom/runtime-types.js +0 -1
  55. package/dist/pi-intercom/session-events.js +5 -21
  56. package/dist/pi-intercom/tool-arguments.js +4 -0
  57. package/dist/pi-intercom/tool-registration.js +5 -86
  58. package/dist/pi-intercom/tool-schemas.js +12 -52
  59. package/dist/pi-intercom/tools.js +55 -29
  60. package/dist/pi-intercom/types.js +10 -3
  61. package/dist/pi-intercom/ui/session-format.js +3 -3
  62. package/dist/shared/journal-projections.js +0 -31
  63. package/dist/shared/types.js +0 -195
  64. package/docs/code-quality.md +4 -3
  65. package/docs/development.md +57 -95
  66. package/docs/intercom-bridge.md +206 -415
  67. package/docs/intercom.md +142 -593
  68. package/docs/performance.md +109 -192
  69. package/docs/reference.md +139 -1452
  70. package/package.json +12 -19
  71. package/scripts/build.mjs +1 -1
  72. package/scripts/intercom-bridge-credentials.mjs +1 -1
  73. package/scripts/intercom-remote.mjs +55 -272
  74. package/scripts/local-install-smoke.mjs +3 -1
  75. package/scripts/measure-size.mjs +64 -0
  76. package/scripts/native-package-smoke.mjs +267 -109
  77. package/scripts/package-smoke.mjs +120 -363
  78. package/scripts/real-pi-processes.mjs +6 -38
  79. package/scripts/real-pi-smoke.mjs +153 -144
  80. package/scripts/run-tests.mjs +4 -3
  81. package/skills/pi-intercom/SKILL.md +53 -107
  82. package/skills/pi-subagents/SKILL.md +45 -59
  83. package/src/agent/contracts.ts +144 -0
  84. package/src/agent/cwd.ts +69 -0
  85. package/src/agent/host.ts +82 -0
  86. package/src/agent/index.ts +486 -0
  87. package/src/agent/journal-tail.ts +184 -0
  88. package/src/agent/launch.ts +112 -0
  89. package/src/agent/legacy.ts +167 -0
  90. package/src/agent/notifications.ts +131 -0
  91. package/src/agent/observe-screen.ts +167 -0
  92. package/src/agent/observe.ts +240 -0
  93. package/src/agent/process.ts +179 -0
  94. package/src/agent/receipts.ts +88 -0
  95. package/src/agent/runner.ts +417 -0
  96. package/src/agent/saved.ts +220 -0
  97. package/src/agent/shell.ts +56 -0
  98. package/src/agent/storage.ts +123 -0
  99. package/src/agent/typebox.ts +17 -0
  100. package/src/agent/usage.ts +263 -0
  101. package/src/agent/view.ts +246 -0
  102. package/src/index.ts +10 -0
  103. package/src/pi-intercom/bridge-config.ts +13 -24
  104. package/src/pi-intercom/bridge-http.ts +1 -2
  105. package/src/pi-intercom/bridge-mailbox.ts +8 -8
  106. package/src/pi-intercom/bridge-protocol.ts +7 -11
  107. package/src/pi-intercom/bridge-routes.ts +29 -277
  108. package/src/pi-intercom/bridge-session.ts +3 -114
  109. package/src/pi-intercom/bridge.ts +12 -35
  110. package/src/pi-intercom/broker/broker.ts +39 -54
  111. package/src/pi-intercom/broker/client-last.ts +65 -0
  112. package/src/pi-intercom/broker/client.ts +45 -3
  113. package/src/pi-intercom/broker/connection.ts +5 -17
  114. package/src/pi-intercom/broker/last.ts +222 -0
  115. package/src/pi-intercom/broker/paths.ts +31 -9
  116. package/src/pi-intercom/broker/server-connection.ts +38 -0
  117. package/src/pi-intercom/broker/spawn.ts +44 -16
  118. package/src/pi-intercom/broker/targets.ts +42 -0
  119. package/src/pi-intercom/config.ts +0 -27
  120. package/src/pi-intercom/connection.ts +41 -84
  121. package/src/pi-intercom/identity.ts +21 -49
  122. package/src/pi-intercom/inbound-delivery.ts +10 -93
  123. package/src/pi-intercom/inbound-journal.ts +4 -81
  124. package/src/pi-intercom/inbound-record.ts +2 -61
  125. package/src/pi-intercom/inbound.ts +7 -69
  126. package/src/pi-intercom/index.ts +10 -49
  127. package/src/pi-intercom/last-message.ts +73 -0
  128. package/src/pi-intercom/lifecycle.ts +14 -41
  129. package/src/pi-intercom/message-format.ts +1 -34
  130. package/src/pi-intercom/outbound.ts +16 -1
  131. package/src/pi-intercom/reply-tracker.ts +2 -19
  132. package/src/pi-intercom/reply-wait.ts +21 -128
  133. package/src/pi-intercom/runtime-types.ts +5 -58
  134. package/src/pi-intercom/session-events.ts +7 -35
  135. package/src/pi-intercom/tool-arguments.ts +6 -0
  136. package/src/pi-intercom/tool-registration.ts +9 -109
  137. package/src/pi-intercom/tool-schemas.ts +17 -80
  138. package/src/pi-intercom/tools.ts +58 -44
  139. package/src/pi-intercom/transport.ts +1 -0
  140. package/src/pi-intercom/types.ts +45 -6
  141. package/src/pi-intercom/ui/session-format.ts +3 -3
  142. package/src/shared/journal-projections.ts +0 -35
  143. package/src/shared/post-exit-stdio-guard.ts +7 -1
  144. package/src/shared/types.ts +0 -257
  145. package/agents/context-builder.md +0 -115
  146. package/agents/debugger.md +0 -58
  147. package/agents/delegate.md +0 -14
  148. package/agents/fixer.md +0 -40
  149. package/agents/oracle.md +0 -82
  150. package/agents/planner.md +0 -83
  151. package/agents/researcher.md +0 -60
  152. package/agents/reviewer-claude.md +0 -78
  153. package/agents/reviewer-gpt.md +0 -78
  154. package/agents/reviewer-ponytail.md +0 -92
  155. package/agents/reviewer-security.md +0 -92
  156. package/agents/reviewer.md +0 -78
  157. package/agents/scout.md +0 -77
  158. package/agents/ui-designer.md +0 -58
  159. package/agents/watcher.md +0 -27
  160. package/agents/worker.md +0 -52
  161. package/agents/writer.md +0 -39
  162. package/dist/agents/agent-defaults.js +0 -9
  163. package/dist/agents/agent-definition.js +0 -196
  164. package/dist/agents/agent-management.js +0 -88
  165. package/dist/agents/agent-scope.js +0 -9
  166. package/dist/agents/agent-selection.js +0 -13
  167. package/dist/agents/agent-serializer.js +0 -88
  168. package/dist/agents/agents.js +0 -111
  169. package/dist/agents/builtin-overrides.js +0 -218
  170. package/dist/agents/chain-serializer.js +0 -3
  171. package/dist/agents/config-values.js +0 -52
  172. package/dist/agents/discovery-paths.js +0 -91
  173. package/dist/agents/frontmatter.js +0 -31
  174. package/dist/agents/identity.js +0 -46
  175. package/dist/agents/json-chain.js +0 -254
  176. package/dist/agents/management-config.js +0 -332
  177. package/dist/agents/management-format.js +0 -231
  178. package/dist/agents/management-persistence.js +0 -287
  179. package/dist/agents/management-targets.js +0 -136
  180. package/dist/agents/management-warnings.js +0 -81
  181. package/dist/agents/markdown-chain.js +0 -210
  182. package/dist/agents/package-agents.js +0 -154
  183. package/dist/agents/skill-files.js +0 -157
  184. package/dist/agents/skill-search-paths.js +0 -246
  185. package/dist/agents/skill-types.js +0 -1
  186. package/dist/agents/skills.js +0 -125
  187. package/dist/extension/acceptance-schema.js +0 -55
  188. package/dist/extension/build-info.js +0 -1
  189. package/dist/extension/chain-schema.js +0 -196
  190. package/dist/extension/child-runtime.js +0 -237
  191. package/dist/extension/compact-tools.js +0 -183
  192. package/dist/extension/config-schema.js +0 -29
  193. package/dist/extension/config.js +0 -38
  194. package/dist/extension/control-notice-schema.js +0 -37
  195. package/dist/extension/control-notices.js +0 -36
  196. package/dist/extension/delegation-bridges.js +0 -43
  197. package/dist/extension/doctor.js +0 -166
  198. package/dist/extension/everyday-schemas.js +0 -207
  199. package/dist/extension/fanout-child.js +0 -25
  200. package/dist/extension/index.js +0 -28
  201. package/dist/extension/message-renderers.js +0 -225
  202. package/dist/extension/nested-control-inbox.js +0 -154
  203. package/dist/extension/parent-runtime.js +0 -339
  204. package/dist/extension/primary-tool.js +0 -69
  205. package/dist/extension/result-snapshot.js +0 -4
  206. package/dist/extension/runtime-reload.js +0 -62
  207. package/dist/extension/runtime-storage.js +0 -43
  208. package/dist/extension/schema-overrides.js +0 -75
  209. package/dist/extension/schemas.js +0 -345
  210. package/dist/extension/tool-input.js +0 -35
  211. package/dist/extension/tool-result.js +0 -29
  212. package/dist/history/answer-texts.js +0 -57
  213. package/dist/history/canonical-result.js +0 -114
  214. package/dist/history/canonical-selection.js +0 -40
  215. package/dist/history/database-generation.js +0 -82
  216. package/dist/history/database.js +0 -96
  217. package/dist/history/entry-ingestion.js +0 -61
  218. package/dist/history/index.js +0 -344
  219. package/dist/history/ingest.js +0 -314
  220. package/dist/history/output-digests.js +0 -40
  221. package/dist/history/preview.js +0 -210
  222. package/dist/history/prune.js +0 -33
  223. package/dist/history/queries.js +0 -81
  224. package/dist/history/query-scope.js +0 -190
  225. package/dist/history/rows.js +0 -77
  226. package/dist/history/run-projection.js +0 -136
  227. package/dist/history/run-queries.js +0 -153
  228. package/dist/history/schema.js +0 -31
  229. package/dist/history/search-queries.js +0 -169
  230. package/dist/history/selected-record.js +0 -108
  231. package/dist/history/source-file.js +0 -45
  232. package/dist/history/source-watches.js +0 -141
  233. package/dist/history/store.js +0 -243
  234. package/dist/history/text-chunks.js +0 -168
  235. package/dist/history/text.js +0 -35
  236. package/dist/history/transcript-queries.js +0 -183
  237. package/dist/history/types.js +0 -8
  238. package/dist/history/values.js +0 -36
  239. package/dist/history/wire-inputs.js +0 -122
  240. package/dist/history/wire-models.js +0 -38
  241. package/dist/history/worker-runtime.js +0 -441
  242. package/dist/history/worker.js +0 -91
  243. package/dist/intercom/intercom-bridge.js +0 -140
  244. package/dist/intercom/live-intercom.js +0 -151
  245. package/dist/intercom/nested-result-tree.js +0 -163
  246. package/dist/intercom/result-delivery.js +0 -40
  247. package/dist/intercom/result-intercom.js +0 -216
  248. package/dist/pi-intercom/bridge-ask.js +0 -57
  249. package/dist/pi-intercom/bridge-broadcast.js +0 -60
  250. package/dist/pi-intercom/bridge-catalog.js +0 -372
  251. package/dist/pi-intercom/bridge-control.js +0 -104
  252. package/dist/pi-intercom/bridge-groups.js +0 -135
  253. package/dist/pi-intercom/bridge-launch-journal.js +0 -84
  254. package/dist/pi-intercom/bridge-launch-policy.js +0 -154
  255. package/dist/pi-intercom/bridge-launch.js +0 -327
  256. package/dist/pi-intercom/bridge-operations.js +0 -127
  257. package/dist/pi-intercom/bridge-rpc-process.js +0 -292
  258. package/dist/pi-intercom/interview.js +0 -236
  259. package/dist/pi-intercom/native-control-auth.js +0 -80
  260. package/dist/pi-intercom/native-control-protocol.js +0 -111
  261. package/dist/pi-intercom/native-control.js +0 -130
  262. package/dist/pi-intercom/peer-awareness.js +0 -66
  263. package/dist/pi-intercom/saved-transcript.js +0 -135
  264. package/dist/pi-intercom/subagent-events.js +0 -238
  265. package/dist/pi-intercom/subagent-live-events.js +0 -175
  266. package/dist/pi-intercom/supervisor.js +0 -282
  267. package/dist/pi-intercom/topic-actions.js +0 -177
  268. package/dist/pi-intercom/topics.js +0 -242
  269. package/dist/pi-intercom/transcript.js +0 -175
  270. package/dist/pi-intercom/ui/compose-paste.js +0 -93
  271. package/dist/pi-intercom/ui/compose.js +0 -247
  272. package/dist/pi-intercom/ui/inline-message.js +0 -80
  273. package/dist/pi-intercom/ui/message-renderers.js +0 -147
  274. package/dist/pi-intercom/ui/overlay.js +0 -181
  275. package/dist/pi-intercom/ui/session-list.js +0 -157
  276. package/dist/pi-intercom/ui/tool-renderers.js +0 -110
  277. package/dist/pi-intercom/ui/topic-view.js +0 -88
  278. package/dist/runs/background/async-chain-plan.js +0 -265
  279. package/dist/runs/background/async-control.js +0 -171
  280. package/dist/runs/background/async-execution.js +0 -179
  281. package/dist/runs/background/async-job-admission.js +0 -40
  282. package/dist/runs/background/async-job-projection.js +0 -169
  283. package/dist/runs/background/async-job-tracker.js +0 -353
  284. package/dist/runs/background/async-launch.js +0 -216
  285. package/dist/runs/background/async-plan.js +0 -116
  286. package/dist/runs/background/async-result-file.js +0 -82
  287. package/dist/runs/background/async-resume.js +0 -247
  288. package/dist/runs/background/async-run-discovery.js +0 -211
  289. package/dist/runs/background/async-run-location.js +0 -135
  290. package/dist/runs/background/async-run-record.js +0 -1
  291. package/dist/runs/background/async-run-repair.js +0 -223
  292. package/dist/runs/background/async-run-summary.js +0 -1
  293. package/dist/runs/background/async-single-plan.js +0 -105
  294. package/dist/runs/background/async-status-projection.js +0 -155
  295. package/dist/runs/background/async-status-render.js +0 -117
  296. package/dist/runs/background/async-status-validation.js +0 -181
  297. package/dist/runs/background/async-status.js +0 -3
  298. package/dist/runs/background/async-value.js +0 -21
  299. package/dist/runs/background/completion-dedupe.js +0 -42
  300. package/dist/runs/background/completion-delivery.js +0 -251
  301. package/dist/runs/background/completion-receipts.js +0 -237
  302. package/dist/runs/background/legacy-status-acceptance.js +0 -34
  303. package/dist/runs/background/notify.js +0 -111
  304. package/dist/runs/background/parallel-groups.js +0 -72
  305. package/dist/runs/background/result-payload.js +0 -178
  306. package/dist/runs/background/result-watcher.js +0 -435
  307. package/dist/runs/background/run-id-resolver.js +0 -84
  308. package/dist/runs/background/run-schemas.js +0 -189
  309. package/dist/runs/background/run-status-contracts.js +0 -14
  310. package/dist/runs/background/run-status-render.js +0 -270
  311. package/dist/runs/background/run-status.js +0 -274
  312. package/dist/runs/background/runner-attempt-output.js +0 -155
  313. package/dist/runs/background/runner-attempt.js +0 -263
  314. package/dist/runs/background/runner-child-executor.js +0 -166
  315. package/dist/runs/background/runner-child-observer.js +0 -197
  316. package/dist/runs/background/runner-completion-summary.js +0 -71
  317. package/dist/runs/background/runner-completion.js +0 -211
  318. package/dist/runs/background/runner-config.js +0 -1
  319. package/dist/runs/background/runner-contract.js +0 -1
  320. package/dist/runs/background/runner-dynamic.js +0 -121
  321. package/dist/runs/background/runner-finalization.js +0 -149
  322. package/dist/runs/background/runner-graph.js +0 -68
  323. package/dist/runs/background/runner-initial-status.js +0 -60
  324. package/dist/runs/background/runner-lifecycle.js +0 -142
  325. package/dist/runs/background/runner-monitor.js +0 -311
  326. package/dist/runs/background/runner-parallel.js +0 -203
  327. package/dist/runs/background/runner-prepare-step.js +0 -86
  328. package/dist/runs/background/runner-reporting.js +0 -153
  329. package/dist/runs/background/runner-status.js +0 -148
  330. package/dist/runs/background/runner-step-output.js +0 -90
  331. package/dist/runs/background/runner-step-record.js +0 -45
  332. package/dist/runs/background/runner-step.js +0 -112
  333. package/dist/runs/background/runner-streaming.js +0 -173
  334. package/dist/runs/background/runner-workflow.js +0 -213
  335. package/dist/runs/background/stale-run-reconciler.js +0 -198
  336. package/dist/runs/background/subagent-runner-launcher.js +0 -75
  337. package/dist/runs/background/subagent-runner.js +0 -81
  338. package/dist/runs/background/top-level-async.js +0 -6
  339. package/dist/runs/foreground/chain-clarify.js +0 -428
  340. package/dist/runs/foreground/clarification-draft.js +0 -87
  341. package/dist/runs/foreground/clarify-contracts.js +0 -1
  342. package/dist/runs/foreground/clarify-invocation.js +0 -163
  343. package/dist/runs/foreground/clarify-text-editor.js +0 -210
  344. package/dist/runs/foreground/clarify-view.js +0 -167
  345. package/dist/runs/foreground/execution-input.js +0 -296
  346. package/dist/runs/foreground/execution-routing.js +0 -33
  347. package/dist/runs/foreground/execution-timeout.js +0 -81
  348. package/dist/runs/foreground/foreground-control.js +0 -276
  349. package/dist/runs/foreground/foreground-memory.js +0 -99
  350. package/dist/runs/foreground/invocation-context.js +0 -55
  351. package/dist/runs/foreground/invocation-execution.js +0 -331
  352. package/dist/runs/foreground/invocation-expansion.js +0 -48
  353. package/dist/runs/foreground/management-actions.js +0 -295
  354. package/dist/runs/foreground/nested-control.js +0 -179
  355. package/dist/runs/foreground/question-continuation.js +0 -78
  356. package/dist/runs/foreground/question-control.js +0 -193
  357. package/dist/runs/foreground/resume-target.js +0 -221
  358. package/dist/runs/foreground/revival-launch-policy.js +0 -58
  359. package/dist/runs/foreground/run-async-path.js +0 -217
  360. package/dist/runs/foreground/run-interrupt.js +0 -164
  361. package/dist/runs/foreground/run-nudge.js +0 -278
  362. package/dist/runs/foreground/saved-revival.js +0 -251
  363. package/dist/runs/foreground/subagent-executor.js +0 -153
  364. package/dist/runs/foreground/subagent-params.js +0 -202
  365. package/dist/runs/foreground/wait-observation.js +0 -104
  366. package/dist/runs/foreground/wait-registration.js +0 -17
  367. package/dist/runs/foreground/wait-run.js +0 -301
  368. package/dist/runs/shared/acceptance-contract.js +0 -347
  369. package/dist/runs/shared/acceptance-defaults.js +0 -1
  370. package/dist/runs/shared/acceptance-evaluation.js +0 -276
  371. package/dist/runs/shared/acceptance-finalization.js +0 -356
  372. package/dist/runs/shared/acceptance-outcome.js +0 -53
  373. package/dist/runs/shared/acceptance-reports.js +0 -212
  374. package/dist/runs/shared/acceptance-submission.js +0 -167
  375. package/dist/runs/shared/acceptance-verification.js +0 -100
  376. package/dist/runs/shared/acceptance.js +0 -4
  377. package/dist/runs/shared/chain-outputs.js +0 -138
  378. package/dist/runs/shared/child-attempt-types.js +0 -1
  379. package/dist/runs/shared/child-attempt.js +0 -340
  380. package/dist/runs/shared/child-boundaries.js +0 -173
  381. package/dist/runs/shared/child-context-filter.js +0 -44
  382. package/dist/runs/shared/child-event-observer.js +0 -390
  383. package/dist/runs/shared/child-execution-cwd.js +0 -126
  384. package/dist/runs/shared/child-execution-outcome.js +0 -72
  385. package/dist/runs/shared/child-invocation.js +0 -54
  386. package/dist/runs/shared/child-message-validation.js +0 -215
  387. package/dist/runs/shared/child-native-accounting.js +0 -106
  388. package/dist/runs/shared/child-native-observation.js +0 -69
  389. package/dist/runs/shared/child-observation-spool.js +0 -169
  390. package/dist/runs/shared/child-observations.js +0 -195
  391. package/dist/runs/shared/child-presence.js +0 -3
  392. package/dist/runs/shared/child-route-env.js +0 -119
  393. package/dist/runs/shared/child-stream-observer.js +0 -221
  394. package/dist/runs/shared/child-stream-projection.js +0 -137
  395. package/dist/runs/shared/child-structured-tool.js +0 -27
  396. package/dist/runs/shared/claude-code.js +0 -162
  397. package/dist/runs/shared/claude-model.js +0 -42
  398. package/dist/runs/shared/claude-session.js +0 -83
  399. package/dist/runs/shared/claude-types.js +0 -1
  400. package/dist/runs/shared/completion-guard.js +0 -31
  401. package/dist/runs/shared/control-event-policy.js +0 -8
  402. package/dist/runs/shared/control-notification-owner.js +0 -13
  403. package/dist/runs/shared/dynamic-fanout.js +0 -289
  404. package/dist/runs/shared/dynamic-item.js +0 -102
  405. package/dist/runs/shared/history-index.js +0 -98
  406. package/dist/runs/shared/legacy-async-recovery.js +0 -114
  407. package/dist/runs/shared/legacy-output-recovery.js +0 -148
  408. package/dist/runs/shared/mcp-config-schema.js +0 -36
  409. package/dist/runs/shared/mcp-direct-tool-allowlist.js +0 -365
  410. package/dist/runs/shared/model-fallback.js +0 -247
  411. package/dist/runs/shared/mutating-tool-guard.js +0 -210
  412. package/dist/runs/shared/native-finalization-types.js +0 -1
  413. package/dist/runs/shared/native-finalization.js +0 -180
  414. package/dist/runs/shared/native-usage.js +0 -293
  415. package/dist/runs/shared/nested-control-records.js +0 -128
  416. package/dist/runs/shared/nested-events.js +0 -8
  417. package/dist/runs/shared/nested-path.js +0 -52
  418. package/dist/runs/shared/nested-projection.js +0 -155
  419. package/dist/runs/shared/nested-protocol.js +0 -18
  420. package/dist/runs/shared/nested-registry.js +0 -191
  421. package/dist/runs/shared/nested-render.js +0 -156
  422. package/dist/runs/shared/nested-route.js +0 -220
  423. package/dist/runs/shared/nested-validation.js +0 -216
  424. package/dist/runs/shared/owned-child-evidence.js +0 -125
  425. package/dist/runs/shared/owned-run-list.js +0 -146
  426. package/dist/runs/shared/owned-run-observation.js +0 -267
  427. package/dist/runs/shared/owned-run-progress.js +0 -109
  428. package/dist/runs/shared/owned-run-read-state.js +0 -1
  429. package/dist/runs/shared/owned-run-results.js +0 -202
  430. package/dist/runs/shared/owned-run-status.js +0 -180
  431. package/dist/runs/shared/owned-run-view.js +0 -51
  432. package/dist/runs/shared/owned-workflow-details.js +0 -17
  433. package/dist/runs/shared/owner-output.js +0 -43
  434. package/dist/runs/shared/parallel-utils.js +0 -49
  435. package/dist/runs/shared/parent-receipts.js +0 -126
  436. package/dist/runs/shared/parent-usage.js +0 -233
  437. package/dist/runs/shared/pi-args.js +0 -217
  438. package/dist/runs/shared/pi-launch-input.js +0 -1
  439. package/dist/runs/shared/pi-session-launch.js +0 -86
  440. package/dist/runs/shared/pi-spawn.js +0 -66
  441. package/dist/runs/shared/run-history-queries.js +0 -136
  442. package/dist/runs/shared/run-history.js +0 -176
  443. package/dist/runs/shared/run-id-ambiguity.js +0 -4
  444. package/dist/runs/shared/run-metadata-paths.js +0 -14
  445. package/dist/runs/shared/run-metadata.js +0 -158
  446. package/dist/runs/shared/run-persistence.js +0 -131
  447. package/dist/runs/shared/run-records.js +0 -9
  448. package/dist/runs/shared/run-restoration.js +0 -337
  449. package/dist/runs/shared/run-state-owner.js +0 -26
  450. package/dist/runs/shared/session-cwd-preload.js +0 -42
  451. package/dist/runs/shared/single-output.js +0 -297
  452. package/dist/runs/shared/stable-value.js +0 -15
  453. package/dist/runs/shared/streaming-text.js +0 -26
  454. package/dist/runs/shared/structured-output.js +0 -67
  455. package/dist/runs/shared/subagent-control.js +0 -246
  456. package/dist/runs/shared/subagent-prompt-runtime.js +0 -94
  457. package/dist/runs/shared/subagent-tool-loop-guard.js +0 -95
  458. package/dist/runs/shared/supervisor-question-state.js +0 -145
  459. package/dist/runs/shared/supervisor-questions.js +0 -284
  460. package/dist/runs/shared/workflow-graph.js +0 -306
  461. package/dist/runs/shared/workflow-policy.js +0 -157
  462. package/dist/runs/shared/worktree-contract.js +0 -1
  463. package/dist/runs/shared/worktree-hook.js +0 -138
  464. package/dist/runs/shared/worktree-location.js +0 -47
  465. package/dist/runs/shared/worktree-preservation.js +0 -8
  466. package/dist/runs/shared/worktree-process.js +0 -107
  467. package/dist/runs/shared/worktree.js +0 -386
  468. package/dist/shared/agent-context-policy.js +0 -116
  469. package/dist/shared/agent-dir.js +0 -14
  470. package/dist/shared/artifacts.js +0 -114
  471. package/dist/shared/atomic-json.js +0 -16
  472. package/dist/shared/chain-files.js +0 -72
  473. package/dist/shared/concurrency.js +0 -18
  474. package/dist/shared/content-preview.js +0 -115
  475. package/dist/shared/execution-cwd.js +0 -22
  476. package/dist/shared/file-coalescer.js +0 -22
  477. package/dist/shared/fork-context.js +0 -47
  478. package/dist/shared/formatters.js +0 -111
  479. package/dist/shared/journal-reader.js +0 -6
  480. package/dist/shared/lazy-tools.js +0 -43
  481. package/dist/shared/message-output.js +0 -116
  482. package/dist/shared/model-info.js +0 -85
  483. package/dist/shared/native-import.js +0 -20
  484. package/dist/shared/native-session-loader.js +0 -17
  485. package/dist/shared/native-session.js +0 -4
  486. package/dist/shared/native-tui.js +0 -23
  487. package/dist/shared/native-typebox.js +0 -32
  488. package/dist/shared/prompt-sections.js +0 -10
  489. package/dist/shared/session-entries.js +0 -87
  490. package/dist/shared/session-identity.js +0 -16
  491. package/dist/shared/settings.js +0 -121
  492. package/dist/shared/status-format.js +0 -171
  493. package/dist/shared/task-file-policy.js +0 -24
  494. package/dist/shared/temp-root.js +0 -143
  495. package/dist/shared/types/acceptance.js +0 -1
  496. package/dist/shared/types/async.js +0 -1
  497. package/dist/shared/types/config.js +0 -1
  498. package/dist/shared/types/details.js +0 -1
  499. package/dist/shared/types/history.js +0 -1
  500. package/dist/shared/types/inputs.js +0 -1
  501. package/dist/shared/types/intercom.js +0 -1
  502. package/dist/shared/types/launch.js +0 -1
  503. package/dist/shared/types/messages.js +0 -1
  504. package/dist/shared/types/nested.js +0 -1
  505. package/dist/shared/types/owned-runs.js +0 -1
  506. package/dist/shared/types/progress.js +0 -1
  507. package/dist/shared/types/questions.js +0 -1
  508. package/dist/shared/types/results.js +0 -1
  509. package/dist/shared/types/state.js +0 -1
  510. package/dist/shared/types/usage.js +0 -1
  511. package/dist/shared/types/workflow.js +0 -1
  512. package/dist/shared/ui-mode.js +0 -3
  513. package/dist/shared/utils.js +0 -128
  514. package/dist/slash/command-discovery.js +0 -83
  515. package/dist/slash/command-input.js +0 -190
  516. package/dist/slash/prompt-template-bridge.js +0 -122
  517. package/dist/slash/prompt-template-contract.js +0 -77
  518. package/dist/slash/prompt-template-results.js +0 -125
  519. package/dist/slash/request-protocol.js +0 -68
  520. package/dist/slash/result-delivery.js +0 -237
  521. package/dist/slash/saved-chain.js +0 -78
  522. package/dist/slash/slash-bridge.js +0 -150
  523. package/dist/slash/slash-commands.js +0 -136
  524. package/dist/slash/slash-live-state.js +0 -267
  525. package/dist/tui/action-hints.js +0 -103
  526. package/dist/tui/activity-lines.js +0 -32
  527. package/dist/tui/agent-browser.js +0 -290
  528. package/dist/tui/agent-controls.js +0 -289
  529. package/dist/tui/agent-conversation.js +0 -444
  530. package/dist/tui/agent-dock.js +0 -171
  531. package/dist/tui/agent-history.js +0 -50
  532. package/dist/tui/agent-model.js +0 -62
  533. package/dist/tui/agent-picker.js +0 -262
  534. package/dist/tui/agent-view.js +0 -350
  535. package/dist/tui/compact-results.js +0 -193
  536. package/dist/tui/conversation-details.js +0 -190
  537. package/dist/tui/conversation-frame.js +0 -135
  538. package/dist/tui/conversation-history.js +0 -210
  539. package/dist/tui/conversation-menu.js +0 -78
  540. package/dist/tui/conversation-notices.js +0 -79
  541. package/dist/tui/conversation-selection.js +0 -58
  542. package/dist/tui/conversation-viewport.js +0 -129
  543. package/dist/tui/direction-message.js +0 -27
  544. package/dist/tui/display.js +0 -282
  545. package/dist/tui/editor-viewport.js +0 -18
  546. package/dist/tui/expanded-content.js +0 -87
  547. package/dist/tui/expanded-multi.js +0 -170
  548. package/dist/tui/expanded-single.js +0 -65
  549. package/dist/tui/history-cards.js +0 -202
  550. package/dist/tui/history-display.js +0 -238
  551. package/dist/tui/history-json.js +0 -16
  552. package/dist/tui/history-metadata.js +0 -152
  553. package/dist/tui/history-record.js +0 -251
  554. package/dist/tui/history-text.js +0 -34
  555. package/dist/tui/indexed-history.js +0 -116
  556. package/dist/tui/nested-widget.js +0 -120
  557. package/dist/tui/picker-page.js +0 -59
  558. package/dist/tui/render.js +0 -72
  559. package/dist/tui/result-facts.js +0 -64
  560. package/dist/tui/task-observation.js +0 -59
  561. package/dist/tui/task-store.js +0 -366
  562. package/dist/tui/text-values.js +0 -16
  563. package/dist/tui/view-connections.js +0 -47
  564. package/dist/tui/view-model.js +0 -94
  565. package/dist/tui/view-persistence.js +0 -51
  566. package/dist/tui/view-ports.js +0 -1
  567. package/dist/tui/view-session.js +0 -37
  568. package/dist/tui/widget-details.js +0 -144
  569. package/dist/tui/widget-status.js +0 -245
  570. package/dist/tui/widget.js +0 -145
  571. package/dist/tui/workflow-labels.js +0 -223
  572. package/dist/tui/workflow-outcomes.js +0 -124
  573. package/generated/RunValidators.d.ts +0 -28
  574. package/generated/RunValidators.js +0 -2
  575. package/prompts/gather-context-and-clarify.md +0 -14
  576. package/prompts/parallel-cleanup.md +0 -65
  577. package/prompts/parallel-context-build.md +0 -59
  578. package/prompts/parallel-handoff-plan.md +0 -68
  579. package/prompts/parallel-research.md +0 -55
  580. package/prompts/parallel-review.md +0 -61
  581. package/prompts/review-loop.md +0 -44
  582. package/scripts/generate-run-schemas.mjs +0 -210
  583. package/skills/pi-intercom/evals/evals.json +0 -29
  584. package/skills/pi-intercom/evals/trigger-evals.json +0 -47
  585. package/skills/pi-intercom/references/peer-sessions.md +0 -74
  586. package/skills/pi-subagents/evals/evals.json +0 -29
  587. package/skills/pi-subagents/evals/trigger-evals.json +0 -42
  588. package/skills/pi-subagents/references/full-orchestration-guide.md +0 -1005
  589. package/src/agents/agent-defaults.ts +0 -13
  590. package/src/agents/agent-definition.ts +0 -253
  591. package/src/agents/agent-management.ts +0 -120
  592. package/src/agents/agent-scope.ts +0 -11
  593. package/src/agents/agent-selection.ts +0 -22
  594. package/src/agents/agent-serializer.ts +0 -90
  595. package/src/agents/agents.ts +0 -214
  596. package/src/agents/builtin-overrides.ts +0 -297
  597. package/src/agents/chain-serializer.ts +0 -3
  598. package/src/agents/config-values.ts +0 -57
  599. package/src/agents/discovery-paths.ts +0 -134
  600. package/src/agents/frontmatter.ts +0 -39
  601. package/src/agents/identity.ts +0 -61
  602. package/src/agents/json-chain.ts +0 -305
  603. package/src/agents/management-config.ts +0 -342
  604. package/src/agents/management-format.ts +0 -243
  605. package/src/agents/management-persistence.ts +0 -408
  606. package/src/agents/management-targets.ts +0 -260
  607. package/src/agents/management-warnings.ts +0 -115
  608. package/src/agents/markdown-chain.ts +0 -237
  609. package/src/agents/package-agents.ts +0 -231
  610. package/src/agents/skill-files.ts +0 -182
  611. package/src/agents/skill-search-paths.ts +0 -289
  612. package/src/agents/skill-types.ts +0 -31
  613. package/src/agents/skills.ts +0 -179
  614. package/src/extension/acceptance-schema.ts +0 -88
  615. package/src/extension/build-info.ts +0 -2
  616. package/src/extension/chain-schema.ts +0 -276
  617. package/src/extension/child-runtime.ts +0 -302
  618. package/src/extension/compact-tools.ts +0 -271
  619. package/src/extension/config-schema.ts +0 -59
  620. package/src/extension/config.ts +0 -45
  621. package/src/extension/control-notice-schema.ts +0 -55
  622. package/src/extension/control-notices.ts +0 -71
  623. package/src/extension/delegation-bridges.ts +0 -59
  624. package/src/extension/doctor.ts +0 -207
  625. package/src/extension/everyday-schemas.ts +0 -252
  626. package/src/extension/fanout-child.ts +0 -33
  627. package/src/extension/index.ts +0 -31
  628. package/src/extension/message-renderers.ts +0 -334
  629. package/src/extension/nested-control-inbox.ts +0 -196
  630. package/src/extension/parent-runtime.ts +0 -405
  631. package/src/extension/primary-tool.ts +0 -130
  632. package/src/extension/result-snapshot.ts +0 -9
  633. package/src/extension/runtime-reload.ts +0 -72
  634. package/src/extension/runtime-storage.ts +0 -49
  635. package/src/extension/schema-overrides.ts +0 -114
  636. package/src/extension/schemas.ts +0 -477
  637. package/src/extension/tool-input.ts +0 -46
  638. package/src/extension/tool-result.ts +0 -47
  639. package/src/history/answer-texts.ts +0 -74
  640. package/src/history/canonical-result.ts +0 -138
  641. package/src/history/canonical-selection.ts +0 -54
  642. package/src/history/database-generation.ts +0 -86
  643. package/src/history/database.ts +0 -97
  644. package/src/history/entry-ingestion.ts +0 -129
  645. package/src/history/index.ts +0 -434
  646. package/src/history/ingest.ts +0 -387
  647. package/src/history/output-digests.ts +0 -41
  648. package/src/history/preview.ts +0 -235
  649. package/src/history/prune.ts +0 -48
  650. package/src/history/queries.ts +0 -125
  651. package/src/history/query-scope.ts +0 -278
  652. package/src/history/rows.ts +0 -118
  653. package/src/history/run-projection.ts +0 -162
  654. package/src/history/run-queries.ts +0 -199
  655. package/src/history/schema.ts +0 -34
  656. package/src/history/search-queries.ts +0 -223
  657. package/src/history/selected-record.ts +0 -140
  658. package/src/history/source-file.ts +0 -51
  659. package/src/history/source-watches.ts +0 -156
  660. package/src/history/store.ts +0 -332
  661. package/src/history/text-chunks.ts +0 -186
  662. package/src/history/text.ts +0 -43
  663. package/src/history/transcript-queries.ts +0 -257
  664. package/src/history/types.ts +0 -29
  665. package/src/history/values.ts +0 -36
  666. package/src/history/wire-inputs.ts +0 -141
  667. package/src/history/wire-models.ts +0 -51
  668. package/src/history/worker-runtime.ts +0 -502
  669. package/src/history/worker.ts +0 -99
  670. package/src/intercom/intercom-bridge.ts +0 -190
  671. package/src/intercom/live-intercom.ts +0 -209
  672. package/src/intercom/nested-result-tree.ts +0 -213
  673. package/src/intercom/result-delivery.ts +0 -56
  674. package/src/intercom/result-intercom.ts +0 -308
  675. package/src/pi-intercom/bridge-ask.ts +0 -64
  676. package/src/pi-intercom/bridge-broadcast.ts +0 -70
  677. package/src/pi-intercom/bridge-catalog.ts +0 -489
  678. package/src/pi-intercom/bridge-control.ts +0 -179
  679. package/src/pi-intercom/bridge-groups.ts +0 -169
  680. package/src/pi-intercom/bridge-launch-journal.ts +0 -122
  681. package/src/pi-intercom/bridge-launch-policy.ts +0 -190
  682. package/src/pi-intercom/bridge-launch.ts +0 -506
  683. package/src/pi-intercom/bridge-operations.ts +0 -169
  684. package/src/pi-intercom/bridge-rpc-process.ts +0 -330
  685. package/src/pi-intercom/interview.ts +0 -295
  686. package/src/pi-intercom/native-control-auth.ts +0 -89
  687. package/src/pi-intercom/native-control-protocol.ts +0 -180
  688. package/src/pi-intercom/native-control.ts +0 -160
  689. package/src/pi-intercom/peer-awareness.ts +0 -84
  690. package/src/pi-intercom/saved-transcript.ts +0 -175
  691. package/src/pi-intercom/subagent-events.ts +0 -299
  692. package/src/pi-intercom/subagent-live-events.ts +0 -236
  693. package/src/pi-intercom/supervisor.ts +0 -362
  694. package/src/pi-intercom/topic-actions.ts +0 -243
  695. package/src/pi-intercom/topics.ts +0 -271
  696. package/src/pi-intercom/transcript.ts +0 -226
  697. package/src/pi-intercom/ui/compose-paste.ts +0 -109
  698. package/src/pi-intercom/ui/compose.ts +0 -305
  699. package/src/pi-intercom/ui/inline-message.ts +0 -110
  700. package/src/pi-intercom/ui/message-renderers.ts +0 -182
  701. package/src/pi-intercom/ui/overlay.ts +0 -238
  702. package/src/pi-intercom/ui/session-list.ts +0 -222
  703. package/src/pi-intercom/ui/tool-renderers.ts +0 -148
  704. package/src/pi-intercom/ui/topic-view.ts +0 -107
  705. package/src/runs/background/async-chain-plan.ts +0 -451
  706. package/src/runs/background/async-control.ts +0 -219
  707. package/src/runs/background/async-execution.ts +0 -227
  708. package/src/runs/background/async-job-admission.ts +0 -54
  709. package/src/runs/background/async-job-projection.ts +0 -225
  710. package/src/runs/background/async-job-tracker.ts +0 -441
  711. package/src/runs/background/async-launch.ts +0 -319
  712. package/src/runs/background/async-plan.ts +0 -285
  713. package/src/runs/background/async-result-file.ts +0 -104
  714. package/src/runs/background/async-resume.ts +0 -386
  715. package/src/runs/background/async-run-discovery.ts +0 -264
  716. package/src/runs/background/async-run-location.ts +0 -194
  717. package/src/runs/background/async-run-record.ts +0 -14
  718. package/src/runs/background/async-run-repair.ts +0 -307
  719. package/src/runs/background/async-run-summary.ts +0 -71
  720. package/src/runs/background/async-single-plan.ts +0 -168
  721. package/src/runs/background/async-status-projection.ts +0 -188
  722. package/src/runs/background/async-status-render.ts +0 -164
  723. package/src/runs/background/async-status-validation.ts +0 -238
  724. package/src/runs/background/async-status.ts +0 -9
  725. package/src/runs/background/async-value.ts +0 -29
  726. package/src/runs/background/completion-dedupe.ts +0 -65
  727. package/src/runs/background/completion-delivery.ts +0 -321
  728. package/src/runs/background/completion-receipts.ts +0 -309
  729. package/src/runs/background/legacy-status-acceptance.ts +0 -38
  730. package/src/runs/background/notify.ts +0 -174
  731. package/src/runs/background/parallel-groups.ts +0 -102
  732. package/src/runs/background/result-payload.ts +0 -268
  733. package/src/runs/background/result-watcher.ts +0 -520
  734. package/src/runs/background/run-id-resolver.ts +0 -138
  735. package/src/runs/background/run-schemas.ts +0 -240
  736. package/src/runs/background/run-status-contracts.ts +0 -46
  737. package/src/runs/background/run-status-render.ts +0 -364
  738. package/src/runs/background/run-status.ts +0 -366
  739. package/src/runs/background/runner-attempt-output.ts +0 -281
  740. package/src/runs/background/runner-attempt.ts +0 -354
  741. package/src/runs/background/runner-child-executor.ts +0 -232
  742. package/src/runs/background/runner-child-observer.ts +0 -278
  743. package/src/runs/background/runner-completion-summary.ts +0 -106
  744. package/src/runs/background/runner-completion.ts +0 -274
  745. package/src/runs/background/runner-config.ts +0 -52
  746. package/src/runs/background/runner-contract.ts +0 -51
  747. package/src/runs/background/runner-dynamic.ts +0 -185
  748. package/src/runs/background/runner-finalization.ts +0 -203
  749. package/src/runs/background/runner-graph.ts +0 -91
  750. package/src/runs/background/runner-initial-status.ts +0 -72
  751. package/src/runs/background/runner-lifecycle.ts +0 -159
  752. package/src/runs/background/runner-monitor.ts +0 -401
  753. package/src/runs/background/runner-parallel.ts +0 -279
  754. package/src/runs/background/runner-prepare-step.ts +0 -128
  755. package/src/runs/background/runner-reporting.ts +0 -192
  756. package/src/runs/background/runner-status.ts +0 -220
  757. package/src/runs/background/runner-step-output.ts +0 -156
  758. package/src/runs/background/runner-step-record.ts +0 -76
  759. package/src/runs/background/runner-step.ts +0 -150
  760. package/src/runs/background/runner-streaming.ts +0 -220
  761. package/src/runs/background/runner-workflow.ts +0 -284
  762. package/src/runs/background/stale-run-reconciler.ts +0 -312
  763. package/src/runs/background/subagent-runner-launcher.ts +0 -88
  764. package/src/runs/background/subagent-runner.ts +0 -85
  765. package/src/runs/background/top-level-async.ts +0 -15
  766. package/src/runs/foreground/chain-clarify.ts +0 -505
  767. package/src/runs/foreground/clarification-draft.ts +0 -92
  768. package/src/runs/foreground/clarify-contracts.ts +0 -33
  769. package/src/runs/foreground/clarify-invocation.ts +0 -204
  770. package/src/runs/foreground/clarify-text-editor.ts +0 -229
  771. package/src/runs/foreground/clarify-view.ts +0 -222
  772. package/src/runs/foreground/execution-input.ts +0 -401
  773. package/src/runs/foreground/execution-routing.ts +0 -41
  774. package/src/runs/foreground/execution-timeout.ts +0 -92
  775. package/src/runs/foreground/foreground-control.ts +0 -342
  776. package/src/runs/foreground/foreground-memory.ts +0 -132
  777. package/src/runs/foreground/invocation-context.ts +0 -88
  778. package/src/runs/foreground/invocation-execution.ts +0 -465
  779. package/src/runs/foreground/invocation-expansion.ts +0 -58
  780. package/src/runs/foreground/management-actions.ts +0 -360
  781. package/src/runs/foreground/nested-control.ts +0 -248
  782. package/src/runs/foreground/question-continuation.ts +0 -112
  783. package/src/runs/foreground/question-control.ts +0 -309
  784. package/src/runs/foreground/resume-target.ts +0 -330
  785. package/src/runs/foreground/revival-launch-policy.ts +0 -112
  786. package/src/runs/foreground/run-async-path.ts +0 -327
  787. package/src/runs/foreground/run-interrupt.ts +0 -202
  788. package/src/runs/foreground/run-nudge.ts +0 -355
  789. package/src/runs/foreground/saved-revival.ts +0 -356
  790. package/src/runs/foreground/subagent-executor.ts +0 -203
  791. package/src/runs/foreground/subagent-params.ts +0 -392
  792. package/src/runs/foreground/wait-observation.ts +0 -160
  793. package/src/runs/foreground/wait-registration.ts +0 -18
  794. package/src/runs/foreground/wait-run.ts +0 -366
  795. package/src/runs/shared/acceptance-contract.ts +0 -458
  796. package/src/runs/shared/acceptance-defaults.ts +0 -1
  797. package/src/runs/shared/acceptance-evaluation.ts +0 -349
  798. package/src/runs/shared/acceptance-finalization.ts +0 -495
  799. package/src/runs/shared/acceptance-outcome.ts +0 -69
  800. package/src/runs/shared/acceptance-reports.ts +0 -246
  801. package/src/runs/shared/acceptance-submission.ts +0 -251
  802. package/src/runs/shared/acceptance-verification.ts +0 -118
  803. package/src/runs/shared/acceptance.ts +0 -31
  804. package/src/runs/shared/chain-outputs.ts +0 -206
  805. package/src/runs/shared/child-attempt-types.ts +0 -118
  806. package/src/runs/shared/child-attempt.ts +0 -387
  807. package/src/runs/shared/child-boundaries.ts +0 -217
  808. package/src/runs/shared/child-context-filter.ts +0 -53
  809. package/src/runs/shared/child-event-observer.ts +0 -496
  810. package/src/runs/shared/child-execution-cwd.ts +0 -162
  811. package/src/runs/shared/child-execution-outcome.ts +0 -103
  812. package/src/runs/shared/child-invocation.ts +0 -74
  813. package/src/runs/shared/child-message-validation.ts +0 -233
  814. package/src/runs/shared/child-native-accounting.ts +0 -154
  815. package/src/runs/shared/child-native-observation.ts +0 -79
  816. package/src/runs/shared/child-observation-spool.ts +0 -193
  817. package/src/runs/shared/child-observations.ts +0 -229
  818. package/src/runs/shared/child-presence.ts +0 -6
  819. package/src/runs/shared/child-route-env.ts +0 -142
  820. package/src/runs/shared/child-stream-observer.ts +0 -302
  821. package/src/runs/shared/child-stream-projection.ts +0 -160
  822. package/src/runs/shared/child-structured-tool.ts +0 -38
  823. package/src/runs/shared/claude-code.ts +0 -216
  824. package/src/runs/shared/claude-model.ts +0 -67
  825. package/src/runs/shared/claude-session.ts +0 -124
  826. package/src/runs/shared/claude-types.ts +0 -31
  827. package/src/runs/shared/completion-guard.ts +0 -44
  828. package/src/runs/shared/control-event-policy.ts +0 -15
  829. package/src/runs/shared/control-notification-owner.ts +0 -20
  830. package/src/runs/shared/dynamic-fanout.ts +0 -459
  831. package/src/runs/shared/dynamic-item.ts +0 -114
  832. package/src/runs/shared/history-index.ts +0 -130
  833. package/src/runs/shared/legacy-async-recovery.ts +0 -153
  834. package/src/runs/shared/legacy-output-recovery.ts +0 -214
  835. package/src/runs/shared/mcp-config-schema.ts +0 -46
  836. package/src/runs/shared/mcp-direct-tool-allowlist.ts +0 -465
  837. package/src/runs/shared/model-fallback.ts +0 -344
  838. package/src/runs/shared/mutating-tool-guard.ts +0 -295
  839. package/src/runs/shared/native-finalization-types.ts +0 -29
  840. package/src/runs/shared/native-finalization.ts +0 -252
  841. package/src/runs/shared/native-usage.ts +0 -396
  842. package/src/runs/shared/nested-control-records.ts +0 -178
  843. package/src/runs/shared/nested-events.ts +0 -45
  844. package/src/runs/shared/nested-path.ts +0 -65
  845. package/src/runs/shared/nested-projection.ts +0 -230
  846. package/src/runs/shared/nested-protocol.ts +0 -67
  847. package/src/runs/shared/nested-registry.ts +0 -273
  848. package/src/runs/shared/nested-render.ts +0 -217
  849. package/src/runs/shared/nested-route.ts +0 -292
  850. package/src/runs/shared/nested-validation.ts +0 -291
  851. package/src/runs/shared/owned-child-evidence.ts +0 -184
  852. package/src/runs/shared/owned-run-list.ts +0 -187
  853. package/src/runs/shared/owned-run-observation.ts +0 -368
  854. package/src/runs/shared/owned-run-progress.ts +0 -172
  855. package/src/runs/shared/owned-run-read-state.ts +0 -7
  856. package/src/runs/shared/owned-run-results.ts +0 -289
  857. package/src/runs/shared/owned-run-status.ts +0 -239
  858. package/src/runs/shared/owned-run-view.ts +0 -65
  859. package/src/runs/shared/owned-workflow-details.ts +0 -24
  860. package/src/runs/shared/owner-output.ts +0 -73
  861. package/src/runs/shared/parallel-utils.ts +0 -93
  862. package/src/runs/shared/parent-receipts.ts +0 -186
  863. package/src/runs/shared/parent-usage.ts +0 -344
  864. package/src/runs/shared/pi-args.ts +0 -280
  865. package/src/runs/shared/pi-launch-input.ts +0 -48
  866. package/src/runs/shared/pi-session-launch.ts +0 -94
  867. package/src/runs/shared/pi-spawn.ts +0 -76
  868. package/src/runs/shared/run-history-queries.ts +0 -195
  869. package/src/runs/shared/run-history.ts +0 -221
  870. package/src/runs/shared/run-id-ambiguity.ts +0 -8
  871. package/src/runs/shared/run-metadata-paths.ts +0 -17
  872. package/src/runs/shared/run-metadata.ts +0 -240
  873. package/src/runs/shared/run-persistence.ts +0 -181
  874. package/src/runs/shared/run-records.ts +0 -19
  875. package/src/runs/shared/run-restoration.ts +0 -455
  876. package/src/runs/shared/run-state-owner.ts +0 -31
  877. package/src/runs/shared/session-cwd-preload.ts +0 -47
  878. package/src/runs/shared/single-output.ts +0 -416
  879. package/src/runs/shared/stable-value.ts +0 -15
  880. package/src/runs/shared/streaming-text.ts +0 -45
  881. package/src/runs/shared/structured-output.ts +0 -98
  882. package/src/runs/shared/subagent-control.ts +0 -352
  883. package/src/runs/shared/subagent-prompt-runtime.ts +0 -119
  884. package/src/runs/shared/subagent-tool-loop-guard.ts +0 -139
  885. package/src/runs/shared/supervisor-question-state.ts +0 -221
  886. package/src/runs/shared/supervisor-questions.ts +0 -410
  887. package/src/runs/shared/workflow-graph.ts +0 -422
  888. package/src/runs/shared/workflow-policy.ts +0 -260
  889. package/src/runs/shared/worktree-contract.ts +0 -29
  890. package/src/runs/shared/worktree-hook.ts +0 -181
  891. package/src/runs/shared/worktree-location.ts +0 -61
  892. package/src/runs/shared/worktree-preservation.ts +0 -10
  893. package/src/runs/shared/worktree-process.ts +0 -132
  894. package/src/runs/shared/worktree.ts +0 -507
  895. package/src/shared/agent-context-policy.ts +0 -215
  896. package/src/shared/agent-dir.ts +0 -15
  897. package/src/shared/artifacts.ts +0 -126
  898. package/src/shared/atomic-json.ts +0 -19
  899. package/src/shared/chain-files.ts +0 -72
  900. package/src/shared/concurrency.ts +0 -27
  901. package/src/shared/content-preview.ts +0 -117
  902. package/src/shared/execution-cwd.ts +0 -39
  903. package/src/shared/file-coalescer.ts +0 -31
  904. package/src/shared/fork-context.ts +0 -72
  905. package/src/shared/formatters.ts +0 -125
  906. package/src/shared/journal-reader.ts +0 -18
  907. package/src/shared/lazy-tools.ts +0 -85
  908. package/src/shared/message-output.ts +0 -146
  909. package/src/shared/model-info.ts +0 -117
  910. package/src/shared/native-import.ts +0 -25
  911. package/src/shared/native-session-loader.ts +0 -13
  912. package/src/shared/native-session.ts +0 -6
  913. package/src/shared/native-tui.ts +0 -20
  914. package/src/shared/native-typebox.ts +0 -29
  915. package/src/shared/prompt-sections.ts +0 -16
  916. package/src/shared/session-entries.ts +0 -108
  917. package/src/shared/session-identity.ts +0 -25
  918. package/src/shared/settings.ts +0 -196
  919. package/src/shared/status-format.ts +0 -232
  920. package/src/shared/task-file-policy.ts +0 -35
  921. package/src/shared/temp-root.ts +0 -158
  922. package/src/shared/types/acceptance.ts +0 -149
  923. package/src/shared/types/async.ts +0 -247
  924. package/src/shared/types/config.ts +0 -139
  925. package/src/shared/types/details.ts +0 -104
  926. package/src/shared/types/history.ts +0 -217
  927. package/src/shared/types/inputs.ts +0 -4
  928. package/src/shared/types/intercom.ts +0 -57
  929. package/src/shared/types/launch.ts +0 -39
  930. package/src/shared/types/messages.ts +0 -104
  931. package/src/shared/types/nested.ts +0 -153
  932. package/src/shared/types/owned-runs.ts +0 -148
  933. package/src/shared/types/progress.ts +0 -106
  934. package/src/shared/types/questions.ts +0 -103
  935. package/src/shared/types/results.ts +0 -119
  936. package/src/shared/types/state.ts +0 -56
  937. package/src/shared/types/usage.ts +0 -36
  938. package/src/shared/types/workflow.ts +0 -187
  939. package/src/shared/ui-mode.ts +0 -5
  940. package/src/shared/utils.ts +0 -148
  941. package/src/slash/command-discovery.ts +0 -110
  942. package/src/slash/command-input.ts +0 -232
  943. package/src/slash/prompt-template-bridge.ts +0 -161
  944. package/src/slash/prompt-template-contract.ts +0 -152
  945. package/src/slash/prompt-template-results.ts +0 -189
  946. package/src/slash/request-protocol.ts +0 -87
  947. package/src/slash/result-delivery.ts +0 -312
  948. package/src/slash/saved-chain.ts +0 -115
  949. package/src/slash/slash-bridge.ts +0 -224
  950. package/src/slash/slash-commands.ts +0 -195
  951. package/src/slash/slash-live-state.ts +0 -350
  952. package/src/tui/action-hints.ts +0 -155
  953. package/src/tui/activity-lines.ts +0 -40
  954. package/src/tui/agent-browser.ts +0 -354
  955. package/src/tui/agent-controls.ts +0 -355
  956. package/src/tui/agent-conversation.ts +0 -514
  957. package/src/tui/agent-dock.ts +0 -250
  958. package/src/tui/agent-history.ts +0 -68
  959. package/src/tui/agent-model.ts +0 -78
  960. package/src/tui/agent-picker.ts +0 -325
  961. package/src/tui/agent-view.ts +0 -403
  962. package/src/tui/compact-results.ts +0 -342
  963. package/src/tui/conversation-details.ts +0 -206
  964. package/src/tui/conversation-frame.ts +0 -184
  965. package/src/tui/conversation-history.ts +0 -260
  966. package/src/tui/conversation-menu.ts +0 -119
  967. package/src/tui/conversation-notices.ts +0 -116
  968. package/src/tui/conversation-selection.ts +0 -66
  969. package/src/tui/conversation-viewport.ts +0 -169
  970. package/src/tui/direction-message.ts +0 -35
  971. package/src/tui/display.ts +0 -409
  972. package/src/tui/editor-viewport.ts +0 -19
  973. package/src/tui/expanded-content.ts +0 -134
  974. package/src/tui/expanded-multi.ts +0 -264
  975. package/src/tui/expanded-single.ts +0 -92
  976. package/src/tui/history-cards.ts +0 -298
  977. package/src/tui/history-display.ts +0 -334
  978. package/src/tui/history-json.ts +0 -17
  979. package/src/tui/history-metadata.ts +0 -177
  980. package/src/tui/history-record.ts +0 -321
  981. package/src/tui/history-text.ts +0 -34
  982. package/src/tui/indexed-history.ts +0 -149
  983. package/src/tui/nested-widget.ts +0 -192
  984. package/src/tui/picker-page.ts +0 -80
  985. package/src/tui/render.ts +0 -104
  986. package/src/tui/result-facts.ts +0 -99
  987. package/src/tui/task-observation.ts +0 -96
  988. package/src/tui/task-store.ts +0 -432
  989. package/src/tui/text-values.ts +0 -20
  990. package/src/tui/view-connections.ts +0 -64
  991. package/src/tui/view-model.ts +0 -181
  992. package/src/tui/view-persistence.ts +0 -57
  993. package/src/tui/view-ports.ts +0 -55
  994. package/src/tui/view-session.ts +0 -42
  995. package/src/tui/widget-details.ts +0 -220
  996. package/src/tui/widget-status.ts +0 -331
  997. package/src/tui/widget.ts +0 -208
  998. package/src/tui/workflow-labels.ts +0 -340
  999. package/src/tui/workflow-outcomes.ts +0 -150
@@ -8,13 +8,11 @@ import {
8
8
  rmSync,
9
9
  writeFileSync,
10
10
  } from "node:fs";
11
- import { tmpdir } from "node:os";
12
- import { dirname, join, resolve } from "node:path";
11
+ import { dirname, join, resolve, relative, isAbsolute } from "node:path";
13
12
  import process from "node:process";
14
13
  import { setTimeout as delay } from "node:timers/promises";
15
14
  import { isChildTreeAlive } from "../src/shared/post-exit-stdio-guard.ts";
16
15
  import { SmokeProcesses, filesIn, processRef } from "./real-pi-processes.mjs";
17
- import { getBrokerSocketPath } from "../src/pi-intercom/broker/paths.ts";
18
16
 
19
17
  const DEFAULT_TIMEOUT_MS = 120_000;
20
18
  const authAgentDir =
@@ -23,7 +21,7 @@ const authAgentDir =
23
21
 
24
22
  function usage() {
25
23
  console.log(
26
- `Usage: node scripts/real-pi-smoke.mjs [--llm] [--llm-full] [--keep-temp] [--timeout-ms <ms>]\n\nRuns an opt-in real Pi package smoke for this checkout. It uses an isolated\ntemporary Pi home, installs the single pi-subagents package with bundled intercom, verifies pi list,\nand loads both extension entries. It does not install pi-fitch-kit, publish anything,\nor create GitHub Actions.\n\nOptions:\n --llm Also run live model-backed list, foreground, and async-completion smoke prompts\n --llm-full Also run broader live parallel, chain, output, and acceptance prompts\n --keep-temp Keep the isolated temporary home for debugging\n --timeout-ms <ms> Per-command timeout in milliseconds (default: ${DEFAULT_TIMEOUT_MS})\n -h, --help Show this help\n\nEnvironment:\n PI_REAL_SMOKE_AUTH_AGENT_DIR Source Pi agent dir for auth.json/models.json during --llm (default: ~/.pi/agent)\n PI_REAL_SMOKE_MODEL Model passed to live --llm smoke prompts, e.g. openai/gpt-6-astra\n PI_REAL_SMOKE_PROVIDER Provider passed to live --llm smoke prompts\n\nExit codes:\n 0 real Pi smoke passed\n 1 install/list/live smoke failed\n 2 invalid arguments`,
24
+ `Usage: node scripts/real-pi-smoke.mjs [--llm] [--llm-full] [--keep-temp] [--timeout-ms <ms>]\n\nRuns an opt-in real Pi package smoke for this checkout. It uses an isolated\ntemporary Pi home, installs the single pi-subagents package with bundled intercom, verifies pi list,\nand loads the single compiled entry. It does not install pi-fitch-kit, publish anything,\nor create GitHub Actions.\n\nOptions:\n --llm Also run live model-backed list, foreground, and async-completion smoke prompts\n --llm-full Also verify forked tool-result context and saved-conversation continuation\n --keep-temp Keep the isolated temporary home for debugging\n --timeout-ms <ms> Per-command timeout in milliseconds (default: ${DEFAULT_TIMEOUT_MS})\n -h, --help Show this help\n\nEnvironment:\n PI_REAL_SMOKE_AUTH_AGENT_DIR Source Pi agent dir for auth.json/models.json during --llm (default: ~/.pi/agent)\n PI_REAL_SMOKE_MODEL Model passed to live --llm smoke prompts, e.g. openai/gpt-6-astra\n PI_REAL_SMOKE_PROVIDER Provider passed to live --llm smoke prompts\n\nExit codes:\n 0 real Pi smoke passed\n 1 install/list/live smoke failed\n 2 invalid arguments`,
27
25
  );
28
26
  }
29
27
 
@@ -98,16 +96,18 @@ function isolatedEnv(root, agentDir) {
98
96
  const home = join(root, "home");
99
97
  const env = { ...process.env };
100
98
  for (const key of Object.keys(env)) {
101
- if (key.startsWith("PI_SUBAGENT_")) {
99
+ if (key.startsWith("PI_SUBAGENT_") || key.startsWith("PI_INTERCOM_")) {
102
100
  delete env[key];
103
101
  }
104
102
  }
105
103
  return {
106
104
  ...env,
107
105
  HOME: home,
106
+ USERPROFILE: home,
108
107
  XDG_CONFIG_HOME: join(home, ".config"),
109
108
  XDG_CACHE_HOME: join(home, ".cache"),
110
109
  PI_CODING_AGENT_DIR: agentDir,
110
+ PI_INTERCOM_RUNTIME_DIR: join(root, "ic"),
111
111
  PI_SUBAGENT_TEMP_ROOT: join(root, "pi-subagents-runtime"),
112
112
  PI_OFFLINE: "1",
113
113
  PATH: process.env.PATH ?? "",
@@ -119,21 +119,40 @@ function runPi(label, args, options) {
119
119
  }
120
120
 
121
121
  async function verifyBundledResources(options) {
122
+ const marker = join(options.root, "resources.json");
123
+ const observer = join(options.root, "observe-resources.mjs");
124
+ writeFileSync(
125
+ observer,
126
+ `import { writeFileSync } from "node:fs"; export default function(pi) { pi.on("session_start", () => { writeFileSync(${JSON.stringify(marker)}, JSON.stringify(pi.getActiveTools())); }); }`,
127
+ );
122
128
  const output = await runPi(
123
129
  "pi load bundled resources",
124
- ["--mode", "rpc", "--no-session", "--offline", "--approve"],
125
- {
126
- ...options,
127
- input: `${JSON.stringify({ id: "commands", type: "get_commands" })}\n`,
128
- },
130
+ ["--mode", "rpc", "--no-session", "--offline", "--approve", "-e", observer],
131
+ { ...options, input: `${JSON.stringify({ id: "commands", type: "get_commands" })}\n` },
129
132
  );
130
- const response = commandResponse(output);
131
- const commands = registeredCommands(response);
132
- for (const name of ["intercom", "subagents-doctor", "skill:pi-intercom", "skill:pi-subagents"]) {
133
+ const commands = registeredCommands(commandResponse(output));
134
+ for (const name of ["skill:pi-intercom", "skill:pi-subagents"]) {
133
135
  if (!commands.includes(name)) {
134
136
  throw new Error(`bundled Pi resources did not register ${name}:\n${output}`);
135
137
  }
136
138
  }
139
+ const tools = JSON.parse(readFileSync(marker, "utf8"));
140
+ for (const name of ["delegate", "agent_runs", "intercom"]) {
141
+ if (!tools.includes(name)) {
142
+ throw new Error(`${name} must be eager on the single package entry`);
143
+ }
144
+ }
145
+ for (const name of [
146
+ "subagent",
147
+ "load_subagent",
148
+ "load_intercom",
149
+ "contact_supervisor",
150
+ "structured_output",
151
+ ]) {
152
+ if (tools.includes(name)) {
153
+ throw new Error(`retired package tool is still exposed: ${name}`);
154
+ }
155
+ }
137
156
  }
138
157
 
139
158
  function commandResponse(output) {
@@ -205,12 +224,15 @@ async function runLivePrompt(label, prompt, options, expectedTool) {
205
224
  if (!events.some((event) => event.type === "agent_settled")) {
206
225
  throw new Error(`${label} did not reach agent_settled.`);
207
226
  }
208
- return events
209
- .filter((event) => event.type === "message_end" && event.message?.role === "assistant")
210
- .flatMap((event) =>
211
- event.message.content.filter((part) => part.type === "text").map((part) => part.text),
212
- )
213
- .join("\n");
227
+ return {
228
+ events,
229
+ text: events
230
+ .filter((event) => event.type === "message_end" && event.message?.role === "assistant")
231
+ .flatMap((event) =>
232
+ event.message.content.filter((part) => part.type === "text").map((part) => part.text),
233
+ )
234
+ .join("\n"),
235
+ };
214
236
  }
215
237
 
216
238
  function* savedAssistantModels(file) {
@@ -225,10 +247,10 @@ function* savedAssistantModels(file) {
225
247
  }
226
248
  }
227
249
 
228
- function auditSavedModels(dir, expectedModel) {
250
+ function auditSavedModels(directories, expectedModel) {
229
251
  const models = new Set();
230
252
  let responses = 0;
231
- for (const file of filesIn(dir)) {
253
+ for (const file of directories.flatMap((dir) => [...filesIn(dir)])) {
232
254
  if (!file.endsWith(".jsonl")) {
233
255
  continue;
234
256
  }
@@ -256,44 +278,57 @@ function requireOutput(label, output, pattern) {
256
278
  console.log(`[real-pi-smoke] ${label} output evidence:\n${compact}`);
257
279
  }
258
280
 
259
- async function waitForAsyncCompletion(runId, pattern, { env, timeoutMs, signal }) {
260
- const dir = join(env.PI_SUBAGENT_TEMP_ROOT, "async-subagent-runs", runId);
281
+ function asyncCompletion(dir, runId) {
282
+ const resultPath = join(dir, "result.json");
283
+ if (!existsSync(resultPath)) {
284
+ return { status: "missing" };
285
+ }
286
+ const result = JSON.parse(readFileSync(resultPath, "utf8"));
287
+ if (result.id !== runId) {
288
+ throw new Error("Async completion belongs to another saved run");
289
+ }
290
+ if (result.status !== "completed") {
291
+ throw new Error(`async run ${runId} ended ${result.status}: ${result.error ?? ""}`);
292
+ }
293
+ const processPath = join(dir, "actor.lock", "process.json");
294
+ if (!existsSync(processPath)) {
295
+ return { status: "completed; actor exit unconfirmed" };
296
+ }
297
+ const actor = JSON.parse(readFileSync(processPath, "utf8"));
298
+ return {
299
+ status: result.status,
300
+ output: isChildTreeAlive(processRef(actor.pid))
301
+ ? undefined
302
+ : readFileSync(join(dir, "output.txt"), "utf8"),
303
+ };
304
+ }
305
+
306
+ async function waitForAsyncCompletion(run, pattern, { env, timeoutMs, signal }) {
307
+ const dir = dirname(run.sessionFile);
308
+ const within = relative(join(env.PI_CODING_AGENT_DIR, "sessions", "agent-runs"), dir);
309
+ if (isAbsolute(within) || within.startsWith("..") || !/^[a-zA-Z0-9_-]{1,128}$/.test(run.id)) {
310
+ throw new Error("Async receipt did not identify this smoke's private saved run");
311
+ }
261
312
  const deadline = Date.now() + timeoutMs;
262
313
  let lastState = "missing";
263
- let lastOutput = "";
264
314
  while (Date.now() < deadline) {
265
315
  signal.throwIfAborted();
266
- const statusPath = join(dir, "status.json");
267
- const outputPath = join(dir, "output-0.log");
268
- if (existsSync(outputPath)) {
269
- lastOutput = readFileSync(outputPath, "utf8");
316
+ const completion = asyncCompletion(dir, run.id);
317
+ lastState = completion.status;
318
+ if (completion.output !== undefined) {
319
+ requireOutput(`async run ${run.id} completed and actor exited`, completion.output, pattern);
320
+ return;
270
321
  }
271
- if (existsSync(statusPath)) {
272
- const status = JSON.parse(readFileSync(statusPath, "utf8"));
273
- lastState = String(status.state ?? "unknown");
274
- if (asyncProcessComplete(status)) {
275
- requireOutput(`async run ${runId} completed`, lastOutput, pattern);
276
- return;
277
- }
278
- if (lastState === "failed" || lastState === "paused") {
279
- throw new Error(`async run ${runId} ended ${lastState}.\nOutput:\n${lastOutput}`);
280
- }
281
- }
282
- // Poll only after reading status and process liveness; the runner may still write final artifacts.
322
+ // Result publication is not process exit; retain resources until final actor writes finish.
283
323
  // oxlint-disable-next-line no-await-in-loop
284
- await delay(500, undefined, { signal });
324
+ await delay(100, undefined, { signal });
285
325
  }
286
326
  throw new Error(
287
- `async run ${runId} did not complete after ${timeoutMs}ms (last state: ${lastState}).\nOutput:\n${lastOutput}`,
327
+ `async run ${run.id} did not complete and exit after ${timeoutMs}ms (last state: ${lastState}).`,
288
328
  );
289
329
  }
290
330
 
291
- function asyncProcessComplete(status) {
292
- return status.state === "complete" && status.pid && !isChildTreeAlive(processRef(status.pid));
293
- }
294
-
295
331
  async function runLiveSmoke(options, runOptions, agentDir) {
296
- const { root } = runOptions;
297
332
  const copiedAuthFiles = copyLiveAuth(agentDir);
298
333
  if (copiedAuthFiles.length > 0) {
299
334
  console.log(
@@ -301,122 +336,96 @@ async function runLiveSmoke(options, runOptions, agentDir) {
301
336
  );
302
337
  }
303
338
  const childModelInstruction = process.env.PI_REAL_SMOKE_MODEL
304
- ? ` Pass model override '${process.env.PI_REAL_SMOKE_MODEL}' to every subagent run.`
339
+ ? ` Pass model '${process.env.PI_REAL_SMOKE_MODEL}' to every delegate call.`
305
340
  : "";
306
341
  await runBasicLiveSmoke(runOptions, childModelInstruction);
307
342
  if (options.llmFull) {
308
343
  await runFullLiveSmoke(runOptions, childModelInstruction);
309
344
  }
310
- auditSavedModels(join(root, "sessions"), process.env.PI_REAL_SMOKE_MODEL);
345
+ auditSavedModels(
346
+ [join(runOptions.root, "sessions"), join(agentDir, "sessions", "agent-runs")],
347
+ process.env.PI_REAL_SMOKE_MODEL,
348
+ );
349
+ }
350
+
351
+ function toolDetails(events, name) {
352
+ return events
353
+ .filter((event) => event.type === "tool_execution_end" && event.toolName === name)
354
+ .map((event) => event.result?.details);
355
+ }
356
+
357
+ function requireCompleted(run, expected) {
358
+ if (run?.status !== "completed" || run.output?.text !== expected) {
359
+ throw new Error(`Native child did not complete with expected output: ${expected}`);
360
+ }
311
361
  }
312
362
 
313
363
  async function runBasicLiveSmoke(runOptions, childModelInstruction) {
314
- const intercomPrompt =
315
- "Call the intercom tool with action status. Reply exactly with 'real-pi-smoke intercom ok' if the tool output includes 'Connected: Yes'.";
316
- const listPrompt =
317
- "Use the agent_runs tool with action profiles. Reply exactly with 'real-pi-smoke list ok' if reviewer, scout, oracle, and watcher are available.";
318
- const foregroundPrompt = `Use the delegate tool to run real-smoke with task 'Reply exactly: real-pi-smoke foreground ok', async false and output false.${childModelInstruction} If the tool returns an output artifact path instead of inline output, read that file. Then reply exactly 'real-pi-smoke foreground ok' only if the child result contains it.`;
319
- const asyncPrompt = `Use the delegate tool to run real-smoke with task 'Reply exactly: real-pi-smoke async ok', output false.${childModelInstruction} Set async true so it launches in the background. Do not call status and do not wait for completion. Reply with 'real-pi-smoke async launched ok' and quote the exact tool result line beginning 'Async:' including the run id.`;
320
- requireOutput(
321
- "real Pi intercom prompt",
322
- await runLivePrompt("real Pi intercom prompt", intercomPrompt, runOptions, "intercom"),
323
- /real-pi-smoke intercom ok/,
324
- );
325
- requireOutput(
326
- "real Pi subagent list prompt",
327
- await runLivePrompt("real Pi subagent list prompt", listPrompt, runOptions, "agent_runs"),
328
- /real-pi-smoke list ok/,
329
- );
330
- requireOutput(
331
- "real Pi foreground subagent prompt",
332
- await runLivePrompt(
333
- "real Pi foreground subagent prompt",
334
- foregroundPrompt,
335
- runOptions,
364
+ const prompts = [
365
+ [
366
+ "intercom",
367
+ "Call the intercom tool with action status. Reply exactly 'real-pi-smoke intercom ok' only if it reports 'Connected: Yes'.",
368
+ "intercom",
369
+ ],
370
+ [
371
+ "list",
372
+ "Call agent_runs with action list. Reply exactly 'real-pi-smoke list ok' only if it successfully returns a saved-run list. There are no profiles to discover.",
373
+ "agent_runs",
374
+ ],
375
+ [
376
+ "foreground",
377
+ `Call delegate with prompt 'Reply exactly: real-pi-smoke foreground ok', name 'smoke-foreground', and async false.${childModelInstruction} Reply exactly 'real-pi-smoke foreground ok' only if the actual child result contains it.`,
336
378
  "delegate",
337
- ),
338
- /real-pi-smoke foreground ok/,
339
- );
340
- const asyncOutput = await runLivePrompt(
341
- "real Pi async subagent prompt",
342
- asyncPrompt,
379
+ ],
380
+ ];
381
+ for (const [kind, prompt, tool] of prompts) {
382
+ // Keep separate native parent sessions so each smoke owns its saved runs.
383
+ // oxlint-disable-next-line no-await-in-loop
384
+ const result = await runLivePrompt(`real Pi ${kind} prompt`, prompt, runOptions, tool);
385
+ if (kind === "foreground") {
386
+ requireCompleted(toolDetails(result.events, "delegate")[0], "real-pi-smoke foreground ok");
387
+ }
388
+ requireOutput(`real Pi ${kind} prompt`, result.text, new RegExp(`real-pi-smoke ${kind} ok`));
389
+ }
390
+ const result = await runLivePrompt(
391
+ "real Pi async prompt",
392
+ `Call delegate with prompt 'Reply exactly: real-pi-smoke async ok', name 'smoke-async', and async true.${childModelInstruction} Do not wait or call agent_runs. Reply exactly 'real-pi-smoke async launched ok' after receiving a launch receipt, not claiming completion.`,
343
393
  runOptions,
344
394
  "delegate",
345
395
  );
346
- requireOutput(
347
- "real Pi async subagent prompt",
348
- asyncOutput,
349
- /real-pi-smoke async (?:launched )?ok/i,
350
- );
351
- const asyncRunId =
352
- asyncOutput.match(/Async(?: parallel)?:\s+(?:\S+|\[[^\]]+\])\s+\[([0-9a-f-]{36})\]/i)?.[1] ??
353
- asyncOutput.match(/\[([0-9a-f-]{36})\]/i)?.[1] ??
354
- asyncOutput.match(/\b([0-9a-f]{8}-[0-9a-f-]{27})\b/i)?.[1];
355
- if (!asyncRunId) {
356
- throw new Error(`Could not parse async run id from output:\n${asyncOutput}`);
357
- }
358
- await waitForAsyncCompletion(asyncRunId, /^real-pi-smoke async ok$/m, runOptions);
396
+ requireOutput("real Pi async prompt", result.text, /real-pi-smoke async launched ok/);
397
+ const receipt = toolDetails(result.events, "delegate")[0];
398
+ if (receipt?.receipt !== "launch" || !receipt.id || !receipt.sessionFile) {
399
+ throw new Error("Native delegate did not return a saved asynchronous launch receipt");
400
+ }
401
+ await waitForAsyncCompletion(receipt, /^real-pi-smoke async ok$/m, runOptions);
359
402
  }
360
403
 
361
404
  async function runFullLiveSmoke(runOptions, childModelInstruction) {
362
- const outputPath = join(runOptions.root, "live-output-smoke.txt");
363
- const parallelPrompt = `Use the subagent tool in parallel mode with two delegate tasks and async false. Task 1 replies exactly 'real-pi-smoke parallel A ok'. Task 2 replies exactly 'real-pi-smoke parallel B ok'. Set output false and progress false for both.${childModelInstruction} Reply exactly 'real-pi-smoke parallel ok' only if both child outputs are present.`;
364
- const chainPrompt = `Use the subagent tool chain mode with two delegate steps and async false.${childModelInstruction} Step 1 task: 'Reply exactly: real-pi-smoke chain step1 ok'. Step 2 task: 'Previous output is {previous}. Reply exactly: real-pi-smoke chain step2 ok'. Reply exactly 'real-pi-smoke chain ok' only if step 2 ran after step 1.`;
365
- const outputPrompt = `Use the subagent tool to run delegate with task 'Write exactly real-pi-smoke output ok plus newline to the requested output path, then reply exactly wrote output smoke'. Set async false, output to ${JSON.stringify(outputPath)}, and outputMode to file-only.${childModelInstruction} Reply exactly 'real-pi-smoke output ok' only after the tool returns.`;
366
- const acceptancePrompt = `Use the subagent tool to run delegate with task 'Final answer exactly: real-pi-smoke acceptance ok evidence=manual-notes'. Set async false. Include acceptance criteria requiring the final answer to contain real-pi-smoke acceptance ok and evidence manual-notes, with maxFinalizationTurns 2.${childModelInstruction} Reply exactly 'real-pi-smoke acceptance ok' only if the child completed.`;
367
- requireOutput(
368
- "real Pi parallel subagent prompt",
369
- await runLivePrompt("real Pi parallel subagent prompt", parallelPrompt, runOptions, "subagent"),
370
- /real-pi-smoke parallel ok/,
371
- );
372
- requireOutput(
373
- "real Pi chain subagent prompt",
374
- await runLivePrompt("real Pi chain subagent prompt", chainPrompt, runOptions, "subagent"),
375
- /real-pi-smoke chain ok/,
376
- );
377
- requireOutput(
378
- "real Pi output subagent prompt",
379
- await runLivePrompt("real Pi output subagent prompt", outputPrompt, runOptions, "subagent"),
380
- /real-pi-smoke output ok/,
381
- );
405
+ const prompt = `First call delegate with prompt 'Reply exactly CALIBRATION_FACT=packed-otter-7319', name 'fact', context fresh and async false.${childModelInstruction} Then call delegate with context fork, async false, and prompt 'Read the preceding delegate tool result in inherited conversation. Without tools, filesystem reads, or guessing, return the CALIBRATION_FACT line exactly; return FACT_NOT_VISIBLE if absent.' Finally call agent_runs with action continue, the first saved run id, async false, and prompt 'Without tools, repeat the CALIBRATION_FACT line from your own saved conversation exactly.' Reply exactly 'real-pi-smoke fork ok' only if both the forked child and continued child actually return CALIBRATION_FACT=packed-otter-7319. There are no profiles, task prefixes, output settings, or canned role instructions.`;
406
+ const result = await runLivePrompt("real Pi fork prompt", prompt, runOptions, "delegate");
407
+ const delegates = toolDetails(result.events, "delegate");
408
+ const continuation = toolDetails(result.events, "agent_runs")[0];
409
+ for (const run of [...delegates, continuation]) {
410
+ requireCompleted(run, "CALIBRATION_FACT=packed-otter-7319");
411
+ }
382
412
  if (
383
- !existsSync(outputPath) ||
384
- !/real-pi-smoke output ok/.test(readFileSync(outputPath, "utf8"))
413
+ delegates.length !== 2 ||
414
+ delegates[0].context !== "fresh" ||
415
+ delegates[1].context !== "fork" ||
416
+ continuation.predecessor !== delegates[0].id ||
417
+ continuation.sessionFile !== delegates[0].sessionFile
385
418
  ) {
386
- throw new Error(`output smoke file missing expected content: ${outputPath}`);
387
- }
388
- requireOutput(
389
- "real Pi acceptance subagent prompt",
390
- await runLivePrompt(
391
- "real Pi acceptance subagent prompt",
392
- acceptancePrompt,
393
- runOptions,
394
- "subagent",
395
- ),
396
- /real-pi-smoke acceptance ok/,
397
- );
419
+ throw new Error(
420
+ "Fork/continuation smoke did not execute the two contexts and reuse the first saved conversation",
421
+ );
422
+ }
423
+ requireOutput("real Pi fork prompt", result.text, /real-pi-smoke fork ok/);
398
424
  }
399
425
 
400
426
  function createProject(root) {
401
427
  const projectRoot = join(root, "project");
402
- const projectAgentsDir = join(projectRoot, ".pi", "agents");
403
- mkdirSync(projectAgentsDir, { recursive: true });
404
- writeFileSync(
405
- join(projectAgentsDir, "real-smoke.md"),
406
- `---
407
- name: real-smoke
408
- description: Isolated live smoke agent
409
- systemPromptMode: replace
410
- inheritProjectContext: false
411
- inheritSkills: false
412
- tools: read
413
- extensions:
414
- ---
415
-
416
- Follow the task exactly and return its requested text without using tools.
417
- `,
418
- "utf-8",
419
- );
428
+ mkdirSync(projectRoot, { recursive: true });
420
429
  return projectRoot;
421
430
  }
422
431
 
@@ -431,7 +440,7 @@ async function main() {
431
440
  }
432
441
 
433
442
  const repoRoot = resolve(process.cwd());
434
- const root = mkdtempSync(join(tmpdir(), "pi-subagents-real-pi-smoke-"));
443
+ const root = mkdtempSync(join("/tmp", "pi-subagents-real-pi-smoke-"));
435
444
  const agentDir = join(root, "pi-agent");
436
445
  const projectRoot = createProject(root);
437
446
  const env = isolatedEnv(root, agentDir);
@@ -475,7 +484,7 @@ async function main() {
475
484
  }
476
485
  } finally {
477
486
  await runOptions.processes.stop();
478
- rmSync(dirname(getBrokerSocketPath(agentDir)), { recursive: true, force: true });
487
+ rmSync(env.PI_INTERCOM_RUNTIME_DIR, { recursive: true, force: true });
479
488
  for (const name of ["auth.json", "models.json"]) {
480
489
  rmSync(join(agentDir, name), { force: true });
481
490
  }
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { spawnSync } from "node:child_process";
3
3
  import { mkdtempSync, readdirSync, rmSync } from "node:fs";
4
- import { availableParallelism, tmpdir } from "node:os";
4
+ import { availableParallelism } from "node:os";
5
5
  import { join } from "node:path";
6
6
 
7
7
  // ponytail: integration is sized for the 3-vCPU macOS hosted runner, where the suite takes
@@ -81,7 +81,7 @@ function testFiles(dir) {
81
81
  function sanitizedEnv() {
82
82
  const env = { ...process.env };
83
83
  for (const key of Object.keys(env)) {
84
- if (key.startsWith("PI_SUBAGENT_")) {
84
+ if (key.startsWith("PI_SUBAGENT_") || key.startsWith("PI_INTERCOM_")) {
85
85
  delete env[key];
86
86
  }
87
87
  }
@@ -91,9 +91,10 @@ function sanitizedEnv() {
91
91
  function runNodeTest(label, files, timeoutMs, concurrency) {
92
92
  const args = [...(concurrency ? [`--test-concurrency=${concurrency}`] : []), "--test", ...files];
93
93
  const startedAt = Date.now();
94
- const tempRoot = mkdtempSync(join(tmpdir(), "pi-subagents-test-"));
94
+ const tempRoot = mkdtempSync(join("/tmp", "pi-subagents-test-"));
95
95
  const env = sanitizedEnv();
96
96
  env.PI_SUBAGENT_TEMP_ROOT = tempRoot;
97
+ env.PI_INTERCOM_RUNTIME_DIR = join(tempRoot, "ic");
97
98
  env.HOME = tempRoot;
98
99
  delete env.PI_CODING_AGENT_DIR;
99
100
  let result;
@@ -1,113 +1,59 @@
1
1
  ---
2
2
  name: pi-intercom
3
- description: "Coordinate local Pi sessions with pi-intercom: list peers, send updates, ask blocking questions, reply to inbound asks, use contact_supervisor, or handle pi-subagents escalations. Do not use for generic chat, remote/cross-machine messaging, unrelated repos, routine subagent completion, or work this session can finish."
3
+ description: "Discover eligible local Pi sessions, send guidance, ask/reply, or read a peer's last completed response without waking it. Use for same-machine Pi coordination, not generic chat or unrelated remote messaging."
4
4
  ---
5
5
 
6
6
  # Pi Intercom
7
7
 
8
- ## Goal
9
-
10
- Coordinate named Pi sessions on the same machine with the least context loss and the fewest interruptions.
11
-
12
- ## Source of truth
13
-
14
- - Fresh sessions keep the peer schema behind `load_intercom({})`; presence and delivery remain active. Actionable inbound/recovered reply needs load it automatically. Presence alone, passive or routine child notices, and human chat messages do not.
15
- - A bounded ambient hint may report that same-project peers are connected. It is a constant count-free string and never sends a message; use `intercom({ action: "list" })` before choosing a target.
16
- - `intercom({ action: "list" })` is the source of truth for targetable sessions in the current Git repository and its worktrees. Use `intercom({ action: "list", scope: "all" })` only when intentionally discovering connected sessions in other projects. Both scopes show only intercom-connected sessions, not every Pi process, with live ask capability, busy/idle/unknown state, recent intercom activity, and delivery guidance. The current-session row is not targetable; choose a peer from Other sessions.
17
- - Tool call shapes and options live in the live `intercom` / `contact_supervisor` schemas, `docs/intercom.md`, and `src/pi-intercom/index.ts`. Read those when a parameter detail is needed; do not invent fields.
18
- - Pi CLI flags for local peer sessions are `--name`, `--extension`, and `--skill`.
19
-
20
- ## Use when
21
-
22
- - Delegating a bounded task to another already-running Pi session.
23
- - Sending findings, code snippets, file context, progress, or blockers to a specific session.
24
- - Asking a peer for a decision or clarification you need before continuing.
25
- - Replying to an inbound intercom ask.
26
- - Handling a formatted `pi-subagents` supervisor escalation.
27
-
28
- ## Do not use when
29
-
30
- - The current session can finish the work directly.
31
- - The target is remote or on another machine; pi-intercom is local IPC only.
32
- - The task is unrelated to the recipient's repo or role.
33
- - A normal `subagent` run is enough and no visible peer conversation is needed.
34
- - The message would expose secrets, tokens, passwords, private data, or unrelated user context without explicit approval.
35
- - Routine subagent completion or final handoff; return that through `pi-subagents`, not intercom/`contact_supervisor`.
36
-
37
- ## Default workflow
38
-
39
- 1. Decide whether a peer is actually needed. If not, keep working locally.
40
- 2. Call `load_intercom({})` if `intercom` is inactive, then discover targets with `intercom({ action: "list" })` before sending. This defaults to the current repository and its worktrees; use `scope: "all"` only for intentional cross-project coordination.
41
- 3. Pick the displayed name or target ID exactly. If names collide, use the target shown by `list`. Never message the current session.
42
- 4. Choose the lightest action:
43
-
44
- | Action | Use for | Effect |
45
- | --------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
46
- | `send` | Guidance, answers, corrections, blockers, context, or other non-blocking coordination | Defaults to steer: it wakes idle recipients or reaches busy recipients at the next tool boundary, then returns after broker acceptance. Use explicit queue only when delay is intentional and passive only for human-visible breadcrumbs. |
47
- | `ask` | A required answer when this process must remain alive waiting for it | Use `delivery:"steer"`; waits up to `askTimeoutMs` (default 2 minutes). Default asks to peers reporting `accepts_asks:false` return `delivered:true`, `replied:false`, `reason:"peer_busy"`, while explicit steer asks keep waiting; not passive. |
48
- | `reply` | Answering an inbound ask | Uses the active ask, or the single pending ask |
49
- | `pending` | Multiple or delayed inbound asks | Lists unresolved asks so you can disambiguate |
50
- | `status` | Troubleshooting connection state | Shows connection, active session count, and the same live recipient capability/guidance rows as `list` |
51
-
52
- 5. Write compact messages with objective, scope, relevant files, stop boundary, and expected reply. Attachments only when the recipient needs the extra context.
53
- 6. For live agent-to-agent coordination, use non-blocking `send`; omitted delivery steers by default. Then end the turn or continue independent work. Use explicit queue only when delay is intentional; optional `delivery:"queue", queueMode:"replace", threadId:"<non-empty>"` keeps only the latest undelivered update for that thread.
54
- 7. Treat inbound steers as coordination within the active task: incorporate relevant context and continue. Replace the task only when the message explicitly says so. Reply to an active ask with `reply`; otherwise respond with default-steered `send`.
55
- 8. Use blocking `ask` only when this process must stay alive and cannot safely continue without the answer. After any tool result, handle the reply or error; do not assume delivery after failure.
56
-
57
- ## Quiet current state
58
-
59
- Use explicit `subscribe` / `unsubscribe` with an exact `topic`, and `publish` with a self-contained `message`. Routine `event: "update"` replaces one inspectable record per sender/topic without entering model context or waking a turn; inspect with `topics` or `/intercom topics`. Use resource-specific names for browser/tab ownership. `resource` + `ownership: "held" | "released"` is advisory state, not a lock; disconnection means unavailable, not released. Blocker/decision events steer subscribers; release events steer only subscriptions using `awaitRelease: true`. Direct messages always bypass subscriptions. Skip redundant status prose and keep material findings in the final task result.
60
-
61
- ## Supervisor escalations from pi-subagents
62
-
63
- When present, child sessions get a child-only `contact_supervisor` tool; normal sessions use `intercom`. Do not assume `contact_supervisor` exists unless the tool is listed.
64
-
65
- Child-side reasons only: blocking `need_decision` or `interview_request` when the ephemeral child cannot safely continue and must remain alive for the reply, or a non-blocking `progress_update` for a discovery or change the supervisor needs while working. Progress steers at the next tool boundary; skip starts, redundant status, and routine completion, and retain material findings in the final result.
66
-
67
- Supervisor-side: while connected, `intercom` `reply` answers formatted child escalations. After reload/reconnect, resume the same saved supervisor session, list `agent_runs({ action: "questions" })`, and use `agent_runs({ action: "answer", id, questionId, message })`. These questions do not use the ordinary ask timeout. A nudge is not an answer. Saved answers reach a live waiter or revive an exited child's saved session; a receipt does not mean the work completed. Use `agent_runs({ action: "stop", id })` to cancel a pending question and its live waiter.
68
-
69
- | Type | Meaning | Supervisor response |
70
- | ------------------- | ---------------------------------------------------------------- | --------------------------------------- |
71
- | `need_decision` | Child cannot safely continue without one decision or approval | Reply promptly with a clear decision |
72
- | `interview_request` | Child cannot safely continue without multiple structured answers | Reply with JSON using the requested ids |
73
- | `progress_update` | Child steers a material discovery needed during active work | Read it; reply only if redirecting |
74
-
75
- Interview replies use plain JSON or a fenced JSON block. `info` questions are context only and need no response entries:
76
-
77
- ```json
78
- {
79
- "responses": [
80
- { "id": "api", "value": "Stable API" },
81
- { "id": "constraints", "value": "Keep the public error shape unchanged." }
82
- ]
83
- }
84
- ```
85
-
86
- If a subagent status line advertises an intercom target, trust it only when that target appears in `intercom({ action: "list" })`. If absent, use `agent_runs` inspection, continuation, nudging, or result artifacts; the child may be Claude Code-backed or already exited and have no child-side `contact_supervisor`. From a parent session, prefer `agent_runs({ action: "nudge", id, message })` for non-blocking live child coordination; it supplements the active child task unless it explicitly replaces it. Use direct `intercom({ action: "ask", to, delivery: "steer", message })` only when the parent process must remain alive and cannot safely continue without a listed child reply.
87
-
88
- ## Optional visible peer sessions
89
-
90
- Read `references/peer-sessions.md` before starting a new visible peer session. Spawn one only when all are true:
91
-
92
- - No connected peer from `intercom({ action: "list" })` already fits.
93
- - The user benefits from watching or resuming a long-lived peer conversation.
94
- - The peer works in the same repo or an intentional reference repo.
95
- - You can run a smoke ask before delegating real work.
96
-
97
- ## Failure handling
98
-
99
- - No other project sessions: do not invent a target. Use `scope: "all"` only when cross-project coordination is intentional; otherwise start a peer only if the optional visible-peer rule holds.
100
- - `Session not found`: run `list`, choose the exact displayed target, then retry if still useful.
101
- - `Already waiting for a reply`: wait for the current ask, use `send` for non-blocking context, or continue local work.
102
- - Multiple pending asks: run `pending`, then use its copy-ready `reply` call or disambiguate with the displayed `to` or `replyTo` value.
103
- - Ask timeout: summarize the blocked decision and continue only with safe local work.
104
- - Busy non-interactive recipient auto-reply: it cannot respond while running; use subagent controls or wait.
105
-
106
- ## Completion evidence
107
-
108
- A good intercom-assisted turn ends with:
109
-
110
- - Target came from `list` or from the active inbound ask.
111
- - Action matched intent: default-steered `send` for live coordination, `ask` only for a required blocking reply, `reply` for an inbound ask, explicit queue only for intentional delay, and passive only when deliberately not waking the model.
112
- - Delivery result or failure was handled.
113
- - Any spawned peer was smoke-tested and either still needed or cleaned up.
8
+ The `intercom` tool is eager. There is no loader, separate child supervisor tool,
9
+ workflow UI, or topic registry.
10
+
11
+ 1. Use `intercom({action:"list"})` before choosing a peer. Default discovery spans
12
+ projects and agent directories under the same OS user; optional
13
+ `scope:"project"` filters to this repository and its worktrees.
14
+ 2. Pick the exact displayed target. Names are not unique; resolve ambiguity rather
15
+ than guessing. The current session is not a peer target.
16
+ 3. Choose the lightest operation:
17
+ - `send`: non-blocking guidance/corrections/blockers; default delivery steers.
18
+ - `last`: original last completed assistant text, without waking the peer.
19
+ - `ask`: bounded correlated wait only when the sender must stay alive waiting.
20
+ - `reply`: answer the active/sole pending ask, or specify `replyTo` when ambiguous.
21
+ - `pending`: unresolved inbound asks and their correlation.
22
+ - `status`: connection, peer health and inbound queue state.
23
+ 4. Handle the actual outcome. Broker acceptance is not recipient persistence,
24
+ model consumption, a reply, completion, or process exit. Do not replay an
25
+ uncertain side effect merely because its response was lost.
26
+
27
+ ## Topology
28
+
29
+ A main and its children form one group. Every pair inside it can communicate.
30
+ Mains can also communicate with other mains. Children cannot discover, send to,
31
+ or read a foreign group's agents—even with an exact ID. Only mains delegate;
32
+ there is one level. Cwd and agentDir do not define groups. These are coordination
33
+ rules, not a sandbox against other code running as the same OS user.
34
+
35
+ ## Delivery and paging
36
+
37
+ Default `send` steers at the next tool boundary or wakes an idle peer. Explicit
38
+ `delivery:"queue"` intentionally defers. Explicit `delivery:"passive"` never wakes
39
+ and is for breadcrumbs, not actionable work. Ordinary live agent guidance should
40
+ not be passive.
41
+
42
+ `last` returns a stable entry ID and offsets. Follow its exact next-page call to
43
+ retrieve all text; offsets are UTF-16 code units, not bytes. A read never sends a
44
+ model prompt. It does not substitute a fabricated status summary for the answer.
45
+
46
+ Keep messages compact and self-contained: objective, scope, files, authority,
47
+ stop boundary, and expected reply. Never attach secrets or unrelated private
48
+ context. Use ordinary run completion for delegated handoff, not duplicate sends.
49
+
50
+ ## Recovery
51
+
52
+ If a target disappears, list again. A timeout is not a reply. Multiple pending
53
+ asks require explicit correlation. Ordinary asks do not recreate the retired
54
+ persistent supervisor question/approval workflow.
55
+
56
+ Old agent-directory brokers may coexist during migration; updated sessions use
57
+ the same-user broker. Do not kill another broker or change runtime configuration
58
+ to force discovery. Only intercom-connected eligible sessions appear, not all
59
+ open Pi processes. See `docs/intercom.md` for broker and persistence contracts.