@fitchmultz/pi-subagents 0.49.1 → 0.51.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 (1069) hide show
  1. package/CHANGELOG.md +72 -1
  2. package/README.md +119 -94
  3. package/dist/agent/contracts.js +104 -0
  4. package/dist/agent/cwd.js +51 -0
  5. package/dist/agent/host.js +69 -0
  6. package/dist/agent/index.js +456 -0
  7. package/dist/agent/journal-tail.js +142 -0
  8. package/dist/agent/launch.js +99 -0
  9. package/dist/agent/legacy.js +183 -0
  10. package/dist/agent/notifications.js +210 -0
  11. package/dist/agent/observation-state.js +246 -0
  12. package/dist/agent/observation-view.js +258 -0
  13. package/dist/agent/observation.js +346 -0
  14. package/dist/agent/observe-card.js +243 -0
  15. package/dist/agent/observe-chrome.js +85 -0
  16. package/dist/agent/observe-client.js +285 -0
  17. package/dist/agent/observe-layout.js +65 -0
  18. package/dist/agent/observe-reading.js +84 -0
  19. package/dist/agent/observe-screen.js +436 -0
  20. package/dist/agent/observe-transcript.js +382 -0
  21. package/dist/agent/observe.js +441 -0
  22. package/dist/agent/process.js +346 -0
  23. package/dist/agent/receipts.js +147 -0
  24. package/dist/agent/runner.js +477 -0
  25. package/dist/agent/saved.js +195 -0
  26. package/dist/agent/shell.js +44 -0
  27. package/dist/agent/storage.js +130 -0
  28. package/dist/agent/tool-schemas.js +20 -0
  29. package/dist/agent/typebox.js +25 -0
  30. package/dist/agent/usage.js +117 -0
  31. package/dist/agent/view.js +194 -0
  32. package/dist/agent/wake.js +99 -0
  33. package/dist/build-info.js +1 -0
  34. package/dist/index.js +8 -0
  35. package/dist/intercom-client.d.ts +26 -0
  36. package/dist/intercom-client.js +45 -0
  37. package/dist/pi-intercom/agent-dir.d.ts +1 -0
  38. package/dist/pi-intercom/bridge-config.js +12 -19
  39. package/dist/pi-intercom/bridge-http.js +1 -2
  40. package/dist/pi-intercom/bridge-mailbox.js +2 -7
  41. package/dist/pi-intercom/bridge-protocol.js +3 -10
  42. package/dist/pi-intercom/bridge-routes.js +15 -186
  43. package/dist/pi-intercom/bridge-session.js +4 -97
  44. package/dist/pi-intercom/bridge.js +12 -35
  45. package/dist/pi-intercom/broker/broker.js +57 -56
  46. package/dist/pi-intercom/broker/client-last.d.ts +13 -0
  47. package/dist/pi-intercom/broker/client-last.js +60 -0
  48. package/dist/pi-intercom/broker/client.d.ts +60 -0
  49. package/dist/pi-intercom/broker/client.js +75 -4
  50. package/dist/pi-intercom/broker/connection.d.ts +29 -0
  51. package/dist/pi-intercom/broker/connection.js +5 -18
  52. package/dist/pi-intercom/broker/framing.d.ts +17 -0
  53. package/dist/pi-intercom/broker/framing.js +10 -7
  54. package/dist/pi-intercom/broker/guard.js +23 -0
  55. package/dist/pi-intercom/broker/last.d.ts +26 -0
  56. package/dist/pi-intercom/broker/last.js +198 -0
  57. package/dist/pi-intercom/broker/paths.d.ts +13 -0
  58. package/dist/pi-intercom/broker/paths.js +58 -16
  59. package/dist/pi-intercom/broker/pid.js +5 -1
  60. package/dist/pi-intercom/broker/server-connection.js +37 -0
  61. package/dist/pi-intercom/broker/snapshot-reader.d.ts +9 -0
  62. package/dist/pi-intercom/broker/snapshots.d.ts +29 -0
  63. package/dist/pi-intercom/broker/spawn.js +32 -16
  64. package/dist/pi-intercom/broker/targets.d.ts +9 -0
  65. package/dist/pi-intercom/broker/targets.js +24 -0
  66. package/dist/pi-intercom/config.js +0 -23
  67. package/dist/pi-intercom/connection.js +40 -72
  68. package/dist/pi-intercom/identity.js +15 -44
  69. package/dist/pi-intercom/inbound-delivery.js +20 -125
  70. package/dist/pi-intercom/inbound-journal.js +85 -73
  71. package/dist/pi-intercom/inbound-record.js +20 -49
  72. package/dist/pi-intercom/inbound.js +17 -90
  73. package/dist/pi-intercom/index.js +11 -47
  74. package/dist/pi-intercom/last-message.js +46 -0
  75. package/dist/pi-intercom/lifecycle.js +96 -36
  76. package/dist/pi-intercom/message-format.js +1 -32
  77. package/dist/pi-intercom/outbound.js +14 -16
  78. package/dist/pi-intercom/reply-tracker.js +9 -18
  79. package/dist/pi-intercom/reply-wait.js +17 -108
  80. package/dist/pi-intercom/runtime-types.js +0 -1
  81. package/dist/pi-intercom/session-events.js +5 -21
  82. package/dist/pi-intercom/session-targets.d.ts +24 -0
  83. package/dist/pi-intercom/tool-arguments.js +4 -0
  84. package/dist/pi-intercom/tool-registration.js +8 -86
  85. package/dist/pi-intercom/tool-results.js +5 -7
  86. package/dist/pi-intercom/tool-schemas.js +13 -67
  87. package/dist/pi-intercom/tools.js +55 -29
  88. package/dist/pi-intercom/types.d.ts +212 -0
  89. package/dist/pi-intercom/types.js +62 -4
  90. package/dist/pi-intercom/ui/session-format.js +3 -3
  91. package/dist/pi-intercom/validation.d.ts +12 -0
  92. package/dist/pi-intercom/validation.js +3 -0
  93. package/dist/shared/bounded-json.js +151 -0
  94. package/dist/shared/compact-cards.js +66 -0
  95. package/dist/shared/journal-frames.js +3 -6
  96. package/dist/shared/journal-projections.js +0 -31
  97. package/dist/shared/json-projection.js +267 -129
  98. package/dist/shared/native-journal.js +123 -56
  99. package/dist/shared/post-exit-stdio-guard.js +120 -7
  100. package/dist/shared/tui-action.js +29 -0
  101. package/dist/shared/types.js +0 -195
  102. package/dist/shared/unknown.d.ts +9 -0
  103. package/docs/code-quality.md +6 -3
  104. package/docs/development.md +93 -92
  105. package/docs/intercom-bridge.md +211 -415
  106. package/docs/intercom.md +362 -593
  107. package/docs/performance.md +185 -192
  108. package/docs/reference.md +282 -1458
  109. package/docs/retired-history-maintenance.md +252 -0
  110. package/package.json +33 -27
  111. package/scripts/archive-retired-history.mjs +464 -0
  112. package/scripts/build.mjs +49 -29
  113. package/scripts/intercom-bridge-credentials.mjs +1 -1
  114. package/scripts/intercom-remote.mjs +55 -272
  115. package/scripts/local-install-smoke.mjs +3 -1
  116. package/scripts/measure-size.mjs +64 -0
  117. package/scripts/native-package-smoke.mjs +409 -110
  118. package/scripts/package-smoke.mjs +184 -358
  119. package/scripts/prepare.mjs +2 -2
  120. package/scripts/real-pi-live.mjs +377 -0
  121. package/scripts/real-pi-processes.mjs +12 -39
  122. package/scripts/real-pi-smoke.mjs +39 -306
  123. package/scripts/run-tests.mjs +5 -2
  124. package/scripts/typescript.mjs +35 -0
  125. package/skills/pi-intercom/SKILL.md +54 -107
  126. package/skills/pi-subagents/SKILL.md +76 -72
  127. package/src/agent/contracts.ts +118 -0
  128. package/src/agent/cwd.ts +69 -0
  129. package/src/agent/host.ts +81 -0
  130. package/src/agent/index.ts +520 -0
  131. package/src/agent/journal-tail.ts +172 -0
  132. package/src/agent/launch.ts +136 -0
  133. package/src/agent/legacy.ts +221 -0
  134. package/src/agent/notifications.ts +256 -0
  135. package/src/agent/observation-state.ts +277 -0
  136. package/src/agent/observation-view.ts +267 -0
  137. package/src/agent/observation.ts +405 -0
  138. package/src/agent/observe-card.ts +304 -0
  139. package/src/agent/observe-chrome.ts +170 -0
  140. package/src/agent/observe-client.ts +318 -0
  141. package/src/agent/observe-layout.ts +79 -0
  142. package/src/agent/observe-reading.ts +97 -0
  143. package/src/agent/observe-screen.ts +481 -0
  144. package/src/agent/observe-transcript.ts +434 -0
  145. package/src/agent/observe.ts +473 -0
  146. package/src/agent/process.ts +385 -0
  147. package/src/agent/receipts.ts +178 -0
  148. package/src/agent/runner.ts +515 -0
  149. package/src/agent/saved.ts +220 -0
  150. package/src/agent/shell.ts +57 -0
  151. package/src/agent/storage.ts +139 -0
  152. package/src/agent/tool-schemas.ts +33 -0
  153. package/src/agent/typebox.ts +22 -0
  154. package/src/agent/usage.ts +133 -0
  155. package/src/agent/view.ts +296 -0
  156. package/src/agent/wake.ts +107 -0
  157. package/src/index.ts +10 -0
  158. package/src/intercom-client.ts +108 -0
  159. package/src/pi-intercom/bridge-config.ts +13 -24
  160. package/src/pi-intercom/bridge-http.ts +1 -2
  161. package/src/pi-intercom/bridge-mailbox.ts +8 -8
  162. package/src/pi-intercom/bridge-protocol.ts +7 -11
  163. package/src/pi-intercom/bridge-routes.ts +29 -277
  164. package/src/pi-intercom/bridge-session.ts +5 -116
  165. package/src/pi-intercom/bridge.ts +12 -35
  166. package/src/pi-intercom/broker/broker.ts +63 -74
  167. package/src/pi-intercom/broker/client-last.ts +78 -0
  168. package/src/pi-intercom/broker/client.ts +87 -23
  169. package/src/pi-intercom/broker/connection.ts +5 -17
  170. package/src/pi-intercom/broker/framing.ts +11 -8
  171. package/src/pi-intercom/broker/guard.ts +33 -0
  172. package/src/pi-intercom/broker/last.ts +275 -0
  173. package/src/pi-intercom/broker/paths.ts +65 -16
  174. package/src/pi-intercom/broker/pid.ts +6 -1
  175. package/src/pi-intercom/broker/server-connection.ts +63 -0
  176. package/src/pi-intercom/broker/spawn.ts +44 -16
  177. package/src/pi-intercom/broker/targets.ts +42 -0
  178. package/src/pi-intercom/config.ts +0 -27
  179. package/src/pi-intercom/connection.ts +60 -92
  180. package/src/pi-intercom/identity.ts +24 -49
  181. package/src/pi-intercom/inbound-delivery.ts +25 -154
  182. package/src/pi-intercom/inbound-journal.ts +105 -86
  183. package/src/pi-intercom/inbound-record.ts +23 -65
  184. package/src/pi-intercom/inbound.ts +24 -117
  185. package/src/pi-intercom/index.ts +13 -49
  186. package/src/pi-intercom/last-message.ts +64 -0
  187. package/src/pi-intercom/lifecycle.ts +126 -50
  188. package/src/pi-intercom/message-format.ts +1 -34
  189. package/src/pi-intercom/outbound.ts +23 -17
  190. package/src/pi-intercom/reply-tracker.ts +10 -25
  191. package/src/pi-intercom/reply-wait.ts +23 -129
  192. package/src/pi-intercom/runtime-types.ts +5 -59
  193. package/src/pi-intercom/session-events.ts +7 -35
  194. package/src/pi-intercom/tool-arguments.ts +6 -0
  195. package/src/pi-intercom/tool-registration.ts +12 -109
  196. package/src/pi-intercom/tool-results.ts +10 -9
  197. package/src/pi-intercom/tool-schemas.ts +13 -108
  198. package/src/pi-intercom/tools.ts +58 -44
  199. package/src/pi-intercom/transport.ts +1 -0
  200. package/src/pi-intercom/types.ts +156 -6
  201. package/src/pi-intercom/ui/session-format.ts +3 -3
  202. package/src/pi-intercom/validation.ts +4 -0
  203. package/src/shared/bounded-json.ts +162 -0
  204. package/src/shared/compact-cards.ts +118 -0
  205. package/src/shared/journal-frames.ts +3 -19
  206. package/src/shared/journal-projections.ts +0 -35
  207. package/src/shared/json-projection.ts +267 -147
  208. package/src/shared/native-journal.ts +157 -75
  209. package/src/shared/post-exit-stdio-guard.ts +172 -8
  210. package/src/shared/tui-action.ts +39 -0
  211. package/src/shared/types.ts +0 -257
  212. package/tsconfig.client.json +8 -0
  213. package/tsconfig.json +1 -0
  214. package/agents/context-builder.md +0 -115
  215. package/agents/debugger.md +0 -58
  216. package/agents/delegate.md +0 -14
  217. package/agents/fixer.md +0 -40
  218. package/agents/oracle.md +0 -82
  219. package/agents/planner.md +0 -83
  220. package/agents/researcher.md +0 -60
  221. package/agents/reviewer-claude.md +0 -78
  222. package/agents/reviewer-gpt.md +0 -78
  223. package/agents/reviewer-ponytail.md +0 -92
  224. package/agents/reviewer-security.md +0 -92
  225. package/agents/reviewer.md +0 -78
  226. package/agents/scout.md +0 -77
  227. package/agents/ui-designer.md +0 -58
  228. package/agents/watcher.md +0 -27
  229. package/agents/worker.md +0 -52
  230. package/agents/writer.md +0 -39
  231. package/dist/agents/agent-defaults.js +0 -9
  232. package/dist/agents/agent-definition.js +0 -196
  233. package/dist/agents/agent-management.js +0 -88
  234. package/dist/agents/agent-scope.js +0 -9
  235. package/dist/agents/agent-selection.js +0 -13
  236. package/dist/agents/agent-serializer.js +0 -88
  237. package/dist/agents/agents.js +0 -111
  238. package/dist/agents/builtin-overrides.js +0 -218
  239. package/dist/agents/chain-serializer.js +0 -3
  240. package/dist/agents/config-values.js +0 -52
  241. package/dist/agents/discovery-paths.js +0 -91
  242. package/dist/agents/frontmatter.js +0 -31
  243. package/dist/agents/identity.js +0 -46
  244. package/dist/agents/json-chain.js +0 -254
  245. package/dist/agents/management-config.js +0 -332
  246. package/dist/agents/management-format.js +0 -231
  247. package/dist/agents/management-persistence.js +0 -287
  248. package/dist/agents/management-targets.js +0 -136
  249. package/dist/agents/management-warnings.js +0 -81
  250. package/dist/agents/markdown-chain.js +0 -210
  251. package/dist/agents/package-agents.js +0 -154
  252. package/dist/agents/skill-files.js +0 -157
  253. package/dist/agents/skill-search-paths.js +0 -246
  254. package/dist/agents/skill-types.js +0 -1
  255. package/dist/agents/skills.js +0 -125
  256. package/dist/extension/acceptance-schema.js +0 -55
  257. package/dist/extension/build-info.js +0 -1
  258. package/dist/extension/chain-schema.js +0 -196
  259. package/dist/extension/child-runtime.js +0 -237
  260. package/dist/extension/compact-tools.js +0 -183
  261. package/dist/extension/config-schema.js +0 -29
  262. package/dist/extension/config.js +0 -38
  263. package/dist/extension/control-notice-schema.js +0 -37
  264. package/dist/extension/control-notices.js +0 -36
  265. package/dist/extension/delegation-bridges.js +0 -43
  266. package/dist/extension/doctor.js +0 -166
  267. package/dist/extension/everyday-schemas.js +0 -207
  268. package/dist/extension/fanout-child.js +0 -25
  269. package/dist/extension/index.js +0 -28
  270. package/dist/extension/message-renderers.js +0 -225
  271. package/dist/extension/nested-control-inbox.js +0 -154
  272. package/dist/extension/parent-runtime.js +0 -339
  273. package/dist/extension/primary-tool.js +0 -69
  274. package/dist/extension/result-snapshot.js +0 -4
  275. package/dist/extension/runtime-reload.js +0 -62
  276. package/dist/extension/runtime-storage.js +0 -43
  277. package/dist/extension/schema-overrides.js +0 -75
  278. package/dist/extension/schemas.js +0 -345
  279. package/dist/extension/tool-input.js +0 -35
  280. package/dist/extension/tool-result.js +0 -29
  281. package/dist/history/answer-texts.js +0 -57
  282. package/dist/history/canonical-result.js +0 -114
  283. package/dist/history/canonical-selection.js +0 -40
  284. package/dist/history/database-generation.js +0 -82
  285. package/dist/history/database.js +0 -96
  286. package/dist/history/entry-ingestion.js +0 -61
  287. package/dist/history/index.js +0 -344
  288. package/dist/history/ingest.js +0 -314
  289. package/dist/history/output-digests.js +0 -40
  290. package/dist/history/preview.js +0 -210
  291. package/dist/history/prune.js +0 -33
  292. package/dist/history/queries.js +0 -81
  293. package/dist/history/query-scope.js +0 -190
  294. package/dist/history/rows.js +0 -77
  295. package/dist/history/run-projection.js +0 -136
  296. package/dist/history/run-queries.js +0 -153
  297. package/dist/history/schema.js +0 -31
  298. package/dist/history/search-queries.js +0 -169
  299. package/dist/history/selected-record.js +0 -108
  300. package/dist/history/source-file.js +0 -45
  301. package/dist/history/source-watches.js +0 -141
  302. package/dist/history/store.js +0 -243
  303. package/dist/history/text-chunks.js +0 -168
  304. package/dist/history/text.js +0 -35
  305. package/dist/history/transcript-queries.js +0 -183
  306. package/dist/history/types.js +0 -8
  307. package/dist/history/values.js +0 -36
  308. package/dist/history/wire-inputs.js +0 -122
  309. package/dist/history/wire-models.js +0 -38
  310. package/dist/history/worker-runtime.js +0 -441
  311. package/dist/history/worker.js +0 -91
  312. package/dist/intercom/intercom-bridge.js +0 -140
  313. package/dist/intercom/live-intercom.js +0 -151
  314. package/dist/intercom/nested-result-tree.js +0 -163
  315. package/dist/intercom/result-delivery.js +0 -40
  316. package/dist/intercom/result-intercom.js +0 -216
  317. package/dist/pi-intercom/bridge-ask.js +0 -57
  318. package/dist/pi-intercom/bridge-broadcast.js +0 -60
  319. package/dist/pi-intercom/bridge-catalog.js +0 -372
  320. package/dist/pi-intercom/bridge-control.js +0 -104
  321. package/dist/pi-intercom/bridge-groups.js +0 -135
  322. package/dist/pi-intercom/bridge-launch-journal.js +0 -84
  323. package/dist/pi-intercom/bridge-launch-policy.js +0 -154
  324. package/dist/pi-intercom/bridge-launch.js +0 -327
  325. package/dist/pi-intercom/bridge-operations.js +0 -127
  326. package/dist/pi-intercom/bridge-rpc-process.js +0 -292
  327. package/dist/pi-intercom/interview.js +0 -236
  328. package/dist/pi-intercom/native-control-auth.js +0 -80
  329. package/dist/pi-intercom/native-control-protocol.js +0 -111
  330. package/dist/pi-intercom/native-control.js +0 -130
  331. package/dist/pi-intercom/peer-awareness.js +0 -66
  332. package/dist/pi-intercom/saved-transcript.js +0 -135
  333. package/dist/pi-intercom/subagent-events.js +0 -238
  334. package/dist/pi-intercom/subagent-live-events.js +0 -175
  335. package/dist/pi-intercom/supervisor.js +0 -282
  336. package/dist/pi-intercom/topic-actions.js +0 -177
  337. package/dist/pi-intercom/topics.js +0 -242
  338. package/dist/pi-intercom/transcript.js +0 -175
  339. package/dist/pi-intercom/ui/compose-paste.js +0 -93
  340. package/dist/pi-intercom/ui/compose.js +0 -247
  341. package/dist/pi-intercom/ui/inline-message.js +0 -80
  342. package/dist/pi-intercom/ui/message-renderers.js +0 -147
  343. package/dist/pi-intercom/ui/overlay.js +0 -181
  344. package/dist/pi-intercom/ui/session-list.js +0 -157
  345. package/dist/pi-intercom/ui/tool-renderers.js +0 -110
  346. package/dist/pi-intercom/ui/topic-view.js +0 -88
  347. package/dist/runs/background/async-chain-plan.js +0 -265
  348. package/dist/runs/background/async-control.js +0 -171
  349. package/dist/runs/background/async-execution.js +0 -179
  350. package/dist/runs/background/async-job-admission.js +0 -40
  351. package/dist/runs/background/async-job-projection.js +0 -169
  352. package/dist/runs/background/async-job-tracker.js +0 -353
  353. package/dist/runs/background/async-launch.js +0 -216
  354. package/dist/runs/background/async-plan.js +0 -116
  355. package/dist/runs/background/async-result-file.js +0 -82
  356. package/dist/runs/background/async-resume.js +0 -247
  357. package/dist/runs/background/async-run-discovery.js +0 -211
  358. package/dist/runs/background/async-run-location.js +0 -135
  359. package/dist/runs/background/async-run-record.js +0 -1
  360. package/dist/runs/background/async-run-repair.js +0 -223
  361. package/dist/runs/background/async-run-summary.js +0 -1
  362. package/dist/runs/background/async-single-plan.js +0 -105
  363. package/dist/runs/background/async-status-projection.js +0 -155
  364. package/dist/runs/background/async-status-render.js +0 -117
  365. package/dist/runs/background/async-status-validation.js +0 -181
  366. package/dist/runs/background/async-status.js +0 -3
  367. package/dist/runs/background/async-value.js +0 -21
  368. package/dist/runs/background/completion-dedupe.js +0 -42
  369. package/dist/runs/background/completion-delivery.js +0 -251
  370. package/dist/runs/background/completion-receipts.js +0 -237
  371. package/dist/runs/background/legacy-status-acceptance.js +0 -34
  372. package/dist/runs/background/notify.js +0 -111
  373. package/dist/runs/background/parallel-groups.js +0 -72
  374. package/dist/runs/background/result-payload.js +0 -178
  375. package/dist/runs/background/result-watcher.js +0 -435
  376. package/dist/runs/background/run-id-resolver.js +0 -84
  377. package/dist/runs/background/run-schemas.js +0 -189
  378. package/dist/runs/background/run-status-contracts.js +0 -14
  379. package/dist/runs/background/run-status-render.js +0 -270
  380. package/dist/runs/background/run-status.js +0 -274
  381. package/dist/runs/background/runner-attempt-output.js +0 -155
  382. package/dist/runs/background/runner-attempt.js +0 -263
  383. package/dist/runs/background/runner-child-executor.js +0 -166
  384. package/dist/runs/background/runner-child-observer.js +0 -197
  385. package/dist/runs/background/runner-completion-summary.js +0 -71
  386. package/dist/runs/background/runner-completion.js +0 -211
  387. package/dist/runs/background/runner-config.js +0 -1
  388. package/dist/runs/background/runner-contract.js +0 -1
  389. package/dist/runs/background/runner-dynamic.js +0 -121
  390. package/dist/runs/background/runner-finalization.js +0 -149
  391. package/dist/runs/background/runner-graph.js +0 -68
  392. package/dist/runs/background/runner-initial-status.js +0 -60
  393. package/dist/runs/background/runner-lifecycle.js +0 -142
  394. package/dist/runs/background/runner-monitor.js +0 -311
  395. package/dist/runs/background/runner-parallel.js +0 -203
  396. package/dist/runs/background/runner-prepare-step.js +0 -86
  397. package/dist/runs/background/runner-reporting.js +0 -153
  398. package/dist/runs/background/runner-status.js +0 -148
  399. package/dist/runs/background/runner-step-output.js +0 -90
  400. package/dist/runs/background/runner-step-record.js +0 -45
  401. package/dist/runs/background/runner-step.js +0 -112
  402. package/dist/runs/background/runner-streaming.js +0 -173
  403. package/dist/runs/background/runner-workflow.js +0 -213
  404. package/dist/runs/background/stale-run-reconciler.js +0 -198
  405. package/dist/runs/background/subagent-runner-launcher.js +0 -75
  406. package/dist/runs/background/subagent-runner.js +0 -81
  407. package/dist/runs/background/top-level-async.js +0 -6
  408. package/dist/runs/foreground/chain-clarify.js +0 -428
  409. package/dist/runs/foreground/clarification-draft.js +0 -87
  410. package/dist/runs/foreground/clarify-contracts.js +0 -1
  411. package/dist/runs/foreground/clarify-invocation.js +0 -163
  412. package/dist/runs/foreground/clarify-text-editor.js +0 -210
  413. package/dist/runs/foreground/clarify-view.js +0 -167
  414. package/dist/runs/foreground/execution-input.js +0 -296
  415. package/dist/runs/foreground/execution-routing.js +0 -33
  416. package/dist/runs/foreground/execution-timeout.js +0 -81
  417. package/dist/runs/foreground/foreground-control.js +0 -276
  418. package/dist/runs/foreground/foreground-memory.js +0 -99
  419. package/dist/runs/foreground/invocation-context.js +0 -55
  420. package/dist/runs/foreground/invocation-execution.js +0 -331
  421. package/dist/runs/foreground/invocation-expansion.js +0 -48
  422. package/dist/runs/foreground/management-actions.js +0 -295
  423. package/dist/runs/foreground/nested-control.js +0 -179
  424. package/dist/runs/foreground/question-continuation.js +0 -78
  425. package/dist/runs/foreground/question-control.js +0 -193
  426. package/dist/runs/foreground/resume-target.js +0 -221
  427. package/dist/runs/foreground/revival-launch-policy.js +0 -58
  428. package/dist/runs/foreground/run-async-path.js +0 -217
  429. package/dist/runs/foreground/run-interrupt.js +0 -164
  430. package/dist/runs/foreground/run-nudge.js +0 -278
  431. package/dist/runs/foreground/saved-revival.js +0 -251
  432. package/dist/runs/foreground/subagent-executor.js +0 -153
  433. package/dist/runs/foreground/subagent-params.js +0 -202
  434. package/dist/runs/foreground/wait-observation.js +0 -104
  435. package/dist/runs/foreground/wait-registration.js +0 -17
  436. package/dist/runs/foreground/wait-run.js +0 -301
  437. package/dist/runs/shared/acceptance-contract.js +0 -347
  438. package/dist/runs/shared/acceptance-defaults.js +0 -1
  439. package/dist/runs/shared/acceptance-evaluation.js +0 -276
  440. package/dist/runs/shared/acceptance-finalization.js +0 -356
  441. package/dist/runs/shared/acceptance-outcome.js +0 -53
  442. package/dist/runs/shared/acceptance-reports.js +0 -212
  443. package/dist/runs/shared/acceptance-submission.js +0 -167
  444. package/dist/runs/shared/acceptance-verification.js +0 -100
  445. package/dist/runs/shared/acceptance.js +0 -4
  446. package/dist/runs/shared/chain-outputs.js +0 -138
  447. package/dist/runs/shared/child-attempt-types.js +0 -1
  448. package/dist/runs/shared/child-attempt.js +0 -340
  449. package/dist/runs/shared/child-boundaries.js +0 -173
  450. package/dist/runs/shared/child-context-filter.js +0 -44
  451. package/dist/runs/shared/child-event-observer.js +0 -390
  452. package/dist/runs/shared/child-execution-cwd.js +0 -126
  453. package/dist/runs/shared/child-execution-outcome.js +0 -72
  454. package/dist/runs/shared/child-invocation.js +0 -54
  455. package/dist/runs/shared/child-message-validation.js +0 -215
  456. package/dist/runs/shared/child-native-accounting.js +0 -106
  457. package/dist/runs/shared/child-native-observation.js +0 -69
  458. package/dist/runs/shared/child-observation-spool.js +0 -169
  459. package/dist/runs/shared/child-observations.js +0 -195
  460. package/dist/runs/shared/child-presence.js +0 -3
  461. package/dist/runs/shared/child-route-env.js +0 -119
  462. package/dist/runs/shared/child-stream-observer.js +0 -221
  463. package/dist/runs/shared/child-stream-projection.js +0 -137
  464. package/dist/runs/shared/child-structured-tool.js +0 -27
  465. package/dist/runs/shared/claude-code.js +0 -162
  466. package/dist/runs/shared/claude-model.js +0 -42
  467. package/dist/runs/shared/claude-session.js +0 -83
  468. package/dist/runs/shared/claude-types.js +0 -1
  469. package/dist/runs/shared/completion-guard.js +0 -31
  470. package/dist/runs/shared/control-event-policy.js +0 -8
  471. package/dist/runs/shared/control-notification-owner.js +0 -13
  472. package/dist/runs/shared/dynamic-fanout.js +0 -289
  473. package/dist/runs/shared/dynamic-item.js +0 -102
  474. package/dist/runs/shared/history-index.js +0 -98
  475. package/dist/runs/shared/legacy-async-recovery.js +0 -114
  476. package/dist/runs/shared/legacy-output-recovery.js +0 -148
  477. package/dist/runs/shared/mcp-config-schema.js +0 -36
  478. package/dist/runs/shared/mcp-direct-tool-allowlist.js +0 -365
  479. package/dist/runs/shared/model-fallback.js +0 -247
  480. package/dist/runs/shared/mutating-tool-guard.js +0 -210
  481. package/dist/runs/shared/native-finalization-types.js +0 -1
  482. package/dist/runs/shared/native-finalization.js +0 -180
  483. package/dist/runs/shared/native-usage.js +0 -293
  484. package/dist/runs/shared/nested-control-records.js +0 -128
  485. package/dist/runs/shared/nested-events.js +0 -8
  486. package/dist/runs/shared/nested-path.js +0 -52
  487. package/dist/runs/shared/nested-projection.js +0 -155
  488. package/dist/runs/shared/nested-protocol.js +0 -18
  489. package/dist/runs/shared/nested-registry.js +0 -191
  490. package/dist/runs/shared/nested-render.js +0 -156
  491. package/dist/runs/shared/nested-route.js +0 -220
  492. package/dist/runs/shared/nested-validation.js +0 -216
  493. package/dist/runs/shared/owned-child-evidence.js +0 -125
  494. package/dist/runs/shared/owned-run-list.js +0 -146
  495. package/dist/runs/shared/owned-run-observation.js +0 -267
  496. package/dist/runs/shared/owned-run-progress.js +0 -109
  497. package/dist/runs/shared/owned-run-read-state.js +0 -1
  498. package/dist/runs/shared/owned-run-results.js +0 -202
  499. package/dist/runs/shared/owned-run-status.js +0 -180
  500. package/dist/runs/shared/owned-run-view.js +0 -51
  501. package/dist/runs/shared/owned-workflow-details.js +0 -17
  502. package/dist/runs/shared/owner-output.js +0 -43
  503. package/dist/runs/shared/parallel-utils.js +0 -49
  504. package/dist/runs/shared/parent-receipts.js +0 -126
  505. package/dist/runs/shared/parent-usage.js +0 -233
  506. package/dist/runs/shared/pi-args.js +0 -217
  507. package/dist/runs/shared/pi-launch-input.js +0 -1
  508. package/dist/runs/shared/pi-session-launch.js +0 -86
  509. package/dist/runs/shared/pi-spawn.js +0 -66
  510. package/dist/runs/shared/run-history-queries.js +0 -136
  511. package/dist/runs/shared/run-history.js +0 -176
  512. package/dist/runs/shared/run-id-ambiguity.js +0 -4
  513. package/dist/runs/shared/run-metadata-paths.js +0 -14
  514. package/dist/runs/shared/run-metadata.js +0 -158
  515. package/dist/runs/shared/run-persistence.js +0 -131
  516. package/dist/runs/shared/run-records.js +0 -9
  517. package/dist/runs/shared/run-restoration.js +0 -337
  518. package/dist/runs/shared/run-state-owner.js +0 -26
  519. package/dist/runs/shared/session-cwd-preload.js +0 -42
  520. package/dist/runs/shared/single-output.js +0 -297
  521. package/dist/runs/shared/stable-value.js +0 -15
  522. package/dist/runs/shared/streaming-text.js +0 -26
  523. package/dist/runs/shared/structured-output.js +0 -67
  524. package/dist/runs/shared/subagent-control.js +0 -246
  525. package/dist/runs/shared/subagent-prompt-runtime.js +0 -94
  526. package/dist/runs/shared/subagent-tool-loop-guard.js +0 -95
  527. package/dist/runs/shared/supervisor-question-state.js +0 -145
  528. package/dist/runs/shared/supervisor-questions.js +0 -284
  529. package/dist/runs/shared/workflow-graph.js +0 -306
  530. package/dist/runs/shared/workflow-policy.js +0 -157
  531. package/dist/runs/shared/worktree-contract.js +0 -1
  532. package/dist/runs/shared/worktree-hook.js +0 -138
  533. package/dist/runs/shared/worktree-location.js +0 -47
  534. package/dist/runs/shared/worktree-preservation.js +0 -8
  535. package/dist/runs/shared/worktree-process.js +0 -107
  536. package/dist/runs/shared/worktree.js +0 -386
  537. package/dist/shared/agent-context-policy.js +0 -116
  538. package/dist/shared/agent-dir.js +0 -14
  539. package/dist/shared/artifacts.js +0 -114
  540. package/dist/shared/atomic-json.js +0 -16
  541. package/dist/shared/chain-files.js +0 -72
  542. package/dist/shared/concurrency.js +0 -18
  543. package/dist/shared/content-preview.js +0 -115
  544. package/dist/shared/execution-cwd.js +0 -22
  545. package/dist/shared/file-coalescer.js +0 -22
  546. package/dist/shared/fork-context.js +0 -47
  547. package/dist/shared/formatters.js +0 -111
  548. package/dist/shared/journal-reader.js +0 -6
  549. package/dist/shared/lazy-tools.js +0 -43
  550. package/dist/shared/message-output.js +0 -116
  551. package/dist/shared/model-info.js +0 -85
  552. package/dist/shared/native-import.js +0 -20
  553. package/dist/shared/native-session-loader.js +0 -17
  554. package/dist/shared/native-session.js +0 -4
  555. package/dist/shared/native-tui.js +0 -23
  556. package/dist/shared/native-typebox.js +0 -32
  557. package/dist/shared/prompt-sections.js +0 -10
  558. package/dist/shared/session-entries.js +0 -87
  559. package/dist/shared/session-identity.js +0 -16
  560. package/dist/shared/settings.js +0 -121
  561. package/dist/shared/status-format.js +0 -171
  562. package/dist/shared/task-file-policy.js +0 -24
  563. package/dist/shared/temp-root.js +0 -143
  564. package/dist/shared/types/acceptance.js +0 -1
  565. package/dist/shared/types/async.js +0 -1
  566. package/dist/shared/types/config.js +0 -1
  567. package/dist/shared/types/details.js +0 -1
  568. package/dist/shared/types/history.js +0 -1
  569. package/dist/shared/types/inputs.js +0 -1
  570. package/dist/shared/types/intercom.js +0 -1
  571. package/dist/shared/types/launch.js +0 -1
  572. package/dist/shared/types/messages.js +0 -1
  573. package/dist/shared/types/nested.js +0 -1
  574. package/dist/shared/types/owned-runs.js +0 -1
  575. package/dist/shared/types/progress.js +0 -1
  576. package/dist/shared/types/questions.js +0 -1
  577. package/dist/shared/types/results.js +0 -1
  578. package/dist/shared/types/state.js +0 -1
  579. package/dist/shared/types/usage.js +0 -1
  580. package/dist/shared/types/workflow.js +0 -1
  581. package/dist/shared/ui-mode.js +0 -3
  582. package/dist/shared/utils.js +0 -128
  583. package/dist/slash/command-discovery.js +0 -83
  584. package/dist/slash/command-input.js +0 -190
  585. package/dist/slash/prompt-template-bridge.js +0 -122
  586. package/dist/slash/prompt-template-contract.js +0 -77
  587. package/dist/slash/prompt-template-results.js +0 -125
  588. package/dist/slash/request-protocol.js +0 -68
  589. package/dist/slash/result-delivery.js +0 -237
  590. package/dist/slash/saved-chain.js +0 -78
  591. package/dist/slash/slash-bridge.js +0 -150
  592. package/dist/slash/slash-commands.js +0 -136
  593. package/dist/slash/slash-live-state.js +0 -267
  594. package/dist/tui/action-hints.js +0 -103
  595. package/dist/tui/activity-lines.js +0 -32
  596. package/dist/tui/agent-browser.js +0 -290
  597. package/dist/tui/agent-controls.js +0 -289
  598. package/dist/tui/agent-conversation.js +0 -444
  599. package/dist/tui/agent-dock.js +0 -171
  600. package/dist/tui/agent-history.js +0 -50
  601. package/dist/tui/agent-model.js +0 -62
  602. package/dist/tui/agent-picker.js +0 -262
  603. package/dist/tui/agent-view.js +0 -350
  604. package/dist/tui/compact-results.js +0 -193
  605. package/dist/tui/conversation-details.js +0 -190
  606. package/dist/tui/conversation-frame.js +0 -135
  607. package/dist/tui/conversation-history.js +0 -210
  608. package/dist/tui/conversation-menu.js +0 -78
  609. package/dist/tui/conversation-notices.js +0 -79
  610. package/dist/tui/conversation-selection.js +0 -58
  611. package/dist/tui/conversation-viewport.js +0 -129
  612. package/dist/tui/direction-message.js +0 -27
  613. package/dist/tui/display.js +0 -282
  614. package/dist/tui/editor-viewport.js +0 -18
  615. package/dist/tui/expanded-content.js +0 -87
  616. package/dist/tui/expanded-multi.js +0 -170
  617. package/dist/tui/expanded-single.js +0 -65
  618. package/dist/tui/history-cards.js +0 -202
  619. package/dist/tui/history-display.js +0 -238
  620. package/dist/tui/history-json.js +0 -16
  621. package/dist/tui/history-metadata.js +0 -152
  622. package/dist/tui/history-record.js +0 -251
  623. package/dist/tui/history-text.js +0 -34
  624. package/dist/tui/indexed-history.js +0 -116
  625. package/dist/tui/nested-widget.js +0 -120
  626. package/dist/tui/picker-page.js +0 -59
  627. package/dist/tui/render.js +0 -72
  628. package/dist/tui/result-facts.js +0 -64
  629. package/dist/tui/task-observation.js +0 -59
  630. package/dist/tui/task-store.js +0 -366
  631. package/dist/tui/text-values.js +0 -16
  632. package/dist/tui/view-connections.js +0 -47
  633. package/dist/tui/view-model.js +0 -94
  634. package/dist/tui/view-persistence.js +0 -51
  635. package/dist/tui/view-ports.js +0 -1
  636. package/dist/tui/view-session.js +0 -37
  637. package/dist/tui/widget-details.js +0 -144
  638. package/dist/tui/widget-status.js +0 -245
  639. package/dist/tui/widget.js +0 -145
  640. package/dist/tui/workflow-labels.js +0 -223
  641. package/dist/tui/workflow-outcomes.js +0 -124
  642. package/generated/RunValidators.d.ts +0 -28
  643. package/generated/RunValidators.js +0 -2
  644. package/prompts/gather-context-and-clarify.md +0 -14
  645. package/prompts/parallel-cleanup.md +0 -65
  646. package/prompts/parallel-context-build.md +0 -59
  647. package/prompts/parallel-handoff-plan.md +0 -68
  648. package/prompts/parallel-research.md +0 -55
  649. package/prompts/parallel-review.md +0 -61
  650. package/prompts/review-loop.md +0 -44
  651. package/scripts/generate-run-schemas.mjs +0 -210
  652. package/skills/pi-intercom/evals/evals.json +0 -29
  653. package/skills/pi-intercom/evals/trigger-evals.json +0 -47
  654. package/skills/pi-intercom/references/peer-sessions.md +0 -74
  655. package/skills/pi-subagents/evals/evals.json +0 -29
  656. package/skills/pi-subagents/evals/trigger-evals.json +0 -42
  657. package/skills/pi-subagents/references/full-orchestration-guide.md +0 -1005
  658. package/src/agents/agent-defaults.ts +0 -13
  659. package/src/agents/agent-definition.ts +0 -253
  660. package/src/agents/agent-management.ts +0 -120
  661. package/src/agents/agent-scope.ts +0 -11
  662. package/src/agents/agent-selection.ts +0 -22
  663. package/src/agents/agent-serializer.ts +0 -90
  664. package/src/agents/agents.ts +0 -214
  665. package/src/agents/builtin-overrides.ts +0 -297
  666. package/src/agents/chain-serializer.ts +0 -3
  667. package/src/agents/config-values.ts +0 -57
  668. package/src/agents/discovery-paths.ts +0 -134
  669. package/src/agents/frontmatter.ts +0 -39
  670. package/src/agents/identity.ts +0 -61
  671. package/src/agents/json-chain.ts +0 -305
  672. package/src/agents/management-config.ts +0 -342
  673. package/src/agents/management-format.ts +0 -243
  674. package/src/agents/management-persistence.ts +0 -408
  675. package/src/agents/management-targets.ts +0 -260
  676. package/src/agents/management-warnings.ts +0 -115
  677. package/src/agents/markdown-chain.ts +0 -237
  678. package/src/agents/package-agents.ts +0 -231
  679. package/src/agents/skill-files.ts +0 -182
  680. package/src/agents/skill-search-paths.ts +0 -289
  681. package/src/agents/skill-types.ts +0 -31
  682. package/src/agents/skills.ts +0 -179
  683. package/src/extension/acceptance-schema.ts +0 -88
  684. package/src/extension/build-info.ts +0 -2
  685. package/src/extension/chain-schema.ts +0 -276
  686. package/src/extension/child-runtime.ts +0 -302
  687. package/src/extension/compact-tools.ts +0 -271
  688. package/src/extension/config-schema.ts +0 -59
  689. package/src/extension/config.ts +0 -45
  690. package/src/extension/control-notice-schema.ts +0 -55
  691. package/src/extension/control-notices.ts +0 -71
  692. package/src/extension/delegation-bridges.ts +0 -59
  693. package/src/extension/doctor.ts +0 -207
  694. package/src/extension/everyday-schemas.ts +0 -252
  695. package/src/extension/fanout-child.ts +0 -33
  696. package/src/extension/index.ts +0 -31
  697. package/src/extension/message-renderers.ts +0 -334
  698. package/src/extension/nested-control-inbox.ts +0 -196
  699. package/src/extension/parent-runtime.ts +0 -405
  700. package/src/extension/primary-tool.ts +0 -130
  701. package/src/extension/result-snapshot.ts +0 -9
  702. package/src/extension/runtime-reload.ts +0 -72
  703. package/src/extension/runtime-storage.ts +0 -49
  704. package/src/extension/schema-overrides.ts +0 -114
  705. package/src/extension/schemas.ts +0 -477
  706. package/src/extension/tool-input.ts +0 -46
  707. package/src/extension/tool-result.ts +0 -47
  708. package/src/history/answer-texts.ts +0 -74
  709. package/src/history/canonical-result.ts +0 -138
  710. package/src/history/canonical-selection.ts +0 -54
  711. package/src/history/database-generation.ts +0 -86
  712. package/src/history/database.ts +0 -97
  713. package/src/history/entry-ingestion.ts +0 -129
  714. package/src/history/index.ts +0 -434
  715. package/src/history/ingest.ts +0 -387
  716. package/src/history/output-digests.ts +0 -41
  717. package/src/history/preview.ts +0 -235
  718. package/src/history/prune.ts +0 -48
  719. package/src/history/queries.ts +0 -125
  720. package/src/history/query-scope.ts +0 -278
  721. package/src/history/rows.ts +0 -118
  722. package/src/history/run-projection.ts +0 -162
  723. package/src/history/run-queries.ts +0 -199
  724. package/src/history/schema.ts +0 -34
  725. package/src/history/search-queries.ts +0 -223
  726. package/src/history/selected-record.ts +0 -140
  727. package/src/history/source-file.ts +0 -51
  728. package/src/history/source-watches.ts +0 -156
  729. package/src/history/store.ts +0 -332
  730. package/src/history/text-chunks.ts +0 -186
  731. package/src/history/text.ts +0 -43
  732. package/src/history/transcript-queries.ts +0 -257
  733. package/src/history/types.ts +0 -29
  734. package/src/history/values.ts +0 -36
  735. package/src/history/wire-inputs.ts +0 -141
  736. package/src/history/wire-models.ts +0 -51
  737. package/src/history/worker-runtime.ts +0 -502
  738. package/src/history/worker.ts +0 -99
  739. package/src/intercom/intercom-bridge.ts +0 -190
  740. package/src/intercom/live-intercom.ts +0 -209
  741. package/src/intercom/nested-result-tree.ts +0 -213
  742. package/src/intercom/result-delivery.ts +0 -56
  743. package/src/intercom/result-intercom.ts +0 -308
  744. package/src/pi-intercom/bridge-ask.ts +0 -64
  745. package/src/pi-intercom/bridge-broadcast.ts +0 -70
  746. package/src/pi-intercom/bridge-catalog.ts +0 -489
  747. package/src/pi-intercom/bridge-control.ts +0 -179
  748. package/src/pi-intercom/bridge-groups.ts +0 -169
  749. package/src/pi-intercom/bridge-launch-journal.ts +0 -122
  750. package/src/pi-intercom/bridge-launch-policy.ts +0 -190
  751. package/src/pi-intercom/bridge-launch.ts +0 -506
  752. package/src/pi-intercom/bridge-operations.ts +0 -169
  753. package/src/pi-intercom/bridge-rpc-process.ts +0 -330
  754. package/src/pi-intercom/interview.ts +0 -295
  755. package/src/pi-intercom/native-control-auth.ts +0 -89
  756. package/src/pi-intercom/native-control-protocol.ts +0 -180
  757. package/src/pi-intercom/native-control.ts +0 -160
  758. package/src/pi-intercom/peer-awareness.ts +0 -84
  759. package/src/pi-intercom/saved-transcript.ts +0 -175
  760. package/src/pi-intercom/subagent-events.ts +0 -299
  761. package/src/pi-intercom/subagent-live-events.ts +0 -236
  762. package/src/pi-intercom/supervisor.ts +0 -362
  763. package/src/pi-intercom/topic-actions.ts +0 -243
  764. package/src/pi-intercom/topics.ts +0 -271
  765. package/src/pi-intercom/transcript.ts +0 -226
  766. package/src/pi-intercom/ui/compose-paste.ts +0 -109
  767. package/src/pi-intercom/ui/compose.ts +0 -305
  768. package/src/pi-intercom/ui/inline-message.ts +0 -110
  769. package/src/pi-intercom/ui/message-renderers.ts +0 -182
  770. package/src/pi-intercom/ui/overlay.ts +0 -238
  771. package/src/pi-intercom/ui/session-list.ts +0 -222
  772. package/src/pi-intercom/ui/tool-renderers.ts +0 -148
  773. package/src/pi-intercom/ui/topic-view.ts +0 -107
  774. package/src/runs/background/async-chain-plan.ts +0 -451
  775. package/src/runs/background/async-control.ts +0 -219
  776. package/src/runs/background/async-execution.ts +0 -227
  777. package/src/runs/background/async-job-admission.ts +0 -54
  778. package/src/runs/background/async-job-projection.ts +0 -225
  779. package/src/runs/background/async-job-tracker.ts +0 -441
  780. package/src/runs/background/async-launch.ts +0 -319
  781. package/src/runs/background/async-plan.ts +0 -285
  782. package/src/runs/background/async-result-file.ts +0 -104
  783. package/src/runs/background/async-resume.ts +0 -386
  784. package/src/runs/background/async-run-discovery.ts +0 -264
  785. package/src/runs/background/async-run-location.ts +0 -194
  786. package/src/runs/background/async-run-record.ts +0 -14
  787. package/src/runs/background/async-run-repair.ts +0 -307
  788. package/src/runs/background/async-run-summary.ts +0 -71
  789. package/src/runs/background/async-single-plan.ts +0 -168
  790. package/src/runs/background/async-status-projection.ts +0 -188
  791. package/src/runs/background/async-status-render.ts +0 -164
  792. package/src/runs/background/async-status-validation.ts +0 -238
  793. package/src/runs/background/async-status.ts +0 -9
  794. package/src/runs/background/async-value.ts +0 -29
  795. package/src/runs/background/completion-dedupe.ts +0 -65
  796. package/src/runs/background/completion-delivery.ts +0 -321
  797. package/src/runs/background/completion-receipts.ts +0 -309
  798. package/src/runs/background/legacy-status-acceptance.ts +0 -38
  799. package/src/runs/background/notify.ts +0 -174
  800. package/src/runs/background/parallel-groups.ts +0 -102
  801. package/src/runs/background/result-payload.ts +0 -268
  802. package/src/runs/background/result-watcher.ts +0 -520
  803. package/src/runs/background/run-id-resolver.ts +0 -138
  804. package/src/runs/background/run-schemas.ts +0 -240
  805. package/src/runs/background/run-status-contracts.ts +0 -46
  806. package/src/runs/background/run-status-render.ts +0 -364
  807. package/src/runs/background/run-status.ts +0 -366
  808. package/src/runs/background/runner-attempt-output.ts +0 -281
  809. package/src/runs/background/runner-attempt.ts +0 -354
  810. package/src/runs/background/runner-child-executor.ts +0 -232
  811. package/src/runs/background/runner-child-observer.ts +0 -278
  812. package/src/runs/background/runner-completion-summary.ts +0 -106
  813. package/src/runs/background/runner-completion.ts +0 -274
  814. package/src/runs/background/runner-config.ts +0 -52
  815. package/src/runs/background/runner-contract.ts +0 -51
  816. package/src/runs/background/runner-dynamic.ts +0 -185
  817. package/src/runs/background/runner-finalization.ts +0 -203
  818. package/src/runs/background/runner-graph.ts +0 -91
  819. package/src/runs/background/runner-initial-status.ts +0 -72
  820. package/src/runs/background/runner-lifecycle.ts +0 -159
  821. package/src/runs/background/runner-monitor.ts +0 -401
  822. package/src/runs/background/runner-parallel.ts +0 -279
  823. package/src/runs/background/runner-prepare-step.ts +0 -128
  824. package/src/runs/background/runner-reporting.ts +0 -192
  825. package/src/runs/background/runner-status.ts +0 -220
  826. package/src/runs/background/runner-step-output.ts +0 -156
  827. package/src/runs/background/runner-step-record.ts +0 -76
  828. package/src/runs/background/runner-step.ts +0 -150
  829. package/src/runs/background/runner-streaming.ts +0 -220
  830. package/src/runs/background/runner-workflow.ts +0 -284
  831. package/src/runs/background/stale-run-reconciler.ts +0 -312
  832. package/src/runs/background/subagent-runner-launcher.ts +0 -88
  833. package/src/runs/background/subagent-runner.ts +0 -85
  834. package/src/runs/background/top-level-async.ts +0 -15
  835. package/src/runs/foreground/chain-clarify.ts +0 -505
  836. package/src/runs/foreground/clarification-draft.ts +0 -92
  837. package/src/runs/foreground/clarify-contracts.ts +0 -33
  838. package/src/runs/foreground/clarify-invocation.ts +0 -204
  839. package/src/runs/foreground/clarify-text-editor.ts +0 -229
  840. package/src/runs/foreground/clarify-view.ts +0 -222
  841. package/src/runs/foreground/execution-input.ts +0 -401
  842. package/src/runs/foreground/execution-routing.ts +0 -41
  843. package/src/runs/foreground/execution-timeout.ts +0 -92
  844. package/src/runs/foreground/foreground-control.ts +0 -342
  845. package/src/runs/foreground/foreground-memory.ts +0 -132
  846. package/src/runs/foreground/invocation-context.ts +0 -88
  847. package/src/runs/foreground/invocation-execution.ts +0 -465
  848. package/src/runs/foreground/invocation-expansion.ts +0 -58
  849. package/src/runs/foreground/management-actions.ts +0 -360
  850. package/src/runs/foreground/nested-control.ts +0 -248
  851. package/src/runs/foreground/question-continuation.ts +0 -112
  852. package/src/runs/foreground/question-control.ts +0 -309
  853. package/src/runs/foreground/resume-target.ts +0 -330
  854. package/src/runs/foreground/revival-launch-policy.ts +0 -112
  855. package/src/runs/foreground/run-async-path.ts +0 -327
  856. package/src/runs/foreground/run-interrupt.ts +0 -202
  857. package/src/runs/foreground/run-nudge.ts +0 -355
  858. package/src/runs/foreground/saved-revival.ts +0 -356
  859. package/src/runs/foreground/subagent-executor.ts +0 -203
  860. package/src/runs/foreground/subagent-params.ts +0 -392
  861. package/src/runs/foreground/wait-observation.ts +0 -160
  862. package/src/runs/foreground/wait-registration.ts +0 -18
  863. package/src/runs/foreground/wait-run.ts +0 -366
  864. package/src/runs/shared/acceptance-contract.ts +0 -458
  865. package/src/runs/shared/acceptance-defaults.ts +0 -1
  866. package/src/runs/shared/acceptance-evaluation.ts +0 -349
  867. package/src/runs/shared/acceptance-finalization.ts +0 -495
  868. package/src/runs/shared/acceptance-outcome.ts +0 -69
  869. package/src/runs/shared/acceptance-reports.ts +0 -246
  870. package/src/runs/shared/acceptance-submission.ts +0 -251
  871. package/src/runs/shared/acceptance-verification.ts +0 -118
  872. package/src/runs/shared/acceptance.ts +0 -31
  873. package/src/runs/shared/chain-outputs.ts +0 -206
  874. package/src/runs/shared/child-attempt-types.ts +0 -118
  875. package/src/runs/shared/child-attempt.ts +0 -387
  876. package/src/runs/shared/child-boundaries.ts +0 -217
  877. package/src/runs/shared/child-context-filter.ts +0 -53
  878. package/src/runs/shared/child-event-observer.ts +0 -496
  879. package/src/runs/shared/child-execution-cwd.ts +0 -162
  880. package/src/runs/shared/child-execution-outcome.ts +0 -103
  881. package/src/runs/shared/child-invocation.ts +0 -74
  882. package/src/runs/shared/child-message-validation.ts +0 -233
  883. package/src/runs/shared/child-native-accounting.ts +0 -154
  884. package/src/runs/shared/child-native-observation.ts +0 -79
  885. package/src/runs/shared/child-observation-spool.ts +0 -193
  886. package/src/runs/shared/child-observations.ts +0 -229
  887. package/src/runs/shared/child-presence.ts +0 -6
  888. package/src/runs/shared/child-route-env.ts +0 -142
  889. package/src/runs/shared/child-stream-observer.ts +0 -302
  890. package/src/runs/shared/child-stream-projection.ts +0 -160
  891. package/src/runs/shared/child-structured-tool.ts +0 -38
  892. package/src/runs/shared/claude-code.ts +0 -216
  893. package/src/runs/shared/claude-model.ts +0 -67
  894. package/src/runs/shared/claude-session.ts +0 -124
  895. package/src/runs/shared/claude-types.ts +0 -31
  896. package/src/runs/shared/completion-guard.ts +0 -44
  897. package/src/runs/shared/control-event-policy.ts +0 -15
  898. package/src/runs/shared/control-notification-owner.ts +0 -20
  899. package/src/runs/shared/dynamic-fanout.ts +0 -459
  900. package/src/runs/shared/dynamic-item.ts +0 -114
  901. package/src/runs/shared/history-index.ts +0 -130
  902. package/src/runs/shared/legacy-async-recovery.ts +0 -153
  903. package/src/runs/shared/legacy-output-recovery.ts +0 -214
  904. package/src/runs/shared/mcp-config-schema.ts +0 -46
  905. package/src/runs/shared/mcp-direct-tool-allowlist.ts +0 -465
  906. package/src/runs/shared/model-fallback.ts +0 -344
  907. package/src/runs/shared/mutating-tool-guard.ts +0 -295
  908. package/src/runs/shared/native-finalization-types.ts +0 -29
  909. package/src/runs/shared/native-finalization.ts +0 -252
  910. package/src/runs/shared/native-usage.ts +0 -396
  911. package/src/runs/shared/nested-control-records.ts +0 -178
  912. package/src/runs/shared/nested-events.ts +0 -45
  913. package/src/runs/shared/nested-path.ts +0 -65
  914. package/src/runs/shared/nested-projection.ts +0 -230
  915. package/src/runs/shared/nested-protocol.ts +0 -67
  916. package/src/runs/shared/nested-registry.ts +0 -273
  917. package/src/runs/shared/nested-render.ts +0 -217
  918. package/src/runs/shared/nested-route.ts +0 -292
  919. package/src/runs/shared/nested-validation.ts +0 -291
  920. package/src/runs/shared/owned-child-evidence.ts +0 -184
  921. package/src/runs/shared/owned-run-list.ts +0 -187
  922. package/src/runs/shared/owned-run-observation.ts +0 -368
  923. package/src/runs/shared/owned-run-progress.ts +0 -172
  924. package/src/runs/shared/owned-run-read-state.ts +0 -7
  925. package/src/runs/shared/owned-run-results.ts +0 -289
  926. package/src/runs/shared/owned-run-status.ts +0 -239
  927. package/src/runs/shared/owned-run-view.ts +0 -65
  928. package/src/runs/shared/owned-workflow-details.ts +0 -24
  929. package/src/runs/shared/owner-output.ts +0 -73
  930. package/src/runs/shared/parallel-utils.ts +0 -93
  931. package/src/runs/shared/parent-receipts.ts +0 -186
  932. package/src/runs/shared/parent-usage.ts +0 -344
  933. package/src/runs/shared/pi-args.ts +0 -280
  934. package/src/runs/shared/pi-launch-input.ts +0 -48
  935. package/src/runs/shared/pi-session-launch.ts +0 -94
  936. package/src/runs/shared/pi-spawn.ts +0 -76
  937. package/src/runs/shared/run-history-queries.ts +0 -195
  938. package/src/runs/shared/run-history.ts +0 -221
  939. package/src/runs/shared/run-id-ambiguity.ts +0 -8
  940. package/src/runs/shared/run-metadata-paths.ts +0 -17
  941. package/src/runs/shared/run-metadata.ts +0 -240
  942. package/src/runs/shared/run-persistence.ts +0 -181
  943. package/src/runs/shared/run-records.ts +0 -19
  944. package/src/runs/shared/run-restoration.ts +0 -455
  945. package/src/runs/shared/run-state-owner.ts +0 -31
  946. package/src/runs/shared/session-cwd-preload.ts +0 -47
  947. package/src/runs/shared/single-output.ts +0 -416
  948. package/src/runs/shared/stable-value.ts +0 -15
  949. package/src/runs/shared/streaming-text.ts +0 -45
  950. package/src/runs/shared/structured-output.ts +0 -98
  951. package/src/runs/shared/subagent-control.ts +0 -352
  952. package/src/runs/shared/subagent-prompt-runtime.ts +0 -119
  953. package/src/runs/shared/subagent-tool-loop-guard.ts +0 -139
  954. package/src/runs/shared/supervisor-question-state.ts +0 -221
  955. package/src/runs/shared/supervisor-questions.ts +0 -410
  956. package/src/runs/shared/workflow-graph.ts +0 -422
  957. package/src/runs/shared/workflow-policy.ts +0 -260
  958. package/src/runs/shared/worktree-contract.ts +0 -29
  959. package/src/runs/shared/worktree-hook.ts +0 -181
  960. package/src/runs/shared/worktree-location.ts +0 -61
  961. package/src/runs/shared/worktree-preservation.ts +0 -10
  962. package/src/runs/shared/worktree-process.ts +0 -132
  963. package/src/runs/shared/worktree.ts +0 -507
  964. package/src/shared/agent-context-policy.ts +0 -215
  965. package/src/shared/agent-dir.ts +0 -15
  966. package/src/shared/artifacts.ts +0 -126
  967. package/src/shared/atomic-json.ts +0 -19
  968. package/src/shared/chain-files.ts +0 -72
  969. package/src/shared/concurrency.ts +0 -27
  970. package/src/shared/content-preview.ts +0 -117
  971. package/src/shared/execution-cwd.ts +0 -39
  972. package/src/shared/file-coalescer.ts +0 -31
  973. package/src/shared/fork-context.ts +0 -72
  974. package/src/shared/formatters.ts +0 -125
  975. package/src/shared/journal-reader.ts +0 -18
  976. package/src/shared/lazy-tools.ts +0 -85
  977. package/src/shared/message-output.ts +0 -146
  978. package/src/shared/model-info.ts +0 -117
  979. package/src/shared/native-import.ts +0 -25
  980. package/src/shared/native-session-loader.ts +0 -13
  981. package/src/shared/native-session.ts +0 -6
  982. package/src/shared/native-tui.ts +0 -20
  983. package/src/shared/native-typebox.ts +0 -29
  984. package/src/shared/prompt-sections.ts +0 -16
  985. package/src/shared/session-entries.ts +0 -108
  986. package/src/shared/session-identity.ts +0 -25
  987. package/src/shared/settings.ts +0 -196
  988. package/src/shared/status-format.ts +0 -232
  989. package/src/shared/stream-json.d.ts +0 -10
  990. package/src/shared/task-file-policy.ts +0 -35
  991. package/src/shared/temp-root.ts +0 -158
  992. package/src/shared/types/acceptance.ts +0 -149
  993. package/src/shared/types/async.ts +0 -247
  994. package/src/shared/types/config.ts +0 -139
  995. package/src/shared/types/details.ts +0 -104
  996. package/src/shared/types/history.ts +0 -217
  997. package/src/shared/types/inputs.ts +0 -4
  998. package/src/shared/types/intercom.ts +0 -57
  999. package/src/shared/types/launch.ts +0 -39
  1000. package/src/shared/types/messages.ts +0 -104
  1001. package/src/shared/types/nested.ts +0 -153
  1002. package/src/shared/types/owned-runs.ts +0 -148
  1003. package/src/shared/types/progress.ts +0 -106
  1004. package/src/shared/types/questions.ts +0 -103
  1005. package/src/shared/types/results.ts +0 -119
  1006. package/src/shared/types/state.ts +0 -56
  1007. package/src/shared/types/usage.ts +0 -36
  1008. package/src/shared/types/workflow.ts +0 -187
  1009. package/src/shared/ui-mode.ts +0 -5
  1010. package/src/shared/utils.ts +0 -148
  1011. package/src/slash/command-discovery.ts +0 -110
  1012. package/src/slash/command-input.ts +0 -232
  1013. package/src/slash/prompt-template-bridge.ts +0 -161
  1014. package/src/slash/prompt-template-contract.ts +0 -152
  1015. package/src/slash/prompt-template-results.ts +0 -189
  1016. package/src/slash/request-protocol.ts +0 -87
  1017. package/src/slash/result-delivery.ts +0 -312
  1018. package/src/slash/saved-chain.ts +0 -115
  1019. package/src/slash/slash-bridge.ts +0 -224
  1020. package/src/slash/slash-commands.ts +0 -195
  1021. package/src/slash/slash-live-state.ts +0 -350
  1022. package/src/tui/action-hints.ts +0 -155
  1023. package/src/tui/activity-lines.ts +0 -40
  1024. package/src/tui/agent-browser.ts +0 -354
  1025. package/src/tui/agent-controls.ts +0 -355
  1026. package/src/tui/agent-conversation.ts +0 -514
  1027. package/src/tui/agent-dock.ts +0 -250
  1028. package/src/tui/agent-history.ts +0 -68
  1029. package/src/tui/agent-model.ts +0 -78
  1030. package/src/tui/agent-picker.ts +0 -325
  1031. package/src/tui/agent-view.ts +0 -403
  1032. package/src/tui/compact-results.ts +0 -342
  1033. package/src/tui/conversation-details.ts +0 -206
  1034. package/src/tui/conversation-frame.ts +0 -184
  1035. package/src/tui/conversation-history.ts +0 -260
  1036. package/src/tui/conversation-menu.ts +0 -119
  1037. package/src/tui/conversation-notices.ts +0 -116
  1038. package/src/tui/conversation-selection.ts +0 -66
  1039. package/src/tui/conversation-viewport.ts +0 -169
  1040. package/src/tui/direction-message.ts +0 -35
  1041. package/src/tui/display.ts +0 -409
  1042. package/src/tui/editor-viewport.ts +0 -19
  1043. package/src/tui/expanded-content.ts +0 -134
  1044. package/src/tui/expanded-multi.ts +0 -264
  1045. package/src/tui/expanded-single.ts +0 -92
  1046. package/src/tui/history-cards.ts +0 -298
  1047. package/src/tui/history-display.ts +0 -334
  1048. package/src/tui/history-json.ts +0 -17
  1049. package/src/tui/history-metadata.ts +0 -177
  1050. package/src/tui/history-record.ts +0 -321
  1051. package/src/tui/history-text.ts +0 -34
  1052. package/src/tui/indexed-history.ts +0 -149
  1053. package/src/tui/nested-widget.ts +0 -192
  1054. package/src/tui/picker-page.ts +0 -80
  1055. package/src/tui/render.ts +0 -104
  1056. package/src/tui/result-facts.ts +0 -99
  1057. package/src/tui/task-observation.ts +0 -96
  1058. package/src/tui/task-store.ts +0 -432
  1059. package/src/tui/text-values.ts +0 -20
  1060. package/src/tui/view-connections.ts +0 -64
  1061. package/src/tui/view-model.ts +0 -181
  1062. package/src/tui/view-persistence.ts +0 -57
  1063. package/src/tui/view-ports.ts +0 -55
  1064. package/src/tui/view-session.ts +0 -42
  1065. package/src/tui/widget-details.ts +0 -220
  1066. package/src/tui/widget-status.ts +0 -331
  1067. package/src/tui/widget.ts +0 -208
  1068. package/src/tui/workflow-labels.ts +0 -340
  1069. package/src/tui/workflow-outcomes.ts +0 -150
