pi-subagents 0.69.0 → 0.70.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 (1448) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/agents/reviewer.md +3 -2
  3. package/docs/agents.md +6 -2
  4. package/docs/configuration.md +1 -1
  5. package/docs/extension-api.md +1 -1
  6. package/docs/models.md +3 -1
  7. package/docs/observability.md +6 -0
  8. package/docs/watchdog.md +2 -0
  9. package/docs/workflows.md +6 -2
  10. package/index.d.ts +3 -0
  11. package/index.d.ts.map +1 -0
  12. package/index.js +10 -0
  13. package/index.js.map +1 -0
  14. package/package.json +89 -73
  15. package/runner-peer-loader.mjs +4 -7
  16. package/runner-peer-preload.mjs +5 -7
  17. package/skills/pi-subagents/references/prompting-and-roles.md +2 -2
  18. package/src/agents/advertised-agent-prompt.d.ts +8 -0
  19. package/src/agents/advertised-agent-prompt.d.ts.map +1 -0
  20. package/src/agents/advertised-agent-prompt.js +77 -0
  21. package/src/agents/advertised-agent-prompt.js.map +1 -0
  22. package/src/agents/agent-management.d.ts +27 -0
  23. package/src/agents/agent-management.d.ts.map +1 -0
  24. package/src/agents/agent-management.js +1528 -0
  25. package/src/agents/agent-management.js.map +1 -0
  26. package/src/agents/agent-memory.d.ts +49 -0
  27. package/src/agents/agent-memory.d.ts.map +1 -0
  28. package/src/agents/agent-memory.js +349 -0
  29. package/src/agents/agent-memory.js.map +1 -0
  30. package/src/agents/agent-refinements.d.ts +100 -0
  31. package/src/agents/agent-refinements.d.ts.map +1 -0
  32. package/src/agents/agent-refinements.js +569 -0
  33. package/src/agents/agent-refinements.js.map +1 -0
  34. package/src/agents/agent-scope.d.ts +3 -0
  35. package/src/agents/agent-scope.d.ts.map +1 -0
  36. package/src/agents/agent-scope.js +6 -0
  37. package/src/agents/agent-scope.js.map +1 -0
  38. package/src/agents/agent-selection.d.ts +3 -0
  39. package/src/agents/agent-selection.d.ts.map +1 -0
  40. package/src/agents/agent-selection.js +23 -0
  41. package/src/agents/agent-selection.js.map +1 -0
  42. package/src/agents/agent-serializer.d.ts +8 -0
  43. package/src/agents/agent-serializer.d.ts.map +1 -0
  44. package/src/agents/agent-serializer.js +200 -0
  45. package/src/agents/agent-serializer.js.map +1 -0
  46. package/src/agents/agents.d.ts +313 -0
  47. package/src/agents/agents.d.ts.map +1 -0
  48. package/src/agents/agents.js +2622 -0
  49. package/src/agents/agents.js.map +1 -0
  50. package/src/agents/builtin-names.d.ts +2 -0
  51. package/src/agents/builtin-names.d.ts.map +1 -0
  52. package/src/agents/builtin-names.js +17 -0
  53. package/src/agents/builtin-names.js.map +1 -0
  54. package/src/agents/chain-serializer.d.ts +7 -0
  55. package/src/agents/chain-serializer.d.ts.map +1 -0
  56. package/src/agents/chain-serializer.js +319 -0
  57. package/src/agents/chain-serializer.js.map +1 -0
  58. package/src/agents/frontmatter.d.ts +16 -0
  59. package/src/agents/frontmatter.d.ts.map +1 -0
  60. package/src/agents/frontmatter.js +142 -0
  61. package/src/agents/frontmatter.js.map +1 -0
  62. package/src/agents/identity.d.ts +8 -0
  63. package/src/agents/identity.d.ts.map +1 -0
  64. package/src/agents/identity.js +30 -0
  65. package/src/agents/identity.js.map +1 -0
  66. package/src/agents/proactive-skills.d.ts +35 -0
  67. package/src/agents/proactive-skills.d.ts.map +1 -0
  68. package/src/agents/proactive-skills.js +154 -0
  69. package/src/agents/proactive-skills.js.map +1 -0
  70. package/src/agents/runtime-agent-events.d.ts +27 -0
  71. package/src/agents/runtime-agent-events.d.ts.map +1 -0
  72. package/src/agents/runtime-agent-events.js +53 -0
  73. package/src/agents/runtime-agent-events.js.map +1 -0
  74. package/src/agents/runtime-agent-registry.d.ts +59 -0
  75. package/src/agents/runtime-agent-registry.d.ts.map +1 -0
  76. package/src/agents/runtime-agent-registry.js +390 -0
  77. package/src/agents/runtime-agent-registry.js.map +1 -0
  78. package/src/agents/skills.d.ts +33 -0
  79. package/src/agents/skills.d.ts.map +1 -0
  80. package/src/agents/skills.js +685 -0
  81. package/src/agents/skills.js.map +1 -0
  82. package/src/api/agents.d.ts +5 -0
  83. package/src/api/agents.d.ts.map +1 -0
  84. package/src/api/agents.js +3 -0
  85. package/src/api/agents.js.map +1 -0
  86. package/src/api/background-work.d.ts +39 -0
  87. package/src/api/background-work.d.ts.map +1 -0
  88. package/src/api/background-work.js +165 -0
  89. package/src/api/background-work.js.map +1 -0
  90. package/src/api/capability-ceiling.d.ts +2 -0
  91. package/src/api/capability-ceiling.d.ts.map +1 -0
  92. package/src/api/capability-ceiling.js +2 -0
  93. package/src/api/capability-ceiling.js.map +1 -0
  94. package/src/api/child-tool-plan.d.ts +2 -0
  95. package/src/api/child-tool-plan.d.ts.map +1 -0
  96. package/src/api/child-tool-plan.js +2 -0
  97. package/src/api/child-tool-plan.js.map +1 -0
  98. package/src/api/control-channel.d.ts +2 -0
  99. package/src/api/control-channel.d.ts.map +1 -0
  100. package/src/api/control-channel.js +2 -0
  101. package/src/api/control-channel.js.map +1 -0
  102. package/src/api/delegation.d.ts +99 -0
  103. package/src/api/delegation.d.ts.map +1 -0
  104. package/src/api/delegation.js +9 -0
  105. package/src/api/delegation.js.map +1 -0
  106. package/src/api/external-job-provider.d.ts +58 -0
  107. package/src/api/external-job-provider.d.ts.map +1 -0
  108. package/src/api/external-job-provider.js +140 -0
  109. package/src/api/external-job-provider.js.map +1 -0
  110. package/src/api/external-runs.d.ts +48 -0
  111. package/src/api/external-runs.d.ts.map +1 -0
  112. package/src/api/external-runs.js +245 -0
  113. package/src/api/external-runs.js.map +1 -0
  114. package/src/api/intercom-bridge.d.ts +2 -0
  115. package/src/api/intercom-bridge.d.ts.map +1 -0
  116. package/src/api/intercom-bridge.js +2 -0
  117. package/src/api/intercom-bridge.js.map +1 -0
  118. package/src/api/preflight.d.ts +173 -0
  119. package/src/api/preflight.d.ts.map +1 -0
  120. package/src/api/preflight.js +362 -0
  121. package/src/api/preflight.js.map +1 -0
  122. package/src/api/project-panes.d.ts +8 -0
  123. package/src/api/project-panes.d.ts.map +1 -0
  124. package/src/api/project-panes.js +8 -0
  125. package/src/api/project-panes.js.map +1 -0
  126. package/src/api/required-child-extensions.d.ts +2 -0
  127. package/src/api/required-child-extensions.d.ts.map +1 -0
  128. package/src/api/required-child-extensions.js +2 -0
  129. package/src/api/required-child-extensions.js.map +1 -0
  130. package/src/api/shared-types.d.ts +2 -0
  131. package/src/api/shared-types.d.ts.map +1 -0
  132. package/src/api/shared-types.js +2 -0
  133. package/src/api/shared-types.js.map +1 -0
  134. package/src/api/workflow-resources.d.ts +3 -0
  135. package/src/api/workflow-resources.d.ts.map +1 -0
  136. package/src/api/workflow-resources.js +2 -0
  137. package/src/api/workflow-resources.js.map +1 -0
  138. package/src/extension/config.d.ts +8 -0
  139. package/src/extension/config.d.ts.map +1 -0
  140. package/src/extension/config.js +245 -0
  141. package/src/extension/config.js.map +1 -0
  142. package/src/extension/control-notices.d.ts +19 -0
  143. package/src/extension/control-notices.d.ts.map +1 -0
  144. package/src/extension/control-notices.js +34 -0
  145. package/src/extension/control-notices.js.map +1 -0
  146. package/src/extension/doctor.d.ts +33 -0
  147. package/src/extension/doctor.d.ts.map +1 -0
  148. package/src/extension/doctor.js +231 -0
  149. package/src/extension/doctor.js.map +1 -0
  150. package/src/extension/fanout-child.d.ts +7 -0
  151. package/src/extension/fanout-child.d.ts.map +1 -0
  152. package/src/extension/fanout-child.js +261 -0
  153. package/src/extension/fanout-child.js.map +1 -0
  154. package/src/extension/herdr-pi-bridge.d.ts +17 -0
  155. package/src/extension/herdr-pi-bridge.d.ts.map +1 -0
  156. package/src/extension/herdr-pi-bridge.js +243 -0
  157. package/src/extension/herdr-pi-bridge.js.map +1 -0
  158. package/src/extension/index.d.ts +20 -0
  159. package/src/extension/index.d.ts.map +1 -0
  160. package/src/extension/index.js +1108 -0
  161. package/src/extension/index.js.map +1 -0
  162. package/src/extension/public-execution.d.ts +62 -0
  163. package/src/extension/public-execution.d.ts.map +1 -0
  164. package/src/extension/public-execution.js +174 -0
  165. package/src/extension/public-execution.js.map +1 -0
  166. package/src/extension/rpc.d.ts +83 -0
  167. package/src/extension/rpc.d.ts.map +1 -0
  168. package/src/extension/rpc.js +687 -0
  169. package/src/extension/rpc.js.map +1 -0
  170. package/src/extension/schemas.d.ts +252 -0
  171. package/src/extension/schemas.d.ts.map +1 -0
  172. package/src/extension/schemas.js +396 -0
  173. package/src/extension/schemas.js.map +1 -0
  174. package/src/extension/steering-notices.d.ts +15 -0
  175. package/src/extension/steering-notices.d.ts.map +1 -0
  176. package/src/extension/steering-notices.js +23 -0
  177. package/src/extension/steering-notices.js.map +1 -0
  178. package/src/extension/subagent-guide.d.ts +4 -0
  179. package/src/extension/subagent-guide.d.ts.map +1 -0
  180. package/src/extension/subagent-guide.js +35 -0
  181. package/src/extension/subagent-guide.js.map +1 -0
  182. package/src/extension/tool-description.d.ts +20 -0
  183. package/src/extension/tool-description.d.ts.map +1 -0
  184. package/src/extension/tool-description.js +160 -0
  185. package/src/extension/tool-description.js.map +1 -0
  186. package/src/extension/tool-result.d.ts +10 -0
  187. package/src/extension/tool-result.d.ts.map +1 -0
  188. package/src/extension/tool-result.js +17 -0
  189. package/src/extension/tool-result.js.map +1 -0
  190. package/src/inspectors/actions.d.ts +23 -0
  191. package/src/inspectors/actions.d.ts.map +1 -0
  192. package/src/inspectors/actions.js +155 -0
  193. package/src/inspectors/actions.js.map +1 -0
  194. package/src/inspectors/ghostty/actions.d.ts +12 -0
  195. package/src/inspectors/ghostty/actions.d.ts.map +1 -0
  196. package/src/inspectors/ghostty/actions.js +63 -0
  197. package/src/inspectors/ghostty/actions.js.map +1 -0
  198. package/src/inspectors/ghostty/plugin.d.ts +8 -0
  199. package/src/inspectors/ghostty/plugin.d.ts.map +1 -0
  200. package/src/inspectors/ghostty/plugin.js +24 -0
  201. package/src/inspectors/ghostty/plugin.js.map +1 -0
  202. package/src/inspectors/herdr/actions.d.ts +26 -0
  203. package/src/inspectors/herdr/actions.d.ts.map +1 -0
  204. package/src/inspectors/herdr/actions.js +134 -0
  205. package/src/inspectors/herdr/actions.js.map +1 -0
  206. package/src/inspectors/herdr/client.d.ts +42 -0
  207. package/src/inspectors/herdr/client.d.ts.map +1 -0
  208. package/src/inspectors/herdr/client.js +130 -0
  209. package/src/inspectors/herdr/client.js.map +1 -0
  210. package/src/inspectors/herdr/focus.d.ts +25 -0
  211. package/src/inspectors/herdr/focus.d.ts.map +1 -0
  212. package/src/inspectors/herdr/focus.js +50 -0
  213. package/src/inspectors/herdr/focus.js.map +1 -0
  214. package/src/inspectors/herdr/plugin.d.ts +7 -0
  215. package/src/inspectors/herdr/plugin.d.ts.map +1 -0
  216. package/src/inspectors/herdr/plugin.js +15 -0
  217. package/src/inspectors/herdr/plugin.js.map +1 -0
  218. package/src/inspectors/herdr/project-panes.d.ts +137 -0
  219. package/src/inspectors/herdr/project-panes.d.ts.map +1 -0
  220. package/src/inspectors/herdr/project-panes.js +608 -0
  221. package/src/inspectors/herdr/project-panes.js.map +1 -0
  222. package/src/inspectors/inspector-runner.d.ts +24 -0
  223. package/src/inspectors/inspector-runner.d.ts.map +1 -0
  224. package/src/inspectors/inspector-runner.js +162 -0
  225. package/src/inspectors/inspector-runner.js.map +1 -0
  226. package/src/inspectors/plugins.d.ts +4 -0
  227. package/src/inspectors/plugins.d.ts.map +1 -0
  228. package/src/inspectors/plugins.js +7 -0
  229. package/src/inspectors/plugins.js.map +1 -0
  230. package/src/inspectors/session-roots-codec.d.ts +16 -0
  231. package/src/inspectors/session-roots-codec.d.ts.map +1 -0
  232. package/src/inspectors/session-roots-codec.js +33 -0
  233. package/src/inspectors/session-roots-codec.js.map +1 -0
  234. package/src/inspectors/shell-command.d.ts +2 -0
  235. package/src/inspectors/shell-command.d.ts.map +1 -0
  236. package/src/inspectors/shell-command.js +17 -0
  237. package/src/inspectors/shell-command.js.map +1 -0
  238. package/src/inspectors/types.d.ts +49 -0
  239. package/src/inspectors/types.d.ts.map +1 -0
  240. package/src/inspectors/types.js +2 -0
  241. package/src/inspectors/types.js.map +1 -0
  242. package/src/integrations/herdr-status.d.ts +46 -0
  243. package/src/integrations/herdr-status.d.ts.map +1 -0
  244. package/src/integrations/herdr-status.js +371 -0
  245. package/src/integrations/herdr-status.js.map +1 -0
  246. package/src/integrations/pi-web-session-liveness.d.ts +20 -0
  247. package/src/integrations/pi-web-session-liveness.d.ts.map +1 -0
  248. package/src/integrations/pi-web-session-liveness.js +54 -0
  249. package/src/integrations/pi-web-session-liveness.js.map +1 -0
  250. package/src/intercom/intercom-bridge.d.ts +59 -0
  251. package/src/intercom/intercom-bridge.d.ts.map +1 -0
  252. package/src/intercom/intercom-bridge.js +192 -0
  253. package/src/intercom/intercom-bridge.js.map +1 -0
  254. package/src/intercom/native-supervisor-channel.d.ts +64 -0
  255. package/src/intercom/native-supervisor-channel.d.ts.map +1 -0
  256. package/src/intercom/native-supervisor-channel.js +894 -0
  257. package/src/intercom/native-supervisor-channel.js.map +1 -0
  258. package/src/intercom/result-intercom.d.ts +36 -0
  259. package/src/intercom/result-intercom.d.ts.map +1 -0
  260. package/src/intercom/result-intercom.js +372 -0
  261. package/src/intercom/result-intercom.js.map +1 -0
  262. package/src/intercom/supervisor-ui.d.ts +40 -0
  263. package/src/intercom/supervisor-ui.d.ts.map +1 -0
  264. package/src/intercom/supervisor-ui.js +202 -0
  265. package/src/intercom/supervisor-ui.js.map +1 -0
  266. package/src/missions/actions.d.ts +55 -0
  267. package/src/missions/actions.d.ts.map +1 -0
  268. package/src/missions/actions.js +396 -0
  269. package/src/missions/actions.js.map +1 -0
  270. package/src/missions/goal-driver.d.ts +16 -0
  271. package/src/missions/goal-driver.d.ts.map +1 -0
  272. package/src/missions/goal-driver.js +157 -0
  273. package/src/missions/goal-driver.js.map +1 -0
  274. package/src/missions/lifecycle.d.ts +40 -0
  275. package/src/missions/lifecycle.d.ts.map +1 -0
  276. package/src/missions/lifecycle.js +352 -0
  277. package/src/missions/lifecycle.js.map +1 -0
  278. package/src/missions/store.d.ts +22 -0
  279. package/src/missions/store.d.ts.map +1 -0
  280. package/src/missions/store.js +573 -0
  281. package/src/missions/store.js.map +1 -0
  282. package/src/missions/types.d.ts +168 -0
  283. package/src/missions/types.d.ts.map +1 -0
  284. package/src/missions/types.js +10 -0
  285. package/src/missions/types.js.map +1 -0
  286. package/src/missions/workflow-state.d.ts +15 -0
  287. package/src/missions/workflow-state.d.ts.map +1 -0
  288. package/src/missions/workflow-state.js +274 -0
  289. package/src/missions/workflow-state.js.map +1 -0
  290. package/src/policy/authority.d.ts +10 -0
  291. package/src/policy/authority.d.ts.map +1 -0
  292. package/src/policy/authority.js +42 -0
  293. package/src/policy/authority.js.map +1 -0
  294. package/src/profiles/profiles.d.ts +135 -0
  295. package/src/profiles/profiles.d.ts.map +1 -0
  296. package/src/profiles/profiles.js +520 -0
  297. package/src/profiles/profiles.js.map +1 -0
  298. package/src/runs/background/active-async-capacity.d.ts +100 -0
  299. package/src/runs/background/active-async-capacity.d.ts.map +1 -0
  300. package/src/runs/background/active-async-capacity.js +492 -0
  301. package/src/runs/background/active-async-capacity.js.map +1 -0
  302. package/src/runs/background/active-run-index.d.ts +13 -0
  303. package/src/runs/background/active-run-index.d.ts.map +1 -0
  304. package/src/runs/background/active-run-index.js +158 -0
  305. package/src/runs/background/active-run-index.js.map +1 -0
  306. package/src/runs/background/async-execution.d.ts +274 -0
  307. package/src/runs/background/async-execution.d.ts.map +1 -0
  308. package/src/runs/background/async-execution.js +1989 -0
  309. package/src/runs/background/async-execution.js.map +1 -0
  310. package/src/runs/background/async-job-tracker.d.ts +28 -0
  311. package/src/runs/background/async-job-tracker.d.ts.map +1 -0
  312. package/src/runs/background/async-job-tracker.js +876 -0
  313. package/src/runs/background/async-job-tracker.js.map +1 -0
  314. package/src/runs/background/async-resume.d.ts +59 -0
  315. package/src/runs/background/async-resume.d.ts.map +1 -0
  316. package/src/runs/background/async-resume.js +670 -0
  317. package/src/runs/background/async-resume.js.map +1 -0
  318. package/src/runs/background/async-retention.d.ts +45 -0
  319. package/src/runs/background/async-retention.d.ts.map +1 -0
  320. package/src/runs/background/async-retention.js +884 -0
  321. package/src/runs/background/async-retention.js.map +1 -0
  322. package/src/runs/background/async-status-snapshot.d.ts +10 -0
  323. package/src/runs/background/async-status-snapshot.d.ts.map +1 -0
  324. package/src/runs/background/async-status-snapshot.js +25 -0
  325. package/src/runs/background/async-status-snapshot.js.map +1 -0
  326. package/src/runs/background/async-status.d.ts +169 -0
  327. package/src/runs/background/async-status.d.ts.map +1 -0
  328. package/src/runs/background/async-status.js +673 -0
  329. package/src/runs/background/async-status.js.map +1 -0
  330. package/src/runs/background/auto-drain.d.ts +17 -0
  331. package/src/runs/background/auto-drain.d.ts.map +1 -0
  332. package/src/runs/background/auto-drain.js +73 -0
  333. package/src/runs/background/auto-drain.js.map +1 -0
  334. package/src/runs/background/binary-bootstrap.d.ts +9 -0
  335. package/src/runs/background/binary-bootstrap.d.ts.map +1 -0
  336. package/src/runs/background/binary-bootstrap.js +41 -0
  337. package/src/runs/background/binary-bootstrap.js.map +1 -0
  338. package/src/runs/background/chain-append.d.ts +35 -0
  339. package/src/runs/background/chain-append.d.ts.map +1 -0
  340. package/src/runs/background/chain-append.js +300 -0
  341. package/src/runs/background/chain-append.js.map +1 -0
  342. package/src/runs/background/chain-root-attachment.d.ts +49 -0
  343. package/src/runs/background/chain-root-attachment.d.ts.map +1 -0
  344. package/src/runs/background/chain-root-attachment.js +184 -0
  345. package/src/runs/background/chain-root-attachment.js.map +1 -0
  346. package/src/runs/background/completion-batcher.d.ts +52 -0
  347. package/src/runs/background/completion-batcher.d.ts.map +1 -0
  348. package/src/runs/background/completion-batcher.js +120 -0
  349. package/src/runs/background/completion-batcher.js.map +1 -0
  350. package/src/runs/background/completion-dedupe.d.ts +14 -0
  351. package/src/runs/background/completion-dedupe.d.ts.map +1 -0
  352. package/src/runs/background/completion-dedupe.js +49 -0
  353. package/src/runs/background/completion-dedupe.js.map +1 -0
  354. package/src/runs/background/completion-replay.d.ts +48 -0
  355. package/src/runs/background/completion-replay.d.ts.map +1 -0
  356. package/src/runs/background/completion-replay.js +267 -0
  357. package/src/runs/background/completion-replay.js.map +1 -0
  358. package/src/runs/background/control-channel.d.ts +156 -0
  359. package/src/runs/background/control-channel.d.ts.map +1 -0
  360. package/src/runs/background/control-channel.js +521 -0
  361. package/src/runs/background/control-channel.js.map +1 -0
  362. package/src/runs/background/fleet-view.d.ts +64 -0
  363. package/src/runs/background/fleet-view.d.ts.map +1 -0
  364. package/src/runs/background/fleet-view.js +648 -0
  365. package/src/runs/background/fleet-view.js.map +1 -0
  366. package/src/runs/background/index-segment.d.ts +16 -0
  367. package/src/runs/background/index-segment.d.ts.map +1 -0
  368. package/src/runs/background/index-segment.js +59 -0
  369. package/src/runs/background/index-segment.js.map +1 -0
  370. package/src/runs/background/inspect-rpc.d.ts +60 -0
  371. package/src/runs/background/inspect-rpc.d.ts.map +1 -0
  372. package/src/runs/background/inspect-rpc.js +406 -0
  373. package/src/runs/background/inspect-rpc.js.map +1 -0
  374. package/src/runs/background/notify.d.ts +162 -0
  375. package/src/runs/background/notify.d.ts.map +1 -0
  376. package/src/runs/background/notify.js +665 -0
  377. package/src/runs/background/notify.js.map +1 -0
  378. package/src/runs/background/owned-process-tree.d.ts +11 -0
  379. package/src/runs/background/owned-process-tree.d.ts.map +1 -0
  380. package/src/runs/background/owned-process-tree.js +117 -0
  381. package/src/runs/background/owned-process-tree.js.map +1 -0
  382. package/src/runs/background/parallel-groups.d.ts +4 -0
  383. package/src/runs/background/parallel-groups.d.ts.map +1 -0
  384. package/src/runs/background/parallel-groups.js +47 -0
  385. package/src/runs/background/parallel-groups.js.map +1 -0
  386. package/src/runs/background/process-terminal.d.ts +34 -0
  387. package/src/runs/background/process-terminal.d.ts.map +1 -0
  388. package/src/runs/background/process-terminal.js +305 -0
  389. package/src/runs/background/process-terminal.js.map +1 -0
  390. package/src/runs/background/result-delivery-ownership.d.ts +11 -0
  391. package/src/runs/background/result-delivery-ownership.d.ts.map +1 -0
  392. package/src/runs/background/result-delivery-ownership.js +37 -0
  393. package/src/runs/background/result-delivery-ownership.js.map +1 -0
  394. package/src/runs/background/result-files.d.ts +33 -0
  395. package/src/runs/background/result-files.d.ts.map +1 -0
  396. package/src/runs/background/result-files.js +528 -0
  397. package/src/runs/background/result-files.js.map +1 -0
  398. package/src/runs/background/result-watcher.d.ts +87 -0
  399. package/src/runs/background/result-watcher.d.ts.map +1 -0
  400. package/src/runs/background/result-watcher.js +764 -0
  401. package/src/runs/background/result-watcher.js.map +1 -0
  402. package/src/runs/background/resume-guidance.d.ts +5 -0
  403. package/src/runs/background/resume-guidance.d.ts.map +1 -0
  404. package/src/runs/background/resume-guidance.js +57 -0
  405. package/src/runs/background/resume-guidance.js.map +1 -0
  406. package/src/runs/background/retained-children.d.ts +25 -0
  407. package/src/runs/background/retained-children.d.ts.map +1 -0
  408. package/src/runs/background/retained-children.js +128 -0
  409. package/src/runs/background/retained-children.js.map +1 -0
  410. package/src/runs/background/retained-nested-route-tracker.d.ts +13 -0
  411. package/src/runs/background/retained-nested-route-tracker.d.ts.map +1 -0
  412. package/src/runs/background/retained-nested-route-tracker.js +91 -0
  413. package/src/runs/background/retained-nested-route-tracker.js.map +1 -0
  414. package/src/runs/background/run-child-session.d.ts +123 -0
  415. package/src/runs/background/run-child-session.d.ts.map +1 -0
  416. package/src/runs/background/run-child-session.js +602 -0
  417. package/src/runs/background/run-child-session.js.map +1 -0
  418. package/src/runs/background/run-id-query.d.ts +4 -0
  419. package/src/runs/background/run-id-query.d.ts.map +1 -0
  420. package/src/runs/background/run-id-query.js +7 -0
  421. package/src/runs/background/run-id-query.js.map +1 -0
  422. package/src/runs/background/run-id-resolver.d.ts +23 -0
  423. package/src/runs/background/run-id-resolver.d.ts.map +1 -0
  424. package/src/runs/background/run-id-resolver.js +170 -0
  425. package/src/runs/background/run-id-resolver.js.map +1 -0
  426. package/src/runs/background/run-status.d.ts +26 -0
  427. package/src/runs/background/run-status.d.ts.map +1 -0
  428. package/src/runs/background/run-status.js +826 -0
  429. package/src/runs/background/run-status.js.map +1 -0
  430. package/src/runs/background/runner-aliases.d.ts +17 -0
  431. package/src/runs/background/runner-aliases.d.ts.map +1 -0
  432. package/src/runs/background/runner-aliases.js +141 -0
  433. package/src/runs/background/runner-aliases.js.map +1 -0
  434. package/src/runs/background/runner-child-launch.d.ts +24 -0
  435. package/src/runs/background/runner-child-launch.d.ts.map +1 -0
  436. package/src/runs/background/runner-child-launch.js +68 -0
  437. package/src/runs/background/runner-child-launch.js.map +1 -0
  438. package/src/runs/background/runner-child-sessions.d.ts +7 -0
  439. package/src/runs/background/runner-child-sessions.d.ts.map +1 -0
  440. package/src/runs/background/runner-child-sessions.js +35 -0
  441. package/src/runs/background/runner-child-sessions.js.map +1 -0
  442. package/src/runs/background/runner-http-dispatcher.d.ts +43 -0
  443. package/src/runs/background/runner-http-dispatcher.d.ts.map +1 -0
  444. package/src/runs/background/runner-http-dispatcher.js +114 -0
  445. package/src/runs/background/runner-http-dispatcher.js.map +1 -0
  446. package/src/runs/background/scheduled-runs.d.ts +116 -0
  447. package/src/runs/background/scheduled-runs.d.ts.map +1 -0
  448. package/src/runs/background/scheduled-runs.js +1024 -0
  449. package/src/runs/background/scheduled-runs.js.map +1 -0
  450. package/src/runs/background/stale-run-reconciler.d.ts +37 -0
  451. package/src/runs/background/stale-run-reconciler.d.ts.map +1 -0
  452. package/src/runs/background/stale-run-reconciler.js +393 -0
  453. package/src/runs/background/stale-run-reconciler.js.map +1 -0
  454. package/src/runs/background/steering.d.ts +52 -0
  455. package/src/runs/background/steering.d.ts.map +1 -0
  456. package/src/runs/background/steering.js +247 -0
  457. package/src/runs/background/steering.js.map +1 -0
  458. package/src/runs/background/subagent-runner.d.ts +201 -0
  459. package/src/runs/background/subagent-runner.d.ts.map +1 -0
  460. package/src/runs/background/subagent-runner.js +5134 -0
  461. package/src/runs/background/subagent-runner.js.map +1 -0
  462. package/src/runs/background/subagent-wait.d.ts +122 -0
  463. package/src/runs/background/subagent-wait.d.ts.map +1 -0
  464. package/src/runs/background/subagent-wait.js +735 -0
  465. package/src/runs/background/subagent-wait.js.map +1 -0
  466. package/src/runs/background/terminal-run-index.d.ts +8 -0
  467. package/src/runs/background/terminal-run-index.d.ts.map +1 -0
  468. package/src/runs/background/terminal-run-index.js +123 -0
  469. package/src/runs/background/terminal-run-index.js.map +1 -0
  470. package/src/runs/background/top-level-async.d.ts +8 -0
  471. package/src/runs/background/top-level-async.d.ts.map +1 -0
  472. package/src/runs/background/top-level-async.js +6 -0
  473. package/src/runs/background/top-level-async.js.map +1 -0
  474. package/src/runs/background/wait-completions.d.ts +29 -0
  475. package/src/runs/background/wait-completions.d.ts.map +1 -0
  476. package/src/runs/background/wait-completions.js +264 -0
  477. package/src/runs/background/wait-completions.js.map +1 -0
  478. package/src/runs/background/wait-config.d.ts +9 -0
  479. package/src/runs/background/wait-config.d.ts.map +1 -0
  480. package/src/runs/background/wait-config.js +47 -0
  481. package/src/runs/background/wait-config.js.map +1 -0
  482. package/src/runs/background/wait-subscriptions.d.ts +27 -0
  483. package/src/runs/background/wait-subscriptions.d.ts.map +1 -0
  484. package/src/runs/background/wait-subscriptions.js +337 -0
  485. package/src/runs/background/wait-subscriptions.js.map +1 -0
  486. package/src/runs/background/wait-tool.d.ts +7 -0
  487. package/src/runs/background/wait-tool.d.ts.map +1 -0
  488. package/src/runs/background/wait-tool.js +36 -0
  489. package/src/runs/background/wait-tool.js.map +1 -0
  490. package/src/runs/foreground/async-dismiss-action.d.ts +7 -0
  491. package/src/runs/foreground/async-dismiss-action.d.ts.map +1 -0
  492. package/src/runs/foreground/async-dismiss-action.js +82 -0
  493. package/src/runs/foreground/async-dismiss-action.js.map +1 -0
  494. package/src/runs/foreground/async-steering-action.d.ts +32 -0
  495. package/src/runs/foreground/async-steering-action.d.ts.map +1 -0
  496. package/src/runs/foreground/async-steering-action.js +270 -0
  497. package/src/runs/foreground/async-steering-action.js.map +1 -0
  498. package/src/runs/foreground/async-stop-action.d.ts +7 -0
  499. package/src/runs/foreground/async-stop-action.d.ts.map +1 -0
  500. package/src/runs/foreground/async-stop-action.js +171 -0
  501. package/src/runs/foreground/async-stop-action.js.map +1 -0
  502. package/src/runs/foreground/execution.d.ts +11 -0
  503. package/src/runs/foreground/execution.d.ts.map +1 -0
  504. package/src/runs/foreground/execution.js +2186 -0
  505. package/src/runs/foreground/execution.js.map +1 -0
  506. package/src/runs/foreground/foreground-control.d.ts +25 -0
  507. package/src/runs/foreground/foreground-control.d.ts.map +1 -0
  508. package/src/runs/foreground/foreground-control.js +139 -0
  509. package/src/runs/foreground/foreground-control.js.map +1 -0
  510. package/src/runs/foreground/foreground-history.d.ts +12 -0
  511. package/src/runs/foreground/foreground-history.d.ts.map +1 -0
  512. package/src/runs/foreground/foreground-history.js +165 -0
  513. package/src/runs/foreground/foreground-history.js.map +1 -0
  514. package/src/runs/foreground/prompt-audit.d.ts +33 -0
  515. package/src/runs/foreground/prompt-audit.d.ts.map +1 -0
  516. package/src/runs/foreground/prompt-audit.js +143 -0
  517. package/src/runs/foreground/prompt-audit.js.map +1 -0
  518. package/src/runs/foreground/subagent-executor.d.ts +296 -0
  519. package/src/runs/foreground/subagent-executor.d.ts.map +1 -0
  520. package/src/runs/foreground/subagent-executor.js +7047 -0
  521. package/src/runs/foreground/subagent-executor.js.map +1 -0
  522. package/src/runs/foreground/workflow-detach-reconcile.d.ts +16 -0
  523. package/src/runs/foreground/workflow-detach-reconcile.d.ts.map +1 -0
  524. package/src/runs/foreground/workflow-detach-reconcile.js +284 -0
  525. package/src/runs/foreground/workflow-detach-reconcile.js.map +1 -0
  526. package/src/runs/foreground/workflow-foreground-steering.d.ts +44 -0
  527. package/src/runs/foreground/workflow-foreground-steering.d.ts.map +1 -0
  528. package/src/runs/foreground/workflow-foreground-steering.js +149 -0
  529. package/src/runs/foreground/workflow-foreground-steering.js.map +1 -0
  530. package/src/runs/shared/abort-recovery.d.ts +27 -0
  531. package/src/runs/shared/abort-recovery.d.ts.map +1 -0
  532. package/src/runs/shared/abort-recovery.js +109 -0
  533. package/src/runs/shared/abort-recovery.js.map +1 -0
  534. package/src/runs/shared/acceptance.d.ts +145 -0
  535. package/src/runs/shared/acceptance.d.ts.map +1 -0
  536. package/src/runs/shared/acceptance.js +1650 -0
  537. package/src/runs/shared/acceptance.js.map +1 -0
  538. package/src/runs/shared/agent-contract.d.ts +6 -0
  539. package/src/runs/shared/agent-contract.d.ts.map +1 -0
  540. package/src/runs/shared/agent-contract.js +36 -0
  541. package/src/runs/shared/agent-contract.js.map +1 -0
  542. package/src/runs/shared/async-status-projection.d.ts +94 -0
  543. package/src/runs/shared/async-status-projection.d.ts.map +1 -0
  544. package/src/runs/shared/async-status-projection.js +542 -0
  545. package/src/runs/shared/async-status-projection.js.map +1 -0
  546. package/src/runs/shared/background-process-options.d.ts +5 -0
  547. package/src/runs/shared/background-process-options.d.ts.map +1 -0
  548. package/src/runs/shared/background-process-options.js +7 -0
  549. package/src/runs/shared/background-process-options.js.map +1 -0
  550. package/src/runs/shared/capability-ceiling.d.ts +58 -0
  551. package/src/runs/shared/capability-ceiling.d.ts.map +1 -0
  552. package/src/runs/shared/capability-ceiling.js +179 -0
  553. package/src/runs/shared/capability-ceiling.js.map +1 -0
  554. package/src/runs/shared/chain-outputs.d.ts +19 -0
  555. package/src/runs/shared/chain-outputs.d.ts.map +1 -0
  556. package/src/runs/shared/chain-outputs.js +105 -0
  557. package/src/runs/shared/chain-outputs.js.map +1 -0
  558. package/src/runs/shared/child-hooks.d.ts +34 -0
  559. package/src/runs/shared/child-hooks.d.ts.map +1 -0
  560. package/src/runs/shared/child-hooks.js +188 -0
  561. package/src/runs/shared/child-hooks.js.map +1 -0
  562. package/src/runs/shared/child-identity.d.ts +24 -0
  563. package/src/runs/shared/child-identity.d.ts.map +1 -0
  564. package/src/runs/shared/child-identity.js +41 -0
  565. package/src/runs/shared/child-identity.js.map +1 -0
  566. package/src/runs/shared/child-launch-plan.d.ts +71 -0
  567. package/src/runs/shared/child-launch-plan.d.ts.map +1 -0
  568. package/src/runs/shared/child-launch-plan.js +89 -0
  569. package/src/runs/shared/child-launch-plan.js.map +1 -0
  570. package/src/runs/shared/child-launch.d.ts +114 -0
  571. package/src/runs/shared/child-launch.d.ts.map +1 -0
  572. package/src/runs/shared/child-launch.js +231 -0
  573. package/src/runs/shared/child-launch.js.map +1 -0
  574. package/src/runs/shared/child-lifecycle.d.ts +14 -0
  575. package/src/runs/shared/child-lifecycle.d.ts.map +1 -0
  576. package/src/runs/shared/child-lifecycle.js +23 -0
  577. package/src/runs/shared/child-lifecycle.js.map +1 -0
  578. package/src/runs/shared/child-runtime-config.d.ts +102 -0
  579. package/src/runs/shared/child-runtime-config.d.ts.map +1 -0
  580. package/src/runs/shared/child-runtime-config.js +39 -0
  581. package/src/runs/shared/child-runtime-config.js.map +1 -0
  582. package/src/runs/shared/child-session.d.ts +155 -0
  583. package/src/runs/shared/child-session.d.ts.map +1 -0
  584. package/src/runs/shared/child-session.js +347 -0
  585. package/src/runs/shared/child-session.js.map +1 -0
  586. package/src/runs/shared/child-tool-plan.d.ts +73 -0
  587. package/src/runs/shared/child-tool-plan.d.ts.map +1 -0
  588. package/src/runs/shared/child-tool-plan.js +380 -0
  589. package/src/runs/shared/child-tool-plan.js.map +1 -0
  590. package/src/runs/shared/claude-code-adapter.d.ts +25 -0
  591. package/src/runs/shared/claude-code-adapter.d.ts.map +1 -0
  592. package/src/runs/shared/claude-code-adapter.js +120 -0
  593. package/src/runs/shared/claude-code-adapter.js.map +1 -0
  594. package/src/runs/shared/codex-exec-adapter.d.ts +26 -0
  595. package/src/runs/shared/codex-exec-adapter.d.ts.map +1 -0
  596. package/src/runs/shared/codex-exec-adapter.js +128 -0
  597. package/src/runs/shared/codex-exec-adapter.js.map +1 -0
  598. package/src/runs/shared/completion-evidence.d.ts +31 -0
  599. package/src/runs/shared/completion-evidence.d.ts.map +1 -0
  600. package/src/runs/shared/completion-evidence.js +54 -0
  601. package/src/runs/shared/completion-evidence.js.map +1 -0
  602. package/src/runs/shared/completion-guard.d.ts +35 -0
  603. package/src/runs/shared/completion-guard.d.ts.map +1 -0
  604. package/src/runs/shared/completion-guard.js +214 -0
  605. package/src/runs/shared/completion-guard.js.map +1 -0
  606. package/src/runs/shared/context-mode.d.ts +13 -0
  607. package/src/runs/shared/context-mode.d.ts.map +1 -0
  608. package/src/runs/shared/context-mode.js +39 -0
  609. package/src/runs/shared/context-mode.js.map +1 -0
  610. package/src/runs/shared/cursor-agent-adapter.d.ts +27 -0
  611. package/src/runs/shared/cursor-agent-adapter.d.ts.map +1 -0
  612. package/src/runs/shared/cursor-agent-adapter.js +100 -0
  613. package/src/runs/shared/cursor-agent-adapter.js.map +1 -0
  614. package/src/runs/shared/dynamic-fanout.d.ts +50 -0
  615. package/src/runs/shared/dynamic-fanout.d.ts.map +1 -0
  616. package/src/runs/shared/dynamic-fanout.js +274 -0
  617. package/src/runs/shared/dynamic-fanout.js.map +1 -0
  618. package/src/runs/shared/effective-system-prompt.d.ts +18 -0
  619. package/src/runs/shared/effective-system-prompt.d.ts.map +1 -0
  620. package/src/runs/shared/effective-system-prompt.js +23 -0
  621. package/src/runs/shared/effective-system-prompt.js.map +1 -0
  622. package/src/runs/shared/extension-bindings.d.ts +17 -0
  623. package/src/runs/shared/extension-bindings.d.ts.map +1 -0
  624. package/src/runs/shared/extension-bindings.js +83 -0
  625. package/src/runs/shared/extension-bindings.js.map +1 -0
  626. package/src/runs/shared/external-cli-contract.d.ts +30 -0
  627. package/src/runs/shared/external-cli-contract.d.ts.map +1 -0
  628. package/src/runs/shared/external-cli-contract.js +146 -0
  629. package/src/runs/shared/external-cli-contract.js.map +1 -0
  630. package/src/runs/shared/external-cli-preflight.d.ts +32 -0
  631. package/src/runs/shared/external-cli-preflight.d.ts.map +1 -0
  632. package/src/runs/shared/external-cli-preflight.js +116 -0
  633. package/src/runs/shared/external-cli-preflight.js.map +1 -0
  634. package/src/runs/shared/external-cli-runner.d.ts +66 -0
  635. package/src/runs/shared/external-cli-runner.d.ts.map +1 -0
  636. package/src/runs/shared/external-cli-runner.js +421 -0
  637. package/src/runs/shared/external-cli-runner.js.map +1 -0
  638. package/src/runs/shared/external-job-bridge.d.ts +18 -0
  639. package/src/runs/shared/external-job-bridge.d.ts.map +1 -0
  640. package/src/runs/shared/external-job-bridge.js +424 -0
  641. package/src/runs/shared/external-job-bridge.js.map +1 -0
  642. package/src/runs/shared/external-job-runner.d.ts +45 -0
  643. package/src/runs/shared/external-job-runner.d.ts.map +1 -0
  644. package/src/runs/shared/external-job-runner.js +353 -0
  645. package/src/runs/shared/external-job-runner.js.map +1 -0
  646. package/src/runs/shared/fast-mode-extension.d.ts +4 -0
  647. package/src/runs/shared/fast-mode-extension.d.ts.map +1 -0
  648. package/src/runs/shared/fast-mode-extension.js +9 -0
  649. package/src/runs/shared/fast-mode-extension.js.map +1 -0
  650. package/src/runs/shared/herdr-connection.d.ts +71 -0
  651. package/src/runs/shared/herdr-connection.d.ts.map +1 -0
  652. package/src/runs/shared/herdr-connection.js +258 -0
  653. package/src/runs/shared/herdr-connection.js.map +1 -0
  654. package/src/runs/shared/herdr-external-adapters.d.ts +148 -0
  655. package/src/runs/shared/herdr-external-adapters.d.ts.map +1 -0
  656. package/src/runs/shared/herdr-external-adapters.js +405 -0
  657. package/src/runs/shared/herdr-external-adapters.js.map +1 -0
  658. package/src/runs/shared/herdr-machine.d.ts +48 -0
  659. package/src/runs/shared/herdr-machine.d.ts.map +1 -0
  660. package/src/runs/shared/herdr-machine.js +247 -0
  661. package/src/runs/shared/herdr-machine.js.map +1 -0
  662. package/src/runs/shared/herdr-pi-protocol.d.ts +22 -0
  663. package/src/runs/shared/herdr-pi-protocol.d.ts.map +1 -0
  664. package/src/runs/shared/herdr-pi-protocol.js +58 -0
  665. package/src/runs/shared/herdr-pi-protocol.js.map +1 -0
  666. package/src/runs/shared/herdr-placed-run.d.ts +267 -0
  667. package/src/runs/shared/herdr-placed-run.d.ts.map +1 -0
  668. package/src/runs/shared/herdr-placed-run.js +716 -0
  669. package/src/runs/shared/herdr-placed-run.js.map +1 -0
  670. package/src/runs/shared/host-step-status.d.ts +34 -0
  671. package/src/runs/shared/host-step-status.d.ts.map +1 -0
  672. package/src/runs/shared/host-step-status.js +245 -0
  673. package/src/runs/shared/host-step-status.js.map +1 -0
  674. package/src/runs/shared/lane-metadata.d.ts +24 -0
  675. package/src/runs/shared/lane-metadata.d.ts.map +1 -0
  676. package/src/runs/shared/lane-metadata.js +127 -0
  677. package/src/runs/shared/lane-metadata.js.map +1 -0
  678. package/src/runs/shared/launch-cwd.d.ts +2 -0
  679. package/src/runs/shared/launch-cwd.d.ts.map +1 -0
  680. package/src/runs/shared/launch-cwd.js +17 -0
  681. package/src/runs/shared/launch-cwd.js.map +1 -0
  682. package/src/runs/shared/llm-intent-arbiter.d.ts +48 -0
  683. package/src/runs/shared/llm-intent-arbiter.d.ts.map +1 -0
  684. package/src/runs/shared/llm-intent-arbiter.js +235 -0
  685. package/src/runs/shared/llm-intent-arbiter.js.map +1 -0
  686. package/src/runs/shared/long-running-guard.d.ts +33 -0
  687. package/src/runs/shared/long-running-guard.d.ts.map +1 -0
  688. package/src/runs/shared/long-running-guard.js +199 -0
  689. package/src/runs/shared/long-running-guard.js.map +1 -0
  690. package/src/runs/shared/mcp-config-sources.d.ts +30 -0
  691. package/src/runs/shared/mcp-config-sources.d.ts.map +1 -0
  692. package/src/runs/shared/mcp-config-sources.js +419 -0
  693. package/src/runs/shared/mcp-config-sources.js.map +1 -0
  694. package/src/runs/shared/mcp-direct-tool-allowlist.d.ts +59 -0
  695. package/src/runs/shared/mcp-direct-tool-allowlist.d.ts.map +1 -0
  696. package/src/runs/shared/mcp-direct-tool-allowlist.js +400 -0
  697. package/src/runs/shared/mcp-direct-tool-allowlist.js.map +1 -0
  698. package/src/runs/shared/mcp-direct-tool-grant.d.ts +41 -0
  699. package/src/runs/shared/mcp-direct-tool-grant.d.ts.map +1 -0
  700. package/src/runs/shared/mcp-direct-tool-grant.js +146 -0
  701. package/src/runs/shared/mcp-direct-tool-grant.js.map +1 -0
  702. package/src/runs/shared/model-resolution-diagnostic.d.ts +22 -0
  703. package/src/runs/shared/model-resolution-diagnostic.d.ts.map +1 -0
  704. package/src/runs/shared/model-resolution-diagnostic.js +65 -0
  705. package/src/runs/shared/model-resolution-diagnostic.js.map +1 -0
  706. package/src/runs/shared/model-resolution.d.ts +92 -0
  707. package/src/runs/shared/model-resolution.d.ts.map +1 -0
  708. package/src/runs/shared/model-resolution.js +343 -0
  709. package/src/runs/shared/model-resolution.js.map +1 -0
  710. package/src/runs/shared/model-scope.d.ts +68 -0
  711. package/src/runs/shared/model-scope.d.ts.map +1 -0
  712. package/src/runs/shared/model-scope.js +156 -0
  713. package/src/runs/shared/model-scope.js.map +1 -0
  714. package/src/runs/shared/mutation-evidence.d.ts +19 -0
  715. package/src/runs/shared/mutation-evidence.d.ts.map +1 -0
  716. package/src/runs/shared/mutation-evidence.js +199 -0
  717. package/src/runs/shared/mutation-evidence.js.map +1 -0
  718. package/src/runs/shared/nested-events.d.ts +134 -0
  719. package/src/runs/shared/nested-events.d.ts.map +1 -0
  720. package/src/runs/shared/nested-events.js +1056 -0
  721. package/src/runs/shared/nested-events.js.map +1 -0
  722. package/src/runs/shared/nested-path.d.ts +9 -0
  723. package/src/runs/shared/nested-path.d.ts.map +1 -0
  724. package/src/runs/shared/nested-path.js +35 -0
  725. package/src/runs/shared/nested-path.js.map +1 -0
  726. package/src/runs/shared/nested-render.d.ts +21 -0
  727. package/src/runs/shared/nested-render.d.ts.map +1 -0
  728. package/src/runs/shared/nested-render.js +116 -0
  729. package/src/runs/shared/nested-render.js.map +1 -0
  730. package/src/runs/shared/orca-progress-tabs.d.ts +33 -0
  731. package/src/runs/shared/orca-progress-tabs.d.ts.map +1 -0
  732. package/src/runs/shared/orca-progress-tabs.js +527 -0
  733. package/src/runs/shared/orca-progress-tabs.js.map +1 -0
  734. package/src/runs/shared/parallel-handoff.d.ts +73 -0
  735. package/src/runs/shared/parallel-handoff.d.ts.map +1 -0
  736. package/src/runs/shared/parallel-handoff.js +733 -0
  737. package/src/runs/shared/parallel-handoff.js.map +1 -0
  738. package/src/runs/shared/parallel-utils.d.ts +165 -0
  739. package/src/runs/shared/parallel-utils.d.ts.map +1 -0
  740. package/src/runs/shared/parallel-utils.js +126 -0
  741. package/src/runs/shared/parallel-utils.js.map +1 -0
  742. package/src/runs/shared/permissions.d.ts +13 -0
  743. package/src/runs/shared/permissions.d.ts.map +1 -0
  744. package/src/runs/shared/permissions.js +93 -0
  745. package/src/runs/shared/permissions.js.map +1 -0
  746. package/src/runs/shared/pi-spawn.d.ts +28 -0
  747. package/src/runs/shared/pi-spawn.d.ts.map +1 -0
  748. package/src/runs/shared/pi-spawn.js +156 -0
  749. package/src/runs/shared/pi-spawn.js.map +1 -0
  750. package/src/runs/shared/process-signal.d.ts +16 -0
  751. package/src/runs/shared/process-signal.d.ts.map +1 -0
  752. package/src/runs/shared/process-signal.js +22 -0
  753. package/src/runs/shared/process-signal.js.map +1 -0
  754. package/src/runs/shared/readonly-drain-observation.d.ts +26 -0
  755. package/src/runs/shared/readonly-drain-observation.d.ts.map +1 -0
  756. package/src/runs/shared/readonly-drain-observation.js +51 -0
  757. package/src/runs/shared/readonly-drain-observation.js.map +1 -0
  758. package/src/runs/shared/run-fanout-budget.d.ts +15 -0
  759. package/src/runs/shared/run-fanout-budget.d.ts.map +1 -0
  760. package/src/runs/shared/run-fanout-budget.js +259 -0
  761. package/src/runs/shared/run-fanout-budget.js.map +1 -0
  762. package/src/runs/shared/run-history.d.ts +20 -0
  763. package/src/runs/shared/run-history.d.ts.map +1 -0
  764. package/src/runs/shared/run-history.js +200 -0
  765. package/src/runs/shared/run-history.js.map +1 -0
  766. package/src/runs/shared/runtime-acknowledged-extensions.d.ts +8 -0
  767. package/src/runs/shared/runtime-acknowledged-extensions.d.ts.map +1 -0
  768. package/src/runs/shared/runtime-acknowledged-extensions.js +45 -0
  769. package/src/runs/shared/runtime-acknowledged-extensions.js.map +1 -0
  770. package/src/runs/shared/session-lease.d.ts +70 -0
  771. package/src/runs/shared/session-lease.d.ts.map +1 -0
  772. package/src/runs/shared/session-lease.js +251 -0
  773. package/src/runs/shared/session-lease.js.map +1 -0
  774. package/src/runs/shared/single-output.d.ts +61 -0
  775. package/src/runs/shared/single-output.d.ts.map +1 -0
  776. package/src/runs/shared/single-output.js +263 -0
  777. package/src/runs/shared/single-output.js.map +1 -0
  778. package/src/runs/shared/spawn-budget.d.ts +21 -0
  779. package/src/runs/shared/spawn-budget.d.ts.map +1 -0
  780. package/src/runs/shared/spawn-budget.js +94 -0
  781. package/src/runs/shared/spawn-budget.js.map +1 -0
  782. package/src/runs/shared/structured-output.d.ts +57 -0
  783. package/src/runs/shared/structured-output.d.ts.map +1 -0
  784. package/src/runs/shared/structured-output.js +391 -0
  785. package/src/runs/shared/structured-output.js.map +1 -0
  786. package/src/runs/shared/subagent-control.d.ts +50 -0
  787. package/src/runs/shared/subagent-control.d.ts.map +1 -0
  788. package/src/runs/shared/subagent-control.js +247 -0
  789. package/src/runs/shared/subagent-control.js.map +1 -0
  790. package/src/runs/shared/subagent-prompt-runtime.d.ts +28 -0
  791. package/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -0
  792. package/src/runs/shared/subagent-prompt-runtime.js +548 -0
  793. package/src/runs/shared/subagent-prompt-runtime.js.map +1 -0
  794. package/src/runs/shared/task-intent.d.ts +38 -0
  795. package/src/runs/shared/task-intent.d.ts.map +1 -0
  796. package/src/runs/shared/task-intent.js +213 -0
  797. package/src/runs/shared/task-intent.js.map +1 -0
  798. package/src/runs/shared/tool-availability.d.ts +17 -0
  799. package/src/runs/shared/tool-availability.d.ts.map +1 -0
  800. package/src/runs/shared/tool-availability.js +30 -0
  801. package/src/runs/shared/tool-availability.js.map +1 -0
  802. package/src/runs/shared/tool-budget.d.ts +22 -0
  803. package/src/runs/shared/tool-budget.d.ts.map +1 -0
  804. package/src/runs/shared/tool-budget.js +79 -0
  805. package/src/runs/shared/tool-budget.js.map +1 -0
  806. package/src/runs/shared/tool-timeout.d.ts +32 -0
  807. package/src/runs/shared/tool-timeout.d.ts.map +1 -0
  808. package/src/runs/shared/tool-timeout.js +74 -0
  809. package/src/runs/shared/tool-timeout.js.map +1 -0
  810. package/src/runs/shared/usage-budget.d.ts +8 -0
  811. package/src/runs/shared/usage-budget.d.ts.map +1 -0
  812. package/src/runs/shared/usage-budget.js +75 -0
  813. package/src/runs/shared/usage-budget.js.map +1 -0
  814. package/src/runs/shared/usage-reconciliation.d.ts +9 -0
  815. package/src/runs/shared/usage-reconciliation.d.ts.map +1 -0
  816. package/src/runs/shared/usage-reconciliation.js +72 -0
  817. package/src/runs/shared/usage-reconciliation.js.map +1 -0
  818. package/src/runs/shared/workflow-async-child-guidance.d.ts +4 -0
  819. package/src/runs/shared/workflow-async-child-guidance.d.ts.map +1 -0
  820. package/src/runs/shared/workflow-async-child-guidance.js +18 -0
  821. package/src/runs/shared/workflow-async-child-guidance.js.map +1 -0
  822. package/src/runs/shared/workflow-graph.d.ts +32 -0
  823. package/src/runs/shared/workflow-graph.d.ts.map +1 -0
  824. package/src/runs/shared/workflow-graph.js +222 -0
  825. package/src/runs/shared/workflow-graph.js.map +1 -0
  826. package/src/runs/shared/worktree-cleanup-plan.d.ts +78 -0
  827. package/src/runs/shared/worktree-cleanup-plan.d.ts.map +1 -0
  828. package/src/runs/shared/worktree-cleanup-plan.js +782 -0
  829. package/src/runs/shared/worktree-cleanup-plan.js.map +1 -0
  830. package/src/runs/shared/worktree-setup-command.d.ts +39 -0
  831. package/src/runs/shared/worktree-setup-command.d.ts.map +1 -0
  832. package/src/runs/shared/worktree-setup-command.js +201 -0
  833. package/src/runs/shared/worktree-setup-command.js.map +1 -0
  834. package/src/runs/shared/worktree.d.ts +179 -0
  835. package/src/runs/shared/worktree.d.ts.map +1 -0
  836. package/src/runs/shared/worktree.js +1333 -0
  837. package/src/runs/shared/worktree.js.map +1 -0
  838. package/src/shared/accessible-dir.d.ts +12 -0
  839. package/src/shared/accessible-dir.d.ts.map +1 -0
  840. package/src/shared/accessible-dir.js +37 -0
  841. package/src/shared/accessible-dir.js.map +1 -0
  842. package/src/shared/agent-stream-options.d.ts +6 -0
  843. package/src/shared/agent-stream-options.d.ts.map +1 -0
  844. package/src/shared/agent-stream-options.js +4 -0
  845. package/src/shared/agent-stream-options.js.map +1 -0
  846. package/src/shared/artifacts.d.ts +23 -0
  847. package/src/shared/artifacts.d.ts.map +1 -0
  848. package/src/shared/artifacts.js +273 -0
  849. package/src/shared/artifacts.js.map +1 -0
  850. package/src/shared/atomic-json.d.ts +19 -0
  851. package/src/shared/atomic-json.d.ts.map +1 -0
  852. package/src/shared/atomic-json.js +60 -0
  853. package/src/shared/atomic-json.js.map +1 -0
  854. package/src/shared/capacity-resilient-json.d.ts +27 -0
  855. package/src/shared/capacity-resilient-json.d.ts.map +1 -0
  856. package/src/shared/capacity-resilient-json.js +87 -0
  857. package/src/shared/capacity-resilient-json.js.map +1 -0
  858. package/src/shared/child-cache-retention.d.ts +30 -0
  859. package/src/shared/child-cache-retention.d.ts.map +1 -0
  860. package/src/shared/child-cache-retention.js +41 -0
  861. package/src/shared/child-cache-retention.js.map +1 -0
  862. package/src/shared/child-session-name.d.ts +9 -0
  863. package/src/shared/child-session-name.d.ts.map +1 -0
  864. package/src/shared/child-session-name.js +39 -0
  865. package/src/shared/child-session-name.js.map +1 -0
  866. package/src/shared/child-transcript.d.ts +38 -0
  867. package/src/shared/child-transcript.d.ts.map +1 -0
  868. package/src/shared/child-transcript.js +226 -0
  869. package/src/shared/child-transcript.js.map +1 -0
  870. package/src/shared/completion-owner.d.ts +3 -0
  871. package/src/shared/completion-owner.d.ts.map +1 -0
  872. package/src/shared/completion-owner.js +9 -0
  873. package/src/shared/completion-owner.js.map +1 -0
  874. package/src/shared/display-text.d.ts +6 -0
  875. package/src/shared/display-text.d.ts.map +1 -0
  876. package/src/shared/display-text.js +155 -0
  877. package/src/shared/display-text.js.map +1 -0
  878. package/src/shared/extension-context.d.ts +6 -0
  879. package/src/shared/extension-context.d.ts.map +1 -0
  880. package/src/shared/extension-context.js +22 -0
  881. package/src/shared/extension-context.js.map +1 -0
  882. package/src/shared/file-coalescer.d.ts +12 -0
  883. package/src/shared/file-coalescer.d.ts.map +1 -0
  884. package/src/shared/file-coalescer.js +35 -0
  885. package/src/shared/file-coalescer.js.map +1 -0
  886. package/src/shared/file-system-retry.d.ts +32 -0
  887. package/src/shared/file-system-retry.d.ts.map +1 -0
  888. package/src/shared/file-system-retry.js +85 -0
  889. package/src/shared/file-system-retry.js.map +1 -0
  890. package/src/shared/fork-context.d.ts +59 -0
  891. package/src/shared/fork-context.d.ts.map +1 -0
  892. package/src/shared/fork-context.js +171 -0
  893. package/src/shared/fork-context.js.map +1 -0
  894. package/src/shared/fork-session-cwd.d.ts +3 -0
  895. package/src/shared/fork-session-cwd.d.ts.map +1 -0
  896. package/src/shared/fork-session-cwd.js +24 -0
  897. package/src/shared/fork-session-cwd.js.map +1 -0
  898. package/src/shared/formatters.d.ts +36 -0
  899. package/src/shared/formatters.d.ts.map +1 -0
  900. package/src/shared/formatters.js +143 -0
  901. package/src/shared/formatters.js.map +1 -0
  902. package/src/shared/jsonl-writer.d.ts +21 -0
  903. package/src/shared/jsonl-writer.d.ts.map +1 -0
  904. package/src/shared/jsonl-writer.js +68 -0
  905. package/src/shared/jsonl-writer.js.map +1 -0
  906. package/src/shared/launch-contract.d.ts +64 -0
  907. package/src/shared/launch-contract.d.ts.map +1 -0
  908. package/src/shared/launch-contract.js +141 -0
  909. package/src/shared/launch-contract.js.map +1 -0
  910. package/src/shared/model-info.d.ts +44 -0
  911. package/src/shared/model-info.d.ts.map +1 -0
  912. package/src/shared/model-info.js +73 -0
  913. package/src/shared/model-info.js.map +1 -0
  914. package/src/shared/model-response-aliases.d.ts +2 -0
  915. package/src/shared/model-response-aliases.d.ts.map +1 -0
  916. package/src/shared/model-response-aliases.js +16 -0
  917. package/src/shared/model-response-aliases.js.map +1 -0
  918. package/src/shared/node-executable.d.ts +2 -0
  919. package/src/shared/node-executable.d.ts.map +1 -0
  920. package/src/shared/node-executable.js +21 -0
  921. package/src/shared/node-executable.js.map +1 -0
  922. package/src/shared/opencode-session-headers.d.ts +13 -0
  923. package/src/shared/opencode-session-headers.d.ts.map +1 -0
  924. package/src/shared/opencode-session-headers.js +27 -0
  925. package/src/shared/opencode-session-headers.js.map +1 -0
  926. package/src/shared/prompt-resources.d.ts +6 -0
  927. package/src/shared/prompt-resources.d.ts.map +1 -0
  928. package/src/shared/prompt-resources.js +11 -0
  929. package/src/shared/prompt-resources.js.map +1 -0
  930. package/src/shared/pruned-fork.d.ts +35 -0
  931. package/src/shared/pruned-fork.d.ts.map +1 -0
  932. package/src/shared/pruned-fork.js +424 -0
  933. package/src/shared/pruned-fork.js.map +1 -0
  934. package/src/shared/required-child-extensions.d.ts +20 -0
  935. package/src/shared/required-child-extensions.d.ts.map +1 -0
  936. package/src/shared/required-child-extensions.js +74 -0
  937. package/src/shared/required-child-extensions.js.map +1 -0
  938. package/src/shared/session-file-trust.d.ts +2 -0
  939. package/src/shared/session-file-trust.d.ts.map +1 -0
  940. package/src/shared/session-file-trust.js +21 -0
  941. package/src/shared/session-file-trust.js.map +1 -0
  942. package/src/shared/session-identity.d.ts +7 -0
  943. package/src/shared/session-identity.d.ts.map +1 -0
  944. package/src/shared/session-identity.js +7 -0
  945. package/src/shared/session-identity.js.map +1 -0
  946. package/src/shared/session-tokens.d.ts +3 -0
  947. package/src/shared/session-tokens.d.ts.map +1 -0
  948. package/src/shared/session-tokens.js +59 -0
  949. package/src/shared/session-tokens.js.map +1 -0
  950. package/src/shared/settings.d.ts +147 -0
  951. package/src/shared/settings.d.ts.map +1 -0
  952. package/src/shared/settings.js +248 -0
  953. package/src/shared/settings.js.map +1 -0
  954. package/src/shared/shortcuts.d.ts +2 -0
  955. package/src/shared/shortcuts.d.ts.map +1 -0
  956. package/src/shared/shortcuts.js +18 -0
  957. package/src/shared/shortcuts.js.map +1 -0
  958. package/src/shared/status-format.d.ts +10 -0
  959. package/src/shared/status-format.d.ts.map +1 -0
  960. package/src/shared/status-format.js +61 -0
  961. package/src/shared/status-format.js.map +1 -0
  962. package/src/shared/thinking-ceiling.d.ts +14 -0
  963. package/src/shared/thinking-ceiling.d.ts.map +1 -0
  964. package/src/shared/thinking-ceiling.js +38 -0
  965. package/src/shared/thinking-ceiling.js.map +1 -0
  966. package/src/shared/types.d.ts +2667 -0
  967. package/src/shared/types.d.ts.map +1 -0
  968. package/src/shared/types.js +265 -0
  969. package/src/shared/types.js.map +1 -0
  970. package/src/shared/utf8.d.ts +6 -0
  971. package/src/shared/utf8.d.ts.map +1 -0
  972. package/src/shared/utf8.js +13 -0
  973. package/src/shared/utf8.js.map +1 -0
  974. package/src/shared/utils.d.ts +71 -0
  975. package/src/shared/utils.d.ts.map +1 -0
  976. package/src/shared/utils.js +593 -0
  977. package/src/shared/utils.js.map +1 -0
  978. package/src/shared/watch-strategy.d.ts +3 -0
  979. package/src/shared/watch-strategy.d.ts.map +1 -0
  980. package/src/shared/watch-strategy.js +6 -0
  981. package/src/shared/watch-strategy.js.map +1 -0
  982. package/src/shared/workflow-child-permit.d.ts +59 -0
  983. package/src/shared/workflow-child-permit.d.ts.map +1 -0
  984. package/src/shared/workflow-child-permit.js +160 -0
  985. package/src/shared/workflow-child-permit.js.map +1 -0
  986. package/src/slash/delegation-adapters.d.ts +147 -0
  987. package/src/slash/delegation-adapters.d.ts.map +1 -0
  988. package/src/slash/delegation-adapters.js +293 -0
  989. package/src/slash/delegation-adapters.js.map +1 -0
  990. package/src/slash/delegation-json.d.ts +11 -0
  991. package/src/slash/delegation-json.d.ts.map +1 -0
  992. package/src/slash/delegation-json.js +118 -0
  993. package/src/slash/delegation-json.js.map +1 -0
  994. package/src/slash/delegation-request.d.ts +13 -0
  995. package/src/slash/delegation-request.d.ts.map +1 -0
  996. package/src/slash/delegation-request.js +175 -0
  997. package/src/slash/delegation-request.js.map +1 -0
  998. package/src/slash/prompt-template-bridge.d.ts +27 -0
  999. package/src/slash/prompt-template-bridge.d.ts.map +1 -0
  1000. package/src/slash/prompt-template-bridge.js +380 -0
  1001. package/src/slash/prompt-template-bridge.js.map +1 -0
  1002. package/src/slash/prompt-workflows.d.ts +22 -0
  1003. package/src/slash/prompt-workflows.d.ts.map +1 -0
  1004. package/src/slash/prompt-workflows.js +261 -0
  1005. package/src/slash/prompt-workflows.js.map +1 -0
  1006. package/src/slash/selector.d.ts +48 -0
  1007. package/src/slash/selector.d.ts.map +1 -0
  1008. package/src/slash/selector.js +118 -0
  1009. package/src/slash/selector.js.map +1 -0
  1010. package/src/slash/slash-bridge.d.ts +31 -0
  1011. package/src/slash/slash-bridge.d.ts.map +1 -0
  1012. package/src/slash/slash-bridge.js +133 -0
  1013. package/src/slash/slash-bridge.js.map +1 -0
  1014. package/src/slash/slash-commands.d.ts +9 -0
  1015. package/src/slash/slash-commands.d.ts.map +1 -0
  1016. package/src/slash/slash-commands.js +1295 -0
  1017. package/src/slash/slash-commands.js.map +1 -0
  1018. package/src/slash/slash-live-state.d.ts +22 -0
  1019. package/src/slash/slash-live-state.d.ts.map +1 -0
  1020. package/src/slash/slash-live-state.js +264 -0
  1021. package/src/slash/slash-live-state.js.map +1 -0
  1022. package/src/slash/subagents-admin.d.ts +3 -0
  1023. package/src/slash/subagents-admin.d.ts.map +1 -0
  1024. package/src/slash/subagents-admin.js +454 -0
  1025. package/src/slash/subagents-admin.js.map +1 -0
  1026. package/src/tui/fleet-status.d.ts +86 -0
  1027. package/src/tui/fleet-status.d.ts.map +1 -0
  1028. package/src/tui/fleet-status.js +1083 -0
  1029. package/src/tui/fleet-status.js.map +1 -0
  1030. package/src/tui/fleet-transcript.d.ts +50 -0
  1031. package/src/tui/fleet-transcript.d.ts.map +1 -0
  1032. package/src/tui/fleet-transcript.js +497 -0
  1033. package/src/tui/fleet-transcript.js.map +1 -0
  1034. package/src/tui/fleet.d.ts +169 -0
  1035. package/src/tui/fleet.d.ts.map +1 -0
  1036. package/src/tui/fleet.js +1412 -0
  1037. package/src/tui/fleet.js.map +1 -0
  1038. package/src/tui/render-helpers.d.ts +24 -0
  1039. package/src/tui/render-helpers.d.ts.map +1 -0
  1040. package/src/tui/render-helpers.js +101 -0
  1041. package/src/tui/render-helpers.js.map +1 -0
  1042. package/src/tui/render.d.ts +61 -0
  1043. package/src/tui/render.d.ts.map +1 -0
  1044. package/src/tui/render.js +3607 -0
  1045. package/src/tui/render.js.map +1 -0
  1046. package/src/watchdog/change-signature.d.ts +8 -0
  1047. package/src/watchdog/change-signature.d.ts.map +1 -0
  1048. package/src/watchdog/change-signature.js +246 -0
  1049. package/src/watchdog/change-signature.js.map +1 -0
  1050. package/src/watchdog/child-status.d.ts +54 -0
  1051. package/src/watchdog/child-status.d.ts.map +1 -0
  1052. package/src/watchdog/child-status.js +188 -0
  1053. package/src/watchdog/child-status.js.map +1 -0
  1054. package/src/watchdog/diff-tool.d.ts +23 -0
  1055. package/src/watchdog/diff-tool.d.ts.map +1 -0
  1056. package/src/watchdog/diff-tool.js +84 -0
  1057. package/src/watchdog/diff-tool.js.map +1 -0
  1058. package/src/watchdog/emission-guard.d.ts +37 -0
  1059. package/src/watchdog/emission-guard.d.ts.map +1 -0
  1060. package/src/watchdog/emission-guard.js +98 -0
  1061. package/src/watchdog/emission-guard.js.map +1 -0
  1062. package/src/watchdog/guidance.d.ts +4 -0
  1063. package/src/watchdog/guidance.d.ts.map +1 -0
  1064. package/src/watchdog/guidance.js +20 -0
  1065. package/src/watchdog/guidance.js.map +1 -0
  1066. package/src/watchdog/lsp-diagnostics.d.ts +18 -0
  1067. package/src/watchdog/lsp-diagnostics.d.ts.map +1 -0
  1068. package/src/watchdog/lsp-diagnostics.js +490 -0
  1069. package/src/watchdog/lsp-diagnostics.js.map +1 -0
  1070. package/src/watchdog/model-selection.d.ts +25 -0
  1071. package/src/watchdog/model-selection.d.ts.map +1 -0
  1072. package/src/watchdog/model-selection.js +168 -0
  1073. package/src/watchdog/model-selection.js.map +1 -0
  1074. package/src/watchdog/permission-arbiter.d.ts +21 -0
  1075. package/src/watchdog/permission-arbiter.d.ts.map +1 -0
  1076. package/src/watchdog/permission-arbiter.js +136 -0
  1077. package/src/watchdog/permission-arbiter.js.map +1 -0
  1078. package/src/watchdog/register-child.d.ts +12 -0
  1079. package/src/watchdog/register-child.d.ts.map +1 -0
  1080. package/src/watchdog/register-child.js +120 -0
  1081. package/src/watchdog/register-child.js.map +1 -0
  1082. package/src/watchdog/register-main.d.ts +10 -0
  1083. package/src/watchdog/register-main.d.ts.map +1 -0
  1084. package/src/watchdog/register-main.js +419 -0
  1085. package/src/watchdog/register-main.js.map +1 -0
  1086. package/src/watchdog/render.d.ts +12 -0
  1087. package/src/watchdog/render.d.ts.map +1 -0
  1088. package/src/watchdog/render.js +52 -0
  1089. package/src/watchdog/render.js.map +1 -0
  1090. package/src/watchdog/review.d.ts +36 -0
  1091. package/src/watchdog/review.d.ts.map +1 -0
  1092. package/src/watchdog/review.js +318 -0
  1093. package/src/watchdog/review.js.map +1 -0
  1094. package/src/watchdog/rules.d.ts +22 -0
  1095. package/src/watchdog/rules.d.ts.map +1 -0
  1096. package/src/watchdog/rules.js +59 -0
  1097. package/src/watchdog/rules.js.map +1 -0
  1098. package/src/watchdog/runtime.d.ts +196 -0
  1099. package/src/watchdog/runtime.d.ts.map +1 -0
  1100. package/src/watchdog/runtime.js +862 -0
  1101. package/src/watchdog/runtime.js.map +1 -0
  1102. package/src/watchdog/scope.d.ts +15 -0
  1103. package/src/watchdog/scope.d.ts.map +1 -0
  1104. package/src/watchdog/scope.js +45 -0
  1105. package/src/watchdog/scope.js.map +1 -0
  1106. package/src/watchdog/settings.d.ts +30 -0
  1107. package/src/watchdog/settings.d.ts.map +1 -0
  1108. package/src/watchdog/settings.js +476 -0
  1109. package/src/watchdog/settings.js.map +1 -0
  1110. package/src/watchdog/tool-actions.d.ts +18 -0
  1111. package/src/watchdog/tool-actions.d.ts.map +1 -0
  1112. package/src/watchdog/tool-actions.js +151 -0
  1113. package/src/watchdog/tool-actions.js.map +1 -0
  1114. package/src/watchdog/turn-delta.d.ts +12 -0
  1115. package/src/watchdog/turn-delta.d.ts.map +1 -0
  1116. package/src/watchdog/turn-delta.js +185 -0
  1117. package/src/watchdog/turn-delta.js.map +1 -0
  1118. package/src/watchdog/types.d.ts +142 -0
  1119. package/src/watchdog/types.d.ts.map +1 -0
  1120. package/src/watchdog/types.js +28 -0
  1121. package/src/watchdog/types.js.map +1 -0
  1122. package/src/watchdog/warning-format.d.ts +8 -0
  1123. package/src/watchdog/warning-format.d.ts.map +1 -0
  1124. package/src/watchdog/warning-format.js +60 -0
  1125. package/src/watchdog/warning-format.js.map +1 -0
  1126. package/src/workflows/chat-progress.d.ts +38 -0
  1127. package/src/workflows/chat-progress.d.ts.map +1 -0
  1128. package/src/workflows/chat-progress.js +130 -0
  1129. package/src/workflows/chat-progress.js.map +1 -0
  1130. package/src/workflows/host-command.d.ts +31 -0
  1131. package/src/workflows/host-command.d.ts.map +1 -0
  1132. package/src/workflows/host-command.js +228 -0
  1133. package/src/workflows/host-command.js.map +1 -0
  1134. package/src/workflows/scripted-workflow.d.ts +195 -0
  1135. package/src/workflows/scripted-workflow.d.ts.map +1 -0
  1136. package/src/workflows/scripted-workflow.js +2636 -0
  1137. package/src/workflows/scripted-workflow.js.map +1 -0
  1138. package/src/workflows/workflow-checklist.d.ts +124 -0
  1139. package/src/workflows/workflow-checklist.d.ts.map +1 -0
  1140. package/src/workflows/workflow-checklist.js +312 -0
  1141. package/src/workflows/workflow-checklist.js.map +1 -0
  1142. package/src/workflows/workflow-child-summary.d.ts +20 -0
  1143. package/src/workflows/workflow-child-summary.d.ts.map +1 -0
  1144. package/src/workflows/workflow-child-summary.js +179 -0
  1145. package/src/workflows/workflow-child-summary.js.map +1 -0
  1146. package/src/workflows/workflow-preflight.d.ts +59 -0
  1147. package/src/workflows/workflow-preflight.d.ts.map +1 -0
  1148. package/src/workflows/workflow-preflight.js +289 -0
  1149. package/src/workflows/workflow-preflight.js.map +1 -0
  1150. package/src/workflows/workflow-receipt.d.ts +35 -0
  1151. package/src/workflows/workflow-receipt.d.ts.map +1 -0
  1152. package/src/workflows/workflow-receipt.js +449 -0
  1153. package/src/workflows/workflow-receipt.js.map +1 -0
  1154. package/src/workflows/workflow-resources.d.ts +43 -0
  1155. package/src/workflows/workflow-resources.d.ts.map +1 -0
  1156. package/src/workflows/workflow-resources.js +230 -0
  1157. package/src/workflows/workflow-resources.js.map +1 -0
  1158. package/src/workflows/workflow-settlement.d.ts +85 -0
  1159. package/src/workflows/workflow-settlement.d.ts.map +1 -0
  1160. package/src/workflows/workflow-settlement.js +204 -0
  1161. package/src/workflows/workflow-settlement.js.map +1 -0
  1162. package/index.ts +0 -13
  1163. package/src/agents/advertised-agent-prompt.ts +0 -94
  1164. package/src/agents/agent-management.ts +0 -1417
  1165. package/src/agents/agent-memory.ts +0 -254
  1166. package/src/agents/agent-refinements.ts +0 -624
  1167. package/src/agents/agent-scope.ts +0 -6
  1168. package/src/agents/agent-selection.ts +0 -25
  1169. package/src/agents/agent-serializer.ts +0 -182
  1170. package/src/agents/agents.ts +0 -2917
  1171. package/src/agents/builtin-names.ts +0 -16
  1172. package/src/agents/chain-serializer.ts +0 -285
  1173. package/src/agents/frontmatter.ts +0 -153
  1174. package/src/agents/identity.ts +0 -30
  1175. package/src/agents/proactive-skills.ts +0 -194
  1176. package/src/agents/runtime-agent-events.ts +0 -70
  1177. package/src/agents/runtime-agent-registry.ts +0 -430
  1178. package/src/agents/skills.ts +0 -754
  1179. package/src/api/agents.ts +0 -12
  1180. package/src/api/background-work.ts +0 -206
  1181. package/src/api/capability-ceiling.ts +0 -16
  1182. package/src/api/child-tool-plan.ts +0 -5
  1183. package/src/api/control-channel.ts +0 -4
  1184. package/src/api/delegation.ts +0 -116
  1185. package/src/api/external-job-provider.ts +0 -195
  1186. package/src/api/external-runs.ts +0 -282
  1187. package/src/api/intercom-bridge.ts +0 -3
  1188. package/src/api/preflight.ts +0 -539
  1189. package/src/api/project-panes.ts +0 -32
  1190. package/src/api/required-child-extensions.ts +0 -6
  1191. package/src/api/shared-types.ts +0 -29
  1192. package/src/api/workflow-resources.ts +0 -6
  1193. package/src/extension/config.ts +0 -230
  1194. package/src/extension/control-notices.ts +0 -58
  1195. package/src/extension/doctor.ts +0 -270
  1196. package/src/extension/fanout-child.ts +0 -265
  1197. package/src/extension/herdr-pi-bridge.ts +0 -160
  1198. package/src/extension/index.ts +0 -1205
  1199. package/src/extension/public-execution.ts +0 -225
  1200. package/src/extension/rpc.ts +0 -848
  1201. package/src/extension/schemas.ts +0 -428
  1202. package/src/extension/steering-notices.ts +0 -35
  1203. package/src/extension/subagent-guide.ts +0 -39
  1204. package/src/extension/tool-description.ts +0 -175
  1205. package/src/extension/tool-result.ts +0 -19
  1206. package/src/inspectors/actions.ts +0 -148
  1207. package/src/inspectors/ghostty/actions.ts +0 -74
  1208. package/src/inspectors/ghostty/plugin.ts +0 -29
  1209. package/src/inspectors/herdr/actions.ts +0 -155
  1210. package/src/inspectors/herdr/client.ts +0 -130
  1211. package/src/inspectors/herdr/focus.ts +0 -55
  1212. package/src/inspectors/herdr/plugin.ts +0 -20
  1213. package/src/inspectors/herdr/project-panes.ts +0 -730
  1214. package/src/inspectors/inspector-runner.ts +0 -153
  1215. package/src/inspectors/plugins.ts +0 -8
  1216. package/src/inspectors/session-roots-codec.ts +0 -31
  1217. package/src/inspectors/shell-command.ts +0 -16
  1218. package/src/inspectors/types.ts +0 -51
  1219. package/src/integrations/herdr-status.ts +0 -400
  1220. package/src/integrations/pi-web-session-liveness.ts +0 -73
  1221. package/src/intercom/intercom-bridge.ts +0 -233
  1222. package/src/intercom/native-supervisor-channel.ts +0 -917
  1223. package/src/intercom/result-intercom.ts +0 -423
  1224. package/src/intercom/supervisor-ui.ts +0 -244
  1225. package/src/missions/actions.ts +0 -433
  1226. package/src/missions/goal-driver.ts +0 -164
  1227. package/src/missions/lifecycle.ts +0 -367
  1228. package/src/missions/store.ts +0 -584
  1229. package/src/missions/types.ts +0 -190
  1230. package/src/missions/workflow-state.ts +0 -281
  1231. package/src/policy/authority.ts +0 -50
  1232. package/src/profiles/profiles.ts +0 -668
  1233. package/src/runs/background/active-async-capacity.ts +0 -520
  1234. package/src/runs/background/active-run-index.ts +0 -155
  1235. package/src/runs/background/async-execution.ts +0 -2278
  1236. package/src/runs/background/async-job-tracker.ts +0 -826
  1237. package/src/runs/background/async-resume.ts +0 -647
  1238. package/src/runs/background/async-retention.ts +0 -912
  1239. package/src/runs/background/async-status-snapshot.ts +0 -46
  1240. package/src/runs/background/async-status.ts +0 -771
  1241. package/src/runs/background/auto-drain.ts +0 -92
  1242. package/src/runs/background/binary-bootstrap.ts +0 -38
  1243. package/src/runs/background/chain-append.ts +0 -321
  1244. package/src/runs/background/chain-root-attachment.ts +0 -259
  1245. package/src/runs/background/completion-batcher.ts +0 -168
  1246. package/src/runs/background/completion-dedupe.ts +0 -58
  1247. package/src/runs/background/completion-replay.ts +0 -287
  1248. package/src/runs/background/control-channel.ts +0 -600
  1249. package/src/runs/background/fleet-view.ts +0 -648
  1250. package/src/runs/background/index-segment.ts +0 -59
  1251. package/src/runs/background/inspect-rpc.ts +0 -443
  1252. package/src/runs/background/notify.ts +0 -819
  1253. package/src/runs/background/owned-process-tree.ts +0 -131
  1254. package/src/runs/background/parallel-groups.ts +0 -45
  1255. package/src/runs/background/process-terminal.ts +0 -310
  1256. package/src/runs/background/result-delivery-ownership.ts +0 -45
  1257. package/src/runs/background/result-files.ts +0 -523
  1258. package/src/runs/background/result-watcher.ts +0 -809
  1259. package/src/runs/background/resume-guidance.ts +0 -56
  1260. package/src/runs/background/retained-children.ts +0 -135
  1261. package/src/runs/background/retained-nested-route-tracker.ts +0 -96
  1262. package/src/runs/background/run-child-session.ts +0 -690
  1263. package/src/runs/background/run-id-query.ts +0 -7
  1264. package/src/runs/background/run-id-resolver.ts +0 -175
  1265. package/src/runs/background/run-status.ts +0 -786
  1266. package/src/runs/background/runner-aliases.ts +0 -142
  1267. package/src/runs/background/runner-child-launch.ts +0 -91
  1268. package/src/runs/background/runner-child-sessions.ts +0 -32
  1269. package/src/runs/background/runner-http-dispatcher.ts +0 -119
  1270. package/src/runs/background/scheduled-runs.ts +0 -1012
  1271. package/src/runs/background/stale-run-reconciler.ts +0 -436
  1272. package/src/runs/background/steering.ts +0 -260
  1273. package/src/runs/background/subagent-runner.ts +0 -5357
  1274. package/src/runs/background/subagent-wait.ts +0 -876
  1275. package/src/runs/background/terminal-run-index.ts +0 -138
  1276. package/src/runs/background/top-level-async.ts +0 -14
  1277. package/src/runs/background/wait-completions.ts +0 -261
  1278. package/src/runs/background/wait-config.ts +0 -50
  1279. package/src/runs/background/wait-subscriptions.ts +0 -354
  1280. package/src/runs/background/wait-tool.ts +0 -45
  1281. package/src/runs/foreground/async-dismiss-action.ts +0 -86
  1282. package/src/runs/foreground/async-steering-action.ts +0 -276
  1283. package/src/runs/foreground/async-stop-action.ts +0 -176
  1284. package/src/runs/foreground/execution.ts +0 -2254
  1285. package/src/runs/foreground/foreground-control.ts +0 -157
  1286. package/src/runs/foreground/foreground-history.ts +0 -163
  1287. package/src/runs/foreground/prompt-audit.ts +0 -178
  1288. package/src/runs/foreground/subagent-executor.ts +0 -7526
  1289. package/src/runs/foreground/workflow-detach-reconcile.ts +0 -304
  1290. package/src/runs/foreground/workflow-foreground-steering.ts +0 -169
  1291. package/src/runs/shared/abort-recovery.ts +0 -119
  1292. package/src/runs/shared/acceptance.ts +0 -1698
  1293. package/src/runs/shared/agent-contract.ts +0 -38
  1294. package/src/runs/shared/async-status-projection.ts +0 -659
  1295. package/src/runs/shared/background-process-options.ts +0 -9
  1296. package/src/runs/shared/capability-ceiling.ts +0 -211
  1297. package/src/runs/shared/chain-outputs.ts +0 -116
  1298. package/src/runs/shared/child-hooks.ts +0 -189
  1299. package/src/runs/shared/child-identity.ts +0 -62
  1300. package/src/runs/shared/child-launch-plan.ts +0 -163
  1301. package/src/runs/shared/child-launch.ts +0 -342
  1302. package/src/runs/shared/child-lifecycle.ts +0 -28
  1303. package/src/runs/shared/child-runtime-config.ts +0 -133
  1304. package/src/runs/shared/child-session.ts +0 -448
  1305. package/src/runs/shared/child-tool-plan.ts +0 -661
  1306. package/src/runs/shared/claude-code-adapter.ts +0 -133
  1307. package/src/runs/shared/codex-exec-adapter.ts +0 -129
  1308. package/src/runs/shared/completion-evidence.ts +0 -89
  1309. package/src/runs/shared/completion-guard.ts +0 -255
  1310. package/src/runs/shared/context-mode.ts +0 -44
  1311. package/src/runs/shared/cursor-agent-adapter.ts +0 -114
  1312. package/src/runs/shared/dynamic-fanout.ts +0 -297
  1313. package/src/runs/shared/effective-system-prompt.ts +0 -33
  1314. package/src/runs/shared/extension-bindings.ts +0 -78
  1315. package/src/runs/shared/external-cli-contract.ts +0 -177
  1316. package/src/runs/shared/external-cli-preflight.ts +0 -142
  1317. package/src/runs/shared/external-cli-runner.ts +0 -431
  1318. package/src/runs/shared/external-job-bridge.ts +0 -460
  1319. package/src/runs/shared/external-job-runner.ts +0 -389
  1320. package/src/runs/shared/fast-mode-extension.ts +0 -10
  1321. package/src/runs/shared/herdr-connection.ts +0 -134
  1322. package/src/runs/shared/herdr-external-adapters.ts +0 -169
  1323. package/src/runs/shared/herdr-machine.ts +0 -279
  1324. package/src/runs/shared/herdr-pi-protocol.ts +0 -59
  1325. package/src/runs/shared/herdr-placed-run.ts +0 -263
  1326. package/src/runs/shared/host-step-status.ts +0 -231
  1327. package/src/runs/shared/lane-metadata.ts +0 -126
  1328. package/src/runs/shared/launch-cwd.ts +0 -16
  1329. package/src/runs/shared/llm-intent-arbiter.ts +0 -321
  1330. package/src/runs/shared/long-running-guard.ts +0 -221
  1331. package/src/runs/shared/mcp-config-sources.ts +0 -422
  1332. package/src/runs/shared/mcp-direct-tool-allowlist.ts +0 -484
  1333. package/src/runs/shared/mcp-direct-tool-grant.ts +0 -194
  1334. package/src/runs/shared/model-resolution-diagnostic.ts +0 -76
  1335. package/src/runs/shared/model-resolution.ts +0 -441
  1336. package/src/runs/shared/model-scope.ts +0 -205
  1337. package/src/runs/shared/mutation-evidence.ts +0 -199
  1338. package/src/runs/shared/nested-events.ts +0 -1079
  1339. package/src/runs/shared/nested-path.ts +0 -38
  1340. package/src/runs/shared/nested-render.ts +0 -127
  1341. package/src/runs/shared/orca-progress-tabs.ts +0 -510
  1342. package/src/runs/shared/parallel-handoff.ts +0 -741
  1343. package/src/runs/shared/parallel-utils.ts +0 -279
  1344. package/src/runs/shared/permissions.ts +0 -86
  1345. package/src/runs/shared/pi-spawn.ts +0 -207
  1346. package/src/runs/shared/process-signal.ts +0 -35
  1347. package/src/runs/shared/readonly-drain-observation.ts +0 -42
  1348. package/src/runs/shared/run-fanout-budget.ts +0 -267
  1349. package/src/runs/shared/run-history.ts +0 -201
  1350. package/src/runs/shared/runtime-acknowledged-extensions.ts +0 -44
  1351. package/src/runs/shared/session-lease.ts +0 -293
  1352. package/src/runs/shared/single-output.ts +0 -304
  1353. package/src/runs/shared/spawn-budget.ts +0 -128
  1354. package/src/runs/shared/structured-output.ts +0 -236
  1355. package/src/runs/shared/subagent-control.ts +0 -294
  1356. package/src/runs/shared/subagent-prompt-runtime.ts +0 -545
  1357. package/src/runs/shared/task-intent.ts +0 -244
  1358. package/src/runs/shared/tool-availability.ts +0 -37
  1359. package/src/runs/shared/tool-budget.ts +0 -66
  1360. package/src/runs/shared/tool-timeout.ts +0 -93
  1361. package/src/runs/shared/usage-budget.ts +0 -65
  1362. package/src/runs/shared/workflow-async-child-guidance.ts +0 -18
  1363. package/src/runs/shared/workflow-graph.ts +0 -225
  1364. package/src/runs/shared/worktree-cleanup-plan.ts +0 -869
  1365. package/src/runs/shared/worktree-setup-command.ts +0 -213
  1366. package/src/runs/shared/worktree.ts +0 -1538
  1367. package/src/shared/accessible-dir.ts +0 -47
  1368. package/src/shared/agent-stream-options.ts +0 -5
  1369. package/src/shared/artifacts.ts +0 -281
  1370. package/src/shared/atomic-json.ts +0 -83
  1371. package/src/shared/capacity-resilient-json.ts +0 -102
  1372. package/src/shared/child-cache-retention.ts +0 -43
  1373. package/src/shared/child-session-name.ts +0 -46
  1374. package/src/shared/child-transcript.ts +0 -264
  1375. package/src/shared/completion-owner.ts +0 -14
  1376. package/src/shared/display-text.ts +0 -150
  1377. package/src/shared/extension-context.ts +0 -24
  1378. package/src/shared/file-coalescer.ts +0 -49
  1379. package/src/shared/file-system-retry.ts +0 -95
  1380. package/src/shared/fork-context.ts +0 -236
  1381. package/src/shared/fork-session-cwd.ts +0 -27
  1382. package/src/shared/formatters.ts +0 -146
  1383. package/src/shared/jsonl-writer.ts +0 -92
  1384. package/src/shared/launch-contract.ts +0 -198
  1385. package/src/shared/model-info.ts +0 -101
  1386. package/src/shared/model-response-aliases.ts +0 -13
  1387. package/src/shared/node-executable.ts +0 -21
  1388. package/src/shared/opencode-session-headers.ts +0 -30
  1389. package/src/shared/prompt-resources.ts +0 -11
  1390. package/src/shared/pruned-fork.ts +0 -450
  1391. package/src/shared/required-child-extensions.ts +0 -81
  1392. package/src/shared/session-file-trust.ts +0 -19
  1393. package/src/shared/session-identity.ts +0 -10
  1394. package/src/shared/session-tokens.ts +0 -55
  1395. package/src/shared/settings.ts +0 -412
  1396. package/src/shared/shortcuts.ts +0 -13
  1397. package/src/shared/status-format.ts +0 -55
  1398. package/src/shared/thinking-ceiling.ts +0 -46
  1399. package/src/shared/types.ts +0 -2983
  1400. package/src/shared/utf8.ts +0 -11
  1401. package/src/shared/utils.ts +0 -608
  1402. package/src/shared/watch-strategy.ts +0 -12
  1403. package/src/shared/workflow-child-permit.ts +0 -212
  1404. package/src/slash/delegation-adapters.ts +0 -428
  1405. package/src/slash/delegation-json.ts +0 -108
  1406. package/src/slash/delegation-request.ts +0 -176
  1407. package/src/slash/prompt-template-bridge.ts +0 -419
  1408. package/src/slash/prompt-workflows.ts +0 -287
  1409. package/src/slash/selector.ts +0 -147
  1410. package/src/slash/slash-bridge.ts +0 -192
  1411. package/src/slash/slash-commands.ts +0 -1325
  1412. package/src/slash/slash-live-state.ts +0 -310
  1413. package/src/slash/subagents-admin.ts +0 -460
  1414. package/src/tui/fleet-status.ts +0 -1109
  1415. package/src/tui/fleet-transcript.ts +0 -536
  1416. package/src/tui/fleet.ts +0 -1448
  1417. package/src/tui/render-helpers.ts +0 -111
  1418. package/src/tui/render.ts +0 -3721
  1419. package/src/types/pi-runtime-compat.d.ts +0 -8
  1420. package/src/watchdog/change-signature.ts +0 -260
  1421. package/src/watchdog/child-status.ts +0 -225
  1422. package/src/watchdog/diff-tool.ts +0 -77
  1423. package/src/watchdog/emission-guard.ts +0 -125
  1424. package/src/watchdog/guidance.ts +0 -20
  1425. package/src/watchdog/lsp-diagnostics.ts +0 -538
  1426. package/src/watchdog/model-selection.ts +0 -187
  1427. package/src/watchdog/permission-arbiter.ts +0 -156
  1428. package/src/watchdog/register-child.ts +0 -128
  1429. package/src/watchdog/register-main.ts +0 -445
  1430. package/src/watchdog/render.ts +0 -53
  1431. package/src/watchdog/review.ts +0 -363
  1432. package/src/watchdog/rules.ts +0 -70
  1433. package/src/watchdog/runtime.ts +0 -924
  1434. package/src/watchdog/scope.ts +0 -51
  1435. package/src/watchdog/settings.ts +0 -515
  1436. package/src/watchdog/tool-actions.ts +0 -156
  1437. package/src/watchdog/turn-delta.ts +0 -184
  1438. package/src/watchdog/types.ts +0 -186
  1439. package/src/watchdog/warning-format.ts +0 -72
  1440. package/src/workflows/chat-progress.ts +0 -152
  1441. package/src/workflows/host-command.ts +0 -235
  1442. package/src/workflows/scripted-workflow.ts +0 -2575
  1443. package/src/workflows/workflow-checklist.ts +0 -436
  1444. package/src/workflows/workflow-child-summary.ts +0 -170
  1445. package/src/workflows/workflow-preflight.ts +0 -297
  1446. package/src/workflows/workflow-receipt.ts +0 -384
  1447. package/src/workflows/workflow-resources.ts +0 -236
  1448. package/src/workflows/workflow-settlement.ts +0 -249
