@agimon-ai/po-core 0.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1218) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  4. package/dist/agentModel.cjs +4 -0
  5. package/dist/agentModel.d.mts +2 -0
  6. package/dist/agentModel.mjs +2 -0
  7. package/dist/apiContracts.cjs +2094 -0
  8. package/dist/apiContracts.cjs.map +1 -0
  9. package/dist/apiContracts.d.mts +1086 -0
  10. package/dist/apiContracts.d.mts.map +1 -0
  11. package/dist/apiContracts.mjs +2074 -0
  12. package/dist/apiContracts.mjs.map +1 -0
  13. package/dist/askUser.cjs +8 -0
  14. package/dist/askUser.d.mts +2 -0
  15. package/dist/askUser.mjs +2 -0
  16. package/dist/authorTools.cjs +5 -0
  17. package/dist/authorTools.d.mts +2 -0
  18. package/dist/authorTools.mjs +2 -0
  19. package/dist/backgroundWork.cjs +9 -0
  20. package/dist/backgroundWork.d.mts +2 -0
  21. package/dist/backgroundWork.mjs +2 -0
  22. package/dist/bundleAssetPolicy.cjs +5 -0
  23. package/dist/bundleAssetPolicy.d.mts +2 -0
  24. package/dist/bundleAssetPolicy.mjs +2 -0
  25. package/dist/childProcess.cjs +15 -0
  26. package/dist/childProcess.d.mts +2 -0
  27. package/dist/childProcess.mjs +2 -0
  28. package/dist/childSession.cjs +9 -0
  29. package/dist/childSession.d.mts +3 -0
  30. package/dist/childSession.mjs +3 -0
  31. package/dist/cockpitContainer.cjs +4 -0
  32. package/dist/cockpitContainer.d.mts +2 -0
  33. package/dist/cockpitContainer.mjs +2 -0
  34. package/dist/config.cjs +13 -0
  35. package/dist/config.d.mts +3 -0
  36. package/dist/config.mjs +2 -0
  37. package/dist/contextApi.cjs +12 -0
  38. package/dist/contextApi.d.mts +4 -0
  39. package/dist/contextApi.mjs +3 -0
  40. package/dist/contextContributions.cjs +7 -0
  41. package/dist/contextContributions.d.mts +3 -0
  42. package/dist/contextContributions.mjs +3 -0
  43. package/dist/contextDetail.cjs +65 -0
  44. package/dist/contextDetail.cjs.map +1 -0
  45. package/dist/contextDetail.d.mts +19 -0
  46. package/dist/contextDetail.d.mts.map +1 -0
  47. package/dist/contextDetail.mjs +64 -0
  48. package/dist/contextDetail.mjs.map +1 -0
  49. package/dist/contextDetailStore.cjs +96 -0
  50. package/dist/contextDetailStore.cjs.map +1 -0
  51. package/dist/contextDetailStore.d.mts +21 -0
  52. package/dist/contextDetailStore.d.mts.map +1 -0
  53. package/dist/contextDetailStore.mjs +87 -0
  54. package/dist/contextDetailStore.mjs.map +1 -0
  55. package/dist/contextProjection.cjs +121 -0
  56. package/dist/contextProjection.cjs.map +1 -0
  57. package/dist/contextProjection.d.mts +130 -0
  58. package/dist/contextProjection.d.mts.map +1 -0
  59. package/dist/contextProjection.mjs +117 -0
  60. package/dist/contextProjection.mjs.map +1 -0
  61. package/dist/cordisHost.cjs +13 -0
  62. package/dist/cordisHost.d.mts +2 -0
  63. package/dist/cordisHost.mjs +2 -0
  64. package/dist/delegation.cjs +18 -0
  65. package/dist/delegation.d.mts +2 -0
  66. package/dist/delegation.mjs +2 -0
  67. package/dist/doomPackage.cjs +61 -0
  68. package/dist/doomPackage.cjs.map +1 -0
  69. package/dist/doomPackage.d.mts +17 -0
  70. package/dist/doomPackage.d.mts.map +1 -0
  71. package/dist/doomPackage.mjs +54 -0
  72. package/dist/doomPackage.mjs.map +1 -0
  73. package/dist/executionBudget.cjs +232 -0
  74. package/dist/executionBudget.cjs.map +1 -0
  75. package/dist/executionBudget.d.mts +11 -0
  76. package/dist/executionBudget.d.mts.map +1 -0
  77. package/dist/executionBudget.mjs +226 -0
  78. package/dist/executionBudget.mjs.map +1 -0
  79. package/dist/extensionFile.cjs +19 -0
  80. package/dist/extensionFile.d.mts +3 -0
  81. package/dist/extensionFile.mjs +2 -0
  82. package/dist/footer.cjs +6 -0
  83. package/dist/footer.d.mts +2 -0
  84. package/dist/footer.mjs +2 -0
  85. package/dist/headless.cjs +16 -0
  86. package/dist/headless.d.mts +2 -0
  87. package/dist/headless.mjs +2 -0
  88. package/dist/headlessHub.cjs +1008 -0
  89. package/dist/headlessHub.cjs.map +1 -0
  90. package/dist/headlessHub.d.mts +176 -0
  91. package/dist/headlessHub.d.mts.map +1 -0
  92. package/dist/headlessHub.mjs +1005 -0
  93. package/dist/headlessHub.mjs.map +1 -0
  94. package/dist/headlessServer.cjs +956 -0
  95. package/dist/headlessServer.cjs.map +1 -0
  96. package/dist/headlessServer.d.mts +66 -0
  97. package/dist/headlessServer.d.mts.map +1 -0
  98. package/dist/headlessServer.mjs +949 -0
  99. package/dist/headlessServer.mjs.map +1 -0
  100. package/dist/headlessSessionHost.cjs +0 -0
  101. package/dist/headlessSessionHost.d.mts +89 -0
  102. package/dist/headlessSessionHost.d.mts.map +1 -0
  103. package/dist/headlessSessionHost.mjs +1 -0
  104. package/dist/headlessSessionManager.cjs +51 -0
  105. package/dist/headlessSessionManager.cjs.map +1 -0
  106. package/dist/headlessSessionManager.d.mts +6 -0
  107. package/dist/headlessSessionManager.d.mts.map +1 -0
  108. package/dist/headlessSessionManager.mjs +50 -0
  109. package/dist/headlessSessionManager.mjs.map +1 -0
  110. package/dist/help.cjs +24 -0
  111. package/dist/help.d.mts +3 -0
  112. package/dist/help.mjs +3 -0
  113. package/dist/history.cjs +25 -0
  114. package/dist/history.d.mts +10 -0
  115. package/dist/history.mjs +10 -0
  116. package/dist/historyOwnership.cjs +253 -0
  117. package/dist/historyOwnership.cjs.map +1 -0
  118. package/dist/historyOwnership.d.mts +23 -0
  119. package/dist/historyOwnership.d.mts.map +1 -0
  120. package/dist/historyOwnership.mjs +247 -0
  121. package/dist/historyOwnership.mjs.map +1 -0
  122. package/dist/hubChannel.cjs +4 -0
  123. package/dist/hubChannel.d.mts +2 -0
  124. package/dist/hubChannel.mjs +2 -0
  125. package/dist/index.cjs +44 -0
  126. package/dist/index.d.mts +6 -0
  127. package/dist/index.mjs +6 -0
  128. package/dist/json.cjs +6 -0
  129. package/dist/json.d.mts +2 -0
  130. package/dist/json.mjs +2 -0
  131. package/dist/jsonlSessionRepo.cjs +44 -0
  132. package/dist/jsonlSessionRepo.cjs.map +1 -0
  133. package/dist/jsonlSessionRepo.d.mts +7 -0
  134. package/dist/jsonlSessionRepo.d.mts.map +1 -0
  135. package/dist/jsonlSessionRepo.mjs +42 -0
  136. package/dist/jsonlSessionRepo.mjs.map +1 -0
  137. package/dist/kernel.cjs +3 -0
  138. package/dist/kernel.d.mts +3 -0
  139. package/dist/kernel.mjs +2 -0
  140. package/dist/leader.cjs +9 -0
  141. package/dist/leader.d.mts +2 -0
  142. package/dist/leader.mjs +2 -0
  143. package/dist/logSinkTelemetry.cjs +5 -0
  144. package/dist/logSinkTelemetry.d.mts +2 -0
  145. package/dist/logSinkTelemetry.mjs +2 -0
  146. package/dist/machineApi.cjs +92 -0
  147. package/dist/machineApi.cjs.map +1 -0
  148. package/dist/machineApi.d.mts +7 -0
  149. package/dist/machineApi.d.mts.map +1 -0
  150. package/dist/machineApi.mjs +88 -0
  151. package/dist/machineApi.mjs.map +1 -0
  152. package/dist/main.cjs +11 -0
  153. package/dist/main.d.mts +5 -0
  154. package/dist/main.mjs +4 -0
  155. package/dist/mcpFacet.cjs +9 -0
  156. package/dist/mcpFacet.d.mts +4 -0
  157. package/dist/mcpFacet.mjs +3 -0
  158. package/dist/mcpProjection.cjs +16 -0
  159. package/dist/mcpProjection.d.mts +2 -0
  160. package/dist/mcpProjection.mjs +2 -0
  161. package/dist/mcpSchemaCost.cjs +195 -0
  162. package/dist/mcpSchemaCost.cjs.map +1 -0
  163. package/dist/mcpSchemaCost.d.mts +35 -0
  164. package/dist/mcpSchemaCost.d.mts.map +1 -0
  165. package/dist/mcpSchemaCost.mjs +190 -0
  166. package/dist/mcpSchemaCost.mjs.map +1 -0
  167. package/dist/mcpSession.cjs +9 -0
  168. package/dist/mcpSession.d.mts +2 -0
  169. package/dist/mcpSession.mjs +2 -0
  170. package/dist/mcpStatus.cjs +7 -0
  171. package/dist/mcpStatus.d.mts +2 -0
  172. package/dist/mcpStatus.mjs +2 -0
  173. package/dist/mcpToolResolver.cjs +5 -0
  174. package/dist/mcpToolResolver.d.mts +2 -0
  175. package/dist/mcpToolResolver.mjs +2 -0
  176. package/dist/mcpWidget.cjs +0 -0
  177. package/dist/mcpWidget.d.mts +2 -0
  178. package/dist/mcpWidget.mjs +1 -0
  179. package/dist/moduleResolution.cjs +412 -0
  180. package/dist/moduleResolution.cjs.map +1 -0
  181. package/dist/moduleResolution.d.mts +72 -0
  182. package/dist/moduleResolution.d.mts.map +1 -0
  183. package/dist/moduleResolution.mjs +396 -0
  184. package/dist/moduleResolution.mjs.map +1 -0
  185. package/dist/narration.cjs +10 -0
  186. package/dist/narration.d.mts +2 -0
  187. package/dist/narration.mjs +2 -0
  188. package/dist/native.cjs +29 -0
  189. package/dist/native.d.mts +12 -0
  190. package/dist/native.mjs +8 -0
  191. package/dist/notification.cjs +17 -0
  192. package/dist/notification.d.mts +2 -0
  193. package/dist/notification.mjs +2 -0
  194. package/dist/packageApi.cjs +17 -0
  195. package/dist/packageApi.d.mts +3 -0
  196. package/dist/packageApi.mjs +3 -0
  197. package/dist/packageApiServer.cjs +196 -0
  198. package/dist/packageApiServer.cjs.map +1 -0
  199. package/dist/packageApiServer.d.mts +62 -0
  200. package/dist/packageApiServer.d.mts.map +1 -0
  201. package/dist/packageApiServer.mjs +194 -0
  202. package/dist/packageApiServer.mjs.map +1 -0
  203. package/dist/piSettings.cjs +20 -0
  204. package/dist/piSettings.d.mts +2 -0
  205. package/dist/piSettings.mjs +2 -0
  206. package/dist/pluginProtocol.cjs +10 -0
  207. package/dist/pluginProtocol.d.mts +2 -0
  208. package/dist/pluginProtocol.mjs +2 -0
  209. package/dist/profileIdentity.cjs +6 -0
  210. package/dist/profileIdentity.d.mts +2 -0
  211. package/dist/profileIdentity.mjs +2 -0
  212. package/dist/protocol.cjs +10 -0
  213. package/dist/protocol.d.mts +2 -0
  214. package/dist/protocol.mjs +2 -0
  215. package/dist/readiness.cjs +8 -0
  216. package/dist/readiness.d.mts +2 -0
  217. package/dist/readiness.mjs +2 -0
  218. package/dist/remoteApi.cjs +45 -0
  219. package/dist/remoteApi.cjs.map +1 -0
  220. package/dist/remoteApi.d.mts +7 -0
  221. package/dist/remoteApi.d.mts.map +1 -0
  222. package/dist/remoteApi.mjs +44 -0
  223. package/dist/remoteApi.mjs.map +1 -0
  224. package/dist/remoteRuntime.cjs +498 -0
  225. package/dist/remoteRuntime.cjs.map +1 -0
  226. package/dist/remoteRuntime.d.mts +36 -0
  227. package/dist/remoteRuntime.d.mts.map +1 -0
  228. package/dist/remoteRuntime.mjs +494 -0
  229. package/dist/remoteRuntime.mjs.map +1 -0
  230. package/dist/runtimeConfig.cjs +232 -0
  231. package/dist/runtimeConfig.cjs.map +1 -0
  232. package/dist/runtimeConfig.d.mts +313 -0
  233. package/dist/runtimeConfig.d.mts.map +1 -0
  234. package/dist/runtimeConfig.mjs +221 -0
  235. package/dist/runtimeConfig.mjs.map +1 -0
  236. package/dist/runtimeContextApi.cjs +64 -0
  237. package/dist/runtimeContextApi.cjs.map +1 -0
  238. package/dist/runtimeContextApi.d.mts +16 -0
  239. package/dist/runtimeContextApi.d.mts.map +1 -0
  240. package/dist/runtimeContextApi.mjs +62 -0
  241. package/dist/runtimeContextApi.mjs.map +1 -0
  242. package/dist/runtimeCordisHost.cjs +223 -0
  243. package/dist/runtimeCordisHost.cjs.map +1 -0
  244. package/dist/runtimeCordisHost.d.mts +78 -0
  245. package/dist/runtimeCordisHost.d.mts.map +1 -0
  246. package/dist/runtimeCordisHost.mjs +212 -0
  247. package/dist/runtimeCordisHost.mjs.map +1 -0
  248. package/dist/runtimeHeadlessSessionManager.cjs +0 -0
  249. package/dist/runtimeHeadlessSessionManager.d.mts +18 -0
  250. package/dist/runtimeHeadlessSessionManager.d.mts.map +1 -0
  251. package/dist/runtimeHeadlessSessionManager.mjs +1 -0
  252. package/dist/runtimeIdentity.cjs +26 -0
  253. package/dist/runtimeIdentity.cjs.map +1 -0
  254. package/dist/runtimeIdentity.d.mts +7 -0
  255. package/dist/runtimeIdentity.d.mts.map +1 -0
  256. package/dist/runtimeIdentity.mjs +21 -0
  257. package/dist/runtimeIdentity.mjs.map +1 -0
  258. package/dist/runtimeJson.cjs +46 -0
  259. package/dist/runtimeJson.cjs.map +1 -0
  260. package/dist/runtimeJson.d.mts +22 -0
  261. package/dist/runtimeJson.d.mts.map +1 -0
  262. package/dist/runtimeJson.mjs +39 -0
  263. package/dist/runtimeJson.mjs.map +1 -0
  264. package/dist/runtimeLogSinkTelemetry.cjs +102 -0
  265. package/dist/runtimeLogSinkTelemetry.cjs.map +1 -0
  266. package/dist/runtimeLogSinkTelemetry.d.mts +49 -0
  267. package/dist/runtimeLogSinkTelemetry.d.mts.map +1 -0
  268. package/dist/runtimeLogSinkTelemetry.mjs +99 -0
  269. package/dist/runtimeLogSinkTelemetry.mjs.map +1 -0
  270. package/dist/runtimePackages.cjs +120 -0
  271. package/dist/runtimePackages.cjs.map +1 -0
  272. package/dist/runtimePackages.d.mts +57 -0
  273. package/dist/runtimePackages.d.mts.map +1 -0
  274. package/dist/runtimePackages.mjs +110 -0
  275. package/dist/runtimePackages.mjs.map +1 -0
  276. package/dist/runtimePiSettings.cjs +257 -0
  277. package/dist/runtimePiSettings.cjs.map +1 -0
  278. package/dist/runtimePiSettings.d.mts +70 -0
  279. package/dist/runtimePiSettings.d.mts.map +1 -0
  280. package/dist/runtimePiSettings.mjs +235 -0
  281. package/dist/runtimePiSettings.mjs.map +1 -0
  282. package/dist/runtimeProtocol.cjs +228 -0
  283. package/dist/runtimeProtocol.cjs.map +1 -0
  284. package/dist/runtimeProtocol.d.mts +86 -0
  285. package/dist/runtimeProtocol.d.mts.map +1 -0
  286. package/dist/runtimeProtocol.mjs +219 -0
  287. package/dist/runtimeProtocol.mjs.map +1 -0
  288. package/dist/runtimeToolNames.cjs +51 -0
  289. package/dist/runtimeToolNames.cjs.map +1 -0
  290. package/dist/runtimeToolNames.d.mts +24 -0
  291. package/dist/runtimeToolNames.d.mts.map +1 -0
  292. package/dist/runtimeToolNames.mjs +49 -0
  293. package/dist/runtimeToolNames.mjs.map +1 -0
  294. package/dist/runtimeTransition.cjs +27 -0
  295. package/dist/runtimeTransition.cjs.map +1 -0
  296. package/dist/runtimeTransition.d.mts +114 -0
  297. package/dist/runtimeTransition.d.mts.map +1 -0
  298. package/dist/runtimeTransition.mjs +24 -0
  299. package/dist/runtimeTransition.mjs.map +1 -0
  300. package/dist/sandboxHarness.cjs +6 -0
  301. package/dist/sandboxHarness.d.mts +2 -0
  302. package/dist/sandboxHarness.mjs +2 -0
  303. package/dist/server.cjs +17 -0
  304. package/dist/server.d.mts +10 -0
  305. package/dist/server.mjs +7 -0
  306. package/dist/serverFacet.cjs +34 -0
  307. package/dist/serverFacet.d.mts +10 -0
  308. package/dist/serverFacet.mjs +9 -0
  309. package/dist/serverTelemetry.cjs +25 -0
  310. package/dist/serverTelemetry.cjs.map +1 -0
  311. package/dist/serverTelemetry.d.mts +12 -0
  312. package/dist/serverTelemetry.d.mts.map +1 -0
  313. package/dist/serverTelemetry.mjs +23 -0
  314. package/dist/serverTelemetry.mjs.map +1 -0
  315. package/dist/sessionFilesApi.cjs +96 -0
  316. package/dist/sessionFilesApi.cjs.map +1 -0
  317. package/dist/sessionFilesApi.d.mts +7 -0
  318. package/dist/sessionFilesApi.d.mts.map +1 -0
  319. package/dist/sessionFilesApi.mjs +91 -0
  320. package/dist/sessionFilesApi.mjs.map +1 -0
  321. package/dist/sessionMcp.cjs +6 -0
  322. package/dist/sessionMcp.d.mts +5 -0
  323. package/dist/sessionMcp.mjs +3 -0
  324. package/dist/sessionProtocol.cjs +8 -0
  325. package/dist/sessionProtocol.d.mts +3 -0
  326. package/dist/sessionProtocol.mjs +2 -0
  327. package/dist/skills.cjs +9 -0
  328. package/dist/skills.d.mts +2 -0
  329. package/dist/skills.mjs +2 -0
  330. package/dist/sqliteSessionStorage.cjs +168 -0
  331. package/dist/sqliteSessionStorage.cjs.map +1 -0
  332. package/dist/sqliteSessionStorage.d.mts +35 -0
  333. package/dist/sqliteSessionStorage.d.mts.map +1 -0
  334. package/dist/sqliteSessionStorage.mjs +158 -0
  335. package/dist/sqliteSessionStorage.mjs.map +1 -0
  336. package/dist/src/constants/authorTools.cjs +10 -0
  337. package/dist/src/constants/authorTools.cjs.map +1 -0
  338. package/dist/src/constants/authorTools.d.mts +6 -0
  339. package/dist/src/constants/authorTools.d.mts.map +1 -0
  340. package/dist/src/constants/authorTools.mjs +8 -0
  341. package/dist/src/constants/authorTools.mjs.map +1 -0
  342. package/dist/src/constants/contextApi.cjs +31 -0
  343. package/dist/src/constants/contextApi.cjs.map +1 -0
  344. package/dist/src/constants/contextApi.d.mts +23 -0
  345. package/dist/src/constants/contextApi.d.mts.map +1 -0
  346. package/dist/src/constants/contextApi.mjs +25 -0
  347. package/dist/src/constants/contextApi.mjs.map +1 -0
  348. package/dist/src/constants/nativeHost.cjs +56 -0
  349. package/dist/src/constants/nativeHost.cjs.map +1 -0
  350. package/dist/src/constants/nativeHost.d.mts +21 -0
  351. package/dist/src/constants/nativeHost.d.mts.map +1 -0
  352. package/dist/src/constants/nativeHost.mjs +53 -0
  353. package/dist/src/constants/nativeHost.mjs.map +1 -0
  354. package/dist/src/constants/remote.cjs +132 -0
  355. package/dist/src/constants/remote.cjs.map +1 -0
  356. package/dist/src/constants/remote.mjs +99 -0
  357. package/dist/src/constants/remote.mjs.map +1 -0
  358. package/dist/src/constants/sessionFiles.cjs +27 -0
  359. package/dist/src/constants/sessionFiles.cjs.map +1 -0
  360. package/dist/src/constants/sessionFiles.mjs +25 -0
  361. package/dist/src/constants/sessionFiles.mjs.map +1 -0
  362. package/dist/src/constants/voiceReloadHandoff.cjs +12 -0
  363. package/dist/src/constants/voiceReloadHandoff.cjs.map +1 -0
  364. package/dist/src/constants/voiceReloadHandoff.d.mts +7 -0
  365. package/dist/src/constants/voiceReloadHandoff.d.mts.map +1 -0
  366. package/dist/src/constants/voiceReloadHandoff.mjs +9 -0
  367. package/dist/src/constants/voiceReloadHandoff.mjs.map +1 -0
  368. package/dist/src/constants/voiceTools.cjs +96 -0
  369. package/dist/src/constants/voiceTools.cjs.map +1 -0
  370. package/dist/src/constants/voiceTools.d.mts +58 -0
  371. package/dist/src/constants/voiceTools.d.mts.map +1 -0
  372. package/dist/src/constants/voiceTools.mjs +60 -0
  373. package/dist/src/constants/voiceTools.mjs.map +1 -0
  374. package/dist/src/extensions/extensionFile.cjs +140 -0
  375. package/dist/src/extensions/extensionFile.cjs.map +1 -0
  376. package/dist/src/extensions/extensionFile.d.mts +69 -0
  377. package/dist/src/extensions/extensionFile.d.mts.map +1 -0
  378. package/dist/src/extensions/extensionFile.mjs +124 -0
  379. package/dist/src/extensions/extensionFile.mjs.map +1 -0
  380. package/dist/src/extensions/serverPlugin.cjs +107 -0
  381. package/dist/src/extensions/serverPlugin.cjs.map +1 -0
  382. package/dist/src/extensions/serverPlugin.d.mts +5 -0
  383. package/dist/src/extensions/serverPlugin.d.mts.map +1 -0
  384. package/dist/src/extensions/serverPlugin.mjs +107 -0
  385. package/dist/src/extensions/serverPlugin.mjs.map +1 -0
  386. package/dist/src/extensions/webPlugin.cjs +136 -0
  387. package/dist/src/extensions/webPlugin.cjs.map +1 -0
  388. package/dist/src/extensions/webPlugin.d.mts +68 -0
  389. package/dist/src/extensions/webPlugin.d.mts.map +1 -0
  390. package/dist/src/extensions/webPlugin.mjs +114 -0
  391. package/dist/src/extensions/webPlugin.mjs.map +1 -0
  392. package/dist/src/pi/piSessionRuntime.cjs +625 -0
  393. package/dist/src/pi/piSessionRuntime.cjs.map +1 -0
  394. package/dist/src/pi/piSessionRuntime.d.mts +43 -0
  395. package/dist/src/pi/piSessionRuntime.d.mts.map +1 -0
  396. package/dist/src/pi/piSessionRuntime.mjs +624 -0
  397. package/dist/src/pi/piSessionRuntime.mjs.map +1 -0
  398. package/dist/src/pi/piWebSocketListener.cjs +115 -0
  399. package/dist/src/pi/piWebSocketListener.cjs.map +1 -0
  400. package/dist/src/pi/piWebSocketListener.mjs +115 -0
  401. package/dist/src/pi/piWebSocketListener.mjs.map +1 -0
  402. package/dist/src/schemas/agentModel.cjs +33 -0
  403. package/dist/src/schemas/agentModel.cjs.map +1 -0
  404. package/dist/src/schemas/agentModel.d.mts +26 -0
  405. package/dist/src/schemas/agentModel.d.mts.map +1 -0
  406. package/dist/src/schemas/agentModel.mjs +32 -0
  407. package/dist/src/schemas/agentModel.mjs.map +1 -0
  408. package/dist/src/schemas/apiContracts.d.mts +58 -0
  409. package/dist/src/schemas/apiContracts.d.mts.map +1 -0
  410. package/dist/src/schemas/askUser.cjs +42 -0
  411. package/dist/src/schemas/askUser.cjs.map +1 -0
  412. package/dist/src/schemas/askUser.d.mts +47 -0
  413. package/dist/src/schemas/askUser.d.mts.map +1 -0
  414. package/dist/src/schemas/askUser.mjs +37 -0
  415. package/dist/src/schemas/askUser.mjs.map +1 -0
  416. package/dist/src/schemas/backgroundWork.cjs +44 -0
  417. package/dist/src/schemas/backgroundWork.cjs.map +1 -0
  418. package/dist/src/schemas/backgroundWork.d.mts +76 -0
  419. package/dist/src/schemas/backgroundWork.d.mts.map +1 -0
  420. package/dist/src/schemas/backgroundWork.mjs +38 -0
  421. package/dist/src/schemas/backgroundWork.mjs.map +1 -0
  422. package/dist/src/schemas/childProcess.cjs +67 -0
  423. package/dist/src/schemas/childProcess.cjs.map +1 -0
  424. package/dist/src/schemas/childProcess.d.mts +30 -0
  425. package/dist/src/schemas/childProcess.d.mts.map +1 -0
  426. package/dist/src/schemas/childProcess.mjs +55 -0
  427. package/dist/src/schemas/childProcess.mjs.map +1 -0
  428. package/dist/src/schemas/cockpitContainer.cjs +31 -0
  429. package/dist/src/schemas/cockpitContainer.cjs.map +1 -0
  430. package/dist/src/schemas/cockpitContainer.d.mts +80 -0
  431. package/dist/src/schemas/cockpitContainer.d.mts.map +1 -0
  432. package/dist/src/schemas/cockpitContainer.mjs +30 -0
  433. package/dist/src/schemas/cockpitContainer.mjs.map +1 -0
  434. package/dist/src/schemas/contextContributions.cjs +17 -0
  435. package/dist/src/schemas/contextContributions.cjs.map +1 -0
  436. package/dist/src/schemas/contextContributions.d.mts +49 -0
  437. package/dist/src/schemas/contextContributions.d.mts.map +1 -0
  438. package/dist/src/schemas/contextContributions.mjs +15 -0
  439. package/dist/src/schemas/contextContributions.mjs.map +1 -0
  440. package/dist/src/schemas/delegation.cjs +91 -0
  441. package/dist/src/schemas/delegation.cjs.map +1 -0
  442. package/dist/src/schemas/delegation.d.mts +95 -0
  443. package/dist/src/schemas/delegation.d.mts.map +1 -0
  444. package/dist/src/schemas/delegation.mjs +76 -0
  445. package/dist/src/schemas/delegation.mjs.map +1 -0
  446. package/dist/src/schemas/extensionFile.d.mts +116 -0
  447. package/dist/src/schemas/extensionFile.d.mts.map +1 -0
  448. package/dist/src/schemas/footer.cjs +48 -0
  449. package/dist/src/schemas/footer.cjs.map +1 -0
  450. package/dist/src/schemas/footer.d.mts +48 -0
  451. package/dist/src/schemas/footer.d.mts.map +1 -0
  452. package/dist/src/schemas/footer.mjs +45 -0
  453. package/dist/src/schemas/footer.mjs.map +1 -0
  454. package/dist/src/schemas/headless.cjs +97 -0
  455. package/dist/src/schemas/headless.cjs.map +1 -0
  456. package/dist/src/schemas/headless.d.mts +472 -0
  457. package/dist/src/schemas/headless.d.mts.map +1 -0
  458. package/dist/src/schemas/headless.mjs +84 -0
  459. package/dist/src/schemas/headless.mjs.map +1 -0
  460. package/dist/src/schemas/help.cjs +281 -0
  461. package/dist/src/schemas/help.cjs.map +1 -0
  462. package/dist/src/schemas/help.d.mts +119 -0
  463. package/dist/src/schemas/help.d.mts.map +1 -0
  464. package/dist/src/schemas/help.mjs +262 -0
  465. package/dist/src/schemas/help.mjs.map +1 -0
  466. package/dist/src/schemas/hubChannel.cjs +20 -0
  467. package/dist/src/schemas/hubChannel.cjs.map +1 -0
  468. package/dist/src/schemas/hubChannel.d.mts +271 -0
  469. package/dist/src/schemas/hubChannel.d.mts.map +1 -0
  470. package/dist/src/schemas/hubChannel.mjs +19 -0
  471. package/dist/src/schemas/hubChannel.mjs.map +1 -0
  472. package/dist/src/schemas/leader.cjs +57 -0
  473. package/dist/src/schemas/leader.cjs.map +1 -0
  474. package/dist/src/schemas/leader.d.mts +107 -0
  475. package/dist/src/schemas/leader.d.mts.map +1 -0
  476. package/dist/src/schemas/leader.mjs +51 -0
  477. package/dist/src/schemas/leader.mjs.map +1 -0
  478. package/dist/src/schemas/mcpBundle.d.mts +13 -0
  479. package/dist/src/schemas/mcpBundle.d.mts.map +1 -0
  480. package/dist/src/schemas/mcpFacet.cjs +24 -0
  481. package/dist/src/schemas/mcpFacet.cjs.map +1 -0
  482. package/dist/src/schemas/mcpFacet.d.mts +91 -0
  483. package/dist/src/schemas/mcpFacet.d.mts.map +1 -0
  484. package/dist/src/schemas/mcpFacet.mjs +21 -0
  485. package/dist/src/schemas/mcpFacet.mjs.map +1 -0
  486. package/dist/src/schemas/mcpProjection.cjs +117 -0
  487. package/dist/src/schemas/mcpProjection.cjs.map +1 -0
  488. package/dist/src/schemas/mcpProjection.d.mts +124 -0
  489. package/dist/src/schemas/mcpProjection.d.mts.map +1 -0
  490. package/dist/src/schemas/mcpProjection.mjs +104 -0
  491. package/dist/src/schemas/mcpProjection.mjs.map +1 -0
  492. package/dist/src/schemas/mcpSession.cjs +57 -0
  493. package/dist/src/schemas/mcpSession.cjs.map +1 -0
  494. package/dist/src/schemas/mcpSession.d.mts +57 -0
  495. package/dist/src/schemas/mcpSession.d.mts.map +1 -0
  496. package/dist/src/schemas/mcpSession.mjs +51 -0
  497. package/dist/src/schemas/mcpSession.mjs.map +1 -0
  498. package/dist/src/schemas/mcpStatus.cjs +52 -0
  499. package/dist/src/schemas/mcpStatus.cjs.map +1 -0
  500. package/dist/src/schemas/mcpStatus.d.mts +73 -0
  501. package/dist/src/schemas/mcpStatus.d.mts.map +1 -0
  502. package/dist/src/schemas/mcpStatus.mjs +48 -0
  503. package/dist/src/schemas/mcpStatus.mjs.map +1 -0
  504. package/dist/src/schemas/mcpToolResolver.cjs +17 -0
  505. package/dist/src/schemas/mcpToolResolver.cjs.map +1 -0
  506. package/dist/src/schemas/mcpToolResolver.d.mts +24 -0
  507. package/dist/src/schemas/mcpToolResolver.d.mts.map +1 -0
  508. package/dist/src/schemas/mcpToolResolver.mjs +15 -0
  509. package/dist/src/schemas/mcpToolResolver.mjs.map +1 -0
  510. package/dist/src/schemas/narration.cjs +54 -0
  511. package/dist/src/schemas/narration.cjs.map +1 -0
  512. package/dist/src/schemas/narration.d.mts +29 -0
  513. package/dist/src/schemas/narration.d.mts.map +1 -0
  514. package/dist/src/schemas/narration.mjs +47 -0
  515. package/dist/src/schemas/narration.mjs.map +1 -0
  516. package/dist/src/schemas/notification.cjs +122 -0
  517. package/dist/src/schemas/notification.cjs.map +1 -0
  518. package/dist/src/schemas/notification.d.mts +48 -0
  519. package/dist/src/schemas/notification.d.mts.map +1 -0
  520. package/dist/src/schemas/notification.mjs +108 -0
  521. package/dist/src/schemas/notification.mjs.map +1 -0
  522. package/dist/src/schemas/packageApi.cjs +76 -0
  523. package/dist/src/schemas/packageApi.cjs.map +1 -0
  524. package/dist/src/schemas/packageApi.d.mts +302 -0
  525. package/dist/src/schemas/packageApi.d.mts.map +1 -0
  526. package/dist/src/schemas/packageApi.mjs +66 -0
  527. package/dist/src/schemas/packageApi.mjs.map +1 -0
  528. package/dist/src/schemas/pluginContributions.cjs +19 -0
  529. package/dist/src/schemas/pluginContributions.cjs.map +1 -0
  530. package/dist/src/schemas/pluginContributions.d.mts +56 -0
  531. package/dist/src/schemas/pluginContributions.d.mts.map +1 -0
  532. package/dist/src/schemas/pluginContributions.mjs +18 -0
  533. package/dist/src/schemas/pluginContributions.mjs.map +1 -0
  534. package/dist/src/schemas/pluginProtocol.cjs +103 -0
  535. package/dist/src/schemas/pluginProtocol.cjs.map +1 -0
  536. package/dist/src/schemas/pluginProtocol.d.mts +70 -0
  537. package/dist/src/schemas/pluginProtocol.d.mts.map +1 -0
  538. package/dist/src/schemas/pluginProtocol.mjs +96 -0
  539. package/dist/src/schemas/pluginProtocol.mjs.map +1 -0
  540. package/dist/src/schemas/profileIdentity.cjs +67 -0
  541. package/dist/src/schemas/profileIdentity.cjs.map +1 -0
  542. package/dist/src/schemas/profileIdentity.d.mts +50 -0
  543. package/dist/src/schemas/profileIdentity.d.mts.map +1 -0
  544. package/dist/src/schemas/profileIdentity.mjs +64 -0
  545. package/dist/src/schemas/profileIdentity.mjs.map +1 -0
  546. package/dist/src/schemas/readiness.cjs +251 -0
  547. package/dist/src/schemas/readiness.cjs.map +1 -0
  548. package/dist/src/schemas/readiness.d.mts +84 -0
  549. package/dist/src/schemas/readiness.d.mts.map +1 -0
  550. package/dist/src/schemas/readiness.mjs +246 -0
  551. package/dist/src/schemas/readiness.mjs.map +1 -0
  552. package/dist/src/schemas/sandboxHarness.cjs +29 -0
  553. package/dist/src/schemas/sandboxHarness.cjs.map +1 -0
  554. package/dist/src/schemas/sandboxHarness.d.mts +39 -0
  555. package/dist/src/schemas/sandboxHarness.d.mts.map +1 -0
  556. package/dist/src/schemas/sandboxHarness.mjs +26 -0
  557. package/dist/src/schemas/sandboxHarness.mjs.map +1 -0
  558. package/dist/src/schemas/serverBundle.d.mts +19 -0
  559. package/dist/src/schemas/serverBundle.d.mts.map +1 -0
  560. package/dist/src/schemas/serverFacet.cjs +111 -0
  561. package/dist/src/schemas/serverFacet.cjs.map +1 -0
  562. package/dist/src/schemas/serverFacet.d.mts +152 -0
  563. package/dist/src/schemas/serverFacet.d.mts.map +1 -0
  564. package/dist/src/schemas/serverFacet.mjs +101 -0
  565. package/dist/src/schemas/serverFacet.mjs.map +1 -0
  566. package/dist/src/schemas/sessionMcpActivity.d.mts +47 -0
  567. package/dist/src/schemas/sessionMcpActivity.d.mts.map +1 -0
  568. package/dist/src/schemas/sessionProtocol.cjs +17 -0
  569. package/dist/src/schemas/sessionProtocol.cjs.map +1 -0
  570. package/dist/src/schemas/sessionProtocol.d.mts +313 -0
  571. package/dist/src/schemas/sessionProtocol.d.mts.map +1 -0
  572. package/dist/src/schemas/sessionProtocol.mjs +12 -0
  573. package/dist/src/schemas/sessionProtocol.mjs.map +1 -0
  574. package/dist/src/schemas/sessionUpdates.d.mts +34 -0
  575. package/dist/src/schemas/sessionUpdates.d.mts.map +1 -0
  576. package/dist/src/schemas/skills.cjs +115 -0
  577. package/dist/src/schemas/skills.cjs.map +1 -0
  578. package/dist/src/schemas/skills.d.mts +65 -0
  579. package/dist/src/schemas/skills.d.mts.map +1 -0
  580. package/dist/src/schemas/skills.mjs +109 -0
  581. package/dist/src/schemas/skills.mjs.map +1 -0
  582. package/dist/src/schemas/toolOverrides.cjs +17 -0
  583. package/dist/src/schemas/toolOverrides.cjs.map +1 -0
  584. package/dist/src/schemas/toolOverrides.d.mts +29 -0
  585. package/dist/src/schemas/toolOverrides.d.mts.map +1 -0
  586. package/dist/src/schemas/toolOverrides.mjs +15 -0
  587. package/dist/src/schemas/toolOverrides.mjs.map +1 -0
  588. package/dist/src/schemas/toolSurface.cjs +17 -0
  589. package/dist/src/schemas/toolSurface.cjs.map +1 -0
  590. package/dist/src/schemas/toolSurface.d.mts +70 -0
  591. package/dist/src/schemas/toolSurface.d.mts.map +1 -0
  592. package/dist/src/schemas/toolSurface.mjs +15 -0
  593. package/dist/src/schemas/toolSurface.mjs.map +1 -0
  594. package/dist/src/schemas/uiHub.cjs +17 -0
  595. package/dist/src/schemas/uiHub.cjs.map +1 -0
  596. package/dist/src/schemas/uiHub.d.mts +23 -0
  597. package/dist/src/schemas/uiHub.d.mts.map +1 -0
  598. package/dist/src/schemas/uiHub.mjs +15 -0
  599. package/dist/src/schemas/uiHub.mjs.map +1 -0
  600. package/dist/src/schemas/voiceReloadHandoff.cjs +78 -0
  601. package/dist/src/schemas/voiceReloadHandoff.cjs.map +1 -0
  602. package/dist/src/schemas/voiceReloadHandoff.d.mts +31 -0
  603. package/dist/src/schemas/voiceReloadHandoff.d.mts.map +1 -0
  604. package/dist/src/schemas/voiceReloadHandoff.mjs +75 -0
  605. package/dist/src/schemas/voiceReloadHandoff.mjs.map +1 -0
  606. package/dist/src/schemas/voiceTools.cjs +205 -0
  607. package/dist/src/schemas/voiceTools.cjs.map +1 -0
  608. package/dist/src/schemas/voiceTools.d.mts +120 -0
  609. package/dist/src/schemas/voiceTools.d.mts.map +1 -0
  610. package/dist/src/schemas/voiceTools.mjs +194 -0
  611. package/dist/src/schemas/voiceTools.mjs.map +1 -0
  612. package/dist/src/server/devProxyForward.cjs +141 -0
  613. package/dist/src/server/devProxyForward.cjs.map +1 -0
  614. package/dist/src/server/devProxyForward.mjs +139 -0
  615. package/dist/src/server/devProxyForward.mjs.map +1 -0
  616. package/dist/src/server/devProxyRoutes.cjs +97 -0
  617. package/dist/src/server/devProxyRoutes.cjs.map +1 -0
  618. package/dist/src/server/devProxyRoutes.mjs +97 -0
  619. package/dist/src/server/devProxyRoutes.mjs.map +1 -0
  620. package/dist/src/server/devProxySocket.cjs +93 -0
  621. package/dist/src/server/devProxySocket.cjs.map +1 -0
  622. package/dist/src/server/devProxySocket.d.mts +25 -0
  623. package/dist/src/server/devProxySocket.d.mts.map +1 -0
  624. package/dist/src/server/devProxySocket.mjs +93 -0
  625. package/dist/src/server/devProxySocket.mjs.map +1 -0
  626. package/dist/src/server/directHarnessRuntime.cjs +2387 -0
  627. package/dist/src/server/directHarnessRuntime.cjs.map +1 -0
  628. package/dist/src/server/directHarnessRuntime.d.mts +4 -0
  629. package/dist/src/server/directHarnessRuntime.mjs +2384 -0
  630. package/dist/src/server/directHarnessRuntime.mjs.map +1 -0
  631. package/dist/src/server/harnessErrorMessage.cjs +13 -0
  632. package/dist/src/server/harnessErrorMessage.cjs.map +1 -0
  633. package/dist/src/server/harnessErrorMessage.mjs +13 -0
  634. package/dist/src/server/harnessErrorMessage.mjs.map +1 -0
  635. package/dist/src/server/headlessProtocol.cjs +382 -0
  636. package/dist/src/server/headlessProtocol.cjs.map +1 -0
  637. package/dist/src/server/headlessProtocol.mjs +382 -0
  638. package/dist/src/server/headlessProtocol.mjs.map +1 -0
  639. package/dist/src/server/liveImport.cjs +37 -0
  640. package/dist/src/server/liveImport.cjs.map +1 -0
  641. package/dist/src/server/liveImport.d.mts +27 -0
  642. package/dist/src/server/liveImport.d.mts.map +1 -0
  643. package/dist/src/server/liveImport.mjs +34 -0
  644. package/dist/src/server/liveImport.mjs.map +1 -0
  645. package/dist/src/server/mcpBundleLoader.cjs +108 -0
  646. package/dist/src/server/mcpBundleLoader.cjs.map +1 -0
  647. package/dist/src/server/mcpBundleLoader.d.mts +46 -0
  648. package/dist/src/server/mcpBundleLoader.d.mts.map +1 -0
  649. package/dist/src/server/mcpBundleLoader.mjs +107 -0
  650. package/dist/src/server/mcpBundleLoader.mjs.map +1 -0
  651. package/dist/src/server/nativeChildTranscriptReader.cjs +20 -0
  652. package/dist/src/server/nativeChildTranscriptReader.cjs.map +1 -0
  653. package/dist/src/server/nativeChildTranscriptReader.mjs +18 -0
  654. package/dist/src/server/nativeChildTranscriptReader.mjs.map +1 -0
  655. package/dist/src/server/remoteRoutes.cjs +463 -0
  656. package/dist/src/server/remoteRoutes.cjs.map +1 -0
  657. package/dist/src/server/remoteRoutes.mjs +463 -0
  658. package/dist/src/server/remoteRoutes.mjs.map +1 -0
  659. package/dist/src/server/serverFacetLoader.cjs +214 -0
  660. package/dist/src/server/serverFacetLoader.cjs.map +1 -0
  661. package/dist/src/server/serverFacetLoader.d.mts +72 -0
  662. package/dist/src/server/serverFacetLoader.d.mts.map +1 -0
  663. package/dist/src/server/serverFacetLoader.mjs +212 -0
  664. package/dist/src/server/serverFacetLoader.mjs.map +1 -0
  665. package/dist/src/server/sessionMcpHandler.cjs +585 -0
  666. package/dist/src/server/sessionMcpHandler.cjs.map +1 -0
  667. package/dist/src/server/sessionMcpHandler.d.mts +50 -0
  668. package/dist/src/server/sessionMcpHandler.d.mts.map +1 -0
  669. package/dist/src/server/sessionMcpHandler.mjs +582 -0
  670. package/dist/src/server/sessionMcpHandler.mjs.map +1 -0
  671. package/dist/src/server/sessionMcpRoutes.cjs +809 -0
  672. package/dist/src/server/sessionMcpRoutes.cjs.map +1 -0
  673. package/dist/src/server/sessionMcpRoutes.mjs +804 -0
  674. package/dist/src/server/sessionMcpRoutes.mjs.map +1 -0
  675. package/dist/src/server/threadJournals.cjs +172 -0
  676. package/dist/src/server/threadJournals.cjs.map +1 -0
  677. package/dist/src/server/threadJournals.mjs +169 -0
  678. package/dist/src/server/threadJournals.mjs.map +1 -0
  679. package/dist/src/services/acpSessionUpdates/index.cjs +129 -0
  680. package/dist/src/services/acpSessionUpdates/index.cjs.map +1 -0
  681. package/dist/src/services/acpSessionUpdates/index.mjs +129 -0
  682. package/dist/src/services/acpSessionUpdates/index.mjs.map +1 -0
  683. package/dist/src/services/apiSurfaceAssert/index.cjs +60 -0
  684. package/dist/src/services/apiSurfaceAssert/index.cjs.map +1 -0
  685. package/dist/src/services/apiSurfaceAssert/index.d.mts +24 -0
  686. package/dist/src/services/apiSurfaceAssert/index.d.mts.map +1 -0
  687. package/dist/src/services/apiSurfaceAssert/index.mjs +60 -0
  688. package/dist/src/services/apiSurfaceAssert/index.mjs.map +1 -0
  689. package/dist/src/services/bundlePublication/index.cjs +89 -0
  690. package/dist/src/services/bundlePublication/index.cjs.map +1 -0
  691. package/dist/src/services/bundlePublication/index.mjs +86 -0
  692. package/dist/src/services/bundlePublication/index.mjs.map +1 -0
  693. package/dist/src/services/contextApiUrls/index.cjs +53 -0
  694. package/dist/src/services/contextApiUrls/index.cjs.map +1 -0
  695. package/dist/src/services/contextApiUrls/index.d.mts +8 -0
  696. package/dist/src/services/contextApiUrls/index.d.mts.map +1 -0
  697. package/dist/src/services/contextApiUrls/index.mjs +52 -0
  698. package/dist/src/services/contextApiUrls/index.mjs.map +1 -0
  699. package/dist/src/services/contextContributions/index.cjs +79 -0
  700. package/dist/src/services/contextContributions/index.cjs.map +1 -0
  701. package/dist/src/services/contextContributions/index.d.mts +6 -0
  702. package/dist/src/services/contextContributions/index.d.mts.map +1 -0
  703. package/dist/src/services/contextContributions/index.mjs +79 -0
  704. package/dist/src/services/contextContributions/index.mjs.map +1 -0
  705. package/dist/src/services/contextUsage/index.cjs +27 -0
  706. package/dist/src/services/contextUsage/index.cjs.map +1 -0
  707. package/dist/src/services/contextUsage/index.mjs +25 -0
  708. package/dist/src/services/contextUsage/index.mjs.map +1 -0
  709. package/dist/src/services/devProxyPolicy/index.cjs +168 -0
  710. package/dist/src/services/devProxyPolicy/index.cjs.map +1 -0
  711. package/dist/src/services/devProxyPolicy/index.mjs +165 -0
  712. package/dist/src/services/devProxyPolicy/index.mjs.map +1 -0
  713. package/dist/src/services/devProxyStore/index.cjs +107 -0
  714. package/dist/src/services/devProxyStore/index.cjs.map +1 -0
  715. package/dist/src/services/devProxyStore/index.mjs +104 -0
  716. package/dist/src/services/devProxyStore/index.mjs.map +1 -0
  717. package/dist/src/services/deviceAuth/index.cjs +146 -0
  718. package/dist/src/services/deviceAuth/index.cjs.map +1 -0
  719. package/dist/src/services/deviceAuth/index.d.mts +9 -0
  720. package/dist/src/services/deviceAuth/index.d.mts.map +1 -0
  721. package/dist/src/services/deviceAuth/index.mjs +146 -0
  722. package/dist/src/services/deviceAuth/index.mjs.map +1 -0
  723. package/dist/src/services/deviceSessions/index.cjs +147 -0
  724. package/dist/src/services/deviceSessions/index.cjs.map +1 -0
  725. package/dist/src/services/deviceSessions/index.d.mts +18 -0
  726. package/dist/src/services/deviceSessions/index.d.mts.map +1 -0
  727. package/dist/src/services/deviceSessions/index.mjs +141 -0
  728. package/dist/src/services/deviceSessions/index.mjs.map +1 -0
  729. package/dist/src/services/deviceTrust/index.cjs +294 -0
  730. package/dist/src/services/deviceTrust/index.cjs.map +1 -0
  731. package/dist/src/services/deviceTrust/index.mjs +282 -0
  732. package/dist/src/services/deviceTrust/index.mjs.map +1 -0
  733. package/dist/src/services/durableNavigation/index.cjs +46 -0
  734. package/dist/src/services/durableNavigation/index.cjs.map +1 -0
  735. package/dist/src/services/durableNavigation/index.mjs +45 -0
  736. package/dist/src/services/durableNavigation/index.mjs.map +1 -0
  737. package/dist/src/services/headlessClient/index.cjs +126 -0
  738. package/dist/src/services/headlessClient/index.cjs.map +1 -0
  739. package/dist/src/services/headlessClient/index.mjs +126 -0
  740. package/dist/src/services/headlessClient/index.mjs.map +1 -0
  741. package/dist/src/services/historyImport/index.cjs +8 -0
  742. package/dist/src/services/historyImport/index.cjs.map +1 -0
  743. package/dist/src/services/historyImport/index.d.mts +68 -0
  744. package/dist/src/services/historyImport/index.d.mts.map +1 -0
  745. package/dist/src/services/historyImport/index.mjs +8 -0
  746. package/dist/src/services/historyImport/index.mjs.map +1 -0
  747. package/dist/src/services/hubChannelHarness/index.cjs +50 -0
  748. package/dist/src/services/hubChannelHarness/index.cjs.map +1 -0
  749. package/dist/src/services/hubChannelHarness/index.d.mts +17 -0
  750. package/dist/src/services/hubChannelHarness/index.d.mts.map +1 -0
  751. package/dist/src/services/hubChannelHarness/index.mjs +50 -0
  752. package/dist/src/services/hubChannelHarness/index.mjs.map +1 -0
  753. package/dist/src/services/kernel/index.cjs +147 -0
  754. package/dist/src/services/kernel/index.cjs.map +1 -0
  755. package/dist/src/services/kernel/index.d.mts +9 -0
  756. package/dist/src/services/kernel/index.d.mts.map +1 -0
  757. package/dist/src/services/kernel/index.mjs +147 -0
  758. package/dist/src/services/kernel/index.mjs.map +1 -0
  759. package/dist/src/services/loginFlow/index.cjs +131 -0
  760. package/dist/src/services/loginFlow/index.cjs.map +1 -0
  761. package/dist/src/services/loginFlow/index.mjs +131 -0
  762. package/dist/src/services/loginFlow/index.mjs.map +1 -0
  763. package/dist/src/services/loopbackAddress/index.cjs +58 -0
  764. package/dist/src/services/loopbackAddress/index.cjs.map +1 -0
  765. package/dist/src/services/loopbackAddress/index.mjs +56 -0
  766. package/dist/src/services/loopbackAddress/index.mjs.map +1 -0
  767. package/dist/src/services/openSessionRegistry/index.cjs +134 -0
  768. package/dist/src/services/openSessionRegistry/index.cjs.map +1 -0
  769. package/dist/src/services/openSessionRegistry/index.d.mts +36 -0
  770. package/dist/src/services/openSessionRegistry/index.d.mts.map +1 -0
  771. package/dist/src/services/openSessionRegistry/index.mjs +131 -0
  772. package/dist/src/services/openSessionRegistry/index.mjs.map +1 -0
  773. package/dist/src/services/packageApiHarness/index.cjs +36 -0
  774. package/dist/src/services/packageApiHarness/index.cjs.map +1 -0
  775. package/dist/src/services/packageApiHarness/index.d.mts +40 -0
  776. package/dist/src/services/packageApiHarness/index.d.mts.map +1 -0
  777. package/dist/src/services/packageApiHarness/index.mjs +36 -0
  778. package/dist/src/services/packageApiHarness/index.mjs.map +1 -0
  779. package/dist/src/services/packageResource/index.cjs +54 -0
  780. package/dist/src/services/packageResource/index.cjs.map +1 -0
  781. package/dist/src/services/packageResource/index.d.mts +26 -0
  782. package/dist/src/services/packageResource/index.d.mts.map +1 -0
  783. package/dist/src/services/packageResource/index.mjs +51 -0
  784. package/dist/src/services/packageResource/index.mjs.map +1 -0
  785. package/dist/src/services/pairingFlow/index.cjs +145 -0
  786. package/dist/src/services/pairingFlow/index.cjs.map +1 -0
  787. package/dist/src/services/pairingFlow/index.d.mts +44 -0
  788. package/dist/src/services/pairingFlow/index.d.mts.map +1 -0
  789. package/dist/src/services/pairingFlow/index.mjs +145 -0
  790. package/dist/src/services/pairingFlow/index.mjs.map +1 -0
  791. package/dist/src/services/pairingPage/index.cjs +450 -0
  792. package/dist/src/services/pairingPage/index.cjs.map +1 -0
  793. package/dist/src/services/pairingPage/index.mjs +447 -0
  794. package/dist/src/services/pairingPage/index.mjs.map +1 -0
  795. package/dist/src/services/piExtensionHost/index.cjs +889 -0
  796. package/dist/src/services/piExtensionHost/index.cjs.map +1 -0
  797. package/dist/src/services/piExtensionHost/index.mjs +885 -0
  798. package/dist/src/services/piExtensionHost/index.mjs.map +1 -0
  799. package/dist/src/services/piHelpTools/index.cjs +68 -0
  800. package/dist/src/services/piHelpTools/index.cjs.map +1 -0
  801. package/dist/src/services/piHelpTools/index.d.mts +10 -0
  802. package/dist/src/services/piHelpTools/index.d.mts.map +1 -0
  803. package/dist/src/services/piHelpTools/index.mjs +68 -0
  804. package/dist/src/services/piHelpTools/index.mjs.map +1 -0
  805. package/dist/src/services/piSessionEntries/index.cjs +121 -0
  806. package/dist/src/services/piSessionEntries/index.cjs.map +1 -0
  807. package/dist/src/services/piSessionEntries/index.mjs +117 -0
  808. package/dist/src/services/piSessionEntries/index.mjs.map +1 -0
  809. package/dist/src/services/pluginLifecycle/index.cjs +71 -0
  810. package/dist/src/services/pluginLifecycle/index.cjs.map +1 -0
  811. package/dist/src/services/pluginLifecycle/index.d.mts +8 -0
  812. package/dist/src/services/pluginLifecycle/index.d.mts.map +1 -0
  813. package/dist/src/services/pluginLifecycle/index.mjs +71 -0
  814. package/dist/src/services/pluginLifecycle/index.mjs.map +1 -0
  815. package/dist/src/services/providerAuth/index.cjs +156 -0
  816. package/dist/src/services/providerAuth/index.cjs.map +1 -0
  817. package/dist/src/services/providerAuth/index.mjs +154 -0
  818. package/dist/src/services/providerAuth/index.mjs.map +1 -0
  819. package/dist/src/services/publicFileShares/index.cjs +192 -0
  820. package/dist/src/services/publicFileShares/index.cjs.map +1 -0
  821. package/dist/src/services/publicFileShares/index.d.mts +16 -0
  822. package/dist/src/services/publicFileShares/index.d.mts.map +1 -0
  823. package/dist/src/services/publicFileShares/index.mjs +188 -0
  824. package/dist/src/services/publicFileShares/index.mjs.map +1 -0
  825. package/dist/src/services/remoteAccess/index.cjs +567 -0
  826. package/dist/src/services/remoteAccess/index.cjs.map +1 -0
  827. package/dist/src/services/remoteAccess/index.d.mts +121 -0
  828. package/dist/src/services/remoteAccess/index.d.mts.map +1 -0
  829. package/dist/src/services/remoteAccess/index.mjs +567 -0
  830. package/dist/src/services/remoteAccess/index.mjs.map +1 -0
  831. package/dist/src/services/remoteAccessSettings/index.cjs +151 -0
  832. package/dist/src/services/remoteAccessSettings/index.cjs.map +1 -0
  833. package/dist/src/services/remoteAccessSettings/index.mjs +149 -0
  834. package/dist/src/services/remoteAccessSettings/index.mjs.map +1 -0
  835. package/dist/src/services/remoteAccessStore/index.cjs +197 -0
  836. package/dist/src/services/remoteAccessStore/index.cjs.map +1 -0
  837. package/dist/src/services/remoteAccessStore/index.mjs +192 -0
  838. package/dist/src/services/remoteAccessStore/index.mjs.map +1 -0
  839. package/dist/src/services/remoteGuardPolicy/index.cjs +200 -0
  840. package/dist/src/services/remoteGuardPolicy/index.cjs.map +1 -0
  841. package/dist/src/services/remoteGuardPolicy/index.d.mts +7 -0
  842. package/dist/src/services/remoteGuardPolicy/index.d.mts.map +1 -0
  843. package/dist/src/services/remoteGuardPolicy/index.mjs +196 -0
  844. package/dist/src/services/remoteGuardPolicy/index.mjs.map +1 -0
  845. package/dist/src/services/requestReceipts/index.cjs +167 -0
  846. package/dist/src/services/requestReceipts/index.cjs.map +1 -0
  847. package/dist/src/services/requestReceipts/index.d.mts +11 -0
  848. package/dist/src/services/requestReceipts/index.d.mts.map +1 -0
  849. package/dist/src/services/requestReceipts/index.mjs +167 -0
  850. package/dist/src/services/requestReceipts/index.mjs.map +1 -0
  851. package/dist/src/services/rpcTranscript/index.cjs +633 -0
  852. package/dist/src/services/rpcTranscript/index.cjs.map +1 -0
  853. package/dist/src/services/rpcTranscript/index.d.mts +50 -0
  854. package/dist/src/services/rpcTranscript/index.d.mts.map +1 -0
  855. package/dist/src/services/rpcTranscript/index.mjs +632 -0
  856. package/dist/src/services/rpcTranscript/index.mjs.map +1 -0
  857. package/dist/src/services/serverFacet/index.cjs +197 -0
  858. package/dist/src/services/serverFacet/index.cjs.map +1 -0
  859. package/dist/src/services/serverFacet/index.d.mts +31 -0
  860. package/dist/src/services/serverFacet/index.d.mts.map +1 -0
  861. package/dist/src/services/serverFacet/index.mjs +197 -0
  862. package/dist/src/services/serverFacet/index.mjs.map +1 -0
  863. package/dist/src/services/sessionAttachments/index.cjs +111 -0
  864. package/dist/src/services/sessionAttachments/index.cjs.map +1 -0
  865. package/dist/src/services/sessionAttachments/index.d.mts +11 -0
  866. package/dist/src/services/sessionAttachments/index.d.mts.map +1 -0
  867. package/dist/src/services/sessionAttachments/index.mjs +107 -0
  868. package/dist/src/services/sessionAttachments/index.mjs.map +1 -0
  869. package/dist/src/services/sessionGitStatus/index.cjs +46 -0
  870. package/dist/src/services/sessionGitStatus/index.cjs.map +1 -0
  871. package/dist/src/services/sessionGitStatus/index.mjs +46 -0
  872. package/dist/src/services/sessionGitStatus/index.mjs.map +1 -0
  873. package/dist/src/services/sessionGitStatus/type.d.mts +8 -0
  874. package/dist/src/services/sessionGitStatus/type.d.mts.map +1 -0
  875. package/dist/src/services/sessionMcpActivity/index.cjs +115 -0
  876. package/dist/src/services/sessionMcpActivity/index.cjs.map +1 -0
  877. package/dist/src/services/sessionMcpActivity/index.mjs +111 -0
  878. package/dist/src/services/sessionMcpActivity/index.mjs.map +1 -0
  879. package/dist/src/services/sessionMcpAuthorization/index.cjs +473 -0
  880. package/dist/src/services/sessionMcpAuthorization/index.cjs.map +1 -0
  881. package/dist/src/services/sessionMcpAuthorization/index.d.mts +125 -0
  882. package/dist/src/services/sessionMcpAuthorization/index.d.mts.map +1 -0
  883. package/dist/src/services/sessionMcpAuthorization/index.mjs +469 -0
  884. package/dist/src/services/sessionMcpAuthorization/index.mjs.map +1 -0
  885. package/dist/src/services/sessionMcpConversations/index.cjs +217 -0
  886. package/dist/src/services/sessionMcpConversations/index.cjs.map +1 -0
  887. package/dist/src/services/sessionMcpConversations/index.mjs +212 -0
  888. package/dist/src/services/sessionMcpConversations/index.mjs.map +1 -0
  889. package/dist/src/services/sessionMcpRegistrationStore/index.cjs +86 -0
  890. package/dist/src/services/sessionMcpRegistrationStore/index.cjs.map +1 -0
  891. package/dist/src/services/sessionMcpRegistrationStore/index.mjs +83 -0
  892. package/dist/src/services/sessionMcpRegistrationStore/index.mjs.map +1 -0
  893. package/dist/src/services/sessionPresentation/index.cjs +120 -0
  894. package/dist/src/services/sessionPresentation/index.cjs.map +1 -0
  895. package/dist/src/services/sessionPresentation/index.mjs +120 -0
  896. package/dist/src/services/sessionPresentation/index.mjs.map +1 -0
  897. package/dist/src/services/sqliteSessionHistory/index.cjs +97 -0
  898. package/dist/src/services/sqliteSessionHistory/index.cjs.map +1 -0
  899. package/dist/src/services/sqliteSessionHistory/index.d.mts +28 -0
  900. package/dist/src/services/sqliteSessionHistory/index.d.mts.map +1 -0
  901. package/dist/src/services/sqliteSessionHistory/index.mjs +92 -0
  902. package/dist/src/services/sqliteSessionHistory/index.mjs.map +1 -0
  903. package/dist/src/services/sqliteTranscriptReader/index.cjs +67 -0
  904. package/dist/src/services/sqliteTranscriptReader/index.cjs.map +1 -0
  905. package/dist/src/services/sqliteTranscriptReader/index.d.mts +14 -0
  906. package/dist/src/services/sqliteTranscriptReader/index.d.mts.map +1 -0
  907. package/dist/src/services/sqliteTranscriptReader/index.mjs +65 -0
  908. package/dist/src/services/sqliteTranscriptReader/index.mjs.map +1 -0
  909. package/dist/src/services/toolCost/index.cjs +47 -0
  910. package/dist/src/services/toolCost/index.cjs.map +1 -0
  911. package/dist/src/services/toolCost/index.d.mts +38 -0
  912. package/dist/src/services/toolCost/index.d.mts.map +1 -0
  913. package/dist/src/services/toolCost/index.mjs +46 -0
  914. package/dist/src/services/toolCost/index.mjs.map +1 -0
  915. package/dist/src/services/toolOverrides/index.cjs +45 -0
  916. package/dist/src/services/toolOverrides/index.cjs.map +1 -0
  917. package/dist/src/services/toolOverrides/index.d.mts +6 -0
  918. package/dist/src/services/toolOverrides/index.d.mts.map +1 -0
  919. package/dist/src/services/toolOverrides/index.mjs +45 -0
  920. package/dist/src/services/toolOverrides/index.mjs.map +1 -0
  921. package/dist/src/services/toolPrompt/index.cjs +13 -0
  922. package/dist/src/services/toolPrompt/index.cjs.map +1 -0
  923. package/dist/src/services/toolPrompt/index.mjs +13 -0
  924. package/dist/src/services/toolPrompt/index.mjs.map +1 -0
  925. package/dist/src/services/toolSurface/index.cjs +134 -0
  926. package/dist/src/services/toolSurface/index.cjs.map +1 -0
  927. package/dist/src/services/toolSurface/index.d.mts +19 -0
  928. package/dist/src/services/toolSurface/index.d.mts.map +1 -0
  929. package/dist/src/services/toolSurface/index.mjs +134 -0
  930. package/dist/src/services/toolSurface/index.mjs.map +1 -0
  931. package/dist/src/services/traceContext/index.cjs +13 -0
  932. package/dist/src/services/traceContext/index.cjs.map +1 -0
  933. package/dist/src/services/traceContext/index.mjs +13 -0
  934. package/dist/src/services/traceContext/index.mjs.map +1 -0
  935. package/dist/src/services/transcriptPages/index.cjs +117 -0
  936. package/dist/src/services/transcriptPages/index.cjs.map +1 -0
  937. package/dist/src/services/transcriptPages/index.mjs +115 -0
  938. package/dist/src/services/transcriptPages/index.mjs.map +1 -0
  939. package/dist/src/services/tunnelOutput/index.cjs +58 -0
  940. package/dist/src/services/tunnelOutput/index.cjs.map +1 -0
  941. package/dist/src/services/tunnelOutput/index.mjs +54 -0
  942. package/dist/src/services/tunnelOutput/index.mjs.map +1 -0
  943. package/dist/src/services/tunnelProcess/index.cjs +487 -0
  944. package/dist/src/services/tunnelProcess/index.cjs.map +1 -0
  945. package/dist/src/services/tunnelProcess/index.mjs +481 -0
  946. package/dist/src/services/tunnelProcess/index.mjs.map +1 -0
  947. package/dist/src/services/voiceReloadHandoff/index.cjs +136 -0
  948. package/dist/src/services/voiceReloadHandoff/index.cjs.map +1 -0
  949. package/dist/src/services/voiceReloadHandoff/index.d.mts +34 -0
  950. package/dist/src/services/voiceReloadHandoff/index.d.mts.map +1 -0
  951. package/dist/src/services/voiceReloadHandoff/index.mjs +135 -0
  952. package/dist/src/services/voiceReloadHandoff/index.mjs.map +1 -0
  953. package/dist/src/services/voiceToolsContract/index.cjs +26 -0
  954. package/dist/src/services/voiceToolsContract/index.cjs.map +1 -0
  955. package/dist/src/services/voiceToolsContract/index.d.mts +76 -0
  956. package/dist/src/services/voiceToolsContract/index.d.mts.map +1 -0
  957. package/dist/src/services/voiceToolsContract/index.mjs +24 -0
  958. package/dist/src/services/voiceToolsContract/index.mjs.map +1 -0
  959. package/dist/src/services/webauthn/index.cjs +262 -0
  960. package/dist/src/services/webauthn/index.cjs.map +1 -0
  961. package/dist/src/services/webauthn/index.d.mts +39 -0
  962. package/dist/src/services/webauthn/index.d.mts.map +1 -0
  963. package/dist/src/services/webauthn/index.mjs +262 -0
  964. package/dist/src/services/webauthn/index.mjs.map +1 -0
  965. package/dist/src/services/webauthnPolicy/index.cjs +174 -0
  966. package/dist/src/services/webauthnPolicy/index.cjs.map +1 -0
  967. package/dist/src/services/webauthnPolicy/index.d.mts +41 -0
  968. package/dist/src/services/webauthnPolicy/index.d.mts.map +1 -0
  969. package/dist/src/services/webauthnPolicy/index.mjs +167 -0
  970. package/dist/src/services/webauthnPolicy/index.mjs.map +1 -0
  971. package/dist/src/services/workspaceRegistry/index.cjs +187 -0
  972. package/dist/src/services/workspaceRegistry/index.cjs.map +1 -0
  973. package/dist/src/services/workspaceRegistry/index.d.mts +47 -0
  974. package/dist/src/services/workspaceRegistry/index.d.mts.map +1 -0
  975. package/dist/src/services/workspaceRegistry/index.mjs +179 -0
  976. package/dist/src/services/workspaceRegistry/index.mjs.map +1 -0
  977. package/dist/src/systems/child/adapters/headlessChildSessionService.cjs +466 -0
  978. package/dist/src/systems/child/adapters/headlessChildSessionService.cjs.map +1 -0
  979. package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts +36 -0
  980. package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts.map +1 -0
  981. package/dist/src/systems/child/adapters/headlessChildSessionService.mjs +457 -0
  982. package/dist/src/systems/child/adapters/headlessChildSessionService.mjs.map +1 -0
  983. package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs +28 -0
  984. package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs.map +1 -0
  985. package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs +25 -0
  986. package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs.map +1 -0
  987. package/dist/src/systems/child/services/childSession/index.cjs +219 -0
  988. package/dist/src/systems/child/services/childSession/index.cjs.map +1 -0
  989. package/dist/src/systems/child/services/childSession/index.d.mts +14 -0
  990. package/dist/src/systems/child/services/childSession/index.d.mts.map +1 -0
  991. package/dist/src/systems/child/services/childSession/index.mjs +219 -0
  992. package/dist/src/systems/child/services/childSession/index.mjs.map +1 -0
  993. package/dist/src/systems/child/types/childSession.cjs +21 -0
  994. package/dist/src/systems/child/types/childSession.cjs.map +1 -0
  995. package/dist/src/systems/child/types/childSession.d.mts +182 -0
  996. package/dist/src/systems/child/types/childSession.d.mts.map +1 -0
  997. package/dist/src/systems/child/types/childSession.mjs +17 -0
  998. package/dist/src/systems/child/types/childSession.mjs.map +1 -0
  999. package/dist/src/systems/main/adapters/headlessHost.cjs +597 -0
  1000. package/dist/src/systems/main/adapters/headlessHost.cjs.map +1 -0
  1001. package/dist/src/systems/main/adapters/headlessHost.d.mts +116 -0
  1002. package/dist/src/systems/main/adapters/headlessHost.d.mts.map +1 -0
  1003. package/dist/src/systems/main/adapters/headlessHost.mjs +595 -0
  1004. package/dist/src/systems/main/adapters/headlessHost.mjs.map +1 -0
  1005. package/dist/src/systems/main/adapters/headlessSessionHost.cjs +1668 -0
  1006. package/dist/src/systems/main/adapters/headlessSessionHost.cjs.map +1 -0
  1007. package/dist/src/systems/main/adapters/headlessSessionHost.d.mts +20 -0
  1008. package/dist/src/systems/main/adapters/headlessSessionHost.d.mts.map +1 -0
  1009. package/dist/src/systems/main/adapters/headlessSessionHost.mjs +1663 -0
  1010. package/dist/src/systems/main/adapters/headlessSessionHost.mjs.map +1 -0
  1011. package/dist/src/systems/main/types/headlessHost.d.mts +37 -0
  1012. package/dist/src/systems/main/types/headlessHost.d.mts.map +1 -0
  1013. package/dist/src/testing/pi/extensionScenarios.cjs +73 -0
  1014. package/dist/src/testing/pi/extensionScenarios.cjs.map +1 -0
  1015. package/dist/src/testing/pi/extensionScenarios.d.mts +41 -0
  1016. package/dist/src/testing/pi/extensionScenarios.d.mts.map +1 -0
  1017. package/dist/src/testing/pi/extensionScenarios.mjs +73 -0
  1018. package/dist/src/testing/pi/extensionScenarios.mjs.map +1 -0
  1019. package/dist/src/testing/pi/testHost.cjs +399 -0
  1020. package/dist/src/testing/pi/testHost.cjs.map +1 -0
  1021. package/dist/src/testing/pi/testHost.d.mts +160 -0
  1022. package/dist/src/testing/pi/testHost.d.mts.map +1 -0
  1023. package/dist/src/testing/pi/testHost.mjs +399 -0
  1024. package/dist/src/testing/pi/testHost.mjs.map +1 -0
  1025. package/dist/src/types/config.d.mts +20 -0
  1026. package/dist/src/types/config.d.mts.map +1 -0
  1027. package/dist/src/types/kernel.d.mts +69 -0
  1028. package/dist/src/types/kernel.d.mts.map +1 -0
  1029. package/dist/src/types/remote.d.mts +152 -0
  1030. package/dist/src/types/remote.d.mts.map +1 -0
  1031. package/dist/src/types/server/directHarnessRuntime.d.mts +526 -0
  1032. package/dist/src/types/server/directHarnessRuntime.d.mts.map +1 -0
  1033. package/dist/src/types/server/session.d.mts +5 -0
  1034. package/dist/src/types/server/session.d.mts.map +1 -0
  1035. package/dist/src/types/server/sessionToolSurface.d.mts +44 -0
  1036. package/dist/src/types/server/sessionToolSurface.d.mts.map +1 -0
  1037. package/dist/src/web/models/globalStore.cjs +23 -0
  1038. package/dist/src/web/models/globalStore.cjs.map +1 -0
  1039. package/dist/src/web/models/globalStore.d.mts +6 -0
  1040. package/dist/src/web/models/globalStore.d.mts.map +1 -0
  1041. package/dist/src/web/models/globalStore.mjs +23 -0
  1042. package/dist/src/web/models/globalStore.mjs.map +1 -0
  1043. package/dist/src/web/models/sessionStore.cjs +56 -0
  1044. package/dist/src/web/models/sessionStore.cjs.map +1 -0
  1045. package/dist/src/web/models/sessionStore.d.mts +14 -0
  1046. package/dist/src/web/models/sessionStore.d.mts.map +1 -0
  1047. package/dist/src/web/models/sessionStore.mjs +56 -0
  1048. package/dist/src/web/models/sessionStore.mjs.map +1 -0
  1049. package/dist/src/web/models/workspaceStore.cjs +50 -0
  1050. package/dist/src/web/models/workspaceStore.cjs.map +1 -0
  1051. package/dist/src/web/models/workspaceStore.d.mts +18 -0
  1052. package/dist/src/web/models/workspaceStore.d.mts.map +1 -0
  1053. package/dist/src/web/models/workspaceStore.mjs +50 -0
  1054. package/dist/src/web/models/workspaceStore.mjs.map +1 -0
  1055. package/dist/src/web/schemas/bundleAssetPolicy.cjs +20 -0
  1056. package/dist/src/web/schemas/bundleAssetPolicy.cjs.map +1 -0
  1057. package/dist/src/web/schemas/bundleAssetPolicy.d.mts +10 -0
  1058. package/dist/src/web/schemas/bundleAssetPolicy.d.mts.map +1 -0
  1059. package/dist/src/web/schemas/bundleAssetPolicy.mjs +18 -0
  1060. package/dist/src/web/schemas/bundleAssetPolicy.mjs.map +1 -0
  1061. package/dist/src/web/schemas/template.cjs +35 -0
  1062. package/dist/src/web/schemas/template.cjs.map +1 -0
  1063. package/dist/src/web/schemas/template.d.mts +9 -0
  1064. package/dist/src/web/schemas/template.d.mts.map +1 -0
  1065. package/dist/src/web/schemas/template.mjs +34 -0
  1066. package/dist/src/web/schemas/template.mjs.map +1 -0
  1067. package/dist/src/web/services/apiClient/index.cjs +156 -0
  1068. package/dist/src/web/services/apiClient/index.cjs.map +1 -0
  1069. package/dist/src/web/services/apiClient/index.d.mts +152 -0
  1070. package/dist/src/web/services/apiClient/index.d.mts.map +1 -0
  1071. package/dist/src/web/services/apiClient/index.mjs +154 -0
  1072. package/dist/src/web/services/apiClient/index.mjs.map +1 -0
  1073. package/dist/src/web/services/apiPaths/index.cjs +83 -0
  1074. package/dist/src/web/services/apiPaths/index.cjs.map +1 -0
  1075. package/dist/src/web/services/apiPaths/index.d.mts +81 -0
  1076. package/dist/src/web/services/apiPaths/index.d.mts.map +1 -0
  1077. package/dist/src/web/services/apiPaths/index.mjs +78 -0
  1078. package/dist/src/web/services/apiPaths/index.mjs.map +1 -0
  1079. package/dist/src/web/services/apiRoutes/index.cjs +47 -0
  1080. package/dist/src/web/services/apiRoutes/index.cjs.map +1 -0
  1081. package/dist/src/web/services/apiRoutes/index.d.mts +21 -0
  1082. package/dist/src/web/services/apiRoutes/index.d.mts.map +1 -0
  1083. package/dist/src/web/services/apiRoutes/index.mjs +43 -0
  1084. package/dist/src/web/services/apiRoutes/index.mjs.map +1 -0
  1085. package/dist/src/web/services/mcpWidget.cjs +9 -0
  1086. package/dist/src/web/services/mcpWidget.cjs.map +1 -0
  1087. package/dist/src/web/services/mcpWidget.d.mts +6 -0
  1088. package/dist/src/web/services/mcpWidget.d.mts.map +1 -0
  1089. package/dist/src/web/services/mcpWidget.mjs +9 -0
  1090. package/dist/src/web/services/mcpWidget.mjs.map +1 -0
  1091. package/dist/src/web/services/sessionRegistry/index.cjs +70 -0
  1092. package/dist/src/web/services/sessionRegistry/index.cjs.map +1 -0
  1093. package/dist/src/web/services/sessionRegistry/index.d.mts +29 -0
  1094. package/dist/src/web/services/sessionRegistry/index.d.mts.map +1 -0
  1095. package/dist/src/web/services/sessionRegistry/index.mjs +66 -0
  1096. package/dist/src/web/services/sessionRegistry/index.mjs.map +1 -0
  1097. package/dist/src/web/services/testing/channels.cjs +11 -0
  1098. package/dist/src/web/services/testing/channels.cjs.map +1 -0
  1099. package/dist/src/web/services/testing/channels.d.mts +8 -0
  1100. package/dist/src/web/services/testing/channels.d.mts.map +1 -0
  1101. package/dist/src/web/services/testing/channels.mjs +11 -0
  1102. package/dist/src/web/services/testing/channels.mjs.map +1 -0
  1103. package/dist/src/web/services/testing/index.cjs +27 -0
  1104. package/dist/src/web/services/testing/index.cjs.map +1 -0
  1105. package/dist/src/web/services/testing/index.d.mts +31 -0
  1106. package/dist/src/web/services/testing/index.d.mts.map +1 -0
  1107. package/dist/src/web/services/testing/index.mjs +27 -0
  1108. package/dist/src/web/services/testing/index.mjs.map +1 -0
  1109. package/dist/src/web/services/testing/rpcStub.cjs +58 -0
  1110. package/dist/src/web/services/testing/rpcStub.cjs.map +1 -0
  1111. package/dist/src/web/services/testing/rpcStub.d.mts +37 -0
  1112. package/dist/src/web/services/testing/rpcStub.d.mts.map +1 -0
  1113. package/dist/src/web/services/testing/rpcStub.mjs +58 -0
  1114. package/dist/src/web/services/testing/rpcStub.mjs.map +1 -0
  1115. package/dist/src/web/services/testing/slotProps.cjs +97 -0
  1116. package/dist/src/web/services/testing/slotProps.cjs.map +1 -0
  1117. package/dist/src/web/services/testing/slotProps.d.mts +69 -0
  1118. package/dist/src/web/services/testing/slotProps.d.mts.map +1 -0
  1119. package/dist/src/web/services/testing/slotProps.mjs +96 -0
  1120. package/dist/src/web/services/testing/slotProps.mjs.map +1 -0
  1121. package/dist/src/web/services/testing/templateRail.cjs +156 -0
  1122. package/dist/src/web/services/testing/templateRail.cjs.map +1 -0
  1123. package/dist/src/web/services/testing/templateRail.d.mts +32 -0
  1124. package/dist/src/web/services/testing/templateRail.d.mts.map +1 -0
  1125. package/dist/src/web/services/testing/templateRail.mjs +154 -0
  1126. package/dist/src/web/services/testing/templateRail.mjs.map +1 -0
  1127. package/dist/src/web/services/toolResult/index.cjs +30 -0
  1128. package/dist/src/web/services/toolResult/index.cjs.map +1 -0
  1129. package/dist/src/web/services/toolResult/index.d.mts +14 -0
  1130. package/dist/src/web/services/toolResult/index.d.mts.map +1 -0
  1131. package/dist/src/web/services/toolResult/index.mjs +29 -0
  1132. package/dist/src/web/services/toolResult/index.mjs.map +1 -0
  1133. package/dist/src/web/types/extensionFile.d.mts +62 -0
  1134. package/dist/src/web/types/extensionFile.d.mts.map +1 -0
  1135. package/dist/src/web/types/mcpWidget.d.mts +14 -0
  1136. package/dist/src/web/types/mcpWidget.d.mts.map +1 -0
  1137. package/dist/src/web/types/modelContext.d.mts +43 -0
  1138. package/dist/src/web/types/modelContext.d.mts.map +1 -0
  1139. package/dist/src/web/types/nativeTemplate.d.mts +29 -0
  1140. package/dist/src/web/types/nativeTemplate.d.mts.map +1 -0
  1141. package/dist/src/web/types/sessionRegistry.d.mts +46 -0
  1142. package/dist/src/web/types/sessionRegistry.d.mts.map +1 -0
  1143. package/dist/src/web/types/template.d.mts +135 -0
  1144. package/dist/src/web/types/template.d.mts.map +1 -0
  1145. package/dist/src/web/types/webPlugin.d.mts +915 -0
  1146. package/dist/src/web/types/webPlugin.d.mts.map +1 -0
  1147. package/dist/terminalPiChildSessionService.cjs +324 -0
  1148. package/dist/terminalPiChildSessionService.cjs.map +1 -0
  1149. package/dist/terminalPiChildSessionService.d.mts +46 -0
  1150. package/dist/terminalPiChildSessionService.d.mts.map +1 -0
  1151. package/dist/terminalPiChildSessionService.mjs +318 -0
  1152. package/dist/terminalPiChildSessionService.mjs.map +1 -0
  1153. package/dist/testing.cjs +11 -0
  1154. package/dist/testing.d.mts +6 -0
  1155. package/dist/testing.mjs +6 -0
  1156. package/dist/toolInventory.cjs +136 -0
  1157. package/dist/toolInventory.cjs.map +1 -0
  1158. package/dist/toolInventory.d.mts +66 -0
  1159. package/dist/toolInventory.d.mts.map +1 -0
  1160. package/dist/toolInventory.mjs +133 -0
  1161. package/dist/toolInventory.mjs.map +1 -0
  1162. package/dist/toolNames.cjs +4 -0
  1163. package/dist/toolNames.d.mts +2 -0
  1164. package/dist/toolNames.mjs +2 -0
  1165. package/dist/toolOverrides.cjs +7 -0
  1166. package/dist/toolOverrides.d.mts +3 -0
  1167. package/dist/toolOverrides.mjs +3 -0
  1168. package/dist/toolSurface.cjs +7 -0
  1169. package/dist/toolSurface.d.mts +3 -0
  1170. package/dist/toolSurface.mjs +3 -0
  1171. package/dist/transition.cjs +5 -0
  1172. package/dist/transition.d.cjs +5 -0
  1173. package/dist/transition.d.mts +2 -0
  1174. package/dist/transition.mjs +2 -0
  1175. package/dist/transitionClassifier.cjs +112 -0
  1176. package/dist/transitionClassifier.cjs.map +1 -0
  1177. package/dist/transitionClassifier.d.mts +18 -0
  1178. package/dist/transitionClassifier.d.mts.map +1 -0
  1179. package/dist/transitionClassifier.mjs +111 -0
  1180. package/dist/transitionClassifier.mjs.map +1 -0
  1181. package/dist/transitionCoordinator.cjs +131 -0
  1182. package/dist/transitionCoordinator.cjs.map +1 -0
  1183. package/dist/transitionCoordinator.d.mts +16 -0
  1184. package/dist/transitionCoordinator.d.mts.map +1 -0
  1185. package/dist/transitionCoordinator.mjs +130 -0
  1186. package/dist/transitionCoordinator.mjs.map +1 -0
  1187. package/dist/typesContextApi.cjs +0 -0
  1188. package/dist/typesContextApi.d.mts +79 -0
  1189. package/dist/typesContextApi.d.mts.map +1 -0
  1190. package/dist/typesContextApi.mjs +1 -0
  1191. package/dist/uiHub.cjs +5 -0
  1192. package/dist/uiHub.d.mts +2 -0
  1193. package/dist/uiHub.mjs +2 -0
  1194. package/dist/v3Export.cjs +10 -0
  1195. package/dist/v3Export.cjs.map +1 -0
  1196. package/dist/v3Export.d.mts +35 -0
  1197. package/dist/v3Export.d.mts.map +1 -0
  1198. package/dist/v3Export.mjs +9 -0
  1199. package/dist/v3Export.mjs.map +1 -0
  1200. package/dist/voiceReloadHandoff.cjs +14 -0
  1201. package/dist/voiceReloadHandoff.d.mts +4 -0
  1202. package/dist/voiceReloadHandoff.mjs +4 -0
  1203. package/dist/voiceTools.cjs +56 -0
  1204. package/dist/voiceTools.d.mts +4 -0
  1205. package/dist/voiceTools.mjs +4 -0
  1206. package/dist/web.cjs +65 -0
  1207. package/dist/web.d.mts +20 -0
  1208. package/dist/web.mjs +13 -0
  1209. package/dist/webCompositions.cjs +181 -0
  1210. package/dist/webCompositions.cjs.map +1 -0
  1211. package/dist/webCompositions.d.mts +79 -0
  1212. package/dist/webCompositions.d.mts.map +1 -0
  1213. package/dist/webCompositions.mjs +174 -0
  1214. package/dist/webCompositions.mjs.map +1 -0
  1215. package/dist/webTesting.cjs +14 -0
  1216. package/dist/webTesting.d.mts +6 -0
  1217. package/dist/webTesting.mjs +6 -0
  1218. package/package.json +586 -0