@@ -1,29 +1,15 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- copyFileSync,
4
- existsSync,
5
- mkdirSync,
6
- mkdtempSync,
7
- readFileSync,
8
- rmSync,
9
- writeFileSync,
10
- } from "node:fs";
11
- import { tmpdir } from "node:os";
12
- import { dirname, join, resolve } from "node:path";
2
+ import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
3
+ import { join, resolve } from "node:path";
13
4
  import process from "node:process";
14
- import { setTimeout as delay } from "node:timers/promises";
15
- import { isChildTreeAlive } from "../src/shared/post-exit-stdio-guard.ts";
16
- import { SmokeProcesses, filesIn, processRef } from "./real-pi-processes.mjs";
17
- import { getBrokerSocketPath } from "../src/pi-intercom/broker/paths.ts";
5
+ import { runLiveSmoke } from "./real-pi-live.mjs";
6
+ import { SmokeProcesses } from "./real-pi-processes.mjs";
18
7
 
19
8
  const DEFAULT_TIMEOUT_MS = 120_000;
20
- const authAgentDir =
21
- process.env.PI_REAL_SMOKE_AUTH_AGENT_DIR ??
22
- (process.env.HOME ? join(process.env.HOME, ".pi", "agent") : undefined);
23
9
 
24
10
  function usage() {
25
11
  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`,
12
+ `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 intercom, list, and delegate prompts in a persistent RPC main\n that stays open until each launch receipt's completion notification resumes it\n --llm-full Also verify forked completion 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
13
  );