@@ -1,169 +0,0 @@
1
- import { randomUUID } from "node:crypto";
2
- import * as path from "node:path";
3
- import { stripVTControlCharacters } from "node:util";
4
- import type { HerdrMachineReference, HerdrRemoteGitStatus } from "../../shared/types.ts";
5
- import { connectHerdrMachine, HerdrRpcError, HerdrTransportError, remoteShellCommand, shellQuoteRemote, type HerdrForwardedConnection } from "./herdr-connection.ts";
6
- import { HerdrPlacedRunOwner, herdrStatusSubscriptions, ownsHerdrPane, parseHerdrAgent, reconcileHerdrPlacedRun, type HerdrReconnectCandidate, type HerdrRunIdentity } from "./herdr-placed-run.ts";
7
-
8
- export type HerdrExternalAdapterId = "claude-code" | "claude-code-writer" | "cursor-agent" | "cursor-agent-writer" | "codex-exec" | "codex-exec-writer";
9
- export type HerdrExternalKind = "claude" | "cursor" | "codex";
10
- export interface HerdrExternalCapabilities { stop: true; steer: false; resume: false; supervisor: "unsupported" }
11
- export interface HerdrExternalLaunch { adapter: HerdrExternalAdapterId; kind: HerdrExternalKind; nativeSessionId: string; args: string[]; capabilities: HerdrExternalCapabilities }
12
- export interface HerdrExternalResult {
13
- protocol: 1; adapter: HerdrExternalAdapterId; runId: string; requestId: string; nativeSessionId: "unverified"; nativeTurnId: "unverified";
14
- outcome: "partial"; output: string; initialGit?: HerdrRemoteGitStatus; finalGit?: HerdrRemoteGitStatus;
15
- settlement?: { verification: "best-effort/unverified"; evidence: "sanitized-terminal-snapshots" };
16
- }
17
- export interface HerdrExternalEvidenceInput { runId: string; requestId: string; task: string; cwd: string; nativeSessionId: string; requestedModel?: string; initialGit?: unknown; finalGit?: unknown }
18
- export interface HerdrExternalCommandEvidence { binary: string; args: readonly string[]; status: number; stdout: string; stderr: string }
19
- export interface HerdrExternalPreflightEvidence { version: HerdrExternalCommandEvidence; help: HerdrExternalCommandEvidence }
20
- export interface HerdrExternalAdapter {
21
- readonly id: HerdrExternalAdapterId; readonly kind: HerdrExternalKind;
22
- preflight(evidence: HerdrExternalPreflightEvidence): void;
23
- launch(input: Omit<Parameters<typeof createHerdrExternalAdapterLaunch>[0], "adapter">): HerdrExternalLaunch;
24
- normalize(input: HerdrExternalEvidenceInput, evidence: Buffer | string): HerdrExternalResult;
25
- }
26
-
27
- const CAPABILITIES: HerdrExternalCapabilities = { stop: true, steer: false, resume: false, supervisor: "unsupported" };
28
- const MAX_EVIDENCE_BYTES = 4 * 1024 * 1024, MAX_OUTPUT_BYTES = 1024 * 1024, MAX_PREFLIGHT_BYTES = 64 * 1024, MAX_GIT_BYTES = 2048;
29
- const CODEX_OUTPUT_BYTES = 64 * 1024, EXTERNAL_STARTUP_TIMEOUT_MS = 45_000, EXTERNAL_STARTUP_BACKOFF_AFTER_MS = 15_000, EXTERNAL_STARTUP_SLOW_POLL_MS = 2_500, CODEX_STARTUP_GRACE_MS = 15_000, CODEX_QUIET_MS = 8_000, CODEX_POLL_MS = 1_000, CODEX_DEFAULT_TIMEOUT_MS = 30 * 60_000;
30
- const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu, SHA = /^[0-9a-f]{4,64}$/iu;
31
-
32
- function boundedString(value: unknown, label: string, maximum = MAX_OUTPUT_BYTES): string { if (typeof value !== "string" || !value.trim()) throw new Error(`${label} is missing.`); if (Buffer.byteLength(value) > maximum) throw new Error(`${label} exceeded its byte bound.`); return value; }
33
- function exactUuid(value: unknown, label: string): string { const result = boundedString(value, label, 64); if (!UUID.test(result)) throw new Error(`${label} is not a UUID.`); return result; }
34
- function normalizeGit(value: unknown, label: string): HerdrRemoteGitStatus | undefined {
35
- if (value === undefined) return undefined; if (!value || typeof value !== "object" || Array.isArray(value) || Buffer.byteLength(JSON.stringify(value)) > MAX_GIT_BYTES) throw new Error(`${label} is malformed or oversized.`);
36
- const data = value as Record<string, unknown>, unknown = Object.keys(data).filter((key) => key !== "head" && key !== "branch" && key !== "dirty"); if (unknown.length) throw new Error(`${label} has unsupported keys.`);
37
- if (data.head !== undefined && (typeof data.head !== "string" || !SHA.test(data.head))) throw new Error(`${label}.head is invalid.`);
38
- if (data.branch !== undefined && (typeof data.branch !== "string" || !data.branch.trim() || Buffer.byteLength(data.branch) > 256 || /[\x00-\x1f\x7f]/u.test(data.branch))) throw new Error(`${label}.branch is invalid.`);
39
- if (data.dirty !== undefined && typeof data.dirty !== "boolean") throw new Error(`${label}.dirty is invalid.`);
40
- return { ...(data.head !== undefined ? { head: data.head } : {}), ...(data.branch !== undefined ? { branch: data.branch } : {}), ...(data.dirty !== undefined ? { dirty: data.dirty } : {}) };
41
- }
42
- function resultGit(input: HerdrExternalEvidenceInput) { const initialGit = normalizeGit(input.initialGit, "initial Git evidence"), finalGit = normalizeGit(input.finalGit, "final Git evidence"); return { ...(initialGit ? { initialGit } : {}), ...(finalGit ? { finalGit } : {}) }; }
43
- function atLeast(actual: [number, number, number], floor: [number, number, number]): boolean { return actual[0] > floor[0] || actual[0] === floor[0] && (actual[1] > floor[1] || actual[1] === floor[1] && actual[2] >= floor[2]); }
44
- function requireHelp(help: string, values: string[], label: string): void { if (!/^(?:Usage:|Claude Code|Codex|Start the Cursor Agent)/u.test(help.trimStart())) throw new Error(`${label} help response has an unsupported header.`); for (const value of values) { const matches = help.match(new RegExp(`(^|\\s)${value.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&")}(?=\\s|[=,.;:]|$)`, "gmu")); if (!matches?.length) throw new Error(`${label} help does not document required interactive option ${JSON.stringify(value)}.`); } }
45
- function validateCommand(record: HerdrExternalCommandEvidence, binary: string, args: readonly string[], label: string): void {
46
- if (!path.posix.isAbsolute(record.binary) || path.posix.basename(record.binary) !== binary || record.args.length !== args.length || record.args.some((value, index) => value !== args[index])) throw new Error(`${label} preflight command identity is invalid.`);
47
- if (record.status !== 0) throw new Error(`${label} preflight exited ${record.status}: ${record.stderr.slice(0, 512)}`); for (const [name, value] of [["stdout", record.stdout], ["stderr", record.stderr]] as const) if (typeof value !== "string" || Buffer.byteLength(value) > MAX_PREFLIGHT_BYTES) throw new Error(`${label} preflight ${name} exceeded its bound.`);
48
- }
49
- function adapterKind(adapter: HerdrExternalAdapterId): HerdrExternalKind { return adapter.startsWith("claude") ? "claude" : adapter.startsWith("cursor") ? "cursor" : "codex"; }
50
- function adapterBinary(adapter: HerdrExternalAdapterId): string { return adapterKind(adapter) === "claude" ? "claude" : adapterKind(adapter) === "cursor" ? "cursor-agent" : "codex"; }
51
- function expectedStartedArgv(launch: HerdrExternalLaunch): string[] { return [launch.kind, ...launch.args]; }
52
- function sameStrings(actual: unknown, expected: readonly string[]): actual is string[] { return Array.isArray(actual) && actual.length === expected.length && actual.every((value, index) => value === expected[index]); }
53
- function validateStartedArgv(launch: HerdrExternalLaunch, actual: unknown): string[] { const expected = expectedStartedArgv(launch); if (!sameStrings(actual, expected)) throw new Error(`Herdr started ${launch.kind} with unexpected native argv.`); return [...actual]; }
54
- function canonicalPreflightBinary(adapter: HerdrExternalAdapterId, evidence: HerdrExternalPreflightEvidence): string { const binary = evidence.version.binary; if (!path.posix.isAbsolute(binary) || evidence.help.binary !== binary || path.posix.basename(binary) !== adapterBinary(adapter)) throw new Error("External preflight canonical binary identity is inconsistent."); return binary; }
55
- function matchesExternalProcess(entry: Record<string, unknown>, cwd: string, canonicalArgv0: string): boolean { const name = entry.name; return typeof entry.pid === "number" && typeof name === "string" && Boolean(name.trim()) && Buffer.byteLength(name) <= 128 && !/[\x00-\x1f\x7f]/u.test(name) && entry.argv0 === canonicalArgv0 && entry.cwd === cwd; }
56
- export function reconcileHerdrExternalRun(identity: HerdrRunIdentity, candidate: HerdrReconnectCandidate) { const check = reconcileHerdrPlacedRun(identity, candidate, () => ({ ok: true, cursor: 0 })); if (!check.ok) return check; if (check.paneId !== identity.paneId) return { ok: false as const, reason: "External reconnect refused pane identity drift." }; return check; }
57
-
58
- export function validateHerdrExternalPreflight(adapter: HerdrExternalAdapterId, evidence: HerdrExternalPreflightEvidence): void {
59
- const kind = adapterKind(adapter), binary = adapterBinary(adapter); validateCommand(evidence.version, binary, ["--version"], binary); validateCommand(evidence.help, binary, ["--help"], binary);
60
- canonicalPreflightBinary(adapter, evidence);
61
- const version = evidence.version.stdout.trim(), match = kind === "claude" ? version.match(/^(\d+)\.(\d+)\.(\d+) \(Claude Code\)$/u) : kind === "codex" ? version.match(/^codex-cli (\d+)\.(\d+)\.(\d+)$/u) : version.match(/^(\d{4})\.(\d{2})\.(\d{2})-[0-9a-f]+$/u); if (!match) throw new Error(`Unsupported ${binary} version response: ${JSON.stringify(version)}.`);
62
- const parsed: [number, number, number] = [Number(match[1]), Number(match[2]), Number(match[3])]; const floor: [number, number, number] = kind === "claude" ? [2, 1, 269] : kind === "codex" ? [0, 154, 0] : [2026, 9, 10]; if (!atLeast(parsed, floor)) throw new Error(`Remote ${binary} is below the tested pane-native capability floor.`);
63
- requireHelp(evidence.help.stdout, kind === "claude" ? ["--session-id", "--restricted", "--permission-mode", "--tools", "--strict-mcp-config", "--mcp-config", "--disable-slash-commands", "--no-chrome"] : kind === "cursor" ? ["--mode", "--sandbox", "--workspace", "--trust"] : ["--sandbox", "--ask-for-approval", "--no-alt-screen"], binary);
64
- }
65
- function commandEvidence(binary: string, args: readonly string[], result: ReturnType<HerdrPlacedRunOwner["runRemote"]>): HerdrExternalCommandEvidence { return { binary, args, status: result.status ?? -1, stdout: String(result.stdout), stderr: String(result.stderr) }; }
66
- export function runHerdrExternalPreflight(owner: HerdrPlacedRunOwner, adapter: HerdrExternalAdapterId): HerdrExternalPreflightEvidence {
67
- const name = adapterBinary(adapter), located = owner.runRemote(remoteShellCommand(`command -v ${name}`), { timeout: 10_000, maxBuffer: 4096 }), binary = String(located.stdout).trim(); if (located.status !== 0 || !path.posix.isAbsolute(binary) || path.posix.basename(binary) !== name || binary.includes("\n")) throw new Error(`Remote canonical ${name} binary could not be resolved.`);
68
- const invoke = (args: readonly string[]) => commandEvidence(binary, args, owner.runRemote(remoteShellCommand(adapterKind(adapter) === "cursor" ? `exec /usr/bin/env AGENT_CLI_CREDENTIAL_STORE=file ${shellQuoteRemote(binary)} "$@"` : `exec ${shellQuoteRemote(binary)} "$@"`, [...args]), { timeout: 10_000, maxBuffer: MAX_PREFLIGHT_BYTES })); const evidence = { version: invoke(["--version"]), help: invoke(["--help"]) }; validateHerdrExternalPreflight(adapter, evidence); return evidence;
69
- }
70
- export function createHerdrExternalAdapterLaunch(input: { adapter: HerdrExternalAdapterId; remoteRuntimeDir: string; cwd?: string; nativeSessionId?: string; model?: string; environment?: Readonly<Record<string, string>>; resources?: Readonly<Record<string, unknown>> }): HerdrExternalLaunch {
71
- if (!path.posix.isAbsolute(input.remoteRuntimeDir) || path.posix.basename(input.remoteRuntimeDir).length < 8) throw new Error("External adapter requires the accepted run-private remote runtime root."); if (input.environment && Object.keys(input.environment).length) throw new Error("Pane-native external adapters reject caller environment bindings; credentials remain machine-owned."); if (input.resources && Object.keys(input.resources).length) throw new Error("Pane-native external adapters do not accept expanded prompts, local paths, callbacks, tools, skills, or MCP bindings."); if (input.model !== undefined) throw new Error("Pane-native M2b adapters use the remote managed model registry and reject model override.");
72
- const nativeSessionId = input.nativeSessionId ?? randomUUID(); exactUuid(nativeSessionId, "External adapter native session identity"); const kind = adapterKind(input.adapter);
73
- if (kind === "claude") {
74
- const writer = input.adapter === "claude-code-writer";
75
- return { adapter: input.adapter, kind, nativeSessionId, capabilities: CAPABILITIES, args: ["--session-id", nativeSessionId, "--restricted", "--permission-mode", writer ? "acceptEdits" : "plan", "--tools", writer ? "Read,Write,Edit,Glob,Grep" : "", "--strict-mcp-config", "--mcp-config", "{\"mcpServers\":{}}", "--disable-slash-commands", "--no-chrome"] };
76
- }
77
- if (kind === "cursor") { if (!input.cwd || !path.posix.isAbsolute(input.cwd)) throw new Error("Pane-native Cursor requires the exact remote-absolute owned workspace."); return { adapter: input.adapter, kind, nativeSessionId, capabilities: CAPABILITIES, args: [...(input.adapter === "cursor-agent" ? ["--mode", "ask"] : []), "--sandbox", "enabled", "--workspace", input.cwd] }; }
78
- return { adapter: input.adapter, kind, nativeSessionId, capabilities: CAPABILITIES, args: ["--sandbox", input.adapter === "codex-exec-writer" ? "workspace-write" : "read-only", "--ask-for-approval", "never", "--no-alt-screen"] };
79
- }
80
-
81
- export interface HerdrCodexSnapshot { at: number; workspaceId: string; paneId: string; terminalId: string; pid: number; text: string; source?: "visible" | "recent_unwrapped" }
82
- export interface HerdrCodexMonitorClock { now(): number; wait(ms: number): Promise<void> }
83
- export class HerdrExternalNeedsAttentionError extends Error { readonly code = "HERDR_EXTERNAL_NEEDS_ATTENTION"; readonly identity: { machineId: string; workspaceId: string; paneId: string; terminalId: string }; constructor(message: string, identity: { machineId: string; workspaceId: string; paneId: string; terminalId: string }) { super(message); this.identity = identity; } }
84
- function sanitizeTerminal(input: string): string { const clean = stripVTControlCharacters(input).replace(/\r/g, "").replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/gu, "").replace(/[ \t]+$/gmu, "").trim(); const bytes = Buffer.from(clean); return bytes.length <= CODEX_OUTPUT_BYTES ? clean : bytes.subarray(bytes.length - CODEX_OUTPUT_BYTES).toString("utf8").replace(/^\uFFFD/u, ""); }
85
- function codexAttention(text: string): boolean { return /(?:trust this|do you trust the contents of this directory|approval required|approve\?|review (?:hook|action)|action required|permission required|error:|fatal:)/iu.test(text); }
86
- function codexWorking(text: string): boolean { return /(?:working|thinking|running|esc to interrupt|ctrl\+c to interrupt|•\s*[^\n]+…)/iu.test(text); }
87
- function codexReady(text: string): boolean { return /(?:›|>)\s*(?:Ask|Describe|Type)\b|(?:Ask|Describe) anything/iu.test(text); }
88
- function codexSubmissionEnd(text: string, task: string): number {
89
- const lines = text.split("\n").map((line) => line.trimEnd()), taskLines = task.split(/\r?\n/u).map((line) => line.trimEnd());
90
- for (let index = 0; index < lines.length; index++) {
91
- const first = lines[index]!.match(/^[›>]\s?(.*)$/u); if (!first || first[1] !== taskLines[0]) continue;
92
- if (taskLines.slice(1).every((line, offset) => lines[index + offset + 1] === line)) return index + taskLines.length;
93
- }
94
- return -1;
95
- }
96
- function codexAssistantOutput(text: string, task: string): string {
97
- const lines = text.split("\n").map((line) => line.trimEnd()), submittedEnd = codexSubmissionEnd(text, task); if (submittedEnd < 0) return ""; const after = lines.slice(submittedEnd).filter((line) => line.trim() && !codexReady(line) && !/^tokens? used\b/iu.test(line)); return after.join("\n").trim();
98
- }
99
- export async function monitorHerdrCodex(input: { machineId: string; task: string; preSubmitText: string; identity: Omit<HerdrCodexSnapshot, "at" | "text" | "source">; snapshot(): Promise<HerdrCodexSnapshot>; stop(): Promise<void>; timeoutMs?: number; clock?: HerdrCodexMonitorClock }): Promise<{ output: string; snapshots: number }> {
100
- const clock = input.clock ?? { now: () => Date.now(), wait: (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)) }, started = clock.now(), deadline = started + (input.timeoutMs ?? CODEX_DEFAULT_TIMEOUT_MS), expected = input.identity, before = sanitizeTerminal(input.preSubmitText); if (codexSubmissionEnd(before, input.task) >= 0) throw new HerdrExternalNeedsAttentionError("Codex pre-submit screen already contained the task; correlation is ambiguous.", { machineId: input.machineId, workspaceId: expected.workspaceId, paneId: expected.paneId, terminalId: expected.terminalId }); let previous = before, previousSource: HerdrCodexSnapshot["source"], lastChange = started, meaningful = false, stable = 0, reads = 0;
101
- const attention = (message: string) => new HerdrExternalNeedsAttentionError(message, { machineId: input.machineId, workspaceId: expected.workspaceId, paneId: expected.paneId, terminalId: expected.terminalId });
102
- while (clock.now() <= deadline) { const sample = await input.snapshot(); reads++; if (sample.workspaceId !== expected.workspaceId || sample.paneId !== expected.paneId || sample.terminalId !== expected.terminalId || sample.pid !== expected.pid) throw attention("Placed Codex identity drifted; truthful pane retained for inspection."); const text = sanitizeTerminal(sample.text), sourceChanged = previousSource !== undefined && sample.source !== previousSource; if (codexAttention(text)) throw attention("Placed Codex requires attention; truthful pane retained for inspection."); if (text !== previous || sourceChanged) { if (text !== previous) meaningful = true; previous = text; previousSource = sample.source; lastChange = clock.now(); stable = 0; } else { previousSource = sample.source; stable++; }
103
- const output = codexAssistantOutput(text, input.task), quiet = clock.now() - lastChange >= CODEX_QUIET_MS; if (sample.source === "recent_unwrapped" && clock.now() - started >= CODEX_STARTUP_GRACE_MS && meaningful && quiet && stable >= 1 && !codexWorking(text) && codexReady(text) && output) { await input.stop(); return { output: sanitizeTerminal(output), snapshots: reads }; }
104
- await clock.wait(CODEX_POLL_MS);
105
- }
106
- throw attention("Placed Codex settlement remained ambiguous until timeout; truthful pane retained for inspection.");
107
- }
108
- function normalizePlacedTerminal(input: HerdrExternalEvidenceInput, output: string, adapter: HerdrExternalAdapterId): HerdrExternalResult {
109
- if (input.requestedModel !== undefined) throw new Error("Pane-native external adapters use the remote managed model registry and reject model override.");
110
- return { protocol: 1, adapter, runId: input.runId, requestId: input.requestId, nativeSessionId: "unverified", nativeTurnId: "unverified", outcome: "partial", output: `[best-effort/unverified]\n${boundedString(sanitizeTerminal(output), "sanitized terminal output", CODEX_OUTPUT_BYTES)}`, settlement: { verification: "best-effort/unverified", evidence: "sanitized-terminal-snapshots" }, ...resultGit(input) };
111
- }
112
-
113
- export function createHerdrExternalAdapter(id: HerdrExternalAdapterId): HerdrExternalAdapter { const kind = adapterKind(id); return { id, kind, preflight: (evidence) => validateHerdrExternalPreflight(id, evidence), launch: (input) => createHerdrExternalAdapterLaunch({ adapter: id, ...input }), normalize: (input, evidence) => normalizePlacedTerminal(input, Buffer.isBuffer(evidence) ? evidence.toString("utf8") : evidence, id) }; }
114
-
115
- function unwrap<T extends Record<string, unknown>>(value: unknown, type: string, key: string): T { if (!value || typeof value !== "object" || (value as Record<string, unknown>).type !== type || !(key in (value as Record<string, unknown>))) throw new Error(`Herdr returned invalid ${type} evidence.`); return (value as Record<string, T>)[key]!; }
116
- export class HerdrExternalSession {
117
- readonly owner: HerdrPlacedRunOwner; readonly launch: HerdrExternalLaunch; readonly preflight: HerdrExternalPreflightEvidence; readonly #adapter: HerdrExternalAdapter; readonly #connect: typeof connectHerdrMachine; #settled = false; #prompted = false; #nativePid?: number; #cursorWorkspace?: { realpath: string; device: number; inode: number; uid: number }; #reconnectPromise?: Promise<void>; #disposePromise?: Promise<void>;
118
- #reconnectCandidatesRemaining = 3; #reconnectDeadline?: number; #reconnectFailure?: Error;
119
- constructor(owner: HerdrPlacedRunOwner, launch: HerdrExternalLaunch, preflight: HerdrExternalPreflightEvidence, connect: typeof connectHerdrMachine = connectHerdrMachine) { this.owner = owner; this.launch = launch; this.preflight = preflight; this.#adapter = createHerdrExternalAdapter(launch.adapter); this.#connect = connect; }
120
- settle(input: HerdrExternalEvidenceInput, evidence: Buffer | string): HerdrExternalResult { if (this.#settled || this.#disposePromise) throw new Error("Pane-native external run evidence already settled or disposed."); if (input.nativeSessionId !== this.launch.nativeSessionId) throw new Error("Pane-native external evidence session identity changed."); const result = this.#adapter.normalize(input, evidence); this.#settled = true; return result; }
121
- async promptAndSettle(input: HerdrExternalEvidenceInput, options: { timeoutMs?: number; clock?: HerdrCodexMonitorClock; snapshot?: () => Promise<HerdrCodexSnapshot> } = {}): Promise<HerdrExternalResult> {
122
- if (this.#prompted || this.#settled || this.#disposePromise) throw new Error("Pane-native external task was already submitted, settled, or disposed."); this.#prompted = true; if (!this.owner.agentName || !this.owner.owned || !this.owner.terminalId) throw new Error("Pane-native external owner identity is incomplete.");
123
- let preSubmitText = "";
124
- if (this.launch.kind === "cursor") { try { this.#cursorWorkspace = this.#proveCursorWorkspace(); } catch (error) { throw this.#needsAttention(`Placed Cursor requires attention before input: ${error instanceof Error ? error.message : String(error)}; truthful pane retained for inspection.`); } }
125
- if (this.launch.kind === "cursor" || this.launch.kind === "codex") { const ready = await this.#waitForStartup(options.clock); preSubmitText = ready.text; this.#nativePid = ready.pid; }
126
- else this.#nativePid = (await this.#exactProcess()).pid;
127
- const waitTimeout = Math.min(Math.max(1, options.timeoutMs ?? 90_000), CODEX_DEFAULT_TIMEOUT_MS), params: Record<string, unknown> = { target: this.owner.agentName, text: input.task };
128
- if (this.launch.kind !== "codex") params.wait = { until: ["idle", "done", "blocked"], timeout_ms: waitTimeout };
129
- let response: unknown, recovered = false; try { response = await this.owner.connection.client.call("agent.prompt", params, waitTimeout + 5_000); } catch (error) { if (error instanceof HerdrRpcError || !(error instanceof HerdrTransportError)) throw error; if (this.owner.snapshot.connection !== "unknown") throw this.#needsAttention(`Placed external prompt settlement is unresolved: ${error.message}; truthful pane retained for inspection.`); await this.reconnect(); response = await this.owner.connection.client.call("agent.get", { target: this.owner.agentName }); recovered = true; }
130
- const prompted = parseHerdrAgent(response, recovered ? "agent_info" : "agent_prompted"); if (!ownsHerdrPane(prompted, this.owner.terminalId, this.owner.owned.paneId)) throw new Error("Herdr prompt settlement identity changed.");
131
- if (this.launch.kind !== "codex" && prompted.agent_status !== "idle" && prompted.agent_status !== "done") throw this.#needsAttention(`Herdr external prompt did not settle safely (status ${String(prompted.agent_status)}); truthful pane retained for inspection.`);
132
- await this.#exactProcessAfterReconnect(this.#nativePid);
133
- if (this.launch.kind === "cursor") this.#assertSameCursorWorkspace();
134
- if (this.launch.kind !== "codex") {
135
- const terminal = await this.#readSettledPane();
136
- this.#settled = true;
137
- return normalizePlacedTerminal(input, terminal, this.launch.adapter);
138
- }
139
- const expected = { workspaceId: this.owner.owned.workspaceId, paneId: this.owner.owned.paneId, terminalId: this.owner.terminalId, pid: this.#nativePid }, snapshot = options.snapshot ?? (() => this.#codexSnapshot(this.#nativePid!)); const monitored = await monitorHerdrCodex({ machineId: this.owner.machine.id, task: input.task, preSubmitText, identity: expected, snapshot, stop: () => this.owner.cleanup(true), timeoutMs: waitTimeout, clock: options.clock }); this.#settled = true; return normalizePlacedTerminal(input, monitored.output, this.launch.adapter);
140
- }
141
- #needsAttention(message: string): HerdrExternalNeedsAttentionError { return new HerdrExternalNeedsAttentionError(message, { machineId: this.owner.machine.id, workspaceId: this.owner.owned!.workspaceId, paneId: this.owner.owned!.paneId, terminalId: this.owner.terminalId! }); }
142
- #proveCursorWorkspace(): { realpath: string; device: number; inode: number; uid: number } { const script = `const fs=require("node:fs"),p=process.argv[1],s=fs.lstatSync(p),r=fs.realpathSync(p),u=process.getuid();if(!s.isDirectory()||s.isSymbolicLink()||r!==p||s.uid!==u||(s.mode&18)!==0)process.exit(65);process.stdout.write(JSON.stringify({realpath:r,device:s.dev,inode:s.ino,uid:s.uid}))`, raw = this.#remoteEvidence(script, [this.owner.machine.cwd]); let value: unknown; try { value = JSON.parse(raw); } catch { throw new Error("Cursor workspace identity evidence is malformed."); } const data = value as Record<string, unknown>; if (!data || data.realpath !== this.owner.machine.cwd || !Number.isSafeInteger(data.device) || !Number.isSafeInteger(data.inode) || !Number.isSafeInteger(data.uid)) throw new Error("Cursor workspace is not the exact canonical owned safe directory."); return data as unknown as { realpath: string; device: number; inode: number; uid: number }; }
143
- #assertSameCursorWorkspace(): void { const current = this.#proveCursorWorkspace(), expected = this.#cursorWorkspace; if (!expected || current.realpath !== expected.realpath || current.device !== expected.device || current.inode !== expected.inode || current.uid !== expected.uid) throw new Error("Cursor workspace identity changed before settlement."); }
144
- async #readCurrentPane(): Promise<string> { const value = await this.owner.connection.client.call("pane.read", { pane_id: this.owner.owned!.paneId, source: "visible", strip_ansi: true }), read = unwrap<Record<string, unknown>>(value, "pane_read", "read"); if (read.pane_id !== this.owner.owned!.paneId) throw new Error("External pane read identity changed."); return String(read.text ?? ""); }
145
- async #readSettledPane(): Promise<string> { const value = await this.owner.connection.client.call("pane.read", { pane_id: this.owner.owned!.paneId, source: "recent_unwrapped", lines: 400, strip_ansi: true }), read = unwrap<Record<string, unknown>>(value, "pane_read", "read"); if (read.pane_id !== this.owner.owned!.paneId || read.source !== "recent_unwrapped") throw new Error("External terminal evidence identity or source changed."); return String(read.text ?? ""); }
146
- #cursorReady(text: string): boolean { if (/trust (?:this|workspace|folder)|untrusted/iu.test(text) || codexAttention(text)) throw this.#needsAttention("Placed Cursor requires trust or other attention before input; truthful pane retained for inspection."); return /(?:Ask|Plan|Agent)\b/iu.test(text); }
147
- async #processProjection(): Promise<{ processes: Record<string, unknown>[]; canonical: Record<string, unknown>[] }> { validateStartedArgv(this.launch, this.owner.startedArgv); const canonicalArgv0 = path.posix.basename(canonicalPreflightBinary(this.launch.adapter, this.preflight)), value = await this.owner.connection.client.call("pane.process_info", { pane_id: this.owner.owned!.paneId }), info = unwrap<Record<string, unknown>>(value, "pane_process_info", "process_info"); if (info.pane_id !== this.owner.owned!.paneId) throw new Error("External process evidence pane identity changed."); if (!Array.isArray(info.foreground_processes)) throw new Error("External process evidence foreground process projection is malformed."); const processes = info.foreground_processes as Record<string, unknown>[]; return { processes, canonical: processes.filter((entry) => matchesExternalProcess(entry, this.owner.machine.cwd, canonicalArgv0)) }; }
148
- async #exactProcess(requiredPid?: number): Promise<{ pid: number }> { const projection = await this.#processProjection(), canonical = projection.canonical[0]; if (projection.canonical.length !== 1 || requiredPid !== undefined && canonical?.pid !== requiredPid) throw new Error(`Could not prove exactly one canonical ${path.posix.basename(this.preflight.version.binary)} native PID with the exact cwd${requiredPid === undefined ? "" : " and retained PID"}.`); return { pid: canonical!.pid as number }; }
149
- async #exactProcessAfterReconnect(requiredPid: number): Promise<{ pid: number }> { try { return await this.#exactProcess(requiredPid); } catch (error) { if (!(error instanceof HerdrTransportError) || this.owner.snapshot.connection !== "unknown") throw error; await this.reconnect(); return this.#exactProcess(requiredPid); } }
150
- async #waitForStartup(clock: HerdrCodexMonitorClock = { now: () => Date.now(), wait: (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)) }): Promise<{ pid: number; text: string }> { const started = clock.now(), deadline = started + EXTERNAL_STARTUP_TIMEOUT_MS; let last = "not ready"; for (;;) { const text = await this.#readCurrentPane(); let uiReady: boolean; if (this.launch.kind === "cursor") uiReady = this.#cursorReady(text); else { if (codexAttention(text)) throw this.#needsAttention("Placed Codex requires attention before input; truthful pane retained for inspection."); uiReady = codexReady(text); } const projection = await this.#processProjection(); const current = parseHerdrAgent(await this.owner.connection.client.call<Record<string, unknown>>("agent.get", { target: this.owner.agentName }), "agent_info"); if (!ownsHerdrPane(current, this.owner.terminalId!, this.owner.owned!.paneId) || current.name !== this.owner.agentName) throw new Error("External startup agent owner, pane, terminal, or name identity changed."); const status = current.agent_status; if (status === "blocked" || status === "action_required") throw this.#needsAttention(`Placed ${this.launch.kind === "cursor" ? "Cursor" : "Codex"} requires attention before input; truthful pane retained for inspection.`); if (current.interactive_ready === true && current.agent !== this.launch.kind) throw new Error("External startup agent kind identity changed."); const managedReady = current.agent === this.launch.kind && current.interactive_ready === true && current.launch_pending !== true && (status === "idle" || status === "done"); if (uiReady && projection.canonical.length === 1 && managedReady) return { pid: projection.canonical[0]!.pid as number, text }; last = `${uiReady ? "ready UI" : "startup UI"}; ${projection.canonical.length} canonical processes; managed ${managedReady ? "ready" : String(status ?? "unknown")}`; const now = clock.now(); if (now >= deadline) break; const poll = now - started < EXTERNAL_STARTUP_BACKOFF_AFTER_MS ? CODEX_POLL_MS : EXTERNAL_STARTUP_SLOW_POLL_MS; await clock.wait(Math.min(poll, deadline - now)); } throw this.#needsAttention(`Placed ${this.launch.kind === "cursor" ? "Cursor" : "Codex"} startup did not stabilize (${last}); truthful pane retained for inspection.`); }
151
- async #codexSnapshotOnce(pid: number): Promise<HerdrCodexSnapshot> { const current = parseHerdrAgent(await this.owner.connection.client.call<Record<string, unknown>>("agent.get", { target: this.owner.agentName }), "agent_info"); if (!ownsHerdrPane(current, this.owner.terminalId!, this.owner.owned!.paneId)) throw new Error("Codex owner identity changed."); const status = current.agent_status, source = status === "idle" || status === "done" ? "recent_unwrapped" : "visible", process = await this.#exactProcess(pid), read = unwrap<Record<string, unknown>>(await this.owner.connection.client.call("pane.read", { pane_id: this.owner.owned!.paneId, source, lines: 400, strip_ansi: true }), "pane_read", "read"); if (read.pane_id !== this.owner.owned!.paneId || read.source !== source) throw new Error("Codex pane read identity or source changed."); return { at: Date.now(), workspaceId: this.owner.owned!.workspaceId, paneId: String(read.pane_id), terminalId: this.owner.terminalId!, pid: process.pid, text: String(read.text ?? ""), source }; }
152
- async #codexSnapshot(pid: number): Promise<HerdrCodexSnapshot> { try { return await this.#codexSnapshotOnce(pid); } catch (error) { if (!(error instanceof HerdrTransportError) || this.owner.snapshot.connection !== "unknown") throw error; await this.reconnect(); return this.#codexSnapshotOnce(pid); } }
153
- #remoteEvidence(script: string, args: string[]): string { const result = this.owner.runRemote(remoteShellCommand(`exec node -e ${shellQuoteRemote(script)} "$@"`, args), { timeout: 10_000, maxBuffer: MAX_EVIDENCE_BYTES }); if (result.status !== 0 || result.stderr) throw new Error(`Could not read exact owned external evidence: ${String(result.stderr).slice(0, 512)}`); return String(result.stdout); }
154
- handleDisconnect(observed: HerdrForwardedConnection = this.owner.connection): void { const owner = this.owner as HerdrPlacedRunOwner & { markConnectionUnknown?: (connection: HerdrForwardedConnection) => boolean }; if (owner.markConnectionUnknown ? !owner.markConnectionUnknown(observed) : this.owner.connection !== observed) return; void this.reconnect().catch(() => {}); }
155
- reconnect(): Promise<void> { if (this.#reconnectFailure) return Promise.reject(this.#reconnectFailure); return this.#reconnectPromise ??= this.#performReconnect().catch((error) => { const failure = error instanceof Error ? error : new Error(String(error)); if (/reconnect remains unknown/u.test(failure.message)) this.#reconnectFailure = failure; throw failure; }).finally(() => { this.#reconnectPromise = undefined; }); }
156
- async #performReconnect(): Promise<void> { if (this.#disposePromise) throw new Error("External reconnect is blocked because disposal or retention has begun."); if (!this.owner.identity) throw new Error("External reconnect has no persisted owner identity."); this.#reconnectDeadline ??= Date.now() + 15_000; let last: unknown; while (this.#reconnectCandidatesRemaining > 0 && Date.now() < this.#reconnectDeadline) { this.#reconnectCandidatesRemaining--; let connection: HerdrForwardedConnection | undefined, unsubscribe = () => {}, adopted = false, candidateLost: Error | undefined; try { if (this.#disposePromise) throw new Error("External reconnect is blocked because disposal or retention has begun."); connection = await this.#connect(this.owner.machine); const value = await connection.client.call<Record<string, unknown>>("session.snapshot"), envelope = unwrap<Record<string, unknown>>(value, "session_snapshot", "snapshot"), raw = Array.isArray(envelope.agents) ? envelope.agents as Record<string, unknown>[] : [], agents = raw.map((agent) => ({ terminal_id: typeof agent.terminal_id === "string" ? agent.terminal_id : undefined, pane_id: typeof agent.pane_id === "string" ? agent.pane_id : undefined, agent_status: typeof agent.agent_status === "string" ? agent.agent_status : undefined }));
157
- const check = reconcileHerdrExternalRun(this.owner.identity, { endpoint: connection.endpoint, agents, bridge: {} }); if (!check.ok) throw new Error(check.reason);
158
- if (this.#nativePid !== undefined) { validateStartedArgv(this.launch, this.owner.startedArgv); const canonicalArgv0 = path.posix.basename(canonicalPreflightBinary(this.launch.adapter, this.preflight)), process = unwrap<Record<string, unknown>>(await connection.client.call("pane.process_info", { pane_id: this.owner.identity.paneId }), "pane_process_info", "process_info"), rows = Array.isArray(process.foreground_processes) ? process.foreground_processes as Record<string, unknown>[] : [], canonical = rows.filter((row) => matchesExternalProcess(row, this.owner.identity!.cwd, canonicalArgv0)); if (process.pane_id !== this.owner.identity.paneId || canonical.length !== 1 || canonical[0]!.pid !== this.#nativePid) throw new Error("External canonical native PID, cwd, or argv0 changed during reconnect."); }
159
- const observed = connection; unsubscribe = await connection.client.subscribe(herdrStatusSubscriptions(check.paneId), (event) => this.owner.observeEvent?.(event), (error) => { if (!adopted) { candidateLost ??= error; return; } this.handleDisconnect(observed); }); if (candidateLost) throw candidateLost; if (this.#disposePromise) throw new Error("External reconnect is blocked because disposal or retention has begun."); adopted = true; await this.owner.replaceConnection({ connection, unsubscribe, paneId: check.paneId, state: check.state }); return;
160
- } catch (error) { last = error; unsubscribe(); await connection?.close(); }
161
- } if (this.#disposePromise) throw new Error("External reconnect is blocked because disposal or retention has begun."); throw new Error(`Pane-native external reconnect remains unknown: ${last instanceof Error ? last.message : String(last)}`); }
162
- retain(): Promise<void> { return this.#disposePromise ??= this.owner.cleanup(false); }
163
- abort(): Promise<void> { return this.#dispose(); } dispose(): Promise<void> { return this.#dispose(); } #dispose(): Promise<void> { return this.#disposePromise ??= this.owner.cleanup(true); }
164
- }
165
-
166
- export async function prepareInternalHerdrExternalAdapter(input: { adapter: HerdrExternalAdapterId; machine: HerdrMachineReference; runId: string }, launch: Omit<Parameters<typeof createHerdrExternalAdapterLaunch>[0], "adapter" | "remoteRuntimeDir" | "cwd">, createOwner: typeof HerdrPlacedRunOwner.create = HerdrPlacedRunOwner.create): Promise<HerdrExternalSession> {
167
- let evidence: HerdrExternalPreflightEvidence | undefined; const owner = await createOwner(input.machine, input.runId, (owned) => { evidence = runHerdrExternalPreflight(owned, input.adapter); });
168
- try { const descriptor = createHerdrExternalAdapterLaunch({ adapter: input.adapter, remoteRuntimeDir: owner.runtimeDir, ...launch, cwd: input.machine.cwd }); let session: HerdrExternalSession | undefined; const owned = await owner.provision({}); await owner.subscribe(() => {}, () => { void session?.reconnect().catch(() => {}); }); const agentName = `${descriptor.kind}-${input.runId.slice(-20)}`, started = await owner.start(descriptor.kind, agentName, descriptor.args); validateStartedArgv(descriptor, started.argv); owner.journal({ runId: input.runId, machineId: input.machine.id, target: input.machine.target, session: owner.connection.endpoint.session, workspaceId: owned.workspaceId, tabId: owned.tabId, paneId: owned.paneId, terminalId: started.terminalId, agentName, nativeSessionId: descriptor.nativeSessionId, cwd: input.machine.cwd, runtimeDir: owner.runtimeDir }); return session = new HerdrExternalSession(owner, descriptor, evidence!); } catch (error) { try { await owner.cleanup(true); } catch (cleanupError) { throw new AggregateError([error, cleanupError], "External adapter preparation and cleanup both failed.", { cause: error }); } throw error; }
169
- }
@@ -1,279 +0,0 @@
1
- import { spawnSync } from "node:child_process";
2
- import * as fs from "node:fs";
3
- import * as path from "node:path";
4
- import type { ExternalProcessStatus, HerdrMachineReference } from "../../shared/types.ts";
5
- import { getAgentDir, getProjectConfigDir } from "../../shared/utils.ts";
6
- import { CODE_OWNED_EXTERNAL_CLI_ADAPTER_IDS, type CodeOwnedExternalCliAdapterId } from "./external-cli-contract.ts";
7
- import type { runExternalCli } from "./external-cli-runner.ts";
8
- export { shellQuoteRemote as shellQuote } from "./herdr-connection.ts";
9
-
10
- /**
11
- * Herdr saved-machine placement for external CLI children.
12
- *
13
- * Herdr owns which machines exist and how ssh reaches them (`herdr machine list --json`).
14
- * pi-subagents owns what runs there: native Pi and the six code-owned external profiles are
15
- * launched in fresh Herdr-owned visible panes. SSH is bounded transport and never owns the agent.
16
- * `cwd` means the directory on that machine; the remote `cd` is the directory check.
17
- */
18
-
19
- const MAX_MACHINE_NAME_LENGTH = 128;
20
- const HERDR_MACHINE_LIST_TIMEOUT_MS = 7_500;
21
- const MAX_HERDR_MACHINE_LIST_BYTES = 1024 * 1024;
22
- const CONTROL_CHARS = /[\u0000-\u001f\u007f]/u;
23
- const SUPPORTED_MACHINE_ADAPTERS = new Set<string>(CODE_OWNED_EXTERNAL_CLI_ADAPTER_IDS);
24
- /** The local ssh process gets only what ssh itself needs; remote runs use the machine's own credentials. */
25
- export const HERDR_SSH_ENV_ALLOWLIST = ["PATH", "HOME", "USER", "LOGNAME", "TMPDIR", "SSH_AUTH_SOCK"] as const;
26
-
27
- type RunExternalCliInput = Parameters<typeof runExternalCli>[0];
28
-
29
- interface HerdrMachineCatalogEntry {
30
- id: string;
31
- label?: string;
32
- target: string;
33
- session?: string;
34
- enabled: boolean;
35
- }
36
-
37
- interface MachineSettingsEntry {
38
- cwd?: string;
39
- env?: Record<string, string>;
40
- }
41
-
42
- export interface ResolveHerdrMachinePlacementInput {
43
- /** Profile id or label as typed by the operator. */
44
- machine: string;
45
- /** Local directory whose project settings hold `subagents.machines`. */
46
- cwd: string;
47
- /** Launch cwd: absolute or `~` paths are remote paths as given; relative paths join the configured machine root. */
48
- stepCwd?: string;
49
- env?: NodeJS.ProcessEnv;
50
- /** Test seam: catalog JSON instead of spawning `herdr machine list --json`. */
51
- catalogJson?: string;
52
- /** Test seam: settings entry instead of reading settings files. */
53
- settings?: MachineSettingsEntry;
54
- herdrBin?: string;
55
- }
56
-
57
- export interface HerdrMachinePlacement {
58
- machine: HerdrMachineReference;
59
- /** Opt-in `subagents.machines.<name>.env`, exported in front of the remote command. */
60
- env?: Record<string, string>;
61
- }
62
-
63
- export interface PreparedHerdrMachineExternalCliRun {
64
- input: RunExternalCliInput;
65
- decorateProcess(process: ExternalProcessStatus): ExternalProcessStatus;
66
- }
67
-
68
- function validateMachineName(value: string): string {
69
- const trimmed = value.trim();
70
- if (!trimmed) throw new Error("Herdr machine id or label is required.");
71
- if (trimmed.length > MAX_MACHINE_NAME_LENGTH) throw new Error(`Herdr machine '${trimmed.slice(0, 24)}…' exceeds ${MAX_MACHINE_NAME_LENGTH} characters.`);
72
- if (CONTROL_CHARS.test(trimmed)) throw new Error("Herdr machine id or label contains control characters.");
73
- return trimmed;
74
- }
75
-
76
- function validateTarget(value: string, requested: string): string {
77
- const target = value.trim();
78
- if (!target || target.startsWith("-") || /[\s\u0000-\u001f\u007f]/u.test(target)) {
79
- throw new Error(`Herdr machine '${requested}' has an ssh target that cannot be passed safely: ${JSON.stringify(target)}.`);
80
- }
81
- return target;
82
- }
83
-
84
- function isRemoteAbsolute(value: string): boolean {
85
- return value.startsWith("/") || value === "~" || value.startsWith("~/");
86
- }
87
-
88
- function validateRemoteCwd(value: string, requested: string): string {
89
- const cwd = value.trim();
90
- if (!isRemoteAbsolute(cwd)) throw new Error(`Herdr machine '${requested}' cwd must be an absolute POSIX path or start with '~': ${JSON.stringify(cwd)}.`);
91
- if (CONTROL_CHARS.test(cwd)) throw new Error(`Herdr machine '${requested}' cwd contains control characters.`);
92
- return cwd.length > 1 ? cwd.replace(/\/+$/u, "") : cwd;
93
- }
94
-
95
- function parseMachineCatalog(json: string): HerdrMachineCatalogEntry[] {
96
- let parsed: unknown;
97
- try {
98
- parsed = JSON.parse(json) as unknown;
99
- } catch (error) {
100
- throw new Error(`Failed to parse herdr machine list --json: ${error instanceof Error ? error.message : String(error)}`);
101
- }
102
- const entries = Array.isArray(parsed) ? parsed : (parsed && typeof parsed === "object" && Array.isArray((parsed as Record<string, unknown>).machines) ? (parsed as Record<string, unknown[]>).machines : undefined);
103
- if (!entries) throw new Error("herdr machine list --json returned no machine list.");
104
- return entries.flatMap((entry) => {
105
- if (!entry || typeof entry !== "object" || Array.isArray(entry)) return [];
106
- const record = entry as Record<string, unknown>;
107
- if (typeof record.id !== "string" || !record.id.trim() || typeof record.target !== "string") return [];
108
- return [{
109
- id: record.id.trim(),
110
- ...(typeof record.label === "string" && record.label.trim() ? { label: record.label.trim() } : {}),
111
- target: record.target,
112
- ...(typeof record.session === "string" && record.session.trim() ? { session: record.session.trim() } : {}),
113
- enabled: record.enabled !== false,
114
- }];
115
- });
116
- }
117
-
118
- function readHerdrMachineCatalog(env: NodeJS.ProcessEnv, herdrBin: string): HerdrMachineCatalogEntry[] {
119
- const result = spawnSync(herdrBin, ["machine", "list", "--json"], {
120
- env,
121
- encoding: "utf-8",
122
- maxBuffer: MAX_HERDR_MACHINE_LIST_BYTES,
123
- timeout: HERDR_MACHINE_LIST_TIMEOUT_MS,
124
- windowsHide: true,
125
- });
126
- if (result.error) {
127
- const code = (result.error as NodeJS.ErrnoException).code;
128
- if (code === "ENOENT") throw new Error(`Herdr CLI '${herdrBin}' was not found on PATH. Saved-machine placement needs Herdr installed locally.`);
129
- throw new Error(`Failed to run herdr machine list --json: ${result.error.message}`);
130
- }
131
- if (result.status !== 0) throw new Error(`herdr machine list --json exited with code ${result.status}: ${(result.stderr || result.stdout).trim()}`);
132
- return parseMachineCatalog(result.stdout);
133
- }
134
-
135
- /** Mirrors Herdr's own selector rules: profile id first, then a unique case-sensitive label; disabled fails closed. */
136
- function selectMachine(catalog: HerdrMachineCatalogEntry[], requested: string): HerdrMachineCatalogEntry {
137
- const byId = catalog.find((entry) => entry.id === requested);
138
- const matches = byId ? [byId] : catalog.filter((entry) => entry.label === requested);
139
- if (matches.length > 1) throw new Error(`Machine label '${requested}' is ambiguous; use its profile ID.`);
140
- const machine = matches[0];
141
- if (!machine) {
142
- const saved = catalog.filter((entry) => entry.enabled).map((entry) => entry.label ?? entry.id);
143
- throw new Error(`Herdr machine '${requested}' was not found. Saved machines: ${saved.length ? saved.join(", ") : "none"}. Add one with herdr machine add <target> --label <name>.`);
144
- }
145
- if (!machine.enabled) throw new Error(`Machine '${requested}' is disabled. Run herdr machine enable ${machine.id}.`);
146
- return machine;
147
- }
148
-
149
- function readJsonObject(filePath: string): Record<string, unknown> {
150
- if (!fs.existsSync(filePath)) return {};
151
- let parsed: unknown;
152
- try {
153
- parsed = JSON.parse(fs.readFileSync(filePath, "utf-8")) as unknown;
154
- } catch (error) {
155
- throw new Error(`Failed to read settings file '${filePath}': ${error instanceof Error ? error.message : String(error)}`);
156
- }
157
- return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed as Record<string, unknown> : {};
158
- }
159
-
160
- function machineSettingsFrom(settings: Record<string, unknown>, keys: readonly string[], filePath: string): MachineSettingsEntry | undefined {
161
- const subagents = settings.subagents;
162
- if (!subagents || typeof subagents !== "object" || Array.isArray(subagents)) return undefined;
163
- const machines = (subagents as Record<string, unknown>).machines;
164
- if (machines === undefined) return undefined;
165
- if (!machines || typeof machines !== "object" || Array.isArray(machines)) throw new Error(`Subagent settings in '${filePath}' have invalid 'machines'; expected an object keyed by machine label or id.`);
166
- const key = keys.find((candidate) => candidate in (machines as Record<string, unknown>));
167
- if (key === undefined) return undefined;
168
- const value = (machines as Record<string, unknown>)[key];
169
- if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error(`Subagent settings in '${filePath}' have invalid 'machines.${key}'; expected an object with 'cwd' and optional 'env'.`);
170
- const record = value as Record<string, unknown>;
171
- const entry: MachineSettingsEntry = {};
172
- if (record.cwd !== undefined) {
173
- if (typeof record.cwd !== "string" || !record.cwd.trim()) throw new Error(`Subagent settings in '${filePath}' have invalid 'machines.${key}.cwd'; expected a non-empty string.`);
174
- entry.cwd = validateRemoteCwd(record.cwd, key);
175
- }
176
- if (record.env !== undefined) {
177
- if (!record.env || typeof record.env !== "object" || Array.isArray(record.env) || Object.entries(record.env).some(([name, item]) => !/^[A-Za-z_][A-Za-z0-9_]*$/u.test(name) || typeof item !== "string")) {
178
- throw new Error(`Subagent settings in '${filePath}' have invalid 'machines.${key}.env'; expected an object of string values keyed by variable name.`);
179
- }
180
- entry.env = { ...(record.env as Record<string, string>) };
181
- if (Object.keys(entry.env).length > 0) {
182
- throw new Error(`Subagent settings in '${filePath}' set 'machines.${key}.env'. Saved-machine runs use the remote Herdr/Pi environment; configure credentials and environment on '${key}' and remove the local env map.`);
183
- }
184
- }
185
- return entry;
186
- }
187
-
188
- /** Project settings beat user settings, field by field; the entry may be keyed by label, id, or the typed selector. */
189
- function readMachineSettings(cwd: string, keys: readonly string[]): MachineSettingsEntry | undefined {
190
- const userPath = path.join(getAgentDir(), "settings.json");
191
- const projectPath = path.join(getProjectConfigDir(findProjectRootForSettings(cwd)), "settings.json");
192
- const user = machineSettingsFrom(readJsonObject(userPath), keys, userPath);
193
- const project = projectPath === userPath ? undefined : machineSettingsFrom(readJsonObject(projectPath), keys, projectPath);
194
- if (!user && !project) return undefined;
195
- return { ...user, ...project };
196
- }
197
-
198
- function findProjectRootForSettings(cwd: string): string {
199
- let current = path.resolve(cwd);
200
- while (true) {
201
- if (fs.existsSync(path.join(getProjectConfigDir(current), "settings.json"))) return current;
202
- const parent = path.dirname(current);
203
- if (parent === current) return path.resolve(cwd);
204
- current = parent;
205
- }
206
- }
207
-
208
- export function resolveHerdrMachinePlacement(input: ResolveHerdrMachinePlacementInput): HerdrMachinePlacement {
209
- const requested = validateMachineName(input.machine);
210
- const catalog = input.catalogJson !== undefined
211
- ? parseMachineCatalog(input.catalogJson)
212
- : readHerdrMachineCatalog(input.env ?? process.env, input.herdrBin ?? process.env.HERDR_BIN ?? "herdr");
213
- const selected = selectMachine(catalog, requested);
214
- const name = selected.label ?? selected.id;
215
- const keys = [...new Set([requested, ...(selected.label ? [selected.label] : []), selected.id])];
216
- const settings = input.settings ?? readMachineSettings(input.cwd, keys);
217
- if (settings?.env && Object.keys(settings.env).length > 0) {
218
- throw new Error(`Saved-machine environment for '${name}' must be configured remotely. Remove machines.${name}.env and configure the remote Herdr/Pi session instead.`);
219
- }
220
- const stepCwd = input.stepCwd?.trim();
221
- let cwd: string;
222
- if (stepCwd && isRemoteAbsolute(stepCwd)) cwd = stepCwd;
223
- else if (settings?.cwd) cwd = stepCwd ? path.posix.join(settings.cwd, stepCwd) : settings.cwd;
224
- else throw new Error(`No root for ${name} in this repo. Set subagents.machines.${name}.cwd in .pi/settings.json or pass an absolute cwd on that machine.`);
225
- return {
226
- machine: {
227
- provider: "herdr",
228
- id: selected.id,
229
- ...(selected.label ? { label: selected.label } : {}),
230
- target: validateTarget(selected.target, requested),
231
- ...(selected.session && selected.session !== "default" ? { session: selected.session } : {}),
232
- cwd: validateRemoteCwd(cwd, requested),
233
- },
234
- ...(settings?.env ? { env: settings.env } : {}),
235
- };
236
- }
237
-
238
- export function formatHerdrMachineRunnerUnsupported(input: {
239
- machine?: string;
240
- agentName: string;
241
- runnerType?: string;
242
- adapter?: string;
243
- worktree?: boolean;
244
- }): string | undefined {
245
- if (input.machine === undefined) return undefined;
246
- if (input.runnerType !== undefined && input.runnerType !== "pi" && input.runnerType !== "external-cli") {
247
- return `Agent '${input.agentName}' requested machine '${input.machine}', but this runner cannot use pane-native Herdr placement. Use native Pi or a built-in Claude, Codex, or Cursor profile.`;
248
- }
249
- if (input.runnerType === "external-cli" && (input.adapter === undefined || !SUPPORTED_MACHINE_ADAPTERS.has(input.adapter))) {
250
- return `Agent '${input.agentName}' requested machine '${input.machine}', but generic external-cli commands cannot be remote-wrapped safely. Use claude-code, claude-code-writer, codex-exec, codex-exec-writer, cursor-agent, or cursor-agent-writer.`;
251
- }
252
- if (input.worktree === true) return `Agent '${input.agentName}' requested machine '${input.machine}', but managed worktrees are local git operations and cannot be combined with a Herdr saved machine.`;
253
- if (process.platform === "win32") return "Herdr saved-machine pane transport requires hardened OpenSSH StreamLocal forwarding, which is not supported from a Windows host yet.";
254
- return undefined;
255
- }
256
-
257
- /** Legacy local-child SSH wrapping is intentionally unavailable after the pane-native cut-over. */
258
- export function prepareHerdrMachineExternalCliRun(input: RunExternalCliInput, placement: HerdrMachinePlacement | undefined, _options: { localCwd: string }): PreparedHerdrMachineExternalCliRun {
259
- if (placement) throw new Error("Saved-machine external profiles must run in a Herdr-owned pane.");
260
- return { input, decorateProcess: (process) => process };
261
- }
262
- const HINTS: ReadonlyArray<readonly [RegExp, (machine: HerdrMachineReference) => string]> = [
263
- [/Host key verification failed|REMOTE HOST IDENTIFICATION HAS CHANGED|Permission denied \(publickey|Permission denied, please try again|No such identity|Could not resolve hostname|Connection (timed out|refused)/iu,
264
- (machine) => `ssh could not reach or authenticate with ${machine.target}. Connect once interactively with ssh ${machine.target} to accept the host key or fix the identity; BatchMode never prompts.`],
265
- [/is not recognized as|CommandNotFoundException|PowerShell|At line:\d+ char:\d+/u,
266
- (machine) => `Machine '${machine.label ?? machine.id}' is not a POSIX host. External-cli runs support POSIX ssh targets only.`],
267
- [/\bcd: .*(No such file or directory|not a directory|can't cd)|exit(?:ed with)? code 125\b/iu,
268
- (machine) => `Nothing at ${machine.cwd} on ${machine.label ?? machine.id}. Clone the repo there first; pi-subagents never clones, pulls, or checks out on a machine.`],
269
- [/(?:command not found|not found)\s*$|No such file or directory\s*$|exit(?:ed with)? code 127\b/imu,
270
- (machine) => `The agent CLI was not found on ${machine.label ?? machine.id}. Non-interactive shells skip rc files and the PATH prefix did not find it; set the agent's command to the absolute path on that machine.`],
271
- [/not logged in|unauthorized|authentication_error|invalid api key|please run .*login|OAuth token/iu,
272
- (machine) => `Remote runs use the machine's own credentials. Log in to the agent CLI on ${machine.label ?? machine.id} once.`],
273
- ];
274
-
275
- /** One-line operator hint for a predictable remote failure, matched against error text and the stderr tail. */
276
- export function formatHerdrMachineHint(machine: HerdrMachineReference, text: string): string | undefined {
277
- for (const [pattern, hint] of HINTS) if (pattern.test(text)) return hint(machine);
278
- return undefined;
279
- }
@@ -1,59 +0,0 @@
1
- import * as path from "node:path";
2
-
3
- export const HERDR_PI_PROTOCOL = 1;
4
- export const HERDR_PI_MAX_FRAME_BYTES = 1024 * 1024;
5
- export const HERDR_PI_MODE_ENV = "PI_SUBAGENTS_HERDR_BRIDGE";
6
- export const HERDR_PI_RUN_ENV = "PI_SUBAGENTS_HERDR_RUN_ID";
7
- export const HERDR_PI_RUNTIME_DIR_ENV = "PI_SUBAGENTS_HERDR_RUNTIME_DIR";
8
- const SAFE_ID = /^[A-Za-z0-9_-]{8,96}$/u;
9
-
10
- export function validateHerdrPiRunId(value: unknown): string {
11
- if (typeof value !== "string" || !SAFE_ID.test(value)) throw new Error("Herdr Pi bridge run identity is invalid.");
12
- return value;
13
- }
14
-
15
- export function herdrPiRuntimeRoot(agentDir: string): string {
16
- return path.join(agentDir, "pi-subagents", "herdr-runs");
17
- }
18
-
19
- export function herdrPiRunDir(agentDir: string, runId: string): string {
20
- return path.join(herdrPiRuntimeRoot(agentDir), validateHerdrPiRunId(runId));
21
- }
22
-
23
- export interface HerdrPiFrame {
24
- protocol: number;
25
- runId: string;
26
- type: string;
27
- requestId?: string;
28
- [key: string]: unknown;
29
- }
30
-
31
- export function encodeHerdrPiFrame(frame: HerdrPiFrame): Buffer {
32
- const data = Buffer.from(`${JSON.stringify(frame)}\n`, "utf8");
33
- if (data.byteLength > HERDR_PI_MAX_FRAME_BYTES) throw new Error(`Herdr Pi frame exceeds ${HERDR_PI_MAX_FRAME_BYTES} bytes.`);
34
- return data;
35
- }
36
-
37
- export class HerdrPiFrameDecoder {
38
- #buffer = Buffer.alloc(0);
39
- push(chunk: Buffer): HerdrPiFrame[] {
40
- this.#buffer = Buffer.concat([this.#buffer, chunk]);
41
- if (this.#buffer.byteLength > HERDR_PI_MAX_FRAME_BYTES) throw new Error(`Herdr Pi frame exceeds ${HERDR_PI_MAX_FRAME_BYTES} bytes.`);
42
- const frames: HerdrPiFrame[] = [];
43
- for (;;) {
44
- const newline = this.#buffer.indexOf(10);
45
- if (newline < 0) break;
46
- const line = this.#buffer.subarray(0, newline);
47
- this.#buffer = this.#buffer.subarray(newline + 1);
48
- let value: unknown;
49
- try { value = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(line)) as unknown; } catch { throw new Error("Herdr Pi bridge emitted malformed JSON or UTF-8."); }
50
- if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error("Herdr Pi bridge frame must be an object.");
51
- const frame = value as HerdrPiFrame;
52
- if (frame.protocol !== HERDR_PI_PROTOCOL || typeof frame.type !== "string") throw new Error("Herdr Pi bridge protocol mismatch.");
53
- validateHerdrPiRunId(frame.runId);
54
- frames.push(frame);
55
- }
56
- return frames;
57
- }
58
- end(): void { if (this.#buffer.byteLength) throw new Error("Herdr Pi bridge ended with a partial frame."); }
59
- }