@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
@@ -4,24 +4,14 @@ import { TLSSocket } from "node:tls";
4
4
  import { randomUUID } from "node:crypto";
5
5
  import { getBrokerSocketPath } from "./broker/paths.js";
6
6
  import { loadConfig, sameListener } from "./bridge-config.js";
7
- import { ASK_TIMEOUT, Fault, fingerprint, log } from "./bridge-protocol.js";
7
+ import { Fault, fingerprint, log } from "./bridge-protocol.js";
8
8
  import { Session } from "./bridge-session.js";
9
9
  import { operationFor, routeFor } from "./bridge-routes.js";
10
10
  import { reply, replyFault } from "./bridge-http.js";
11
- import { sameIdentity } from "./bridge-launch.js";
12
- import { BridgeOperations } from "./bridge-operations.js";
13
- import { authenticatedCertificateChain } from "./native-control-auth.js";
14
11
  import { PersistentPresence } from "./bridge-presence.js";
15
12
  import { WakeDeliveries } from "./bridge-wake.js";
16
13
  import { spawnBrokerIfNeeded } from "./broker/spawn.js";
17
14
  const MAX_CONNECTIONS = 128;
18
- const LONG_ROUTES = new Set([
19
- "POST /v1/start",
20
- "POST /v1/spawn",
21
- "POST /v1/resume",
22
- "GET /v1/transcript",
23
- "POST /v1/transcript",
24
- ]);
25
15
  function validCertificateDates(starts, expires) {
26
16
  return (Number.isFinite(starts) &&
27
17
  Number.isFinite(expires) &&
@@ -33,7 +23,6 @@ class Bridge {
33
23
  configPath;
34
24
  sessions = new Map();
35
25
  losses = new Map();
36
- operations;
37
26
  sockets = new Set();
38
27
  connections = new Map();
39
28
  server;
@@ -44,7 +33,6 @@ class Bridge {
44
33
  constructor(config, configPath) {
45
34
  this.config = config;
46
35
  this.configPath = configPath;
47
- this.operations = new BridgeOperations(config.stateDir);
48
36
  this.deliveries = new WakeDeliveries(config.stateDir, (identity) => this.allowed(identity));
49
37
  if (config.stateDir !== undefined) {
50
38
  this.presence = new PersistentPresence({
@@ -118,8 +106,9 @@ class Bridge {
118
106
  allowed(identity) {
119
107
  const current = this.config.clients.get(identity.fingerprint256);
120
108
  return (!this.stopping &&
121
- sameIdentity(identity, current) &&
122
- JSON.stringify(identity.wake) === JSON.stringify(current?.wake));
109
+ current?.name === identity.name &&
110
+ current.cwd === identity.cwd &&
111
+ JSON.stringify(identity.wake) === JSON.stringify(current.wake));
123
112
  }
124
113
  lost(fp, count = 1) {
125
114
  if (count > 0 && this.config.clients.has(fp)) {
@@ -233,15 +222,11 @@ class Bridge {
233
222
  }
234
223
  this.config = next;
235
224
  this.revokeRemoved();
236
- this.operations.revoke(next.clients).catch(() => log("launch_cleanup", { result: "failed" }));
237
225
  log("allowlist_reloaded", { result: "accepted", clients: next.clients.size });
238
226
  }
239
227
  catch {
240
228
  this.config = { ...this.config, clients: new Map() };
241
229
  this.deliveries.reload();
242
- this.operations
243
- .revoke(this.config.clients)
244
- .catch(() => log("launch_cleanup", { result: "failed" }));
245
230
  for (const session of this.sessions.values()) {
246
231
  session.close(new Fault(503, "configuration_invalid", "Configuration reload failed; all identities denied."));
247
232
  }
@@ -295,7 +280,6 @@ class Bridge {
295
280
  await Promise.all([
296
281
  ...this.handlers,
297
282
  ...sessions.map((session) => session.settled()),
298
- this.operations.shutdown(),
299
283
  this.presence?.stop(),
300
284
  this.deliveries.stop(),
301
285
  ]);
@@ -320,7 +304,6 @@ class Bridge {
320
304
  return {
321
305
  identity,
322
306
  expires: connection.expires,
323
- certificate: authenticatedCertificateChain(socket),
324
307
  };
325
308
  }
326
309
  async handle(req, res) {
@@ -343,7 +326,7 @@ class Bridge {
343
326
  deadline = setTimeout(() => cancel(new Fault(504, "request_timeout", "HTTP operation deadline exceeded; delivery may be unknown.")), Math.max(1, ms - (Date.now() - started)));
344
327
  };
345
328
  try {
346
- const { identity, expires, certificate } = this.admission(req);
329
+ const { identity, expires } = this.admission(req);
347
330
  const route = routeFor(req);
348
331
  readOnlyInbox = route === "GET /v1/inbox";
349
332
  session = this.session(identity, expires);
@@ -351,20 +334,11 @@ class Bridge {
351
334
  const signal = controller.signal;
352
335
  req.once("aborted", abort);
353
336
  res.once("close", onClose);
354
- const duration = route === "POST /v1/ask" ? ASK_TIMEOUT + 15000 : 15000;
355
- setDeadline(LONG_ROUTES.has(route) ? 75000 : duration);
337
+ setDeadline(15000);
356
338
  const operation = await operationFor(req, route, signal);
357
- if (operation.route === "POST /v1/ask") {
358
- setDeadline(operation.timeoutMs + 15000);
359
- }
360
- else if (operation.route === "GET /v1/transcript") {
361
- setDeadline(75000);
362
- }
363
- const data = await this.operations.execute(operation, session, {
339
+ const data = await session.execute(operation, {
364
340
  signal,
365
341
  requestId,
366
- expires,
367
- certificate,
368
342
  onPeer: (id) => {
369
343
  peer = id;
370
344
  },
@@ -405,8 +379,11 @@ function main() {
405
379
  const path = resolve(args[1]);
406
380
  new Bridge(loadConfig(path), path).start();
407
381
  }
408
- catch {
409
- process.stderr.write("Bridge startup failed: check config schema, file ownership/mode 0600, absolute TLS/cwd paths, TLS credentials, stateDir (owned 0700 directory), and launch policy (0700 sessionDir, Pi packageRoot, extension paths).\n");
382
+ catch (error) {
383
+ if (error instanceof Fault) {
384
+ process.stderr.write(`${error.message}\n`);
385
+ }
386
+ process.stderr.write("Bridge startup failed: check config schema, file ownership/mode 0600, absolute TLS/cwd paths, TLS credentials, and stateDir (owned 0700 directory).\n");
410
387
  process.exitCode = 1;
411
388
  }
412
389
  }
@@ -1,25 +1,28 @@
1
1
  import net from "net";
2
- import { chmodSync, writeFileSync, unlinkSync, mkdirSync } from "fs";
2
+ import { chmodSync, writeFileSync, unlinkSync } from "fs";
3
3
  import { join } from "path";
4
4
  import { randomUUID } from "crypto";
5
- import { getPiAgentDir } from "../agent-dir.js";
6
- import { writeMessage, createMessageReader, validateIntercomMessageSize } from "./framing.js";
7
- import { prepareBrokerSocketPath } from "./paths.js";
5
+ import { writeMessage, validateIntercomMessageSize } from "./framing.js";
6
+ import { getBrokerRuntimeDir, prepareBrokerSocketPath } from "./paths.js";
8
7
  import { brokerPidRecord } from "./pid.js";
9
- import { compactTopicMessage, isSessionRegistration, normalizeMessage, normalizeSessionInfo, } from "../types.js";
8
+ import { assertBrokerCanStart } from "./spawn.js";
9
+ import { LastMessageRelay } from "./last.js";
10
+ import { canSeeSession, findSessions } from "./targets.js";
11
+ import { acceptBrokerConnection, registeredSessionInfo } from "./server-connection.js";
12
+ import { guardedDeliveryError } from "./guard.js";
13
+ import { compactTopicMessage, normalizeMessage, normalizeSessionInfo, } from "../types.js";
10
14
  import { errorMessage, isRecord } from "../../shared/unknown.js";
11
15
  import { messageSender, snapshotFrames, TopicSnapshot, publicationMessage, deliveryAcknowledgement, shouldReplaceDelivery, } from "./snapshots.js";
12
- const INTERCOM_DIR = join(getPiAgentDir(), "intercom");
13
- const PID_PATH = join(INTERCOM_DIR, "broker.pid");
16
+ const PID_PATH = join(getBrokerRuntimeDir(), "broker.pid");
14
17
  const REPLACE_DELIVERY_DELAY_MS = 1500;
15
18
  class IntercomBroker {
16
19
  sessions = new Map();
20
+ lastMessages = new LastMessageRelay(this.sessions);
17
21
  pendingReplaceDeliveries = new Map();
18
22
  server;
19
23
  shutdownTimer = null;
20
24
  socketPath;
21
25
  constructor() {
22
- mkdirSync(INTERCOM_DIR, { recursive: true });
23
26
  this.socketPath = prepareBrokerSocketPath();
24
27
  try {
25
28
  unlinkSync(this.socketPath);
@@ -45,23 +48,7 @@ class IntercomBroker {
45
48
  process.on("SIGINT", () => this.shutdown());
46
49
  }
47
50
  handleConnection(socket) {
48
- let sessionId = null;
49
- const reader = createMessageReader((msg) => {
50
- this.handleMessage(socket, msg, sessionId, (id) => {
51
- sessionId = id;
52
- });
53
- }, (error) => {
54
- socket.destroy(error);
55
- });
56
- socket.on("data", reader);
57
- socket.on("close", () => {
58
- if (sessionId !== null) {
59
- this.removeSession(sessionId);
60
- }
61
- });
62
- socket.on("error", (error) => {
63
- console.error("Socket error:", error);
64
- });
51
+ acceptBrokerConnection(socket, this.handleMessage.bind(this), this.removeSession.bind(this));
65
52
  }
66
53
  scheduleShutdownCheck() {
67
54
  if (this.shutdownTimer) {
@@ -106,6 +93,12 @@ class IntercomBroker {
106
93
  case "send":
107
94
  this.send(socket, msg, currentId);
108
95
  break;
96
+ case "last_request":
97
+ this.lastMessages.request(currentId, msg);
98
+ break;
99
+ case "last_response":
100
+ this.lastMessages.respond(currentId, msg);
101
+ break;
109
102
  case "presence":
110
103
  this.presence(msg, currentId);
111
104
  break;
@@ -114,14 +107,8 @@ class IntercomBroker {
114
107
  }
115
108
  }
116
109
  register(socket, msg, setId) {
117
- if (!isSessionRegistration(msg.session)) {
118
- throw new Error("Invalid register message");
119
- }
120
- const requestedId = typeof msg.requestedId === "string" && /^[a-zA-Z0-9_-]{8,80}$/.test(msg.requestedId)
121
- ? msg.requestedId
122
- : undefined;
123
- const id = requestedId !== undefined && !this.sessions.has(requestedId) ? requestedId : randomUUID();
124
- const info = { ...msg.session, id, lastSeen: msg.session.lastSeen ?? Date.now() };
110
+ const info = registeredSessionInfo(msg, this.sessions);
111
+ const id = info.id;
125
112
  snapshotFrames(randomUUID(), [info], true);
126
113
  const topicFrames = msg.topicFrames === true;
127
114
  this.sessions.set(id, {
@@ -129,6 +116,8 @@ class IntercomBroker {
129
116
  info: messageSender(info),
130
117
  topics: new TopicSnapshot(info),
131
118
  topicFrames,
119
+ lastMessages: msg.lastMessages === true,
120
+ receiptReads: msg.receiptReads === 1,
132
121
  });
133
122
  setId(id);
134
123
  if (this.shutdownTimer) {
@@ -138,13 +127,21 @@ class IntercomBroker {
138
127
  writeMessage(socket, {
139
128
  type: "registered",
140
129
  sessionId: id,
130
+ lastMessages: true,
131
+ receiptReads: 1,
132
+ ...(msg.guardedDelivery === 1 ? { guardedDelivery: 1 } : {}),
141
133
  ...(topicFrames ? { topicsSupported: true, topicFrames: true } : {}),
142
134
  });
143
135
  }
144
136
  removeSession(sessionId) {
137
+ const session = this.sessions.get(sessionId);
138
+ if (!session) {
139
+ return;
140
+ }
145
141
  this.sessions.delete(sessionId);
142
+ this.lastMessages.disconnected(sessionId);
146
143
  this.clearPendingReplaceDeliveries(sessionId);
147
- this.broadcast({ type: "session_left", sessionId }, sessionId);
144
+ this.broadcast({ type: "session_left", sessionId }, session.info);
148
145
  this.scheduleShutdownCheck();
149
146
  }
150
147
  planPublications(fromId, from, publication) {
@@ -154,7 +151,7 @@ class IntercomBroker {
154
151
  }
155
152
  for (const target of this.sessions.values()) {
156
153
  const subscription = target.topics.subscription(publication.topic);
157
- if (target.info.id === fromId || !subscription) {
154
+ if (target.info.id === fromId || !subscription || !canSeeSession(from, target.info)) {
158
155
  continue;
159
156
  }
160
157
  const message = publicationMessage(publication, subscription.awaitRelease === true);
@@ -188,7 +185,9 @@ class IntercomBroker {
188
185
  }
189
186
  const infos = prepared.restore
190
187
  ? []
191
- : [...this.sessions.values()].map((entry) => {
188
+ : [...this.sessions.values()]
189
+ .filter((entry) => canSeeSession(from, entry.info))
190
+ .map((entry) => {
192
191
  if (entry === session) {
193
192
  return nextInfo;
194
193
  }
@@ -235,9 +234,18 @@ class IntercomBroker {
235
234
  });
236
235
  return;
237
236
  }
238
- const targets = this.findSessions(msg.to);
237
+ const targets = findSessions(this.sessions, msg.to, currentId);
239
238
  const target = targets[0];
240
239
  if (targets.length === 1) {
240
+ const guardError = guardedDeliveryError(this.sessions, msg.to, message);
241
+ if (guardError !== null) {
242
+ writeMessage(socket, {
243
+ type: "delivery_failed",
244
+ messageId: message.id,
245
+ reason: guardError,
246
+ });
247
+ return;
248
+ }
241
249
  const fromSession = this.sessions.get(currentId);
242
250
  if (!fromSession) {
243
251
  writeMessage(socket, {
@@ -278,11 +286,15 @@ class IntercomBroker {
278
286
  "lastIntercomActivity",
279
287
  "subscriptions",
280
288
  "topics",
289
+ "applicationGuard",
281
290
  ]) {
282
291
  if (msg[key] !== undefined) {
283
292
  update[key] = msg[key];
284
293
  }
285
294
  }
295
+ if (msg.applicationGuard === null) {
296
+ delete update.applicationGuard;
297
+ }
286
298
  const nextInfo = normalizeSessionInfo(update);
287
299
  if (!nextInfo) {
288
300
  throw new Error("Invalid presence update");
@@ -295,15 +307,7 @@ class IntercomBroker {
295
307
  }
296
308
  sendToSession(fromId, toId, from, message) {
297
309
  const target = this.sessions.get(toId);
298
- if (!target) {
299
- return {
300
- id: message.id,
301
- accepted: false,
302
- delivered: false,
303
- reason: "Recipient disconnected before delivery",
304
- };
305
- }
306
- if (shouldReplaceDelivery(message, target.info)) {
310
+ if (target && shouldReplaceDelivery(message, target.info)) {
307
311
  return this.queueReplaceDelivery(fromId, toId, from, message);
308
312
  }
309
313
  const reason = this.deliverMessage(toId, from, message);
@@ -371,6 +375,10 @@ class IntercomBroker {
371
375
  })?.message ?? null);
372
376
  }
373
377
  deliverMessage(toId, from, message) {
378
+ const guardError = guardedDeliveryError(this.sessions, toId, message);
379
+ if (guardError !== null) {
380
+ return guardError;
381
+ }
374
382
  const target = this.sessions.get(toId);
375
383
  if (!target ||
376
384
  target.socket.destroyed ||
@@ -395,17 +403,9 @@ class IntercomBroker {
395
403
  return error instanceof Error ? error.message : errorMessage(error);
396
404
  }
397
405
  }
398
- findSessions(nameOrId) {
399
- const byId = this.sessions.get(nameOrId);
400
- if (byId) {
401
- return [byId];
402
- }
403
- const lowerName = nameOrId.toLowerCase();
404
- return Array.from(this.sessions.values()).filter((session) => session.info.name?.toLowerCase() === lowerName);
405
- }
406
- broadcast(msg, exclude) {
406
+ broadcast(msg, from) {
407
407
  for (const [id, session] of this.sessions) {
408
- if (id !== exclude) {
408
+ if (id !== from.id && canSeeSession(session.info, from)) {
409
409
  writeMessage(session.socket, msg);
410
410
  }
411
411
  }
@@ -432,4 +432,5 @@ class IntercomBroker {
432
432
  process.exit(0);
433
433
  }
434
434
  }
435
+ await assertBrokerCanStart();
435
436
  new IntercomBroker().start();
@@ -0,0 +1,13 @@
1
+ import type net from "node:net";
2
+ import { type UnknownRecord } from "../../shared/unknown.ts";
3
+ import type { LastMessageQuery, LastMessageResult, ReceiptQuery, ReceiptResult } from "../types.ts";
4
+ export declare class LastMessageRequests {
5
+ private readonly timeoutMs;
6
+ constructor(timeoutMs: number);
7
+ private readonly pending;
8
+ fail(error: Readonly<Error>): void;
9
+ receive(message: UnknownRecord): void;
10
+ last(socket: net.Socket, to: string, query: LastMessageQuery): Promise<LastMessageResult>;
11
+ receipt(socket: net.Socket, to: string, query: ReceiptQuery): Promise<ReceiptResult>;
12
+ private request;
13
+ }
@@ -0,0 +1,60 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { errorMessage } from "../../shared/unknown.js";
3
+ import { isNativeReadQuery, isNativeReadResult, isLastMessageResult, isReceiptResult, } from "./last.js";
4
+ import { writeMessage } from "./framing.js";
5
+ export class LastMessageRequests {
6
+ timeoutMs;
7
+ constructor(timeoutMs) {
8
+ this.timeoutMs = timeoutMs;
9
+ }
10
+ pending = new Map();
11
+ fail(error) {
12
+ for (const pending of this.pending.values()) {
13
+ clearTimeout(pending.timer);
14
+ pending.reject(error);
15
+ }
16
+ this.pending.clear();
17
+ }
18
+ receive(message) {
19
+ if (typeof message.requestId !== "string" || !isNativeReadResult(message.result)) {
20
+ throw new Error("Invalid last-message response");
21
+ }
22
+ const pending = this.pending.get(message.requestId);
23
+ if (!pending) {
24
+ return;
25
+ }
26
+ clearTimeout(pending.timer);
27
+ this.pending.delete(message.requestId);
28
+ pending.resolve(message.result);
29
+ }
30
+ async last(socket, to, query) {
31
+ const result = await this.request(socket, to, query);
32
+ return isLastMessageResult(result) ? result : { error: "Invalid last-message response" };
33
+ }
34
+ async receipt(socket, to, query) {
35
+ const result = await this.request(socket, to, query);
36
+ return isReceiptResult(result) ? result : { error: "Invalid receipt response" };
37
+ }
38
+ request(socket, to, query) {
39
+ if (!isNativeReadQuery(query)) {
40
+ return Promise.reject(new Error("Invalid last-message query"));
41
+ }
42
+ return new Promise((resolve, reject) => {
43
+ const requestId = randomUUID();
44
+ const timer = setTimeout(() => {
45
+ this.pending.delete(requestId);
46
+ reject(new Error("Last-message read timeout"));
47
+ }, this.timeoutMs);
48
+ timer.unref();
49
+ this.pending.set(requestId, { resolve, reject, timer });
50
+ try {
51
+ writeMessage(socket, { type: "last_request", requestId, to, query });
52
+ }
53
+ catch (error) {
54
+ clearTimeout(timer);
55
+ this.pending.delete(requestId);
56
+ reject(new Error(errorMessage(error)));
57
+ }
58
+ });
59
+ }
60
+ }
@@ -0,0 +1,60 @@
1
+ import { EventEmitter } from "events";
2
+ import { type SessionInfo, type TopicUpdate, type TopicChange, type SessionSnapshot, type SendResult, type LastMessageQuery, type LastMessageResult, type SendOptions, type ReceiptQuery, type ReceiptResult } from "../types.ts";
3
+ export type { SendResult } from "../types.ts";
4
+ export interface IntercomClientOptions {
5
+ /** Timeout (ms) for the broker to acknowledge message delivery. */
6
+ readonly sendTimeoutMs?: number;
7
+ /** Timeout (ms) for a session list response. */
8
+ readonly listTimeoutMs?: number;
9
+ }
10
+ export declare class IntercomClient extends EventEmitter {
11
+ private connection;
12
+ private _sessionId;
13
+ private _topicsSupported;
14
+ private lastMessagesSupported;
15
+ private receiptReadsSupported;
16
+ private guardedDeliverySupported;
17
+ private readonly lastRequests;
18
+ private readonly pendingSends;
19
+ private readonly pendingLists;
20
+ private connecting;
21
+ private disconnecting;
22
+ private readonly sendTimeoutMs;
23
+ private readonly listTimeoutMs;
24
+ constructor(options?: IntercomClientOptions);
25
+ private failPending;
26
+ get sessionId(): string | null;
27
+ get supportsTopics(): boolean;
28
+ get supportsGuardedDelivery(): boolean;
29
+ isConnected(): boolean;
30
+ private requireActiveSocket;
31
+ connect(session: Omit<SessionInfo, "id">, requestedId?: string): Promise<void>;
32
+ private restoreTopics;
33
+ private handleBrokerMessage;
34
+ private receiveRegistration;
35
+ private receiveLastRequest;
36
+ private receiveMessage;
37
+ private receiveDelivery;
38
+ private receiveSessions;
39
+ disconnect(): Promise<void>;
40
+ listSessions(): Promise<SessionInfo[]>;
41
+ last(to: string, query?: LastMessageQuery): Promise<LastMessageResult>;
42
+ receipt(to: string, query: ReceiptQuery): Promise<ReceiptResult>;
43
+ private readSocket;
44
+ respondLast(requestId: string, result: unknown): void;
45
+ updateTopics(change: TopicChange, onAccepted?: (snapshot: SessionSnapshot) => void): Promise<SessionSnapshot>;
46
+ private requestSessions;
47
+ private requireSendSocket;
48
+ send(to: string, options: SendOptions): Promise<SendResult>;
49
+ updatePresence(updates: {
50
+ readonly applicationGuard?: string | null;
51
+ readonly name?: string;
52
+ readonly status?: string;
53
+ readonly model?: string;
54
+ readonly pendingAsks?: number;
55
+ readonly acceptsAsks?: boolean;
56
+ readonly lastIntercomActivity?: number;
57
+ readonly subscriptions?: SessionInfo["subscriptions"];
58
+ readonly topics?: readonly TopicUpdate[];
59
+ }): void;
60
+ }
@@ -3,6 +3,8 @@ import { randomUUID } from "crypto";
3
3
  import { writeMessage } from "./framing.js";
4
4
  import { BrokerConnection, connectBrokerSocket } from "./connection.js";
5
5
  import { SnapshotReader } from "./snapshot-reader.js";
6
+ import { LastMessageRequests } from "./client-last.js";
7
+ import { isNativeReadQuery, isNativeReadResult } from "./last.js";
6
8
  import { errorMessage, isRecord, isUnknownArray, } from "../../shared/unknown.js";
7
9
  import { compactTopicMessage, normalizeMessage, normalizeSessionInfo, } from "../types.js";
8
10
  /** Default delivery-ack timeout for `send` (broker acknowledges quickly). */
@@ -28,6 +30,10 @@ export class IntercomClient extends EventEmitter {
28
30
  connection = null;
29
31
  _sessionId = null;
30
32
  _topicsSupported = false;
33
+ lastMessagesSupported = false;
34
+ receiptReadsSupported = false;
35
+ guardedDeliverySupported = false;
36
+ lastRequests;
31
37
  pendingSends = new Map();
32
38
  pendingLists = new Map();
33
39
  connecting = false;
@@ -38,8 +44,10 @@ export class IntercomClient extends EventEmitter {
38
44
  super();
39
45
  this.sendTimeoutMs = options.sendTimeoutMs ?? DEFAULT_SEND_TIMEOUT_MS;
40
46
  this.listTimeoutMs = options.listTimeoutMs ?? DEFAULT_LIST_TIMEOUT_MS;
47
+ this.lastRequests = new LastMessageRequests(this.listTimeoutMs);
41
48
  }
42
49
  failPending(error) {
50
+ this.lastRequests.fail(error);
43
51
  for (const pending of this.pendingSends.values()) {
44
52
  pending.reject(error);
45
53
  }
@@ -55,6 +63,9 @@ export class IntercomClient extends EventEmitter {
55
63
  get supportsTopics() {
56
64
  return this.isConnected() && this._topicsSupported;
57
65
  }
66
+ get supportsGuardedDelivery() {
67
+ return this.isConnected() && this.guardedDeliverySupported;
68
+ }
58
69
  isConnected() {
59
70
  return ((this._sessionId ?? "").length > 0 &&
60
71
  !this.disconnecting &&
@@ -93,6 +104,9 @@ export class IntercomClient extends EventEmitter {
93
104
  this.connection = null;
94
105
  this._sessionId = null;
95
106
  this._topicsSupported = false;
107
+ this.lastMessagesSupported = false;
108
+ this.receiptReadsSupported = false;
109
+ this.guardedDeliverySupported = false;
96
110
  this.disconnecting = false;
97
111
  this.failPending(error);
98
112
  if (established && !expected) {
@@ -108,6 +122,9 @@ export class IntercomClient extends EventEmitter {
108
122
  session: identity,
109
123
  requestedId,
110
124
  topicFrames: true,
125
+ lastMessages: true,
126
+ receiptReads: 1,
127
+ guardedDelivery: 1,
111
128
  });
112
129
  }
113
130
  catch (error) {
@@ -152,6 +169,12 @@ export class IntercomClient extends EventEmitter {
152
169
  case "sessions":
153
170
  this.receiveSessions(brokerMessage);
154
171
  break;
172
+ case "last_request":
173
+ this.receiveLastRequest(brokerMessage);
174
+ break;
175
+ case "last_response":
176
+ this.lastRequests.receive(brokerMessage);
177
+ break;
155
178
  case "message":
156
179
  this.receiveMessage(brokerMessage);
157
180
  break;
@@ -179,9 +202,21 @@ export class IntercomClient extends EventEmitter {
179
202
  }
180
203
  this._sessionId = msg.sessionId;
181
204
  this._topicsSupported = msg.topicsSupported === true && msg.topicFrames === true;
205
+ this.lastMessagesSupported = msg.lastMessages === true;
206
+ this.receiptReadsSupported = msg.receiptReads === 1;
207
+ this.guardedDeliverySupported = msg.guardedDelivery === 1;
182
208
  this.connection?.confirmRegistration();
183
209
  this.emit("_registered", { type: "registered", sessionId: msg.sessionId });
184
210
  }
211
+ receiveLastRequest(msg) {
212
+ const from = normalizeSessionInfo(msg.from);
213
+ if (typeof msg.requestId !== "string" || !from || !isNativeReadQuery(msg.query)) {
214
+ throw new Error("Invalid last-message request");
215
+ }
216
+ if (!this.emit("last_request", { requestId: msg.requestId, from, query: msg.query })) {
217
+ this.respondLast(msg.requestId, { error: "Recipient has no last-message reader." });
218
+ }
219
+ }
185
220
  receiveMessage(msg) {
186
221
  const message = normalizeMessage(msg.message);
187
222
  const from = normalizeSessionInfo(msg.from);
@@ -246,6 +281,28 @@ export class IntercomClient extends EventEmitter {
246
281
  listSessions() {
247
282
  return this.requestSessions().then((snapshot) => [...snapshot.sessions]);
248
283
  }
284
+ async last(to, query = {}) {
285
+ return await this.lastRequests.last(this.readSocket(query), to, query);
286
+ }
287
+ async receipt(to, query) {
288
+ return await this.lastRequests.receipt(this.readSocket(query), to, query);
289
+ }
290
+ readSocket(query) {
291
+ const socket = this.requireActiveSocket();
292
+ if (!this.lastMessagesSupported) {
293
+ throw new Error("This broker does not support last-message reads; reload after it exits.");
294
+ }
295
+ if ("messageId" in query && !this.receiptReadsSupported) {
296
+ throw new Error("publication_unavailable");
297
+ }
298
+ return socket;
299
+ }
300
+ respondLast(requestId, result) {
301
+ if (!isNativeReadResult(result)) {
302
+ throw new Error("Invalid last-message result");
303
+ }
304
+ writeMessage(this.requireActiveSocket(), { type: "last_response", requestId, result });
305
+ }
249
306
  updateTopics(change, onAccepted) {
250
307
  if (!this.supportsTopics) {
251
308
  return Promise.reject(new Error("This broker does not support topic snapshots."));
@@ -280,7 +337,7 @@ export class IntercomClient extends EventEmitter {
280
337
  const timeout = setTimeout(() => {
281
338
  if (this.pendingLists.has(requestId)) {
282
339
  this.pendingLists.delete(requestId);
283
- wrappedReject(new Error("List sessions timeout"));
340
+ wrappedReject(Object.assign(new Error("List sessions timeout"), { code: "list_timeout" }));
284
341
  }
285
342
  }, this.listTimeoutMs);
286
343
  timeout.unref();
@@ -304,23 +361,34 @@ export class IntercomClient extends EventEmitter {
304
361
  }
305
362
  });
306
363
  }
364
+ requireSendSocket(options) {
365
+ const socket = this.requireActiveSocket();
366
+ if (options.guard && !this.guardedDeliverySupported) {
367
+ throw new Error("This broker does not support guarded delivery; no message sent.");
368
+ }
369
+ return socket;
370
+ }
307
371
  send(to, options) {
308
372
  let socket;
309
373
  try {
310
- socket = this.requireActiveSocket();
374
+ socket = this.requireSendSocket(options);
311
375
  }
312
376
  catch (error) {
313
377
  return Promise.reject(toError(error));
314
378
  }
315
- const messageId = options.messageId ?? randomUUID();
379
+ const messageId = options.messageId ?? (options.guard ? "" : randomUUID());
380
+ if (this.pendingSends.has(messageId)) {
381
+ return Promise.reject(new Error("Message ID already has a pending send"));
382
+ }
316
383
  const message = {
317
384
  id: messageId,
318
385
  timestamp: Date.now(),
319
386
  replyTo: options.replyTo,
320
387
  expectsReply: options.expectsReply,
388
+ guard: options.guard,
389
+ replyHint: options.replyHint,
321
390
  ...(options.human ? { human: options.human } : {}),
322
391
  ...(options.topic ? { topic: options.topic } : {}),
323
- ...(options.control ? { control: options.control } : {}),
324
392
  delivery: messageDelivery(options),
325
393
  queueMode: options.queueMode,
326
394
  threadId: options.threadId,
@@ -330,6 +398,9 @@ export class IntercomClient extends EventEmitter {
330
398
  attachments: options.attachments,
331
399
  },
332
400
  };
401
+ if ((options.guard || options.replyHint) && normalizeMessage(message) === null) {
402
+ return Promise.reject(new Error("Invalid message format"));
403
+ }
333
404
  return new Promise((resolve, reject) => {
334
405
  const wrappedResolve = (result) => {
335
406
  clearTimeout(timeout);