28
14
  }
29
15
 
@@ -77,37 +63,22 @@ function parseArgs(argv) {
77
63
  return options;
78
64
  }
79
65
 
80
- function copyLiveAuth(agentDir) {
81
- if (!authAgentDir || !existsSync(authAgentDir)) {
82
- return [];
83
- }
84
- mkdirSync(agentDir, { recursive: true });
85
- const copied = [];
86
- for (const filename of ["auth.json", "models.json"]) {
87
- const source = join(authAgentDir, filename);
88
- if (!existsSync(source)) {
89
- continue;
90
- }
91
- copyFileSync(source, join(agentDir, filename));
92
- copied.push(filename);
93
- }
94
- return copied;
95
- }
96
-
97
66
  function isolatedEnv(root, agentDir) {
98
67
  const home = join(root, "home");
99
68
  const env = { ...process.env };
100
69
  for (const key of Object.keys(env)) {
101
- if (key.startsWith("PI_SUBAGENT_")) {
70
+ if (key.startsWith("PI_SUBAGENT_") || key.startsWith("PI_INTERCOM_")) {
102
71
  delete env[key];
103
72
  }
104
73
  }
105
74
  return {
106
75
  ...env,
107
76
  HOME: home,
77
+ USERPROFILE: home,
108
78
  XDG_CONFIG_HOME: join(home, ".config"),
109
79
  XDG_CACHE_HOME: join(home, ".cache"),
110
80
  PI_CODING_AGENT_DIR: agentDir,
81
+ PI_INTERCOM_RUNTIME_DIR: join(root, "ic"),
111
82
  PI_SUBAGENT_TEMP_ROOT: join(root, "pi-subagents-runtime"),
112
83
  PI_OFFLINE: "1",
113
84
  PATH: process.env.PATH ?? "",
@@ -119,21 +90,40 @@ function runPi(label, args, options) {
119
90
  }
120
91
 
121
92
  async function verifyBundledResources(options) {
93
+ const marker = join(options.root, "resources.json");
94
+ const observer = join(options.root, "observe-resources.mjs");
95
+ writeFileSync(
96
+ observer,
97
+ `import { writeFileSync } from "node:fs"; export default function(pi) { pi.on("session_start", () => { writeFileSync(${JSON.stringify(marker)}, JSON.stringify(pi.getActiveTools())); }); }`,
98
+ );
122
99
  const output = await runPi(
123
100
  "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
- },
101
+ ["--mode", "rpc", "--no-session", "--offline", "--approve", "-e", observer],
102
+ { ...options, input: `${JSON.stringify({ id: "commands", type: "get_commands" })}\n` },
129
103
  );
130
- const response = commandResponse(output);
131
- const commands = registeredCommands(response);
132
- for (const name of ["intercom", "subagents-doctor", "skill:pi-intercom", "skill:pi-subagents"]) {
104
+ const commands = registeredCommands(commandResponse(output));
105
+ for (const name of ["skill:pi-intercom", "skill:pi-subagents"]) {
133
106
  if (!commands.includes(name)) {
134
107
  throw new Error(`bundled Pi resources did not register ${name}:\n${output}`);
135
108
  }
136
109
  }
110
+ const tools = JSON.parse(readFileSync(marker, "utf8"));
111
+ for (const name of ["delegate", "agent_runs", "intercom"]) {
112
+ if (!tools.includes(name)) {
113
+ throw new Error(`${name} must be eager on the single package entry`);
114
+ }
115
+ }
116
+ for (const name of [
117
+ "subagent",
118
+ "load_subagent",
119
+ "load_intercom",
120
+ "contact_supervisor",
121
+ "structured_output",
122
+ ]) {
123
+ if (tools.includes(name)) {
124
+ throw new Error(`retired package tool is still exposed: ${name}`);
125
+ }
126
+ }
137
127
  }
138
128
 
139
129
  function commandResponse(output) {
@@ -157,266 +147,9 @@ function registeredCommands(response) {
157
147
  : [];
158
148
  }
159
149
 
160
- async function runLivePrompt(label, prompt, options, expectedTool) {
161
- const args = [
162
- "--print",
163
- "--mode",
164
- "json",
165
- "--session-dir",
166
- join(options.root, "sessions"),
167
- "--approve",
168
- ];
169
- if (process.env.PI_REAL_SMOKE_PROVIDER) {
170
- args.push("--provider", process.env.PI_REAL_SMOKE_PROVIDER);
171
- }
172
- if (process.env.PI_REAL_SMOKE_MODEL) {
173
- args.push(
174
- "--model",
175
- process.env.PI_REAL_SMOKE_MODEL,
176
- "--models",
177
- process.env.PI_REAL_SMOKE_MODEL,
178
- );
179
- }
180
- args.push(prompt);
181
- const output = await runPi(label, args, options);
182
- writeFileSync(join(options.root, `${label.replace(/ /g, "-")}.jsonl`), output);
183
- const events = output.split("\n").flatMap((line) => {
184
- try {
185
- return [JSON.parse(line)];
186
- } catch {
187
- return [];
188
- }
189
- });
190
- if (
191
- !events.some(
192
- (event) => event.type === "tool_execution_start" && event.toolName === expectedTool,
193
- )
194
- ) {
195
- throw new Error(
196
- `${label} never invoked ${expectedTool}; a matching final sentence is not execution evidence.`,
197
- );
198
- }
199
- const errors = events.filter((event) => event.type === "tool_execution_end" && event.isError);
200
- if (errors.length) {
201
- throw new Error(
202
- `${label} had ${errors.length} failed tool call(s); inspect its saved wire log.`,
203
- );
204
- }
205
- if (!events.some((event) => event.type === "agent_settled")) {
206
- throw new Error(`${label} did not reach agent_settled.`);
207
- }
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");
214
- }
215
-
216
- function* savedAssistantModels(file) {
217
- for (const line of readFileSync(file, "utf8").split("\n")) {
218
- if (!line.trim()) {
219
- continue;
220
- }
221
- const entry = JSON.parse(line);
222
- if (entry.type === "message" && entry.message?.role === "assistant") {
223
- yield `${entry.message.provider}/${entry.message.model}`;
224
- }
225
- }
226
- }
227
-
228
- function auditSavedModels(dir, expectedModel) {
229
- const models = new Set();
230
- let responses = 0;
231
- for (const file of filesIn(dir)) {
232
- if (!file.endsWith(".jsonl")) {
233
- continue;
234
- }
235
- for (const model of savedAssistantModels(file)) {
236
- responses++;
237
- models.add(model);
238
- }
239
- }
240
- if (!responses) {
241
- throw new Error("No saved assistant messages found for model audit.");
242
- }
243
- if (expectedModel?.includes("/") && [...models].some((model) => model !== expectedModel)) {
244
- throw new Error(`Unexpected model in saved parent/child sessions: ${[...models].join(", ")}`);
245
- }
246
- console.log(
247
- `[real-pi-smoke] audited ${responses} saved parent/child responses: ${[...models].join(", ")}`,
248
- );
249
- }
250
-
251
- function requireOutput(label, output, pattern) {
252
- if (!pattern.test(output)) {
253
- throw new Error(`${label} did not include expected evidence ${pattern}.\nOutput:\n${output}`);
254
- }
255
- const compact = output.trim().split(/\r?\n/).slice(-8).join("\n");
256
- console.log(`[real-pi-smoke] ${label} output evidence:\n${compact}`);
257
- }
258
-
259
- async function waitForAsyncCompletion(runId, pattern, { env, timeoutMs, signal }) {
260
- const dir = join(env.PI_SUBAGENT_TEMP_ROOT, "async-subagent-runs", runId);
261
- const deadline = Date.now() + timeoutMs;
262
- let lastState = "missing";
263
- let lastOutput = "";
264
- while (Date.now() < deadline) {
265
- 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");
270
- }
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.
283
- // oxlint-disable-next-line no-await-in-loop
284
- await delay(500, undefined, { signal });
285
- }
286
- throw new Error(
287
- `async run ${runId} did not complete after ${timeoutMs}ms (last state: ${lastState}).\nOutput:\n${lastOutput}`,
288
- );
289
- }
290
-
291
- function asyncProcessComplete(status) {
292
- return status.state === "complete" && status.pid && !isChildTreeAlive(processRef(status.pid));
293
- }
294
-
295
- async function runLiveSmoke(options, runOptions, agentDir) {
296
- const { root } = runOptions;
297
- const copiedAuthFiles = copyLiveAuth(agentDir);
298
- if (copiedAuthFiles.length > 0) {
299
- console.log(
300
- `[real-pi-smoke] copied ${copiedAuthFiles.join(" and ")} into isolated Pi agent dir for live provider auth`,
301
- );
302
- }
303
- const childModelInstruction = process.env.PI_REAL_SMOKE_MODEL
304
- ? ` Pass model override '${process.env.PI_REAL_SMOKE_MODEL}' to every subagent run.`
305
- : "";
306
- await runBasicLiveSmoke(runOptions, childModelInstruction);
307
- if (options.llmFull) {
308
- await runFullLiveSmoke(runOptions, childModelInstruction);
309
- }
310
- auditSavedModels(join(root, "sessions"), process.env.PI_REAL_SMOKE_MODEL);
311
- }
312
-
313
- 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,
336
- "delegate",
337
- ),
338
- /real-pi-smoke foreground ok/,
339
- );
340
- const asyncOutput = await runLivePrompt(
341
- "real Pi async subagent prompt",
342
- asyncPrompt,
343
- runOptions,
344
- "delegate",
345
- );
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);
359
- }
360
-
361
- 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
- );
382
- if (
383
- !existsSync(outputPath) ||
384
- !/real-pi-smoke output ok/.test(readFileSync(outputPath, "utf8"))
385
- ) {
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
- );
398
- }
399
-
400
150
  function createProject(root) {
401
151
  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
- );
152
+ mkdirSync(projectRoot, { recursive: true });
420
153
  return projectRoot;