@@ -0,0 +1,2387 @@
1
+ const require_headless = require("../schemas/headless.cjs");
2
+ const require_sqliteSessionStorage = require("../../sqliteSessionStorage.cjs");
3
+ const require_index = require("../services/durableNavigation/index.cjs");
4
+ const require_index$1 = require("../services/transcriptPages/index.cjs");
5
+ const require_index$2 = require("../services/contextUsage/index.cjs");
6
+ const require_index$3 = require("../services/piExtensionHost/index.cjs");
7
+ let node_crypto = require("node:crypto");
8
+ let _earendil_works_pi_durable = require("@earendil-works/pi-durable");
9
+ let _earendil_works_chord_context = require("@earendil-works/chord/context");
10
+ let node_util = require("node:util");
11
+ let _earendil_works_pi_coding_agent = require("@earendil-works/pi-coding-agent");
12
+ let _earendil_works_pi_ai = require("@earendil-works/pi-ai");
13
+ let _earendil_works_pi_ai_utils_transcript = require("@earendil-works/pi-ai/utils/transcript");
14
+ let _earendil_works_pi_durable_env_node = require("@earendil-works/pi-durable/env/node");
15
+ //#region src/server/directHarnessRuntime.ts
16
+ const AGENT_SETTLED_ENTRY_TYPE = "po.agent-settled";
17
+ const LifecycleDoc = (0, _earendil_works_pi_durable.defineDoc)({
18
+ kind: "po.server.lifecycle",
19
+ version: 1,
20
+ scope: "session",
21
+ initial: () => ({ json: "{\"revision\":0,\"paused\":false,\"queue\":[]}" })
22
+ });
23
+ const FastModeDoc = (0, _earendil_works_pi_durable.defineDoc)({
24
+ kind: "po.fast-mode",
25
+ version: 1,
26
+ scope: "session",
27
+ initial: () => ({ enabled: false })
28
+ });
29
+ const AgentLockDoc = (0, _earendil_works_pi_durable.defineDoc)({
30
+ kind: "po.agent-lock",
31
+ version: 1,
32
+ scope: "session",
33
+ initial: () => ({ locked: false })
34
+ });
35
+ const AGENT_LOCKED_ERROR = "The local agent is locked. Unlock it to start a turn.";
36
+ const CODEX_API = "openai-codex-responses";
37
+ const CODEX_PROVIDER = "openai-codex";
38
+ const LabelsDoc = (0, _earendil_works_pi_durable.defineDoc)({
39
+ kind: "po.labels",
40
+ version: 1,
41
+ scope: "session",
42
+ initial: () => ({ labels: {} })
43
+ });
44
+ function nativeId(id) {
45
+ const value = Number(id);
46
+ if (!Number.isSafeInteger(value) || value < 0 || String(value) !== id) throw new Error(`Invalid durable identifier: ${id}`);
47
+ return value;
48
+ }
49
+ function json(value) {
50
+ return JSON.parse(JSON.stringify(value));
51
+ }
52
+ function text(message) {
53
+ if (typeof message === "string") return message;
54
+ if (!("content" in message)) return "summary" in message ? message.summary : "output" in message ? message.output : "";
55
+ return typeof message.content === "string" ? message.content : message.content.map((p) => p.type === "text" ? p.text : "").join("");
56
+ }
57
+ /** Compatibility projection keeps protocol identities strings and retains fork ancestry. */
58
+ async function projectDurableConversationEntries(conversation, context) {
59
+ const records = [];
60
+ let cursor;
61
+ do {
62
+ const page = await conversation.entries({}, 256, cursor, context);
63
+ records.push(...page.items);
64
+ cursor = page.next;
65
+ } while (cursor);
66
+ records.reverse();
67
+ return require_index$1.projectDurableEntries(records);
68
+ }
69
+ /**
70
+ * Runs one prompt and returns the newest assistant text it produced. `hold` keeps the run open
71
+ * across later turns started by intercom delivery: while it resolves true, wait for the lane to
72
+ * go idle and ask again. The returned text is the newest one across all of those turns.
73
+ */
74
+ async function promptForAssistantText(runtime, prompt, hold) {
75
+ const previous = new Set((await runtime.readEntries()).entries.map((e) => e.id));
76
+ await (await runtime.submitInternalMessage(prompt)).settled;
77
+ while (hold && await hold()) await runtime.lane.waitForIdle(_earendil_works_chord_context.BACKGROUND_CONTEXT);
78
+ return (await runtime.readEntries()).entries.toReversed().filter((e) => !previous.has(e.id)).flatMap((e) => e.type === "message" && e.message.role === "assistant" ? [text(e.message).trim()] : [])[0] || void 0;
79
+ }
80
+ async function createDirectHarnessRuntime(options) {
81
+ if (options.initialFastMode !== void 0 && typeof options.initialFastMode !== "boolean") throw new Error("Initial Fast mode must be a boolean.");
82
+ if (options.initialAgentLocked !== void 0 && typeof options.initialAgentLocked !== "boolean") throw new Error("Initial agent lock must be a boolean.");
83
+ const context = options.context ?? _earendil_works_chord_context.BACKGROUND_CONTEXT;
84
+ if (options.storage === "jsonl" || options.legacySessionPath !== void 0) throw new Error("Legacy JSONL direct storage is unsupported; use durable-v1 SQLite");
85
+ if (options.session && !options.durableStorage) throw new Error("A durable Session injection requires its raw durableStorage");
86
+ const storage = options.durableStorage ? {
87
+ storage: options.durableStorage,
88
+ sessionFile: options.sessionPath,
89
+ historyLease: void 0,
90
+ repository: void 0
91
+ } : await require_sqliteSessionStorage.openSqliteSessionStorage(options, context);
92
+ let startupHarness;
93
+ try {
94
+ const registry = (0, _earendil_works_pi_durable.createRegistry)();
95
+ const environment = new _earendil_works_pi_durable_env_node.NodeExecutionEnv({ cwd: options.cwd });
96
+ let disposed = false;
97
+ let quarantined = false;
98
+ let failure;
99
+ let preparationFailure;
100
+ const terminatingCalls = /* @__PURE__ */ new Set();
101
+ let fastMode = false;
102
+ let agentLocked = false;
103
+ const assertUnlocked = () => {
104
+ if (agentLocked) throw new Error(AGENT_LOCKED_ERROR);
105
+ };
106
+ let resources = options.resources ?? {};
107
+ let tools = options.tools ?? [];
108
+ let activeNames = new Set(options.activeToolNames ?? tools.map((t) => t.name));
109
+ let settings = {
110
+ stream: options.streamOptions,
111
+ retry: options.retry,
112
+ compaction: options.compaction,
113
+ toolExecution: options.toolExecution,
114
+ steeringMode: options.steeringMode,
115
+ followUpMode: options.followUpMode
116
+ };
117
+ const listeners = /* @__PURE__ */ new Set();
118
+ const eventListeners = /* @__PURE__ */ new Set();
119
+ const checkpointBoundaries = /* @__PURE__ */ new Set();
120
+ const emit = (frame) => {
121
+ for (const listener of listeners) try {
122
+ listener(frame);
123
+ } catch (error) {
124
+ for (const other of listeners) if (other !== listener) other({
125
+ type: "handler_error",
126
+ error: String(error)
127
+ });
128
+ }
129
+ };
130
+ const writable = async (work) => {
131
+ if (disposed || quarantined) throw new Error("Direct harness writes are unavailable", { cause: failure });
132
+ try {
133
+ await storage.historyLease?.assertQuiescent();
134
+ return await work();
135
+ } catch (error) {
136
+ const code = typeof error === "object" && error !== null && "code" in error ? error.code : void 0;
137
+ if (typeof code === "string" && [
138
+ "EACCES",
139
+ "EBUSY",
140
+ "EIO",
141
+ "EMFILE",
142
+ "ENFILE",
143
+ "ENOSPC",
144
+ "EPERM",
145
+ "EROFS"
146
+ ].includes(code)) {
147
+ quarantined = true;
148
+ failure = error;
149
+ emit({
150
+ type: "error",
151
+ code: "storage_quarantined",
152
+ error: String(error)
153
+ });
154
+ }
155
+ throw error;
156
+ }
157
+ };
158
+ let sourceModels;
159
+ if (options.models) sourceModels = options.models;
160
+ else {
161
+ if (!options.providers?.length) throw new Error("Direct harness requires Models or a Provider");
162
+ sourceModels = (0, _earendil_works_pi_ai.createModels)(options.credentials ? { credentials: options.credentials } : void 0);
163
+ }
164
+ for (const provider of options.providers ?? []) {
165
+ const mutable = sourceModels;
166
+ const register = mutable.setProvider?.bind(sourceModels) ?? mutable.registerNativeProvider?.bind(sourceModels);
167
+ if (!register) throw new Error("Models registry cannot register providers");
168
+ register(provider);
169
+ }
170
+ const models = new Proxy(sourceModels, { get(target, key) {
171
+ const value = Reflect.get(target, key, target);
172
+ if (typeof value !== "function") return value;
173
+ if (![
174
+ "stream",
175
+ "complete",
176
+ "streamSimple",
177
+ "completeSimple",
178
+ "streamDeferred",
179
+ "fetchDeferred"
180
+ ].includes(String(key))) return value.bind(target);
181
+ return (...args) => {
182
+ if (disposed || quarantined || preparationFailure) throw new Error("Model dispatch unavailable", { cause: preparationFailure });
183
+ options.guardModelRequest?.();
184
+ const request = args[1];
185
+ if (!["complete", "completeSimple"].includes(String(key)) && request?.tools?.some((t) => !activeNames.has(t.name))) throw new Error("Model request contains disabled tools");
186
+ const requestOptions = args[2];
187
+ const usePriority = fastMode && args[0].api === CODEX_API && args[0].provider === CODEX_PROVIDER;
188
+ const originalOnPayload = requestOptions?.onPayload;
189
+ args[2] = {
190
+ ...requestOptions,
191
+ sessionId: key === "complete" ? requestOptions?.sessionId ?? sessionId : sessionId,
192
+ ...usePriority ? { serviceTier: "priority" } : {},
193
+ onPayload: async (payload, model) => {
194
+ options.guardModelRequest?.();
195
+ const original = typeof originalOnPayload === "function" ? await originalOnPayload(payload, model) : void 0;
196
+ const transformed = original === void 0 ? payload : original;
197
+ const patch = await options.beforePayload?.({
198
+ payload: transformed,
199
+ model
200
+ }, context);
201
+ const finalPayload = patch === void 0 ? transformed : patch.payload;
202
+ if (!usePriority) return finalPayload;
203
+ if (typeof finalPayload !== "object" || finalPayload === null || Array.isArray(finalPayload)) throw new Error("Invalid Codex request payload");
204
+ return {
205
+ ...finalPayload,
206
+ service_tier: "priority"
207
+ };
208
+ }
209
+ };
210
+ const dispatched = Reflect.apply(value, target, args);
211
+ if (![
212
+ "stream",
213
+ "streamSimple",
214
+ "fetchDeferred"
215
+ ].includes(String(key))) return dispatched;
216
+ const source = dispatched;
217
+ const output = (0, _earendil_works_pi_ai.createAssistantMessageEventStream)();
218
+ const requestedModel = args[0];
219
+ const signal = args[2].signal;
220
+ let ended = false;
221
+ let current = {
222
+ role: "assistant",
223
+ content: [],
224
+ api: requestedModel.api,
225
+ provider: requestedModel.provider,
226
+ model: requestedModel.id,
227
+ timestamp: Date.now(),
228
+ stopReason: "pending",
229
+ usage: {
230
+ input: 0,
231
+ output: 0,
232
+ cacheRead: 0,
233
+ cacheWrite: 0,
234
+ totalTokens: 0,
235
+ cost: {
236
+ input: 0,
237
+ output: 0,
238
+ cacheRead: 0,
239
+ cacheWrite: 0,
240
+ total: 0
241
+ }
242
+ }
243
+ };
244
+ const cancel = () => {
245
+ if (ended) return;
246
+ ended = true;
247
+ const cancelled = {
248
+ ...current,
249
+ stopReason: "aborted",
250
+ errorMessage: "Agent request aborted"
251
+ };
252
+ output.push({
253
+ type: "error",
254
+ reason: "aborted",
255
+ error: cancelled
256
+ });
257
+ output.end();
258
+ };
259
+ signal?.addEventListener("abort", cancel, { once: true });
260
+ if (signal?.aborted) cancel();
261
+ (async () => {
262
+ try {
263
+ for await (const event of source) {
264
+ if (ended) break;
265
+ if ("partial" in event) current = event.partial;
266
+ output.push(event);
267
+ }
268
+ if (!ended) {
269
+ ended = true;
270
+ output.end(await source.result());
271
+ }
272
+ } catch (error) {
273
+ if (!ended) {
274
+ ended = true;
275
+ const failed = {
276
+ ...current,
277
+ stopReason: "error",
278
+ errorMessage: String(error)
279
+ };
280
+ output.push({
281
+ type: "error",
282
+ reason: "error",
283
+ error: failed
284
+ });
285
+ output.end();
286
+ }
287
+ } finally {
288
+ signal?.removeEventListener("abort", cancel);
289
+ }
290
+ })();
291
+ return output;
292
+ };
293
+ } });
294
+ const resolveToolContext = async (ctx) => typeof options.toolContext === "function" ? options.toolContext(ctx) : options.toolContext;
295
+ const nativeTool = (tool) => ({
296
+ name: tool.name,
297
+ description: tool.description,
298
+ parameters: tool.parameters,
299
+ constrainedSampling: tool.constrainedSampling,
300
+ prepareArguments: tool.prepareArguments ? (args) => tool.prepareArguments(args) : void 0,
301
+ replay: tool.replay ?? "unsafe",
302
+ executionMode: tool.executionMode,
303
+ async execute(args, api, ctx) {
304
+ if (!activeNames.has(tool.name)) throw new Error(`Tool '${tool.name}' is no longer active`);
305
+ const pending = tool.execute(api.callId, args, (partial) => {
306
+ for (const part of partial.content) if (part.type === "text") api.output(part.text);
307
+ if (partial.details !== void 0) api.details(json(partial.details), ctx).catch((error) => emit({
308
+ type: "error",
309
+ error: String(error)
310
+ }));
311
+ }, await resolveToolContext(ctx), {
312
+ invocationId: String(api.taskId),
313
+ operationId: String(api.taskId),
314
+ turnId: String(api.taskId),
315
+ getMemo: (name) => api.memo(name, ctx),
316
+ setMemo: async (name, value) => {
317
+ if (value === void 0) throw new Error("Durable invocation memos cannot be deleted");
318
+ await api.memo(name, value, ctx);
319
+ }
320
+ }, ctx);
321
+ const result = await (0, _earendil_works_chord_context.awaitWithContext)(pending, ctx);
322
+ return {
323
+ content: result.content,
324
+ isError: result.isError,
325
+ ...result.details === void 0 ? {} : { details: json(result.details) }
326
+ };
327
+ }
328
+ });
329
+ const install = () => registry.install({
330
+ name: "po.host",
331
+ tools: tools.map(nativeTool),
332
+ sections: [{
333
+ key: "po",
334
+ tag: false,
335
+ async render(_input, ctx) {
336
+ preparationFailure = void 0;
337
+ try {
338
+ return [typeof options.systemPrompt === "function" ? await options.systemPrompt(await resolveToolContext(ctx), ctx) : options.systemPrompt ?? "", options.systemPrompt === void 0 ? require_index$3.formatSkillsForSystemPrompt(resources.skills ?? []) : ""].filter(Boolean).join("\n\n");
339
+ } catch (error) {
340
+ preparationFailure = error;
341
+ throw error;
342
+ }
343
+ }
344
+ }],
345
+ hooks: [
346
+ (0, _earendil_works_pi_durable.hook)(_earendil_works_pi_durable.GenerationTask, {
347
+ async afterTools(_assistant, _results, api, ctx) {
348
+ const lane = conversation;
349
+ if (lane.id !== api.conversationId) return;
350
+ for (const registration of checkpointBoundaries) {
351
+ if (!registration.active || disposed || ctx.abortSignal?.aborted || external) continue;
352
+ let open = true;
353
+ try {
354
+ await registration.callback({
355
+ signal: ctx.abortSignal,
356
+ appendMessage: (message) => commitCheckpointMessage(registration, lane, message, ctx, () => open, api.taskId)
357
+ });
358
+ } finally {
359
+ open = false;
360
+ }
361
+ }
362
+ },
363
+ async beforeRequest(request, api, ctx) {
364
+ assertUnlocked();
365
+ try {
366
+ const live = await api.snapshot(_earendil_works_pi_durable.LiveDoc, api.conversationId, ctx);
367
+ const retained = await api.snapshot(LifecycleDoc, ctx);
368
+ const queue = JSON.parse(retained?.json ?? "{\"queue\":[]}");
369
+ if (live?.run && queue.queue.some((item) => item.operationId !== void 0 && item.submissionId !== void 0 && live.run.inputs.includes(item.submissionId) && item.operationId !== String(live.run.inputs[0]))) throw new Error("Steering target changed before model admission");
370
+ const agent = await conversation.agent(ctx);
371
+ const model = agent.model ? models.getModel(agent.model.provider, agent.model.modelId) : void 0;
372
+ await options.beforeModelRequest?.({
373
+ phase: "turn",
374
+ model,
375
+ prompt: [...request.messages],
376
+ resources
377
+ }, ctx);
378
+ const systemPrompt = (0, _earendil_works_pi_ai_utils_transcript.getCurrentSystemPrompt)(request.messages);
379
+ const contextMessages = options.transformContext ? await restoreCustomContextMessages(request.messages, ctx, await conversation.context(ctx)) : request.messages.filter((message) => message.role !== "system");
380
+ const originalContext = structuredClone(contextMessages);
381
+ const patch = await options.transformContext?.({
382
+ messages: contextMessages,
383
+ systemPrompt
384
+ }, ctx);
385
+ let messages = patch && (patch.systemPrompt !== void 0 && patch.systemPrompt !== systemPrompt || patch.messages !== void 0 && !(0, node_util.isDeepStrictEqual)(patch.messages, originalContext)) ? [{
386
+ role: "system",
387
+ content: patch.systemPrompt ?? systemPrompt,
388
+ timestamp: Date.now(),
389
+ toolsAdded: (0, _earendil_works_pi_ai_utils_transcript.getCurrentTools)(request.messages)
390
+ }, ...(0, _earendil_works_pi_coding_agent.convertToLlm)(patch.messages ?? request.messages.filter((m) => m.role !== "system"))] : [...request.messages];
391
+ if (options.toProviderMessages) messages = await options.toProviderMessages(messages, ctx);
392
+ await options.beforeModelRequest?.({
393
+ phase: "request",
394
+ model,
395
+ resources
396
+ }, ctx);
397
+ return { messages };
398
+ } catch (error) {
399
+ preparationFailure = error;
400
+ throw error;
401
+ }
402
+ }
403
+ }),
404
+ (0, _earendil_works_pi_durable.hook)(_earendil_works_pi_durable.ToolTask, {
405
+ async beforeTool(call, _api, ctx) {
406
+ const patch = await options.beforeTool?.({
407
+ toolCallId: call.id,
408
+ toolName: call.name,
409
+ args: call.arguments
410
+ }, ctx);
411
+ if (patch?.block?.terminate) terminatingCalls.add(call.id);
412
+ return patch ? {
413
+ arguments: patch.args,
414
+ block: patch.block?.reason
415
+ } : void 0;
416
+ },
417
+ async afterTool(call, result, _api, ctx) {
418
+ const patch = await options.afterTool?.({
419
+ toolCallId: call.id,
420
+ toolName: call.name,
421
+ args: call.arguments,
422
+ content: result.content ?? [],
423
+ details: result.details,
424
+ isError: result.isError ?? false,
425
+ usage: result.usage
426
+ }, ctx);
427
+ return patch ? {
428
+ ...result,
429
+ ...patch,
430
+ control: patch.terminate || terminatingCalls.delete(call.id) ? {
431
+ ...result.control,
432
+ terminate: true
433
+ } : result.control
434
+ } : terminatingCalls.delete(call.id) ? {
435
+ ...result,
436
+ control: {
437
+ ...result.control,
438
+ terminate: true
439
+ }
440
+ } : void 0;
441
+ }
442
+ }),
443
+ (0, _earendil_works_pi_durable.hook)(_earendil_works_pi_durable.CompactionTask, { async beforeCompact(input, _api, ctx) {
444
+ if (!options.beforeCompaction) return;
445
+ const entries = require_index$1.projectDurableEntries(input.entries);
446
+ const patch = await options.beforeCompaction({
447
+ reason: input.reason,
448
+ customInstructions: input.instructions,
449
+ preparation: {
450
+ entries,
451
+ messages: [...input.messages],
452
+ tokensBefore: 0,
453
+ retainedTail: [],
454
+ firstKeptEntryId: String(input.firstKept),
455
+ messagesToSummarize: [...input.messages],
456
+ turnPrefixMessages: [],
457
+ isSplitTurn: false,
458
+ fileOps: {
459
+ read: /* @__PURE__ */ new Set(),
460
+ written: /* @__PURE__ */ new Set(),
461
+ edited: /* @__PURE__ */ new Set()
462
+ },
463
+ settings: {
464
+ enabled: options.compaction?.enabled ?? true,
465
+ reserveTokens: options.compaction?.reserveTokens ?? 16384,
466
+ keepRecentTokens: options.compaction?.keepRecentTokens ?? 2e4
467
+ }
468
+ }
469
+ }, ctx);
470
+ if (patch?.decline) return { decline: true };
471
+ if (patch?.compaction) return { summary: patch.compaction.summary };
472
+ } })
473
+ ]
474
+ });
475
+ install();
476
+ const harness = await _earendil_works_pi_durable.Harness.open(storage.storage, {
477
+ models,
478
+ registry,
479
+ get settings() {
480
+ return settings;
481
+ },
482
+ env: () => environment,
483
+ onReport: (error) => emit({
484
+ type: "handler_error",
485
+ error: String(error)
486
+ })
487
+ }, context);
488
+ startupHarness = harness;
489
+ const root = await harness.root(context, { agent: {
490
+ cwd: options.cwd,
491
+ ...options.model ?? models.getModels()[0] ? { model: {
492
+ provider: (options.model ?? models.getModels()[0]).provider,
493
+ modelId: (options.model ?? models.getModels()[0]).id
494
+ } } : {},
495
+ ...options.thinkingLevel ? { thinkingLevel: options.thinkingLevel } : {}
496
+ } });
497
+ const activeId = await require_index.initializeDurableNavigation(harness, root.id, context);
498
+ let conversation = await harness.conversation(activeId, context);
499
+ const storedAgent = await harness.snapshot(_earendil_works_pi_durable.AgentDoc, conversation.id, context);
500
+ const initialModel = options.model ?? models.getModels()[0];
501
+ await conversation.configure({
502
+ ...!storedAgent?.model && initialModel ? { model: {
503
+ provider: initialModel.provider,
504
+ modelId: initialModel.id
505
+ } } : {},
506
+ ...!storedAgent?.thinkingLevel && options.thinkingLevel ? { thinkingLevel: options.thinkingLevel } : {},
507
+ tools: tools.filter((t) => activeNames.has(t.name)).map(nativeTool)
508
+ }, context);
509
+ const storedFastMode = await harness.snapshot(FastModeDoc, context);
510
+ fastMode = storedFastMode?.enabled ?? options.initialFastMode ?? false;
511
+ const storedAgentLock = await harness.snapshot(AgentLockDoc, context);
512
+ agentLocked = storedAgentLock?.locked ?? options.initialAgentLocked ?? false;
513
+ const storedIdentity = await harness.snapshot(require_sqliteSessionStorage.SessionIdentityDoc, context);
514
+ const sessionId = storedIdentity?.id || options.sessionId || (0, node_crypto.randomUUID)();
515
+ await writable(() => harness.commit(async (tx) => {
516
+ const identity = await tx.doc(require_sqliteSessionStorage.SessionIdentityDoc);
517
+ if (!identity.id) {
518
+ identity.id = sessionId;
519
+ identity.createdAt = Date.now();
520
+ identity.parentSessionId = options.parentSessionId ?? "";
521
+ }
522
+ if (!storedAgentLock && options.initialAgentLocked !== void 0) (await tx.doc(AgentLockDoc)).locked = agentLocked;
523
+ if (!storedFastMode) {
524
+ (await tx.doc(FastModeDoc)).enabled = fastMode;
525
+ if (options.initialFastMode !== void 0) await tx.appendEntry(conversation.id, {
526
+ kind: "po.fast-mode",
527
+ data: {
528
+ version: 1,
529
+ enabled: fastMode,
530
+ sessionId
531
+ }
532
+ });
533
+ }
534
+ const metadata = await tx.doc(require_sqliteSessionStorage.SessionMetadataDoc);
535
+ metadata.workspaceRoot ||= options.cwd;
536
+ if (options.lane !== void 0) metadata.laneName = options.lane;
537
+ if (!storedIdentity?.id && options.sessionName !== void 0) metadata.name = options.sessionName;
538
+ }, context));
539
+ const laneName = options.lane ?? "main";
540
+ let resolveExited;
541
+ const exited = new Promise((resolve) => {
542
+ resolveExited = resolve;
543
+ });
544
+ const readRecord = async () => JSON.parse((await harness.snapshot(LifecycleDoc, context))?.json ?? "{\"revision\":0,\"paused\":false,\"queue\":[]}");
545
+ const changeRecord = async (change) => writable(() => harness.commit(async (tx) => {
546
+ const doc = await tx.doc(LifecycleDoc);
547
+ const record = JSON.parse(doc.json);
548
+ const result = change(record);
549
+ record.revision++;
550
+ doc.json = JSON.stringify(record);
551
+ return result;
552
+ }, context));
553
+ let userAdmission = false;
554
+ let promptAdmissions = 0;
555
+ let userAdmissionSettled = Promise.resolve();
556
+ let releaseUserAdmission;
557
+ const guardUserAdmission = () => {
558
+ if (userAdmission) throw new Error("A user interruption is already being admitted");
559
+ };
560
+ let external;
561
+ let externalAbort;
562
+ let compactionAdmission = false;
563
+ const nativeExecution = async () => {
564
+ const live = await harness.snapshot(_earendil_works_pi_durable.LiveDoc, conversation.id, context);
565
+ const task = (await harness.inspect(context)).tasks.find((t) => t.record.conversationId === conversation.id && !t.record.background);
566
+ return live?.run ? {
567
+ id: String(live.run.inputs[0]),
568
+ kind: "run",
569
+ status: (await readRecord()).abortOperationId === String(live.run.inputs[0]) ? "aborting" : "open"
570
+ } : task ? {
571
+ id: String(task.record.id),
572
+ kind: "compaction",
573
+ status: task.record.abortRequested ? "aborting" : "open"
574
+ } : null;
575
+ };
576
+ const execution = async () => await nativeExecution() ?? (external ? {
577
+ id: external,
578
+ kind: "navigation",
579
+ status: "open"
580
+ } : settling ? {
581
+ id: "settling",
582
+ kind: "run",
583
+ status: "open"
584
+ } : null);
585
+ const readLifecycle = async () => {
586
+ const record = await readRecord();
587
+ return {
588
+ revision: record.revision,
589
+ paused: record.paused,
590
+ queue: record.queue.filter((item) => item.explicitQueue === true && item.disposition !== "consumed" && item.disposition !== "removed").map(({ explicitQueue: _q, submissionId: _s, conversationId: _c, message: _m, operationId: _o, attempt: _a, ...item }) => item),
591
+ operation: await execution()
592
+ };
593
+ };
594
+ const publish = async () => emit({
595
+ type: "lifecycle_update",
596
+ lifecycle: await readLifecycle()
597
+ });
598
+ let watcher;
599
+ let eventsSettled = Promise.resolve();
600
+ let settling = 0;
601
+ const admittingInternal = /* @__PURE__ */ new Set();
602
+ const reconcilingInternal = /* @__PURE__ */ new Map();
603
+ const internalDelivery = /* @__PURE__ */ new Map();
604
+ const deliveredInputs = /* @__PURE__ */ new Set();
605
+ const nextTurnMessages = [];
606
+ let deferredInternalCount = 0;
607
+ const flushNextTurn = async () => {
608
+ const staged = nextTurnMessages.splice(0);
609
+ for (let index = 0; index < staged.length; index++) {
610
+ const message = staged[index];
611
+ try {
612
+ await writable(() => conversation.submit({
613
+ type: "write",
614
+ requestId: (0, node_crypto.randomUUID)(),
615
+ entry: {
616
+ kind: "po.entry",
617
+ data: json({
618
+ type: "message",
619
+ message
620
+ }),
621
+ model: (0, _earendil_works_pi_coding_agent.convertToLlm)([message])
622
+ }
623
+ }, context));
624
+ } catch (error) {
625
+ nextTurnMessages.unshift(...staged.slice(index));
626
+ throw error;
627
+ }
628
+ }
629
+ };
630
+ let logicalLoopActive = false;
631
+ let lastAssistant;
632
+ let partial;
633
+ let toolResults = [];
634
+ const deliver = async (event, eventContext) => {
635
+ for (const listener of eventListeners) try {
636
+ await listener(event, eventContext);
637
+ } catch (error) {
638
+ emit({
639
+ type: "handler_error",
640
+ error: String(error)
641
+ });
642
+ }
643
+ };
644
+ const attach = async () => {
645
+ if (watcher) await watcher.stop();
646
+ watcher = await (0, _earendil_works_pi_durable.watchEvents)(harness, conversation.id, context);
647
+ let predecessor = watcher.snapshot.entries.at(-1)?.id;
648
+ const customSources = /* @__PURE__ */ new Map();
649
+ const generatedSources = /* @__PURE__ */ new Map();
650
+ const rememberCustom = (raw) => {
651
+ const projected = require_index$1.projectDurableEntries([raw])[0];
652
+ const data = raw.data && typeof raw.data === "object" && !Array.isArray(raw.data) ? raw.data : void 0;
653
+ if (projected?.type === "message" && projected.message.role === "custom" && typeof data?.inputRequestId === "string") customSources.set(data.inputRequestId, projected.message);
654
+ };
655
+ for (const raw of watcher.snapshot.entries) rememberCustom(raw);
656
+ for (const requestId of customSources.keys()) {
657
+ const receipt = await storage.storage.submissionByRequest(conversation.id, requestId, context);
658
+ if (receipt && receipt.status !== "queued") customSources.delete(requestId);
659
+ }
660
+ const generatedEntrySource = async (raw, ctx) => {
661
+ if (generatedSources.has(raw.id)) return generatedSources.get(raw.id);
662
+ let source;
663
+ if (raw.model?.[0]?.role === "user") for (const [requestId, custom] of customSources) {
664
+ const receipt = await storage.storage.submissionByRequest(conversation.id, requestId, ctx);
665
+ if (receipt && "entry" in receipt && receipt.entry === raw.id) {
666
+ source = custom;
667
+ customSources.delete(requestId);
668
+ break;
669
+ }
670
+ }
671
+ generatedSources.set(raw.id, source);
672
+ while (generatedSources.size > 128) generatedSources.delete(generatedSources.keys().next().value);
673
+ return source;
674
+ };
675
+ lastAssistant = void 0;
676
+ partial = void 0;
677
+ toolResults = [];
678
+ watcher.start(async (events, eventContext) => {
679
+ for (const event of events) {
680
+ let mapped;
681
+ if (event.type === "turn_start" || event.type === "run_start") {
682
+ lastAssistant = void 0;
683
+ partial = void 0;
684
+ toolResults = [];
685
+ }
686
+ if (event.type === "message_end" || event.type === "entry_appended") {
687
+ rememberCustom(event.entry);
688
+ const entry = require_index$1.projectDurableEntries([event.entry])[0];
689
+ await generatedEntrySource(event.entry, eventContext);
690
+ if (entry) {
691
+ entry.parentId = predecessor === void 0 ? null : String(predecessor);
692
+ const added = {
693
+ type: "entry_added",
694
+ entry
695
+ };
696
+ emit({
697
+ type: "entry_appended",
698
+ entry
699
+ });
700
+ eventsSettled = eventsSettled.then(() => deliver(added, eventContext));
701
+ }
702
+ predecessor = event.entry.id;
703
+ }
704
+ if ([
705
+ "run_start",
706
+ "run_end",
707
+ "turn_start",
708
+ "compaction_start"
709
+ ].includes(event.type)) mapped = { type: event.type };
710
+ if (event.type === "message_start") {
711
+ if (event.message.role === "assistant") partial = structuredClone(event.message);
712
+ mapped = {
713
+ type: "message_start",
714
+ message: event.message
715
+ };
716
+ }
717
+ if (event.type === "message_end" && event.entry.model?.[0]) {
718
+ const projected = require_index$1.projectDurableEntries([event.entry])[0];
719
+ if (projected?.type === "custom" && projected.customType === "po.internal-context") continue;
720
+ const message = await generatedEntrySource(event.entry, eventContext) ?? (projected?.type === "message" && projected.message.role === "custom" ? projected.message : event.entry.model[0]);
721
+ if (message.role === "assistant") lastAssistant = message;
722
+ if (message.role === "toolResult") toolResults.push(message);
723
+ mapped = {
724
+ type: "message_end",
725
+ message,
726
+ entryId: String(event.entry.id),
727
+ runId: String(conversation.id)
728
+ };
729
+ }
730
+ if (event.type === "tool_execution_start") mapped = {
731
+ ...event,
732
+ type: "tool_start"
733
+ };
734
+ if (event.type === "tool_execution_end") {
735
+ const result = event.entry?.model?.find((m) => m.role === "toolResult");
736
+ mapped = {
737
+ type: "tool_end",
738
+ toolCallId: event.toolCallId,
739
+ toolName: event.toolName,
740
+ result: {
741
+ content: result?.content ?? [],
742
+ details: result?.details === void 0 ? void 0 : json(result.details)
743
+ },
744
+ isError: result?.isError ?? true
745
+ };
746
+ }
747
+ if (event.type === "turn_end" && lastAssistant) {
748
+ mapped = {
749
+ type: "turn_end",
750
+ message: lastAssistant,
751
+ toolResults
752
+ };
753
+ toolResults = [];
754
+ lastAssistant = void 0;
755
+ partial = void 0;
756
+ }
757
+ if (event.type === "message_update" && partial) for (const change of event.changes) {
758
+ if (change.type === "message") partial = structuredClone(change.message);
759
+ else if ("block" in change) partial.content[change.contentIndex] = structuredClone(change.block);
760
+ const block = "contentIndex" in change ? partial.content[change.contentIndex] : void 0;
761
+ if (change.type === "text_delta" && block?.type === "text") block.text += change.delta;
762
+ if (change.type === "thinking_delta" && block?.type === "thinking") block.thinking += change.delta;
763
+ {
764
+ const update = {
765
+ type: "message_update",
766
+ message: structuredClone(partial),
767
+ event: "delta" in change ? {
768
+ type: change.type,
769
+ contentIndex: change.contentIndex,
770
+ delta: change.delta,
771
+ partial: structuredClone(partial)
772
+ } : {
773
+ type: "start",
774
+ partial: structuredClone(partial)
775
+ }
776
+ };
777
+ emit({
778
+ ...update,
779
+ assistantMessageEvent: update.event
780
+ });
781
+ eventsSettled = eventsSettled.then(() => deliver(update, eventContext));
782
+ }
783
+ }
784
+ if (event.type === "tool_execution_update") mapped = {
785
+ type: "tool_update",
786
+ toolCallId: event.toolCallId,
787
+ toolName: event.toolName,
788
+ partialResult: {
789
+ content: [{
790
+ type: "text",
791
+ text: event.output ? "set" in event.output ? event.output.set : event.output.append ?? "" : ""
792
+ }],
793
+ details: event.details
794
+ }
795
+ };
796
+ if (event.type === "compaction_end") {
797
+ const outcome = (await harness.waitForTask(event.taskId, eventContext)).state.outcome;
798
+ const result = outcome.status === "completed" ? outcome.result : void 0;
799
+ const status = await (result?.submissionId ? await harness.submission(result.submissionId, eventContext) : void 0)?.status(eventContext);
800
+ const entryId = result?.entryId ?? (status && "entry" in status ? status.entry : void 0);
801
+ mapped = {
802
+ type: "compaction_end",
803
+ status: outcome.status === "completed" ? result?.entryId !== void 0 || result?.submissionId !== void 0 ? "completed" : "aborted" : outcome.status === "aborted" ? "aborted" : "failed",
804
+ reason: event.reason,
805
+ entryId: entryId === void 0 ? void 0 : String(entryId),
806
+ error: outcome.status !== "completed" && outcome.status !== "aborted" ? new Error("error" in outcome ? outcome.error?.message ?? "Compaction failed" : "Compaction failed") : void 0
807
+ };
808
+ }
809
+ if (event.type === "inbox_update") mapped = {
810
+ type: "queue_update",
811
+ queues: event.items.map((item) => ({ kind: item.mode }))
812
+ };
813
+ if (event.type === "message_end") {
814
+ for (const message of event.entry.model ?? []) if (message.role === "assistant") eventsSettled = eventsSettled.then(() => deliver({
815
+ type: "usage",
816
+ row: {
817
+ id: String(event.entry.id),
818
+ usage: message.usage
819
+ }
820
+ }, eventContext));
821
+ }
822
+ if (!mapped) continue;
823
+ const publishMapped = (event) => emit({
824
+ ...event,
825
+ type: event.type === "tool_start" ? "tool_execution_start" : event.type === "tool_update" ? "tool_execution_update" : event.type === "tool_end" ? "tool_execution_end" : event.type === "entry_added" ? "entry_appended" : event.type
826
+ });
827
+ if (mapped.type === "run_end") {
828
+ const settledEvent = {
829
+ runId: String(event.type === "run_end" ? event.inputs[0] : conversation.id),
830
+ timestamp: Date.now()
831
+ };
832
+ settling++;
833
+ let released = false;
834
+ const release = () => {
835
+ if (!released) {
836
+ settling--;
837
+ released = true;
838
+ }
839
+ };
840
+ eventsSettled = eventsSettled.then(async () => {
841
+ await reconcile();
842
+ try {
843
+ await writable(() => harness.commit((tx) => tx.appendEntry(conversation.id, {
844
+ kind: AGENT_SETTLED_ENTRY_TYPE,
845
+ data: settledEvent
846
+ }), eventContext));
847
+ } catch (error) {
848
+ emit({
849
+ type: "error",
850
+ code: "agent_settled",
851
+ error: String(error)
852
+ });
853
+ }
854
+ const live = await harness.snapshot(_earendil_works_pi_durable.LiveDoc, conversation.id, eventContext);
855
+ const successorActive = !!live?.run && String(live.run.inputs[0]) !== settledEvent.runId;
856
+ mapped = {
857
+ type: "run_end",
858
+ runId: settledEvent.runId,
859
+ successorActive
860
+ };
861
+ publishMapped(mapped);
862
+ await deliver(mapped, eventContext);
863
+ release();
864
+ const lifecycle = await readLifecycle();
865
+ emit({
866
+ type: "lifecycle_update",
867
+ lifecycle
868
+ });
869
+ if (!lifecycle.operation) {
870
+ logicalLoopActive = false;
871
+ emit({
872
+ type: "agent_end",
873
+ runId: settledEvent.runId
874
+ });
875
+ emit({
876
+ type: "agent_settled",
877
+ ...settledEvent
878
+ });
879
+ }
880
+ }).catch((error) => emit({
881
+ type: "error",
882
+ code: "settled_event",
883
+ error: String(error)
884
+ })).finally(async () => {
885
+ release();
886
+ if (event.type === "run_end") for (const id of event.inputs) {
887
+ deliveredInputs.add(id);
888
+ internalDelivery.get(id)?.resolve();
889
+ }
890
+ while (deliveredInputs.size > 128) deliveredInputs.delete(deliveredInputs.values().next().value);
891
+ try {
892
+ await publish();
893
+ } catch (error) {
894
+ emit({
895
+ type: "error",
896
+ code: "lifecycle_update",
897
+ error: String(error)
898
+ });
899
+ }
900
+ drain().catch((error) => emit({
901
+ type: "error",
902
+ code: "drain",
903
+ error: String(error)
904
+ }));
905
+ });
906
+ } else {
907
+ publishMapped(mapped);
908
+ if (mapped.type === "run_start") {
909
+ if (!logicalLoopActive) emit({ type: "agent_start" });
910
+ logicalLoopActive = true;
911
+ publish().catch((error) => emit({
912
+ type: "error",
913
+ code: "lifecycle_update",
914
+ error: String(error)
915
+ }));
916
+ }
917
+ const delivered = mapped;
918
+ eventsSettled = eventsSettled.then(() => deliver(delivered, eventContext));
919
+ }
920
+ }
921
+ });
922
+ };
923
+ await attach();
924
+ const reconcileInternal = (requestId, item) => {
925
+ const existing = reconcilingInternal.get(requestId);
926
+ if (existing) return existing;
927
+ const work = (async () => {
928
+ if (admittingInternal.has(requestId)) return;
929
+ const target = item.conversationId === conversation.id ? conversation : await harness.conversation(item.conversationId, context);
930
+ if (!target) throw new Error("Internal delivery conversation is unavailable");
931
+ let receipt = await storage.storage.submissionByRequest(target.id, requestId, context);
932
+ if (receipt?.status === "queued" && !(await harness.snapshot(_earendil_works_pi_durable.LiveDoc, target.id, context))?.run) {
933
+ await harness.abortSubmission(receipt.id, context);
934
+ receipt = await storage.storage.submissionByRequest(target.id, requestId, context);
935
+ }
936
+ if (receipt?.status === "queued") return;
937
+ if (!receipt || receipt.status === "unanswered" && receipt.entry === void 0) {
938
+ if ((await harness.snapshot(_earendil_works_pi_durable.LiveDoc, target.id, context))?.run) return;
939
+ let envelope = item.message.role === "custom" ? await storage.storage.submissionByRequest(target.id, `${requestId}:message`, context) : void 0;
940
+ if (item.message.role === "custom" && !envelope) {
941
+ await (await writable(() => target.submit({
942
+ type: "write",
943
+ requestId: `${requestId}:message`,
944
+ entry: {
945
+ kind: "po.entry",
946
+ data: json({
947
+ type: "message",
948
+ message: item.message,
949
+ timestamp: item.message.timestamp,
950
+ inputRequestId: requestId
951
+ })
952
+ }
953
+ }, context))).wait(context);
954
+ envelope = await storage.storage.submissionByRequest(target.id, `${requestId}:message`, context);
955
+ }
956
+ if (envelope?.status === "queued") {
957
+ await (await writable(() => target.submit({
958
+ type: "write",
959
+ requestId: `${requestId}:message-placement`,
960
+ entry: { kind: "po.internal-delivery" }
961
+ }, context))).wait(context);
962
+ envelope = await storage.storage.submissionByRequest(target.id, `${requestId}:message`, context);
963
+ }
964
+ const envelopeId = envelope && "entry" in envelope ? envelope.entry : void 0;
965
+ const draft = {
966
+ type: "write",
967
+ requestId: `${requestId}:context`,
968
+ entry: {
969
+ kind: "po.entry",
970
+ data: json(item.message.role === "custom" ? {
971
+ type: "custom",
972
+ customType: "po.internal-context",
973
+ data: { inputRequestId: requestId }
974
+ } : {
975
+ type: "message",
976
+ message: item.message
977
+ }),
978
+ ...envelopeId === void 0 ? { model: (0, _earendil_works_pi_coding_agent.convertToLlm)([item.message]) } : { edits: [{
979
+ target: envelopeId,
980
+ action: "replace",
981
+ messages: (0, _earendil_works_pi_coding_agent.convertToLlm)([item.message])
982
+ }] }
983
+ }
984
+ };
985
+ let fallback;
986
+ try {
987
+ fallback = await writable(() => target.submit(draft, context));
988
+ } catch (error) {
989
+ const accepted = await storage.storage.submissionByRequest(target.id, `${requestId}:context`, context);
990
+ fallback = accepted && await harness.submission(accepted.id, context);
991
+ if (!fallback) throw error;
992
+ }
993
+ if ((await fallback.wait(context)).status !== "done") throw new Error("Internal context write failed");
994
+ }
995
+ await changeRecord((r) => {
996
+ delete r.internalDeliveries?.[requestId];
997
+ });
998
+ })().finally(() => {
999
+ reconcilingInternal.delete(requestId);
1000
+ });
1001
+ reconcilingInternal.set(requestId, work);
1002
+ return work;
1003
+ };
1004
+ const reconcile = async () => {
1005
+ const record = await readRecord();
1006
+ for (const [requestId, item] of Object.entries(record.internalDeliveries ?? {})) {
1007
+ if (admittingInternal.has(requestId)) continue;
1008
+ if ((await harness.snapshot(_earendil_works_pi_durable.LiveDoc, item.conversationId, context))?.run) continue;
1009
+ const receipt = await storage.storage.submissionByRequest(item.conversationId, requestId, context);
1010
+ if (receipt?.status === "queued") await harness.abortSubmission(receipt.id, context);
1011
+ }
1012
+ for (const [requestId, item] of Object.entries(record.internalDeliveries ?? {})) await reconcileInternal(requestId, item);
1013
+ for (const item of record.queue) {
1014
+ if (item.disposition !== "handoff" && item.disposition !== "uncertain") continue;
1015
+ const status = await (item.submissionId ? await harness.submission(item.submissionId, context) : void 0)?.status(context);
1016
+ if (status?.status === "done" || status?.status === "placed" || status?.status === "unanswered") await changeRecord((r) => {
1017
+ const q = r.queue.find((q) => q.id === item.id);
1018
+ if (!q) return;
1019
+ if (status.status === "unanswered" && status.entry === void 0 && r.paused) {
1020
+ q.disposition = "pending";
1021
+ q.attempt = (q.attempt ?? 0) + 1;
1022
+ delete q.submissionId;
1023
+ } else {
1024
+ q.disposition = "consumed";
1025
+ q.text = "";
1026
+ delete q.message;
1027
+ delete q.images;
1028
+ }
1029
+ const receipts = r.queue.filter((q) => q.disposition === "consumed" || q.disposition === "removed");
1030
+ if (receipts.length > 128) {
1031
+ const expired = new Set(receipts.slice(0, receipts.length - 128).map((q) => q.id));
1032
+ r.queue = r.queue.filter((q) => !expired.has(q.id));
1033
+ }
1034
+ });
1035
+ else if (!status && !handingOff.has(item.id) && !userClaims.has(item.id)) await changeRecord((r) => {
1036
+ const q = r.queue.find((q) => q.id === item.id);
1037
+ if (q) q.disposition = "uncertain";
1038
+ });
1039
+ }
1040
+ };
1041
+ const handingOff = /* @__PURE__ */ new Set();
1042
+ const userClaims = /* @__PURE__ */ new Set();
1043
+ let drainPromise;
1044
+ let drainRequested = false;
1045
+ const drain = () => {
1046
+ if (drainPromise) {
1047
+ drainRequested = true;
1048
+ return drainPromise;
1049
+ }
1050
+ return drainPromise ??= (async () => {
1051
+ await reconcile();
1052
+ while (!disposed) {
1053
+ const record = await readRecord();
1054
+ if (agentLocked || userAdmission || record.paused || await execution()) break;
1055
+ const item = record.queue.find((q) => q.disposition === "pending");
1056
+ if (!item) break;
1057
+ const submission = await handoff(item, "reject");
1058
+ if (!submission) continue;
1059
+ await submission.wait(context);
1060
+ await eventsSettled;
1061
+ await reconcile();
1062
+ await publish();
1063
+ }
1064
+ })().finally(() => {
1065
+ drainPromise = void 0;
1066
+ if (drainRequested) {
1067
+ drainRequested = false;
1068
+ drain().catch((error) => emit({
1069
+ type: "error",
1070
+ code: "drain",
1071
+ error: String(error)
1072
+ }));
1073
+ }
1074
+ });
1075
+ };
1076
+ const handoff = async (item, mode, recovering = false, allowPaused = false) => {
1077
+ if (external || handingOff.has(item.id)) return void 0;
1078
+ handingOff.add(item.id);
1079
+ try {
1080
+ const claimed = await changeRecord((r) => {
1081
+ const q = r.queue.find((q) => q.id === item.id);
1082
+ if (!q || r.paused && !recovering && !allowPaused) return void 0;
1083
+ if (recovering ? q.disposition !== "handoff" || q.submissionId !== void 0 : q.disposition !== "pending") return void 0;
1084
+ q.disposition = "handoff";
1085
+ q.conversationId = conversation.id;
1086
+ q.submissionMode = mode;
1087
+ if (item.operationId !== void 0) {
1088
+ q.delivery = item.delivery;
1089
+ q.operationId = item.operationId;
1090
+ }
1091
+ return q;
1092
+ });
1093
+ if (!claimed) return void 0;
1094
+ const content = input(claimed.message ?? claimed.text, claimed.images);
1095
+ const requestId = `${claimed.id}:${claimed.attempt ?? 0}`;
1096
+ const submit = () => writable(() => conversation.submit(mode === "write" ? {
1097
+ type: "write",
1098
+ requestId,
1099
+ entry: {
1100
+ kind: "po.message",
1101
+ model: [{
1102
+ role: "user",
1103
+ content,
1104
+ timestamp: Date.now()
1105
+ }]
1106
+ }
1107
+ } : {
1108
+ type: "input",
1109
+ content,
1110
+ whenBusy: mode,
1111
+ requestId
1112
+ }, context));
1113
+ let submission;
1114
+ try {
1115
+ submission = await submit();
1116
+ } catch (error) {
1117
+ const accepted = await storage.storage.submissionByRequest(conversation.id, requestId, context);
1118
+ if (!accepted) throw error;
1119
+ submission = await harness.submission(accepted.id, context);
1120
+ if (!submission) throw error;
1121
+ }
1122
+ await changeRecord((r) => {
1123
+ const q = r.queue.find((q) => q.id === item.id);
1124
+ if (q) q.submissionId = submission.id;
1125
+ });
1126
+ await reconcile();
1127
+ await publish();
1128
+ return submission;
1129
+ } finally {
1130
+ handingOff.delete(item.id);
1131
+ }
1132
+ };
1133
+ const input = (message, images) => {
1134
+ if (typeof message !== "string") {
1135
+ if (message.role !== "user") throw new Error("Only user messages can admit an agent run");
1136
+ return message.content;
1137
+ }
1138
+ return images?.length ? [{
1139
+ type: "text",
1140
+ text: message
1141
+ }, ...images] : message;
1142
+ };
1143
+ const enqueue = async (message, images, delivery, scheduling, explicitQueue = false) => {
1144
+ const id = (0, node_crypto.randomUUID)();
1145
+ await changeRecord((r) => {
1146
+ r.queue.push({
1147
+ id,
1148
+ text: text(message),
1149
+ ...images ? { images } : {},
1150
+ ...typeof message === "string" ? {} : { message },
1151
+ delivery,
1152
+ scheduling,
1153
+ explicitQueue,
1154
+ disposition: "pending"
1155
+ });
1156
+ });
1157
+ await publish();
1158
+ return { id };
1159
+ };
1160
+ const queued = async (message, images, delivery) => {
1161
+ guardUserAdmission();
1162
+ assertUnlocked();
1163
+ await enqueue(message, images, delivery, "automatic");
1164
+ drain().catch((error) => emit({
1165
+ type: "error",
1166
+ error: String(error)
1167
+ }));
1168
+ };
1169
+ const dispatchCommand = async (value) => options.dispatchCommand?.(value) ?? false;
1170
+ const admit = async (message, images, mode) => {
1171
+ guardUserAdmission();
1172
+ if (external) throw new Error("An operation is already running");
1173
+ if (typeof message === "string" && await dispatchCommand(message)) return {
1174
+ settled: Promise.resolve(),
1175
+ handledCommand: true
1176
+ };
1177
+ guardUserAdmission();
1178
+ if (external) throw new Error("An operation is already running");
1179
+ promptAdmissions++;
1180
+ try {
1181
+ assertUnlocked();
1182
+ const record = await readRecord();
1183
+ await flushNextTurn();
1184
+ const { id } = await enqueue(message, images, mode ?? "nextRun", "automatic");
1185
+ const submission = await handoff((await readRecord()).queue.find((q) => q.id === id), mode ?? "reject", false, record.paused);
1186
+ if (!submission) return { settled: Promise.resolve() };
1187
+ let resolveDelivery;
1188
+ const delivered = new Promise((resolve) => {
1189
+ resolveDelivery = resolve;
1190
+ });
1191
+ internalDelivery.set(submission.id, {
1192
+ done: delivered,
1193
+ resolve: resolveDelivery
1194
+ });
1195
+ if (deliveredInputs.has(submission.id)) resolveDelivery();
1196
+ const settled = (async () => {
1197
+ try {
1198
+ const status = await submission.wait(context);
1199
+ if (status.status === "done" || status.entry !== void 0) await delivered;
1200
+ await eventsSettled;
1201
+ await reconcile();
1202
+ await publish();
1203
+ if (status.status === "unanswered" && status.reason !== "aborted") throw new Error(`Agent submission failed: ${status.reason}${typeof status.detail === "string" && status.detail ? `: ${status.detail}` : ""}`);
1204
+ await drain();
1205
+ } finally {
1206
+ internalDelivery.delete(submission.id);
1207
+ }
1208
+ })();
1209
+ settled.catch((error) => emit({
1210
+ type: "error",
1211
+ error: String(error)
1212
+ }));
1213
+ return { settled };
1214
+ } finally {
1215
+ promptAdmissions--;
1216
+ }
1217
+ };
1218
+ const abort = async (operationId) => {
1219
+ const current = await execution();
1220
+ if (!current || current.id === "settling" || operationId && current.id !== operationId) return;
1221
+ if (current.id === external) {
1222
+ externalAbort?.abort();
1223
+ return;
1224
+ }
1225
+ const taskId = (await harness.snapshot(_earendil_works_pi_durable.LiveDoc, conversation.id, context))?.run?.taskId ?? nativeId(current.id);
1226
+ await changeRecord((r) => {
1227
+ r.paused = true;
1228
+ r.abortOperationId = current.id;
1229
+ r.abortTaskId = taskId;
1230
+ });
1231
+ await publish();
1232
+ await writable(async () => {
1233
+ if (current.kind === "run") await conversation.abort(context);
1234
+ else await harness.abortTask(taskId, context);
1235
+ });
1236
+ await reconcile();
1237
+ };
1238
+ const interrupt = async () => {
1239
+ await abort();
1240
+ await writable(() => conversation.abort(context));
1241
+ await eventsSettled;
1242
+ };
1243
+ const admitSelected = async (selection, replay = false) => writable(() => harness.commit(async (tx) => {
1244
+ const doc = await tx.doc(LifecycleDoc);
1245
+ const record = JSON.parse(doc.json);
1246
+ const q = record.queue.find((q) => q.id === selection.id);
1247
+ if (!q || q.explicitQueue !== true) return "not_found";
1248
+ const requestId = `${q.id}:${q.attempt ?? 0}`;
1249
+ const accepted = await tx.submissionByRequest(conversation.id, requestId);
1250
+ if (accepted && accepted.type !== "input") throw new Error(`Request ${requestId} already identifies a submission of type ${accepted.type}`);
1251
+ if (accepted && replay) return accepted.id;
1252
+ if (q.disposition === "removed" || q.disposition === "consumed") return "not_found";
1253
+ if (accepted || q.disposition !== "pending") return "in_flight";
1254
+ const live = await tx.doc(_earendil_works_pi_durable.LiveDoc, conversation.id);
1255
+ const task = live.run ? await tx.task(live.run.taskId) : void 0;
1256
+ if ((live.run ? String(live.run.inputs[0]) : void 0) !== selection.operationId || task?.abortRequested || live.run && record.abortOperationId === selection.operationId) return "target_changed";
1257
+ if (!live.run) {
1258
+ let page = await tx.scanTasks({
1259
+ conversationId: conversation.id,
1260
+ kind: _earendil_works_pi_durable.CompactionTask.definition.name,
1261
+ background: false
1262
+ }, 128);
1263
+ while (true) {
1264
+ if (page.items.some((task) => task.state.status !== "terminal")) return "target_changed";
1265
+ if (!page.next) break;
1266
+ page = await tx.scanTasks({
1267
+ conversationId: conversation.id,
1268
+ kind: _earendil_works_pi_durable.CompactionTask.definition.name,
1269
+ background: false
1270
+ }, 128, page.next);
1271
+ }
1272
+ }
1273
+ const content = input(q.message ?? q.text, q.images);
1274
+ const inbox = await tx.doc(_earendil_works_pi_durable.InboxDoc, conversation.id);
1275
+ let head = live.run ? void 0 : (await tx.latestHeadMarker(conversation.id))?.head;
1276
+ const now = Date.now();
1277
+ let id;
1278
+ if (!live.run && inbox.items.length === 0) {
1279
+ const entry = await tx.appendEntry(_earendil_works_pi_durable.UserEntry, conversation.id, { model: [{
1280
+ role: "user",
1281
+ content,
1282
+ timestamp: now
1283
+ }] });
1284
+ id = (await tx.createSubmission({
1285
+ conversationId: conversation.id,
1286
+ requestId,
1287
+ type: "input",
1288
+ status: "placed",
1289
+ entry: entry.id
1290
+ })).id;
1291
+ live.run = {
1292
+ taskId: await tx.createTask(_earendil_works_pi_durable.GenerationTask, {}, {
1293
+ ownership: { kind: "conversation" },
1294
+ conversationId: conversation.id
1295
+ }),
1296
+ inputs: [id]
1297
+ };
1298
+ } else {
1299
+ id = (await tx.createSubmission({
1300
+ conversationId: conversation.id,
1301
+ requestId,
1302
+ type: "input",
1303
+ status: "queued"
1304
+ })).id;
1305
+ inbox.items.push({
1306
+ id,
1307
+ mode: "steer",
1308
+ content: json(content)
1309
+ });
1310
+ if (!live.run) {
1311
+ const writes = inbox.items.flatMap((item, index) => item.mode === "write" ? [index] : []);
1312
+ const pick = (mode) => {
1313
+ const indexes = inbox.items.flatMap((item, index) => item.mode === mode ? [index] : []);
1314
+ return (mode === "steer" ? settings.steeringMode : settings.followUpMode) === "all" ? indexes : indexes.slice(0, 1);
1315
+ };
1316
+ const users = [...pick("steer"), ...pick("followUp")].sort((a, b) => a - b);
1317
+ for (const index of writes) {
1318
+ const item = inbox.items[index];
1319
+ if (item.mode !== "write") continue;
1320
+ const draft = item.entry;
1321
+ if (typeof draft.head === "number" && head !== void 0 && draft.head < head) {
1322
+ tx.settleSubmission(item.id, {
1323
+ status: "unanswered",
1324
+ reason: "stale"
1325
+ });
1326
+ continue;
1327
+ }
1328
+ const entry = await tx.appendEntry(conversation.id, draft);
1329
+ if (draft.head !== void 0) head = draft.head === "self" ? entry.id : draft.head;
1330
+ tx.placeSubmission(item.id, entry.id);
1331
+ }
1332
+ const inputs = [];
1333
+ for (const index of users) {
1334
+ const item = inbox.items[index];
1335
+ if (item.mode === "write") continue;
1336
+ const entry = await tx.appendEntry(_earendil_works_pi_durable.UserEntry, conversation.id, { model: [{
1337
+ role: "user",
1338
+ content: item.content,
1339
+ timestamp: now
1340
+ }] });
1341
+ tx.placeSubmission(item.id, entry.id);
1342
+ inputs.push(item.id);
1343
+ }
1344
+ for (const index of [...writes, ...users].sort((a, b) => b - a)) inbox.items.splice(index, 1);
1345
+ if (inputs.length) live.run = {
1346
+ taskId: await tx.createTask(_earendil_works_pi_durable.GenerationTask, {}, {
1347
+ ownership: { kind: "conversation" },
1348
+ conversationId: conversation.id
1349
+ }),
1350
+ inputs
1351
+ };
1352
+ }
1353
+ }
1354
+ q.disposition = "handoff";
1355
+ q.conversationId = conversation.id;
1356
+ q.submissionMode = "steer";
1357
+ q.submissionId = id;
1358
+ record.revision++;
1359
+ doc.json = JSON.stringify(record);
1360
+ return id;
1361
+ }, context));
1362
+ const submitUserPrompt = async (message, images, selection, submissionMode = "reject") => {
1363
+ guardUserAdmission();
1364
+ if (external) throw new Error("An operation is already running");
1365
+ if (!selection && (typeof message === "string" ? !message && !images?.length : !message.content.length)) throw new Error("User input must contain text or an image");
1366
+ if (!selection && typeof message === "string" && await dispatchCommand(message)) return {
1367
+ settled: Promise.resolve(),
1368
+ handledCommand: true
1369
+ };
1370
+ assertUnlocked();
1371
+ guardUserAdmission();
1372
+ if (external) throw new Error("An operation is already running");
1373
+ userAdmission = true;
1374
+ userAdmissionSettled = new Promise((resolve) => {
1375
+ releaseUserAdmission = resolve;
1376
+ });
1377
+ let claimed;
1378
+ try {
1379
+ if (selection && submissionMode === "steer") {
1380
+ let admitted;
1381
+ try {
1382
+ admitted = await admitSelected(selection);
1383
+ } catch (error) {
1384
+ if (!await storage.storage.submissionByRequest(conversation.id, `${selection.id}:${(await readRecord()).queue.find((q) => q.id === selection.id)?.attempt ?? 0}`, context)) throw error;
1385
+ admitted = await admitSelected(selection, true);
1386
+ }
1387
+ if (typeof admitted === "string") return {
1388
+ settled: Promise.resolve(),
1389
+ queueOutcome: admitted
1390
+ };
1391
+ const submission = await harness.submission(admitted, context);
1392
+ if (!submission) throw new Error("Accepted promotion submission is missing");
1393
+ const settled = (async () => {
1394
+ const status = await submission.wait(context);
1395
+ await eventsSettled;
1396
+ await reconcile();
1397
+ await publish();
1398
+ if (status.status === "unanswered" && status.reason !== "aborted") throw new Error(`Agent submission failed: ${status.reason}`);
1399
+ await drain();
1400
+ })();
1401
+ settled.catch((error) => emit({
1402
+ type: "error",
1403
+ code: "user_prompt",
1404
+ error: String(error)
1405
+ }));
1406
+ await reconcile();
1407
+ await publish();
1408
+ return { settled };
1409
+ }
1410
+ const current = await execution();
1411
+ if (selection) {
1412
+ const outcome = await changeRecord((r) => {
1413
+ const q = r.queue.find((q) => q.id === selection.id);
1414
+ if (!q || q.explicitQueue !== true || q.disposition === "removed" || q.disposition === "consumed") return "not_found";
1415
+ if (q.disposition !== "pending") return "in_flight";
1416
+ if (current?.id !== selection.operationId || current?.status === "aborting") return "target_changed";
1417
+ if (q.message && q.message.role !== "user") throw new Error("Only user input can interrupt and respond");
1418
+ userClaims.add(q.id);
1419
+ if (submissionMode === "reject") r.paused = true;
1420
+ q.disposition = "handoff";
1421
+ q.conversationId = conversation.id;
1422
+ q.submissionMode = submissionMode;
1423
+ return { ...q };
1424
+ });
1425
+ if (typeof outcome === "string") return {
1426
+ settled: Promise.resolve(),
1427
+ queueOutcome: outcome
1428
+ };
1429
+ claimed = outcome;
1430
+ }
1431
+ if (submissionMode === "reject") {
1432
+ if (current) await abort(current.id);
1433
+ await conversation.waitForIdle(context);
1434
+ await eventsSettled;
1435
+ }
1436
+ if (!selection) await flushNextTurn();
1437
+ if (!claimed) {
1438
+ const { id } = await enqueue(message, images, submissionMode === "steer" ? "steer" : "nextRun", submissionMode === "steer" ? "automatic" : "held");
1439
+ claimed = await changeRecord((r) => {
1440
+ const q = r.queue.find((q) => q.id === id);
1441
+ if (!q || q.disposition !== "pending") throw new Error("User input was removed before admission");
1442
+ q.disposition = "handoff";
1443
+ q.conversationId = conversation.id;
1444
+ q.submissionMode = submissionMode;
1445
+ return { ...q };
1446
+ });
1447
+ }
1448
+ const submission = await handoff(claimed, submissionMode, true);
1449
+ if (!submission) throw new Error("User admission ownership changed");
1450
+ const settled = (async () => {
1451
+ const status = await submission.wait(context);
1452
+ await eventsSettled;
1453
+ await reconcile();
1454
+ await publish();
1455
+ if (status.status === "unanswered" && status.reason !== "aborted") throw new Error(`Agent submission failed: ${status.reason}`);
1456
+ await drain();
1457
+ })();
1458
+ settled.catch((error) => emit({
1459
+ type: "error",
1460
+ code: "user_prompt",
1461
+ error: String(error)
1462
+ }));
1463
+ await publish();
1464
+ return { settled };
1465
+ } finally {
1466
+ if (claimed) userClaims.delete(claimed.id);
1467
+ if (selection) userClaims.delete(selection.id);
1468
+ userAdmission = false;
1469
+ releaseUserAdmission?.();
1470
+ releaseUserAdmission = void 0;
1471
+ }
1472
+ };
1473
+ const recover = async () => {
1474
+ const r = await readRecord();
1475
+ if (r.abortOperationId) {
1476
+ const task = r.abortTaskId === void 0 ? void 0 : await harness.getTask(r.abortTaskId, context);
1477
+ if (task && task.state.status !== "terminal") await conversation.abort(context);
1478
+ }
1479
+ for (const item of r.queue.filter((q) => q.disposition === "handoff" && !q.submissionId)) {
1480
+ if (item.conversationId !== conversation.id) {
1481
+ await changeRecord((record) => {
1482
+ const q = record.queue.find((q) => q.id === item.id);
1483
+ if (q) q.disposition = "uncertain";
1484
+ });
1485
+ continue;
1486
+ }
1487
+ await handoff(item, item.submissionMode ?? (item.delivery === "steer" ? "steer" : "followUp"), true);
1488
+ }
1489
+ await reconcile();
1490
+ await changeRecord(() => void 0);
1491
+ };
1492
+ const admissionBusy = () => userAdmission || promptAdmissions > 0 || settling > 0 || handingOff.size > 0 || admittingInternal.size > 0 || compactionAdmission;
1493
+ const runExternalOperation = async (work, { signal, waitMs = 0 } = {}) => {
1494
+ if (!Number.isFinite(waitMs) || waitMs < 0) throw new RangeError("waitMs must be finite and non-negative");
1495
+ const deadline = Date.now() + waitMs;
1496
+ const pendingFollowUp = async () => {
1497
+ if (waitMs === 0 || agentLocked) return false;
1498
+ const record = await readRecord();
1499
+ return !record.paused && record.queue.some((item) => item.disposition === "pending" || item.disposition === "handoff");
1500
+ };
1501
+ for (;;) {
1502
+ if (waitMs === 0) guardUserAdmission();
1503
+ signal?.throwIfAborted();
1504
+ if (disposed || disposePromise) throw new Error("Direct harness is disposed");
1505
+ const busy = await nativeExecution() || await pendingFollowUp();
1506
+ signal?.throwIfAborted();
1507
+ if (disposed || disposePromise) throw new Error("Direct harness is disposed");
1508
+ if (!busy && !external && !admissionBusy()) {
1509
+ external = (0, node_crypto.randomUUID)();
1510
+ let admitted = false;
1511
+ try {
1512
+ const changed = await nativeExecution() || await pendingFollowUp();
1513
+ signal?.throwIfAborted();
1514
+ if (disposed || disposePromise) throw new Error("Direct harness is disposed");
1515
+ if (waitMs > 0 && Date.now() >= deadline) throw new require_headless.DoomHeadlessToolBusyError();
1516
+ admitted = !changed && !admissionBusy();
1517
+ } finally {
1518
+ if (!admitted) {
1519
+ external = void 0;
1520
+ drain().catch((error) => emit({
1521
+ type: "error",
1522
+ error: String(error)
1523
+ }));
1524
+ }
1525
+ }
1526
+ if (admitted) break;
1527
+ }
1528
+ const remaining = deadline - Date.now();
1529
+ if (remaining <= 0) throw new require_headless.DoomHeadlessToolBusyError();
1530
+ let timer;
1531
+ try {
1532
+ await (0, _earendil_works_chord_context.awaitWithContext)(new Promise((resolve) => {
1533
+ timer = setTimeout(resolve, Math.min(100, remaining));
1534
+ }), signal ? (0, _earendil_works_chord_context.withAbortSignal)(signal, context) : context);
1535
+ } finally {
1536
+ clearTimeout(timer);
1537
+ }
1538
+ }
1539
+ externalAbort = new AbortController();
1540
+ try {
1541
+ await publish();
1542
+ return await writable(work);
1543
+ } finally {
1544
+ external = void 0;
1545
+ externalAbort = void 0;
1546
+ await publish();
1547
+ drain().catch((error) => emit({
1548
+ type: "error",
1549
+ error: String(error)
1550
+ }));
1551
+ }
1552
+ };
1553
+ const appendEntry = async (entry) => {
1554
+ const lane = conversation;
1555
+ const receipt = await (await writable(() => lane.submit(entry, context))).wait(context);
1556
+ if (receipt.status !== "done") throw new Error(`Entry write failed: ${receipt.reason}`);
1557
+ return String(receipt.entry);
1558
+ };
1559
+ const restoreCustomContextMessages = async (messages, ctx, view, conversationId = conversation.id) => {
1560
+ const contextContributions = /* @__PURE__ */ new Map();
1561
+ const customByEntry = /* @__PURE__ */ new Map();
1562
+ for (const raw of view.entries) {
1563
+ const entry = require_index$1.projectDurableEntries([raw])[0];
1564
+ if (entry?.type !== "message" || entry.message.role !== "custom") continue;
1565
+ const data = raw.data && typeof raw.data === "object" && !Array.isArray(raw.data) ? raw.data : void 0;
1566
+ const receipt = typeof data?.inputRequestId === "string" ? await storage.storage.submissionByRequest(conversationId, data.inputRequestId, ctx) : void 0;
1567
+ const placed = (receipt?.status === "unanswered" && !("entry" in receipt && receipt.entry !== void 0) && typeof data?.inputRequestId === "string" ? await storage.storage.submissionByRequest(conversationId, `${data.inputRequestId}:context`, ctx) : void 0) ?? receipt;
1568
+ const placedEntry = placed && "entry" in placed && placed.entry !== void 0 ? view.entries.find((candidate) => candidate.id === placed.entry) : void 0;
1569
+ const target = placedEntry?.edits?.some((edit) => edit.target === raw.id) ? raw.id : placedEntry?.id ?? raw.id;
1570
+ const contributions = view.contributions[view.entries.findIndex((candidate) => candidate.id === target)];
1571
+ const model = (placedEntry?.edits?.find((edit) => edit.target === raw.id && edit.action === "replace"))?.messages ?? view.entries.find((candidate) => candidate.id === target)?.model;
1572
+ if (model?.length === 1 && contributions?.length === 1 && JSON.stringify(model[0]) === JSON.stringify(contributions[0])) customByEntry.set(target, entry.message);
1573
+ }
1574
+ for (const [index, raw] of view.entries.entries()) {
1575
+ const custom = customByEntry.get(raw.id);
1576
+ for (const native of view.contributions[index] ?? []) {
1577
+ const key = JSON.stringify(native);
1578
+ const message = custom && view.contributions[index]?.length === 1 ? custom : native;
1579
+ const contributions = contextContributions.get(key) ?? [];
1580
+ contributions.push(message);
1581
+ contextContributions.set(key, contributions);
1582
+ }
1583
+ }
1584
+ return messages.filter((message) => message.role !== "system").map((message) => contextContributions.get(JSON.stringify(message))?.shift() ?? message);
1585
+ };
1586
+ const readEntries = async () => {
1587
+ const entries = await projectDurableConversationEntries(conversation, context);
1588
+ return {
1589
+ entries,
1590
+ leafId: entries.at(-1)?.id ?? null
1591
+ };
1592
+ };
1593
+ const getSessionStats = async () => {
1594
+ const { entries } = await readEntries();
1595
+ const messages = entries.flatMap((e) => e.type === "message" ? [e.message] : []);
1596
+ const agent = await conversation.agent(context);
1597
+ const selected = agent.model ? models.getModel(agent.model.provider, agent.model.modelId) : void 0;
1598
+ const contextUsage = require_index$2.contextUsageOf(require_index$2.contextTokensOf(require_index$2.latestAssistantUsage(entries)), selected?.contextWindow);
1599
+ const usage = await harness.usage(context);
1600
+ const all = [...Object.values(usage.models), ...Object.values(usage.tools)];
1601
+ const tokens = {
1602
+ input: 0,
1603
+ output: 0,
1604
+ cacheRead: 0,
1605
+ cacheWrite: 0,
1606
+ total: 0
1607
+ };
1608
+ let cost = 0;
1609
+ for (const u of all) {
1610
+ tokens.input += u.input;
1611
+ tokens.output += u.output;
1612
+ tokens.cacheRead += u.cacheRead;
1613
+ tokens.cacheWrite += u.cacheWrite;
1614
+ tokens.total += u.totalTokens;
1615
+ cost += u.cost.total;
1616
+ }
1617
+ return {
1618
+ sessionId,
1619
+ sessionFile: storage.sessionFile,
1620
+ ...contextUsage === void 0 ? {} : { contextUsage },
1621
+ messageCount: messages.length,
1622
+ totalMessages: messages.length,
1623
+ userMessages: messages.filter((m) => m.role === "user").length,
1624
+ assistantMessages: messages.filter((m) => m.role === "assistant").length,
1625
+ toolCalls: messages.flatMap((m) => m.role === "assistant" ? m.content.filter((c) => c.type === "toolCall") : []).length,
1626
+ toolResults: messages.filter((m) => m.role === "toolResult").length,
1627
+ tokens,
1628
+ cost,
1629
+ totalCost: cost,
1630
+ usage: {
1631
+ input: tokens.input,
1632
+ output: tokens.output,
1633
+ cacheRead: tokens.cacheRead,
1634
+ cacheWrite: tokens.cacheWrite,
1635
+ totalTokens: tokens.total,
1636
+ cost: {
1637
+ input: 0,
1638
+ output: 0,
1639
+ cacheRead: 0,
1640
+ cacheWrite: 0,
1641
+ total: cost
1642
+ }
1643
+ }
1644
+ };
1645
+ };
1646
+ let disposePromise;
1647
+ const dispose = () => disposePromise ??= (async () => {
1648
+ const failures = [];
1649
+ const attempt = async (cleanup) => {
1650
+ try {
1651
+ await cleanup();
1652
+ return true;
1653
+ } catch (error) {
1654
+ failures.push(error);
1655
+ return false;
1656
+ }
1657
+ };
1658
+ await attempt(interrupt);
1659
+ disposed = true;
1660
+ await attempt(() => watcher.stop());
1661
+ await attempt(() => eventsSettled);
1662
+ const harnessClosed = await attempt(() => harness.close(context));
1663
+ const repositoryClosed = harnessClosed && await attempt(async () => storage.repository?.close(context));
1664
+ await attempt(() => environment.cleanup(context));
1665
+ if (harnessClosed && repositoryClosed) await attempt(async () => storage.historyLease?.release());
1666
+ resolveExited(failures.length ? 1 : 0);
1667
+ if (failures.length) throw new AggregateError(failures, "Direct harness cleanup failed");
1668
+ })();
1669
+ const recordUsage = async (usage, usageOptions) => {
1670
+ const entryId = await appendEntry({
1671
+ type: "write",
1672
+ entry: {
1673
+ kind: "po.usage",
1674
+ data: json({
1675
+ usage,
1676
+ ...usageOptions
1677
+ })
1678
+ }
1679
+ });
1680
+ await writable(() => harness.commit(async (tx) => {
1681
+ const ledger = await tx.doc(_earendil_works_pi_durable.UsageDoc, conversation.id);
1682
+ const key = "po/auxiliary";
1683
+ const previous = ledger.models[key];
1684
+ ledger.models[key] = previous ? {
1685
+ ...usage,
1686
+ input: previous.input + usage.input,
1687
+ output: previous.output + usage.output,
1688
+ cacheRead: previous.cacheRead + usage.cacheRead,
1689
+ cacheWrite: previous.cacheWrite + usage.cacheWrite,
1690
+ totalTokens: previous.totalTokens + usage.totalTokens,
1691
+ cost: {
1692
+ input: previous.cost.input + usage.cost.input,
1693
+ output: previous.cost.output + usage.cost.output,
1694
+ cacheRead: previous.cost.cacheRead + usage.cost.cacheRead,
1695
+ cacheWrite: previous.cost.cacheWrite + usage.cost.cacheWrite,
1696
+ total: previous.cost.total + usage.cost.total
1697
+ }
1698
+ } : usage;
1699
+ }, context));
1700
+ return entryId;
1701
+ };
1702
+ const removeQueued = async (id) => {
1703
+ const item = (await readRecord()).queue.find((q) => q.id === id);
1704
+ if (!item || item.explicitQueue !== true) return "not_found";
1705
+ if (item.disposition === "consumed") return "already_consumed";
1706
+ if (item.disposition === "removed") return "removed";
1707
+ if (item.submissionId) {
1708
+ const result = await harness.abortSubmission(item.submissionId, context, conversation.id);
1709
+ if (result === "already_placed") return "in_flight";
1710
+ if (result === "settled") return "already_consumed";
1711
+ } else if (item.disposition !== "pending") return "in_flight";
1712
+ const result = await changeRecord((r) => {
1713
+ const q = r.queue.find((q) => q.id === id);
1714
+ if (!q || q.explicitQueue !== true) return "not_found";
1715
+ if (q.disposition === "consumed") return "already_consumed";
1716
+ if (q.disposition === "removed") return "removed";
1717
+ if (q.submissionId !== item.submissionId || item.submissionId === void 0 && q.disposition !== "pending") return "in_flight";
1718
+ q.disposition = "removed";
1719
+ q.text = "";
1720
+ delete q.message;
1721
+ delete q.images;
1722
+ return "removed";
1723
+ });
1724
+ await publish();
1725
+ return result;
1726
+ };
1727
+ const commitCheckpointMessage = async (registration, lane, message, ctx, scopeIsOpen = () => true, taskId) => {
1728
+ const usable = () => registration.active && scopeIsOpen() && !disposed && !quarantined && !external && conversation.id === lane.id && !ctx.abortSignal?.aborted;
1729
+ if (!usable()) return;
1730
+ return writable(async () => {
1731
+ if (!usable()) return;
1732
+ return harness.commit(async (tx) => {
1733
+ if (!usable()) return;
1734
+ const live = await tx.doc(_earendil_works_pi_durable.LiveDoc, lane.id);
1735
+ const inbox = await tx.doc(_earendil_works_pi_durable.InboxDoc, lane.id);
1736
+ if (!usable() || live.compactions?.length || inbox.items.some((item) => item.mode !== "write") || (taskId === void 0 ? live.run !== void 0 : live.run?.taskId !== taskId)) return;
1737
+ const entry = await tx.appendEntry(lane.id, {
1738
+ kind: "po.entry",
1739
+ data: json({
1740
+ type: "message",
1741
+ message,
1742
+ timestamp: message.timestamp
1743
+ }),
1744
+ model: (0, _earendil_works_pi_coding_agent.convertToLlm)([message])
1745
+ });
1746
+ return String(entry.id);
1747
+ }, ctx);
1748
+ });
1749
+ };
1750
+ const appendMessage = (message) => appendEntry({
1751
+ type: "write",
1752
+ entry: {
1753
+ kind: "po.entry",
1754
+ data: json({
1755
+ type: "message",
1756
+ message,
1757
+ timestamp: message.timestamp
1758
+ }),
1759
+ model: (0, _earendil_works_pi_coding_agent.convertToLlm)([message])
1760
+ }
1761
+ });
1762
+ return {
1763
+ sessionId,
1764
+ sessionFile: storage.sessionFile,
1765
+ laneName,
1766
+ harnessId: options.harnessId ?? `${sessionId}:${laneName}`,
1767
+ session: harness,
1768
+ harness,
1769
+ get lane() {
1770
+ return conversation;
1771
+ },
1772
+ exited,
1773
+ get storageQuarantined() {
1774
+ return quarantined;
1775
+ },
1776
+ completeModel: models.complete?.bind(models),
1777
+ onPresentationFrame(listener) {
1778
+ listeners.add(listener);
1779
+ return () => listeners.delete(listener);
1780
+ },
1781
+ onEvent(listener) {
1782
+ eventListeners.add(listener);
1783
+ return () => eventListeners.delete(listener);
1784
+ },
1785
+ stop() {
1786
+ dispose().catch((error) => emit({
1787
+ type: "error",
1788
+ error: String(error)
1789
+ }));
1790
+ },
1791
+ readEntries,
1792
+ async getContextMessages() {
1793
+ const assertReadable = () => {
1794
+ if (disposed || quarantined) throw new Error("Direct harness context is unavailable", { cause: failure });
1795
+ };
1796
+ assertReadable();
1797
+ const lane = conversation;
1798
+ const view = await lane.context(context);
1799
+ assertReadable();
1800
+ const messages = await restoreCustomContextMessages(view.messages, context, view, lane.id);
1801
+ assertReadable();
1802
+ return structuredClone(messages);
1803
+ },
1804
+ readLifecycle,
1805
+ dispatchCommand,
1806
+ listCommands: () => [...options.listCommands?.() ?? []],
1807
+ async readState() {
1808
+ const lifecycle = await readLifecycle();
1809
+ const agent = await conversation.agent(context);
1810
+ const metadata = await harness.snapshot(require_sqliteSessionStorage.SessionMetadataDoc, context);
1811
+ const stats = await getSessionStats();
1812
+ const inbox = await harness.snapshot(_earendil_works_pi_durable.InboxDoc, conversation.id, context);
1813
+ const retained = (await readRecord()).queue;
1814
+ const retainedSubmissions = new Set(retained.map((item) => item.submissionId));
1815
+ const nativePending = inbox?.items.filter((item) => item.mode !== "write" && !retainedSubmissions.has(item.id)).length ?? 0;
1816
+ return json({
1817
+ sessionId,
1818
+ sessionFile: storage.sessionFile,
1819
+ sessionName: metadata?.name,
1820
+ model: agent.model ? {
1821
+ provider: agent.model.provider,
1822
+ id: agent.model.modelId
1823
+ } : void 0,
1824
+ thinkingLevel: agent.thinkingLevel,
1825
+ isIdle: !await execution() && !admissionBusy(),
1826
+ isStreaming: lifecycle.operation?.kind === "run",
1827
+ isCompacting: lifecycle.operation?.kind === "compaction",
1828
+ operationId: lifecycle.operation?.id,
1829
+ executionStatus: lifecycle.operation?.status,
1830
+ fastMode,
1831
+ agentLocked,
1832
+ queuePaused: lifecycle.paused,
1833
+ queueRevision: lifecycle.revision,
1834
+ steeringMode: settings.steeringMode ?? "one-at-a-time",
1835
+ followUpMode: settings.followUpMode ?? "one-at-a-time",
1836
+ autoCompactionEnabled: settings.compaction?.enabled ?? true,
1837
+ messageCount: stats.messageCount,
1838
+ pendingMessageCount: retained.filter((item) => item.disposition !== "consumed" && item.disposition !== "removed").length + nativePending + nextTurnMessages.length + deferredInternalCount
1839
+ });
1840
+ },
1841
+ enqueueAutomatic: async (value, images) => {
1842
+ assertUnlocked();
1843
+ const result = await enqueue(value, images, "nextRun", "automatic", true);
1844
+ drain().catch((error) => emit({
1845
+ type: "error",
1846
+ error: String(error)
1847
+ }));
1848
+ return result;
1849
+ },
1850
+ removeQueued,
1851
+ async promoteQueued(id, operationId) {
1852
+ return (await submitUserPrompt("", void 0, {
1853
+ id,
1854
+ operationId
1855
+ }, "steer")).queueOutcome ?? "promoted";
1856
+ },
1857
+ async resumeQueue() {
1858
+ guardUserAdmission();
1859
+ await changeRecord((r) => {
1860
+ r.paused = false;
1861
+ delete r.abortOperationId;
1862
+ delete r.abortTaskId;
1863
+ });
1864
+ await publish();
1865
+ drain().catch((error) => emit({
1866
+ type: "error",
1867
+ error: String(error)
1868
+ }));
1869
+ },
1870
+ recover,
1871
+ async setFastMode(enabled) {
1872
+ if (enabled) {
1873
+ const selected = (await conversation.agent(context)).model;
1874
+ const model = selected ? models.getModel(selected.provider, selected.modelId) : void 0;
1875
+ if (model?.api !== CODEX_API || model.provider !== CODEX_PROVIDER) throw new Error("Fast mode requires an OpenAI Codex model");
1876
+ }
1877
+ await writable(() => harness.commit(async (tx) => {
1878
+ (await tx.doc(FastModeDoc)).enabled = enabled;
1879
+ await tx.appendEntry(conversation.id, {
1880
+ kind: "po.fast-mode",
1881
+ data: {
1882
+ version: 1,
1883
+ enabled,
1884
+ sessionId
1885
+ }
1886
+ });
1887
+ }, context));
1888
+ fastMode = enabled;
1889
+ emit({
1890
+ type: "fast_mode_changed",
1891
+ enabled
1892
+ });
1893
+ },
1894
+ agentLocked: () => agentLocked,
1895
+ async setAgentLock(locked) {
1896
+ if (typeof locked !== "boolean") throw new Error("Agent lock must be a boolean.");
1897
+ await writable(() => harness.commit(async (tx) => {
1898
+ (await tx.doc(AgentLockDoc)).locked = locked;
1899
+ }, context));
1900
+ agentLocked = locked;
1901
+ emit({
1902
+ type: "agent_lock_changed",
1903
+ locked
1904
+ });
1905
+ if (!locked) return;
1906
+ const current = await execution();
1907
+ if (current?.kind === "run") await abort(current.id);
1908
+ },
1909
+ async setModel(model) {
1910
+ const previous = (await conversation.agent(context)).model;
1911
+ if (!models.getModel(model.provider, model.id)) throw new Error(`Model not found: ${model.provider}/${model.id}`);
1912
+ await writable(() => conversation.configure({ model: {
1913
+ provider: model.provider,
1914
+ modelId: model.id
1915
+ } }, context));
1916
+ await deliver({
1917
+ type: "config_update",
1918
+ property: "model",
1919
+ value: {
1920
+ provider: model.provider,
1921
+ modelId: model.id
1922
+ },
1923
+ previous
1924
+ }, context);
1925
+ emit({
1926
+ type: "model_select",
1927
+ model
1928
+ });
1929
+ },
1930
+ availableModels: () => models.getAvailable(),
1931
+ async availableThinkingLevels() {
1932
+ const agent = await conversation.agent(context);
1933
+ const model = agent.model ? models.getModel(agent.model.provider, agent.model.modelId) : void 0;
1934
+ if (!model) throw new Error("No model is selected");
1935
+ return (0, _earendil_works_pi_ai.getSupportedThinkingLevels)(model);
1936
+ },
1937
+ setThinkingLevel: (level) => writable(() => conversation.configure({ thinkingLevel: level }, context)),
1938
+ async setSteeringMode(mode) {
1939
+ settings = {
1940
+ ...settings,
1941
+ steeringMode: mode
1942
+ };
1943
+ },
1944
+ async setFollowUpMode(mode) {
1945
+ settings = {
1946
+ ...settings,
1947
+ followUpMode: mode
1948
+ };
1949
+ },
1950
+ navigateTree: (targetId, navigationOptions) => runExternalOperation(async () => {
1951
+ try {
1952
+ const expected = conversation.id;
1953
+ if (targetId !== null && !await storage.storage.entry(conversation.id, nativeId(targetId), context)) throw new Error("Navigation target is not in the selected conversation");
1954
+ const oldTip = (await readEntries()).leafId;
1955
+ await deliver({ type: "navigation_start" }, context);
1956
+ emit({
1957
+ type: "navigation_start",
1958
+ targetId
1959
+ });
1960
+ let summary = navigationOptions?.summary;
1961
+ if (navigationOptions?.summarize === true && summary === void 0) {
1962
+ const selected = (await conversation.agent(context)).model;
1963
+ const model = selected ? models.getModel(selected.provider, selected.modelId) : void 0;
1964
+ if (!model) throw new Error("No model is selected for navigation summary");
1965
+ const instructions = navigationOptions.customInstructions;
1966
+ if (instructions !== void 0 && typeof instructions !== "string") throw new Error("Navigation instructions must be a string");
1967
+ const base = "Summarize this conversation for continuing work on another branch. Include decisions, progress, remaining work, and essential context. Return only the summary.";
1968
+ const messages = [{
1969
+ role: "system",
1970
+ content: navigationOptions.replaceInstructions === true ? instructions ?? base : [base, instructions].filter(Boolean).join("\n\n"),
1971
+ timestamp: Date.now()
1972
+ }, {
1973
+ role: "user",
1974
+ content: JSON.stringify((await conversation.context(context)).messages),
1975
+ timestamp: Date.now()
1976
+ }];
1977
+ await options.beforeModelRequest?.({
1978
+ phase: "request",
1979
+ model,
1980
+ prompt: messages,
1981
+ resources
1982
+ }, context);
1983
+ const summaryContext = (0, _earendil_works_chord_context.withAbortSignal)(externalAbort.signal, context);
1984
+ let answer;
1985
+ try {
1986
+ answer = await (0, _earendil_works_chord_context.awaitWithContext)(models.complete(model, { messages }, { signal: externalAbort.signal }), summaryContext);
1987
+ } catch (error) {
1988
+ if (externalAbort?.signal.aborted) {
1989
+ await deliver({
1990
+ type: "navigation_end",
1991
+ status: "aborted",
1992
+ tipId: oldTip,
1993
+ fromTipId: oldTip
1994
+ }, context);
1995
+ emit({
1996
+ type: "navigation_end",
1997
+ status: "aborted"
1998
+ });
1999
+ return {
2000
+ cancelled: true,
2001
+ entries: (await readEntries()).entries
2002
+ };
2003
+ }
2004
+ throw error;
2005
+ }
2006
+ if (answer.stopReason === "error" || answer.stopReason === "aborted") throw new Error(answer.errorMessage ?? "Navigation summary failed");
2007
+ summary = text(answer).trim();
2008
+ await recordUsage(answer.usage, { details: { purpose: "branch_summary" } });
2009
+ }
2010
+ if (externalAbort?.signal.aborted) {
2011
+ await deliver({
2012
+ type: "navigation_end",
2013
+ status: "aborted",
2014
+ tipId: oldTip,
2015
+ fromTipId: oldTip
2016
+ }, context);
2017
+ emit({
2018
+ type: "navigation_end",
2019
+ status: "aborted"
2020
+ });
2021
+ return {
2022
+ cancelled: true,
2023
+ entries: (await readEntries()).entries
2024
+ };
2025
+ }
2026
+ if (summary !== void 0 && typeof summary !== "string") throw new Error("Navigation summary must be a string");
2027
+ const id = await require_index.navigateDurableConversation(harness, expected, targetId === null ? null : nativeId(targetId), context, typeof summary === "string" ? { summary: {
2028
+ kind: "po.entry",
2029
+ data: {
2030
+ type: "branch_summary",
2031
+ summary,
2032
+ fromId: targetId,
2033
+ fromHook: navigationOptions?.summarize !== true
2034
+ },
2035
+ model: [{
2036
+ role: "user",
2037
+ content: `<branch_summary>\n${summary}\n</branch_summary>`,
2038
+ timestamp: Date.now()
2039
+ }]
2040
+ } } : void 0);
2041
+ const agent = await conversation.agent(context);
2042
+ conversation = await harness.conversation(id, context);
2043
+ if (targetId === null) await conversation.configure({
2044
+ model: agent.model,
2045
+ thinkingLevel: agent.thinkingLevel,
2046
+ cwd: agent.cwd,
2047
+ tools: tools.filter((t) => activeNames.has(t.name)).map(nativeTool),
2048
+ instructions: agent.instructions
2049
+ }, context);
2050
+ await attach();
2051
+ const result = await readEntries();
2052
+ if (typeof navigationOptions?.label === "string" && targetId !== null) await harness.commit(async (tx) => {
2053
+ (await tx.doc(LabelsDoc)).labels[targetId] = navigationOptions.label;
2054
+ }, context);
2055
+ for (const entry of result.entries) if (entry.type === "branch_summary") await deliver({
2056
+ type: "entry_added",
2057
+ entry
2058
+ }, context);
2059
+ const event = {
2060
+ type: "navigation_end",
2061
+ status: "completed",
2062
+ tipId: result.leafId,
2063
+ fromTipId: oldTip
2064
+ };
2065
+ await deliver(event, context);
2066
+ emit({ ...event });
2067
+ return {
2068
+ cancelled: false,
2069
+ entries: result.entries
2070
+ };
2071
+ } catch (error) {
2072
+ await deliver({
2073
+ type: "navigation_end",
2074
+ status: "failed",
2075
+ tipId: null,
2076
+ fromTipId: null,
2077
+ error: error instanceof Error ? error : new Error(String(error))
2078
+ }, context);
2079
+ emit({
2080
+ type: "navigation_end",
2081
+ status: "failed",
2082
+ error: String(error)
2083
+ });
2084
+ throw error;
2085
+ }
2086
+ }),
2087
+ async clearQueue() {
2088
+ const selected = (await readRecord()).queue.filter((item) => item.explicitQueue === true && item.disposition !== "consumed" && item.disposition !== "removed");
2089
+ for (const item of selected) await removeQueued(item.id);
2090
+ await publish();
2091
+ return {
2092
+ steering: [],
2093
+ followUp: []
2094
+ };
2095
+ },
2096
+ async setName(name) {
2097
+ await writable(() => harness.commit(async (tx) => {
2098
+ (await tx.doc(require_sqliteSessionStorage.SessionMetadataDoc)).name = name;
2099
+ }, context));
2100
+ emit({
2101
+ type: "session_info_changed",
2102
+ name
2103
+ });
2104
+ },
2105
+ getSessionStats,
2106
+ async replaceTools(replacement) {
2107
+ tools = replacement;
2108
+ activeNames = new Set(tools.map((t) => t.name));
2109
+ install();
2110
+ await writable(() => conversation.configure({ tools: tools.map(nativeTool) }, context));
2111
+ },
2112
+ async replaceResources(replacement) {
2113
+ resources = replacement;
2114
+ install();
2115
+ },
2116
+ async readResources() {
2117
+ return resources;
2118
+ },
2119
+ runExternalOperation,
2120
+ appendCustomEntry: async (customType, data) => {
2121
+ const lane = conversation;
2122
+ return String((await writable(() => lane.commit((tx) => tx.appendEntry(lane.id, {
2123
+ kind: customType,
2124
+ ...data === void 0 ? {} : { data: json(data) },
2125
+ ...options.entryProjectors?.[customType] ? { model: (0, _earendil_works_pi_coding_agent.convertToLlm)(options.entryProjectors[customType]({
2126
+ type: "custom",
2127
+ id: "",
2128
+ parentId: null,
2129
+ timestamp: Date.now(),
2130
+ seq: 0,
2131
+ customType,
2132
+ ...data === void 0 ? {} : { data: json(data) }
2133
+ })) } : {}
2134
+ }), context))).id);
2135
+ },
2136
+ appendMessage,
2137
+ registerCheckpointBoundary(callback) {
2138
+ const registration = {
2139
+ active: true,
2140
+ callback
2141
+ };
2142
+ checkpointBoundaries.add(registration);
2143
+ return {
2144
+ appendMessage: (message) => commitCheckpointMessage(registration, conversation, message, context),
2145
+ dispose() {
2146
+ registration.active = false;
2147
+ checkpointBoundaries.delete(registration);
2148
+ }
2149
+ };
2150
+ },
2151
+ setLabel: (targetId, label) => writable(() => harness.commit(async (tx) => {
2152
+ const labels = (await tx.doc(LabelsDoc)).labels;
2153
+ if (label === void 0) delete labels[targetId];
2154
+ else labels[targetId] = label;
2155
+ }, context)),
2156
+ recordUsage,
2157
+ submitPrompt: admit,
2158
+ submitUserPrompt,
2159
+ prompt: async (value, images) => {
2160
+ await (await admit(value, images)).settled;
2161
+ },
2162
+ admitMessage: (message) => admit(message),
2163
+ submitInternalMessage: async function submitInternalMessage(message, delivery = "steer", requestId = (0, node_crypto.randomUUID)()) {
2164
+ if (typeof message !== "string" && message.role !== "user" && message.role !== "custom") throw new Error("Internal input must be user or custom message content");
2165
+ if (delivery === "nextTurn") {
2166
+ nextTurnMessages.push(typeof message === "string" ? {
2167
+ role: "user",
2168
+ content: message,
2169
+ timestamp: Date.now()
2170
+ } : message);
2171
+ return { settled: Promise.resolve() };
2172
+ }
2173
+ const preserved = typeof message === "string" ? {
2174
+ role: "user",
2175
+ content: message,
2176
+ timestamp: Date.now()
2177
+ } : message;
2178
+ if (agentLocked) {
2179
+ await appendMessage(preserved);
2180
+ return { settled: Promise.resolve() };
2181
+ }
2182
+ const deliveryRecord = {
2183
+ message: preserved,
2184
+ conversationId: conversation.id
2185
+ };
2186
+ if (userAdmission) {
2187
+ deferredInternalCount++;
2188
+ admittingInternal.add(requestId);
2189
+ try {
2190
+ await changeRecord((r) => {
2191
+ (r.internalDeliveries ??= {})[requestId] = deliveryRecord;
2192
+ });
2193
+ } catch (error) {
2194
+ deferredInternalCount--;
2195
+ admittingInternal.delete(requestId);
2196
+ throw error;
2197
+ }
2198
+ const settled = userAdmissionSettled.then(async () => {
2199
+ deferredInternalCount--;
2200
+ admittingInternal.delete(requestId);
2201
+ await (await submitInternalMessage(preserved, delivery, requestId)).settled;
2202
+ });
2203
+ settled.catch((error) => emit({
2204
+ type: "error",
2205
+ code: "internal_message",
2206
+ error: String(error)
2207
+ }));
2208
+ return { settled };
2209
+ }
2210
+ if (external) throw new Error("An operation is already running");
2211
+ const content = typeof message === "string" ? message : message.content;
2212
+ const submit = async (draft) => {
2213
+ try {
2214
+ return await writable(() => conversation.submit(draft, context));
2215
+ } catch (error) {
2216
+ const accepted = await storage.storage.submissionByRequest(conversation.id, draft.requestId, context);
2217
+ const submission = accepted && await harness.submission(accepted.id, context);
2218
+ if (!submission) throw error;
2219
+ return submission;
2220
+ }
2221
+ };
2222
+ admittingInternal.add(requestId);
2223
+ let envelope;
2224
+ let submission;
2225
+ try {
2226
+ await changeRecord((r) => {
2227
+ (r.internalDeliveries ??= {})[requestId] = deliveryRecord;
2228
+ });
2229
+ envelope = typeof message !== "string" && message.role === "custom" ? await submit({
2230
+ type: "write",
2231
+ requestId: `${requestId}:message`,
2232
+ entry: {
2233
+ kind: "po.entry",
2234
+ data: json({
2235
+ type: "message",
2236
+ message,
2237
+ timestamp: message.timestamp,
2238
+ inputRequestId: requestId
2239
+ })
2240
+ }
2241
+ }) : void 0;
2242
+ submission = await submit({
2243
+ type: "input",
2244
+ content,
2245
+ whenBusy: delivery,
2246
+ requestId
2247
+ });
2248
+ await changeRecord((r) => {
2249
+ const item = r.internalDeliveries?.[requestId];
2250
+ if (item) item.submissionId = submission.id;
2251
+ });
2252
+ } finally {
2253
+ admittingInternal.delete(requestId);
2254
+ }
2255
+ let pendingDelivery = internalDelivery.get(submission.id);
2256
+ if (!pendingDelivery) {
2257
+ let resolveDelivery;
2258
+ pendingDelivery = {
2259
+ done: new Promise((resolve) => {
2260
+ resolveDelivery = resolve;
2261
+ }),
2262
+ resolve: resolveDelivery
2263
+ };
2264
+ internalDelivery.set(submission.id, pendingDelivery);
2265
+ }
2266
+ if (deliveredInputs.has(submission.id)) pendingDelivery.resolve();
2267
+ const delivered = pendingDelivery.done;
2268
+ const settled = (async () => {
2269
+ try {
2270
+ const status = await submission.wait(context);
2271
+ if (status.status === "unanswered" && status.entry === void 0) {
2272
+ await conversation.waitForIdle(context);
2273
+ await reconcileInternal(requestId, deliveryRecord);
2274
+ }
2275
+ if (envelope && (await envelope.wait(context)).status !== "done") throw new Error("Internal message journal write failed");
2276
+ if (status.status === "done" || status.entry !== void 0) {
2277
+ if (!(await harness.snapshot(_earendil_works_pi_durable.LiveDoc, deliveryRecord.conversationId, context))?.run?.inputs.some((id) => String(id) === String(submission.id))) pendingDelivery.resolve();
2278
+ await delivered;
2279
+ }
2280
+ await eventsSettled;
2281
+ await reconcileInternal(requestId, deliveryRecord);
2282
+ } finally {
2283
+ internalDelivery.delete(submission.id);
2284
+ }
2285
+ })();
2286
+ settled.catch((error) => emit({
2287
+ type: "error",
2288
+ code: "internal_message",
2289
+ error: String(error)
2290
+ }));
2291
+ return { settled };
2292
+ },
2293
+ steer: async (message, images) => {
2294
+ if (typeof message !== "string" && message.role !== "user") throw new Error("Only user messages can steer an agent run");
2295
+ await submitUserPrompt(message, images, void 0, "steer");
2296
+ },
2297
+ followUp: (message, images) => queued(message, images, "followUp"),
2298
+ nextRun: (message, images) => queued(message, images, "nextRun"),
2299
+ abort,
2300
+ interrupt,
2301
+ async compact(instructions) {
2302
+ guardUserAdmission();
2303
+ if (external || compactionAdmission) throw new Error("An operation is already running");
2304
+ compactionAdmission = true;
2305
+ const previous = settings;
2306
+ try {
2307
+ if (await execution()) throw new Error("An operation is already running");
2308
+ settings = {
2309
+ ...settings,
2310
+ compaction: {
2311
+ ...settings.compaction,
2312
+ keepRecentTokens: 0
2313
+ }
2314
+ };
2315
+ const task = await writable(() => conversation.compact(instructions, context));
2316
+ const receipt = await harness.waitForTask(task, context);
2317
+ await eventsSettled;
2318
+ if ([
2319
+ "failed",
2320
+ "faulted",
2321
+ "orphaned"
2322
+ ].includes(receipt.state.outcome.status)) throw new Error("Compaction failed");
2323
+ } finally {
2324
+ settings = previous;
2325
+ compactionAdmission = false;
2326
+ }
2327
+ },
2328
+ async admitResume() {
2329
+ await recover();
2330
+ const resumed = !!await execution();
2331
+ harness.resume();
2332
+ const settled = (async () => {
2333
+ await conversation.waitForIdle(context);
2334
+ await eventsSettled;
2335
+ await drain();
2336
+ })();
2337
+ settled.catch((error) => emit({
2338
+ type: "error",
2339
+ code: "resume",
2340
+ error: String(error)
2341
+ }));
2342
+ return {
2343
+ resumed,
2344
+ settled
2345
+ };
2346
+ },
2347
+ async resume() {
2348
+ await recover();
2349
+ const resumed = !!await execution();
2350
+ harness.resume();
2351
+ if (resumed) {
2352
+ await conversation.waitForIdle(context);
2353
+ await eventsSettled;
2354
+ }
2355
+ drain().catch((error) => emit({
2356
+ type: "error",
2357
+ error: String(error)
2358
+ }));
2359
+ return resumed;
2360
+ },
2361
+ dispose
2362
+ };
2363
+ } catch (error) {
2364
+ const failures = [error];
2365
+ try {
2366
+ if (startupHarness) await startupHarness.close(context);
2367
+ else await storage.storage.close(context);
2368
+ } catch (closeError) {
2369
+ failures.push(closeError);
2370
+ }
2371
+ if (failures.length === 1) try {
2372
+ await storage.repository?.close(context);
2373
+ await storage.historyLease?.release();
2374
+ } catch (closeError) {
2375
+ failures.push(closeError);
2376
+ }
2377
+ if (failures.length > 1) throw new AggregateError(failures, "Direct harness startup and cleanup failed");
2378
+ throw error;
2379
+ }
2380
+ }
2381
+ //#endregion
2382
+ exports.AGENT_SETTLED_ENTRY_TYPE = AGENT_SETTLED_ENTRY_TYPE;
2383
+ exports.createDirectHarnessRuntime = createDirectHarnessRuntime;
2384
+ exports.projectDurableConversationEntries = projectDurableConversationEntries;
2385
+ exports.promptForAssistantText = promptForAssistantText;
2386
+
2387
+ //# sourceMappingURL=directHarnessRuntime.cjs.map