@agimon-ai/po-core 0.0.0-alpha.2 → 0.0.0-alpha.21

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 (1149) hide show
  1. package/LICENSE +149 -21
  2. package/NOTICE +41 -0
  3. package/dist/agentModel.cjs +1 -1
  4. package/dist/agentModel.d.mts +2 -2
  5. package/dist/agentModel.mjs +1 -2
  6. package/dist/apiContracts.cjs +623 -802
  7. package/dist/apiContracts.cjs.map +1 -1
  8. package/dist/apiContracts.d.mts +277 -615
  9. package/dist/apiContracts.d.mts.map +1 -1
  10. package/dist/apiContracts.mjs +617 -794
  11. package/dist/apiContracts.mjs.map +1 -1
  12. package/dist/askUser.cjs +2 -2
  13. package/dist/askUser.d.mts +2 -2
  14. package/dist/askUser.mjs +1 -2
  15. package/dist/authorTools.mjs +1 -2
  16. package/dist/backgroundWork.cjs +3 -3
  17. package/dist/backgroundWork.d.mts +2 -2
  18. package/dist/backgroundWork.mjs +1 -2
  19. package/dist/bundleAssetPolicy.mjs +1 -2
  20. package/dist/chatgptAuth.cjs +3 -2
  21. package/dist/chatgptAuth.d.mts +3 -2
  22. package/dist/chatgptAuth.mjs +2 -1
  23. package/dist/childProcess.cjs +1 -1
  24. package/dist/childProcess.d.mts +2 -2
  25. package/dist/childProcess.mjs +1 -2
  26. package/dist/childSession.cjs +11 -6
  27. package/dist/childSession.d.mts +3 -3
  28. package/dist/childSession.mjs +3 -3
  29. package/dist/cockpitContainer.mjs +1 -2
  30. package/dist/config.cjs +1 -1
  31. package/dist/config.d.mts +3 -3
  32. package/dist/config.mjs +1 -2
  33. package/dist/contextApi.cjs +1 -0
  34. package/dist/contextApi.d.mts +2 -2
  35. package/dist/contextApi.mjs +2 -2
  36. package/dist/contextContributions.cjs +4 -4
  37. package/dist/contextContributions.d.mts +3 -3
  38. package/dist/contextContributions.mjs +3 -3
  39. package/dist/contextDetailStore.cjs +7 -5
  40. package/dist/contextDetailStore.cjs.map +1 -1
  41. package/dist/contextDetailStore.d.mts +2 -1
  42. package/dist/contextDetailStore.d.mts.map +1 -1
  43. package/dist/contextDetailStore.mjs +6 -4
  44. package/dist/contextDetailStore.mjs.map +1 -1
  45. package/dist/contextProjection.cjs +7 -2
  46. package/dist/contextProjection.cjs.map +1 -1
  47. package/dist/contextProjection.d.mts +4 -1
  48. package/dist/contextProjection.d.mts.map +1 -1
  49. package/dist/contextProjection.mjs +5 -2
  50. package/dist/contextProjection.mjs.map +1 -1
  51. package/dist/cordisHost.cjs +11 -11
  52. package/dist/cordisHost.d.mts +2 -2
  53. package/dist/cordisHost.mjs +1 -2
  54. package/dist/delegation.cjs +8 -8
  55. package/dist/delegation.d.mts +2 -2
  56. package/dist/delegation.mjs +1 -2
  57. package/dist/executionBudget.cjs +4 -3
  58. package/dist/executionBudget.cjs.map +1 -1
  59. package/dist/executionBudget.d.mts +2 -2
  60. package/dist/executionBudget.d.mts.map +1 -1
  61. package/dist/executionBudget.mjs +4 -3
  62. package/dist/executionBudget.mjs.map +1 -1
  63. package/dist/extensionFile.cjs +5 -0
  64. package/dist/extensionFile.d.mts +4 -2
  65. package/dist/extensionFile.mjs +4 -2
  66. package/dist/footer.d.mts +2 -2
  67. package/dist/footer.mjs +1 -2
  68. package/dist/headless.cjs +14 -14
  69. package/dist/headless.d.mts +2 -2
  70. package/dist/headless.mjs +1 -2
  71. package/dist/headlessHub.cjs +308 -109
  72. package/dist/headlessHub.cjs.map +1 -1
  73. package/dist/headlessHub.d.mts +71 -36
  74. package/dist/headlessHub.d.mts.map +1 -1
  75. package/dist/headlessHub.mjs +309 -110
  76. package/dist/headlessHub.mjs.map +1 -1
  77. package/dist/headlessProtocol.cjs +327 -0
  78. package/dist/headlessProtocol.cjs.map +1 -0
  79. package/dist/headlessProtocol.d.mts +30 -0
  80. package/dist/headlessProtocol.d.mts.map +1 -0
  81. package/dist/headlessProtocol.mjs +326 -0
  82. package/dist/headlessProtocol.mjs.map +1 -0
  83. package/dist/headlessServer.cjs +166 -151
  84. package/dist/headlessServer.cjs.map +1 -1
  85. package/dist/headlessServer.d.mts +13 -5
  86. package/dist/headlessServer.d.mts.map +1 -1
  87. package/dist/headlessServer.mjs +166 -151
  88. package/dist/headlessServer.mjs.map +1 -1
  89. package/dist/headlessSessionHost.d.mts +58 -21
  90. package/dist/headlessSessionHost.d.mts.map +1 -1
  91. package/dist/help.cjs +20 -20
  92. package/dist/help.d.mts +2 -2
  93. package/dist/help.mjs +2 -2
  94. package/dist/history.cjs +16 -20
  95. package/dist/history.d.mts +9 -7
  96. package/dist/history.mjs +6 -7
  97. package/dist/historyOwnership.cjs.map +1 -1
  98. package/dist/historyOwnership.d.mts +1 -1
  99. package/dist/historyOwnership.mjs.map +1 -1
  100. package/dist/hubChannel.cjs +9 -0
  101. package/dist/hubChannel.d.mts +3 -2
  102. package/dist/hubChannel.mjs +3 -2
  103. package/dist/index.cjs +26 -28
  104. package/dist/index.d.mts +6 -6
  105. package/dist/index.mjs +6 -6
  106. package/dist/interop/chord.mjs +1 -0
  107. package/dist/interop/chordContext.mjs +1 -0
  108. package/dist/json.cjs +11 -5
  109. package/dist/json.d.mts +4 -2
  110. package/dist/json.mjs +4 -2
  111. package/dist/kernel.cjs +1 -1
  112. package/dist/kernel.d.mts +3 -3
  113. package/dist/kernel.mjs +1 -2
  114. package/dist/leader.d.mts +2 -2
  115. package/dist/leader.mjs +1 -2
  116. package/dist/logSinkTelemetry.mjs +1 -2
  117. package/dist/machineApi.cjs +80 -74
  118. package/dist/machineApi.cjs.map +1 -1
  119. package/dist/machineApi.d.mts +5 -2
  120. package/dist/machineApi.d.mts.map +1 -1
  121. package/dist/machineApi.mjs +78 -71
  122. package/dist/machineApi.mjs.map +1 -1
  123. package/dist/main.cjs +2 -1
  124. package/dist/main.d.mts +2 -1
  125. package/dist/main.mjs +2 -1
  126. package/dist/mcpFacet.d.mts +3 -3
  127. package/dist/mcpProjection.cjs +13 -13
  128. package/dist/mcpProjection.d.mts +2 -2
  129. package/dist/mcpProjection.mjs +1 -2
  130. package/dist/mcpSchemaCost.cjs +4 -4
  131. package/dist/mcpSchemaCost.cjs.map +1 -1
  132. package/dist/mcpSchemaCost.d.mts +2 -2
  133. package/dist/mcpSchemaCost.mjs +4 -4
  134. package/dist/mcpSchemaCost.mjs.map +1 -1
  135. package/dist/mcpSession.cjs +7 -7
  136. package/dist/mcpSession.d.mts +2 -2
  137. package/dist/mcpSession.mjs +1 -2
  138. package/dist/mcpStatus.cjs +2 -2
  139. package/dist/mcpStatus.d.mts +2 -2
  140. package/dist/mcpStatus.mjs +1 -2
  141. package/dist/mcpToolResolver.cjs +3 -3
  142. package/dist/mcpToolResolver.d.mts +2 -2
  143. package/dist/mcpToolResolver.mjs +1 -2
  144. package/dist/mcpWidget.d.mts +2 -2
  145. package/dist/moduleResolution.cjs +43 -8
  146. package/dist/moduleResolution.cjs.map +1 -1
  147. package/dist/moduleResolution.d.mts +10 -1
  148. package/dist/moduleResolution.d.mts.map +1 -1
  149. package/dist/moduleResolution.mjs +40 -7
  150. package/dist/moduleResolution.mjs.map +1 -1
  151. package/dist/narration.cjs +3 -3
  152. package/dist/narration.d.mts +2 -2
  153. package/dist/narration.mjs +1 -2
  154. package/dist/native.cjs +9 -0
  155. package/dist/native.d.mts +4 -3
  156. package/dist/native.mjs +3 -2
  157. package/dist/nodePlatform.cjs +77 -0
  158. package/dist/nodePlatform.cjs.map +1 -0
  159. package/dist/nodePlatform.d.mts +17 -0
  160. package/dist/nodePlatform.d.mts.map +1 -0
  161. package/dist/nodePlatform.mjs +72 -0
  162. package/dist/nodePlatform.mjs.map +1 -0
  163. package/dist/notification.cjs +15 -15
  164. package/dist/notification.d.mts +2 -2
  165. package/dist/notification.mjs +1 -2
  166. package/dist/packageApi.cjs +11 -11
  167. package/dist/packageApi.d.mts +2 -2
  168. package/dist/packageApi.mjs +2 -2
  169. package/dist/packageApiServer.cjs +45 -27
  170. package/dist/packageApiServer.cjs.map +1 -1
  171. package/dist/packageApiServer.d.mts +36 -26
  172. package/dist/packageApiServer.d.mts.map +1 -1
  173. package/dist/packageApiServer.mjs +44 -26
  174. package/dist/packageApiServer.mjs.map +1 -1
  175. package/dist/piSettings.cjs +41 -20
  176. package/dist/piSettings.d.mts +4 -2
  177. package/dist/piSettings.mjs +4 -2
  178. package/dist/platform.cjs +62 -0
  179. package/dist/platform.d.mts +10 -0
  180. package/dist/platform.mjs +10 -0
  181. package/dist/pluginProtocol.cjs +7 -8
  182. package/dist/pluginProtocol.d.mts +2 -2
  183. package/dist/pluginProtocol.mjs +1 -2
  184. package/dist/poPackage.cjs +12 -0
  185. package/dist/poPackage.d.mts +3 -0
  186. package/dist/poPackage.mjs +3 -0
  187. package/dist/profileIdentity.cjs +1 -1
  188. package/dist/profileIdentity.d.mts +2 -2
  189. package/dist/profileIdentity.mjs +1 -2
  190. package/dist/protocol.cjs +3 -3
  191. package/dist/protocol.d.mts +2 -2
  192. package/dist/protocol.mjs +1 -2
  193. package/dist/readiness.cjs +6 -6
  194. package/dist/readiness.d.mts +2 -2
  195. package/dist/readiness.mjs +1 -2
  196. package/dist/remoteApi.cjs.map +1 -1
  197. package/dist/remoteApi.d.mts +2 -2
  198. package/dist/remoteApi.mjs.map +1 -1
  199. package/dist/remoteRuntime.cjs +42 -65
  200. package/dist/remoteRuntime.cjs.map +1 -1
  201. package/dist/remoteRuntime.d.mts +3 -2
  202. package/dist/remoteRuntime.d.mts.map +1 -1
  203. package/dist/remoteRuntime.mjs +41 -62
  204. package/dist/remoteRuntime.mjs.map +1 -1
  205. package/dist/runtimeConfig.cjs +4 -4
  206. package/dist/runtimeConfig.cjs.map +1 -1
  207. package/dist/runtimeConfig.d.mts +10 -9
  208. package/dist/runtimeConfig.d.mts.map +1 -1
  209. package/dist/runtimeConfig.mjs +4 -4
  210. package/dist/runtimeConfig.mjs.map +1 -1
  211. package/dist/runtimeContextApi.cjs +10 -3
  212. package/dist/runtimeContextApi.cjs.map +1 -1
  213. package/dist/runtimeContextApi.d.mts +3 -3
  214. package/dist/runtimeContextApi.d.mts.map +1 -1
  215. package/dist/runtimeContextApi.mjs +10 -3
  216. package/dist/runtimeContextApi.mjs.map +1 -1
  217. package/dist/runtimeCordisHost.cjs +46 -46
  218. package/dist/runtimeCordisHost.cjs.map +1 -1
  219. package/dist/runtimeCordisHost.d.mts +29 -28
  220. package/dist/runtimeCordisHost.d.mts.map +1 -1
  221. package/dist/runtimeCordisHost.mjs +42 -42
  222. package/dist/runtimeCordisHost.mjs.map +1 -1
  223. package/dist/runtimeIdentity.cjs +6 -9
  224. package/dist/runtimeIdentity.cjs.map +1 -1
  225. package/dist/runtimeIdentity.d.mts +5 -1
  226. package/dist/runtimeIdentity.d.mts.map +1 -1
  227. package/dist/runtimeIdentity.mjs +5 -8
  228. package/dist/runtimeIdentity.mjs.map +1 -1
  229. package/dist/runtimeJson.cjs +10 -45
  230. package/dist/runtimeJson.d.mts +3 -22
  231. package/dist/runtimeJson.mjs +3 -39
  232. package/dist/runtimeLogSinkTelemetry.cjs +19 -19
  233. package/dist/runtimeLogSinkTelemetry.cjs.map +1 -1
  234. package/dist/runtimeLogSinkTelemetry.d.mts +19 -19
  235. package/dist/runtimeLogSinkTelemetry.mjs +19 -19
  236. package/dist/runtimeLogSinkTelemetry.mjs.map +1 -1
  237. package/dist/runtimePackages.cjs +7 -2
  238. package/dist/runtimePackages.cjs.map +1 -1
  239. package/dist/runtimePackages.d.mts +4 -1
  240. package/dist/runtimePackages.d.mts.map +1 -1
  241. package/dist/runtimePackages.mjs +7 -2
  242. package/dist/runtimePackages.mjs.map +1 -1
  243. package/dist/runtimePiSettings.cjs +40 -263
  244. package/dist/runtimePiSettings.d.mts +3 -72
  245. package/dist/runtimePiSettings.mjs +3 -241
  246. package/dist/runtimeProtocol.cjs +19 -19
  247. package/dist/runtimeProtocol.cjs.map +1 -1
  248. package/dist/runtimeProtocol.d.mts +7 -7
  249. package/dist/runtimeProtocol.d.mts.map +1 -1
  250. package/dist/runtimeProtocol.mjs +17 -17
  251. package/dist/runtimeProtocol.mjs.map +1 -1
  252. package/dist/runtimeTransition.cjs +9 -9
  253. package/dist/runtimeTransition.cjs.map +1 -1
  254. package/dist/runtimeTransition.d.mts +10 -10
  255. package/dist/runtimeTransition.d.mts.map +1 -1
  256. package/dist/runtimeTransition.mjs +7 -7
  257. package/dist/runtimeTransition.mjs.map +1 -1
  258. package/dist/sandboxHarness.mjs +1 -2
  259. package/dist/server.cjs +3 -7
  260. package/dist/server.d.mts +6 -6
  261. package/dist/server.mjs +3 -4
  262. package/dist/serverPlugin.cjs +39 -0
  263. package/dist/serverPlugin.d.mts +12 -0
  264. package/dist/serverPlugin.mjs +11 -0
  265. package/dist/serverTelemetry.cjs +1 -1
  266. package/dist/serverTelemetry.cjs.map +1 -1
  267. package/dist/serverTelemetry.d.mts +2 -2
  268. package/dist/serverTelemetry.mjs +2 -2
  269. package/dist/serverTelemetry.mjs.map +1 -1
  270. package/dist/sessionFilesApi.cjs +41 -37
  271. package/dist/sessionFilesApi.cjs.map +1 -1
  272. package/dist/sessionFilesApi.d.mts +6 -3
  273. package/dist/sessionFilesApi.d.mts.map +1 -1
  274. package/dist/sessionFilesApi.mjs +41 -36
  275. package/dist/sessionFilesApi.mjs.map +1 -1
  276. package/dist/sessionProtocol.cjs +31 -6
  277. package/dist/sessionProtocol.d.mts +8 -3
  278. package/dist/sessionProtocol.mjs +8 -2
  279. package/dist/skills.cjs +5 -5
  280. package/dist/skills.d.mts +2 -2
  281. package/dist/skills.mjs +1 -2
  282. package/dist/sqliteSessionStorage.cjs +28 -50
  283. package/dist/sqliteSessionStorage.cjs.map +1 -1
  284. package/dist/sqliteSessionStorage.d.mts +13 -20
  285. package/dist/sqliteSessionStorage.d.mts.map +1 -1
  286. package/dist/sqliteSessionStorage.mjs +25 -48
  287. package/dist/sqliteSessionStorage.mjs.map +1 -1
  288. package/dist/src/constants/agentSettled.cjs +7 -0
  289. package/dist/src/constants/agentSettled.cjs.map +1 -0
  290. package/dist/src/constants/agentSettled.mjs +7 -0
  291. package/dist/src/constants/agentSettled.mjs.map +1 -0
  292. package/dist/src/constants/contextApi.cjs +3 -1
  293. package/dist/src/constants/contextApi.cjs.map +1 -1
  294. package/dist/src/constants/contextApi.d.mts +2 -1
  295. package/dist/src/constants/contextApi.d.mts.map +1 -1
  296. package/dist/src/constants/contextApi.mjs +3 -2
  297. package/dist/src/constants/contextApi.mjs.map +1 -1
  298. package/dist/src/constants/voiceTools.cjs +6 -6
  299. package/dist/src/constants/voiceTools.cjs.map +1 -1
  300. package/dist/src/constants/voiceTools.d.mts +3 -3
  301. package/dist/src/constants/voiceTools.mjs +4 -4
  302. package/dist/src/constants/voiceTools.mjs.map +1 -1
  303. package/dist/src/extensions/extensionFile.cjs +22 -5
  304. package/dist/src/extensions/extensionFile.cjs.map +1 -1
  305. package/dist/src/extensions/extensionFile.d.mts +17 -4
  306. package/dist/src/extensions/extensionFile.d.mts.map +1 -1
  307. package/dist/src/extensions/extensionFile.mjs +22 -6
  308. package/dist/src/extensions/extensionFile.mjs.map +1 -1
  309. package/dist/src/extensions/serverPlugin.cjs +231 -92
  310. package/dist/src/extensions/serverPlugin.cjs.map +1 -1
  311. package/dist/src/extensions/serverPlugin.d.mts +2 -2
  312. package/dist/src/extensions/serverPlugin.d.mts.map +1 -1
  313. package/dist/src/extensions/serverPlugin.mjs +232 -93
  314. package/dist/src/extensions/serverPlugin.mjs.map +1 -1
  315. package/dist/src/pi/piSessionRuntime.cjs +349 -142
  316. package/dist/src/pi/piSessionRuntime.cjs.map +1 -1
  317. package/dist/src/pi/piSessionRuntime.d.mts +18 -17
  318. package/dist/src/pi/piSessionRuntime.d.mts.map +1 -1
  319. package/dist/src/pi/piSessionRuntime.mjs +342 -135
  320. package/dist/src/pi/piSessionRuntime.mjs.map +1 -1
  321. package/dist/src/schemas/agentModel.cjs +2 -2
  322. package/dist/src/schemas/agentModel.cjs.map +1 -1
  323. package/dist/src/schemas/agentModel.d.mts +1 -1
  324. package/dist/src/schemas/agentModel.mjs +2 -2
  325. package/dist/src/schemas/agentModel.mjs.map +1 -1
  326. package/dist/src/schemas/apiContracts.d.mts +2 -2
  327. package/dist/src/schemas/apiContracts.d.mts.map +1 -1
  328. package/dist/src/schemas/askUser.cjs +4 -4
  329. package/dist/src/schemas/askUser.cjs.map +1 -1
  330. package/dist/src/schemas/askUser.d.mts +4 -4
  331. package/dist/src/schemas/askUser.d.mts.map +1 -1
  332. package/dist/src/schemas/askUser.mjs +3 -3
  333. package/dist/src/schemas/askUser.mjs.map +1 -1
  334. package/dist/src/schemas/backgroundWork.cjs +10 -10
  335. package/dist/src/schemas/backgroundWork.cjs.map +1 -1
  336. package/dist/src/schemas/backgroundWork.d.mts +9 -9
  337. package/dist/src/schemas/backgroundWork.d.mts.map +1 -1
  338. package/dist/src/schemas/backgroundWork.mjs +8 -8
  339. package/dist/src/schemas/backgroundWork.mjs.map +1 -1
  340. package/dist/src/schemas/childProcess.cjs +5 -5
  341. package/dist/src/schemas/childProcess.cjs.map +1 -1
  342. package/dist/src/schemas/childProcess.d.mts +2 -2
  343. package/dist/src/schemas/childProcess.mjs +5 -5
  344. package/dist/src/schemas/childProcess.mjs.map +1 -1
  345. package/dist/src/schemas/contextContributions.cjs +10 -10
  346. package/dist/src/schemas/contextContributions.cjs.map +1 -1
  347. package/dist/src/schemas/contextContributions.d.mts +16 -16
  348. package/dist/src/schemas/contextContributions.d.mts.map +1 -1
  349. package/dist/src/schemas/contextContributions.mjs +8 -8
  350. package/dist/src/schemas/contextContributions.mjs.map +1 -1
  351. package/dist/src/schemas/delegation.cjs +17 -17
  352. package/dist/src/schemas/delegation.cjs.map +1 -1
  353. package/dist/src/schemas/delegation.d.mts +16 -16
  354. package/dist/src/schemas/delegation.d.mts.map +1 -1
  355. package/dist/src/schemas/delegation.mjs +10 -10
  356. package/dist/src/schemas/delegation.mjs.map +1 -1
  357. package/dist/src/schemas/extensionFile.d.mts +23 -19
  358. package/dist/src/schemas/extensionFile.d.mts.map +1 -1
  359. package/dist/src/schemas/footer.cjs.map +1 -1
  360. package/dist/src/schemas/footer.d.mts +5 -5
  361. package/dist/src/schemas/footer.d.mts.map +1 -1
  362. package/dist/src/schemas/footer.mjs.map +1 -1
  363. package/dist/src/schemas/headless.cjs +37 -37
  364. package/dist/src/schemas/headless.cjs.map +1 -1
  365. package/dist/src/schemas/headless.d.mts +100 -101
  366. package/dist/src/schemas/headless.d.mts.map +1 -1
  367. package/dist/src/schemas/headless.mjs +24 -24
  368. package/dist/src/schemas/headless.mjs.map +1 -1
  369. package/dist/src/schemas/help.cjs +60 -60
  370. package/dist/src/schemas/help.cjs.map +1 -1
  371. package/dist/src/schemas/help.d.mts +43 -43
  372. package/dist/src/schemas/help.d.mts.map +1 -1
  373. package/dist/src/schemas/help.mjs +41 -41
  374. package/dist/src/schemas/help.mjs.map +1 -1
  375. package/dist/src/schemas/home.cjs +127 -0
  376. package/dist/src/schemas/home.cjs.map +1 -0
  377. package/dist/src/schemas/home.d.mts +63 -0
  378. package/dist/src/schemas/home.d.mts.map +1 -0
  379. package/dist/src/schemas/home.mjs +121 -0
  380. package/dist/src/schemas/home.mjs.map +1 -0
  381. package/dist/src/schemas/httpApiContracts.cjs +441 -0
  382. package/dist/src/schemas/httpApiContracts.cjs.map +1 -0
  383. package/dist/src/schemas/httpApiContracts.d.mts +78 -0
  384. package/dist/src/schemas/httpApiContracts.d.mts.map +1 -0
  385. package/dist/src/schemas/httpApiContracts.mjs +434 -0
  386. package/dist/src/schemas/httpApiContracts.mjs.map +1 -0
  387. package/dist/src/schemas/hubChannel.cjs +3 -0
  388. package/dist/src/schemas/hubChannel.cjs.map +1 -1
  389. package/dist/src/schemas/hubChannel.d.mts +84 -60
  390. package/dist/src/schemas/hubChannel.d.mts.map +1 -1
  391. package/dist/src/schemas/hubChannel.mjs +3 -1
  392. package/dist/src/schemas/hubChannel.mjs.map +1 -1
  393. package/dist/src/schemas/leader.cjs.map +1 -1
  394. package/dist/src/schemas/leader.d.mts +3 -3
  395. package/dist/src/schemas/leader.d.mts.map +1 -1
  396. package/dist/src/schemas/leader.mjs.map +1 -1
  397. package/dist/src/schemas/mcpBundle.d.mts +3 -3
  398. package/dist/src/schemas/mcpFacet.cjs.map +1 -1
  399. package/dist/src/schemas/mcpFacet.d.mts +22 -22
  400. package/dist/src/schemas/mcpFacet.d.mts.map +1 -1
  401. package/dist/src/schemas/mcpFacet.mjs.map +1 -1
  402. package/dist/src/schemas/mcpProjection.cjs +41 -41
  403. package/dist/src/schemas/mcpProjection.cjs.map +1 -1
  404. package/dist/src/schemas/mcpProjection.d.mts +31 -30
  405. package/dist/src/schemas/mcpProjection.d.mts.map +1 -1
  406. package/dist/src/schemas/mcpProjection.mjs +29 -29
  407. package/dist/src/schemas/mcpProjection.mjs.map +1 -1
  408. package/dist/src/schemas/mcpSession.cjs +23 -23
  409. package/dist/src/schemas/mcpSession.cjs.map +1 -1
  410. package/dist/src/schemas/mcpSession.d.mts +12 -12
  411. package/dist/src/schemas/mcpSession.d.mts.map +1 -1
  412. package/dist/src/schemas/mcpSession.mjs +18 -18
  413. package/dist/src/schemas/mcpSession.mjs.map +1 -1
  414. package/dist/src/schemas/mcpStatus.cjs +5 -5
  415. package/dist/src/schemas/mcpStatus.cjs.map +1 -1
  416. package/dist/src/schemas/mcpStatus.d.mts +4 -4
  417. package/dist/src/schemas/mcpStatus.d.mts.map +1 -1
  418. package/dist/src/schemas/mcpStatus.mjs +4 -4
  419. package/dist/src/schemas/mcpStatus.mjs.map +1 -1
  420. package/dist/src/schemas/mcpToolResolver.cjs +9 -9
  421. package/dist/src/schemas/mcpToolResolver.cjs.map +1 -1
  422. package/dist/src/schemas/mcpToolResolver.d.mts +7 -7
  423. package/dist/src/schemas/mcpToolResolver.d.mts.map +1 -1
  424. package/dist/src/schemas/mcpToolResolver.mjs +7 -7
  425. package/dist/src/schemas/mcpToolResolver.mjs.map +1 -1
  426. package/dist/src/schemas/narration.cjs +9 -9
  427. package/dist/src/schemas/narration.cjs.map +1 -1
  428. package/dist/src/schemas/narration.d.mts +5 -5
  429. package/dist/src/schemas/narration.d.mts.map +1 -1
  430. package/dist/src/schemas/narration.mjs +7 -7
  431. package/dist/src/schemas/narration.mjs.map +1 -1
  432. package/dist/src/schemas/notification.cjs +45 -45
  433. package/dist/src/schemas/notification.cjs.map +1 -1
  434. package/dist/src/schemas/notification.d.mts +22 -22
  435. package/dist/src/schemas/notification.d.mts.map +1 -1
  436. package/dist/src/schemas/notification.mjs +31 -31
  437. package/dist/src/schemas/notification.mjs.map +1 -1
  438. package/dist/src/schemas/packageApi.cjs +28 -28
  439. package/dist/src/schemas/packageApi.cjs.map +1 -1
  440. package/dist/src/schemas/packageApi.d.mts +91 -65
  441. package/dist/src/schemas/packageApi.d.mts.map +1 -1
  442. package/dist/src/schemas/packageApi.mjs +18 -18
  443. package/dist/src/schemas/packageApi.mjs.map +1 -1
  444. package/dist/src/schemas/platform.cjs +34 -0
  445. package/dist/src/schemas/platform.cjs.map +1 -0
  446. package/dist/src/schemas/platform.d.mts +75 -0
  447. package/dist/src/schemas/platform.d.mts.map +1 -0
  448. package/dist/src/schemas/platform.mjs +27 -0
  449. package/dist/src/schemas/platform.mjs.map +1 -0
  450. package/dist/src/schemas/pluginContributions.cjs.map +1 -1
  451. package/dist/src/schemas/pluginContributions.d.mts +12 -12
  452. package/dist/src/schemas/pluginContributions.d.mts.map +1 -1
  453. package/dist/src/schemas/pluginContributions.mjs.map +1 -1
  454. package/dist/src/schemas/pluginProtocol.cjs +24 -27
  455. package/dist/src/schemas/pluginProtocol.cjs.map +1 -1
  456. package/dist/src/schemas/pluginProtocol.d.mts +21 -21
  457. package/dist/src/schemas/pluginProtocol.d.mts.map +1 -1
  458. package/dist/src/schemas/pluginProtocol.mjs +18 -20
  459. package/dist/src/schemas/pluginProtocol.mjs.map +1 -1
  460. package/dist/src/schemas/profileIdentity.cjs +2 -2
  461. package/dist/src/schemas/profileIdentity.cjs.map +1 -1
  462. package/dist/src/schemas/profileIdentity.d.mts +1 -1
  463. package/dist/src/schemas/profileIdentity.mjs +2 -2
  464. package/dist/src/schemas/profileIdentity.mjs.map +1 -1
  465. package/dist/src/schemas/protocolChannelsContract.cjs +27 -0
  466. package/dist/src/schemas/protocolChannelsContract.cjs.map +1 -0
  467. package/dist/src/schemas/protocolChannelsContract.d.mts +37 -0
  468. package/dist/src/schemas/protocolChannelsContract.d.mts.map +1 -0
  469. package/dist/src/schemas/protocolChannelsContract.mjs +25 -0
  470. package/dist/src/schemas/protocolChannelsContract.mjs.map +1 -0
  471. package/dist/src/schemas/protocolContracts.cjs +168 -0
  472. package/dist/src/schemas/protocolContracts.cjs.map +1 -0
  473. package/dist/src/schemas/protocolContracts.d.mts +69 -0
  474. package/dist/src/schemas/protocolContracts.d.mts.map +1 -0
  475. package/dist/src/schemas/protocolContracts.mjs +164 -0
  476. package/dist/src/schemas/protocolContracts.mjs.map +1 -0
  477. package/dist/src/schemas/protocolHubContract.cjs +51 -0
  478. package/dist/src/schemas/protocolHubContract.cjs.map +1 -0
  479. package/dist/src/schemas/protocolHubContract.d.mts +218 -0
  480. package/dist/src/schemas/protocolHubContract.d.mts.map +1 -0
  481. package/dist/src/schemas/protocolHubContract.mjs +49 -0
  482. package/dist/src/schemas/protocolHubContract.mjs.map +1 -0
  483. package/dist/src/schemas/protocolSessionContract.cjs +22 -0
  484. package/dist/src/schemas/protocolSessionContract.cjs.map +1 -0
  485. package/dist/src/schemas/protocolSessionContract.d.mts +324 -0
  486. package/dist/src/schemas/protocolSessionContract.d.mts.map +1 -0
  487. package/dist/src/schemas/protocolSessionContract.mjs +22 -0
  488. package/dist/src/schemas/protocolSessionContract.mjs.map +1 -0
  489. package/dist/src/schemas/protocolThreadContract.cjs +21 -0
  490. package/dist/src/schemas/protocolThreadContract.cjs.map +1 -0
  491. package/dist/src/schemas/protocolThreadContract.d.mts +29 -0
  492. package/dist/src/schemas/protocolThreadContract.d.mts.map +1 -0
  493. package/dist/src/schemas/protocolThreadContract.mjs +20 -0
  494. package/dist/src/schemas/protocolThreadContract.mjs.map +1 -0
  495. package/dist/src/schemas/readiness.cjs +36 -36
  496. package/dist/src/schemas/readiness.cjs.map +1 -1
  497. package/dist/src/schemas/readiness.d.mts +37 -37
  498. package/dist/src/schemas/readiness.d.mts.map +1 -1
  499. package/dist/src/schemas/readiness.mjs +31 -31
  500. package/dist/src/schemas/readiness.mjs.map +1 -1
  501. package/dist/src/schemas/serverBundle.d.mts +5 -5
  502. package/dist/src/schemas/serverPlugin.cjs +103 -0
  503. package/dist/src/schemas/serverPlugin.cjs.map +1 -0
  504. package/dist/src/schemas/serverPlugin.d.mts +176 -0
  505. package/dist/src/schemas/serverPlugin.d.mts.map +1 -0
  506. package/dist/src/schemas/serverPlugin.mjs +95 -0
  507. package/dist/src/schemas/serverPlugin.mjs.map +1 -0
  508. package/dist/src/schemas/serverScope.cjs +37 -0
  509. package/dist/src/schemas/serverScope.cjs.map +1 -0
  510. package/dist/src/schemas/serverScope.d.mts +77 -0
  511. package/dist/src/schemas/serverScope.d.mts.map +1 -0
  512. package/dist/src/schemas/serverScope.mjs +33 -0
  513. package/dist/src/schemas/serverScope.mjs.map +1 -0
  514. package/dist/src/schemas/sessionApiContracts.cjs +320 -0
  515. package/dist/src/schemas/sessionApiContracts.cjs.map +1 -0
  516. package/dist/src/schemas/sessionApiContracts.mjs +318 -0
  517. package/dist/src/schemas/sessionApiContracts.mjs.map +1 -0
  518. package/dist/src/schemas/sessionProtocol.cjs +20 -13
  519. package/dist/src/schemas/sessionProtocol.cjs.map +1 -1
  520. package/dist/src/schemas/sessionProtocol.d.mts +37 -54
  521. package/dist/src/schemas/sessionProtocol.d.mts.map +1 -1
  522. package/dist/src/schemas/sessionProtocol.mjs +17 -8
  523. package/dist/src/schemas/sessionProtocol.mjs.map +1 -1
  524. package/dist/src/schemas/skills.cjs +16 -16
  525. package/dist/src/schemas/skills.cjs.map +1 -1
  526. package/dist/src/schemas/skills.d.mts +7 -7
  527. package/dist/src/schemas/skills.d.mts.map +1 -1
  528. package/dist/src/schemas/skills.mjs +12 -12
  529. package/dist/src/schemas/skills.mjs.map +1 -1
  530. package/dist/src/schemas/toolOverrides.cjs +9 -9
  531. package/dist/src/schemas/toolOverrides.cjs.map +1 -1
  532. package/dist/src/schemas/toolOverrides.d.mts +8 -8
  533. package/dist/src/schemas/toolOverrides.d.mts.map +1 -1
  534. package/dist/src/schemas/toolOverrides.mjs +7 -7
  535. package/dist/src/schemas/toolOverrides.mjs.map +1 -1
  536. package/dist/src/schemas/toolSurface.cjs +9 -9
  537. package/dist/src/schemas/toolSurface.cjs.map +1 -1
  538. package/dist/src/schemas/toolSurface.d.mts +13 -13
  539. package/dist/src/schemas/toolSurface.d.mts.map +1 -1
  540. package/dist/src/schemas/toolSurface.mjs +7 -7
  541. package/dist/src/schemas/toolSurface.mjs.map +1 -1
  542. package/dist/src/schemas/uiHub.cjs +9 -9
  543. package/dist/src/schemas/uiHub.cjs.map +1 -1
  544. package/dist/src/schemas/uiHub.d.mts +12 -12
  545. package/dist/src/schemas/uiHub.d.mts.map +1 -1
  546. package/dist/src/schemas/uiHub.mjs +7 -7
  547. package/dist/src/schemas/uiHub.mjs.map +1 -1
  548. package/dist/src/server/directHarnessRuntime.cjs +691 -775
  549. package/dist/src/server/directHarnessRuntime.cjs.map +1 -1
  550. package/dist/src/server/directHarnessRuntime.d.mts +5 -1
  551. package/dist/src/server/directHarnessRuntime.d.mts.map +1 -0
  552. package/dist/src/server/directHarnessRuntime.mjs +671 -754
  553. package/dist/src/server/directHarnessRuntime.mjs.map +1 -1
  554. package/dist/src/server/largeFrameLink.cjs +47 -0
  555. package/dist/src/server/largeFrameLink.cjs.map +1 -0
  556. package/dist/src/server/largeFrameLink.mjs +47 -0
  557. package/dist/src/server/largeFrameLink.mjs.map +1 -0
  558. package/dist/src/server/liveImport.cjs +1 -1
  559. package/dist/src/server/liveImport.cjs.map +1 -1
  560. package/dist/src/server/liveImport.d.mts +1 -1
  561. package/dist/src/server/liveImport.mjs +1 -1
  562. package/dist/src/server/liveImport.mjs.map +1 -1
  563. package/dist/src/server/mcpBundleLoader.cjs.map +1 -1
  564. package/dist/src/server/mcpBundleLoader.d.mts +6 -6
  565. package/dist/src/server/mcpBundleLoader.d.mts.map +1 -1
  566. package/dist/src/server/mcpBundleLoader.mjs.map +1 -1
  567. package/dist/src/server/serverPackages.cjs +60 -0
  568. package/dist/src/server/serverPackages.cjs.map +1 -0
  569. package/dist/src/server/serverPackages.d.mts +44 -0
  570. package/dist/src/server/serverPackages.d.mts.map +1 -0
  571. package/dist/src/server/serverPackages.mjs +59 -0
  572. package/dist/src/server/serverPackages.mjs.map +1 -0
  573. package/dist/src/server/serverScope.cjs +510 -0
  574. package/dist/src/server/serverScope.cjs.map +1 -0
  575. package/dist/src/server/serverScope.d.mts +123 -0
  576. package/dist/src/server/serverScope.d.mts.map +1 -0
  577. package/dist/src/server/serverScope.mjs +510 -0
  578. package/dist/src/server/serverScope.mjs.map +1 -0
  579. package/dist/src/server/sessionMcpHandler.cjs +3 -3
  580. package/dist/src/server/sessionMcpHandler.cjs.map +1 -1
  581. package/dist/src/server/sessionMcpHandler.mjs +4 -4
  582. package/dist/src/server/sessionMcpHandler.mjs.map +1 -1
  583. package/dist/src/server/sessionMcpRoutes.cjs +2 -1
  584. package/dist/src/server/sessionMcpRoutes.cjs.map +1 -1
  585. package/dist/src/server/sessionMcpRoutes.mjs +2 -1
  586. package/dist/src/server/sessionMcpRoutes.mjs.map +1 -1
  587. package/dist/src/server/threadJournals.cjs +38 -107
  588. package/dist/src/server/threadJournals.cjs.map +1 -1
  589. package/dist/src/server/threadJournals.mjs +38 -104
  590. package/dist/src/server/threadJournals.mjs.map +1 -1
  591. package/dist/src/services/apiSurfaceAssert/index.cjs +1 -1
  592. package/dist/src/services/apiSurfaceAssert/index.cjs.map +1 -1
  593. package/dist/src/services/apiSurfaceAssert/index.d.mts +6 -6
  594. package/dist/src/services/apiSurfaceAssert/index.mjs +1 -1
  595. package/dist/src/services/apiSurfaceAssert/index.mjs.map +1 -1
  596. package/dist/src/services/chatgptAuth/index.cjs +1 -220
  597. package/dist/src/services/chatgptAuth/index.cjs.map +1 -1
  598. package/dist/src/services/chatgptAuth/index.d.mts +0 -18
  599. package/dist/src/services/chatgptAuth/index.d.mts.map +1 -1
  600. package/dist/src/services/chatgptAuth/index.mjs +1 -217
  601. package/dist/src/services/chatgptAuth/index.mjs.map +1 -1
  602. package/dist/src/services/chatgptImages/index.cjs +1 -1
  603. package/dist/src/services/chatgptImages/index.cjs.map +1 -1
  604. package/dist/src/services/chatgptImages/index.mjs +1 -1
  605. package/dist/src/services/chatgptImages/index.mjs.map +1 -1
  606. package/dist/src/services/chatgptLogin/index.cjs +230 -0
  607. package/dist/src/services/chatgptLogin/index.cjs.map +1 -0
  608. package/dist/src/services/chatgptLogin/index.d.mts +21 -0
  609. package/dist/src/services/chatgptLogin/index.d.mts.map +1 -0
  610. package/dist/src/services/chatgptLogin/index.mjs +227 -0
  611. package/dist/src/services/chatgptLogin/index.mjs.map +1 -0
  612. package/dist/src/services/chatgptWebSearch/index.cjs +1 -1
  613. package/dist/src/services/chatgptWebSearch/index.cjs.map +1 -1
  614. package/dist/src/services/chatgptWebSearch/index.mjs +1 -1
  615. package/dist/src/services/chatgptWebSearch/index.mjs.map +1 -1
  616. package/dist/src/services/contextContributions/index.cjs +8 -8
  617. package/dist/src/services/contextContributions/index.cjs.map +1 -1
  618. package/dist/src/services/contextContributions/index.d.mts +3 -3
  619. package/dist/src/services/contextContributions/index.d.mts.map +1 -1
  620. package/dist/src/services/contextContributions/index.mjs +8 -8
  621. package/dist/src/services/contextContributions/index.mjs.map +1 -1
  622. package/dist/src/services/devProxyStore/devProxyRecords.cjs +59 -0
  623. package/dist/src/services/devProxyStore/devProxyRecords.cjs.map +1 -0
  624. package/dist/src/services/devProxyStore/devProxyRecords.mjs +56 -0
  625. package/dist/src/services/devProxyStore/devProxyRecords.mjs.map +1 -0
  626. package/dist/src/services/devProxyStore/index.cjs +7 -101
  627. package/dist/src/services/devProxyStore/index.cjs.map +1 -1
  628. package/dist/src/services/devProxyStore/index.mjs +7 -101
  629. package/dist/src/services/devProxyStore/index.mjs.map +1 -1
  630. package/dist/src/services/devProxyStore/sync.cjs +66 -0
  631. package/dist/src/services/devProxyStore/sync.cjs.map +1 -0
  632. package/dist/src/services/devProxyStore/sync.mjs +63 -0
  633. package/dist/src/services/devProxyStore/sync.mjs.map +1 -0
  634. package/dist/src/services/durableNavigation/docs.cjs +15 -0
  635. package/dist/src/services/durableNavigation/docs.cjs.map +1 -0
  636. package/dist/src/services/durableNavigation/docs.mjs +16 -0
  637. package/dist/src/services/durableNavigation/docs.mjs.map +1 -0
  638. package/dist/src/services/durableNavigation/index.cjs +3 -18
  639. package/dist/src/services/durableNavigation/index.cjs.map +1 -1
  640. package/dist/src/services/durableNavigation/index.mjs +2 -17
  641. package/dist/src/services/durableNavigation/index.mjs.map +1 -1
  642. package/dist/src/services/durableQueue/docs.cjs +12 -0
  643. package/dist/src/services/durableQueue/docs.cjs.map +1 -0
  644. package/dist/src/services/durableQueue/docs.mjs +13 -0
  645. package/dist/src/services/durableQueue/docs.mjs.map +1 -0
  646. package/dist/src/services/durableQueue/index.cjs +151 -0
  647. package/dist/src/services/durableQueue/index.cjs.map +1 -0
  648. package/dist/src/services/durableQueue/index.mjs +149 -0
  649. package/dist/src/services/durableQueue/index.mjs.map +1 -0
  650. package/dist/src/services/durableRequestReceipts/docs.cjs +11 -0
  651. package/dist/src/services/durableRequestReceipts/docs.cjs.map +1 -0
  652. package/dist/src/services/durableRequestReceipts/docs.mjs +12 -0
  653. package/dist/src/services/durableRequestReceipts/docs.mjs.map +1 -0
  654. package/dist/src/services/{requestReceipts → durableRequestReceipts}/index.cjs +10 -16
  655. package/dist/src/services/durableRequestReceipts/index.cjs.map +1 -0
  656. package/dist/src/services/durableRequestReceipts/index.d.mts +12 -0
  657. package/dist/src/services/durableRequestReceipts/index.d.mts.map +1 -0
  658. package/dist/src/services/{requestReceipts → durableRequestReceipts}/index.mjs +7 -13
  659. package/dist/src/services/durableRequestReceipts/index.mjs.map +1 -0
  660. package/dist/src/services/durableSession/docs.cjs +65 -0
  661. package/dist/src/services/durableSession/docs.cjs.map +1 -0
  662. package/dist/src/services/durableSession/docs.d.mts +17 -0
  663. package/dist/src/services/durableSession/docs.d.mts.map +1 -0
  664. package/dist/src/services/durableSession/docs.mjs +60 -0
  665. package/dist/src/services/durableSession/docs.mjs.map +1 -0
  666. package/dist/src/services/durableSession/index.cjs +21 -0
  667. package/dist/src/services/durableSession/index.cjs.map +1 -0
  668. package/dist/src/services/durableSession/index.d.mts +13 -0
  669. package/dist/src/services/durableSession/index.d.mts.map +1 -0
  670. package/dist/src/services/durableSession/index.mjs +20 -0
  671. package/dist/src/services/durableSession/index.mjs.map +1 -0
  672. package/dist/src/services/durableSubagents/docs.cjs +15 -0
  673. package/dist/src/services/durableSubagents/docs.cjs.map +1 -0
  674. package/dist/src/services/durableSubagents/docs.mjs +16 -0
  675. package/dist/src/services/durableSubagents/docs.mjs.map +1 -0
  676. package/dist/src/services/durableSubagents/extension.cjs +11 -0
  677. package/dist/src/services/durableSubagents/extension.cjs.map +1 -0
  678. package/dist/src/services/durableSubagents/extension.mjs +12 -0
  679. package/dist/src/services/durableSubagents/extension.mjs.map +1 -0
  680. package/dist/src/services/durableSubagents/index.cjs +95 -0
  681. package/dist/src/services/durableSubagents/index.cjs.map +1 -0
  682. package/dist/src/services/durableSubagents/index.mjs +90 -0
  683. package/dist/src/services/durableSubagents/index.mjs.map +1 -0
  684. package/dist/src/services/durableSubagents/tasks.cjs +25 -0
  685. package/dist/src/services/durableSubagents/tasks.cjs.map +1 -0
  686. package/dist/src/services/durableSubagents/tasks.mjs +26 -0
  687. package/dist/src/services/durableSubagents/tasks.mjs.map +1 -0
  688. package/dist/src/services/headlessClient/index.cjs +20 -13
  689. package/dist/src/services/headlessClient/index.cjs.map +1 -1
  690. package/dist/src/services/headlessClient/index.mjs +21 -14
  691. package/dist/src/services/headlessClient/index.mjs.map +1 -1
  692. package/dist/src/services/historyOwnership/type.d.mts +15 -0
  693. package/dist/src/services/historyOwnership/type.d.mts.map +1 -0
  694. package/dist/src/services/hubChannelHarness/index.cjs +2 -2
  695. package/dist/src/services/hubChannelHarness/index.cjs.map +1 -1
  696. package/dist/src/services/hubChannelHarness/index.d.mts +8 -8
  697. package/dist/src/services/hubChannelHarness/index.d.mts.map +1 -1
  698. package/dist/src/services/hubChannelHarness/index.mjs +2 -2
  699. package/dist/src/services/hubChannelHarness/index.mjs.map +1 -1
  700. package/dist/src/services/json/core.cjs +30 -0
  701. package/dist/src/services/json/core.cjs.map +1 -0
  702. package/dist/src/services/json/core.d.mts +21 -0
  703. package/dist/src/services/json/core.d.mts.map +1 -0
  704. package/dist/src/services/json/core.mjs +26 -0
  705. package/dist/src/services/json/core.mjs.map +1 -0
  706. package/dist/src/services/json/sync.cjs +48 -0
  707. package/dist/src/services/json/sync.cjs.map +1 -0
  708. package/dist/src/services/json/sync.d.mts +22 -0
  709. package/dist/src/services/json/sync.d.mts.map +1 -0
  710. package/dist/src/services/json/sync.mjs +43 -0
  711. package/dist/src/services/json/sync.mjs.map +1 -0
  712. package/dist/src/services/kernel/index.cjs +2 -2
  713. package/dist/src/services/kernel/index.cjs.map +1 -1
  714. package/dist/src/services/kernel/index.d.mts +3 -3
  715. package/dist/src/services/kernel/index.d.mts.map +1 -1
  716. package/dist/src/services/kernel/index.mjs +2 -2
  717. package/dist/src/services/kernel/index.mjs.map +1 -1
  718. package/dist/src/services/nativeChildTools/index.cjs +16 -0
  719. package/dist/src/services/nativeChildTools/index.cjs.map +1 -0
  720. package/dist/src/services/nativeChildTools/index.mjs +16 -0
  721. package/dist/src/services/nativeChildTools/index.mjs.map +1 -0
  722. package/dist/src/services/nodeHost/index.cjs +30 -0
  723. package/dist/src/services/nodeHost/index.cjs.map +1 -0
  724. package/dist/src/services/nodeHost/index.d.mts +16 -0
  725. package/dist/src/services/nodeHost/index.d.mts.map +1 -0
  726. package/dist/src/services/nodeHost/index.mjs +27 -0
  727. package/dist/src/services/nodeHost/index.mjs.map +1 -0
  728. package/dist/src/services/nodeModelDependencies/index.cjs +89 -0
  729. package/dist/src/services/nodeModelDependencies/index.cjs.map +1 -0
  730. package/dist/src/services/nodeModelDependencies/index.mjs +86 -0
  731. package/dist/src/services/nodeModelDependencies/index.mjs.map +1 -0
  732. package/dist/src/services/openSessionRegistry/index.cjs +6 -128
  733. package/dist/src/services/openSessionRegistry/index.cjs.map +1 -1
  734. package/dist/src/services/openSessionRegistry/index.d.mts +5 -36
  735. package/dist/src/services/openSessionRegistry/index.mjs +6 -128
  736. package/dist/src/services/openSessionRegistry/index.mjs.map +1 -1
  737. package/dist/src/services/openSessionRegistry/openSessionRecords.cjs +87 -0
  738. package/dist/src/services/openSessionRegistry/openSessionRecords.cjs.map +1 -0
  739. package/dist/src/services/openSessionRegistry/openSessionRecords.d.mts +30 -0
  740. package/dist/src/services/openSessionRegistry/openSessionRecords.d.mts.map +1 -0
  741. package/dist/src/services/openSessionRegistry/openSessionRecords.mjs +81 -0
  742. package/dist/src/services/openSessionRegistry/openSessionRecords.mjs.map +1 -0
  743. package/dist/src/services/openSessionRegistry/sync.cjs +71 -0
  744. package/dist/src/services/openSessionRegistry/sync.cjs.map +1 -0
  745. package/dist/src/services/openSessionRegistry/sync.d.mts +14 -0
  746. package/dist/src/services/openSessionRegistry/sync.d.mts.map +1 -0
  747. package/dist/src/services/openSessionRegistry/sync.mjs +68 -0
  748. package/dist/src/services/openSessionRegistry/sync.mjs.map +1 -0
  749. package/dist/src/services/packageApiHarness/index.cjs +1 -1
  750. package/dist/src/services/packageApiHarness/index.cjs.map +1 -1
  751. package/dist/src/services/packageApiHarness/index.d.mts +6 -6
  752. package/dist/src/services/packageApiHarness/index.d.mts.map +1 -1
  753. package/dist/src/services/packageApiHarness/index.mjs +2 -2
  754. package/dist/src/services/packageApiHarness/index.mjs.map +1 -1
  755. package/dist/src/services/piArgs/index.cjs +53 -0
  756. package/dist/src/services/piArgs/index.cjs.map +1 -0
  757. package/dist/src/services/piArgs/index.d.mts +6 -0
  758. package/dist/src/services/piArgs/index.d.mts.map +1 -0
  759. package/dist/src/services/piArgs/index.mjs +53 -0
  760. package/dist/src/services/piArgs/index.mjs.map +1 -0
  761. package/dist/src/services/piExtensionHost/index.cjs +47 -39
  762. package/dist/src/services/piExtensionHost/index.cjs.map +1 -1
  763. package/dist/src/services/piExtensionHost/index.d.mts +83 -0
  764. package/dist/src/services/piExtensionHost/index.d.mts.map +1 -0
  765. package/dist/src/services/piExtensionHost/index.mjs +47 -38
  766. package/dist/src/services/piExtensionHost/index.mjs.map +1 -1
  767. package/dist/src/services/piHelpTools/index.cjs +5 -5
  768. package/dist/src/services/piHelpTools/index.cjs.map +1 -1
  769. package/dist/src/services/piHelpTools/index.d.mts.map +1 -1
  770. package/dist/src/services/piHelpTools/index.mjs +7 -7
  771. package/dist/src/services/piHelpTools/index.mjs.map +1 -1
  772. package/dist/src/services/piMessages/index.cjs +106 -0
  773. package/dist/src/services/piMessages/index.cjs.map +1 -0
  774. package/dist/src/services/piMessages/index.mjs +105 -0
  775. package/dist/src/services/piMessages/index.mjs.map +1 -0
  776. package/dist/src/services/piSessionEntries/index.cjs +4 -4
  777. package/dist/src/services/piSessionEntries/index.cjs.map +1 -1
  778. package/dist/src/services/piSessionEntries/index.mjs +3 -3
  779. package/dist/src/services/piSessionEntries/index.mjs.map +1 -1
  780. package/dist/src/services/piSettings/core.cjs +308 -0
  781. package/dist/src/services/piSettings/core.cjs.map +1 -0
  782. package/dist/src/services/piSettings/core.d.mts +102 -0
  783. package/dist/src/services/piSettings/core.d.mts.map +1 -0
  784. package/dist/src/services/piSettings/core.mjs +276 -0
  785. package/dist/src/services/piSettings/core.mjs.map +1 -0
  786. package/dist/src/services/piSettings/sync.cjs +119 -0
  787. package/dist/src/services/piSettings/sync.cjs.map +1 -0
  788. package/dist/src/services/piSettings/sync.d.mts +44 -0
  789. package/dist/src/services/piSettings/sync.d.mts.map +1 -0
  790. package/dist/src/services/piSettings/sync.mjs +110 -0
  791. package/dist/src/services/piSettings/sync.mjs.map +1 -0
  792. package/dist/src/services/piSummary/index.cjs +7 -0
  793. package/dist/src/services/piSummary/index.cjs.map +1 -0
  794. package/dist/src/services/piSummary/index.mjs +7 -0
  795. package/dist/src/services/piSummary/index.mjs.map +1 -0
  796. package/dist/src/services/platformFiles/index.cjs +44 -0
  797. package/dist/src/services/platformFiles/index.cjs.map +1 -0
  798. package/dist/src/services/platformFiles/index.d.mts +16 -0
  799. package/dist/src/services/platformFiles/index.d.mts.map +1 -0
  800. package/dist/src/services/platformFiles/index.mjs +39 -0
  801. package/dist/src/services/platformFiles/index.mjs.map +1 -0
  802. package/dist/src/services/pluginLifecycle/index.cjs +19 -13
  803. package/dist/src/services/pluginLifecycle/index.cjs.map +1 -1
  804. package/dist/src/services/pluginLifecycle/index.d.mts +2 -0
  805. package/dist/src/services/pluginLifecycle/index.d.mts.map +1 -1
  806. package/dist/src/services/pluginLifecycle/index.mjs +19 -14
  807. package/dist/src/services/pluginLifecycle/index.mjs.map +1 -1
  808. package/dist/src/services/poPackage/core.cjs +73 -0
  809. package/dist/src/services/poPackage/core.cjs.map +1 -0
  810. package/dist/src/services/poPackage/core.d.mts +32 -0
  811. package/dist/src/services/poPackage/core.d.mts.map +1 -0
  812. package/dist/src/services/poPackage/core.mjs +66 -0
  813. package/dist/src/services/poPackage/core.mjs.map +1 -0
  814. package/dist/src/services/poPackage/sync.cjs +55 -0
  815. package/dist/src/services/poPackage/sync.cjs.map +1 -0
  816. package/dist/src/services/poPackage/sync.d.mts +21 -0
  817. package/dist/src/services/poPackage/sync.d.mts.map +1 -0
  818. package/dist/src/services/poPackage/sync.mjs +50 -0
  819. package/dist/src/services/poPackage/sync.mjs.map +1 -0
  820. package/dist/src/services/providerAuth/index.cjs +11 -7
  821. package/dist/src/services/providerAuth/index.cjs.map +1 -1
  822. package/dist/src/services/providerAuth/index.mjs +11 -7
  823. package/dist/src/services/providerAuth/index.mjs.map +1 -1
  824. package/dist/src/services/publicFileShares/index.cjs +1 -1
  825. package/dist/src/services/publicFileShares/index.cjs.map +1 -1
  826. package/dist/src/services/publicFileShares/index.d.mts +2 -2
  827. package/dist/src/services/publicFileShares/index.mjs +2 -2
  828. package/dist/src/services/publicFileShares/index.mjs.map +1 -1
  829. package/dist/src/services/remoteAccess/index.d.mts +1 -0
  830. package/dist/src/services/remoteAccess/index.d.mts.map +1 -1
  831. package/dist/src/services/remoteAccessStore/index.cjs +8 -190
  832. package/dist/src/services/remoteAccessStore/index.cjs.map +1 -1
  833. package/dist/src/services/remoteAccessStore/index.d.mts +2 -0
  834. package/dist/src/services/remoteAccessStore/index.mjs +7 -187
  835. package/dist/src/services/remoteAccessStore/index.mjs.map +1 -1
  836. package/dist/src/services/remoteAccessStore/remoteAccessRecords.cjs +98 -0
  837. package/dist/src/services/remoteAccessStore/remoteAccessRecords.cjs.map +1 -0
  838. package/dist/src/services/remoteAccessStore/remoteAccessRecords.mjs +88 -0
  839. package/dist/src/services/remoteAccessStore/remoteAccessRecords.mjs.map +1 -0
  840. package/dist/src/services/remoteAccessStore/sync.cjs +111 -0
  841. package/dist/src/services/remoteAccessStore/sync.cjs.map +1 -0
  842. package/dist/src/services/remoteAccessStore/sync.mjs +108 -0
  843. package/dist/src/services/remoteAccessStore/sync.mjs.map +1 -0
  844. package/dist/src/services/runtimeIdentity/sync.cjs +23 -0
  845. package/dist/src/services/runtimeIdentity/sync.cjs.map +1 -0
  846. package/dist/src/services/runtimeIdentity/sync.d.mts +9 -0
  847. package/dist/src/services/runtimeIdentity/sync.d.mts.map +1 -0
  848. package/dist/src/services/runtimeIdentity/sync.mjs +20 -0
  849. package/dist/src/services/runtimeIdentity/sync.mjs.map +1 -0
  850. package/dist/src/services/serialRunner/index.cjs +25 -0
  851. package/dist/src/services/serialRunner/index.cjs.map +1 -0
  852. package/dist/src/services/serialRunner/index.d.mts +10 -0
  853. package/dist/src/services/serialRunner/index.d.mts.map +1 -0
  854. package/dist/src/services/serialRunner/index.mjs +25 -0
  855. package/dist/src/services/serialRunner/index.mjs.map +1 -0
  856. package/dist/src/services/{serverFacet → serverHost}/index.cjs +5 -5
  857. package/dist/src/services/serverHost/index.cjs.map +1 -0
  858. package/dist/src/services/serverHost/index.d.mts +31 -0
  859. package/dist/src/services/serverHost/index.d.mts.map +1 -0
  860. package/dist/src/services/{serverFacet → serverHost}/index.mjs +5 -5
  861. package/dist/src/services/serverHost/index.mjs.map +1 -0
  862. package/dist/src/services/sessionAttachments/index.cjs +4 -3
  863. package/dist/src/services/sessionAttachments/index.cjs.map +1 -1
  864. package/dist/src/services/sessionAttachments/index.d.mts +1 -6
  865. package/dist/src/services/sessionAttachments/index.d.mts.map +1 -1
  866. package/dist/src/services/sessionAttachments/index.mjs +3 -2
  867. package/dist/src/services/sessionAttachments/index.mjs.map +1 -1
  868. package/dist/src/services/sessionAttachments/type.d.mts +9 -0
  869. package/dist/src/services/sessionAttachments/type.d.mts.map +1 -0
  870. package/dist/src/services/sessionFiles/index.cjs +96 -0
  871. package/dist/src/services/sessionFiles/index.cjs.map +1 -0
  872. package/dist/src/services/sessionFiles/index.d.mts +33 -0
  873. package/dist/src/services/sessionFiles/index.d.mts.map +1 -0
  874. package/dist/src/services/sessionFiles/index.mjs +89 -0
  875. package/dist/src/services/sessionFiles/index.mjs.map +1 -0
  876. package/dist/src/services/sessionFiles/sessionDirectory.cjs +66 -0
  877. package/dist/src/services/sessionFiles/sessionDirectory.cjs.map +1 -0
  878. package/dist/src/services/sessionFiles/sessionDirectory.mjs +62 -0
  879. package/dist/src/services/sessionFiles/sessionDirectory.mjs.map +1 -0
  880. package/dist/src/services/sessionGitStatus/index.cjs +31 -33
  881. package/dist/src/services/sessionGitStatus/index.cjs.map +1 -1
  882. package/dist/src/services/sessionGitStatus/index.mjs +31 -33
  883. package/dist/src/services/sessionGitStatus/index.mjs.map +1 -1
  884. package/dist/src/services/sessionPresentation/index.cjs +3 -27
  885. package/dist/src/services/sessionPresentation/index.cjs.map +1 -1
  886. package/dist/src/services/sessionPresentation/index.mjs +3 -27
  887. package/dist/src/services/sessionPresentation/index.mjs.map +1 -1
  888. package/dist/src/services/skillPrompt/index.cjs +11 -0
  889. package/dist/src/services/skillPrompt/index.cjs.map +1 -0
  890. package/dist/src/services/skillPrompt/index.mjs +11 -0
  891. package/dist/src/services/skillPrompt/index.mjs.map +1 -0
  892. package/dist/src/services/sqliteSessionHistory/index.cjs +44 -30
  893. package/dist/src/services/sqliteSessionHistory/index.cjs.map +1 -1
  894. package/dist/src/services/sqliteSessionHistory/index.d.mts +7 -4
  895. package/dist/src/services/sqliteSessionHistory/index.d.mts.map +1 -1
  896. package/dist/src/services/sqliteSessionHistory/index.mjs +43 -28
  897. package/dist/src/services/sqliteSessionHistory/index.mjs.map +1 -1
  898. package/dist/src/services/sqliteTranscriptReader/index.cjs +21 -45
  899. package/dist/src/services/sqliteTranscriptReader/index.cjs.map +1 -1
  900. package/dist/src/services/sqliteTranscriptReader/index.d.mts +3 -2
  901. package/dist/src/services/sqliteTranscriptReader/index.d.mts.map +1 -1
  902. package/dist/src/services/sqliteTranscriptReader/index.mjs +16 -38
  903. package/dist/src/services/sqliteTranscriptReader/index.mjs.map +1 -1
  904. package/dist/src/services/testMode/index.cjs +162 -0
  905. package/dist/src/services/testMode/index.cjs.map +1 -0
  906. package/dist/src/services/testMode/index.d.mts +17 -0
  907. package/dist/src/services/testMode/index.d.mts.map +1 -0
  908. package/dist/src/services/testMode/index.mjs +155 -0
  909. package/dist/src/services/testMode/index.mjs.map +1 -0
  910. package/dist/src/services/toolOverrides/index.cjs +6 -6
  911. package/dist/src/services/toolOverrides/index.cjs.map +1 -1
  912. package/dist/src/services/toolOverrides/index.d.mts +3 -3
  913. package/dist/src/services/toolOverrides/index.d.mts.map +1 -1
  914. package/dist/src/services/toolOverrides/index.mjs +6 -6
  915. package/dist/src/services/toolOverrides/index.mjs.map +1 -1
  916. package/dist/src/services/toolPrompt/index.d.mts +17 -0
  917. package/dist/src/services/toolPrompt/index.d.mts.map +1 -0
  918. package/dist/src/services/toolSurface/index.cjs +3 -3
  919. package/dist/src/services/toolSurface/index.cjs.map +1 -1
  920. package/dist/src/services/toolSurface/index.d.mts +3 -3
  921. package/dist/src/services/toolSurface/index.d.mts.map +1 -1
  922. package/dist/src/services/toolSurface/index.mjs +4 -4
  923. package/dist/src/services/toolSurface/index.mjs.map +1 -1
  924. package/dist/src/services/traceContext/index.cjs.map +1 -1
  925. package/dist/src/services/traceContext/index.mjs.map +1 -1
  926. package/dist/src/services/transcriptPages/index.cjs +159 -33
  927. package/dist/src/services/transcriptPages/index.cjs.map +1 -1
  928. package/dist/src/services/transcriptPages/index.mjs +158 -34
  929. package/dist/src/services/transcriptPages/index.mjs.map +1 -1
  930. package/dist/src/services/voiceToolsContract/index.cjs +7 -7
  931. package/dist/src/services/voiceToolsContract/index.cjs.map +1 -1
  932. package/dist/src/services/voiceToolsContract/index.d.mts +4 -4
  933. package/dist/src/services/voiceToolsContract/index.d.mts.map +1 -1
  934. package/dist/src/services/voiceToolsContract/index.mjs +7 -7
  935. package/dist/src/services/voiceToolsContract/index.mjs.map +1 -1
  936. package/dist/src/services/workspaceRegistry/index.cjs +9 -179
  937. package/dist/src/services/workspaceRegistry/index.cjs.map +1 -1
  938. package/dist/src/services/workspaceRegistry/index.d.mts +5 -47
  939. package/dist/src/services/workspaceRegistry/index.mjs +7 -176
  940. package/dist/src/services/workspaceRegistry/index.mjs.map +1 -1
  941. package/dist/src/services/workspaceRegistry/sync.cjs +148 -0
  942. package/dist/src/services/workspaceRegistry/sync.cjs.map +1 -0
  943. package/dist/src/services/workspaceRegistry/sync.d.mts +34 -0
  944. package/dist/src/services/workspaceRegistry/sync.d.mts.map +1 -0
  945. package/dist/src/services/workspaceRegistry/sync.mjs +140 -0
  946. package/dist/src/services/workspaceRegistry/sync.mjs.map +1 -0
  947. package/dist/src/services/workspaceRegistry/workspaceRecords.cjs +114 -0
  948. package/dist/src/services/workspaceRegistry/workspaceRecords.cjs.map +1 -0
  949. package/dist/src/services/workspaceRegistry/workspaceRecords.d.mts +31 -0
  950. package/dist/src/services/workspaceRegistry/workspaceRecords.d.mts.map +1 -0
  951. package/dist/src/services/workspaceRegistry/workspaceRecords.mjs +101 -0
  952. package/dist/src/services/workspaceRegistry/workspaceRecords.mjs.map +1 -0
  953. package/dist/src/systems/child/adapters/headlessChildSessionService.cjs +339 -202
  954. package/dist/src/systems/child/adapters/headlessChildSessionService.cjs.map +1 -1
  955. package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts +16 -21
  956. package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts.map +1 -1
  957. package/dist/src/systems/child/adapters/headlessChildSessionService.mjs +329 -191
  958. package/dist/src/systems/child/adapters/headlessChildSessionService.mjs.map +1 -1
  959. package/dist/src/systems/child/services/childSession/index.cjs +94 -20
  960. package/dist/src/systems/child/services/childSession/index.cjs.map +1 -1
  961. package/dist/src/systems/child/services/childSession/index.d.mts +12 -3
  962. package/dist/src/systems/child/services/childSession/index.d.mts.map +1 -1
  963. package/dist/src/systems/child/services/childSession/index.mjs +94 -20
  964. package/dist/src/systems/child/services/childSession/index.mjs.map +1 -1
  965. package/dist/src/systems/child/types/childSession.cjs +33 -13
  966. package/dist/src/systems/child/types/childSession.cjs.map +1 -1
  967. package/dist/src/systems/child/types/childSession.d.mts +143 -80
  968. package/dist/src/systems/child/types/childSession.d.mts.map +1 -1
  969. package/dist/src/systems/child/types/childSession.mjs +24 -9
  970. package/dist/src/systems/child/types/childSession.mjs.map +1 -1
  971. package/dist/src/systems/main/adapters/headlessHost.cjs +30 -27
  972. package/dist/src/systems/main/adapters/headlessHost.cjs.map +1 -1
  973. package/dist/src/systems/main/adapters/headlessHost.d.mts +22 -22
  974. package/dist/src/systems/main/adapters/headlessHost.d.mts.map +1 -1
  975. package/dist/src/systems/main/adapters/headlessHost.mjs +33 -30
  976. package/dist/src/systems/main/adapters/headlessHost.mjs.map +1 -1
  977. package/dist/src/systems/main/adapters/headlessSessionHost.cjs +248 -229
  978. package/dist/src/systems/main/adapters/headlessSessionHost.cjs.map +1 -1
  979. package/dist/src/systems/main/adapters/headlessSessionHost.d.mts +4 -5
  980. package/dist/src/systems/main/adapters/headlessSessionHost.d.mts.map +1 -1
  981. package/dist/src/systems/main/adapters/headlessSessionHost.mjs +239 -219
  982. package/dist/src/systems/main/adapters/headlessSessionHost.mjs.map +1 -1
  983. package/dist/src/systems/main/types/headlessHost.d.mts +16 -14
  984. package/dist/src/systems/main/types/headlessHost.d.mts.map +1 -1
  985. package/dist/src/testing/pi/testHost.cjs +2 -2
  986. package/dist/src/testing/pi/testHost.cjs.map +1 -1
  987. package/dist/src/testing/pi/testHost.d.mts +3 -2
  988. package/dist/src/testing/pi/testHost.mjs +3 -3
  989. package/dist/src/testing/pi/testHost.mjs.map +1 -1
  990. package/dist/src/types/config.d.mts +1 -1
  991. package/dist/src/types/config.d.mts.map +1 -1
  992. package/dist/src/types/kernel.d.mts +3 -3
  993. package/dist/src/types/server/directHarnessRuntime.d.mts +54 -25
  994. package/dist/src/types/server/directHarnessRuntime.d.mts.map +1 -1
  995. package/dist/src/types/server/sessionToolSurface.d.mts +9 -9
  996. package/dist/src/web/services/apiClient/index.d.mts +1 -0
  997. package/dist/src/web/services/apiPaths/index.cjs.map +1 -1
  998. package/dist/src/web/services/apiPaths/index.d.mts +1 -1
  999. package/dist/src/web/services/apiPaths/index.mjs.map +1 -1
  1000. package/dist/src/web/services/mcpWidget.cjs.map +1 -1
  1001. package/dist/src/web/services/mcpWidget.d.mts +2 -2
  1002. package/dist/src/web/services/mcpWidget.d.mts.map +1 -1
  1003. package/dist/src/web/services/mcpWidget.mjs.map +1 -1
  1004. package/dist/src/web/services/testing/templateRail.cjs +3 -0
  1005. package/dist/src/web/services/testing/templateRail.cjs.map +1 -1
  1006. package/dist/src/web/services/testing/templateRail.mjs +3 -0
  1007. package/dist/src/web/services/testing/templateRail.mjs.map +1 -1
  1008. package/dist/src/web/types/mcpWidget.d.mts +1 -1
  1009. package/dist/src/web/types/nativeTemplate.d.mts +1 -1
  1010. package/dist/src/web/types/nativeTemplate.d.mts.map +1 -1
  1011. package/dist/src/web/types/template.d.mts +8 -0
  1012. package/dist/src/web/types/template.d.mts.map +1 -1
  1013. package/dist/src/web/types/webPlugin.d.mts +17 -5
  1014. package/dist/src/web/types/webPlugin.d.mts.map +1 -1
  1015. package/dist/testMode.cjs +4 -0
  1016. package/dist/testMode.d.mts +2 -0
  1017. package/dist/testMode.mjs +1 -0
  1018. package/dist/testing.cjs +1 -1
  1019. package/dist/testing.d.mts +2 -2
  1020. package/dist/testing.mjs +2 -2
  1021. package/dist/toolInventory.cjs.map +1 -1
  1022. package/dist/toolInventory.mjs.map +1 -1
  1023. package/dist/toolNames.mjs +1 -2
  1024. package/dist/toolOverrides.cjs +4 -4
  1025. package/dist/toolOverrides.d.mts +3 -3
  1026. package/dist/toolOverrides.mjs +3 -3
  1027. package/dist/toolSurface.cjs +4 -4
  1028. package/dist/toolSurface.d.mts +3 -3
  1029. package/dist/toolSurface.mjs +3 -3
  1030. package/dist/transition.cjs +3 -3
  1031. package/dist/transition.d.cjs +3 -3
  1032. package/dist/transition.d.mts +2 -2
  1033. package/dist/transition.mjs +1 -2
  1034. package/dist/transitionClassifier.cjs.map +1 -1
  1035. package/dist/transitionClassifier.d.mts +2 -2
  1036. package/dist/transitionClassifier.d.mts.map +1 -1
  1037. package/dist/transitionClassifier.mjs.map +1 -1
  1038. package/dist/transitionCoordinator.cjs +3 -3
  1039. package/dist/transitionCoordinator.cjs.map +1 -1
  1040. package/dist/transitionCoordinator.d.mts +4 -4
  1041. package/dist/transitionCoordinator.d.mts.map +1 -1
  1042. package/dist/transitionCoordinator.mjs +3 -3
  1043. package/dist/transitionCoordinator.mjs.map +1 -1
  1044. package/dist/typesContextApi.d.mts +2 -1
  1045. package/dist/typesContextApi.d.mts.map +1 -1
  1046. package/dist/uiHub.cjs +3 -3
  1047. package/dist/uiHub.d.mts +2 -2
  1048. package/dist/uiHub.mjs +1 -2
  1049. package/dist/voiceTools.cjs +5 -5
  1050. package/dist/voiceTools.d.mts +3 -3
  1051. package/dist/voiceTools.mjs +3 -3
  1052. package/dist/web.cjs +8 -0
  1053. package/dist/web.d.mts +3 -2
  1054. package/dist/web.mjs +2 -1
  1055. package/dist/webCompositions.cjs.map +1 -1
  1056. package/dist/webCompositions.d.mts +7 -7
  1057. package/dist/webCompositions.d.mts.map +1 -1
  1058. package/dist/webCompositions.mjs.map +1 -1
  1059. package/licenses/Codex-Apache-2.0.txt +201 -0
  1060. package/package.json +58 -53
  1061. package/dist/doomPackage.cjs +0 -61
  1062. package/dist/doomPackage.cjs.map +0 -1
  1063. package/dist/doomPackage.d.mts +0 -17
  1064. package/dist/doomPackage.d.mts.map +0 -1
  1065. package/dist/doomPackage.mjs +0 -54
  1066. package/dist/doomPackage.mjs.map +0 -1
  1067. package/dist/jsonlSessionRepo.cjs +0 -44
  1068. package/dist/jsonlSessionRepo.cjs.map +0 -1
  1069. package/dist/jsonlSessionRepo.d.mts +0 -7
  1070. package/dist/jsonlSessionRepo.d.mts.map +0 -1
  1071. package/dist/jsonlSessionRepo.mjs +0 -42
  1072. package/dist/jsonlSessionRepo.mjs.map +0 -1
  1073. package/dist/runtimeJson.cjs.map +0 -1
  1074. package/dist/runtimeJson.d.mts.map +0 -1
  1075. package/dist/runtimeJson.mjs.map +0 -1
  1076. package/dist/runtimePiSettings.cjs.map +0 -1
  1077. package/dist/runtimePiSettings.d.mts.map +0 -1
  1078. package/dist/runtimePiSettings.mjs.map +0 -1
  1079. package/dist/serverFacet.cjs +0 -34
  1080. package/dist/serverFacet.d.mts +0 -10
  1081. package/dist/serverFacet.mjs +0 -9
  1082. package/dist/src/pi/piWebSocketListener.cjs +0 -115
  1083. package/dist/src/pi/piWebSocketListener.cjs.map +0 -1
  1084. package/dist/src/pi/piWebSocketListener.mjs +0 -115
  1085. package/dist/src/pi/piWebSocketListener.mjs.map +0 -1
  1086. package/dist/src/schemas/serverFacet.cjs +0 -111
  1087. package/dist/src/schemas/serverFacet.cjs.map +0 -1
  1088. package/dist/src/schemas/serverFacet.d.mts +0 -152
  1089. package/dist/src/schemas/serverFacet.d.mts.map +0 -1
  1090. package/dist/src/schemas/serverFacet.mjs +0 -101
  1091. package/dist/src/schemas/serverFacet.mjs.map +0 -1
  1092. package/dist/src/schemas/sessionUpdates.d.mts +0 -34
  1093. package/dist/src/schemas/sessionUpdates.d.mts.map +0 -1
  1094. package/dist/src/server/headlessProtocol.cjs +0 -382
  1095. package/dist/src/server/headlessProtocol.cjs.map +0 -1
  1096. package/dist/src/server/headlessProtocol.mjs +0 -382
  1097. package/dist/src/server/headlessProtocol.mjs.map +0 -1
  1098. package/dist/src/server/nativeChildTranscriptReader.cjs +0 -20
  1099. package/dist/src/server/nativeChildTranscriptReader.cjs.map +0 -1
  1100. package/dist/src/server/nativeChildTranscriptReader.mjs +0 -18
  1101. package/dist/src/server/nativeChildTranscriptReader.mjs.map +0 -1
  1102. package/dist/src/server/serverFacetLoader.cjs +0 -214
  1103. package/dist/src/server/serverFacetLoader.cjs.map +0 -1
  1104. package/dist/src/server/serverFacetLoader.d.mts +0 -72
  1105. package/dist/src/server/serverFacetLoader.d.mts.map +0 -1
  1106. package/dist/src/server/serverFacetLoader.mjs +0 -212
  1107. package/dist/src/server/serverFacetLoader.mjs.map +0 -1
  1108. package/dist/src/services/acpSessionUpdates/index.cjs +0 -129
  1109. package/dist/src/services/acpSessionUpdates/index.cjs.map +0 -1
  1110. package/dist/src/services/acpSessionUpdates/index.mjs +0 -129
  1111. package/dist/src/services/acpSessionUpdates/index.mjs.map +0 -1
  1112. package/dist/src/services/historyImport/index.cjs +0 -8
  1113. package/dist/src/services/historyImport/index.cjs.map +0 -1
  1114. package/dist/src/services/historyImport/index.d.mts +0 -68
  1115. package/dist/src/services/historyImport/index.d.mts.map +0 -1
  1116. package/dist/src/services/historyImport/index.mjs +0 -8
  1117. package/dist/src/services/historyImport/index.mjs.map +0 -1
  1118. package/dist/src/services/openSessionRegistry/index.d.mts.map +0 -1
  1119. package/dist/src/services/requestReceipts/index.cjs.map +0 -1
  1120. package/dist/src/services/requestReceipts/index.d.mts +0 -11
  1121. package/dist/src/services/requestReceipts/index.d.mts.map +0 -1
  1122. package/dist/src/services/requestReceipts/index.mjs.map +0 -1
  1123. package/dist/src/services/rpcTranscript/index.cjs +0 -633
  1124. package/dist/src/services/rpcTranscript/index.cjs.map +0 -1
  1125. package/dist/src/services/rpcTranscript/index.d.mts +0 -50
  1126. package/dist/src/services/rpcTranscript/index.d.mts.map +0 -1
  1127. package/dist/src/services/rpcTranscript/index.mjs +0 -632
  1128. package/dist/src/services/rpcTranscript/index.mjs.map +0 -1
  1129. package/dist/src/services/serverFacet/index.cjs.map +0 -1
  1130. package/dist/src/services/serverFacet/index.d.mts +0 -31
  1131. package/dist/src/services/serverFacet/index.d.mts.map +0 -1
  1132. package/dist/src/services/serverFacet/index.mjs.map +0 -1
  1133. package/dist/src/services/workspaceRegistry/index.d.mts.map +0 -1
  1134. package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs +0 -28
  1135. package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs.map +0 -1
  1136. package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs +0 -25
  1137. package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs.map +0 -1
  1138. package/dist/terminalPiChildSessionService.cjs +0 -324
  1139. package/dist/terminalPiChildSessionService.cjs.map +0 -1
  1140. package/dist/terminalPiChildSessionService.d.mts +0 -46
  1141. package/dist/terminalPiChildSessionService.d.mts.map +0 -1
  1142. package/dist/terminalPiChildSessionService.mjs +0 -318
  1143. package/dist/terminalPiChildSessionService.mjs.map +0 -1
  1144. package/dist/v3Export.cjs +0 -10
  1145. package/dist/v3Export.cjs.map +0 -1
  1146. package/dist/v3Export.d.mts +0 -35
  1147. package/dist/v3Export.d.mts.map +0 -1
  1148. package/dist/v3Export.mjs +0 -9
  1149. package/dist/v3Export.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"headlessChildSessionService.mjs","names":[],"sources":["../../../../../src/systems/child/adapters/headlessChildSessionService.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { BACKGROUND_CONTEXT } from '@earendil-works/chord/context';\nimport type { Models, MutableModels, Provider } from '@earendil-works/pi-ai';\nimport {\n createBashTool,\n createEditTool,\n createFindTool,\n createGrepTool,\n createLsTool,\n createReadTool,\n createWriteTool,\n} from '@earendil-works/pi-coding-agent';\nimport { createSession, AgentDoc, type Cursor, type EntryRecord, type EntryId } from '@earendil-works/pi-durable';\n\nimport {\n createDoomChildSessionService,\n type DoomChildSessionIntercom,\n type DoomChildSessionHooks,\n type DoomChildSessionHookBinding,\n type DoomChildSessionRequest,\n type DoomChildSessionRuntime,\n type DoomChildSessionService,\n type DoomChildSessionServiceProvider,\n type DoomChildSessionTool,\n type DoomChildSessionMcpTool,\n} from '../../../exports/childSession';\nimport {\n createDirectHarnessRuntime,\n promptForAssistantText,\n type DirectHarnessRuntime,\n type DirectHarnessRuntimeOptions,\n} from '../../../server/directHarnessRuntime';\nimport { readNativeChildTranscript } from '../../../server/nativeChildTranscriptReader';\nimport { DurableNavigationDoc } from '../../../services/durableNavigation';\nimport type { HistoryOwnership } from '../../../services/historyImport';\nimport { createHistoryOwnership } from '../../../services/historyOwnership';\nimport {\n openReadOnlyDurableStorage,\n openSqliteSessionStorage,\n SessionMetadataDoc,\n SessionIdentityDoc,\n} from '../../../services/sqliteSessionStorage';\nimport type { DirectHarnessModel } from '../../../types/server/directHarnessRuntime';\nimport { registerNativeChild } from './nativeChildRuntimes';\n\nexport interface HeadlessChildSessionServiceOptions {\n readonly parentSessionId: string;\n readonly cwd: string;\n readonly sessionsRoot?: string;\n readonly models?: Models | MutableModels;\n /**\n * Providers to merge into the model registry for every child spawn. A thunk\n * is resolved per spawn so providers registered after this service was built,\n * such as Pi extension providers, are still visible to the child.\n */\n readonly providers?: readonly Provider[] | (() => readonly Provider[]);\n readonly defaultModel?: () => DirectHarnessModel | undefined;\n /** Snapshot the parent preference once per creation, never live-sync child toggles. */\n readonly parentFastMode?: () => boolean | Promise<boolean>;\n /** Resolve the current session's MCP dispatcher at spawn and invocation time. */\n readonly hooks?: () => DoomChildSessionHooks | undefined;\n readonly mcpTool?: () => DoomChildSessionMcpTool | undefined;\n readonly subscribeMcpTool?: (listener: () => void) => () => void;\n readonly historyOwnership?: HistoryOwnership;\n readonly now?: () => number;\n readonly runtimeFactory?: (options: DirectHarnessRuntimeOptions) => Promise<DirectHarnessRuntime>;\n}\n\nexport interface HeadlessChildSessionServiceProvider extends DoomChildSessionServiceProvider {\n close(): Promise<void>;\n}\n\nconst THINKING_SUFFIX_PATTERN = /:(off|minimal|low|medium|high|xhigh|max)$/;\n\nexport interface ParsedChildModel {\n readonly model: DirectHarnessModel;\n readonly thinking?: string;\n}\n\n/**\n * Child model specs may carry a Pi thinking suffix, for example\n * `anthropic-vertex/claude-sonnet-5:medium`. The suffix is a request option and\n * never part of the model id, so it has to be split off before model lookup.\n */\nexport function parseChildModelReference(value: string | undefined): ParsedChildModel | undefined {\n if (value === undefined) return undefined;\n const suffix = THINKING_SUFFIX_PATTERN.exec(value);\n const reference = suffix === null ? value : value.slice(0, value.length - suffix[0].length);\n const separator = reference.indexOf('/');\n if (separator <= 0 || separator === reference.length - 1)\n throw new Error(`Child model must use the provider/model form: ${value}`);\n return {\n model: { provider: reference.slice(0, separator), id: reference.slice(separator + 1) },\n ...(suffix === null ? {} : { thinking: suffix[1] as string }),\n };\n}\n\n/** Resolve the provider set for one spawn, tolerating both a fixed array and a thunk. */\nexport function resolveChildProviders(\n providers: readonly Provider[] | (() => readonly Provider[]) | undefined,\n): readonly Provider[] | undefined {\n const resolved = typeof providers === 'function' ? providers() : providers;\n return resolved === undefined || resolved.length === 0 ? undefined : resolved;\n}\n\nfunction sessionFile(runtime: DirectHarnessRuntime): string | undefined {\n return runtime.sessionFile;\n}\n\nfunction childRuntime(\n runtime: DirectHarnessRuntime,\n intercom?: DoomChildSessionIntercom,\n release?: () => void | Promise<void>,\n): DoomChildSessionRuntime {\n const file = sessionFile(runtime);\n return {\n sessionId: runtime.sessionId,\n ...(file === undefined ? {} : { sessionFile: file }),\n ...(file === undefined\n ? {}\n : { readTranscriptPage: (request, signal) => readNativeChildTranscript(file, request, signal) }),\n prompt: (task) => promptForAssistantText(runtime, task, intercom?.hold?.bind(intercom)),\n async steer(message) {\n await runtime.submitInternalMessage(message, 'steer');\n },\n async followUp(message) {\n await runtime.submitInternalMessage(message, 'followUp');\n },\n onUsage(listener) {\n return runtime.onEvent((event) => {\n if (event.type !== 'usage') return;\n listener({ rowId: event.row.id, cost: event.row.usage.cost.total });\n });\n },\n abort: () => runtime.abort(),\n dispose: async () => {\n try {\n await release?.();\n } finally {\n try {\n await runtime.dispose();\n } finally {\n intercom?.dispose?.();\n }\n }\n },\n };\n}\n\n/** Own the hook lifetime independently of the caller's startup signal. */\nexport function bindChildHooks(\n request: DoomChildSessionRequest,\n hooks: DoomChildSessionHooks | undefined,\n readRuntime: () => DirectHarnessRuntime | undefined,\n signal?: AbortSignal,\n): { binding?: DoomChildSessionHookBinding; dispose(): Promise<void> } {\n const lifetime = new AbortController();\n const abort = () => lifetime.abort(signal?.reason);\n signal?.addEventListener('abort', abort, { once: true });\n if (signal?.aborted) abort();\n const admittedRuntime = () => {\n lifetime.signal.throwIfAborted();\n const runtime = readRuntime();\n if (!runtime) throw new Error('Child hook runtime is not available.');\n return runtime;\n };\n // Copy only data. The borrowed intercom retains its owner and is never frozen.\n const { intercom, ...data } = request;\n const freeze = (value: unknown): void => {\n if (typeof value !== 'object' || value === null) return;\n for (const child of Object.values(value)) freeze(child);\n Object.freeze(value);\n };\n const snapshot = structuredClone(data);\n freeze(snapshot);\n let binding: DoomChildSessionHookBinding | undefined;\n try {\n binding = hooks?.bind({\n request: Object.freeze({ ...snapshot, ...(intercom ? { intercom } : {}) }),\n sessionId: () => readRuntime()?.sessionId,\n signal: lifetime.signal,\n async sendMessage(text, delivery) {\n await admittedRuntime().submitInternalMessage(text, delivery);\n },\n async appendCustomEntry(type, data) {\n await admittedRuntime().appendCustomEntry(type, data);\n },\n });\n } catch (error) {\n lifetime.abort();\n signal?.removeEventListener('abort', abort);\n throw error;\n }\n let disposal: Promise<void> | undefined;\n return {\n ...(binding ? { binding } : {}),\n dispose: () =>\n (disposal ??= (async () => {\n lifetime.abort();\n signal?.removeEventListener('abort', abort);\n await binding?.dispose();\n })()),\n };\n}\n\ntype DirectHarnessTool = Parameters<DirectHarnessRuntime['replaceTools']>[0][number];\n\nasync function installIntercom(\n runtime: DirectHarnessRuntime,\n intercom: DoomChildSessionIntercom | undefined,\n tools: DirectHarnessTool[],\n): Promise<void> {\n if (!intercom) return;\n const tool = intercom.bindRuntime(childRuntime(runtime));\n const adapted: DirectHarnessTool = {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters as never,\n execute: async (operationId, params, onUpdate, _toolContext, _invocation, context) => {\n const result = await tool.execute(\n operationId,\n params,\n context.abortSignal ?? new AbortController().signal,\n (partial) => onUpdate({ content: partial.content as never, details: partial.details }),\n );\n return { content: result.content as never, details: result.details, isError: result.isError };\n },\n };\n tools.push(adapted);\n await runtime.replaceTools(tools);\n}\n\nfunction hasConfiguredValues(value: readonly string[] | undefined): boolean {\n return value !== undefined && value.length > 0;\n}\n\nconst NATIVE_TOOL_FACTORIES = {\n read: createReadTool,\n bash: createBashTool,\n edit: createEditTool,\n write: createWriteTool,\n grep: createGrepTool,\n find: createFindTool,\n ls: createLsTool,\n} as const;\n\ntype NativeCodingTool = ReturnType<(typeof NATIVE_TOOL_FACTORIES)[keyof typeof NATIVE_TOOL_FACTORIES]>;\n\nfunction adaptNativeTool(tool: NativeCodingTool | DoomChildSessionTool): DirectHarnessTool {\n const prompt = tool as (NativeCodingTool | DoomChildSessionTool) & {\n promptSnippet?: string;\n promptGuidelines?: string[];\n executionMode?: string;\n };\n return {\n name: prompt.name,\n description: prompt.description,\n ...(prompt.executionMode === 'parallel' || prompt.executionMode === 'sequential'\n ? { executionMode: prompt.executionMode }\n : {}),\n label: 'label' in tool ? tool.label : tool.name,\n parameters: tool.parameters as never,\n ...('prepareArguments' in tool && typeof tool.prepareArguments === 'function'\n ? { prepareArguments: (args: unknown) => tool.prepareArguments!(args) as never }\n : {}),\n async execute(toolCallId, parameters, onUpdate, _toolContext, _invocation, context) {\n const execute = tool.execute as (\n id: string,\n params: unknown,\n signal: AbortSignal,\n update: (result: { content: unknown; details?: unknown }) => void,\n ) => Promise<{ content: unknown; details?: unknown; isError?: boolean }>;\n const result = await execute(\n toolCallId,\n parameters,\n context.abortSignal ?? new AbortController().signal,\n (partial) => onUpdate({ content: partial.content as never, details: partial.details }),\n );\n if (result.isError) {\n const content = result.content as DoomChildSessionToolResultContent;\n throw new Error(\n content\n .filter((part) => part.type === 'text')\n .map((part) => part.text)\n .join('\\n') || 'MCP tool failed.',\n );\n }\n return { content: result.content as never, details: result.details };\n },\n };\n}\n\ntype DoomChildSessionToolResultContent = Awaited<ReturnType<DoomChildSessionTool['execute']>>['content'];\n\n/** Validate and project native fields before a source fork can publish a child journal. */\nexport function composeDirectHarnessRequestOptions(\n request: DoomChildSessionRequest,\n resolveMcpTool?: () => DoomChildSessionMcpTool | undefined,\n validateRequired = true,\n): Pick<DirectHarnessRuntimeOptions, 'systemPrompt' | 'tools' | 'activeToolNames'> {\n const unsupported = [\n ...(hasConfiguredValues(request.extensions) ? ['extensions'] : []),\n ...(hasConfiguredValues(request.subagentOnlyExtensions) ? ['subagentOnlyExtensions'] : []),\n ...(hasConfiguredValues(request.capabilityCeiling?.allowedExternalProfiles) ? ['allowedExternalProfiles'] : []),\n ];\n if (unsupported.length > 0) {\n throw new Error(\n `Native child session configuration is unsupported by the direct harness: ${unsupported.join(', ')}`,\n );\n }\n\n const requested = [...new Set(request.tools ?? Object.keys(NATIVE_TOOL_FACTORIES))];\n const excluded = new Set(request.excludeTools ?? []);\n const ceiling = request.capabilityCeiling;\n const allowed = ceiling?.allowedTools;\n const isMcp = (name: string) => name === 'mcp' || name === 'mcp_use';\n const mcpDenied =\n (ceiling !== undefined && ceiling.allowMcpTools !== true) ||\n (allowed !== undefined && allowed.every((name) => Object.hasOwn(NATIVE_TOOL_FACTORIES, name))) ||\n [...excluded].some(isMcp);\n const wantsMcp =\n !mcpDenied &&\n (requested.some(isMcp) ||\n hasConfiguredValues(request.mcpDirectTools) ||\n requested.some((name) => !Object.hasOwn(NATIVE_TOOL_FACTORIES, name)));\n const provider = wantsMcp ? resolveMcpTool?.() : undefined;\n const catalog = provider?.catalog;\n const snapshot = catalog?.snapshot() ?? [];\n const expand = (values: readonly string[]) =>\n new Set(values.flatMap((name) => (isMcp(name) ? snapshot.map((tool) => tool.name) : [name])));\n const grants = allowed === undefined ? undefined : expand(allowed);\n const denied = expand([...excluded]);\n const selected = expand(requested);\n if (request.mcpDirectTools?.length) {\n const selectors = new Set(catalog?.resolveSelectors(request.mcpDirectTools) ?? []);\n for (const tool of snapshot) {\n if (!selectors.has(tool.name)) selected.delete(tool.name);\n else if (request.tools === undefined) selected.add(tool.name);\n }\n }\n const nativeNames = requested.filter(\n (name) =>\n Object.hasOwn(NATIVE_TOOL_FACTORIES, name) && !denied.has(name) && (grants === undefined || grants.has(name)),\n );\n const direct = mcpDenied\n ? []\n : snapshot.filter(\n (tool) => selected.has(tool.name) && !denied.has(tool.name) && (grants === undefined || grants.has(tool.name)),\n );\n const unknown = requested.filter(\n (name) =>\n !Object.hasOwn(NATIVE_TOOL_FACTORIES, name) &&\n !isMcp(name) &&\n !snapshot.some((tool) => tool.name === name) &&\n !denied.has(name) &&\n (grants === undefined || grants.has(name)),\n );\n if (unknown.length > 0 && validateRequired)\n throw new Error(`Native child session requested unknown direct harness tools: ${unknown.join(', ')}`);\n const names = [...nativeNames, ...direct.map((tool) => tool.name)];\n const required = ceiling?.requiredTools ?? [];\n const missing = required.filter((name) => (isMcp(name) ? direct.length === 0 : !names.includes(name)));\n if (validateRequired && missing.length > 0)\n throw new Error(`Native child session capability ceiling requires unavailable tools: ${missing.join(', ')}`);\n if (validateRequired && wantsMcp && !catalog)\n throw new Error('Native child session MCP tools are unavailable. Enable MCP in the parent session.');\n const tools = [\n ...nativeNames.map((name) =>\n adaptNativeTool(\n NATIVE_TOOL_FACTORIES[name as keyof typeof NATIVE_TOOL_FACTORIES](request.cwd) as NativeCodingTool,\n ),\n ),\n ...direct.map((tool) =>\n adaptNativeTool({\n ...tool,\n execute(toolCallId, parameters, signal, onUpdate) {\n signal?.throwIfAborted();\n if (resolveMcpTool?.() !== provider || !catalog?.snapshot().includes(tool))\n throw new Error('The parent session MCP tool is no longer available.');\n return tool.execute(toolCallId, parameters, signal, onUpdate);\n },\n } satisfies DoomChildSessionTool),\n ),\n ];\n return {\n tools,\n activeToolNames: names,\n ...(request.systemPrompt === undefined ? {} : { systemPrompt: request.systemPrompt }),\n };\n}\n\n/** Refresh borrowed declarations without replacing native tools or rebinding intercom. */\nexport function bindChildMcpCatalog(\n runtime: DirectHarnessRuntime,\n request: DoomChildSessionRequest,\n options: Pick<HeadlessChildSessionServiceOptions, 'mcpTool' | 'subscribeMcpTool'>,\n initialTools: readonly DirectHarnessTool[],\n): () => void {\n if (request.capabilityCeiling !== undefined && request.capabilityCeiling.allowMcpTools !== true)\n return () => undefined;\n if (request.capabilityCeiling?.allowedTools?.every((name) => Object.hasOwn(NATIVE_TOOL_FACTORIES, name)))\n return () => undefined;\n if (request.excludeTools?.some((name) => name === 'mcp' || name === 'mcp_use')) return () => undefined;\n if (\n !request.tools?.some(\n (name) => name === 'mcp' || name === 'mcp_use' || !Object.hasOwn(NATIVE_TOOL_FACTORIES, name),\n ) &&\n !request.mcpDirectTools?.length\n )\n return () => undefined;\n const retained = initialTools.filter(\n (tool, index) =>\n Object.hasOwn(NATIVE_TOOL_FACTORIES, tool.name) ||\n (request.intercom !== undefined && index === initialTools.length - 1),\n );\n let disposed = false;\n let provider: DoomChildSessionMcpTool | undefined;\n let unsubscribeCatalog: (() => void) | undefined;\n let previous: readonly DoomChildSessionTool[] = [];\n let pending = Promise.resolve();\n let failure: unknown;\n const refresh = () => {\n if (disposed) return;\n const current = options.mcpTool?.();\n const changed = current !== provider;\n if (changed) {\n unsubscribeCatalog?.();\n provider = current;\n unsubscribeCatalog = provider?.catalog?.subscribe(refresh);\n }\n const snapshot = provider?.catalog?.snapshot() ?? [];\n if (!changed && snapshot.length === previous.length && snapshot.every((tool, index) => tool === previous[index]))\n return;\n previous = snapshot;\n const composition = composeDirectHarnessRequestOptions(request, options.mcpTool, false);\n const direct = (composition.tools ?? []).filter((tool) => !Object.hasOwn(NATIVE_TOOL_FACTORIES, tool.name));\n pending = pending\n .then(async () => {\n if (!disposed) await runtime.replaceTools([...retained, ...direct]);\n })\n .catch((error: unknown) => {\n failure = error;\n });\n };\n const unsubscribeProvider = options.subscribeMcpTool?.(refresh);\n refresh();\n return () => {\n disposed = true;\n unsubscribeProvider?.();\n unsubscribeCatalog?.();\n if (failure !== undefined) throw new Error('Child MCP catalog refresh failed.', { cause: failure });\n };\n}\n\nasync function forkChildJournal(\n sourcePath: string,\n branch: string,\n entryId: string | undefined,\n ownership: HistoryOwnership,\n parentSessionId?: string,\n): Promise<string> {\n const source = await openReadOnlyDurableStorage(sourcePath);\n const read = createSession(source);\n let destination: Awaited<ReturnType<typeof openSqliteSessionStorage>> | undefined;\n const failures: unknown[] = [];\n try {\n const navigation = await read.snapshot(DurableNavigationDoc, BACKGROUND_CONTEXT);\n const selected = navigation?.activeConversationId;\n if (selected === null || selected === undefined) throw new Error('Child source has no active conversation');\n const metadata = await read.snapshot(SessionMetadataDoc, BACKGROUND_CONTEXT);\n if (branch !== (metadata?.laneName ?? 'main')) throw new Error('Child source lane does not exist');\n const cutoff = entryId === undefined ? undefined : (Number(entryId) as EntryId);\n if (\n entryId !== undefined &&\n (!Number.isSafeInteger(cutoff) || !(await source.entry(selected, cutoff!, BACKGROUND_CONTEXT)))\n )\n throw new Error('Child fork entry is not visible in its source conversation');\n const records: EntryRecord[] = [];\n let cursor: Cursor | undefined;\n do {\n const page = await source.scanEntries(\n { conversationId: selected, ...(cutoff === undefined ? {} : { maxEntryId: cutoff }) },\n 256,\n cursor,\n BACKGROUND_CONTEXT,\n );\n records.push(...page.items);\n cursor = page.next;\n } while (cursor);\n records.reverse();\n const agent =\n cutoff === undefined\n ? await read.snapshot(AgentDoc, selected, BACKGROUND_CONTEXT)\n : await read.snapshotAsOf(AgentDoc, selected, cutoff, BACKGROUND_CONTEXT);\n destination = await openSqliteSessionStorage(\n {\n sessionsRoot: path.dirname(path.dirname(path.resolve(sourcePath))),\n sessionId: randomUUID(),\n parentSessionId: parentSessionId ?? (await read.snapshot(SessionIdentityDoc, BACKGROUND_CONTEXT))?.id,\n historyOwnership: ownership,\n },\n BACKGROUND_CONTEXT,\n );\n await destination.session.commit(async (tx) => {\n const conversation = await tx.createConversation({ ownership: { kind: 'ownerless' } });\n if (agent) Object.assign(await tx.doc(AgentDoc, conversation.id), agent);\n (await tx.doc(SessionMetadataDoc)).laneName = branch;\n const ids = new Map<number, EntryId>();\n for (const entry of records) {\n const { id: _id, conversationId: _conversation, byTaskId: _task, head, edits, ...draft } = entry;\n const appended = await tx.appendEntry(conversation.id, {\n ...draft,\n ...(head === undefined ? {} : { head: head === entry.id ? 'self' : ids.get(head) }),\n ...(edits === undefined\n ? {}\n : {\n edits: edits.map((edit) => {\n const target = ids.get(edit.target);\n if (target === undefined) throw new Error('Invalid fork context edit');\n return { ...edit, target };\n }),\n }),\n });\n ids.set(entry.id, appended.id);\n }\n (await tx.doc(DurableNavigationDoc)).activeConversationId = conversation.id;\n }, BACKGROUND_CONTEXT);\n } catch (error) {\n failures.push(error);\n }\n try {\n await read.close(BACKGROUND_CONTEXT);\n } catch (error) {\n failures.push(error);\n }\n if (destination) {\n try {\n await destination.session.close(BACKGROUND_CONTEXT);\n await destination.historyLease.release();\n } catch (error) {\n failures.push(error);\n }\n }\n if (failures.length === 1) throw failures[0];\n if (failures.length > 1) throw new AggregateError(failures, 'Child fork cleanup failed');\n if (!destination) throw new Error('Child fork failed');\n return destination.sessionFile;\n}\n\nexport function createHeadlessChildSessionService(\n options: HeadlessChildSessionServiceOptions,\n): DoomChildSessionService {\n const runtimeFactory = options.runtimeFactory ?? createDirectHarnessRuntime;\n const ownership = options.historyOwnership ?? createHistoryOwnership({ sourceFormat: 'sqlite' });\n\n return createDoomChildSessionService(\n async (request: DoomChildSessionRequest, signal): Promise<DoomChildSessionRuntime> => {\n signal?.throwIfAborted();\n if (request.source.kind === 'terminal-pi-fork')\n throw new Error('Headless child sessions do not support terminal Pi sources.');\n const directRequestOptions = composeDirectHarnessRequestOptions(request, options.mcpTool);\n const fastMode = await options.parentFastMode?.();\n if (fastMode !== undefined && typeof fastMode !== 'boolean')\n throw new Error('Parent Fast mode must be a boolean.');\n\n let sessionPath: string | undefined;\n let sessionId: string | undefined;\n if (request.source.kind === 'v4-restore') {\n sessionPath = path.resolve(request.source.sessionFile);\n if (path.extname(sessionPath) !== '.sqlite')\n throw new Error('Server child restore requires SQLite; import JSONL offline first.');\n } else if (request.source.kind === 'v4-fork') {\n sessionPath = await forkChildJournal(\n request.source.sessionFile,\n request.source.branch,\n request.source.entryId,\n ownership,\n request.parentSessionId || options.parentSessionId,\n );\n } else {\n sessionId = randomUUID();\n }\n\n const requestedModel = parseChildModelReference(request.model);\n const model = requestedModel?.model ?? options.defaultModel?.();\n const thinking = request.thinking ?? requestedModel?.thinking;\n const providers = resolveChildProviders(options.providers);\n const runtimeOptions: DirectHarnessRuntimeOptions = {\n storage: 'sqlite',\n ...(request.source.kind === 'v4-fork' ? { lane: request.source.branch } : {}),\n cwd: request.cwd || options.cwd,\n ...(sessionId === undefined ? {} : { sessionId }),\n parentSessionId: request.parentSessionId || options.parentSessionId,\n ...(sessionPath === undefined ? {} : { sessionPath }),\n ...(options.sessionsRoot === undefined ? {} : { sessionsRoot: options.sessionsRoot }),\n ...(options.models === undefined ? {} : { models: options.models }),\n ...(providers === undefined ? {} : { providers }),\n ...(model === undefined ? {} : { model }),\n ...(thinking === undefined ? {} : { thinkingLevel: thinking as never }),\n ...directRequestOptions,\n ...(fastMode === undefined ? {} : { initialFastMode: fastMode }),\n historyOwnership: ownership,\n };\n\n let runtime: DirectHarnessRuntime | undefined;\n let hooks: ReturnType<typeof bindChildHooks> | undefined;\n try {\n hooks = bindChildHooks(request, options.hooks?.(), () => runtime, signal);\n if (hooks.binding) {\n runtimeOptions.beforeTool = hooks.binding.beforeTool;\n runtimeOptions.afterTool = hooks.binding.afterTool;\n }\n runtime = await runtimeFactory(runtimeOptions);\n if (requestedModel && model) await runtime.setModel(model);\n if (thinking !== undefined) await runtime.setThinkingLevel(thinking as never);\n await installIntercom(runtime, request.intercom, (runtimeOptions.tools ?? []) as DirectHarnessTool[]);\n const releaseMcp = bindChildMcpCatalog(runtime, request, options, runtimeOptions.tools ?? []);\n const file = sessionFile(runtime);\n const releaseNative = file ? registerNativeChild(file, runtime) : undefined;\n return childRuntime(runtime, request.intercom, async () => {\n try {\n releaseMcp();\n } finally {\n try {\n releaseNative?.();\n } finally {\n await hooks?.dispose();\n }\n }\n });\n } catch (error) {\n const failures: unknown[] = [error];\n try {\n await hooks?.dispose();\n } catch (cleanupError) {\n failures.push(cleanupError);\n }\n let closed = false;\n try {\n if (runtime) {\n await runtime.dispose();\n closed = true;\n }\n } catch (cleanupError) {\n failures.push(cleanupError);\n }\n try {\n request.intercom?.dispose?.();\n } catch (cleanupError) {\n failures.push(cleanupError);\n }\n // A rejected factory may have failed its own writer cleanup, so retain that fork.\n if (closed && sessionPath !== undefined && request.source.kind === 'v4-fork') {\n try {\n for (const suffix of ['', '-wal', '-shm']) fs.rmSync(sessionPath + suffix, { force: true });\n } catch (cleanupError) {\n failures.push(cleanupError);\n }\n }\n if (failures.length > 1) throw new AggregateError(failures, 'Headless child startup cleanup failed');\n throw error;\n }\n },\n { now: options.now ?? Date.now },\n );\n}\n\nexport function createHeadlessChildSessionServiceProvider(\n options: HeadlessChildSessionServiceOptions,\n): HeadlessChildSessionServiceProvider {\n const service = createHeadlessChildSessionService(options);\n return {\n get: () => service,\n close: () => service.close(),\n };\n}\n\nexport type { DirectHarnessRuntime, DirectHarnessRuntimeOptions } from '../../../server/directHarnessRuntime';\nexport type { DirectHarnessModel } from '../../../types/server/directHarnessRuntime';\n"],"mappings":"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"}