421
154
  }
422
155
 
@@ -431,7 +164,7 @@ async function main() {
431
164
  }
432
165
 
433
166
  const repoRoot = resolve(process.cwd());
434
- const root = mkdtempSync(join(tmpdir(), "pi-subagents-real-pi-smoke-"));
167
+ const root = mkdtempSync(join("/tmp", "pi-subagents-real-pi-smoke-"));
435
168
  const agentDir = join(root, "pi-agent");
436
169
  const projectRoot = createProject(root);
437
170
  const env = isolatedEnv(root, agentDir);
@@ -470,12 +203,12 @@ async function main() {
470
203
  );
471
204
  if (!options.llm) {
472
205
  console.log(
473
- "[real-pi-smoke] live model subagent prompts skipped; pass --llm to exercise foreground/async paths.",
206
+ "[real-pi-smoke] live model subagent prompts skipped; pass --llm to exercise launch receipts and completion notifications.",
474
207
  );
475
208
  }
476
209
  } finally {
477
210
  await runOptions.processes.stop();
478
- rmSync(dirname(getBrokerSocketPath(agentDir)), { recursive: true, force: true });
211
+ rmSync(env.PI_INTERCOM_RUNTIME_DIR, { recursive: true, force: true });
479
212
  for (const name of ["auth.json", "models.json"]) {
480
213
  rmSync(join(agentDir, name), { force: true });
481
214
  }
@@ -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,12 @@ 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(
95
+ join(process.platform === "android" ? tmpdir() : "/tmp", "pi-subagents-"),
96
+ );
95
97
  const env = sanitizedEnv();
96
98
  env.PI_SUBAGENT_TEMP_ROOT = tempRoot;
99
+ env.PI_INTERCOM_RUNTIME_DIR = join(tempRoot, "ic");
97
100
  env.HOME = tempRoot;
98
101
  delete env.PI_CODING_AGENT_DIR;
99
102
  let result;
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ import { spawnSync } from "node:child_process";
3
+ import { existsSync } from "node:fs";
4
+ import { join } from "node:path";
5
+
6
+ /**
7
+ * Android's npm compiler package is not published; use its installed native compiler.
8
+ * @param {string} [script]
9
+ * @returns {{ command: string, args: string[] }}
10
+ */
11
+ export function compilerInvocation(script) {
12
+ if (script === undefined && process.platform === "android") {
13
+ return { command: "tsgo", args: [] };
14
+ }
15
+ const compiler = script ?? join(process.cwd(), "node_modules", "typescript", "bin", "tsc");
16
+ if (!existsSync(compiler)) {
17
+ throw new Error(`typescript is not installed at ${compiler}; run npm install first.`);
18
+ }
19
+ return { command: process.execPath, args: [compiler] };
20
+ }
21
+
22
+ if (import.meta.main) {
23
+ const compiler = compilerInvocation();
24
+ const result = spawnSync(compiler.command, [...compiler.args, ...process.argv.slice(2)], {
25
+ stdio: "inherit",
26
+ });
27
+ if (result.error) {
28
+ console.error(
29
+ process.platform === "android"
30
+ ? `Cannot run native TypeScript: install an Android build of tsgo on PATH. ${result.error.message}`
31
+ : result.error.message,
32
+ );
33
+ }
34
+ process.exitCode = result.status ?? 1;
35
+ }
@@ -1,113 +1,60 @@
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 [local messaging](../../docs/intercom.md) for broker and
60
+ persistence contracts.