1
+ {"version":3,"file":"headlessChildSessionService.mjs","names":[],"sources":["../../../../../src/systems/child/adapters/headlessChildSessionService.ts"],"sourcesContent":["import { BACKGROUND_CONTEXT, withAbortSignal } from '@earendil-works/chord/context';\nimport type { Conversation, ConversationId, EntryId, Harness, JsonObject } from '@earendil-works/pi-durable';\n\nimport {\n createPoChildSessionService,\n PO_CHILD_INPUT_CUSTOM_TYPE,\n type PoChildSessionConfig,\n type PoChildSessionInput,\n type PoChildSessionIntercom,\n type PoChildSessionHooks,\n type PoChildSessionHookBinding,\n type PoChildSessionHookRegistry,\n type PoChildSessionRequest,\n type PoChildSessionRuntime,\n type PoChildSessionService,\n type PoChildSessionServiceProvider,\n type PoChildSessionTool,\n type PoChildSessionMcpTool,\n type PoChildThread,\n type PoStoredChildRun,\n} from '../../../exports/childSession';\nimport { createAgentSessionRuntime, type AgentSessionRuntime } from '../../../pi/piSessionRuntime';\nimport type { TranscriptPage, TranscriptPageRequest } from '../../../schemas/sessionProtocol';\nimport {\n promptForAssistantText,\n type DirectHarnessRuntime,\n type DirectHarnessRuntimeOptions,\n} from '../../../server/directHarnessRuntime';\nimport { IdentityHistoryDoc } from '../../../services/durableSession/docs';\nimport { createSubagentConversation, markSubagentReported, readSubagents } from '../../../services/durableSubagents';\nimport { NATIVE_TOOL_FACTORIES } from '../../../services/nativeChildTools';\nimport { durableTranscriptLane, readTranscriptPage } from '../../../services/transcriptPages';\nimport type { DirectHarnessLaneOptions, DirectHarnessModel } from '../../../types/server/directHarnessRuntime';\n\nexport interface HeadlessChildSessionServiceOptions {\n readonly cwd: string;\n /** The parent session's runtime: every child is one more lane of its Harness. */\n readonly runtime: DirectHarnessRuntime;\n /** Resolve the current session's child hooks at spawn and invocation time. */\n readonly hooks?: () => PoChildSessionHooks | undefined;\n /** Resolve the current session's MCP dispatcher at spawn and invocation time. */\n readonly mcpTool?: () => PoChildSessionMcpTool | undefined;\n readonly subscribeMcpTool?: (listener: () => void) => () => void;\n readonly now?: () => number;\n}\n\nexport interface HeadlessChildSessionService extends PoChildSessionService {\n thread(runId: string): PoChildThread | undefined;\n}\n\nexport interface HeadlessChildSessionServiceProvider extends PoChildSessionServiceProvider {\n get(): HeadlessChildSessionService;\n close(): Promise<void>;\n}\n\nconst THINKING_SUFFIX_PATTERN = /:(off|minimal|low|medium|high|xhigh|max)$/;\n\nexport interface ParsedChildModel {\n readonly model: DirectHarnessModel;\n readonly thinking?: string;\n}\n\n/**\n * Child model specs may carry a Pi thinking suffix, for example\n * `anthropic-vertex/claude-sonnet-5:medium`. The suffix is a request option and\n * never part of the model id, so it has to be split off before model lookup.\n */\nexport function parseChildModelReference(value: string | undefined): ParsedChildModel | undefined {\n if (value === undefined) return undefined;\n const suffix = THINKING_SUFFIX_PATTERN.exec(value);\n const reference = suffix === null ? value : value.slice(0, value.length - suffix[0].length);\n const separator = reference.indexOf('/');\n if (separator <= 0 || separator === reference.length - 1)\n throw new Error(`Child model must use the provider/model form: ${value}`);\n return {\n model: { provider: reference.slice(0, separator), id: reference.slice(separator + 1) },\n ...(suffix === null ? {} : { thinking: suffix[1] as string }),\n };\n}\n\n/**\n * An attributed input rides a displayed custom message whose details carry the\n * sender. The model reads its text once, as a user turn, exactly like a string.\n */\nexport function childInputMessage(\n input: PoChildSessionInput,\n): Parameters<DirectHarnessRuntime['submitInternalMessage']>[0] {\n if (typeof input === 'string') return input;\n return {\n role: 'custom',\n customType: PO_CHILD_INPUT_CUSTOM_TYPE,\n content: input.text,\n display: true,\n details: { sender: input.sender },\n timestamp: Date.now(),\n };\n}\n\n/** The runtime's own model and effort, read once and then followed through its config changes. */\nfunction observeChildConfig(\n runtime: DirectHarnessRuntime,\n listener: (config: PoChildSessionConfig) => void,\n): () => void {\n const changed = new Set<string>();\n let open = true;\n const off = runtime.onEvent((event) => {\n if (event.type !== 'config_update') return;\n changed.add(event.property);\n listener(\n event.property === 'model'\n ? { model: `${event.value.provider}/${event.value.modelId}` }\n : { thinking: event.value },\n );\n });\n void runtime.readState().then(\n (state) => {\n const model = state.model as { provider?: unknown; id?: unknown } | undefined;\n if (!open) return;\n listener({\n ...(!changed.has('model') && typeof model?.provider === 'string' && typeof model.id === 'string'\n ? { model: `${model.provider}/${model.id}` }\n : {}),\n ...(!changed.has('thinkingLevel') && typeof state.thinkingLevel === 'string'\n ? { thinking: state.thinkingLevel }\n : {}),\n });\n },\n // A runtime that cannot read its state reports nothing; the run shows its config as not reported.\n () => undefined,\n );\n return () => {\n open = false;\n off();\n };\n}\n\n/** Input, usage and observation methods of a child lane. */\nfunction childRuntimeMethods(\n runtime: DirectHarnessRuntime,\n inputRequestId: string,\n hold?: () => Promise<boolean>,\n): Pick<PoChildSessionRuntime, 'prompt' | 'steer' | 'followUp' | 'abort' | 'onUsage' | 'onConfig' | 'onToolStart'> {\n return {\n prompt: (task) => promptForAssistantText(runtime, childInputMessage(task), hold, inputRequestId),\n async steer(message) {\n await runtime.submitInternalMessage(childInputMessage(message), 'steer');\n },\n async followUp(message) {\n await runtime.submitInternalMessage(childInputMessage(message), 'followUp');\n },\n abort: () => runtime.abort(),\n onUsage: (listener) =>\n runtime.onEvent((event) => {\n if (event.type !== 'usage') return;\n listener({ rowId: event.row.id, cost: event.row.usage.cost.total, tokens: event.row.usage.totalTokens });\n }),\n onConfig: (listener) => observeChildConfig(runtime, listener),\n onToolStart: (listener) =>\n runtime.onEvent((event) => {\n if (event.type === 'tool_execution_start') listener(event.toolCallId);\n }),\n };\n}\n\n/** Pages of a child conversation through its parent's Harness, also after the child's lane closed. */\nfunction childTranscriptReader(harness: Harness, conversation: Conversation, sessionId: string) {\n return async (request: Omit<TranscriptPageRequest, 'threadId'>, signal?: AbortSignal): Promise<TranscriptPage> => {\n const context = signal ? withAbortSignal(signal, BACKGROUND_CONTEXT) : BACKGROUND_CONTEXT;\n const page = await readTranscriptPage(\n {\n sessionId,\n laneName: 'main',\n lane: durableTranscriptLane(\n (query, limit, cursor, scanContext) => conversation.entries(query, limit, cursor, scanContext),\n (readContext) => harness.snapshot(IdentityHistoryDoc, conversation.id, readContext),\n ),\n },\n request,\n 0,\n context,\n );\n return { ...page, revision: 0 };\n };\n}\n\n/** Pages of a stored run's conversation, opened on first read: what a thread view reads once the run's lane is gone. */\nfunction storedTranscriptReader(harness: Harness, conversationId: number, sessionId: string) {\n let opening: Promise<ReturnType<typeof childTranscriptReader>> | undefined;\n return async (request: Omit<TranscriptPageRequest, 'threadId'>, signal?: AbortSignal): Promise<TranscriptPage> => {\n opening ??= harness.conversation(conversationId as ConversationId, BACKGROUND_CONTEXT).then((conversation) => {\n if (!conversation) throw new Error(`Child conversation ${conversationId} is unavailable.`);\n return childTranscriptReader(harness, conversation, sessionId);\n });\n try {\n const read = await opening;\n return await read(request, signal);\n } catch (error) {\n opening = undefined;\n throw error;\n }\n };\n}\n\nfunction childRuntime(\n runtime: DirectHarnessRuntime,\n inputRequestId: string,\n readPage: PoChildSessionRuntime['readTranscriptPage'],\n intercom?: PoChildSessionIntercom,\n release?: () => void | Promise<void>,\n): PoChildSessionRuntime {\n return {\n sessionId: runtime.sessionId,\n ...(readPage ? { readTranscriptPage: readPage } : {}),\n ...childRuntimeMethods(runtime, inputRequestId, intercom?.hold?.bind(intercom)),\n dispose: async () => {\n try {\n await release?.();\n } finally {\n try {\n await runtime.dispose();\n } finally {\n intercom?.dispose?.();\n }\n }\n },\n };\n}\n\n/** Own the hook lifetime independently of the caller's startup signal. */\nexport function bindChildHooks(\n request: PoChildSessionRequest,\n hooks: PoChildSessionHooks | undefined,\n readRuntime: () => DirectHarnessRuntime | undefined,\n signal?: AbortSignal,\n): { binding?: PoChildSessionHookBinding; dispose(): Promise<void> } {\n const lifetime = new AbortController();\n const abort = () => lifetime.abort(signal?.reason);\n signal?.addEventListener('abort', abort, { once: true });\n if (signal?.aborted) abort();\n const admittedRuntime = () => {\n lifetime.signal.throwIfAborted();\n const runtime = readRuntime();\n if (!runtime) throw new Error('Child hook runtime is not available.');\n return runtime;\n };\n // Copy only data. The borrowed intercom retains its owner and is never frozen.\n const { intercom, ...data } = request;\n const freeze = (value: unknown): void => {\n if (typeof value !== 'object' || value === null) return;\n for (const child of Object.values(value)) freeze(child);\n Object.freeze(value);\n };\n const snapshot = structuredClone(data);\n freeze(snapshot);\n let binding: PoChildSessionHookBinding | undefined;\n try {\n binding = hooks?.bind({\n request: Object.freeze({ ...snapshot, ...(intercom ? { intercom } : {}) }),\n sessionId: () => readRuntime()?.sessionId,\n signal: lifetime.signal,\n async sendMessage(text, delivery) {\n await admittedRuntime().submitInternalMessage(text, delivery);\n },\n async appendCustomEntry(type, data) {\n await admittedRuntime().appendCustomEntry(type, data);\n },\n });\n } catch (error) {\n lifetime.abort();\n signal?.removeEventListener('abort', abort);\n throw error;\n }\n let disposal: Promise<void> | undefined;\n return {\n ...(binding ? { binding } : {}),\n dispose: () =>\n (disposal ??= (async () => {\n lifetime.abort();\n signal?.removeEventListener('abort', abort);\n await binding?.dispose();\n })()),\n };\n}\n\nexport function createPoChildSessionHookRegistry(): PoChildSessionHookRegistry {\n const entries = new Set<PoChildSessionHooks>();\n return {\n register(hooks) {\n entries.add(hooks);\n return { dispose: () => void entries.delete(hooks) };\n },\n list: () => [...entries],\n };\n}\n\n/**\n * Chains child hooks into one provider. The first is the legacy single provider: its errors\n * propagate as before. Later hooks see the patched result, and their errors are reported and skipped,\n * so an observer can never break a child tool call.\n */\nexport function composeChildSessionHooks(\n list: readonly (PoChildSessionHooks | undefined)[],\n onError?: (message: string) => void,\n): PoChildSessionHooks | undefined {\n const hooks = list.filter((entry): entry is PoChildSessionHooks => entry !== undefined);\n if (hooks.length <= 1) return hooks[0];\n const report = (error: unknown): void =>\n onError?.(`Child session hook failed: ${error instanceof Error ? error.message : String(error)}`);\n return {\n bind(scope) {\n const bindings: PoChildSessionHookBinding[] = [];\n try {\n for (const entry of hooks) bindings.push(entry.bind(scope));\n } catch (error) {\n void Promise.allSettled(bindings.map((binding) => binding.dispose()));\n throw error;\n }\n return {\n async beforeTool(event, context) {\n let args = event.args;\n let changed = false;\n for (const [index, binding] of bindings.entries()) {\n let result: Awaited<ReturnType<PoChildSessionHookBinding['beforeTool']>>;\n try {\n result = await binding.beforeTool({ ...event, args }, context);\n } catch (error) {\n if (index === 0) throw error;\n report(error);\n continue;\n }\n if (result?.block) return result;\n if (result?.args) {\n args = result.args;\n changed = true;\n }\n }\n return changed ? { args } : undefined;\n },\n async afterTool(event, context) {\n let current = event;\n let patch: NonNullable<Awaited<ReturnType<PoChildSessionHookBinding['afterTool']>>> | undefined;\n for (const [index, binding] of bindings.entries()) {\n let result: Awaited<ReturnType<PoChildSessionHookBinding['afterTool']>>;\n try {\n result = await binding.afterTool(current, context);\n } catch (error) {\n if (index === 0) throw error;\n report(error);\n continue;\n }\n if (!result) continue;\n const terminate = patch?.terminate === true || result.terminate === true;\n patch = { ...patch, ...result, ...(terminate ? { terminate } : {}) };\n current = {\n ...current,\n ...(result.content === undefined ? {} : { content: result.content }),\n ...(result.details === undefined ? {} : { details: result.details }),\n ...(result.isError === undefined ? {} : { isError: result.isError }),\n ...(result.usage === undefined ? {} : { usage: result.usage }),\n };\n }\n return patch;\n },\n async dispose() {\n const results = await Promise.allSettled(bindings.map((binding) => binding.dispose()));\n const failure = results.find((result) => result.status === 'rejected');\n if (failure) throw failure.reason;\n },\n };\n },\n };\n}\n\ntype DirectHarnessTool = Parameters<DirectHarnessRuntime['replaceTools']>[0][number];\n\nasync function installIntercom(\n runtime: DirectHarnessRuntime,\n intercom: PoChildSessionIntercom | undefined,\n tools: DirectHarnessTool[],\n inputRequestId: string,\n): Promise<void> {\n if (!intercom) return;\n const tool = intercom.bindRuntime(childRuntime(runtime, inputRequestId, undefined));\n const adapted: DirectHarnessTool = {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters as never,\n execute: async (operationId, params, onUpdate, _toolContext, _invocation, context) => {\n const result = await tool.execute(\n operationId,\n params,\n context.abortSignal ?? new AbortController().signal,\n (partial) => onUpdate({ content: partial.content as never, details: partial.details }),\n );\n return { content: result.content as never, details: result.details, isError: result.isError };\n },\n };\n tools.push(adapted);\n await runtime.replaceTools(tools);\n}\n\nfunction hasConfiguredValues(value: readonly string[] | undefined): boolean {\n return value !== undefined && value.length > 0;\n}\n\ntype NativeCodingTool = ReturnType<(typeof NATIVE_TOOL_FACTORIES)[keyof typeof NATIVE_TOOL_FACTORIES]>;\n\nfunction adaptNativeTool(tool: NativeCodingTool | PoChildSessionTool): DirectHarnessTool {\n const prompt = tool as (NativeCodingTool | PoChildSessionTool) & {\n promptSnippet?: string;\n promptGuidelines?: string[];\n executionMode?: string;\n };\n return {\n name: prompt.name,\n description: prompt.description,\n ...(prompt.executionMode === 'parallel' || prompt.executionMode === 'sequential'\n ? { executionMode: prompt.executionMode }\n : {}),\n label: 'label' in tool ? tool.label : tool.name,\n parameters: tool.parameters as never,\n ...('prepareArguments' in tool && typeof tool.prepareArguments === 'function'\n ? { prepareArguments: (args: unknown) => tool.prepareArguments!(args) as never }\n : {}),\n async execute(toolCallId, parameters, onUpdate, _toolContext, _invocation, context) {\n const execute = tool.execute as (\n id: string,\n params: unknown,\n signal: AbortSignal,\n update: (result: { content: unknown; details?: unknown }) => void,\n ) => Promise<{ content: unknown; details?: unknown; isError?: boolean }>;\n const result = await execute(\n toolCallId,\n parameters,\n context.abortSignal ?? new AbortController().signal,\n (partial) => onUpdate({ content: partial.content as never, details: partial.details }),\n );\n if (result.isError) {\n const content = result.content as PoChildSessionToolResultContent;\n throw new Error(\n content\n .filter((part) => part.type === 'text')\n .map((part) => part.text)\n .join('\\n') || 'MCP tool failed.',\n );\n }\n return { content: result.content as never, details: result.details };\n },\n };\n}\n\ntype PoChildSessionToolResultContent = Awaited<ReturnType<PoChildSessionTool['execute']>>['content'];\n\n/** Validate and project native fields before the child conversation is created. */\nexport function composeDirectHarnessRequestOptions(\n request: PoChildSessionRequest,\n resolveMcpTool?: () => PoChildSessionMcpTool | undefined,\n validateRequired = true,\n): Pick<DirectHarnessRuntimeOptions, 'systemPrompt' | 'tools' | 'activeToolNames'> {\n const unsupported = [\n ...(hasConfiguredValues(request.extensions) ? ['extensions'] : []),\n ...(hasConfiguredValues(request.subagentOnlyExtensions) ? ['subagentOnlyExtensions'] : []),\n ...(hasConfiguredValues(request.capabilityCeiling?.allowedExternalProfiles) ? ['allowedExternalProfiles'] : []),\n ];\n if (unsupported.length > 0) {\n throw new Error(\n `Native child session configuration is unsupported by the direct harness: ${unsupported.join(', ')}`,\n );\n }\n\n const requested = [...new Set(request.tools ?? Object.keys(NATIVE_TOOL_FACTORIES))];\n const excluded = new Set(request.excludeTools ?? []);\n const ceiling = request.capabilityCeiling;\n const allowed = ceiling?.allowedTools;\n const isMcp = (name: string) => name === 'mcp' || name === 'mcp_use';\n const mcpDenied =\n (ceiling !== undefined && ceiling.allowMcpTools !== true) ||\n (allowed !== undefined && allowed.every((name) => Object.hasOwn(NATIVE_TOOL_FACTORIES, name))) ||\n [...excluded].some(isMcp);\n const wantsMcp =\n !mcpDenied &&\n (requested.some(isMcp) ||\n hasConfiguredValues(request.mcpDirectTools) ||\n requested.some((name) => !Object.hasOwn(NATIVE_TOOL_FACTORIES, name)));\n const provider = wantsMcp ? resolveMcpTool?.() : undefined;\n const catalog = provider?.catalog;\n const snapshot = catalog?.snapshot() ?? [];\n const expand = (values: readonly string[]) =>\n new Set(values.flatMap((name) => (isMcp(name) ? snapshot.map((tool) => tool.name) : [name])));\n const grants = allowed === undefined ? undefined : expand(allowed);\n const denied = expand([...excluded]);\n const selected = expand(requested);\n if (request.mcpDirectTools?.length) {\n const selectors = new Set(catalog?.resolveSelectors(request.mcpDirectTools) ?? []);\n for (const tool of snapshot) {\n if (!selectors.has(tool.name)) selected.delete(tool.name);\n else if (request.tools === undefined) selected.add(tool.name);\n }\n }\n const nativeNames = requested.filter(\n (name) =>\n Object.hasOwn(NATIVE_TOOL_FACTORIES, name) && !denied.has(name) && (grants === undefined || grants.has(name)),\n );\n const direct = mcpDenied\n ? []\n : snapshot.filter(\n (tool) => selected.has(tool.name) && !denied.has(tool.name) && (grants === undefined || grants.has(tool.name)),\n );\n const unknown = requested.filter(\n (name) =>\n !Object.hasOwn(NATIVE_TOOL_FACTORIES, name) &&\n !isMcp(name) &&\n !snapshot.some((tool) => tool.name === name) &&\n !denied.has(name) &&\n (grants === undefined || grants.has(name)),\n );\n if (unknown.length > 0 && validateRequired)\n throw new Error(`Native child session requested unknown direct harness tools: ${unknown.join(', ')}`);\n const names = [...nativeNames, ...direct.map((tool) => tool.name)];\n const required = ceiling?.requiredTools ?? [];\n const missing = required.filter((name) => (isMcp(name) ? direct.length === 0 : !names.includes(name)));\n if (validateRequired && missing.length > 0)\n throw new Error(`Native child session capability ceiling requires unavailable tools: ${missing.join(', ')}`);\n if (validateRequired && wantsMcp && !catalog)\n throw new Error('Native child session MCP tools are unavailable. Enable MCP in the parent session.');\n const tools = [\n ...nativeNames.map((name) =>\n adaptNativeTool(\n NATIVE_TOOL_FACTORIES[name as keyof typeof NATIVE_TOOL_FACTORIES](request.cwd) as NativeCodingTool,\n ),\n ),\n ...direct.map((tool) =>\n adaptNativeTool({\n ...tool,\n execute(toolCallId, parameters, signal, onUpdate) {\n signal?.throwIfAborted();\n if (resolveMcpTool?.() !== provider || !catalog?.snapshot().includes(tool))\n throw new Error('The parent session MCP tool is no longer available.');\n return tool.execute(toolCallId, parameters, signal, onUpdate);\n },\n } satisfies PoChildSessionTool),\n ),\n ];\n return {\n tools,\n activeToolNames: names,\n ...(request.systemPrompt === undefined ? {} : { systemPrompt: request.systemPrompt }),\n };\n}\n\n/** Refresh borrowed declarations without replacing native tools or rebinding intercom. */\nexport function bindChildMcpCatalog(\n runtime: DirectHarnessRuntime,\n request: PoChildSessionRequest,\n options: Pick<HeadlessChildSessionServiceOptions, 'mcpTool' | 'subscribeMcpTool'>,\n initialTools: readonly DirectHarnessTool[],\n): () => void {\n if (request.capabilityCeiling !== undefined && request.capabilityCeiling.allowMcpTools !== true)\n return () => undefined;\n if (request.capabilityCeiling?.allowedTools?.every((name) => Object.hasOwn(NATIVE_TOOL_FACTORIES, name)))\n return () => undefined;\n if (request.excludeTools?.some((name) => name === 'mcp' || name === 'mcp_use')) return () => undefined;\n if (\n !request.tools?.some(\n (name) => name === 'mcp' || name === 'mcp_use' || !Object.hasOwn(NATIVE_TOOL_FACTORIES, name),\n ) &&\n !request.mcpDirectTools?.length\n )\n return () => undefined;\n const retained = initialTools.filter(\n (tool, index) =>\n Object.hasOwn(NATIVE_TOOL_FACTORIES, tool.name) ||\n (request.intercom !== undefined && index === initialTools.length - 1),\n );\n let disposed = false;\n let provider: PoChildSessionMcpTool | undefined;\n let unsubscribeCatalog: (() => void) | undefined;\n let previous: readonly PoChildSessionTool[] = [];\n let pending = Promise.resolve();\n let failure: unknown;\n const refresh = () => {\n if (disposed) return;\n const current = options.mcpTool?.();\n const changed = current !== provider;\n if (changed) {\n unsubscribeCatalog?.();\n provider = current;\n unsubscribeCatalog = provider?.catalog?.subscribe(refresh);\n }\n const snapshot = provider?.catalog?.snapshot() ?? [];\n if (!changed && snapshot.length === previous.length && snapshot.every((tool, index) => tool === previous[index]))\n return;\n previous = snapshot;\n const composition = composeDirectHarnessRequestOptions(request, options.mcpTool, false);\n const direct = (composition.tools ?? []).filter((tool) => !Object.hasOwn(NATIVE_TOOL_FACTORIES, tool.name));\n pending = pending\n .then(async () => {\n if (!disposed) await runtime.replaceTools([...retained, ...direct]);\n })\n .catch((error: unknown) => {\n failure = error;\n });\n };\n const unsubscribeProvider = options.subscribeMcpTool?.(refresh);\n refresh();\n return () => {\n disposed = true;\n unsubscribeProvider?.();\n unsubscribeCatalog?.();\n if (failure !== undefined) throw new Error('Child MCP catalog refresh failed.', { cause: failure });\n };\n}\n\n/** The request as stored for a re-attach: data only, without its live intercom, environment or source. */\nfunction storedRequest(request: PoChildSessionRequest): JsonObject {\n const { intercom: _intercom, environment: _environment, source: _source, ...data } = request;\n return JSON.parse(JSON.stringify(data)) as JsonObject;\n}\n\n/**\n * Children are task-owned conversations of the parent's Harness, each run as one more lane. A run's conversation,\n * anchor and request are stored, so after a restart the child resumes with the Harness and `restore` re-attaches it.\n */\nexport function createHeadlessChildSessionService(\n options: HeadlessChildSessionServiceOptions,\n): HeadlessChildSessionService {\n const parent = options.runtime;\n const context = BACKGROUND_CONTEXT;\n // Live transcript state while a lane is open, and pages for the session's lifetime: what a thread view reads.\n const states = new Map<string, AgentSessionRuntime>();\n const readers = new Map<string, NonNullable<PoChildSessionRuntime['readTranscriptPage']>>();\n let closed = false;\n const storedReader = (runId: string, conversationId: number) => {\n const reader = storedTranscriptReader(parent.harness, conversationId, runId);\n readers.set(runId, reader);\n return reader;\n };\n // Runs stored before this service existed, finished or not, stay readable; a lane opened later replaces its reader.\n void readSubagents(parent.harness, context).then(\n (runs) => {\n if (closed) return;\n for (const [runId, run] of Object.entries(runs)) if (!readers.has(runId)) storedReader(runId, run.conversationId);\n },\n // An unreadable record leaves stored runs to the lookup on read.\n () => undefined,\n );\n const readerOf = async (runId: string) => {\n const reader = readers.get(runId);\n if (reader) return reader;\n const run = (await readSubagents(parent.harness, context))[runId];\n return run ? (readers.get(runId) ?? storedReader(runId, run.conversationId)) : undefined;\n };\n // A reported run never runs again, so its lane's tools, prompt and hooks leave the shared registry.\n const report = async (runId: string, outcome?: Parameters<typeof markSubagentReported>[3]) => {\n const conversationId = await markSubagentReported(parent.harness, runId, context, outcome);\n if (conversationId !== undefined) parent.closeLane(conversationId);\n };\n const service = createPoChildSessionService(\n async (request: PoChildSessionRequest, signal): Promise<PoChildSessionRuntime> => {\n signal?.throwIfAborted();\n const existing = (await readSubagents(parent.harness, context))[request.runId];\n if (existing?.reported) throw new Error(`Child run '${request.runId}' has already finished.`);\n const restoring = existing !== undefined;\n // A restored child may resume before the parent's MCP catalog returns; its tools follow the catalog.\n const directRequestOptions = composeDirectHarnessRequestOptions(request, options.mcpTool, !restoring);\n const requestedModel = parseChildModelReference(request.model);\n const thinking = request.thinking ?? requestedModel?.thinking;\n let forkAt: EntryId | undefined;\n if (!restoring && request.source.kind === 'fork') {\n const entryId = request.source.entryId ?? (await parent.readEntries()).leafId ?? undefined;\n // A multi-message entry projects its later messages as `<entry id>:<position>`; fork at the entry itself.\n const durableId = entryId === undefined ? Number.NaN : Number(String(entryId).split(':', 1)[0]);\n if (!Number.isSafeInteger(durableId)) throw new Error('The parent session has no history to fork.');\n forkAt = durableId as EntryId;\n }\n const { conversation, stored } = existing\n ? {\n conversation: await parent.harness.conversation(existing.conversationId as ConversationId, context),\n stored: existing,\n }\n : await createSubagentConversation(\n parent.harness,\n parent.lane,\n { runId: request.runId, request: storedRequest(request), ...(forkAt === undefined ? {} : { forkAt }) },\n context,\n );\n if (!conversation) throw new Error(`Child run '${request.runId}' has no conversation.`);\n\n let runtime: DirectHarnessRuntime | undefined;\n let hooks: ReturnType<typeof bindChildHooks> | undefined;\n // Bound on first use when restoring: a child may resume before the parent's hooks are ready, and a tool\n // call then fails closed until they are.\n const boundHooks = () => (hooks ??= bindChildHooks(request, options.hooks?.(), () => runtime, signal));\n try {\n if (!restoring) boundHooks();\n const laneOptions: DirectHarnessLaneOptions = {\n sessionId: request.runId,\n cwd: request.cwd || options.cwd,\n ...(requestedModel ? { model: requestedModel.model } : {}),\n ...(thinking === undefined ? {} : { thinkingLevel: thinking as never }),\n ...directRequestOptions,\n beforeTool: (event, toolContext) => boundHooks().binding?.beforeTool(event, toolContext),\n afterTool: (event, toolContext) => boundHooks().binding?.afterTool(event, toolContext),\n };\n runtime = await parent.openLane(conversation, laneOptions);\n await installIntercom(\n runtime,\n request.intercom,\n (laneOptions.tools ?? []) as DirectHarnessTool[],\n stored.inputRequestId,\n );\n const releaseMcp = bindChildMcpCatalog(runtime, request, options, laneOptions.tools ?? []);\n const state = createAgentSessionRuntime({\n runtime,\n sessionId: runtime.sessionId,\n sessionName: runtime.sessionId,\n cwd: '',\n });\n states.set(request.runId, state);\n const readPage = childTranscriptReader(parent.harness, conversation, runtime.sessionId);\n readers.set(request.runId, readPage);\n return childRuntime(runtime, stored.inputRequestId, readPage, request.intercom, async () => {\n try {\n releaseMcp();\n } finally {\n try {\n if (states.get(request.runId) === state) states.delete(request.runId);\n await state.dispose();\n } finally {\n await hooks?.dispose();\n }\n }\n });\n } catch (error) {\n const failures: unknown[] = [error];\n for (const cleanup of [\n () => hooks?.dispose(),\n () => runtime?.dispose(),\n () => request.intercom?.dispose?.(),\n // A child that never started is finished: nothing re-attaches it after a restart.\n () => (restoring ? undefined : report(request.runId, { state: 'failed' })),\n ]) {\n try {\n await cleanup();\n } catch (cleanupError) {\n failures.push(cleanupError);\n }\n }\n if (failures.length > 1) throw new AggregateError(failures, 'Headless child startup cleanup failed');\n throw error;\n }\n },\n {\n now: options.now ?? Date.now,\n store: {\n async stored(): Promise<PoStoredChildRun[]> {\n const runs: PoStoredChildRun[] = [];\n for (const run of Object.values(await readSubagents(parent.harness, context))) {\n if (run.reported || !run.request) continue;\n const receipt = await parent.harness.commit(\n (tx) => tx.submissionByRequest(run.conversationId as ConversationId, run.inputRequestId),\n context,\n );\n runs.push({\n request: run.request as unknown as PoStoredChildRun['request'],\n settled: receipt?.status === 'done' || receipt?.status === 'unanswered',\n });\n }\n return runs;\n },\n markReported: report,\n },\n },\n );\n return {\n ...service,\n async readTranscriptPage(runId, request, signal) {\n if (closed) throw new Error('The Po child-session service is closed.');\n signal?.throwIfAborted();\n const reader = await readerOf(runId);\n if (!reader) throw new Error(`Child run '${runId}' has no readable transcript.`);\n const page = await reader(request, signal);\n signal?.throwIfAborted();\n return page;\n },\n async reported(runId) {\n const run = (await readSubagents(parent.harness, context))[runId];\n if (!run?.reported) return undefined;\n return {\n ...(run.agent === undefined ? {} : { agent: run.agent }),\n ...(run.task === undefined ? {} : { task: run.task }),\n ...(run.state === undefined ? {} : { state: run.state }),\n };\n },\n thread(runId) {\n const reader = readers.get(runId);\n if (!reader) return undefined;\n const state = states.get(runId)?.state;\n return { ...(state ? { state } : {}), readTranscriptPage: reader };\n },\n async close() {\n closed = true;\n await service.close();\n states.clear();\n readers.clear();\n },\n };\n}\n\nexport function createHeadlessChildSessionServiceProvider(\n options: HeadlessChildSessionServiceOptions,\n): HeadlessChildSessionServiceProvider {\n const service = createHeadlessChildSessionService(options);\n return {\n get: () => service,\n close: () => service.close(),\n };\n}\n\nexport type { DirectHarnessRuntime, DirectHarnessRuntimeOptions } from '../../../server/directHarnessRuntime';\nexport type { DirectHarnessModel } from '../../../types/server/directHarnessRuntime';\n"],"mappings":"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"}
@@ -5,8 +5,9 @@
5
5
  * The factory is the host boundary: it must construct the direct harness, apply
6
6
  * history ownership, and return only after child extensions are composed.
7
7
  */
8
- function createDoomChildSessionService(factory, dependencies) {
8
+ function createPoChildSessionService(factory, dependencies) {
9
9
  const handles = /* @__PURE__ */ new Map();
10
+ const outcomes = /* @__PURE__ */ new Map();
10
11
  const transcriptReaders = /* @__PURE__ */ new Map();
11
12
  const claimedRunIds = /* @__PURE__ */ new Set();
12
13
  const starting = /* @__PURE__ */ new Set();
@@ -20,24 +21,29 @@ function createDoomChildSessionService(factory, dependencies) {
20
21
  const recordCleanupFailure = (error) => {
21
22
  cleanupFailures.push(error);
22
23
  };
23
- return {
24
+ const store = dependencies.store;
25
+ const service = {
24
26
  start(request, signal) {
25
- if (closed) return Promise.reject(/* @__PURE__ */ new Error("The Doom child-session service is closed."));
27
+ if (closed) return Promise.reject(/* @__PURE__ */ new Error("The Po child-session service is closed."));
26
28
  if (claimedRunIds.has(request.runId)) return Promise.reject(/* @__PURE__ */ new Error(`Child run '${request.runId}' already exists.`));
27
29
  claimedRunIds.add(request.runId);
28
30
  const pending = (async () => {
29
31
  try {
30
32
  signal?.throwIfAborted();
31
- const handle = await createHandle(async (ownedRequest, ownedSignal) => {
33
+ const owned = await createHandle(async (ownedRequest, ownedSignal) => {
32
34
  const runtime = await factory(ownedRequest, ownedSignal);
33
35
  if (runtime.readTranscriptPage) transcriptReaders.set(request.runId, (pageRequest, pageSignal) => runtime.readTranscriptPage(pageRequest, pageSignal));
34
36
  return runtime;
35
- }, dependencies, request, signal, () => release(request.runId), recordCleanupFailure);
37
+ }, dependencies, request, signal, (outcome) => {
38
+ if (outcome) outcomes.set(request.runId, outcome);
39
+ release(request.runId);
40
+ }, recordCleanupFailure);
41
+ const handle = owned.handle;
36
42
  if (closed || signal?.aborted) {
37
43
  await handle.dispose();
38
44
  throw signal?.reason ?? /* @__PURE__ */ new Error("Child session startup was cancelled.");
39
45
  }
40
- if (!isTerminal(handle.state())) handles.set(request.runId, handle);
46
+ if (!isTerminal(handle.state())) handles.set(request.runId, owned);
41
47
  return handle;
42
48
  } catch (error) {
43
49
  transcriptReaders.delete(request.runId);
@@ -49,9 +55,9 @@ function createDoomChildSessionService(factory, dependencies) {
49
55
  pending.then(() => starting.delete(pending), () => starting.delete(pending));
50
56
  return pending;
51
57
  },
52
- get: (runId) => handles.get(runId),
58
+ get: (runId) => handles.get(runId)?.handle,
53
59
  async readTranscriptPage(runId, request, signal) {
54
- if (closed) throw new Error("The Doom child-session service is closed.");
60
+ if (closed) throw new Error("The Po child-session service is closed.");
55
61
  signal?.throwIfAborted();
56
62
  const reader = transcriptReaders.get(runId);
57
63
  if (!reader) throw new Error(`Child run '${runId}' has no readable transcript.`);
@@ -59,26 +65,50 @@ function createDoomChildSessionService(factory, dependencies) {
59
65
  signal?.throwIfAborted();
60
66
  return page;
61
67
  },
68
+ ...store ? {
69
+ stored: () => store.stored(),
70
+ async restore(runId, live) {
71
+ const active = handles.get(runId);
72
+ if (active) return active.handle;
73
+ const run = (await store.stored()).find((stored) => stored.request.runId === runId);
74
+ if (!run) throw new Error(`No stored child run matches '${runId}'.`);
75
+ return service.start({
76
+ ...run.request,
77
+ source: { kind: "fresh" },
78
+ environment: {},
79
+ ...live?.intercom ? { intercom: live.intercom } : {}
80
+ });
81
+ },
82
+ async markReported(runId) {
83
+ await store.markReported(runId, outcomes.get(runId));
84
+ outcomes.delete(runId);
85
+ }
86
+ } : {},
62
87
  close() {
63
88
  closePromise ??= (async () => {
64
89
  if (closed) return;
65
90
  closed = true;
66
91
  await Promise.allSettled(starting);
67
92
  const active = [...handles.values()];
68
- await Promise.allSettled(active.map((handle) => handle.dispose()));
93
+ await Promise.allSettled(active.map((owned) => owned.detach()));
69
94
  const failures = [...cleanupFailures];
70
95
  handles.clear();
71
96
  transcriptReaders.clear();
72
97
  claimedRunIds.clear();
73
- if (failures.length) throw new AggregateError(failures, "Doom child-session shutdown failed.");
98
+ outcomes.clear();
99
+ if (failures.length) throw new AggregateError(failures, "Po child-session shutdown failed.");
74
100
  })();
75
101
  return closePromise;
76
102
  }
77
103
  };
104
+ return service;
78
105
  }
79
106
  function isTerminal(state) {
80
107
  return state === "completed" || state === "failed" || state === "stopped";
81
108
  }
109
+ function isAbortError(error) {
110
+ return error instanceof Error && error.name === "AbortError";
111
+ }
82
112
  function errorMessage(error) {
83
113
  return error instanceof Error ? error.message : typeof error === "string" ? error : "Unknown cleanup failure";
84
114
  }
@@ -96,9 +126,11 @@ async function createHandle(factory, dependencies, request, signal, onTerminal,
96
126
  let cleanupPromise;
97
127
  let abortCleanup;
98
128
  const listeners = /* @__PURE__ */ new Set();
99
- const sessionFile = runtime.sessionFile;
100
129
  const usageRows = /* @__PURE__ */ new Set();
130
+ const toolCalls = /* @__PURE__ */ new Set();
101
131
  let cost;
132
+ let tokens;
133
+ let config = {};
102
134
  let usageCleanup;
103
135
  const emit = (next, message) => {
104
136
  state = next;
@@ -107,8 +139,10 @@ async function createHandle(factory, dependencies, request, signal, onTerminal,
107
139
  state: next,
108
140
  timestamp: dependencies.now(),
109
141
  ...message ? { message } : {},
110
- ...sessionFile ? { sessionFile } : {},
111
- ...cost === void 0 ? {} : { cost }
142
+ ...cost === void 0 ? {} : { cost },
143
+ ...tokens === void 0 ? {} : { tokens },
144
+ ...toolCalls.size === 0 ? {} : { toolCount: toolCalls.size },
145
+ ...config
112
146
  };
113
147
  lastEvent = event;
114
148
  for (const listener of Array.from(listeners)) try {
@@ -119,7 +153,21 @@ async function createHandle(factory, dependencies, request, signal, onTerminal,
119
153
  if (usageRows.has(usage.rowId) || !Number.isFinite(usage.cost)) return;
120
154
  usageRows.add(usage.rowId);
121
155
  cost = (cost ?? 0) + usage.cost;
122
- emit("running");
156
+ if (usage.tokens !== void 0 && Number.isFinite(usage.tokens)) tokens = (tokens ?? 0) + usage.tokens;
157
+ if (!isTerminal(state)) emit("running");
158
+ };
159
+ const onConfig = (next) => {
160
+ config = {
161
+ ...config,
162
+ ...next.model ? { model: next.model } : {},
163
+ ...next.thinking ? { thinking: next.thinking } : {}
164
+ };
165
+ if (!isTerminal(state)) emit("running");
166
+ };
167
+ const onToolStart = (toolCallId) => {
168
+ if (toolCalls.has(toolCallId)) return;
169
+ toolCalls.add(toolCallId);
170
+ if (!isTerminal(state)) emit("running");
123
171
  };
124
172
  const cleanup = () => {
125
173
  cleanupPromise ??= (async () => {
@@ -149,7 +197,7 @@ async function createHandle(factory, dependencies, request, signal, onTerminal,
149
197
  emit("failed", `Child session cleanup failed: ${detail}`);
150
198
  }
151
199
  disposed = true;
152
- onTerminal();
200
+ onTerminal({ state });
153
201
  listeners.clear();
154
202
  if (cleanupFailure !== void 0) throw cleanupFailure;
155
203
  })();
@@ -157,7 +205,6 @@ async function createHandle(factory, dependencies, request, signal, onTerminal,
157
205
  };
158
206
  const handle = {
159
207
  runId: request.runId,
160
- ...sessionFile ? { sessionFile } : {},
161
208
  state: () => state,
162
209
  subscribe(listener) {
163
210
  if (disposed || isTerminal(state)) {
@@ -201,6 +248,20 @@ async function createHandle(factory, dependencies, request, signal, onTerminal,
201
248
  },
202
249
  dispose: () => finish("stopped", "Child session disposed.")
203
250
  };
251
+ const detach = () => {
252
+ finishPromise ??= (async () => {
253
+ disposed = true;
254
+ listeners.clear();
255
+ try {
256
+ await cleanup();
257
+ } catch (error) {
258
+ onCleanupFailure(error);
259
+ } finally {
260
+ onTerminal();
261
+ }
262
+ })();
263
+ return finishPromise.catch(() => void 0);
264
+ };
204
265
  if (signal) {
205
266
  const onAbort = () => {
206
267
  handle.stop("Child session startup was cancelled.").catch(() => void 0);
@@ -208,12 +269,25 @@ async function createHandle(factory, dependencies, request, signal, onTerminal,
208
269
  signal.addEventListener("abort", onAbort, { once: true });
209
270
  abortCleanup = () => signal.removeEventListener("abort", onAbort);
210
271
  }
211
- usageCleanup = runtime.onUsage?.(onUsage);
272
+ const unsubscribe = [
273
+ runtime.onUsage?.(onUsage),
274
+ runtime.onConfig?.(onConfig),
275
+ runtime.onToolStart?.(onToolStart)
276
+ ];
277
+ usageCleanup = () => {
278
+ for (const stop of unsubscribe) stop?.();
279
+ };
212
280
  emit("running");
213
- Promise.resolve().then(() => runtime.prompt(request.task)).then((message) => finish("completed", typeof message === "string" ? message : void 0).catch(() => void 0), (error) => finish("failed", error instanceof Error ? error.message : String(error)).catch(() => void 0));
214
- return handle;
281
+ Promise.resolve().then(() => runtime.prompt(request.sender ? {
282
+ text: request.task,
283
+ sender: request.sender
284
+ } : request.task)).then((message) => stopPromise ? void 0 : finish("completed", typeof message === "string" ? message : void 0).catch(() => void 0), (error) => stopPromise ? void 0 : finish(isAbortError(error) ? "stopped" : "failed", error instanceof Error ? error.message : String(error)).catch(() => void 0));
285
+ return {
286
+ handle,
287
+ detach
288
+ };
215
289
  }
216
290
  //#endregion
217
- exports.createDoomChildSessionService = createDoomChildSessionService;
291
+ exports.createPoChildSessionService = createPoChildSessionService;
218
292
 
219
293
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../../../../../../src/systems/child/services/childSession/index.ts"],"sourcesContent":["import type { TranscriptPage, TranscriptPageRequest } from '../../../../schemas/sessionProtocol';\nimport type {\n DoomChildSessionEvent,\n DoomChildSessionHandle,\n DoomChildSessionRequest,\n DoomChildSessionRuntimeFactory,\n DoomChildSessionService,\n DoomChildSessionState,\n DoomChildSessionUsage,\n} from '../../types/childSession';\n\nexport interface DoomChildSessionServiceDependencies {\n readonly now: () => number;\n}\n\n/**\n * Owns lifecycle for runtimes created by a direct host adapter.\n *\n * The factory is the host boundary: it must construct the direct harness, apply\n * history ownership, and return only after child extensions are composed.\n */\nexport function createDoomChildSessionService(\n factory: DoomChildSessionRuntimeFactory,\n dependencies: DoomChildSessionServiceDependencies,\n): DoomChildSessionService {\n const handles = new Map<string, DoomChildSessionHandle>();\n const transcriptReaders = new Map<\n string,\n (request: Omit<TranscriptPageRequest, 'threadId'>, signal?: AbortSignal) => Promise<TranscriptPage>\n >();\n const claimedRunIds = new Set<string>();\n const starting = new Set<Promise<DoomChildSessionHandle>>();\n const cleanupFailures: unknown[] = [];\n let closed = false;\n let closePromise: Promise<void> | undefined;\n\n const release = (runId: string): void => {\n handles.delete(runId);\n if (!transcriptReaders.has(runId)) claimedRunIds.delete(runId);\n };\n const recordCleanupFailure = (error: unknown): void => {\n cleanupFailures.push(error);\n };\n\n const service: DoomChildSessionService = {\n start(request, signal) {\n if (closed) return Promise.reject(new Error('The Doom child-session service is closed.'));\n if (claimedRunIds.has(request.runId))\n return Promise.reject(new Error(`Child run '${request.runId}' already exists.`));\n claimedRunIds.add(request.runId);\n\n const pending = (async (): Promise<DoomChildSessionHandle> => {\n try {\n signal?.throwIfAborted();\n const handle = await createHandle(\n async (ownedRequest, ownedSignal) => {\n const runtime = await factory(ownedRequest, ownedSignal);\n if (runtime.readTranscriptPage)\n transcriptReaders.set(request.runId, (pageRequest, pageSignal) =>\n runtime.readTranscriptPage!(pageRequest, pageSignal),\n );\n return runtime;\n },\n dependencies,\n request,\n signal,\n () => release(request.runId),\n recordCleanupFailure,\n );\n if (closed || signal?.aborted) {\n await handle.dispose();\n throw signal?.reason ?? new Error('Child session startup was cancelled.');\n }\n if (!isTerminal(handle.state())) handles.set(request.runId, handle);\n return handle;\n } catch (error) {\n transcriptReaders.delete(request.runId);\n release(request.runId);\n throw error;\n }\n })();\n starting.add(pending);\n void pending.then(\n () => starting.delete(pending),\n () => starting.delete(pending),\n );\n return pending;\n },\n get: (runId) => handles.get(runId),\n async readTranscriptPage(runId, request, signal) {\n if (closed) throw new Error('The Doom child-session service is closed.');\n signal?.throwIfAborted();\n const reader = transcriptReaders.get(runId);\n if (!reader) throw new Error(`Child run '${runId}' has no readable transcript.`);\n const page = await reader(request, signal);\n signal?.throwIfAborted();\n return page;\n },\n close() {\n closePromise ??= (async () => {\n if (closed) return;\n closed = true;\n await Promise.allSettled(starting);\n const active = [...handles.values()];\n await Promise.allSettled(active.map((handle) => handle.dispose()));\n const failures = [...cleanupFailures];\n handles.clear();\n transcriptReaders.clear();\n claimedRunIds.clear();\n if (failures.length) throw new AggregateError(failures, 'Doom child-session shutdown failed.');\n })();\n return closePromise;\n },\n };\n return service;\n}\n\nfunction isTerminal(state: DoomChildSessionState): boolean {\n return state === 'completed' || state === 'failed' || state === 'stopped';\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : typeof error === 'string' ? error : 'Unknown cleanup failure';\n}\n\nasync function createHandle(\n factory: DoomChildSessionRuntimeFactory,\n dependencies: DoomChildSessionServiceDependencies,\n request: DoomChildSessionRequest,\n signal: AbortSignal | undefined,\n onTerminal: () => void,\n onCleanupFailure: (error: unknown) => void,\n): Promise<DoomChildSessionHandle> {\n const runtime = await factory(request, signal);\n if (signal?.aborted) {\n await runtime.dispose();\n throw signal.reason ?? new Error('Child session startup was cancelled.');\n }\n\n let state: DoomChildSessionState = 'starting';\n let disposed = false;\n let lastEvent: DoomChildSessionEvent | undefined;\n let finishPromise: Promise<void> | undefined;\n let stopPromise: Promise<void> | undefined;\n let cleanupPromise: Promise<void> | undefined;\n let abortCleanup: (() => void) | undefined;\n const listeners = new Set<(event: DoomChildSessionEvent) => void>();\n const sessionFile = runtime.sessionFile;\n const usageRows = new Set<string>();\n let cost: number | undefined;\n let usageCleanup: (() => void) | undefined;\n\n const emit = (next: DoomChildSessionState, message?: string): void => {\n state = next;\n const event: DoomChildSessionEvent = {\n runId: request.runId,\n state: next,\n timestamp: dependencies.now(),\n ...(message ? { message } : {}),\n ...(sessionFile ? { sessionFile } : {}),\n ...(cost === undefined ? {} : { cost }),\n };\n lastEvent = event;\n for (const listener of Array.from(listeners)) {\n try {\n listener(event);\n } catch {\n // Observers must not fault child ownership.\n }\n }\n };\n\n const onUsage = (usage: DoomChildSessionUsage): void => {\n if (usageRows.has(usage.rowId) || !Number.isFinite(usage.cost)) return;\n usageRows.add(usage.rowId);\n cost = (cost ?? 0) + usage.cost;\n emit('running');\n };\n\n const cleanup = (): Promise<void> => {\n cleanupPromise ??= (async () => {\n try {\n await runtime.dispose();\n } finally {\n usageCleanup?.();\n usageCleanup = undefined;\n abortCleanup?.();\n abortCleanup = undefined;\n }\n })();\n return cleanupPromise;\n };\n\n const finish = (\n next: Extract<DoomChildSessionState, 'completed' | 'failed' | 'stopped'>,\n message?: string,\n ): Promise<void> => {\n finishPromise ??= (async () => {\n let cleanupFailure: unknown;\n try {\n await cleanup();\n } catch (error) {\n cleanupFailure = error;\n onCleanupFailure(error);\n }\n if (cleanupFailure === undefined) {\n emit(next, message);\n } else {\n const detail = errorMessage(cleanupFailure);\n emit('failed', `Child session cleanup failed: ${detail}`);\n }\n disposed = true;\n onTerminal();\n listeners.clear();\n if (cleanupFailure !== undefined) throw cleanupFailure;\n })();\n return finishPromise;\n };\n\n const handle: DoomChildSessionHandle = {\n runId: request.runId,\n ...(sessionFile ? { sessionFile } : {}),\n state: () => state,\n subscribe(listener) {\n if (disposed || isTerminal(state)) {\n if (lastEvent) {\n try {\n listener(lastEvent);\n } catch {\n // Observers must not fault child ownership.\n }\n }\n return () => false;\n }\n listeners.add(listener);\n if (lastEvent) {\n try {\n listener(lastEvent);\n } catch {\n // Observers must not fault child ownership.\n }\n }\n return () => listeners.delete(listener);\n },\n async steer(message, steerSignal) {\n if (disposed || finishPromise) throw new Error(`Child run '${request.runId}' is no longer active.`);\n steerSignal?.throwIfAborted();\n await runtime.steer(message);\n steerSignal?.throwIfAborted();\n },\n stop(reason) {\n stopPromise ??= (async () => {\n if (finishPromise) return finishPromise;\n let abortFailure: unknown;\n try {\n await runtime.abort();\n } catch (error) {\n abortFailure = error;\n }\n let finishFailure: unknown;\n try {\n await finish('stopped', reason ?? 'Child session stopped.');\n } catch (error) {\n finishFailure = error;\n }\n if (abortFailure !== undefined && finishFailure !== undefined)\n throw new AggregateError([abortFailure, finishFailure], 'Stopping the child session failed.');\n if (abortFailure !== undefined) throw abortFailure;\n if (finishFailure !== undefined) throw finishFailure;\n })();\n return stopPromise;\n },\n dispose: () => finish('stopped', 'Child session disposed.'),\n };\n\n if (signal) {\n const onAbort = (): void => {\n void handle.stop('Child session startup was cancelled.').catch(() => undefined);\n };\n signal.addEventListener('abort', onAbort, { once: true });\n abortCleanup = () => signal.removeEventListener('abort', onAbort);\n }\n usageCleanup = runtime.onUsage?.(onUsage);\n emit('running');\n void Promise.resolve()\n .then(() => runtime.prompt(request.task))\n .then(\n (message) => finish('completed', typeof message === 'string' ? message : undefined).catch(() => undefined),\n (error: unknown) =>\n finish('failed', error instanceof Error ? error.message : String(error)).catch(() => undefined),\n );\n return handle;\n}\n\nexport type { DoomChildSessionRuntime } from '../../types/childSession';\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../../../../src/systems/child/services/childSession/index.ts"],"sourcesContent":["import type { TranscriptPage, TranscriptPageRequest } from '../../../../schemas/sessionProtocol';\nimport type {\n PoChildSessionEvent,\n PoChildSessionHandle,\n PoChildSessionRequest,\n PoChildSessionRuntimeFactory,\n PoChildSessionService,\n PoChildSessionState,\n PoChildSessionUsage,\n PoChildSessionConfig,\n PoStoredChildRun,\n} from '../../types/childSession';\n\n/** How a run ended, kept with its stored record once it is reported. */\nexport interface PoChildRunOutcome {\n readonly state: Extract<PoChildSessionState, 'completed' | 'failed' | 'stopped'>;\n}\n\nexport interface PoChildSessionServiceDependencies {\n readonly now: () => number;\n /** The host's stored runs, for re-attaching them after a restart. */\n readonly store?: {\n stored(): Promise<readonly PoStoredChildRun[]>;\n markReported(runId: string, outcome?: PoChildRunOutcome): Promise<void>;\n };\n}\n\n/** A handle and the shutdown path that leaves its run unfinished, so it resumes after a restart. */\ninterface OwnedChildHandle {\n readonly handle: PoChildSessionHandle;\n detach(): Promise<void>;\n}\n\n/**\n * Owns lifecycle for runtimes created by a direct host adapter.\n *\n * The factory is the host boundary: it must construct the direct harness, apply\n * history ownership, and return only after child extensions are composed.\n */\nexport function createPoChildSessionService(\n factory: PoChildSessionRuntimeFactory,\n dependencies: PoChildSessionServiceDependencies,\n): PoChildSessionService {\n const handles = new Map<string, OwnedChildHandle>();\n const outcomes = new Map<string, PoChildRunOutcome>();\n const transcriptReaders = new Map<\n string,\n (request: Omit<TranscriptPageRequest, 'threadId'>, signal?: AbortSignal) => Promise<TranscriptPage>\n >();\n const claimedRunIds = new Set<string>();\n const starting = new Set<Promise<PoChildSessionHandle>>();\n const cleanupFailures: unknown[] = [];\n let closed = false;\n let closePromise: Promise<void> | undefined;\n\n const release = (runId: string): void => {\n handles.delete(runId);\n if (!transcriptReaders.has(runId)) claimedRunIds.delete(runId);\n };\n const recordCleanupFailure = (error: unknown): void => {\n cleanupFailures.push(error);\n };\n const store = dependencies.store;\n\n const service: PoChildSessionService = {\n start(request, signal) {\n if (closed) return Promise.reject(new Error('The Po child-session service is closed.'));\n if (claimedRunIds.has(request.runId))\n return Promise.reject(new Error(`Child run '${request.runId}' already exists.`));\n claimedRunIds.add(request.runId);\n\n const pending = (async (): Promise<PoChildSessionHandle> => {\n try {\n signal?.throwIfAborted();\n const owned = await createHandle(\n async (ownedRequest, ownedSignal) => {\n const runtime = await factory(ownedRequest, ownedSignal);\n if (runtime.readTranscriptPage)\n transcriptReaders.set(request.runId, (pageRequest, pageSignal) =>\n runtime.readTranscriptPage!(pageRequest, pageSignal),\n );\n return runtime;\n },\n dependencies,\n request,\n signal,\n (outcome) => {\n if (outcome) outcomes.set(request.runId, outcome);\n release(request.runId);\n },\n recordCleanupFailure,\n );\n const handle = owned.handle;\n if (closed || signal?.aborted) {\n await handle.dispose();\n throw signal?.reason ?? new Error('Child session startup was cancelled.');\n }\n if (!isTerminal(handle.state())) handles.set(request.runId, owned);\n return handle;\n } catch (error) {\n transcriptReaders.delete(request.runId);\n release(request.runId);\n throw error;\n }\n })();\n starting.add(pending);\n void pending.then(\n () => starting.delete(pending),\n () => starting.delete(pending),\n );\n return pending;\n },\n get: (runId) => handles.get(runId)?.handle,\n async readTranscriptPage(runId, request, signal) {\n if (closed) throw new Error('The Po child-session service is closed.');\n signal?.throwIfAborted();\n const reader = transcriptReaders.get(runId);\n if (!reader) throw new Error(`Child run '${runId}' has no readable transcript.`);\n const page = await reader(request, signal);\n signal?.throwIfAborted();\n return page;\n },\n ...(store\n ? {\n stored: () => store.stored(),\n async restore(runId, live) {\n const active = handles.get(runId);\n if (active) return active.handle;\n const run = (await store.stored()).find((stored) => stored.request.runId === runId);\n if (!run) throw new Error(`No stored child run matches '${runId}'.`);\n // The host recognises a stored run ID and re-attaches its conversation instead of creating one.\n return service.start({\n ...run.request,\n source: { kind: 'fresh' },\n environment: {},\n ...(live?.intercom ? { intercom: live.intercom } : {}),\n });\n },\n async markReported(runId: string) {\n await store.markReported(runId, outcomes.get(runId));\n outcomes.delete(runId);\n },\n }\n : {}),\n close() {\n closePromise ??= (async () => {\n if (closed) return;\n closed = true;\n await Promise.allSettled(starting);\n // Shutdown is not an outcome: a running child detaches without reporting and resumes after a restart.\n const active = [...handles.values()];\n await Promise.allSettled(active.map((owned) => owned.detach()));\n const failures = [...cleanupFailures];\n handles.clear();\n transcriptReaders.clear();\n claimedRunIds.clear();\n outcomes.clear();\n if (failures.length) throw new AggregateError(failures, 'Po child-session shutdown failed.');\n })();\n return closePromise;\n },\n };\n return service;\n}\n\nfunction isTerminal(state: PoChildSessionState): boolean {\n return state === 'completed' || state === 'failed' || state === 'stopped';\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === 'AbortError';\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : typeof error === 'string' ? error : 'Unknown cleanup failure';\n}\n\nasync function createHandle(\n factory: PoChildSessionRuntimeFactory,\n dependencies: PoChildSessionServiceDependencies,\n request: PoChildSessionRequest,\n signal: AbortSignal | undefined,\n onTerminal: (outcome?: PoChildRunOutcome) => void,\n onCleanupFailure: (error: unknown) => void,\n): Promise<OwnedChildHandle> {\n const runtime = await factory(request, signal);\n if (signal?.aborted) {\n await runtime.dispose();\n throw signal.reason ?? new Error('Child session startup was cancelled.');\n }\n\n let state: PoChildSessionState = 'starting';\n let disposed = false;\n let lastEvent: PoChildSessionEvent | undefined;\n let finishPromise: Promise<void> | undefined;\n let stopPromise: Promise<void> | undefined;\n let cleanupPromise: Promise<void> | undefined;\n let abortCleanup: (() => void) | undefined;\n const listeners = new Set<(event: PoChildSessionEvent) => void>();\n const usageRows = new Set<string>();\n const toolCalls = new Set<string>();\n let cost: number | undefined;\n let tokens: number | undefined;\n let config: { model?: string; thinking?: string } = {};\n let usageCleanup: (() => void) | undefined;\n\n const emit = (next: PoChildSessionState, message?: string): void => {\n state = next;\n const event: PoChildSessionEvent = {\n runId: request.runId,\n state: next,\n timestamp: dependencies.now(),\n ...(message ? { message } : {}),\n ...(cost === undefined ? {} : { cost }),\n ...(tokens === undefined ? {} : { tokens }),\n ...(toolCalls.size === 0 ? {} : { toolCount: toolCalls.size }),\n ...config,\n };\n lastEvent = event;\n for (const listener of Array.from(listeners)) {\n try {\n listener(event);\n } catch {\n // Observers must not fault child ownership.\n }\n }\n };\n\n const onUsage = (usage: PoChildSessionUsage): void => {\n if (usageRows.has(usage.rowId) || !Number.isFinite(usage.cost)) return;\n usageRows.add(usage.rowId);\n cost = (cost ?? 0) + usage.cost;\n if (usage.tokens !== undefined && Number.isFinite(usage.tokens)) tokens = (tokens ?? 0) + usage.tokens;\n if (!isTerminal(state)) emit('running');\n };\n const onConfig = (next: PoChildSessionConfig): void => {\n config = {\n ...config,\n ...(next.model ? { model: next.model } : {}),\n ...(next.thinking ? { thinking: next.thinking } : {}),\n };\n if (!isTerminal(state)) emit('running');\n };\n const onToolStart = (toolCallId: string): void => {\n if (toolCalls.has(toolCallId)) return;\n toolCalls.add(toolCallId);\n if (!isTerminal(state)) emit('running');\n };\n\n const cleanup = (): Promise<void> => {\n cleanupPromise ??= (async () => {\n try {\n await runtime.dispose();\n } finally {\n usageCleanup?.();\n usageCleanup = undefined;\n abortCleanup?.();\n abortCleanup = undefined;\n }\n })();\n return cleanupPromise;\n };\n\n const finish = (\n next: Extract<PoChildSessionState, 'completed' | 'failed' | 'stopped'>,\n message?: string,\n ): Promise<void> => {\n finishPromise ??= (async () => {\n let cleanupFailure: unknown;\n try {\n await cleanup();\n } catch (error) {\n cleanupFailure = error;\n onCleanupFailure(error);\n }\n if (cleanupFailure === undefined) {\n emit(next, message);\n } else {\n const detail = errorMessage(cleanupFailure);\n emit('failed', `Child session cleanup failed: ${detail}`);\n }\n disposed = true;\n onTerminal({ state: state as PoChildRunOutcome['state'] });\n listeners.clear();\n if (cleanupFailure !== undefined) throw cleanupFailure;\n })();\n return finishPromise;\n };\n\n const handle: PoChildSessionHandle = {\n runId: request.runId,\n state: () => state,\n subscribe(listener) {\n if (disposed || isTerminal(state)) {\n if (lastEvent) {\n try {\n listener(lastEvent);\n } catch {\n // Observers must not fault child ownership.\n }\n }\n return () => false;\n }\n listeners.add(listener);\n if (lastEvent) {\n try {\n listener(lastEvent);\n } catch {\n // Observers must not fault child ownership.\n }\n }\n return () => listeners.delete(listener);\n },\n async steer(message, steerSignal) {\n if (disposed || finishPromise) throw new Error(`Child run '${request.runId}' is no longer active.`);\n steerSignal?.throwIfAborted();\n await runtime.steer(message);\n steerSignal?.throwIfAborted();\n },\n stop(reason) {\n stopPromise ??= (async () => {\n if (finishPromise) return finishPromise;\n let abortFailure: unknown;\n try {\n await runtime.abort();\n } catch (error) {\n abortFailure = error;\n }\n let finishFailure: unknown;\n try {\n await finish('stopped', reason ?? 'Child session stopped.');\n } catch (error) {\n finishFailure = error;\n }\n if (abortFailure !== undefined && finishFailure !== undefined)\n throw new AggregateError([abortFailure, finishFailure], 'Stopping the child session failed.');\n if (abortFailure !== undefined) throw abortFailure;\n if (finishFailure !== undefined) throw finishFailure;\n })();\n return stopPromise;\n },\n dispose: () => finish('stopped', 'Child session disposed.'),\n };\n // Releases the runtime without a terminal event; a later prompt settlement finds the run finished and stays silent.\n const detach = (): Promise<void> => {\n finishPromise ??= (async () => {\n disposed = true;\n listeners.clear();\n try {\n await cleanup();\n } catch (error) {\n onCleanupFailure(error);\n } finally {\n onTerminal();\n }\n })();\n return finishPromise.catch(() => undefined);\n };\n\n if (signal) {\n const onAbort = (): void => {\n void handle.stop('Child session startup was cancelled.').catch(() => undefined);\n };\n signal.addEventListener('abort', onAbort, { once: true });\n abortCleanup = () => signal.removeEventListener('abort', onAbort);\n }\n const unsubscribe = [runtime.onUsage?.(onUsage), runtime.onConfig?.(onConfig), runtime.onToolStart?.(onToolStart)];\n usageCleanup = () => {\n for (const stop of unsubscribe) stop?.();\n };\n emit('running');\n // A stop settles the prompt as aborted; the stop then reports the run as stopped, not as its prompt ended.\n void Promise.resolve()\n .then(() => runtime.prompt(request.sender ? { text: request.task, sender: request.sender } : request.task))\n .then(\n (message) =>\n stopPromise\n ? undefined\n : finish('completed', typeof message === 'string' ? message : undefined).catch(() => undefined),\n (error: unknown) =>\n stopPromise\n ? undefined\n : // A restored run whose input was aborted before the restart ends as stopped, not failed.\n finish(\n isAbortError(error) ? 'stopped' : 'failed',\n error instanceof Error ? error.message : String(error),\n ).catch(() => undefined),\n );\n return { handle, detach };\n}\n\nexport type { PoChildSessionRuntime } from '../../types/childSession';\n"],"mappings":"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"}
@@ -1,7 +1,16 @@
1
- import { DoomChildSessionRuntime, DoomChildSessionRuntimeFactory, DoomChildSessionService } from "../../types/childSession.mjs";
1
+ import { PoChildSessionRuntime, PoChildSessionRuntimeFactory, PoChildSessionService, PoChildSessionState, PoStoredChildRun } from "../../types/childSession.mjs";
2
2
  //#region src/systems/child/services/childSession/index.d.ts
3
- export interface DoomChildSessionServiceDependencies {
3
+ /** How a run ended, kept with its stored record once it is reported. */
4
+ export interface PoChildRunOutcome {
5
+ readonly state: Extract<PoChildSessionState, 'completed' | 'failed' | 'stopped'>;
6
+ }
7
+ export interface PoChildSessionServiceDependencies {
4
8
  readonly now: () => number;
9
+ /** The host's stored runs, for re-attaching them after a restart. */
10
+ readonly store?: {
11
+ stored(): Promise<readonly PoStoredChildRun[]>;
12
+ markReported(runId: string, outcome?: PoChildRunOutcome): Promise<void>;
13
+ };
5
14
  }
6
15
  /**
7
16
  * Owns lifecycle for runtimes created by a direct host adapter.
@@ -9,6 +18,6 @@ export interface DoomChildSessionServiceDependencies {
9
18
  * The factory is the host boundary: it must construct the direct harness, apply
10
19
  * history ownership, and return only after child extensions are composed.
11
20
  */
12
- export declare function createDoomChildSessionService(factory: DoomChildSessionRuntimeFactory, dependencies: DoomChildSessionServiceDependencies): DoomChildSessionService;
21
+ export declare function createPoChildSessionService(factory: PoChildSessionRuntimeFactory, dependencies: PoChildSessionServiceDependencies): PoChildSessionService;
13
22
  //#endregion
14
23
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../../src/systems/child/services/childSession/index.ts"],"mappings":";;iBAWiB;WACN;;;;;;;;wBASK,8BACd,SAAS,gCACT,cAAc,sCACb"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../../src/systems/child/services/childSession/index.ts"],"mappings":";;;iBAciB;WACN,OAAO,QAAQ;;iBAGT;WACN;;WAEA;IACP,UAAU,iBAAiB;IAC3B,aAAa,eAAe,UAAU,oBAAoB;;;;;;;;;wBAgB9C,4BACd,SAAS,8BACT,cAAc,oCACb"}