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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1149) hide show
  1. package/LICENSE +149 -21
  2. package/NOTICE +41 -0
  3. package/dist/agentModel.cjs +1 -1
  4. package/dist/agentModel.d.mts +2 -2
  5. package/dist/agentModel.mjs +1 -2
  6. package/dist/apiContracts.cjs +623 -802
  7. package/dist/apiContracts.cjs.map +1 -1
  8. package/dist/apiContracts.d.mts +277 -615
  9. package/dist/apiContracts.d.mts.map +1 -1
  10. package/dist/apiContracts.mjs +617 -794
  11. package/dist/apiContracts.mjs.map +1 -1
  12. package/dist/askUser.cjs +2 -2
  13. package/dist/askUser.d.mts +2 -2
  14. package/dist/askUser.mjs +1 -2
  15. package/dist/authorTools.mjs +1 -2
  16. package/dist/backgroundWork.cjs +3 -3
  17. package/dist/backgroundWork.d.mts +2 -2
  18. package/dist/backgroundWork.mjs +1 -2
  19. package/dist/bundleAssetPolicy.mjs +1 -2
  20. package/dist/chatgptAuth.cjs +3 -2
  21. package/dist/chatgptAuth.d.mts +3 -2
  22. package/dist/chatgptAuth.mjs +2 -1
  23. package/dist/childProcess.cjs +1 -1
  24. package/dist/childProcess.d.mts +2 -2
  25. package/dist/childProcess.mjs +1 -2
  26. package/dist/childSession.cjs +11 -6
  27. package/dist/childSession.d.mts +3 -3
  28. package/dist/childSession.mjs +3 -3
  29. package/dist/cockpitContainer.mjs +1 -2
  30. package/dist/config.cjs +1 -1
  31. package/dist/config.d.mts +3 -3
  32. package/dist/config.mjs +1 -2
  33. package/dist/contextApi.cjs +1 -0
  34. package/dist/contextApi.d.mts +2 -2
  35. package/dist/contextApi.mjs +2 -2
  36. package/dist/contextContributions.cjs +4 -4
  37. package/dist/contextContributions.d.mts +3 -3
  38. package/dist/contextContributions.mjs +3 -3
  39. package/dist/contextDetailStore.cjs +7 -5
  40. package/dist/contextDetailStore.cjs.map +1 -1
  41. package/dist/contextDetailStore.d.mts +2 -1
  42. package/dist/contextDetailStore.d.mts.map +1 -1
  43. package/dist/contextDetailStore.mjs +6 -4
  44. package/dist/contextDetailStore.mjs.map +1 -1
  45. package/dist/contextProjection.cjs +7 -2
  46. package/dist/contextProjection.cjs.map +1 -1
  47. package/dist/contextProjection.d.mts +4 -1
  48. package/dist/contextProjection.d.mts.map +1 -1
  49. package/dist/contextProjection.mjs +5 -2
  50. package/dist/contextProjection.mjs.map +1 -1
  51. package/dist/cordisHost.cjs +11 -11
  52. package/dist/cordisHost.d.mts +2 -2
  53. package/dist/cordisHost.mjs +1 -2
  54. package/dist/delegation.cjs +8 -8
  55. package/dist/delegation.d.mts +2 -2
  56. package/dist/delegation.mjs +1 -2
  57. package/dist/executionBudget.cjs +4 -3
  58. package/dist/executionBudget.cjs.map +1 -1
  59. package/dist/executionBudget.d.mts +2 -2
  60. package/dist/executionBudget.d.mts.map +1 -1
  61. package/dist/executionBudget.mjs +4 -3
  62. package/dist/executionBudget.mjs.map +1 -1
  63. package/dist/extensionFile.cjs +5 -0
  64. package/dist/extensionFile.d.mts +4 -2
  65. package/dist/extensionFile.mjs +4 -2
  66. package/dist/footer.d.mts +2 -2
  67. package/dist/footer.mjs +1 -2
  68. package/dist/headless.cjs +14 -14
  69. package/dist/headless.d.mts +2 -2
  70. package/dist/headless.mjs +1 -2
  71. package/dist/headlessHub.cjs +308 -109
  72. package/dist/headlessHub.cjs.map +1 -1
  73. package/dist/headlessHub.d.mts +71 -36
  74. package/dist/headlessHub.d.mts.map +1 -1
  75. package/dist/headlessHub.mjs +309 -110
  76. package/dist/headlessHub.mjs.map +1 -1
  77. package/dist/headlessProtocol.cjs +327 -0
  78. package/dist/headlessProtocol.cjs.map +1 -0
  79. package/dist/headlessProtocol.d.mts +30 -0
  80. package/dist/headlessProtocol.d.mts.map +1 -0
  81. package/dist/headlessProtocol.mjs +326 -0
  82. package/dist/headlessProtocol.mjs.map +1 -0
  83. package/dist/headlessServer.cjs +166 -151
  84. package/dist/headlessServer.cjs.map +1 -1
  85. package/dist/headlessServer.d.mts +13 -5
  86. package/dist/headlessServer.d.mts.map +1 -1
  87. package/dist/headlessServer.mjs +166 -151
  88. package/dist/headlessServer.mjs.map +1 -1
  89. package/dist/headlessSessionHost.d.mts +58 -21
  90. package/dist/headlessSessionHost.d.mts.map +1 -1
  91. package/dist/help.cjs +20 -20
  92. package/dist/help.d.mts +2 -2
  93. package/dist/help.mjs +2 -2
  94. package/dist/history.cjs +16 -20
  95. package/dist/history.d.mts +9 -7
  96. package/dist/history.mjs +6 -7
  97. package/dist/historyOwnership.cjs.map +1 -1
  98. package/dist/historyOwnership.d.mts +1 -1
  99. package/dist/historyOwnership.mjs.map +1 -1
  100. package/dist/hubChannel.cjs +9 -0
  101. package/dist/hubChannel.d.mts +3 -2
  102. package/dist/hubChannel.mjs +3 -2
  103. package/dist/index.cjs +26 -28
  104. package/dist/index.d.mts +6 -6
  105. package/dist/index.mjs +6 -6
  106. package/dist/interop/chord.mjs +1 -0
  107. package/dist/interop/chordContext.mjs +1 -0
  108. package/dist/json.cjs +11 -5
  109. package/dist/json.d.mts +4 -2
  110. package/dist/json.mjs +4 -2
  111. package/dist/kernel.cjs +1 -1
  112. package/dist/kernel.d.mts +3 -3
  113. package/dist/kernel.mjs +1 -2
  114. package/dist/leader.d.mts +2 -2
  115. package/dist/leader.mjs +1 -2
  116. package/dist/logSinkTelemetry.mjs +1 -2
  117. package/dist/machineApi.cjs +80 -74
  118. package/dist/machineApi.cjs.map +1 -1
  119. package/dist/machineApi.d.mts +5 -2
  120. package/dist/machineApi.d.mts.map +1 -1
  121. package/dist/machineApi.mjs +78 -71
  122. package/dist/machineApi.mjs.map +1 -1
  123. package/dist/main.cjs +2 -1
  124. package/dist/main.d.mts +2 -1
  125. package/dist/main.mjs +2 -1
  126. package/dist/mcpFacet.d.mts +3 -3
  127. package/dist/mcpProjection.cjs +13 -13
  128. package/dist/mcpProjection.d.mts +2 -2
  129. package/dist/mcpProjection.mjs +1 -2
  130. package/dist/mcpSchemaCost.cjs +4 -4
  131. package/dist/mcpSchemaCost.cjs.map +1 -1
  132. package/dist/mcpSchemaCost.d.mts +2 -2
  133. package/dist/mcpSchemaCost.mjs +4 -4
  134. package/dist/mcpSchemaCost.mjs.map +1 -1
  135. package/dist/mcpSession.cjs +7 -7
  136. package/dist/mcpSession.d.mts +2 -2
  137. package/dist/mcpSession.mjs +1 -2
  138. package/dist/mcpStatus.cjs +2 -2
  139. package/dist/mcpStatus.d.mts +2 -2
  140. package/dist/mcpStatus.mjs +1 -2
  141. package/dist/mcpToolResolver.cjs +3 -3
  142. package/dist/mcpToolResolver.d.mts +2 -2
  143. package/dist/mcpToolResolver.mjs +1 -2
  144. package/dist/mcpWidget.d.mts +2 -2
  145. package/dist/moduleResolution.cjs +43 -8
  146. package/dist/moduleResolution.cjs.map +1 -1
  147. package/dist/moduleResolution.d.mts +10 -1
  148. package/dist/moduleResolution.d.mts.map +1 -1
  149. package/dist/moduleResolution.mjs +40 -7
  150. package/dist/moduleResolution.mjs.map +1 -1
  151. package/dist/narration.cjs +3 -3
  152. package/dist/narration.d.mts +2 -2
  153. package/dist/narration.mjs +1 -2
  154. package/dist/native.cjs +9 -0
  155. package/dist/native.d.mts +4 -3
  156. package/dist/native.mjs +3 -2
  157. package/dist/nodePlatform.cjs +77 -0
  158. package/dist/nodePlatform.cjs.map +1 -0
  159. package/dist/nodePlatform.d.mts +17 -0
  160. package/dist/nodePlatform.d.mts.map +1 -0
  161. package/dist/nodePlatform.mjs +72 -0
  162. package/dist/nodePlatform.mjs.map +1 -0
  163. package/dist/notification.cjs +15 -15
  164. package/dist/notification.d.mts +2 -2
  165. package/dist/notification.mjs +1 -2
  166. package/dist/packageApi.cjs +11 -11
  167. package/dist/packageApi.d.mts +2 -2
  168. package/dist/packageApi.mjs +2 -2
  169. package/dist/packageApiServer.cjs +45 -27
  170. package/dist/packageApiServer.cjs.map +1 -1
  171. package/dist/packageApiServer.d.mts +36 -26
  172. package/dist/packageApiServer.d.mts.map +1 -1
  173. package/dist/packageApiServer.mjs +44 -26
  174. package/dist/packageApiServer.mjs.map +1 -1
  175. package/dist/piSettings.cjs +41 -20
  176. package/dist/piSettings.d.mts +4 -2
  177. package/dist/piSettings.mjs +4 -2
  178. package/dist/platform.cjs +62 -0
  179. package/dist/platform.d.mts +10 -0
  180. package/dist/platform.mjs +10 -0
  181. package/dist/pluginProtocol.cjs +7 -8
  182. package/dist/pluginProtocol.d.mts +2 -2
  183. package/dist/pluginProtocol.mjs +1 -2
  184. package/dist/poPackage.cjs +12 -0
  185. package/dist/poPackage.d.mts +3 -0
  186. package/dist/poPackage.mjs +3 -0
  187. package/dist/profileIdentity.cjs +1 -1
  188. package/dist/profileIdentity.d.mts +2 -2
  189. package/dist/profileIdentity.mjs +1 -2
  190. package/dist/protocol.cjs +3 -3
  191. package/dist/protocol.d.mts +2 -2
  192. package/dist/protocol.mjs +1 -2
  193. package/dist/readiness.cjs +6 -6
  194. package/dist/readiness.d.mts +2 -2
  195. package/dist/readiness.mjs +1 -2
  196. package/dist/remoteApi.cjs.map +1 -1
  197. package/dist/remoteApi.d.mts +2 -2
  198. package/dist/remoteApi.mjs.map +1 -1
  199. package/dist/remoteRuntime.cjs +42 -65
  200. package/dist/remoteRuntime.cjs.map +1 -1
  201. package/dist/remoteRuntime.d.mts +3 -2
  202. package/dist/remoteRuntime.d.mts.map +1 -1
  203. package/dist/remoteRuntime.mjs +41 -62
  204. package/dist/remoteRuntime.mjs.map +1 -1
  205. package/dist/runtimeConfig.cjs +4 -4
  206. package/dist/runtimeConfig.cjs.map +1 -1
  207. package/dist/runtimeConfig.d.mts +10 -9
  208. package/dist/runtimeConfig.d.mts.map +1 -1
  209. package/dist/runtimeConfig.mjs +4 -4
  210. package/dist/runtimeConfig.mjs.map +1 -1
  211. package/dist/runtimeContextApi.cjs +10 -3
  212. package/dist/runtimeContextApi.cjs.map +1 -1
  213. package/dist/runtimeContextApi.d.mts +3 -3
  214. package/dist/runtimeContextApi.d.mts.map +1 -1
  215. package/dist/runtimeContextApi.mjs +10 -3
  216. package/dist/runtimeContextApi.mjs.map +1 -1
  217. package/dist/runtimeCordisHost.cjs +46 -46
  218. package/dist/runtimeCordisHost.cjs.map +1 -1
  219. package/dist/runtimeCordisHost.d.mts +29 -28
  220. package/dist/runtimeCordisHost.d.mts.map +1 -1
  221. package/dist/runtimeCordisHost.mjs +42 -42
  222. package/dist/runtimeCordisHost.mjs.map +1 -1
  223. package/dist/runtimeIdentity.cjs +6 -9
  224. package/dist/runtimeIdentity.cjs.map +1 -1
  225. package/dist/runtimeIdentity.d.mts +5 -1
  226. package/dist/runtimeIdentity.d.mts.map +1 -1
  227. package/dist/runtimeIdentity.mjs +5 -8
  228. package/dist/runtimeIdentity.mjs.map +1 -1
  229. package/dist/runtimeJson.cjs +10 -45
  230. package/dist/runtimeJson.d.mts +3 -22
  231. package/dist/runtimeJson.mjs +3 -39
  232. package/dist/runtimeLogSinkTelemetry.cjs +19 -19
  233. package/dist/runtimeLogSinkTelemetry.cjs.map +1 -1
  234. package/dist/runtimeLogSinkTelemetry.d.mts +19 -19
  235. package/dist/runtimeLogSinkTelemetry.mjs +19 -19
  236. package/dist/runtimeLogSinkTelemetry.mjs.map +1 -1
  237. package/dist/runtimePackages.cjs +7 -2
  238. package/dist/runtimePackages.cjs.map +1 -1
  239. package/dist/runtimePackages.d.mts +4 -1
  240. package/dist/runtimePackages.d.mts.map +1 -1
  241. package/dist/runtimePackages.mjs +7 -2
  242. package/dist/runtimePackages.mjs.map +1 -1
  243. package/dist/runtimePiSettings.cjs +40 -263
  244. package/dist/runtimePiSettings.d.mts +3 -72
  245. package/dist/runtimePiSettings.mjs +3 -241
  246. package/dist/runtimeProtocol.cjs +19 -19
  247. package/dist/runtimeProtocol.cjs.map +1 -1
  248. package/dist/runtimeProtocol.d.mts +7 -7
  249. package/dist/runtimeProtocol.d.mts.map +1 -1
  250. package/dist/runtimeProtocol.mjs +17 -17
  251. package/dist/runtimeProtocol.mjs.map +1 -1
  252. package/dist/runtimeTransition.cjs +9 -9
  253. package/dist/runtimeTransition.cjs.map +1 -1
  254. package/dist/runtimeTransition.d.mts +10 -10
  255. package/dist/runtimeTransition.d.mts.map +1 -1
  256. package/dist/runtimeTransition.mjs +7 -7
  257. package/dist/runtimeTransition.mjs.map +1 -1
  258. package/dist/sandboxHarness.mjs +1 -2
  259. package/dist/server.cjs +3 -7
  260. package/dist/server.d.mts +6 -6
  261. package/dist/server.mjs +3 -4
  262. package/dist/serverPlugin.cjs +39 -0
  263. package/dist/serverPlugin.d.mts +12 -0
  264. package/dist/serverPlugin.mjs +11 -0
  265. package/dist/serverTelemetry.cjs +1 -1
  266. package/dist/serverTelemetry.cjs.map +1 -1
  267. package/dist/serverTelemetry.d.mts +2 -2
  268. package/dist/serverTelemetry.mjs +2 -2
  269. package/dist/serverTelemetry.mjs.map +1 -1
  270. package/dist/sessionFilesApi.cjs +41 -37
  271. package/dist/sessionFilesApi.cjs.map +1 -1
  272. package/dist/sessionFilesApi.d.mts +6 -3
  273. package/dist/sessionFilesApi.d.mts.map +1 -1
  274. package/dist/sessionFilesApi.mjs +41 -36
  275. package/dist/sessionFilesApi.mjs.map +1 -1
  276. package/dist/sessionProtocol.cjs +31 -6
  277. package/dist/sessionProtocol.d.mts +8 -3
  278. package/dist/sessionProtocol.mjs +8 -2
  279. package/dist/skills.cjs +5 -5
  280. package/dist/skills.d.mts +2 -2
  281. package/dist/skills.mjs +1 -2
  282. package/dist/sqliteSessionStorage.cjs +28 -50
  283. package/dist/sqliteSessionStorage.cjs.map +1 -1
  284. package/dist/sqliteSessionStorage.d.mts +13 -20
  285. package/dist/sqliteSessionStorage.d.mts.map +1 -1
  286. package/dist/sqliteSessionStorage.mjs +25 -48
  287. package/dist/sqliteSessionStorage.mjs.map +1 -1
  288. package/dist/src/constants/agentSettled.cjs +7 -0
  289. package/dist/src/constants/agentSettled.cjs.map +1 -0
  290. package/dist/src/constants/agentSettled.mjs +7 -0
  291. package/dist/src/constants/agentSettled.mjs.map +1 -0
  292. package/dist/src/constants/contextApi.cjs +3 -1
  293. package/dist/src/constants/contextApi.cjs.map +1 -1
  294. package/dist/src/constants/contextApi.d.mts +2 -1
  295. package/dist/src/constants/contextApi.d.mts.map +1 -1
  296. package/dist/src/constants/contextApi.mjs +3 -2
  297. package/dist/src/constants/contextApi.mjs.map +1 -1
  298. package/dist/src/constants/voiceTools.cjs +6 -6
  299. package/dist/src/constants/voiceTools.cjs.map +1 -1
  300. package/dist/src/constants/voiceTools.d.mts +3 -3
  301. package/dist/src/constants/voiceTools.mjs +4 -4
  302. package/dist/src/constants/voiceTools.mjs.map +1 -1
  303. package/dist/src/extensions/extensionFile.cjs +22 -5
  304. package/dist/src/extensions/extensionFile.cjs.map +1 -1
  305. package/dist/src/extensions/extensionFile.d.mts +17 -4
  306. package/dist/src/extensions/extensionFile.d.mts.map +1 -1
  307. package/dist/src/extensions/extensionFile.mjs +22 -6
  308. package/dist/src/extensions/extensionFile.mjs.map +1 -1
  309. package/dist/src/extensions/serverPlugin.cjs +231 -92
  310. package/dist/src/extensions/serverPlugin.cjs.map +1 -1
  311. package/dist/src/extensions/serverPlugin.d.mts +2 -2
  312. package/dist/src/extensions/serverPlugin.d.mts.map +1 -1
  313. package/dist/src/extensions/serverPlugin.mjs +232 -93
  314. package/dist/src/extensions/serverPlugin.mjs.map +1 -1
  315. package/dist/src/pi/piSessionRuntime.cjs +349 -142
  316. package/dist/src/pi/piSessionRuntime.cjs.map +1 -1
  317. package/dist/src/pi/piSessionRuntime.d.mts +18 -17
  318. package/dist/src/pi/piSessionRuntime.d.mts.map +1 -1
  319. package/dist/src/pi/piSessionRuntime.mjs +342 -135
  320. package/dist/src/pi/piSessionRuntime.mjs.map +1 -1
  321. package/dist/src/schemas/agentModel.cjs +2 -2
  322. package/dist/src/schemas/agentModel.cjs.map +1 -1
  323. package/dist/src/schemas/agentModel.d.mts +1 -1
  324. package/dist/src/schemas/agentModel.mjs +2 -2
  325. package/dist/src/schemas/agentModel.mjs.map +1 -1
  326. package/dist/src/schemas/apiContracts.d.mts +2 -2
  327. package/dist/src/schemas/apiContracts.d.mts.map +1 -1
  328. package/dist/src/schemas/askUser.cjs +4 -4
  329. package/dist/src/schemas/askUser.cjs.map +1 -1
  330. package/dist/src/schemas/askUser.d.mts +4 -4
  331. package/dist/src/schemas/askUser.d.mts.map +1 -1
  332. package/dist/src/schemas/askUser.mjs +3 -3
  333. package/dist/src/schemas/askUser.mjs.map +1 -1
  334. package/dist/src/schemas/backgroundWork.cjs +10 -10
  335. package/dist/src/schemas/backgroundWork.cjs.map +1 -1
  336. package/dist/src/schemas/backgroundWork.d.mts +9 -9
  337. package/dist/src/schemas/backgroundWork.d.mts.map +1 -1
  338. package/dist/src/schemas/backgroundWork.mjs +8 -8
  339. package/dist/src/schemas/backgroundWork.mjs.map +1 -1
  340. package/dist/src/schemas/childProcess.cjs +5 -5
  341. package/dist/src/schemas/childProcess.cjs.map +1 -1
  342. package/dist/src/schemas/childProcess.d.mts +2 -2
  343. package/dist/src/schemas/childProcess.mjs +5 -5
  344. package/dist/src/schemas/childProcess.mjs.map +1 -1
  345. package/dist/src/schemas/contextContributions.cjs +10 -10
  346. package/dist/src/schemas/contextContributions.cjs.map +1 -1
  347. package/dist/src/schemas/contextContributions.d.mts +16 -16
  348. package/dist/src/schemas/contextContributions.d.mts.map +1 -1
  349. package/dist/src/schemas/contextContributions.mjs +8 -8
  350. package/dist/src/schemas/contextContributions.mjs.map +1 -1
  351. package/dist/src/schemas/delegation.cjs +17 -17
  352. package/dist/src/schemas/delegation.cjs.map +1 -1
  353. package/dist/src/schemas/delegation.d.mts +16 -16
  354. package/dist/src/schemas/delegation.d.mts.map +1 -1
  355. package/dist/src/schemas/delegation.mjs +10 -10
  356. package/dist/src/schemas/delegation.mjs.map +1 -1
  357. package/dist/src/schemas/extensionFile.d.mts +23 -19
  358. package/dist/src/schemas/extensionFile.d.mts.map +1 -1
  359. package/dist/src/schemas/footer.cjs.map +1 -1
  360. package/dist/src/schemas/footer.d.mts +5 -5
  361. package/dist/src/schemas/footer.d.mts.map +1 -1
  362. package/dist/src/schemas/footer.mjs.map +1 -1
  363. package/dist/src/schemas/headless.cjs +37 -37
  364. package/dist/src/schemas/headless.cjs.map +1 -1
  365. package/dist/src/schemas/headless.d.mts +100 -101
  366. package/dist/src/schemas/headless.d.mts.map +1 -1
  367. package/dist/src/schemas/headless.mjs +24 -24
  368. package/dist/src/schemas/headless.mjs.map +1 -1
  369. package/dist/src/schemas/help.cjs +60 -60
  370. package/dist/src/schemas/help.cjs.map +1 -1
  371. package/dist/src/schemas/help.d.mts +43 -43
  372. package/dist/src/schemas/help.d.mts.map +1 -1
  373. package/dist/src/schemas/help.mjs +41 -41
  374. package/dist/src/schemas/help.mjs.map +1 -1
  375. package/dist/src/schemas/home.cjs +127 -0
  376. package/dist/src/schemas/home.cjs.map +1 -0
  377. package/dist/src/schemas/home.d.mts +63 -0
  378. package/dist/src/schemas/home.d.mts.map +1 -0
  379. package/dist/src/schemas/home.mjs +121 -0
  380. package/dist/src/schemas/home.mjs.map +1 -0
  381. package/dist/src/schemas/httpApiContracts.cjs +441 -0
  382. package/dist/src/schemas/httpApiContracts.cjs.map +1 -0
  383. package/dist/src/schemas/httpApiContracts.d.mts +78 -0
  384. package/dist/src/schemas/httpApiContracts.d.mts.map +1 -0
  385. package/dist/src/schemas/httpApiContracts.mjs +434 -0
  386. package/dist/src/schemas/httpApiContracts.mjs.map +1 -0
  387. package/dist/src/schemas/hubChannel.cjs +3 -0
  388. package/dist/src/schemas/hubChannel.cjs.map +1 -1
  389. package/dist/src/schemas/hubChannel.d.mts +84 -60
  390. package/dist/src/schemas/hubChannel.d.mts.map +1 -1
  391. package/dist/src/schemas/hubChannel.mjs +3 -1
  392. package/dist/src/schemas/hubChannel.mjs.map +1 -1
  393. package/dist/src/schemas/leader.cjs.map +1 -1
  394. package/dist/src/schemas/leader.d.mts +3 -3
  395. package/dist/src/schemas/leader.d.mts.map +1 -1
  396. package/dist/src/schemas/leader.mjs.map +1 -1
  397. package/dist/src/schemas/mcpBundle.d.mts +3 -3
  398. package/dist/src/schemas/mcpFacet.cjs.map +1 -1
  399. package/dist/src/schemas/mcpFacet.d.mts +22 -22
  400. package/dist/src/schemas/mcpFacet.d.mts.map +1 -1
  401. package/dist/src/schemas/mcpFacet.mjs.map +1 -1
  402. package/dist/src/schemas/mcpProjection.cjs +41 -41
  403. package/dist/src/schemas/mcpProjection.cjs.map +1 -1
  404. package/dist/src/schemas/mcpProjection.d.mts +31 -30
  405. package/dist/src/schemas/mcpProjection.d.mts.map +1 -1
  406. package/dist/src/schemas/mcpProjection.mjs +29 -29
  407. package/dist/src/schemas/mcpProjection.mjs.map +1 -1
  408. package/dist/src/schemas/mcpSession.cjs +23 -23
  409. package/dist/src/schemas/mcpSession.cjs.map +1 -1
  410. package/dist/src/schemas/mcpSession.d.mts +12 -12
  411. package/dist/src/schemas/mcpSession.d.mts.map +1 -1
  412. package/dist/src/schemas/mcpSession.mjs +18 -18
  413. package/dist/src/schemas/mcpSession.mjs.map +1 -1
  414. package/dist/src/schemas/mcpStatus.cjs +5 -5
  415. package/dist/src/schemas/mcpStatus.cjs.map +1 -1
  416. package/dist/src/schemas/mcpStatus.d.mts +4 -4
  417. package/dist/src/schemas/mcpStatus.d.mts.map +1 -1
  418. package/dist/src/schemas/mcpStatus.mjs +4 -4
  419. package/dist/src/schemas/mcpStatus.mjs.map +1 -1
  420. package/dist/src/schemas/mcpToolResolver.cjs +9 -9
  421. package/dist/src/schemas/mcpToolResolver.cjs.map +1 -1
  422. package/dist/src/schemas/mcpToolResolver.d.mts +7 -7
  423. package/dist/src/schemas/mcpToolResolver.d.mts.map +1 -1
  424. package/dist/src/schemas/mcpToolResolver.mjs +7 -7
  425. package/dist/src/schemas/mcpToolResolver.mjs.map +1 -1
  426. package/dist/src/schemas/narration.cjs +9 -9
  427. package/dist/src/schemas/narration.cjs.map +1 -1
  428. package/dist/src/schemas/narration.d.mts +5 -5
  429. package/dist/src/schemas/narration.d.mts.map +1 -1
  430. package/dist/src/schemas/narration.mjs +7 -7
  431. package/dist/src/schemas/narration.mjs.map +1 -1
  432. package/dist/src/schemas/notification.cjs +45 -45
  433. package/dist/src/schemas/notification.cjs.map +1 -1
  434. package/dist/src/schemas/notification.d.mts +22 -22
  435. package/dist/src/schemas/notification.d.mts.map +1 -1
  436. package/dist/src/schemas/notification.mjs +31 -31
  437. package/dist/src/schemas/notification.mjs.map +1 -1
  438. package/dist/src/schemas/packageApi.cjs +28 -28
  439. package/dist/src/schemas/packageApi.cjs.map +1 -1
  440. package/dist/src/schemas/packageApi.d.mts +91 -65
  441. package/dist/src/schemas/packageApi.d.mts.map +1 -1
  442. package/dist/src/schemas/packageApi.mjs +18 -18
  443. package/dist/src/schemas/packageApi.mjs.map +1 -1
  444. package/dist/src/schemas/platform.cjs +34 -0
  445. package/dist/src/schemas/platform.cjs.map +1 -0
  446. package/dist/src/schemas/platform.d.mts +75 -0
  447. package/dist/src/schemas/platform.d.mts.map +1 -0
  448. package/dist/src/schemas/platform.mjs +27 -0
  449. package/dist/src/schemas/platform.mjs.map +1 -0
  450. package/dist/src/schemas/pluginContributions.cjs.map +1 -1
  451. package/dist/src/schemas/pluginContributions.d.mts +12 -12
  452. package/dist/src/schemas/pluginContributions.d.mts.map +1 -1
  453. package/dist/src/schemas/pluginContributions.mjs.map +1 -1
  454. package/dist/src/schemas/pluginProtocol.cjs +24 -27
  455. package/dist/src/schemas/pluginProtocol.cjs.map +1 -1
  456. package/dist/src/schemas/pluginProtocol.d.mts +21 -21
  457. package/dist/src/schemas/pluginProtocol.d.mts.map +1 -1
  458. package/dist/src/schemas/pluginProtocol.mjs +18 -20
  459. package/dist/src/schemas/pluginProtocol.mjs.map +1 -1
  460. package/dist/src/schemas/profileIdentity.cjs +2 -2
  461. package/dist/src/schemas/profileIdentity.cjs.map +1 -1
  462. package/dist/src/schemas/profileIdentity.d.mts +1 -1
  463. package/dist/src/schemas/profileIdentity.mjs +2 -2
  464. package/dist/src/schemas/profileIdentity.mjs.map +1 -1
  465. package/dist/src/schemas/protocolChannelsContract.cjs +27 -0
  466. package/dist/src/schemas/protocolChannelsContract.cjs.map +1 -0
  467. package/dist/src/schemas/protocolChannelsContract.d.mts +37 -0
  468. package/dist/src/schemas/protocolChannelsContract.d.mts.map +1 -0
  469. package/dist/src/schemas/protocolChannelsContract.mjs +25 -0
  470. package/dist/src/schemas/protocolChannelsContract.mjs.map +1 -0
  471. package/dist/src/schemas/protocolContracts.cjs +168 -0
  472. package/dist/src/schemas/protocolContracts.cjs.map +1 -0
  473. package/dist/src/schemas/protocolContracts.d.mts +69 -0
  474. package/dist/src/schemas/protocolContracts.d.mts.map +1 -0
  475. package/dist/src/schemas/protocolContracts.mjs +164 -0
  476. package/dist/src/schemas/protocolContracts.mjs.map +1 -0
  477. package/dist/src/schemas/protocolHubContract.cjs +51 -0
  478. package/dist/src/schemas/protocolHubContract.cjs.map +1 -0
  479. package/dist/src/schemas/protocolHubContract.d.mts +218 -0
  480. package/dist/src/schemas/protocolHubContract.d.mts.map +1 -0
  481. package/dist/src/schemas/protocolHubContract.mjs +49 -0
  482. package/dist/src/schemas/protocolHubContract.mjs.map +1 -0
  483. package/dist/src/schemas/protocolSessionContract.cjs +22 -0
  484. package/dist/src/schemas/protocolSessionContract.cjs.map +1 -0
  485. package/dist/src/schemas/protocolSessionContract.d.mts +324 -0
  486. package/dist/src/schemas/protocolSessionContract.d.mts.map +1 -0
  487. package/dist/src/schemas/protocolSessionContract.mjs +22 -0
  488. package/dist/src/schemas/protocolSessionContract.mjs.map +1 -0
  489. package/dist/src/schemas/protocolThreadContract.cjs +21 -0
  490. package/dist/src/schemas/protocolThreadContract.cjs.map +1 -0
  491. package/dist/src/schemas/protocolThreadContract.d.mts +29 -0
  492. package/dist/src/schemas/protocolThreadContract.d.mts.map +1 -0
  493. package/dist/src/schemas/protocolThreadContract.mjs +20 -0
  494. package/dist/src/schemas/protocolThreadContract.mjs.map +1 -0
  495. package/dist/src/schemas/readiness.cjs +36 -36
  496. package/dist/src/schemas/readiness.cjs.map +1 -1
  497. package/dist/src/schemas/readiness.d.mts +37 -37
  498. package/dist/src/schemas/readiness.d.mts.map +1 -1
  499. package/dist/src/schemas/readiness.mjs +31 -31
  500. package/dist/src/schemas/readiness.mjs.map +1 -1
  501. package/dist/src/schemas/serverBundle.d.mts +5 -5
  502. package/dist/src/schemas/serverPlugin.cjs +103 -0
  503. package/dist/src/schemas/serverPlugin.cjs.map +1 -0
  504. package/dist/src/schemas/serverPlugin.d.mts +176 -0
  505. package/dist/src/schemas/serverPlugin.d.mts.map +1 -0
  506. package/dist/src/schemas/serverPlugin.mjs +95 -0
  507. package/dist/src/schemas/serverPlugin.mjs.map +1 -0
  508. package/dist/src/schemas/serverScope.cjs +37 -0
  509. package/dist/src/schemas/serverScope.cjs.map +1 -0
  510. package/dist/src/schemas/serverScope.d.mts +77 -0
  511. package/dist/src/schemas/serverScope.d.mts.map +1 -0
  512. package/dist/src/schemas/serverScope.mjs +33 -0
  513. package/dist/src/schemas/serverScope.mjs.map +1 -0
  514. package/dist/src/schemas/sessionApiContracts.cjs +320 -0
  515. package/dist/src/schemas/sessionApiContracts.cjs.map +1 -0
  516. package/dist/src/schemas/sessionApiContracts.mjs +318 -0
  517. package/dist/src/schemas/sessionApiContracts.mjs.map +1 -0
  518. package/dist/src/schemas/sessionProtocol.cjs +20 -13
  519. package/dist/src/schemas/sessionProtocol.cjs.map +1 -1
  520. package/dist/src/schemas/sessionProtocol.d.mts +37 -54
  521. package/dist/src/schemas/sessionProtocol.d.mts.map +1 -1
  522. package/dist/src/schemas/sessionProtocol.mjs +17 -8
  523. package/dist/src/schemas/sessionProtocol.mjs.map +1 -1
  524. package/dist/src/schemas/skills.cjs +16 -16
  525. package/dist/src/schemas/skills.cjs.map +1 -1
  526. package/dist/src/schemas/skills.d.mts +7 -7
  527. package/dist/src/schemas/skills.d.mts.map +1 -1
  528. package/dist/src/schemas/skills.mjs +12 -12
  529. package/dist/src/schemas/skills.mjs.map +1 -1
  530. package/dist/src/schemas/toolOverrides.cjs +9 -9
  531. package/dist/src/schemas/toolOverrides.cjs.map +1 -1
  532. package/dist/src/schemas/toolOverrides.d.mts +8 -8
  533. package/dist/src/schemas/toolOverrides.d.mts.map +1 -1
  534. package/dist/src/schemas/toolOverrides.mjs +7 -7
  535. package/dist/src/schemas/toolOverrides.mjs.map +1 -1
  536. package/dist/src/schemas/toolSurface.cjs +9 -9
  537. package/dist/src/schemas/toolSurface.cjs.map +1 -1
  538. package/dist/src/schemas/toolSurface.d.mts +13 -13
  539. package/dist/src/schemas/toolSurface.d.mts.map +1 -1
  540. package/dist/src/schemas/toolSurface.mjs +7 -7
  541. package/dist/src/schemas/toolSurface.mjs.map +1 -1
  542. package/dist/src/schemas/uiHub.cjs +9 -9
  543. package/dist/src/schemas/uiHub.cjs.map +1 -1
  544. package/dist/src/schemas/uiHub.d.mts +12 -12
  545. package/dist/src/schemas/uiHub.d.mts.map +1 -1
  546. package/dist/src/schemas/uiHub.mjs +7 -7
  547. package/dist/src/schemas/uiHub.mjs.map +1 -1
  548. package/dist/src/server/directHarnessRuntime.cjs +691 -775
  549. package/dist/src/server/directHarnessRuntime.cjs.map +1 -1
  550. package/dist/src/server/directHarnessRuntime.d.mts +5 -1
  551. package/dist/src/server/directHarnessRuntime.d.mts.map +1 -0
  552. package/dist/src/server/directHarnessRuntime.mjs +671 -754
  553. package/dist/src/server/directHarnessRuntime.mjs.map +1 -1
  554. package/dist/src/server/largeFrameLink.cjs +47 -0
  555. package/dist/src/server/largeFrameLink.cjs.map +1 -0
  556. package/dist/src/server/largeFrameLink.mjs +47 -0
  557. package/dist/src/server/largeFrameLink.mjs.map +1 -0
  558. package/dist/src/server/liveImport.cjs +1 -1
  559. package/dist/src/server/liveImport.cjs.map +1 -1
  560. package/dist/src/server/liveImport.d.mts +1 -1
  561. package/dist/src/server/liveImport.mjs +1 -1
  562. package/dist/src/server/liveImport.mjs.map +1 -1
  563. package/dist/src/server/mcpBundleLoader.cjs.map +1 -1
  564. package/dist/src/server/mcpBundleLoader.d.mts +6 -6
  565. package/dist/src/server/mcpBundleLoader.d.mts.map +1 -1
  566. package/dist/src/server/mcpBundleLoader.mjs.map +1 -1
  567. package/dist/src/server/serverPackages.cjs +60 -0
  568. package/dist/src/server/serverPackages.cjs.map +1 -0
  569. package/dist/src/server/serverPackages.d.mts +44 -0
  570. package/dist/src/server/serverPackages.d.mts.map +1 -0
  571. package/dist/src/server/serverPackages.mjs +59 -0
  572. package/dist/src/server/serverPackages.mjs.map +1 -0
  573. package/dist/src/server/serverScope.cjs +510 -0
  574. package/dist/src/server/serverScope.cjs.map +1 -0
  575. package/dist/src/server/serverScope.d.mts +123 -0
  576. package/dist/src/server/serverScope.d.mts.map +1 -0
  577. package/dist/src/server/serverScope.mjs +510 -0
  578. package/dist/src/server/serverScope.mjs.map +1 -0
  579. package/dist/src/server/sessionMcpHandler.cjs +3 -3
  580. package/dist/src/server/sessionMcpHandler.cjs.map +1 -1
  581. package/dist/src/server/sessionMcpHandler.mjs +4 -4
  582. package/dist/src/server/sessionMcpHandler.mjs.map +1 -1
  583. package/dist/src/server/sessionMcpRoutes.cjs +2 -1
  584. package/dist/src/server/sessionMcpRoutes.cjs.map +1 -1
  585. package/dist/src/server/sessionMcpRoutes.mjs +2 -1
  586. package/dist/src/server/sessionMcpRoutes.mjs.map +1 -1
  587. package/dist/src/server/threadJournals.cjs +38 -107
  588. package/dist/src/server/threadJournals.cjs.map +1 -1
  589. package/dist/src/server/threadJournals.mjs +38 -104
  590. package/dist/src/server/threadJournals.mjs.map +1 -1
  591. package/dist/src/services/apiSurfaceAssert/index.cjs +1 -1
  592. package/dist/src/services/apiSurfaceAssert/index.cjs.map +1 -1
  593. package/dist/src/services/apiSurfaceAssert/index.d.mts +6 -6
  594. package/dist/src/services/apiSurfaceAssert/index.mjs +1 -1
  595. package/dist/src/services/apiSurfaceAssert/index.mjs.map +1 -1
  596. package/dist/src/services/chatgptAuth/index.cjs +1 -220
  597. package/dist/src/services/chatgptAuth/index.cjs.map +1 -1
  598. package/dist/src/services/chatgptAuth/index.d.mts +0 -18
  599. package/dist/src/services/chatgptAuth/index.d.mts.map +1 -1
  600. package/dist/src/services/chatgptAuth/index.mjs +1 -217
  601. package/dist/src/services/chatgptAuth/index.mjs.map +1 -1
  602. package/dist/src/services/chatgptImages/index.cjs +1 -1
  603. package/dist/src/services/chatgptImages/index.cjs.map +1 -1
  604. package/dist/src/services/chatgptImages/index.mjs +1 -1
  605. package/dist/src/services/chatgptImages/index.mjs.map +1 -1
  606. package/dist/src/services/chatgptLogin/index.cjs +230 -0
  607. package/dist/src/services/chatgptLogin/index.cjs.map +1 -0
  608. package/dist/src/services/chatgptLogin/index.d.mts +21 -0
  609. package/dist/src/services/chatgptLogin/index.d.mts.map +1 -0
  610. package/dist/src/services/chatgptLogin/index.mjs +227 -0
  611. package/dist/src/services/chatgptLogin/index.mjs.map +1 -0
  612. package/dist/src/services/chatgptWebSearch/index.cjs +1 -1
  613. package/dist/src/services/chatgptWebSearch/index.cjs.map +1 -1
  614. package/dist/src/services/chatgptWebSearch/index.mjs +1 -1
  615. package/dist/src/services/chatgptWebSearch/index.mjs.map +1 -1
  616. package/dist/src/services/contextContributions/index.cjs +8 -8
  617. package/dist/src/services/contextContributions/index.cjs.map +1 -1
  618. package/dist/src/services/contextContributions/index.d.mts +3 -3
  619. package/dist/src/services/contextContributions/index.d.mts.map +1 -1
  620. package/dist/src/services/contextContributions/index.mjs +8 -8
  621. package/dist/src/services/contextContributions/index.mjs.map +1 -1
  622. package/dist/src/services/devProxyStore/devProxyRecords.cjs +59 -0
  623. package/dist/src/services/devProxyStore/devProxyRecords.cjs.map +1 -0
  624. package/dist/src/services/devProxyStore/devProxyRecords.mjs +56 -0
  625. package/dist/src/services/devProxyStore/devProxyRecords.mjs.map +1 -0
  626. package/dist/src/services/devProxyStore/index.cjs +7 -101
  627. package/dist/src/services/devProxyStore/index.cjs.map +1 -1
  628. package/dist/src/services/devProxyStore/index.mjs +7 -101
  629. package/dist/src/services/devProxyStore/index.mjs.map +1 -1
  630. package/dist/src/services/devProxyStore/sync.cjs +66 -0
  631. package/dist/src/services/devProxyStore/sync.cjs.map +1 -0
  632. package/dist/src/services/devProxyStore/sync.mjs +63 -0
  633. package/dist/src/services/devProxyStore/sync.mjs.map +1 -0
  634. package/dist/src/services/durableNavigation/docs.cjs +15 -0
  635. package/dist/src/services/durableNavigation/docs.cjs.map +1 -0
  636. package/dist/src/services/durableNavigation/docs.mjs +16 -0
  637. package/dist/src/services/durableNavigation/docs.mjs.map +1 -0
  638. package/dist/src/services/durableNavigation/index.cjs +3 -18
  639. package/dist/src/services/durableNavigation/index.cjs.map +1 -1
  640. package/dist/src/services/durableNavigation/index.mjs +2 -17
  641. package/dist/src/services/durableNavigation/index.mjs.map +1 -1
  642. package/dist/src/services/durableQueue/docs.cjs +12 -0
  643. package/dist/src/services/durableQueue/docs.cjs.map +1 -0
  644. package/dist/src/services/durableQueue/docs.mjs +13 -0
  645. package/dist/src/services/durableQueue/docs.mjs.map +1 -0
  646. package/dist/src/services/durableQueue/index.cjs +151 -0
  647. package/dist/src/services/durableQueue/index.cjs.map +1 -0
  648. package/dist/src/services/durableQueue/index.mjs +149 -0
  649. package/dist/src/services/durableQueue/index.mjs.map +1 -0
  650. package/dist/src/services/durableRequestReceipts/docs.cjs +11 -0
  651. package/dist/src/services/durableRequestReceipts/docs.cjs.map +1 -0
  652. package/dist/src/services/durableRequestReceipts/docs.mjs +12 -0
  653. package/dist/src/services/durableRequestReceipts/docs.mjs.map +1 -0
  654. package/dist/src/services/{requestReceipts → durableRequestReceipts}/index.cjs +10 -16
  655. package/dist/src/services/durableRequestReceipts/index.cjs.map +1 -0
  656. package/dist/src/services/durableRequestReceipts/index.d.mts +12 -0
  657. package/dist/src/services/durableRequestReceipts/index.d.mts.map +1 -0
  658. package/dist/src/services/{requestReceipts → durableRequestReceipts}/index.mjs +7 -13
  659. package/dist/src/services/durableRequestReceipts/index.mjs.map +1 -0
  660. package/dist/src/services/durableSession/docs.cjs +65 -0
  661. package/dist/src/services/durableSession/docs.cjs.map +1 -0
  662. package/dist/src/services/durableSession/docs.d.mts +17 -0
  663. package/dist/src/services/durableSession/docs.d.mts.map +1 -0
  664. package/dist/src/services/durableSession/docs.mjs +60 -0
  665. package/dist/src/services/durableSession/docs.mjs.map +1 -0
  666. package/dist/src/services/durableSession/index.cjs +21 -0
  667. package/dist/src/services/durableSession/index.cjs.map +1 -0
  668. package/dist/src/services/durableSession/index.d.mts +13 -0
  669. package/dist/src/services/durableSession/index.d.mts.map +1 -0
  670. package/dist/src/services/durableSession/index.mjs +20 -0
  671. package/dist/src/services/durableSession/index.mjs.map +1 -0
  672. package/dist/src/services/durableSubagents/docs.cjs +15 -0
  673. package/dist/src/services/durableSubagents/docs.cjs.map +1 -0
  674. package/dist/src/services/durableSubagents/docs.mjs +16 -0
  675. package/dist/src/services/durableSubagents/docs.mjs.map +1 -0
  676. package/dist/src/services/durableSubagents/extension.cjs +11 -0
  677. package/dist/src/services/durableSubagents/extension.cjs.map +1 -0
  678. package/dist/src/services/durableSubagents/extension.mjs +12 -0
  679. package/dist/src/services/durableSubagents/extension.mjs.map +1 -0
  680. package/dist/src/services/durableSubagents/index.cjs +95 -0
  681. package/dist/src/services/durableSubagents/index.cjs.map +1 -0
  682. package/dist/src/services/durableSubagents/index.mjs +90 -0
  683. package/dist/src/services/durableSubagents/index.mjs.map +1 -0
  684. package/dist/src/services/durableSubagents/tasks.cjs +25 -0
  685. package/dist/src/services/durableSubagents/tasks.cjs.map +1 -0
  686. package/dist/src/services/durableSubagents/tasks.mjs +26 -0
  687. package/dist/src/services/durableSubagents/tasks.mjs.map +1 -0
  688. package/dist/src/services/headlessClient/index.cjs +20 -13
  689. package/dist/src/services/headlessClient/index.cjs.map +1 -1
  690. package/dist/src/services/headlessClient/index.mjs +21 -14
  691. package/dist/src/services/headlessClient/index.mjs.map +1 -1
  692. package/dist/src/services/historyOwnership/type.d.mts +15 -0
  693. package/dist/src/services/historyOwnership/type.d.mts.map +1 -0
  694. package/dist/src/services/hubChannelHarness/index.cjs +2 -2
  695. package/dist/src/services/hubChannelHarness/index.cjs.map +1 -1
  696. package/dist/src/services/hubChannelHarness/index.d.mts +8 -8
  697. package/dist/src/services/hubChannelHarness/index.d.mts.map +1 -1
  698. package/dist/src/services/hubChannelHarness/index.mjs +2 -2
  699. package/dist/src/services/hubChannelHarness/index.mjs.map +1 -1
  700. package/dist/src/services/json/core.cjs +30 -0
  701. package/dist/src/services/json/core.cjs.map +1 -0
  702. package/dist/src/services/json/core.d.mts +21 -0
  703. package/dist/src/services/json/core.d.mts.map +1 -0
  704. package/dist/src/services/json/core.mjs +26 -0
  705. package/dist/src/services/json/core.mjs.map +1 -0
  706. package/dist/src/services/json/sync.cjs +48 -0
  707. package/dist/src/services/json/sync.cjs.map +1 -0
  708. package/dist/src/services/json/sync.d.mts +22 -0
  709. package/dist/src/services/json/sync.d.mts.map +1 -0
  710. package/dist/src/services/json/sync.mjs +43 -0
  711. package/dist/src/services/json/sync.mjs.map +1 -0
  712. package/dist/src/services/kernel/index.cjs +2 -2
  713. package/dist/src/services/kernel/index.cjs.map +1 -1
  714. package/dist/src/services/kernel/index.d.mts +3 -3
  715. package/dist/src/services/kernel/index.d.mts.map +1 -1
  716. package/dist/src/services/kernel/index.mjs +2 -2
  717. package/dist/src/services/kernel/index.mjs.map +1 -1
  718. package/dist/src/services/nativeChildTools/index.cjs +16 -0
  719. package/dist/src/services/nativeChildTools/index.cjs.map +1 -0
  720. package/dist/src/services/nativeChildTools/index.mjs +16 -0
  721. package/dist/src/services/nativeChildTools/index.mjs.map +1 -0
  722. package/dist/src/services/nodeHost/index.cjs +30 -0
  723. package/dist/src/services/nodeHost/index.cjs.map +1 -0
  724. package/dist/src/services/nodeHost/index.d.mts +16 -0
  725. package/dist/src/services/nodeHost/index.d.mts.map +1 -0
  726. package/dist/src/services/nodeHost/index.mjs +27 -0
  727. package/dist/src/services/nodeHost/index.mjs.map +1 -0
  728. package/dist/src/services/nodeModelDependencies/index.cjs +89 -0
  729. package/dist/src/services/nodeModelDependencies/index.cjs.map +1 -0
  730. package/dist/src/services/nodeModelDependencies/index.mjs +86 -0
  731. package/dist/src/services/nodeModelDependencies/index.mjs.map +1 -0
  732. package/dist/src/services/openSessionRegistry/index.cjs +6 -128
  733. package/dist/src/services/openSessionRegistry/index.cjs.map +1 -1
  734. package/dist/src/services/openSessionRegistry/index.d.mts +5 -36
  735. package/dist/src/services/openSessionRegistry/index.mjs +6 -128
  736. package/dist/src/services/openSessionRegistry/index.mjs.map +1 -1
  737. package/dist/src/services/openSessionRegistry/openSessionRecords.cjs +87 -0
  738. package/dist/src/services/openSessionRegistry/openSessionRecords.cjs.map +1 -0
  739. package/dist/src/services/openSessionRegistry/openSessionRecords.d.mts +30 -0
  740. package/dist/src/services/openSessionRegistry/openSessionRecords.d.mts.map +1 -0
  741. package/dist/src/services/openSessionRegistry/openSessionRecords.mjs +81 -0
  742. package/dist/src/services/openSessionRegistry/openSessionRecords.mjs.map +1 -0
  743. package/dist/src/services/openSessionRegistry/sync.cjs +71 -0
  744. package/dist/src/services/openSessionRegistry/sync.cjs.map +1 -0
  745. package/dist/src/services/openSessionRegistry/sync.d.mts +14 -0
  746. package/dist/src/services/openSessionRegistry/sync.d.mts.map +1 -0
  747. package/dist/src/services/openSessionRegistry/sync.mjs +68 -0
  748. package/dist/src/services/openSessionRegistry/sync.mjs.map +1 -0
  749. package/dist/src/services/packageApiHarness/index.cjs +1 -1
  750. package/dist/src/services/packageApiHarness/index.cjs.map +1 -1
  751. package/dist/src/services/packageApiHarness/index.d.mts +6 -6
  752. package/dist/src/services/packageApiHarness/index.d.mts.map +1 -1
  753. package/dist/src/services/packageApiHarness/index.mjs +2 -2
  754. package/dist/src/services/packageApiHarness/index.mjs.map +1 -1
  755. package/dist/src/services/piArgs/index.cjs +53 -0
  756. package/dist/src/services/piArgs/index.cjs.map +1 -0
  757. package/dist/src/services/piArgs/index.d.mts +6 -0
  758. package/dist/src/services/piArgs/index.d.mts.map +1 -0
  759. package/dist/src/services/piArgs/index.mjs +53 -0
  760. package/dist/src/services/piArgs/index.mjs.map +1 -0
  761. package/dist/src/services/piExtensionHost/index.cjs +47 -39
  762. package/dist/src/services/piExtensionHost/index.cjs.map +1 -1
  763. package/dist/src/services/piExtensionHost/index.d.mts +83 -0
  764. package/dist/src/services/piExtensionHost/index.d.mts.map +1 -0
  765. package/dist/src/services/piExtensionHost/index.mjs +47 -38
  766. package/dist/src/services/piExtensionHost/index.mjs.map +1 -1
  767. package/dist/src/services/piHelpTools/index.cjs +5 -5
  768. package/dist/src/services/piHelpTools/index.cjs.map +1 -1
  769. package/dist/src/services/piHelpTools/index.d.mts.map +1 -1
  770. package/dist/src/services/piHelpTools/index.mjs +7 -7
  771. package/dist/src/services/piHelpTools/index.mjs.map +1 -1
  772. package/dist/src/services/piMessages/index.cjs +106 -0
  773. package/dist/src/services/piMessages/index.cjs.map +1 -0
  774. package/dist/src/services/piMessages/index.mjs +105 -0
  775. package/dist/src/services/piMessages/index.mjs.map +1 -0
  776. package/dist/src/services/piSessionEntries/index.cjs +4 -4
  777. package/dist/src/services/piSessionEntries/index.cjs.map +1 -1
  778. package/dist/src/services/piSessionEntries/index.mjs +3 -3
  779. package/dist/src/services/piSessionEntries/index.mjs.map +1 -1
  780. package/dist/src/services/piSettings/core.cjs +308 -0
  781. package/dist/src/services/piSettings/core.cjs.map +1 -0
  782. package/dist/src/services/piSettings/core.d.mts +102 -0
  783. package/dist/src/services/piSettings/core.d.mts.map +1 -0
  784. package/dist/src/services/piSettings/core.mjs +276 -0
  785. package/dist/src/services/piSettings/core.mjs.map +1 -0
  786. package/dist/src/services/piSettings/sync.cjs +119 -0
  787. package/dist/src/services/piSettings/sync.cjs.map +1 -0
  788. package/dist/src/services/piSettings/sync.d.mts +44 -0
  789. package/dist/src/services/piSettings/sync.d.mts.map +1 -0
  790. package/dist/src/services/piSettings/sync.mjs +110 -0
  791. package/dist/src/services/piSettings/sync.mjs.map +1 -0
  792. package/dist/src/services/piSummary/index.cjs +7 -0
  793. package/dist/src/services/piSummary/index.cjs.map +1 -0
  794. package/dist/src/services/piSummary/index.mjs +7 -0
  795. package/dist/src/services/piSummary/index.mjs.map +1 -0
  796. package/dist/src/services/platformFiles/index.cjs +44 -0
  797. package/dist/src/services/platformFiles/index.cjs.map +1 -0
  798. package/dist/src/services/platformFiles/index.d.mts +16 -0
  799. package/dist/src/services/platformFiles/index.d.mts.map +1 -0
  800. package/dist/src/services/platformFiles/index.mjs +39 -0
  801. package/dist/src/services/platformFiles/index.mjs.map +1 -0
  802. package/dist/src/services/pluginLifecycle/index.cjs +19 -13
  803. package/dist/src/services/pluginLifecycle/index.cjs.map +1 -1
  804. package/dist/src/services/pluginLifecycle/index.d.mts +2 -0
  805. package/dist/src/services/pluginLifecycle/index.d.mts.map +1 -1
  806. package/dist/src/services/pluginLifecycle/index.mjs +19 -14
  807. package/dist/src/services/pluginLifecycle/index.mjs.map +1 -1
  808. package/dist/src/services/poPackage/core.cjs +73 -0
  809. package/dist/src/services/poPackage/core.cjs.map +1 -0
  810. package/dist/src/services/poPackage/core.d.mts +32 -0
  811. package/dist/src/services/poPackage/core.d.mts.map +1 -0
  812. package/dist/src/services/poPackage/core.mjs +66 -0
  813. package/dist/src/services/poPackage/core.mjs.map +1 -0
  814. package/dist/src/services/poPackage/sync.cjs +55 -0
  815. package/dist/src/services/poPackage/sync.cjs.map +1 -0
  816. package/dist/src/services/poPackage/sync.d.mts +21 -0
  817. package/dist/src/services/poPackage/sync.d.mts.map +1 -0
  818. package/dist/src/services/poPackage/sync.mjs +50 -0
  819. package/dist/src/services/poPackage/sync.mjs.map +1 -0
  820. package/dist/src/services/providerAuth/index.cjs +11 -7
  821. package/dist/src/services/providerAuth/index.cjs.map +1 -1
  822. package/dist/src/services/providerAuth/index.mjs +11 -7
  823. package/dist/src/services/providerAuth/index.mjs.map +1 -1
  824. package/dist/src/services/publicFileShares/index.cjs +1 -1
  825. package/dist/src/services/publicFileShares/index.cjs.map +1 -1
  826. package/dist/src/services/publicFileShares/index.d.mts +2 -2
  827. package/dist/src/services/publicFileShares/index.mjs +2 -2
  828. package/dist/src/services/publicFileShares/index.mjs.map +1 -1
  829. package/dist/src/services/remoteAccess/index.d.mts +1 -0
  830. package/dist/src/services/remoteAccess/index.d.mts.map +1 -1
  831. package/dist/src/services/remoteAccessStore/index.cjs +8 -190
  832. package/dist/src/services/remoteAccessStore/index.cjs.map +1 -1
  833. package/dist/src/services/remoteAccessStore/index.d.mts +2 -0
  834. package/dist/src/services/remoteAccessStore/index.mjs +7 -187
  835. package/dist/src/services/remoteAccessStore/index.mjs.map +1 -1
  836. package/dist/src/services/remoteAccessStore/remoteAccessRecords.cjs +98 -0
  837. package/dist/src/services/remoteAccessStore/remoteAccessRecords.cjs.map +1 -0
  838. package/dist/src/services/remoteAccessStore/remoteAccessRecords.mjs +88 -0
  839. package/dist/src/services/remoteAccessStore/remoteAccessRecords.mjs.map +1 -0
  840. package/dist/src/services/remoteAccessStore/sync.cjs +111 -0
  841. package/dist/src/services/remoteAccessStore/sync.cjs.map +1 -0
  842. package/dist/src/services/remoteAccessStore/sync.mjs +108 -0
  843. package/dist/src/services/remoteAccessStore/sync.mjs.map +1 -0
  844. package/dist/src/services/runtimeIdentity/sync.cjs +23 -0
  845. package/dist/src/services/runtimeIdentity/sync.cjs.map +1 -0
  846. package/dist/src/services/runtimeIdentity/sync.d.mts +9 -0
  847. package/dist/src/services/runtimeIdentity/sync.d.mts.map +1 -0
  848. package/dist/src/services/runtimeIdentity/sync.mjs +20 -0
  849. package/dist/src/services/runtimeIdentity/sync.mjs.map +1 -0
  850. package/dist/src/services/serialRunner/index.cjs +25 -0
  851. package/dist/src/services/serialRunner/index.cjs.map +1 -0
  852. package/dist/src/services/serialRunner/index.d.mts +10 -0
  853. package/dist/src/services/serialRunner/index.d.mts.map +1 -0
  854. package/dist/src/services/serialRunner/index.mjs +25 -0
  855. package/dist/src/services/serialRunner/index.mjs.map +1 -0
  856. package/dist/src/services/{serverFacet → serverHost}/index.cjs +5 -5
  857. package/dist/src/services/serverHost/index.cjs.map +1 -0
  858. package/dist/src/services/serverHost/index.d.mts +31 -0
  859. package/dist/src/services/serverHost/index.d.mts.map +1 -0
  860. package/dist/src/services/{serverFacet → serverHost}/index.mjs +5 -5
  861. package/dist/src/services/serverHost/index.mjs.map +1 -0
  862. package/dist/src/services/sessionAttachments/index.cjs +4 -3
  863. package/dist/src/services/sessionAttachments/index.cjs.map +1 -1
  864. package/dist/src/services/sessionAttachments/index.d.mts +1 -6
  865. package/dist/src/services/sessionAttachments/index.d.mts.map +1 -1
  866. package/dist/src/services/sessionAttachments/index.mjs +3 -2
  867. package/dist/src/services/sessionAttachments/index.mjs.map +1 -1
  868. package/dist/src/services/sessionAttachments/type.d.mts +9 -0
  869. package/dist/src/services/sessionAttachments/type.d.mts.map +1 -0
  870. package/dist/src/services/sessionFiles/index.cjs +96 -0
  871. package/dist/src/services/sessionFiles/index.cjs.map +1 -0
  872. package/dist/src/services/sessionFiles/index.d.mts +33 -0
  873. package/dist/src/services/sessionFiles/index.d.mts.map +1 -0
  874. package/dist/src/services/sessionFiles/index.mjs +89 -0
  875. package/dist/src/services/sessionFiles/index.mjs.map +1 -0
  876. package/dist/src/services/sessionFiles/sessionDirectory.cjs +66 -0
  877. package/dist/src/services/sessionFiles/sessionDirectory.cjs.map +1 -0
  878. package/dist/src/services/sessionFiles/sessionDirectory.mjs +62 -0
  879. package/dist/src/services/sessionFiles/sessionDirectory.mjs.map +1 -0
  880. package/dist/src/services/sessionGitStatus/index.cjs +31 -33
  881. package/dist/src/services/sessionGitStatus/index.cjs.map +1 -1
  882. package/dist/src/services/sessionGitStatus/index.mjs +31 -33
  883. package/dist/src/services/sessionGitStatus/index.mjs.map +1 -1
  884. package/dist/src/services/sessionPresentation/index.cjs +3 -27
  885. package/dist/src/services/sessionPresentation/index.cjs.map +1 -1
  886. package/dist/src/services/sessionPresentation/index.mjs +3 -27
  887. package/dist/src/services/sessionPresentation/index.mjs.map +1 -1
  888. package/dist/src/services/skillPrompt/index.cjs +11 -0
  889. package/dist/src/services/skillPrompt/index.cjs.map +1 -0
  890. package/dist/src/services/skillPrompt/index.mjs +11 -0
  891. package/dist/src/services/skillPrompt/index.mjs.map +1 -0
  892. package/dist/src/services/sqliteSessionHistory/index.cjs +44 -30
  893. package/dist/src/services/sqliteSessionHistory/index.cjs.map +1 -1
  894. package/dist/src/services/sqliteSessionHistory/index.d.mts +7 -4
  895. package/dist/src/services/sqliteSessionHistory/index.d.mts.map +1 -1
  896. package/dist/src/services/sqliteSessionHistory/index.mjs +43 -28
  897. package/dist/src/services/sqliteSessionHistory/index.mjs.map +1 -1
  898. package/dist/src/services/sqliteTranscriptReader/index.cjs +21 -45
  899. package/dist/src/services/sqliteTranscriptReader/index.cjs.map +1 -1
  900. package/dist/src/services/sqliteTranscriptReader/index.d.mts +3 -2
  901. package/dist/src/services/sqliteTranscriptReader/index.d.mts.map +1 -1
  902. package/dist/src/services/sqliteTranscriptReader/index.mjs +16 -38
  903. package/dist/src/services/sqliteTranscriptReader/index.mjs.map +1 -1
  904. package/dist/src/services/testMode/index.cjs +162 -0
  905. package/dist/src/services/testMode/index.cjs.map +1 -0
  906. package/dist/src/services/testMode/index.d.mts +17 -0
  907. package/dist/src/services/testMode/index.d.mts.map +1 -0
  908. package/dist/src/services/testMode/index.mjs +155 -0
  909. package/dist/src/services/testMode/index.mjs.map +1 -0
  910. package/dist/src/services/toolOverrides/index.cjs +6 -6
  911. package/dist/src/services/toolOverrides/index.cjs.map +1 -1
  912. package/dist/src/services/toolOverrides/index.d.mts +3 -3
  913. package/dist/src/services/toolOverrides/index.d.mts.map +1 -1
  914. package/dist/src/services/toolOverrides/index.mjs +6 -6
  915. package/dist/src/services/toolOverrides/index.mjs.map +1 -1
  916. package/dist/src/services/toolPrompt/index.d.mts +17 -0
  917. package/dist/src/services/toolPrompt/index.d.mts.map +1 -0
  918. package/dist/src/services/toolSurface/index.cjs +3 -3
  919. package/dist/src/services/toolSurface/index.cjs.map +1 -1
  920. package/dist/src/services/toolSurface/index.d.mts +3 -3
  921. package/dist/src/services/toolSurface/index.d.mts.map +1 -1
  922. package/dist/src/services/toolSurface/index.mjs +4 -4
  923. package/dist/src/services/toolSurface/index.mjs.map +1 -1
  924. package/dist/src/services/traceContext/index.cjs.map +1 -1
  925. package/dist/src/services/traceContext/index.mjs.map +1 -1
  926. package/dist/src/services/transcriptPages/index.cjs +159 -33
  927. package/dist/src/services/transcriptPages/index.cjs.map +1 -1
  928. package/dist/src/services/transcriptPages/index.mjs +158 -34
  929. package/dist/src/services/transcriptPages/index.mjs.map +1 -1
  930. package/dist/src/services/voiceToolsContract/index.cjs +7 -7
  931. package/dist/src/services/voiceToolsContract/index.cjs.map +1 -1
  932. package/dist/src/services/voiceToolsContract/index.d.mts +4 -4
  933. package/dist/src/services/voiceToolsContract/index.d.mts.map +1 -1
  934. package/dist/src/services/voiceToolsContract/index.mjs +7 -7
  935. package/dist/src/services/voiceToolsContract/index.mjs.map +1 -1
  936. package/dist/src/services/workspaceRegistry/index.cjs +9 -179
  937. package/dist/src/services/workspaceRegistry/index.cjs.map +1 -1
  938. package/dist/src/services/workspaceRegistry/index.d.mts +5 -47
  939. package/dist/src/services/workspaceRegistry/index.mjs +7 -176
  940. package/dist/src/services/workspaceRegistry/index.mjs.map +1 -1
  941. package/dist/src/services/workspaceRegistry/sync.cjs +148 -0
  942. package/dist/src/services/workspaceRegistry/sync.cjs.map +1 -0
  943. package/dist/src/services/workspaceRegistry/sync.d.mts +34 -0
  944. package/dist/src/services/workspaceRegistry/sync.d.mts.map +1 -0
  945. package/dist/src/services/workspaceRegistry/sync.mjs +140 -0
  946. package/dist/src/services/workspaceRegistry/sync.mjs.map +1 -0
  947. package/dist/src/services/workspaceRegistry/workspaceRecords.cjs +114 -0
  948. package/dist/src/services/workspaceRegistry/workspaceRecords.cjs.map +1 -0
  949. package/dist/src/services/workspaceRegistry/workspaceRecords.d.mts +31 -0
  950. package/dist/src/services/workspaceRegistry/workspaceRecords.d.mts.map +1 -0
  951. package/dist/src/services/workspaceRegistry/workspaceRecords.mjs +101 -0
  952. package/dist/src/services/workspaceRegistry/workspaceRecords.mjs.map +1 -0
  953. package/dist/src/systems/child/adapters/headlessChildSessionService.cjs +339 -202
  954. package/dist/src/systems/child/adapters/headlessChildSessionService.cjs.map +1 -1
  955. package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts +16 -21
  956. package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts.map +1 -1
  957. package/dist/src/systems/child/adapters/headlessChildSessionService.mjs +329 -191
  958. package/dist/src/systems/child/adapters/headlessChildSessionService.mjs.map +1 -1
  959. package/dist/src/systems/child/services/childSession/index.cjs +94 -20
  960. package/dist/src/systems/child/services/childSession/index.cjs.map +1 -1
  961. package/dist/src/systems/child/services/childSession/index.d.mts +12 -3
  962. package/dist/src/systems/child/services/childSession/index.d.mts.map +1 -1
  963. package/dist/src/systems/child/services/childSession/index.mjs +94 -20
  964. package/dist/src/systems/child/services/childSession/index.mjs.map +1 -1
  965. package/dist/src/systems/child/types/childSession.cjs +33 -13
  966. package/dist/src/systems/child/types/childSession.cjs.map +1 -1
  967. package/dist/src/systems/child/types/childSession.d.mts +143 -80
  968. package/dist/src/systems/child/types/childSession.d.mts.map +1 -1
  969. package/dist/src/systems/child/types/childSession.mjs +24 -9
  970. package/dist/src/systems/child/types/childSession.mjs.map +1 -1
  971. package/dist/src/systems/main/adapters/headlessHost.cjs +30 -27
  972. package/dist/src/systems/main/adapters/headlessHost.cjs.map +1 -1
  973. package/dist/src/systems/main/adapters/headlessHost.d.mts +22 -22
  974. package/dist/src/systems/main/adapters/headlessHost.d.mts.map +1 -1
  975. package/dist/src/systems/main/adapters/headlessHost.mjs +33 -30
  976. package/dist/src/systems/main/adapters/headlessHost.mjs.map +1 -1
  977. package/dist/src/systems/main/adapters/headlessSessionHost.cjs +248 -229
  978. package/dist/src/systems/main/adapters/headlessSessionHost.cjs.map +1 -1
  979. package/dist/src/systems/main/adapters/headlessSessionHost.d.mts +4 -5
  980. package/dist/src/systems/main/adapters/headlessSessionHost.d.mts.map +1 -1
  981. package/dist/src/systems/main/adapters/headlessSessionHost.mjs +239 -219
  982. package/dist/src/systems/main/adapters/headlessSessionHost.mjs.map +1 -1
  983. package/dist/src/systems/main/types/headlessHost.d.mts +16 -14
  984. package/dist/src/systems/main/types/headlessHost.d.mts.map +1 -1
  985. package/dist/src/testing/pi/testHost.cjs +2 -2
  986. package/dist/src/testing/pi/testHost.cjs.map +1 -1
  987. package/dist/src/testing/pi/testHost.d.mts +3 -2
  988. package/dist/src/testing/pi/testHost.mjs +3 -3
  989. package/dist/src/testing/pi/testHost.mjs.map +1 -1
  990. package/dist/src/types/config.d.mts +1 -1
  991. package/dist/src/types/config.d.mts.map +1 -1
  992. package/dist/src/types/kernel.d.mts +3 -3
  993. package/dist/src/types/server/directHarnessRuntime.d.mts +54 -25
  994. package/dist/src/types/server/directHarnessRuntime.d.mts.map +1 -1
  995. package/dist/src/types/server/sessionToolSurface.d.mts +9 -9
  996. package/dist/src/web/services/apiClient/index.d.mts +1 -0
  997. package/dist/src/web/services/apiPaths/index.cjs.map +1 -1
  998. package/dist/src/web/services/apiPaths/index.d.mts +1 -1
  999. package/dist/src/web/services/apiPaths/index.mjs.map +1 -1
  1000. package/dist/src/web/services/mcpWidget.cjs.map +1 -1
  1001. package/dist/src/web/services/mcpWidget.d.mts +2 -2
  1002. package/dist/src/web/services/mcpWidget.d.mts.map +1 -1
  1003. package/dist/src/web/services/mcpWidget.mjs.map +1 -1
  1004. package/dist/src/web/services/testing/templateRail.cjs +3 -0
  1005. package/dist/src/web/services/testing/templateRail.cjs.map +1 -1
  1006. package/dist/src/web/services/testing/templateRail.mjs +3 -0
  1007. package/dist/src/web/services/testing/templateRail.mjs.map +1 -1
  1008. package/dist/src/web/types/mcpWidget.d.mts +1 -1
  1009. package/dist/src/web/types/nativeTemplate.d.mts +1 -1
  1010. package/dist/src/web/types/nativeTemplate.d.mts.map +1 -1
  1011. package/dist/src/web/types/template.d.mts +8 -0
  1012. package/dist/src/web/types/template.d.mts.map +1 -1
  1013. package/dist/src/web/types/webPlugin.d.mts +17 -5
  1014. package/dist/src/web/types/webPlugin.d.mts.map +1 -1
  1015. package/dist/testMode.cjs +4 -0
  1016. package/dist/testMode.d.mts +2 -0
  1017. package/dist/testMode.mjs +1 -0
  1018. package/dist/testing.cjs +1 -1
  1019. package/dist/testing.d.mts +2 -2
  1020. package/dist/testing.mjs +2 -2
  1021. package/dist/toolInventory.cjs.map +1 -1
  1022. package/dist/toolInventory.mjs.map +1 -1
  1023. package/dist/toolNames.mjs +1 -2
  1024. package/dist/toolOverrides.cjs +4 -4
  1025. package/dist/toolOverrides.d.mts +3 -3
  1026. package/dist/toolOverrides.mjs +3 -3
  1027. package/dist/toolSurface.cjs +4 -4
  1028. package/dist/toolSurface.d.mts +3 -3
  1029. package/dist/toolSurface.mjs +3 -3
  1030. package/dist/transition.cjs +3 -3
  1031. package/dist/transition.d.cjs +3 -3
  1032. package/dist/transition.d.mts +2 -2
  1033. package/dist/transition.mjs +1 -2
  1034. package/dist/transitionClassifier.cjs.map +1 -1
  1035. package/dist/transitionClassifier.d.mts +2 -2
  1036. package/dist/transitionClassifier.d.mts.map +1 -1
  1037. package/dist/transitionClassifier.mjs.map +1 -1
  1038. package/dist/transitionCoordinator.cjs +3 -3
  1039. package/dist/transitionCoordinator.cjs.map +1 -1
  1040. package/dist/transitionCoordinator.d.mts +4 -4
  1041. package/dist/transitionCoordinator.d.mts.map +1 -1
  1042. package/dist/transitionCoordinator.mjs +3 -3
  1043. package/dist/transitionCoordinator.mjs.map +1 -1
  1044. package/dist/typesContextApi.d.mts +2 -1
  1045. package/dist/typesContextApi.d.mts.map +1 -1
  1046. package/dist/uiHub.cjs +3 -3
  1047. package/dist/uiHub.d.mts +2 -2
  1048. package/dist/uiHub.mjs +1 -2
  1049. package/dist/voiceTools.cjs +5 -5
  1050. package/dist/voiceTools.d.mts +3 -3
  1051. package/dist/voiceTools.mjs +3 -3
  1052. package/dist/web.cjs +8 -0
  1053. package/dist/web.d.mts +3 -2
  1054. package/dist/web.mjs +2 -1
  1055. package/dist/webCompositions.cjs.map +1 -1
  1056. package/dist/webCompositions.d.mts +7 -7
  1057. package/dist/webCompositions.d.mts.map +1 -1
  1058. package/dist/webCompositions.mjs.map +1 -1
  1059. package/licenses/Codex-Apache-2.0.txt +201 -0
  1060. package/package.json +58 -53
  1061. package/dist/doomPackage.cjs +0 -61
  1062. package/dist/doomPackage.cjs.map +0 -1
  1063. package/dist/doomPackage.d.mts +0 -17
  1064. package/dist/doomPackage.d.mts.map +0 -1
  1065. package/dist/doomPackage.mjs +0 -54
  1066. package/dist/doomPackage.mjs.map +0 -1
  1067. package/dist/jsonlSessionRepo.cjs +0 -44
  1068. package/dist/jsonlSessionRepo.cjs.map +0 -1
  1069. package/dist/jsonlSessionRepo.d.mts +0 -7
  1070. package/dist/jsonlSessionRepo.d.mts.map +0 -1
  1071. package/dist/jsonlSessionRepo.mjs +0 -42
  1072. package/dist/jsonlSessionRepo.mjs.map +0 -1
  1073. package/dist/runtimeJson.cjs.map +0 -1
  1074. package/dist/runtimeJson.d.mts.map +0 -1
  1075. package/dist/runtimeJson.mjs.map +0 -1
  1076. package/dist/runtimePiSettings.cjs.map +0 -1
  1077. package/dist/runtimePiSettings.d.mts.map +0 -1
  1078. package/dist/runtimePiSettings.mjs.map +0 -1
  1079. package/dist/serverFacet.cjs +0 -34
  1080. package/dist/serverFacet.d.mts +0 -10
  1081. package/dist/serverFacet.mjs +0 -9
  1082. package/dist/src/pi/piWebSocketListener.cjs +0 -115
  1083. package/dist/src/pi/piWebSocketListener.cjs.map +0 -1
  1084. package/dist/src/pi/piWebSocketListener.mjs +0 -115
  1085. package/dist/src/pi/piWebSocketListener.mjs.map +0 -1
  1086. package/dist/src/schemas/serverFacet.cjs +0 -111
  1087. package/dist/src/schemas/serverFacet.cjs.map +0 -1
  1088. package/dist/src/schemas/serverFacet.d.mts +0 -152
  1089. package/dist/src/schemas/serverFacet.d.mts.map +0 -1
  1090. package/dist/src/schemas/serverFacet.mjs +0 -101
  1091. package/dist/src/schemas/serverFacet.mjs.map +0 -1
  1092. package/dist/src/schemas/sessionUpdates.d.mts +0 -34
  1093. package/dist/src/schemas/sessionUpdates.d.mts.map +0 -1
  1094. package/dist/src/server/headlessProtocol.cjs +0 -382
  1095. package/dist/src/server/headlessProtocol.cjs.map +0 -1
  1096. package/dist/src/server/headlessProtocol.mjs +0 -382
  1097. package/dist/src/server/headlessProtocol.mjs.map +0 -1
  1098. package/dist/src/server/nativeChildTranscriptReader.cjs +0 -20
  1099. package/dist/src/server/nativeChildTranscriptReader.cjs.map +0 -1
  1100. package/dist/src/server/nativeChildTranscriptReader.mjs +0 -18
  1101. package/dist/src/server/nativeChildTranscriptReader.mjs.map +0 -1
  1102. package/dist/src/server/serverFacetLoader.cjs +0 -214
  1103. package/dist/src/server/serverFacetLoader.cjs.map +0 -1
  1104. package/dist/src/server/serverFacetLoader.d.mts +0 -72
  1105. package/dist/src/server/serverFacetLoader.d.mts.map +0 -1
  1106. package/dist/src/server/serverFacetLoader.mjs +0 -212
  1107. package/dist/src/server/serverFacetLoader.mjs.map +0 -1
  1108. package/dist/src/services/acpSessionUpdates/index.cjs +0 -129
  1109. package/dist/src/services/acpSessionUpdates/index.cjs.map +0 -1
  1110. package/dist/src/services/acpSessionUpdates/index.mjs +0 -129
  1111. package/dist/src/services/acpSessionUpdates/index.mjs.map +0 -1
  1112. package/dist/src/services/historyImport/index.cjs +0 -8
  1113. package/dist/src/services/historyImport/index.cjs.map +0 -1
  1114. package/dist/src/services/historyImport/index.d.mts +0 -68
  1115. package/dist/src/services/historyImport/index.d.mts.map +0 -1
  1116. package/dist/src/services/historyImport/index.mjs +0 -8
  1117. package/dist/src/services/historyImport/index.mjs.map +0 -1
  1118. package/dist/src/services/openSessionRegistry/index.d.mts.map +0 -1
  1119. package/dist/src/services/requestReceipts/index.cjs.map +0 -1
  1120. package/dist/src/services/requestReceipts/index.d.mts +0 -11
  1121. package/dist/src/services/requestReceipts/index.d.mts.map +0 -1
  1122. package/dist/src/services/requestReceipts/index.mjs.map +0 -1
  1123. package/dist/src/services/rpcTranscript/index.cjs +0 -633
  1124. package/dist/src/services/rpcTranscript/index.cjs.map +0 -1
  1125. package/dist/src/services/rpcTranscript/index.d.mts +0 -50
  1126. package/dist/src/services/rpcTranscript/index.d.mts.map +0 -1
  1127. package/dist/src/services/rpcTranscript/index.mjs +0 -632
  1128. package/dist/src/services/rpcTranscript/index.mjs.map +0 -1
  1129. package/dist/src/services/serverFacet/index.cjs.map +0 -1
  1130. package/dist/src/services/serverFacet/index.d.mts +0 -31
  1131. package/dist/src/services/serverFacet/index.d.mts.map +0 -1
  1132. package/dist/src/services/serverFacet/index.mjs.map +0 -1
  1133. package/dist/src/services/workspaceRegistry/index.d.mts.map +0 -1
  1134. package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs +0 -28
  1135. package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs.map +0 -1
  1136. package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs +0 -25
  1137. package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs.map +0 -1
  1138. package/dist/terminalPiChildSessionService.cjs +0 -324
  1139. package/dist/terminalPiChildSessionService.cjs.map +0 -1
  1140. package/dist/terminalPiChildSessionService.d.mts +0 -46
  1141. package/dist/terminalPiChildSessionService.d.mts.map +0 -1
  1142. package/dist/terminalPiChildSessionService.mjs +0 -318
  1143. package/dist/terminalPiChildSessionService.mjs.map +0 -1
  1144. package/dist/v3Export.cjs +0 -10
  1145. package/dist/v3Export.cjs.map +0 -1
  1146. package/dist/v3Export.d.mts +0 -35
  1147. package/dist/v3Export.d.mts.map +0 -1
  1148. package/dist/v3Export.mjs +0 -9
  1149. package/dist/v3Export.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"headlessSessionHost.mjs","names":["root"],"sources":["../../../../../src/systems/main/adapters/headlessSessionHost.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { Context as CordisContext } from '@deepseek-ai/cordis';\nimport { BACKGROUND_CONTEXT, withAbortSignal } from '@earendil-works/chord/context';\nimport { createAssistantMessageEventStream, type Model, type Api, type Usage } from '@earendil-works/pi-ai';\nimport {\n getAgentDir,\n generateSummary,\n DEFAULT_COMPACTION_SETTINGS,\n ModelRuntime,\n loadProjectContextFiles,\n parseArgs,\n resolveCliModel,\n resolveModelScopeWithDiagnostics,\n SettingsManager,\n type Args,\n} from '@earendil-works/pi-coding-agent';\nimport { Value } from 'typebox/value';\n\nimport { readDoomBackgroundWorkService } from '../../../exports/backgroundWork';\nimport {\n DOOM_CHILD_SESSION_SERVICE,\n DOOM_CHILD_SESSION_MCP_TOOL_SERVICE,\n DOOM_CHILD_SESSION_HOOKS_SERVICE,\n type DoomChildSessionHooks,\n type DoomChildSessionMcpTool,\n} from '../../../exports/childSession';\nimport { registerDoomSessionEnvironment } from '../../../exports/cordisHost';\nimport type {\n DoomHeadlessEventName,\n DoomHeadlessExecutionContext,\n DoomHeadlessModelMetadata,\n DoomHeadlessSelection,\n DoomHeadlessTool,\n DoomHeadlessToolCompletionRequest,\n} from '../../../exports/headless';\nimport {\n DOOM_LOAD_SKILL_TOOL,\n DoomHeadlessPromptAdmissionError,\n DoomSessionSetupError,\n isDoomHeadlessToolModelVisible,\n} from '../../../exports/headless';\nimport type { DoomSessionContext } from '../../../exports/hubChannel';\nimport type { DoomMcpContextSnapshot, DoomMcpSkill, DoomMcpUiResource } from '../../../exports/mcpFacet';\nimport type { InstalledServerFacets } from '../../../exports/serverFacet';\nimport { DOOM_AGENT_MODEL_ENTRY_TYPE } from '../../../schemas/agentModel';\nimport { validationDetails } from '../../../schemas/protocol';\nimport { createDirectHarnessRuntime } from '../../../server/directHarnessRuntime';\nimport { harnessErrorMessage } from '../../../server/harnessErrorMessage';\nimport { CHATGPT_AUTH_PROVIDER_ID, registerChatgptAuthProvider } from '../../../services/chatgptAuth';\nimport { createChatgptImageClient } from '../../../services/chatgptImages';\nimport { createChatgptWebSearchClient } from '../../../services/chatgptWebSearch';\nimport { buildContextDetail } from '../../../services/contextDetail';\nimport { writeContextDetail } from '../../../services/contextDetailStore';\nimport { DOOM_CONTEXT_ENTRY_TYPE, projectContext } from '../../../services/contextProjection';\nimport { createHeadlessClient } from '../../../services/headlessClient';\nimport { createHistoryOwnership } from '../../../services/historyOwnership';\nimport { formatSkillsForSystemPrompt } from '../../../services/piExtensionHost';\nimport {\n createPiExtensionHost,\n preloadPiExtensions,\n resolvePiSettingsPackageEntries,\n type PiExtensionHost,\n} from '../../../services/piExtensionHost';\nimport { modelConfigDirectory, modelSettingsDirectory } from '../../../services/piSettings';\nimport { observe } from '../../../services/serverTelemetry';\nimport { SessionMetadataDoc } from '../../../services/sqliteSessionStorage';\nimport { formatToolPrompt, type ToolPromptEntry } from '../../../services/toolPrompt';\nimport type { ContextPromptStage } from '../../../types/contextApi';\nimport type {\n AgentHarnessResources,\n AgentHarnessTool,\n AgentMessage,\n HookMap,\n} from '../../../types/server/directHarnessRuntime';\nimport type { DirectHarnessRuntime, DirectHarnessRuntimeOptions } from '../../../types/server/directHarnessRuntime';\nimport type { SessionFrame } from '../../../types/server/session';\nimport type {\n SessionSkillDescriptor,\n SessionToolDescriptor,\n SessionToolSurface,\n SessionUiResourceDescriptor,\n} from '../../../types/server/sessionToolSurface';\nimport { createHeadlessChildSessionServiceProvider } from '../../child/adapters/headlessChildSessionService';\nimport type { ResolvedHeadlessResource } from '../types/headlessHost';\nimport type { HeadlessSessionHost, HeadlessSessionHostOptions } from '../types/headlessSessionHost';\nimport { describeLoadSkillTool, HeadlessHost, headlessHarnessSkill } from './headlessHost';\n\ntype AnyRecord = Record<string, unknown>;\ntype HeadlessTool = DoomHeadlessTool;\ntype AfterToolPatch = NonNullable<HookMap['after_tool']['result']>;\ntype ToolContent = NonNullable<AfterToolPatch['content']>;\ntype CompactResult = NonNullable<NonNullable<HookMap['before_compaction']['result']>['compaction']>;\ntype JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue };\n\nconst EXTERNAL_OPERATION = 'external';\nconst REMOTE_TOOL_WAIT_MS = 30_000;\nconst PROMPT_PREPARATION_FAILED_EVENT = 'po_server.system_prompt_preparation_failed';\n\ninterface AppliedSessionTool {\n readonly descriptor: SessionToolDescriptor;\n execute(\n toolCallId: string,\n parameters: Record<string, unknown>,\n signal?: AbortSignal,\n onUpdate?: Parameters<SessionToolSurface['invokeTool']>[0]['onUpdate'],\n execution?: DoomHeadlessExecutionContext,\n ): Promise<import('../../../exports/headless').DoomHeadlessToolResult>;\n}\n\nfunction isRecord(value: unknown): value is AnyRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction stringArray(value: unknown): string[] | undefined {\n return Array.isArray(value) && value.every((entry) => typeof entry === 'string') ? value : undefined;\n}\n\n/** Restores the last accepted live selection from journal projections, falling back on launch configuration. */\nexport function restoreHeadlessSelection(\n entries: readonly AnyRecord[],\n fallback: DoomHeadlessSelection,\n): DoomHeadlessSelection {\n let projected: Partial<DoomHeadlessSelection> | undefined;\n for (let index = entries.length - 1; index >= 0 && projected === undefined; index -= 1) {\n const entry = entries[index];\n if (!isRecord(entry) || entry.type !== 'custom' || !isRecord(entry.data)) continue;\n if (projected === undefined && entry.customType === DOOM_CONTEXT_ENTRY_TYPE) {\n const selection = entry.data.selection;\n if (!isRecord(selection) || typeof selection.majorMode !== 'string') continue;\n const domains = stringArray(selection.domains);\n if (domains === undefined || (selection.profile !== undefined && typeof selection.profile !== 'string')) continue;\n projected = {\n majorMode: selection.majorMode,\n domains,\n ...(typeof selection.profile === 'string' ? { profile: selection.profile } : {}),\n };\n }\n }\n return { ...fallback, ...projected };\n}\n\nfunction isJsonValue(value: unknown): value is JsonValue {\n if (value === null || typeof value === 'string' || typeof value === 'boolean') return true;\n if (typeof value === 'number') return Number.isFinite(value);\n if (Array.isArray(value)) return value.every(isJsonValue);\n return isRecord(value) && Object.values(value).every(isJsonValue);\n}\n\nfunction boundedJsonCopy(value: unknown): unknown {\n const seen = new Set<object>();\n const visit = (item: unknown, depth: number): void => {\n if (depth > 128) throw new TypeError('Message data is too deeply nested.');\n if (item === null || typeof item === 'string' || typeof item === 'boolean') return;\n if (typeof item === 'number' && Number.isFinite(item)) return;\n if (typeof item !== 'object' || seen.has(item)) throw new TypeError('Message data must be JSON serializable.');\n seen.add(item);\n for (const child of Object.values(item)) {\n if (child !== undefined) visit(child, depth + 1);\n }\n seen.delete(item);\n };\n visit(value, 0);\n const encoded = JSON.stringify(value);\n if (encoded.length > 16 * 1024 * 1024) throw new TypeError('Message data exceeds the serialization limit.');\n return JSON.parse(encoded);\n}\n\nfunction isSummaryMessage(value: unknown): value is AgentMessage {\n if (!isRecord(value) || typeof value.timestamp !== 'number' || !Number.isFinite(value.timestamp)) return false;\n if (value.role === 'user') return typeof value.content === 'string' || isToolContent(value.content);\n if (value.role === 'custom')\n return (\n typeof value.customType === 'string' &&\n typeof value.display === 'boolean' &&\n (typeof value.content === 'string' || isToolContent(value.content))\n );\n if (value.role === 'compactionSummary')\n return typeof value.summary === 'string' && typeof value.tokensBefore === 'number';\n if (value.role === 'branchSummary')\n return typeof value.summary === 'string' && (value.fromId === null || typeof value.fromId === 'string');\n if (value.role === 'bashExecution')\n return (\n typeof value.command === 'string' &&\n typeof value.output === 'string' &&\n typeof value.cancelled === 'boolean' &&\n typeof value.truncated === 'boolean' &&\n (value.exitCode === undefined || typeof value.exitCode === 'number')\n );\n if (value.role === 'toolResult') return isToolContent(value.content) && isAgentMessage(value);\n return (\n value.role === 'assistant' &&\n Array.isArray(value.content) &&\n value.content.every((part: unknown) => {\n if (!isRecord(part)) return false;\n if (part.type === 'text') return typeof part.text === 'string';\n if (part.type === 'thinking') return typeof part.thinking === 'string';\n return (\n part.type === 'toolCall' &&\n typeof part.id === 'string' &&\n typeof part.name === 'string' &&\n isJsonObject(part.arguments)\n );\n }) &&\n isAgentMessage(value)\n );\n}\n\nfunction isJsonObject(value: unknown): value is Record<string, unknown> {\n return isRecord(value) && Object.values(value).every(isJsonValue);\n}\n\nfunction isToolContent(value: unknown): value is ToolContent {\n return (\n Array.isArray(value) &&\n value.every((part) => {\n if (!isRecord(part)) return false;\n if (part.type === 'text') return typeof part.text === 'string';\n return part.type === 'image' && typeof part.data === 'string' && typeof part.mimeType === 'string';\n })\n );\n}\n\nfunction isUsage(value: unknown): value is Usage {\n if (!isRecord(value) || !isRecord(value.cost)) return false;\n const cost = value.cost;\n return (\n ['input', 'output', 'cacheRead', 'cacheWrite', 'totalTokens'].every(\n (key) => typeof value[key] === 'number' && Number.isFinite(value[key]),\n ) &&\n ['input', 'output', 'cacheRead', 'cacheWrite', 'total'].every(\n (key) => typeof cost[key] === 'number' && Number.isFinite(cost[key]),\n )\n );\n}\n\nfunction isAgentMessage(value: unknown): value is AgentMessage {\n if (!isRecord(value) || typeof value.timestamp !== 'number' || !Number.isFinite(value.timestamp)) return false;\n if (value.role === 'user') return typeof value.content === 'string' || Array.isArray(value.content);\n if (!Array.isArray(value.content)) return false;\n if (value.role === 'assistant') {\n return (\n typeof value.api === 'string' &&\n typeof value.provider === 'string' &&\n typeof value.model === 'string' &&\n typeof value.stopReason === 'string' &&\n isUsage(value.usage)\n );\n }\n return (\n value.role === 'toolResult' &&\n typeof value.toolCallId === 'string' &&\n typeof value.toolName === 'string' &&\n typeof value.isError === 'boolean'\n );\n}\n\nfunction isCompactResult(value: unknown): value is CompactResult {\n return (\n isRecord(value) &&\n typeof value.summary === 'string' &&\n typeof value.tokensBefore === 'number' &&\n Number.isFinite(value.tokensBefore) &&\n Array.isArray(value.retainedTail) &&\n value.retainedTail.every(isAgentMessage) &&\n (value.usage === undefined || isUsage(value.usage)) &&\n (value.details === undefined || isJsonValue(value.details))\n );\n}\n\nconst unsupported = (parsed: Args): string | undefined => {\n const flags: Array<[string, unknown]> = [\n ['--help', parsed.help],\n ['--version', parsed.version],\n ['--mode', parsed.mode],\n ['--print', parsed.print],\n ['--export', parsed.export],\n ['--no-session', parsed.noSession],\n ['--continue', parsed.continue],\n ['--resume', parsed.resume],\n ['--fork', parsed.fork],\n ['--list-models', parsed.listModels],\n ['--offline', parsed.offline],\n ['--tui-mode', parsed.tuiMode],\n ['--extensions', parsed.extensions],\n ['--no-extensions', parsed.noExtensions],\n ['--skills', parsed.skills],\n ['--no-skills', parsed.noSkills],\n ['--prompt-templates', parsed.promptTemplates],\n ['--no-prompt-templates', parsed.noPromptTemplates],\n ['--themes', parsed.themes],\n ['--no-themes', parsed.noThemes],\n ['--no-context-files', parsed.noContextFiles],\n ['--tools', parsed.tools],\n ['--exclude-tools', parsed.excludeTools],\n ['--no-tools', parsed.noTools],\n ['--no-builtin-tools', parsed.noBuiltinTools],\n ['--project-trust-override', parsed.projectTrustOverride],\n ['--verbose', parsed.verbose],\n ];\n const match = flags.find(([, value]) => value !== undefined && value !== false);\n if (match) return `Direct headless mode does not support ${match[0]}.`;\n if (parsed.messages.length > 0 || parsed.fileArgs.length > 0)\n return 'Direct headless mode does not support positional prompts or files.';\n const unknown = parsed.unknownFlags.keys().next().value;\n return typeof unknown === 'string' ? `Direct headless mode does not support --${unknown}.` : undefined;\n};\n\n/** Validate the Pi flags that remain after Doom's harness flags are removed. */\nexport function validateDirectHeadlessArgs(agentArgs: readonly string[]): Args {\n if (agentArgs.includes('--mode')) throw new Error('Direct headless mode does not support --mode.');\n const parsed = parseArgs([...agentArgs]);\n const diagnostics = parsed.diagnostics.filter((diagnostic) => diagnostic.type === 'error');\n if (diagnostics.length) throw new Error(diagnostics.map((diagnostic) => diagnostic.message).join('\\n'));\n const error = unsupported(parsed);\n if (error) throw new Error(error);\n return parsed;\n}\n\nfunction modelIdentity(model: Model<Api>): { provider: string; id: string } {\n return { provider: model.provider, id: model.id };\n}\n\nfunction modelMetadata(model: Model<Api>): DoomHeadlessModelMetadata {\n const compat: Record<string, boolean | string> = {};\n const source = (model as unknown as { compat?: Record<string, unknown> }).compat;\n for (const key of [\n 'supportsStore',\n 'supportsDeveloperRole',\n 'supportsReasoningEffort',\n 'supportsUsageInStreaming',\n 'supportsStrictMode',\n 'maxTokensField',\n 'sendSessionAffinityHeaders',\n 'sessionAffinityFormat',\n 'supportsLongCacheRetention',\n 'thinkingFormat',\n 'requiresReasoningContentOnAssistantMessages',\n 'cacheControlFormat',\n 'forceAdaptiveThinking',\n 'allowEmptySignature',\n ]) {\n const value = source?.[key];\n if (typeof value === 'boolean' || typeof value === 'string') compat[key] = value;\n }\n let baseUrl: string | undefined;\n try {\n const url = new URL(model.baseUrl);\n url.username = '';\n url.password = '';\n url.search = '';\n url.hash = '';\n baseUrl = url.toString();\n } catch {\n // Invalid endpoints cannot safely be exposed to facets or diagnostics.\n baseUrl = undefined;\n }\n return Object.freeze({\n provider: model.provider,\n id: model.id,\n api: model.api,\n name: model.name,\n ...(baseUrl ? { baseUrl } : {}),\n compat: Object.freeze(compat),\n });\n}\n\nasync function resolveModel(\n parsed: Args,\n modelRuntime: ModelRuntime,\n settings: SettingsManager,\n): Promise<{ model: Model<Api>; thinkingLevel?: Args['thinking'] }> {\n const cli = resolveCliModel({\n cliProvider: parsed.provider,\n cliModel: parsed.model,\n cliThinking: parsed.thinking,\n modelRuntime,\n });\n if (cli.error) throw new Error(cli.error);\n\n let scoped: Model<Api> | undefined;\n if (parsed.models !== undefined && parsed.models.length > 0) {\n const resolved = await resolveModelScopeWithDiagnostics(parsed.models, modelRuntime);\n scoped = resolved.scopedModels[0]?.model;\n if (scoped === undefined)\n throw new DoomSessionSetupError(`No configured model matched --models ${parsed.models.join(', ')}.`);\n }\n\n const configured =\n cli.model ??\n scoped ??\n (settings.getDefaultProvider() && settings.getDefaultModel()\n ? modelRuntime.getModel(settings.getDefaultProvider()!, settings.getDefaultModel()!)\n : undefined) ??\n (await modelRuntime.getAvailable())[0];\n if (configured === undefined) {\n const agentDir = getAgentDir();\n // A failed availability refresh also leaves the list empty; name it instead of blaming setup.\n const runtimeError = modelRuntime.getError();\n throw new DoomSessionSetupError(\n `No model is configured, so the session cannot start. Add a provider and its credentials in ${agentDir} ` +\n `(auth.json, or models.json for a custom provider), then set defaultProvider and defaultModel in ` +\n `${path.join(agentDir, 'settings.json')}.` +\n (runtimeError ? `\\n\\n${runtimeError}` : ''),\n );\n }\n return {\n model: configured,\n thinkingLevel:\n cli.thinkingLevel ??\n parsed.thinking ??\n settings.getModelThinkingLevel(configured.provider, configured.id) ??\n settings.getDefaultThinkingLevel(),\n };\n}\n\nfunction mapResources(resources: readonly ResolvedHeadlessResource[]): {\n harness: AgentHarnessResources;\n context: string[];\n advertised: NonNullable<AgentHarnessResources['skills']>;\n} {\n const skills: NonNullable<AgentHarnessResources['skills']> = [];\n const advertised: NonNullable<AgentHarnessResources['skills']> = [];\n const promptTemplates: NonNullable<AgentHarnessResources['promptTemplates']> = [];\n const context: string[] = [];\n for (const resource of resources) {\n if (resource.kind === 'skill') {\n const skill = headlessHarnessSkill(resource);\n skills.push(skill);\n // Advertised only with a path the agent can open. Without one the prompt would\n // point at a doom-headless:// URI no tool resolves, so such a skill stays\n // explicitly invocable and silent, exactly as it was before.\n // One entry per name: two domains can each carry the same shared skill.\n if (resource.path !== undefined && !advertised.some((entry) => entry.name === skill.name)) advertised.push(skill);\n } else if (resource.kind === 'prompt') {\n promptTemplates.push({ name: resource.name, content: resource.text });\n } else {\n // Deliberately unwrapped. A generic \"this is data, not instructions\" fence here\n // would also wrap po/profile-config, which carries the operator's persona\n // and *is* authoritative instruction, and demoting it would be worse than the\n // anonymity it fixes. A resource whose body is untrusted owns its own boundary,\n // the way po-goal fences a user objective in escaped <goal_objective>.\n context.push(resource.text);\n }\n }\n return { harness: { skills, promptTemplates }, context, advertised };\n}\n\nfunction toolAdapter(\n tool: HeadlessTool,\n executionContext: () => DoomHeadlessExecutionContext,\n reportedErrors: Set<string>,\n): AgentHarnessTool<object | undefined> {\n return {\n name: tool.name,\n label: tool.label ?? tool.name,\n description: tool.description,\n parameters: tool.parameters,\n ...(tool.promptSnippet === undefined ? {} : { promptSnippet: tool.promptSnippet }),\n ...(tool.promptGuidelines === undefined ? {} : { promptGuidelines: tool.promptGuidelines }),\n ...(tool.executionMode === undefined\n ? {}\n : {\n executionMode: tool.executionMode === 'parallel' ? 'parallel' : 'sequential',\n }),\n async execute(toolCallId, parameters, onUpdate, _toolContext, _invocation, context) {\n const result = await tool.execute(\n toolCallId,\n parameters,\n context.abortSignal,\n (partial) => onUpdate({ content: partial.content, details: partial.details }),\n executionContext(),\n );\n if (result.isError === true) reportedErrors.add(toolCallId);\n return { content: result.content, details: result.details };\n },\n };\n}\n\nfunction eventHook(event: string): DoomHeadlessEventName | undefined {\n const hooks: Record<string, DoomHeadlessEventName> = {\n run_start: 'agent_start',\n run_resume: 'agent_start',\n run_end: 'agent_settled',\n turn_start: 'turn_start',\n turn_end: 'turn_end',\n message_start: 'message_start',\n message_update: 'message_update',\n message_end: 'message_end',\n tool_start: 'tool_execution_start',\n tool_update: 'tool_execution_update',\n tool_end: 'tool_execution_end',\n compaction_end: 'session_compact',\n navigation_start: 'session_tree',\n navigation_end: 'session_tree',\n };\n return hooks[event];\n}\n\nfunction emitTo(listeners: Set<(frame: SessionFrame) => void>, frame: SessionFrame): void {\n // Observers added by a listener begin with the next frame.\n const snapshot = [...listeners];\n for (const listener of snapshot) {\n try {\n listener(frame);\n } catch {\n // Compatibility listeners are observers.\n }\n }\n}\n\n/** The prompt a host has to show, and how complete it is. */\ninterface HeadlessSystemPrompt {\n readonly text: string;\n readonly stage: ContextPromptStage;\n}\n\nfunction createHeadlessCompositionPublisher(\n runtime: Pick<DirectHarnessRuntime, 'sessionId' | 'appendCustomEntry'>,\n host: HeadlessHost,\n environment: Readonly<Record<string, string | undefined>>,\n groups: (\n selection: DoomHeadlessSelection,\n ) => import('../../../services/contextProjection').ContextProjectionInput['groups'],\n readSystemPrompt: () => HeadlessSystemPrompt | undefined,\n): (selection?: DoomHeadlessSelection) => Promise<void> {\n let countTokens: ((text: string) => number) | undefined;\n let contextRevision = 0;\n let publishedContext: string | undefined;\n // Publishes overlap: a selection settling and a turn building its prompt can\n // both ask at once, and each awaits the journal before recording what it\n // published. Run them one after another so the second sees the first's\n // revision rather than spending one of its own on the same composition.\n let tail: Promise<void> = Promise.resolve();\n\n const publish = async (selection: DoomHeadlessSelection): Promise<void> => {\n countTokens ??= (await import('gpt-tokenizer')).countTokens;\n const inventory = host.getContextInventory(selection, countTokens);\n const prompt = readSystemPrompt();\n const promptCost = prompt === undefined ? undefined : { tokens: countTokens(prompt.text), stage: prompt.stage };\n const context = projectContext({\n revision: contextRevision + 1,\n majorMode: selection.majorMode,\n ...(selection.profile === undefined ? {} : { profile: selection.profile }),\n groups: groups(selection),\n domains: selection.domains,\n sources: inventory.sources,\n skills: inventory.skills,\n attribution: inventory.attribution,\n countTokens,\n ...(promptCost === undefined ? {} : { systemPrompt: promptCost }),\n });\n // The prompt joins the key by its text, not just its figure: a reworded\n // prompt of the same length is a different answer to the reader's question.\n const contextKey = JSON.stringify({\n ...context,\n revision: 0,\n promptText: prompt?.text,\n });\n if (contextKey === publishedContext) return;\n const revision = contextRevision + 1;\n const details = buildContextDetail({\n sources: inventory.sources,\n skills: inventory.skills,\n countTokens,\n ...(prompt === undefined || promptCost === undefined\n ? {}\n : {\n systemPrompt: {\n text: prompt.text,\n tokens: promptCost.tokens,\n stage: prompt.stage,\n },\n }),\n });\n await runtime.appendCustomEntry(DOOM_CONTEXT_ENTRY_TYPE, {\n ...context,\n revision,\n });\n writeContextDetail(runtime.sessionId, revision, details, environment);\n contextRevision = revision;\n publishedContext = contextKey;\n };\n\n return (selection = host.context.selection): Promise<void> => {\n // A failed publish must not strand every publish that follows it.\n tail = tail.then(\n () => publish(selection),\n () => publish(selection),\n );\n return tail;\n };\n}\n\n/** Create the gated, same-process host used by direct-headless startup tests. */\n/**\n * Composes one server session's host.\n *\n * Its Pi extensions run in the server's process, so the session's admitted environment is\n * registered under its id for them to read instead of `process.env`, and released with it.\n */\nexport async function createHeadlessSessionHost(options: HeadlessSessionHostOptions): Promise<HeadlessSessionHost> {\n const releaseEnvironment = registerDoomSessionEnvironment(options.sessionId, options.environment);\n try {\n return await composeHeadlessSessionHost(options, releaseEnvironment);\n } catch (error) {\n releaseEnvironment();\n throw error;\n }\n}\n\nasync function composeHeadlessSessionHost(\n options: HeadlessSessionHostOptions,\n releaseEnvironment: () => void,\n): Promise<HeadlessSessionHost> {\n const parsed = validateDirectHeadlessArgs(options.agentArgs);\n const agentDir = getAgentDir();\n const settings = SettingsManager.create(options.cwd, agentDir);\n // Credentials and model defaults fall back independently to plain Pi's ~/.pi/agent.\n const modelDir = modelConfigDirectory(agentDir);\n const settingsDir = modelSettingsDirectory(agentDir);\n const modelSettings = settingsDir === agentDir ? settings : SettingsManager.create(options.cwd, settingsDir);\n const modelRuntime = await ModelRuntime.create({\n authPath: path.join(modelDir, 'auth.json'),\n modelsPath: path.join(modelDir, 'models.json'),\n refreshOnCreate: false,\n });\n registerChatgptAuthProvider(modelRuntime);\n // Pi extensions load before the model is resolved: an extension that registers a provider\n // (a local Vertex or Bedrock bridge, say) must be in the runtime before the configured default\n // is looked up, or the lookup misses and the session silently falls back to whichever model\n // happens to be first in `getAvailable()`.\n // Provider packages from Pi's settings.json `packages` load alongside the Po entry, so a\n // model that works under `pi` (a Claude Code bridge, say) is also selectable here.\n const piExtensionPaths =\n options.piExtensions === false\n ? []\n : [\n ...(options.piExtensionFactories !== undefined ? [] : (options.piExtensionPaths ?? [])),\n ...(await resolvePiSettingsPackageEntries({\n cwd: options.cwd,\n agentDir,\n settings,\n ...(options.onNotice === undefined ? {} : { onNotice: options.onNotice }),\n })),\n // Falling back to Pi's model config brings Pi's own extensions with it, as doompi loads\n // them: a provider such as a local Vertex bridge lives there, not in auth.json.\n ...(modelDir !== agentDir && fs.existsSync(path.join(modelDir, 'extensions'))\n ? [path.join(modelDir, 'extensions')]\n : []),\n ];\n const piPreload = await preloadPiExtensions({\n cwd: options.cwd,\n agentDir,\n models: modelRuntime,\n extensionPaths: [...new Set(piExtensionPaths)],\n ...(options.piExtensions === false || options.piExtensionFactories === undefined\n ? {}\n : { extensionFactories: await options.piExtensionFactories() }),\n ...(options.onNotice === undefined ? {} : { onNotice: options.onNotice }),\n });\n for (const override of options.providerOverrides?.() ?? []) {\n if (!override.name.trim() || override.name !== override.name.trim())\n throw new Error('Invalid native provider identity.');\n const url = new URL(override.baseUrl);\n if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password)\n throw new Error('Invalid native provider base URL.');\n // Preserve external-native-wins precedence from Pi's legacy-then-native preload.\n // Legacy registration deletes a same-name native provider. Arbitrary native auth/stream\n // implementations cannot safely be broker-routed by a baseUrl-only override.\n if (modelRuntime.getRegisteredNativeProvider(override.name)) continue;\n modelRuntime.registerProvider(override.name, { baseUrl: override.baseUrl });\n }\n const resolved = await resolveModel(parsed, modelRuntime, modelSettings);\n if (parsed.apiKey !== undefined) await modelRuntime.setRuntimeApiKey(resolved.model.provider, parsed.apiKey);\n\n const reportedToolErrors = new Set<string>();\n let promptPreparationFailed = false;\n let promptPreparationError: unknown;\n let headlessReady = false;\n // Guidance for the tools currently applied, refreshed by applyTools so a mode\n // switch adds and removes its tools' prompt text with the tools themselves.\n let toolGuidance: readonly ToolPromptEntry[] = [];\n const initialSystemPrompt = [parsed.systemPrompt, ...(parsed.appendSystemPrompt ?? [])].filter(Boolean).join('\\n\\n');\n /**\n * AGENTS.md and friends, in Pi's own framing.\n *\n * The server had none of this: its prompt began at the --system-prompt flag, so a\n * repository's own instructions reached a terminal session and never a cockpit one.\n * Mirrors @earendil-works/pi-coding-agent@0.86.0 dist/core/system-prompt.js:21-27\n * (the customPrompt branch, which is the shape this host matches). `buildSystemPrompt`\n * is not exported and the package exports map has no wildcard, so the four literals\n * below are copied; re-diff them against that file on upgrade.\n *\n * Not trust-gated, deliberately: TRUST_REQUIRING_PROJECT_CONFIG_RESOURCES in Pi's\n * trust-manager covers settings.json, extensions, skills, prompts, themes, SYSTEM.md\n * and APPEND_SYSTEM.md, all of which execute or replace instructions. AGENTS.md is\n * advisory prose and Pi appends it unconditionally; gating it here would be a\n * divergence from Pi rather than parity with it.\n *\n * Resolved once: cwd is fixed for the host's lifetime, and composeSystemPrompt runs\n * on every generation.\n */\n const projectContextFiles = loadProjectContextFiles({\n cwd: options.cwd,\n agentDir,\n });\n const projectContextBlock = (() => {\n if (projectContextFiles.length === 0) return '';\n const instructions = projectContextFiles\n .map(\n ({ path: filePath, content }) =>\n `<project_instructions path=\"${filePath}\">\\n${content}\\n</project_instructions>\\n`,\n )\n .join('\\n');\n return `<project_context>\\n\\nProject-specific instructions and guidelines:\\n\\n${instructions}\\n</project_context>`;\n })();\n const workingDirectoryLine = `Current working directory: ${options.cwd.replace(/\\\\/g, '/')}`;\n /**\n * Everything the prompt is made of before a package has had a say.\n *\n * Shared with the runtime callback below rather than copied. Assembling it is\n * pure; the hook pass that follows it there is not, which is why the context\n * panel is shown this rather than a prompt built for the panel's sake.\n */\n const composeSystemPrompt = (resources: readonly ResolvedHeadlessResource[]): string => {\n const mapped = mapResources(resources);\n // formatSkillsForSystemPrompt is the same renderer headlessHost already uses to\n // bill these skills to the context panel. Until now nothing emitted it, so the\n // panel charged for an <available_skills> block the model never received. It\n // returns '' for an empty list and leads with a blank line of its own.\n // With the load tool, its description carries the skill list; without it, the prompt lists\n // the skills the agent can open with read.\n const skills = toolGuidance.some((entry) => entry.name === DOOM_LOAD_SKILL_TOOL)\n ? ''\n : formatSkillsForSystemPrompt(mapped.advertised).trim();\n // Pi's order for the same sections: operator prompt, project context, tools,\n // skills, package context, then the working directory last.\n return [\n initialSystemPrompt,\n projectContextBlock,\n formatToolPrompt(toolGuidance),\n skills,\n ...mapped.context,\n workingDirectoryLine,\n ]\n .filter(Boolean)\n .join('\\n\\n');\n };\n /** The last prompt a turn actually built, once one has. */\n let builtSystemPrompt: string | undefined;\n /**\n * What the context panel is shown: the prompt a turn sent, or the hook-free\n * base until one has.\n *\n * The base is composed from the applied snapshot rather than a fresh read, so\n * it answers at exactly the moments the tool inventory beside it answers.\n * Re-reading refuses while a selection is mid-apply, and the panel would then\n * spend a published revision saying there is no prompt before the next one\n * said there is.\n */\n const readSystemPrompt = (): HeadlessSystemPrompt | undefined => {\n if (!headlessHost) return undefined;\n if (builtSystemPrompt !== undefined) return { text: builtSystemPrompt, stage: 'effective' };\n return {\n text: composeSystemPrompt(headlessHost.appliedResources),\n stage: 'base',\n };\n };\n const beforeTool: NonNullable<DirectHarnessRuntimeOptions['beforeTool']> = async (event, context) => {\n if (!headlessReady || !headlessHost) throw new Error('Headless capabilities are not installed.');\n const patches = await headlessHost.dispatchHook('tool_call', event, context.abortSignal);\n let args = event.args;\n let block: NonNullable<HookMap['before_tool']['result']>['block'];\n for (const patch of patches) {\n if (!isRecord(patch)) continue;\n if (patch.args !== undefined) {\n if (!isJsonObject(patch.args)) throw new Error('Invalid headless tool arguments');\n args = patch.args as typeof args;\n }\n if (patch.block === undefined) continue;\n if (\n !isRecord(patch.block) ||\n typeof patch.block.reason !== 'string' ||\n (patch.block.terminate !== undefined && typeof patch.block.terminate !== 'boolean')\n ) {\n throw new Error('Invalid headless tool denial');\n }\n block = {\n reason: patch.block.reason,\n ...(typeof patch.block.terminate === 'boolean' ? { terminate: patch.block.terminate } : {}),\n };\n break;\n }\n return {\n ...(args === event.args ? {} : { args }),\n ...(block === undefined ? {} : { block }),\n };\n };\n const afterTool: NonNullable<DirectHarnessRuntimeOptions['afterTool']> = async (event, context) => {\n if (!headlessReady || !headlessHost) throw new Error('Headless capabilities are not installed.');\n const reportedError = reportedToolErrors.delete(event.toolCallId);\n const original = reportedError ? { ...event, isError: true } : event;\n const patches = await headlessHost.dispatchHook('tool_result', original, context.abortSignal);\n let content = original.content;\n let details = original.details;\n let isError = original.isError;\n let usage = original.usage;\n let terminate: boolean | undefined;\n let resultRewritten = false;\n for (const patch of patches) {\n if (!isRecord(patch)) continue;\n if (isToolContent(patch.content)) {\n content = patch.content;\n resultRewritten = true;\n }\n if ('details' in patch && isJsonValue(patch.details)) {\n details = patch.details;\n resultRewritten = true;\n }\n if (typeof patch.isError === 'boolean') {\n isError = patch.isError;\n resultRewritten = true;\n }\n if (isUsage(patch.usage)) usage = patch.usage;\n if (typeof patch.terminate === 'boolean') terminate = patch.terminate;\n }\n // Component snapshots contain the unguarded private result. A result hook cannot\n // redact model output while retaining the original payload in the renderer.\n if (resultRewritten && isRecord(details) && 'app' in details) {\n const { app: _app, ...redactedDetails } = details;\n details = redactedDetails;\n }\n return {\n ...(content === event.content ? {} : { content }),\n ...(details === event.details ? {} : { details }),\n ...(isError === event.isError ? {} : { isError }),\n ...(usage === event.usage ? {} : { usage }),\n ...(terminate === undefined ? {} : { terminate }),\n };\n };\n const runtime = await createDirectHarnessRuntime({\n cwd: options.cwd,\n sessionId: options.sessionId,\n ...(options.initialFastMode === undefined ? {} : { initialFastMode: options.initialFastMode }),\n ...(options.initialAgentLocked === undefined ? {} : { initialAgentLocked: options.initialAgentLocked }),\n ...(options.parentSessionId === undefined ? {} : { parentSessionId: options.parentSessionId }),\n storage: 'sqlite',\n historyOwnership: createHistoryOwnership({ sourceFormat: 'sqlite' }),\n sessionName: parsed.name ?? options.sessionName,\n ...(parsed.session === undefined ? {} : { sessionPath: parsed.session }),\n sessionsRoot: parsed.sessionDir ?? path.join(agentDir, 'server', 'sessions'),\n models: modelRuntime,\n model: resolved.model,\n ...(resolved.thinkingLevel === undefined ? {} : { thinkingLevel: resolved.thinkingLevel }),\n beforeModelRequest: async ({ phase }) => {\n if (!headlessReady || !headlessHost) throw new Error('Headless capabilities are not installed.');\n // Standalone hosts have no inherited axes to refresh on each turn.\n if (phase === 'turn' && options.inheritedSelection) {\n await headlessHost.inheritSelection(await options.inheritedSelection());\n }\n await headlessHost.settled();\n },\n transformContext: async (event) => {\n if (!headlessReady || !headlessHost) throw new Error('Headless capabilities are not installed.');\n const patches = await headlessHost.dispatchHook('context', event);\n let messages = event.messages;\n let systemPrompt = event.systemPrompt;\n for (const patch of patches) {\n if (!isRecord(patch)) continue;\n if (patch.messages !== undefined) {\n if (!Array.isArray(patch.messages)) throw new Error('Invalid headless context messages');\n messages = patch.messages as typeof messages;\n }\n if (patch.systemPrompt !== undefined) {\n if (typeof patch.systemPrompt !== 'string') throw new Error('Invalid headless context system prompt');\n systemPrompt = patch.systemPrompt;\n }\n }\n // Pi extensions transform last, the same precedence the tool surface gives facets:\n // a facet name wins over a Pi name, so a Pi contribution is the outer layer.\n return {\n messages: await (piHost?.transformContext(messages) ?? messages),\n systemPrompt,\n };\n },\n beforeTool,\n afterTool,\n beforePayload: async (event) => {\n if (!headlessReady || !headlessHost) throw new Error('Headless capabilities are not installed.');\n const patches = await headlessHost.dispatchHook('before_provider_request', event);\n let payload = event.payload;\n for (const patch of patches) {\n if (patch === undefined || patch === null) continue;\n if (!isRecord(patch) || !('payload' in patch)) throw new Error('Invalid headless provider payload patch');\n payload = patch.payload;\n }\n return { payload };\n },\n beforeCompaction: async (event) => {\n if (!headlessReady || !headlessHost) throw new Error('Headless capabilities are not installed.');\n const patches = await headlessHost.dispatchHook('session_before_compact', {\n reason: event.reason,\n preparation: event.preparation,\n ...(event.customInstructions === undefined\n ? {}\n : {\n instructions: event.customInstructions,\n customInstructions: event.customInstructions,\n }),\n });\n try {\n for (const patch of patches) {\n if (patch === undefined || patch === null) continue;\n if (!isRecord(patch)) throw new Error('Invalid headless compaction patch');\n if (patch.cancel !== undefined && typeof patch.cancel !== 'boolean')\n throw new Error('Invalid headless compaction cancellation');\n if (patch.decline !== undefined && typeof patch.decline !== 'boolean')\n throw new Error('Invalid headless compaction decline');\n const decline = patch.cancel === true || patch.decline === true;\n if (decline && patch.compaction !== undefined) throw new Error('Conflicting headless compaction patch');\n if (decline) return { decline: true };\n if (patch.compaction !== undefined) {\n if (!isCompactResult(patch.compaction)) throw new Error('Invalid headless compaction result');\n return { compaction: patch.compaction };\n }\n }\n } catch (error) {\n options.onNotice?.(\n `Headless compaction hook rejected: ${error instanceof Error ? error.message : String(error)}`,\n );\n return { decline: true };\n }\n return piHost?.beforeCompaction(event);\n },\n systemPrompt: async () => {\n let stage = 'resources';\n try {\n if (!headlessHost) throw new Error('Headless capabilities are not installed.');\n // ponytail: changes during resource reads still fail closed. Add a typed retry only if reproduced.\n await headlessHost.settled();\n let prompt = composeSystemPrompt(await headlessHost.readResources());\n stage = 'before_agent_start hooks';\n const patches = await headlessHost.dispatchHook('before_agent_start', {\n systemPrompt: prompt,\n });\n for (const patch of patches) {\n if (patch && typeof patch === 'object' && 'systemPrompt' in patch && typeof patch.systemPrompt === 'string') {\n prompt = patch.systemPrompt;\n }\n }\n promptPreparationFailed = false;\n promptPreparationError = undefined;\n // The panel follows what was sent, so a prompt that changed mid-session\n // republishes rather than waiting for the next selection change. Awaited\n // here, on the same stage that already journals a selection inherited\n // for this turn, so the published composition and the prompt the model\n // receives cannot disagree. Its own guard: a journal that will not take\n // the entry is a panel that lags, never a turn that is refused.\n if (prompt !== builtSystemPrompt) {\n builtSystemPrompt = prompt;\n try {\n await publishComposition();\n } catch {\n // Reported by the next publish, which starts from the same state.\n }\n }\n return prompt;\n } catch (error) {\n // A throwing system-prompt callback faults the upstream harness. Deny at model admission instead.\n promptPreparationFailed = true;\n promptPreparationError = error;\n // Diagnostic delivery must not delay or reject prompt preparation.\n observe(\n Promise.resolve().then(() =>\n options.telemetry?.recordError(\n PROMPT_PREPARATION_FAILED_EVENT,\n error,\n { session_id: options.sessionId, stage },\n { includeException: true },\n ),\n ),\n );\n return '';\n }\n },\n listCommands: () => {\n if (!headlessReady || !headlessHost) throw new Error('Headless capabilities are not installed.');\n return headlessHost.listCommands();\n },\n dispatchCommand: async (text) => {\n if (!headlessReady || !headlessHost) throw new Error('Headless capabilities are not installed.');\n const match = /^\\/(\\S+)(?:\\s+([\\s\\S]*))?$/.exec(text);\n if (!match) {\n await headlessHost.settled();\n headlessHost.assertActive();\n return false;\n }\n const name = match[1]!;\n const args = match[2] ?? '';\n if (!headlessHost.listCommands().some((entry) => entry.name === name)) {\n headlessHost.assertActive();\n return false;\n }\n await headlessHost.dispatchCommand(name, args);\n return true;\n },\n guardModelRequest: () => {\n if (promptPreparationFailed)\n throw new Error(\n `Headless capability preparation is not ready: ${harnessErrorMessage(promptPreparationError)}`,\n { cause: promptPreparationError },\n );\n if (!headlessReady || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready.');\n },\n });\n // The runtime already holds the history lease. A storage failure while opening must\n // release it, or every retry of this session id fails on the stale lease.\n const opened = await (async () => {\n await runtime.session.commit(async (tx) => {\n const metadata = await tx.doc(SessionMetadataDoc);\n metadata.workspaceRoot = options.repoRoot;\n metadata.execution = JSON.stringify({\n cwd: options.cwd,\n repoRoot: options.repoRoot,\n workspaceId: options.workspaceId,\n groupingRoot: options.groupingRoot ?? options.repoRoot,\n parentSessionId: options.parentSessionId,\n sessionProvenance: options.sessionProvenance,\n });\n }, BACKGROUND_CONTEXT);\n const agent = await runtime.lane.agent(BACKGROUND_CONTEXT);\n const model = agent.model ? modelRuntime.getModel(agent.model.provider, agent.model.modelId) : undefined;\n const entries = (await runtime.readEntries()).entries\n .filter((entry) => entry.type === 'custom' && entry.customType === DOOM_CONTEXT_ENTRY_TYPE)\n .slice(-1) as unknown as AnyRecord[];\n return { model, entries };\n })().catch(async (error: unknown) => {\n await runtime\n .dispose()\n .catch((disposeError: unknown) => options.onNotice?.(`Session runtime failed to close: ${String(disposeError)}`));\n throw error;\n });\n let currentModel = opened.model;\n // Last journaled doom-agent-model projection; a model_select naming the same model is noise.\n let publishedAgentModel: string | undefined;\n // One frozen baseline, shared by every surface this session exposes.\n const sessionContext: DoomSessionContext | undefined =\n options.workspaceId === undefined\n ? undefined\n : Object.freeze({\n sessionId: runtime.sessionId,\n workspaceId: options.workspaceId,\n workspaceRoot: options.groupingRoot ?? options.repoRoot,\n checkoutRoot: options.repoRoot,\n cwd: options.cwd,\n ...(options.parentSessionId === undefined ? {} : { parentSessionId: options.parentSessionId }),\n ...(options.sessionProvenance === undefined ? {} : { provenance: options.sessionProvenance }),\n });\n const entries = opened.entries;\n const listeners = new Set<(frame: SessionFrame) => void>();\n const selectionListeners = new Set<(selection: DoomHeadlessSelection) => void>();\n let latestSelection: DoomHeadlessSelection = options.selection;\n const initialSelection = restoreHeadlessSelection(entries, options.selection);\n let headlessHost: HeadlessHost | undefined;\n let mcpServiceRoot: CordisContext | undefined;\n let mcpLifecycle = new AbortController();\n const chatgptLifecycle = new AbortController();\n let piHost: PiExtensionHost | undefined;\n let client: ReturnType<typeof createHeadlessClient> | undefined;\n let disposed = false;\n let disposePromise: Promise<void> | undefined;\n let publishComposition: (selection?: DoomHeadlessSelection) => Promise<void> = async () => {\n throw new Error('Direct headless composition publisher is not installed.');\n };\n const readMcpContext = (signal: AbortSignal): DoomMcpContextSnapshot => {\n signal.throwIfAborted();\n const host = headlessHost;\n if (!host || disposed) throw new Error('Session context is unavailable.');\n const status = host.status;\n if (!status.ready || status.requestedRevision !== status.appliedRevision)\n throw new Error('Session context is unavailable.');\n const root = fs.realpathSync(options.repoRoot);\n const globalInstruction = path.join(fs.realpathSync(agentDir), 'AGENTS.md');\n const instructions = projectContextFiles.flatMap(({ path: filePath, content }) => {\n const relative = path.relative(options.repoRoot, filePath);\n if (relative === '' || relative.startsWith('..') || path.isAbsolute(relative)) return [];\n try {\n const canonicalPath = fs.realpathSync(filePath);\n if (canonicalPath === globalInstruction) return [];\n const canonicalRelative = path.relative(root, canonicalPath);\n if (canonicalRelative === '' || canonicalRelative.startsWith('..') || path.isAbsolute(canonicalRelative))\n return [];\n } catch {\n return [];\n }\n return [{ path: relative.replaceAll(path.sep, '/'), content }];\n });\n const selection = host.context.selection;\n const persona = host.appliedResources.find(\n ({ name, kind }) => name === 'po/profile-config' && kind === 'context',\n )?.text;\n signal.throwIfAborted();\n const current = host.status;\n if (\n !current.ready ||\n current.appliedRevision !== status.appliedRevision ||\n current.requestedRevision !== current.appliedRevision\n )\n throw new Error('Session context changed. Call load_context again.');\n return {\n session: { id: runtime.sessionId, revision: status.appliedRevision },\n repository: { root: options.repoRoot, cwd: options.cwd },\n selection: {\n profile: selection.profile ?? null,\n domains: [...selection.domains],\n majorMode: selection.majorMode,\n activeLayers: [...selection.activeLayers],\n minorModes: [...(selection.state?.['minor-mode'] ?? [])],\n },\n instructions,\n persona: persona ?? null,\n };\n };\n\n const childSessionProvider = createHeadlessChildSessionServiceProvider({\n parentSessionId: runtime.sessionId,\n cwd: options.cwd,\n sessionsRoot: parsed.sessionDir ?? path.join(agentDir, 'server', 'sessions'),\n models: modelRuntime,\n defaultModel: () => currentModel,\n parentFastMode: async () => {\n const state = await runtime.readState();\n if (typeof state.fastMode !== 'boolean') throw new Error('Parent Fast mode must be a boolean.');\n return state.fastMode;\n },\n subscribeMcpTool: (listener) => {\n const root = mcpServiceRoot;\n return (\n root?.on('internal/service', (name) => {\n if (name === DOOM_CHILD_SESSION_MCP_TOOL_SERVICE) listener();\n }) ?? (() => undefined)\n );\n },\n hooks: () => {\n if (disposed || !headlessReady || !headlessHost?.status.ready)\n throw new Error('Headless capabilities are not installed.');\n return mcpServiceRoot?.get(DOOM_CHILD_SESSION_HOOKS_SERVICE) as DoomChildSessionHooks | undefined;\n },\n mcpTool: () => {\n if (disposed || !headlessReady || !headlessHost?.status.ready) return undefined;\n return mcpServiceRoot?.get(DOOM_CHILD_SESSION_MCP_TOOL_SERVICE) as DoomChildSessionMcpTool | undefined;\n },\n });\n\n const completeAuxiliaryModel = async (\n reference: string,\n request: Omit<DoomHeadlessToolCompletionRequest, 'tools'> & {\n tools?: DoomHeadlessToolCompletionRequest['tools'];\n },\n ) => {\n if (disposed || !headlessReady || promptPreparationFailed || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready.');\n request.signal?.throwIfAborted();\n const separator = reference.indexOf('/');\n const model =\n separator > 0 ? modelRuntime.getModel(reference.slice(0, separator), reference.slice(separator + 1)) : undefined;\n if (!model || !modelRuntime.hasConfiguredAuth(model.provider))\n throw new Error(`Model is not configured: ${reference}`);\n if (!runtime.completeModel) throw new Error('The runtime does not support auxiliary model requests.');\n const response = await runtime.completeModel(\n model,\n {\n systemPrompt: request.systemPrompt,\n messages: [{ role: 'user', content: request.input, timestamp: Date.now() }],\n ...(request.tools ? { tools: [...request.tools] } : {}),\n },\n {\n signal: request.signal,\n maxTokens: request.maxTokens,\n cacheRetention: request.cacheRetention,\n reasoningEffort: 'none',\n maxRetries: 0,\n },\n );\n request.signal?.throwIfAborted();\n if (response.stopReason === 'error' || response.stopReason === 'aborted')\n throw new Error(response.errorMessage ?? `Model stopped: ${response.stopReason}`);\n return response;\n };\n\n const informationalMessage = (message: {\n type: string;\n text: string;\n display?: boolean;\n details?: unknown;\n }): AgentMessage => {\n if (!message || typeof message.type !== 'string' || !message.type.trim() || typeof message.text !== 'string')\n throw new TypeError('Informational messages require a non-empty type and string text.');\n if (message.display !== undefined && typeof message.display !== 'boolean')\n throw new TypeError('Informational message display must be a boolean.');\n const details = message.details === undefined ? undefined : boundedJsonCopy(message.details);\n return {\n role: 'custom',\n customType: message.type,\n content: message.text,\n display: message.display ?? true,\n ...(details === undefined ? {} : { details }),\n timestamp: Date.now(),\n };\n };\n const executionContext = (selection: DoomHeadlessSelection): DoomHeadlessExecutionContext => ({\n cwd: options.cwd,\n repoRoot: options.repoRoot,\n sessionId: runtime.sessionId,\n ...(sessionContext === undefined ? {} : { sessionContext }),\n environment: options.environment,\n client: client!.client,\n model: currentModel === undefined ? undefined : modelMetadata(currentModel),\n getModel(provider, id) {\n const model = modelRuntime.getModel(provider, id);\n return model ? modelMetadata(model) : undefined;\n },\n getAvailableModels() {\n if (disposed) throw new Error('The session is closed.');\n return modelRuntime\n .getAvailableSnapshot()\n .filter((model) => modelRuntime.hasConfiguredAuth(model.provider))\n .map(({ provider, id }) => ({ provider, id }));\n },\n selection,\n imageGeneration: {\n available: () => !disposed && modelRuntime.isUsingSubscription(CHATGPT_AUTH_PROVIDER_ID),\n async generate(request) {\n if (disposed || !headlessReady || promptPreparationFailed || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready.');\n return createChatgptImageClient({\n available: () => modelRuntime.isUsingSubscription(CHATGPT_AUTH_PROVIDER_ID),\n getAuth: (signal) => modelRuntime.getAuth(CHATGPT_AUTH_PROVIDER_ID, { signal }),\n }).generate({\n ...request,\n signal: request.signal ? AbortSignal.any([request.signal, chatgptLifecycle.signal]) : chatgptLifecycle.signal,\n });\n },\n },\n webSearch: {\n available: () => !disposed && modelRuntime.isUsingSubscription(CHATGPT_AUTH_PROVIDER_ID),\n async search(request) {\n if (disposed || !headlessReady || promptPreparationFailed || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready.');\n return createChatgptWebSearchClient({\n available: () => modelRuntime.isUsingSubscription(CHATGPT_AUTH_PROVIDER_ID),\n getAuth: (signal) => modelRuntime.getAuth(CHATGPT_AUTH_PROVIDER_ID, { signal }),\n }).search({\n ...request,\n sessionId: runtime.sessionId,\n ...(currentModel?.provider === 'openai-codex' ? { model: currentModel.id } : {}),\n signal: request.signal ? AbortSignal.any([request.signal, chatgptLifecycle.signal]) : chatgptLifecycle.signal,\n });\n },\n },\n textCompletion: {\n available(reference) {\n const separator = reference.indexOf('/');\n return (\n separator > 0 &&\n !!modelRuntime.getModel(reference.slice(0, separator), reference.slice(separator + 1)) &&\n modelRuntime.hasConfiguredAuth(reference.slice(0, separator))\n );\n },\n async summarize(reference, request) {\n if (disposed || !headlessReady || promptPreparationFailed || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready.');\n request.signal?.throwIfAborted();\n const separator = reference.indexOf('/');\n const model =\n separator > 0\n ? modelRuntime.getModel(reference.slice(0, separator), reference.slice(separator + 1))\n : undefined;\n if (!model || !modelRuntime.hasConfiguredAuth(model.provider))\n throw new Error(`Model is not configured: ${reference}`);\n if (!runtime.completeModel) throw new Error('The runtime does not support auxiliary model requests.');\n const messages = boundedJsonCopy(request.messages);\n if (!Array.isArray(messages) || !messages.every(isSummaryMessage))\n throw new TypeError('Summary requests require supported native messages.');\n if (\n typeof request.instructions !== 'string' ||\n (request.previousSummary !== undefined && typeof request.previousSummary !== 'string')\n )\n throw new TypeError('Summary instructions and previous summary must be strings.');\n if (\n request.thinkingLevel !== undefined &&\n !['off', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max'].includes(request.thinkingLevel)\n )\n throw new TypeError('Unsupported summary thinking level.');\n let summaryFailure: Error | undefined;\n const summary = await generateSummary(\n messages,\n model,\n DEFAULT_COMPACTION_SETTINGS.reserveTokens,\n undefined,\n undefined,\n request.signal,\n request.instructions,\n request.previousSummary,\n request.thinkingLevel,\n (_model, context, options) => {\n const stream = createAssistantMessageEventStream();\n void runtime.completeModel!(model, context, {\n signal: options?.signal,\n maxTokens: options?.maxTokens,\n cacheRetention: 'none',\n reasoningEffort: !model.reasoning || request.thinkingLevel === 'off' ? 'none' : request.thinkingLevel,\n maxRetries: 0,\n }).then(\n (response) => {\n if (response.stopReason === 'aborted')\n summaryFailure = new Error(response.errorMessage ?? 'Summary was aborted.');\n stream.end(response);\n },\n (error: unknown) => {\n summaryFailure = error instanceof Error ? error : new Error(String(error));\n stream.end({\n role: 'assistant',\n api: model.api,\n provider: model.provider,\n model: model.id,\n content: [],\n stopReason: request.signal?.aborted ? 'aborted' : 'error',\n errorMessage: error instanceof Error ? error.message : String(error),\n timestamp: Date.now(),\n usage: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n totalTokens: 0,\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n total: 0,\n },\n },\n });\n },\n );\n return stream;\n },\n );\n request.signal?.throwIfAborted();\n if (summaryFailure) throw summaryFailure;\n if (!summary.trim()) throw new Error('Summarization returned an empty checkpoint.');\n return summary;\n },\n async complete(reference, request) {\n const response = await completeAuxiliaryModel(reference, {\n ...request,\n tools: undefined,\n });\n return response.content\n .filter((part) => part.type === 'text')\n .map((part) => part.text)\n .join('')\n .trim();\n },\n },\n toolCompletion: {\n async complete(reference, request) {\n const response = await completeAuxiliaryModel(reference, request);\n if (response.stopReason === 'length') throw new Error('Auxiliary tool request exceeded its output limit.');\n return {\n toolCalls: response.content.filter((part) => part.type === 'toolCall'),\n usage: response.usage,\n };\n },\n },\n session: {\n setFastMode: (enabled) => runtime.setFastMode(enabled),\n async readModelSettings() {\n const selected = (await runtime.lane.agent(BACKGROUND_CONTEXT)).model;\n const model = selected ? modelRuntime.getModel(selected.provider, selected.modelId) : undefined;\n const thinkingLevel = (await runtime.lane.agent(BACKGROUND_CONTEXT)).thinkingLevel;\n return {\n ...(model ? { model: modelIdentity(model) } : {}),\n thinkingLevel,\n };\n },\n async setModelSettings(settings) {\n if (settings.model) await runtime.setModel(settings.model);\n if (settings.thinkingLevel !== undefined) await runtime.setThinkingLevel(settings.thinkingLevel);\n },\n async forkSource() {\n const sessionFile = runtime.sessionFile;\n if (typeof sessionFile !== 'string') throw new Error('The parent session has no persisted journal.');\n const { leafId } = await runtime.readEntries();\n return {\n kind: 'v4-fork' as const,\n sessionFile,\n branch: runtime.laneName,\n ...(leafId === null ? {} : { entryId: leafId }),\n };\n },\n entries: async (query) => {\n let entries = (await runtime.readEntries()).entries.filter(\n (entry) =>\n (!query?.type || entry.type === query.type) &&\n (!query?.customType || (entry.type === 'custom' && entry.customType === query.customType)),\n );\n if (query?.limit !== undefined) entries = entries.toReversed().slice(0, query.limit);\n return entries as unknown as AnyRecord[];\n },\n async appendMessage(message) {\n return runtime.appendMessage(informationalMessage(message));\n },\n async admitMessage(message, delivery = 'followUp', requestId) {\n try {\n if (disposed || !headlessReady || promptPreparationFailed || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready.');\n if (delivery !== 'steer' && delivery !== 'followUp')\n throw new TypeError('Custom message delivery must be steer or followUp.');\n if (requestId !== undefined && (typeof requestId !== 'string' || !requestId.trim()))\n throw new TypeError('Custom message requestId must be a non-empty string.');\n const submission = await runtime.submitInternalMessage(informationalMessage(message), delivery, requestId);\n void submission.settled.catch((error: unknown) =>\n client!.client.notify({\n body: error instanceof Error ? error.message : String(error),\n level: 'error',\n }),\n );\n } catch (error) {\n throw new DoomHeadlessPromptAdmissionError(error);\n }\n },\n registerCheckpointBoundary(callback) {\n if (!runtime.registerCheckpointBoundary) throw new Error('Native checkpoint boundaries are unavailable.');\n const registration = runtime.registerCheckpointBoundary(async (boundary) => {\n if (disposed || !headlessReady || !headlessHost?.status.ready) return;\n await callback({\n signal: boundary.signal,\n appendMessage: (message) => boundary.appendMessage(informationalMessage(message)),\n });\n });\n return {\n appendMessage: (message) =>\n disposed || !headlessReady || !headlessHost?.status.ready\n ? Promise.resolve(undefined)\n : registration.appendMessage(informationalMessage(message)),\n dispose: () => registration.dispose(),\n };\n },\n async contextMessages() {\n const assertReadable = () => {\n if (disposed || !headlessReady || promptPreparationFailed || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready.');\n };\n assertReadable();\n const messages = boundedJsonCopy(await runtime.getContextMessages()) as AnyRecord[];\n assertReadable();\n return messages;\n },\n async contextUsage() {\n const usage = (await runtime.getSessionStats()).contextUsage;\n return usage ? { tokens: usage.tokens, contextWindow: usage.contextWindow } : undefined;\n },\n setLabel: (entryId, label) => runtime.setLabel(entryId, label),\n async appendCustomEntry(type, data) {\n await runtime.appendCustomEntry(type, data);\n },\n async prompt(text, delivery) {\n await (\n await runtime.submitPrompt(\n text,\n undefined,\n delivery === 'steer' || delivery === 'followUp' ? delivery : undefined,\n )\n ).settled;\n },\n async admitPrompt(text, delivery, origin, requestId) {\n try {\n if (origin === 'operator' && delivery === 'followUp') return await runtime.followUp(text);\n const submission =\n delivery === 'interrupt'\n ? await runtime.submitUserPrompt(text)\n : origin === 'operator'\n ? await runtime.submitPrompt(text, undefined, delivery === 'steer' ? 'steer' : undefined)\n : await runtime.submitInternalMessage(text, delivery === 'steer' ? 'steer' : 'followUp', requestId);\n void submission.settled.catch((error: unknown) =>\n client!.client.notify({\n body: error instanceof Error ? error.message : String(error),\n level: 'error',\n }),\n );\n } catch (error) {\n throw new DoomHeadlessPromptAdmissionError(error);\n }\n },\n abort: () => runtime.abort(),\n compact: (instructions) => runtime.compact(instructions),\n async activity() {\n const state = await runtime.readState();\n return {\n hasPendingMessages: Number(state.pendingMessageCount) > 0,\n // Settlement fences external operations but is not an active model run.\n isIdle: (!state.isStreaming || state.operationId === 'settling') && !state.isCompacting,\n };\n },\n setName: (name) => runtime.setName(name),\n },\n shutdown: () => stop(),\n });\n\n client = createHeadlessClient({\n appendCustomEntry: async (type, data) => {\n await runtime.appendCustomEntry(type, data);\n },\n emitFrame: (frame) => emitTo(listeners, frame),\n });\n\n const unsubscribePresentation = runtime.onPresentationFrame((frame) => emitTo(listeners, frame));\n let logicalRunActive = false;\n let runMessages: AgentMessage[] = [];\n let requiredServerPackages: readonly string[] = [];\n let installedServerPackages: readonly string[] = [];\n const unsubscribeEvents = runtime.onEvent(async (event, _context) => {\n if ((event.type === 'run_start' || event.type === 'run_resume') && !logicalRunActive) {\n logicalRunActive = true;\n runMessages = [];\n }\n if (event.type === 'message_end' && event.runId !== undefined) runMessages.push(event.message);\n if (event.type === 'run_end' && !event.successorActive) {\n const messages = runMessages;\n runMessages = [];\n const ended = logicalRunActive;\n logicalRunActive = false;\n if (ended && headlessHost?.status.ready) await headlessHost.dispatchHook('agent_end', { messages });\n }\n if (event.type === 'config_update' && event.property === 'model') {\n const selected = (await runtime.lane.agent(BACKGROUND_CONTEXT)).model;\n currentModel = selected ? modelRuntime.getModel(selected.provider, selected.modelId) : undefined;\n if (headlessHost !== undefined && currentModel !== undefined && headlessHost.status.ready) {\n await headlessHost.dispatchHook('model_select', {\n model: currentModel,\n });\n // Clients get no wire event for a model chosen inside the agent (plan mode's planning\n // model), so journal it on the entry_appended road the dashboard footer folds.\n const projection = { provider: currentModel.provider, id: currentModel.id };\n const serialized = JSON.stringify(projection);\n if (serialized !== publishedAgentModel) {\n publishedAgentModel = serialized;\n await runtime.appendCustomEntry(DOOM_AGENT_MODEL_ENTRY_TYPE, projection);\n }\n }\n }\n const hook = event.type === 'run_end' && event.successorActive ? undefined : eventHook(event.type);\n if (headlessHost !== undefined && hook !== undefined && headlessHost.status.ready)\n await headlessHost.dispatchHook(\n hook,\n event.type === 'navigation_start' ? { ...event, status: 'started' } : (event as unknown as AnyRecord),\n );\n });\n\n // The facet tools from the most recent reconciliation. Kept so a Pi-side restriction change can\n // rebuild the merged surface in memory, the same way the kernel's tools sink does, instead of\n // forcing a session reload.\n let appliedFacetTools: readonly HeadlessTool[] = [];\n let appliedSessionTools = new Map<string, AppliedSessionTool>();\n let appliedSkills = new Map<string, { descriptor: SessionSkillDescriptor; content: string }>();\n let surfaceRevision = 0;\n let toolSurfaceReady = false;\n let toolReapplyQueued = false;\n let mcpSurfaceRevision = 0;\n let mcpSurfaceReady = false;\n let appliedMcpTools = new Map<string, AppliedSessionTool>();\n let appliedMcpSkills = new Map<string, { descriptor: SessionSkillDescriptor; skill: DoomMcpSkill }>();\n let appliedMcpUiResources = new Map<\n string,\n { descriptor: SessionUiResourceDescriptor; resource: DoomMcpUiResource }\n >();\n let mcpRefreshQueued = false;\n\n const scheduleMcpRefresh = (): void => {\n if (mcpRefreshQueued || disposed || !headlessReady) return;\n mcpRefreshQueued = true;\n queueMicrotask(() => {\n mcpRefreshQueued = false;\n // A selection change in flight also recomposes MCP once it is ready again.\n if (disposed || !headlessReady || !headlessHost?.status.ready) return;\n void prepareMcpSurface().catch((error: unknown) =>\n options.onNotice?.(`MCP tool refresh failed: ${error instanceof Error ? error.message : String(error)}`),\n );\n });\n };\n\n const prepareMcpSurface = async (): Promise<void> => {\n if (!headlessHost?.status.ready) throw new Error('Headless capabilities are not installed.');\n if (mcpServiceRoot === undefined) throw new Error('MCP session services are not installed.');\n mcpSurfaceReady = false;\n mcpLifecycle.abort();\n const lifecycle = new AbortController();\n mcpLifecycle = lifecycle;\n const pluginContext = {\n execution: headlessHost.context,\n services: {\n get: <T>(name: string): T | undefined =>\n (mcpServiceRoot?.get(name) as T | undefined) ?? piHost?.getService<T>(name),\n },\n selection: {\n read: () => headlessHost!.context.selection,\n change: (change: Parameters<HeadlessHost['changeSelection']>[0]) => headlessHost!.changeSelection(change),\n },\n loadContext: () => readMcpContext(lifecycle.signal),\n signal: lifecycle.signal,\n refresh: scheduleMcpRefresh,\n };\n const nextTools = new Map<string, AppliedSessionTool>();\n const nextSkills = new Map<string, { descriptor: SessionSkillDescriptor; skill: DoomMcpSkill }>();\n const nextUiResources = new Map<string, { descriptor: SessionUiResourceDescriptor; resource: DoomMcpUiResource }>();\n for (const loaded of options.mcpPlugins ?? []) {\n const selection = headlessHost.context.selection;\n if (\n !loaded.declaration.owners.some(\n (owner) =>\n owner.majorMode === selection.majorMode &&\n (owner.layer === 'default' || selection.activeLayers.includes(owner.layer)),\n )\n )\n continue;\n const scope =\n typeof loaded.plugin.session === 'function'\n ? await loaded.plugin.session(pluginContext)\n : loaded.plugin.session;\n lifecycle.signal.throwIfAborted();\n const resources = scope.uiResources ?? [];\n for (const resource of resources) {\n const uri = new URL(resource.uri);\n if (\n uri.protocol !== 'ui:' ||\n !uri.hostname ||\n uri.username ||\n uri.password ||\n uri.search ||\n uri.hash ||\n uri.href !== resource.uri ||\n resource.mimeType !== 'text/html;profile=mcp-app'\n )\n throw new Error(`Invalid MCP UI resource '${resource.uri}'`);\n if (nextUiResources.has(resource.uri) && nextUiResources.get(resource.uri)!.resource !== resource)\n throw new Error(`Duplicate MCP UI resource '${resource.uri}'`);\n const descriptor: SessionUiResourceDescriptor = {\n uri: resource.uri,\n name: resource.name,\n mimeType: resource.mimeType,\n ...(resource.description === undefined ? {} : { description: resource.description }),\n ...(resource._meta === undefined ? {} : { _meta: resource._meta }),\n };\n nextUiResources.set(resource.uri, { descriptor, resource });\n }\n for (const tool of scope.tools ?? []) {\n if (nextTools.has(tool.name)) throw new Error(`Duplicate MCP tool '${tool.name}'`);\n const resourceUri = tool._meta?.ui?.resourceUri;\n if (resourceUri !== undefined && !resources.some((resource) => resource.uri === resourceUri))\n throw new Error(`MCP tool '${tool.name}' references a UI resource not owned by its plugin`);\n // Tool restrictions reach the agent surface through `allowsTool`; the remote surface is\n // composed here and must honour the same withdrawals.\n if (!headlessHost!.allowsTool(tool.name)) continue;\n nextTools.set(tool.name, {\n descriptor: {\n name: tool.name,\n label: tool.label ?? tool.name,\n description: tool.description,\n parameters: tool.parameters,\n ...(tool.annotations === undefined ? {} : { annotations: tool.annotations }),\n ...(tool.outputSchema === undefined ? {} : { outputSchema: tool.outputSchema }),\n ...(tool._meta === undefined ? {} : { _meta: tool._meta }),\n },\n execute: (toolCallId, parameters, signal, onUpdate, execution) =>\n tool.execute(toolCallId, parameters, signal, onUpdate, execution ?? headlessHost!.context),\n });\n }\n for (const skill of scope.skills ?? []) {\n if ([...nextSkills.values()].some((candidate) => candidate.descriptor.name === skill.name))\n throw new Error(`Duplicate MCP skill '${skill.name}'`);\n const uri = `po://session/${encodeURIComponent(runtime.sessionId)}/mcp/skills/${encodeURIComponent(skill.name)}`;\n nextSkills.set(uri, {\n descriptor: { name: skill.name, description: skill.description, uri },\n skill,\n });\n }\n }\n appliedMcpTools = nextTools;\n appliedMcpSkills = nextSkills;\n appliedMcpUiResources = nextUiResources;\n mcpSurfaceRevision += 1;\n mcpSurfaceReady = true;\n };\n\n const applyToolSurface = async (tools: readonly HeadlessTool[]): Promise<void> => {\n toolSurfaceReady = false;\n const modelTools = tools.filter(isDoomHeadlessToolModelVisible);\n const facetTools = modelTools.map((tool) =>\n toolAdapter(\n tool.name === DOOM_LOAD_SKILL_TOOL\n ? {\n ...tool,\n description: describeLoadSkillTool(tool.description, headlessHost?.appliedResources ?? []),\n }\n : tool,\n () => headlessHost!.context,\n reportedToolErrors,\n ),\n );\n // Facet tools win a name collision, including when the collision is with a\n // name the facet surface declared and then gated out. The reconciled set\n // owns the name either way, so a Pi extension tool never fills a slot a\n // mode-aware facet deliberately left empty.\n const facetNames = headlessHost?.declaredToolNames ?? new Set(facetTools.map((tool) => tool.name));\n const piTools = (piHost?.tools ?? [])\n .filter((tool) => !facetNames.has(tool.name) && headlessHost?.allowsTool(tool.name) !== false)\n .map((tool): AgentHarnessTool<object | undefined> => ({\n ...tool,\n async execute(...args) {\n headlessHost!.assertActive();\n if (!toolSurfaceReady || !headlessHost!.allowsTool(tool.name))\n throw new Error(`Tool '${tool.name}' is no longer active`);\n return tool.execute(...args);\n },\n }));\n const piNames = new Set(piTools.map((tool) => tool.name));\n const nextToolGuidance = [\n ...(piHost?.toolGuidance ?? []).filter((entry) => piNames.has(entry.name)),\n ...modelTools.map((tool) => ({\n name: tool.name,\n ...(tool.promptSnippet === undefined ? {} : { promptSnippet: tool.promptSnippet }),\n ...(tool.promptGuidelines === undefined ? {} : { promptGuidelines: tool.promptGuidelines }),\n })),\n ];\n await runtime.replaceTools([...piTools, ...facetTools]);\n const next = new Map<string, AppliedSessionTool>();\n for (const tool of piTools) {\n next.set(tool.name, {\n descriptor: {\n name: tool.name,\n label: tool.label ?? tool.name,\n description: tool.description,\n parameters: tool.parameters,\n },\n execute: (toolCallId, parameters, signal, onUpdate) =>\n piHost!.executeTool(tool.name, toolCallId, parameters, signal, onUpdate),\n });\n }\n for (const tool of tools) {\n next.set(tool.name, {\n descriptor: {\n name: tool.name,\n label: tool.label ?? tool.name,\n description: tool.description,\n parameters: tool.parameters,\n ...(tool.annotations === undefined ? {} : { annotations: tool.annotations }),\n ...(tool.outputSchema === undefined ? {} : { outputSchema: tool.outputSchema }),\n ...(tool._meta === undefined ? {} : { _meta: tool._meta }),\n },\n execute: (toolCallId, parameters, signal, onUpdate) =>\n tool.execute(toolCallId, parameters, signal, onUpdate, headlessHost!.context),\n });\n }\n toolGuidance = nextToolGuidance;\n appliedSessionTools = next;\n surfaceRevision += 1;\n toolSurfaceReady = true;\n };\n\n /**\n * Rebuilds the merged tool surface after a Pi extension narrowed its own tools.\n *\n * Deferred because the tool surface arbiter calls `setActiveTools` synchronously from inside\n * `register`, and coalesced because several extensions register their restrictions in the same\n * tick. The facet set is unchanged, so this never re-enters the kernel.\n */\n // Facet reconciliation and Pi restriction changes both rebuild the surface. Each run reads\n // the latest facet tools when it starts, so the surface converges on the last change\n // instead of whichever overlapping replaceTools happened to finish last.\n let toolLine: Promise<void> = Promise.resolve();\n const applyLatestTools = (): Promise<void> => {\n // A failed run was already reported to the caller that queued it; the line moves on.\n toolLine = toolLine.catch(() => undefined).then(() => applyToolSurface(appliedFacetTools));\n return toolLine;\n };\n\n const scheduleToolReapply = (): void => {\n if (toolReapplyQueued) return;\n toolReapplyQueued = true;\n queueMicrotask(() => {\n toolReapplyQueued = false;\n if (disposed) return;\n void applyLatestTools().catch((error: unknown) =>\n options.onNotice?.(\n `Pi extension tool refresh failed: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n });\n };\n\n let admittedToolSurface: Pick<SessionToolSurface, 'readSurface' | 'invokeTool'> | undefined;\n const prepareFacets = (root: CordisContext): void => {\n mcpServiceRoot = root;\n root.plugin((context) => {\n context.provide(DOOM_CHILD_SESSION_SERVICE, childSessionProvider.get());\n context.effect(() => () => childSessionProvider.close(), 'headless child session service lifetime');\n });\n if (headlessHost !== undefined) throw new Error('Direct headless facets were prepared more than once.');\n if (piPreload !== undefined) {\n piHost = createPiExtensionHost({\n cwd: options.cwd,\n agentDir,\n models: modelRuntime,\n settings,\n runtime,\n preload: piPreload,\n getModel: () => currentModel,\n getThinkingLevel: () => resolved.thinkingLevel ?? 'off',\n client: () => client?.client,\n onActiveToolsChanged: scheduleToolReapply,\n serverServices: {\n sessionId: options.sessionId,\n get: <T>(name: string) => root.get(name) as T | undefined,\n },\n ...(options.onNotice === undefined ? {} : { onNotice: options.onNotice }),\n });\n }\n headlessHost = new HeadlessHost(root, {\n candidates: options.candidates,\n toolSurface: () => admittedToolSurface,\n selection: initialSelection,\n selectionOverrides: [\n ...new Set([\n ...(options.selectionOverrides ?? []),\n ...(['majorMode', 'domains', 'profile'] as const).filter(\n (axis) => JSON.stringify(initialSelection[axis]) !== JSON.stringify(options.selection[axis]),\n ),\n ]),\n ],\n context: executionContext,\n resolveSelection: options.resolveSelection,\n validateSelection: (selection) => {\n for (const packageName of requiredServerPackages) {\n const eligible = options.candidates.some(\n (entry) =>\n entry.packageName === packageName &&\n entry.scopes.includes('session') &&\n entry.owners.some(\n (owner) =>\n owner.majorMode === selection.majorMode &&\n (owner.layer === 'default' || selection.activeLayers.includes(owner.layer)),\n ),\n );\n if (!eligible || !installedServerPackages.includes(packageName))\n throw new Error(\n `Required headless package '${packageName}' is unavailable. Run po sync, then reopen this session.`,\n );\n }\n },\n ...(options.allowedTools === undefined ? {} : { allowedTools: () => options.allowedTools }),\n applyTools: async (tools) => {\n appliedFacetTools = tools;\n await applyLatestTools();\n },\n applyResources: async (next) => {\n const mapped = mapResources(next);\n // Facet skills win a name collision, for the same reason facet tools do.\n const facetNames = new Set((mapped.harness.skills ?? []).map((skill) => skill.name));\n const piSkills = (piHost?.skills ?? []).filter((skill) => !facetNames.has(skill.name));\n const mergedSkills = [...piSkills, ...(mapped.harness.skills ?? [])];\n await runtime.replaceResources(\n piSkills.length === 0 ? mapped.harness : { ...mapped.harness, skills: mergedSkills },\n );\n appliedSkills = new Map(\n mergedSkills.map((skill) => {\n const uri = `po://session/${encodeURIComponent(runtime.sessionId)}/skills/${encodeURIComponent(skill.name)}`;\n return [\n uri,\n {\n descriptor: {\n name: skill.name,\n description: skill.description,\n uri,\n },\n content: skill.content,\n },\n ];\n }),\n );\n surfaceRevision += 1;\n // The load tool lists the skills in its description, so it follows them.\n if (appliedFacetTools.some((tool) => tool.name === DOOM_LOAD_SKILL_TOOL)) await applyLatestTools();\n },\n onApplied: async (selection) => {\n options.publishSelectionStatus?.((source, text) => client!.client.setStatus(source, text), selection);\n latestSelection = selection;\n for (const listener of selectionListeners) listener(selection);\n },\n onError: (error) => options.onNotice?.(`Headless selection failed: ${harnessErrorMessage(error)}`),\n });\n publishComposition = createHeadlessCompositionPublisher(\n runtime,\n headlessHost,\n options.environment,\n (selection) => options.contextGroups?.(root, selection) ?? [],\n readSystemPrompt,\n );\n headlessHost.subscribeSelection(async (selection) => {\n // `onApplied` runs before HeadlessHost publishes its ready snapshot. Recompose\n // the remote surface here, after selection is coherent, rather than making a\n // transient not-ready state fail the host selection.\n if (!headlessReady || !headlessHost?.status.ready) return;\n // A throw here marks the whole host not ready. That is right for a composition that\n // failed to publish, but not for the remote MCP surface: a failure there, or a newer\n // refresh aborting this one, must not block the session's own dispatch.\n try {\n await prepareMcpSurface();\n } catch (error) {\n // A superseded refresh ends with its lifecycle signal's AbortError.\n if (!(error instanceof Error && error.name === 'AbortError'))\n options.onNotice?.(`MCP tool refresh failed: ${error instanceof Error ? error.message : String(error)}`);\n }\n await publishComposition(selection);\n });\n };\n\n const activateFacets = async (installed: InstalledServerFacets): Promise<void> => {\n if (headlessHost === undefined) throw new Error('Direct headless host was not prepared.');\n const host = headlessHost;\n // Dispose can run while activation awaits. Continuing would mark a closed session ready\n // and run its startup hooks against a disposed runtime.\n const assertLive = (): void => {\n if (disposed) throw new Error('The session was closed while it was starting.');\n };\n requiredServerPackages = (await options.requiredServerPackages?.()) ?? [];\n installedServerPackages = installed.installedPackages;\n assertLive();\n host.setAvailableSources(installed.installedPackages);\n // Pi extensions load before the first selection so their session lifetime tools and skills\n // are present in the very first composition. A failure here is reported, never fatal.\n if (piHost !== undefined) {\n try {\n await piHost.load();\n } catch (error) {\n options.onNotice?.(`Pi extensions failed to load: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n assertLive();\n await host.select(initialSelection);\n assertLive();\n // Nothing recomputes readiness after this point, so a session whose first selection\n // failed would stay registered but unable to run. Fail creation instead.\n if (!host.status.ready)\n throw new Error(`Session capabilities failed to start: ${host.status.error ?? 'selection is not ready'}`);\n headlessReady = true;\n await prepareMcpSurface();\n assertLive();\n // Honor persisted abort/pause intent before recovering an interrupted native drive.\n await runtime.recover();\n assertLive();\n await host.dispatchHook('session_start', {});\n await publishComposition();\n // Startup waits for continuation admission, not the resumed provider/tool work.\n // An idle lane has released its ownership before activation can succeed.\n const resumed = await runtime.admitResume();\n void resumed.settled.catch((error: unknown) =>\n options.onNotice?.(`Session resume failed: ${harnessErrorMessage(error)}`),\n );\n assertLive();\n };\n\n const dispose = (): Promise<void> => {\n disposePromise ??= (async () => {\n if (disposed) return;\n // Only a session that finished activation ran session_start, so only it gets the\n // matching shutdown hook. The owner disposes this host before removing facets, so a\n // ready host is still ready when the hook is dispatched.\n const wasReady = headlessReady;\n disposed = true;\n headlessReady = false;\n mcpSurfaceReady = false;\n mcpLifecycle.abort();\n chatgptLifecycle.abort();\n const failures: unknown[] = [];\n try {\n await runtime.interrupt();\n } catch (error) {\n failures.push(error);\n }\n try {\n if (wasReady && headlessHost?.status.ready) await headlessHost.dispatchHook('session_shutdown', {});\n } catch (error) {\n failures.push(error);\n }\n // Native close seals late model/tool effects while their extension hosts still exist.\n try {\n await runtime.dispose();\n } catch (error) {\n failures.push(error);\n }\n try {\n await piHost?.shutdown();\n } catch (error) {\n failures.push(error);\n }\n try {\n await headlessHost?.close();\n } catch (error) {\n failures.push(error);\n }\n // Activity cleanup still needs its client to clear status during host close.\n client?.dispose();\n unsubscribePresentation();\n unsubscribeEvents();\n try {\n await childSessionProvider.close();\n } catch (error) {\n failures.push(error);\n }\n releaseEnvironment();\n if (failures.length) throw new AggregateError(failures, 'Headless session shutdown failed');\n })();\n return disposePromise;\n };\n const stop = (): void => {\n void dispose().catch((error: unknown) => options.onNotice?.(harnessErrorMessage(error)));\n };\n\n const invokeSurfaceTool = async (\n invocation: Parameters<SessionToolSurface['invokeTool']>[0],\n readRevision: () => number,\n readTools: () => Map<string, AppliedSessionTool>,\n ready: () => boolean,\n lifecycleSignal?: AbortSignal,\n waitMs?: number,\n ): Promise<import('../../../exports/headless').DoomHeadlessToolResult> => {\n if (disposed || !headlessReady || !ready() || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready. Retry in a few seconds.');\n if (invocation.revision !== readRevision()) throw new Error('The session tool surface has changed');\n if (!isJsonObject(invocation.arguments)) throw new Error('Tool arguments must be a JSON object');\n const applied = readTools().get(invocation.name);\n if (applied === undefined) throw new Error(`Tool '${invocation.name}' is not active`);\n if (!Value.Check(applied.descriptor.parameters, invocation.arguments))\n throw new Error(\n `Invalid arguments for tool '${invocation.name}': ${validationDetails(applied.descriptor.parameters, invocation.arguments)}`,\n );\n const signals = [invocation.signal, lifecycleSignal].filter(\n (signal): signal is AbortSignal => signal !== undefined,\n );\n const signal = signals.length === 0 ? undefined : AbortSignal.any(signals);\n signal?.throwIfAborted();\n return runtime.runExternalOperation(\n async () => {\n signal?.throwIfAborted();\n await invocation.authorize?.();\n signal?.throwIfAborted();\n if (disposed || !headlessReady || !ready() || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready. Retry in a few seconds.');\n if (invocation.revision !== readRevision() || readTools().get(invocation.name) !== applied)\n throw new Error(`Tool '${invocation.name}' is no longer active`);\n const toolCallId = `external-${randomUUID()}`;\n const before = await beforeTool(\n {\n toolCallId,\n toolName: invocation.name,\n args: invocation.arguments as Record<string, JsonValue>,\n },\n signal ? withAbortSignal(signal, BACKGROUND_CONTEXT) : BACKGROUND_CONTEXT,\n );\n if (before?.block !== undefined)\n return {\n content: [{ type: 'text', text: before.block.reason }],\n isError: true,\n };\n const args = before?.args ?? (invocation.arguments as Record<string, JsonValue>);\n if (!Value.Check(applied.descriptor.parameters, args))\n throw new Error(\n `A tool hook produced invalid arguments for '${invocation.name}': ${validationDetails(applied.descriptor.parameters, args)}`,\n );\n await invocation.authorize?.();\n signal?.throwIfAborted();\n if (disposed || !headlessReady || !ready() || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready. Retry in a few seconds.');\n if (invocation.revision !== readRevision() || readTools().get(invocation.name) !== applied)\n throw new Error(`Tool '${invocation.name}' is no longer active`);\n const startEvent = {\n type: 'tool_execution_start',\n runId: EXTERNAL_OPERATION,\n turnId: EXTERNAL_OPERATION,\n toolCallId,\n toolName: invocation.name,\n args,\n };\n emitTo(listeners, startEvent);\n // External calls bypass the harness event stream. Deliver the same lifecycle\n // to package hooks as native tools, not just to presentation subscribers.\n await headlessHost.dispatchHook('tool_execution_start', startEvent);\n let result;\n try {\n result = await applied.execute(\n toolCallId,\n args,\n signal,\n (partial) => {\n emitTo(listeners, {\n type: 'tool_execution_update',\n runId: EXTERNAL_OPERATION,\n turnId: EXTERNAL_OPERATION,\n toolCallId,\n toolName: invocation.name,\n partialResult: partial,\n });\n invocation.onUpdate?.(partial);\n },\n invocation.mcpSkills === undefined\n ? undefined\n : { ...headlessHost.context, mcpSkills: invocation.mcpSkills },\n );\n } catch (error) {\n result = {\n content: [\n {\n type: 'text' as const,\n text: error instanceof Error ? error.message : String(error),\n },\n ],\n isError: true,\n };\n }\n // A caller-cancelled tool can still settle normally. Do not begin post hooks\n // for that cancelled operation or replace its already-settled result.\n const patch = signal?.aborted\n ? undefined\n : await afterTool(\n {\n toolCallId,\n toolName: invocation.name,\n args,\n content: result.content,\n ...(isJsonValue(result.details) ? { details: result.details } : {}),\n isError: result.isError === true,\n },\n signal ? withAbortSignal(signal, BACKGROUND_CONTEXT) : BACKGROUND_CONTEXT,\n );\n const patched = {\n content: patch?.content ?? result.content,\n // A hook that rewrites a result must not leave the original payload available remotely.\n ...(patch?.content !== undefined || patch?.isError !== undefined || result.structuredContent === undefined\n ? {}\n : { structuredContent: result.structuredContent }),\n ...(patch?.content !== undefined ||\n patch?.isError !== undefined ||\n patch?.details !== undefined ||\n result._meta === undefined\n ? {}\n : { _meta: result._meta }),\n ...(patch?.details !== undefined\n ? { details: patch.details }\n : result.details === undefined\n ? {}\n : { details: result.details }),\n isError: patch?.isError ?? result.isError ?? false,\n };\n const endEvent = {\n type: 'tool_execution_end',\n runId: EXTERNAL_OPERATION,\n turnId: EXTERNAL_OPERATION,\n toolCallId,\n toolName: invocation.name,\n result: patched,\n isError: patched.isError,\n terminate: patch?.terminate ?? false,\n };\n emitTo(listeners, endEvent);\n await headlessHost.dispatchHook('tool_execution_end', endEvent);\n return patched;\n },\n { signal, waitMs },\n );\n };\n\n const toolSurface: SessionToolSurface = {\n readSurface() {\n if (disposed || !headlessReady || !toolSurfaceReady || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready.');\n return {\n revision: surfaceRevision,\n tools: [...appliedSessionTools.values()].map((tool) => tool.descriptor),\n skills: [...appliedSkills.values()].map((skill) => skill.descriptor),\n };\n },\n invokeTool: (invocation) =>\n invokeSurfaceTool(\n invocation,\n () => surfaceRevision,\n () => appliedSessionTools,\n () => toolSurfaceReady,\n ),\n readSkill(revision, uri) {\n if (disposed || !headlessReady || !toolSurfaceReady || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready.');\n if (revision !== surfaceRevision) throw new Error('The session skill surface has changed');\n const skill = appliedSkills.get(uri);\n if (skill === undefined) throw new Error('The session skill is not active');\n return skill.content;\n },\n };\n\n admittedToolSurface = {\n readSurface: () => toolSurface.readSurface(),\n invokeTool: (invocation) => toolSurface.invokeTool(invocation),\n };\n\n const mcpSurface: SessionToolSurface = {\n readSurface() {\n if (disposed || !headlessReady || !mcpSurfaceReady || !headlessHost?.status.ready)\n throw new Error('MCP capability preparation is not ready.');\n return {\n revision: mcpSurfaceRevision,\n tools: [...appliedMcpTools.values()].map((tool) => tool.descriptor),\n skills: [...appliedMcpSkills.values()].map((skill) => skill.descriptor),\n uiResources: [...appliedMcpUiResources.values()].map((resource) => resource.descriptor),\n };\n },\n invokeTool: (invocation) =>\n invokeSurfaceTool(\n invocation,\n () => mcpSurfaceRevision,\n () => appliedMcpTools,\n () => mcpSurfaceReady,\n mcpLifecycle.signal,\n REMOTE_TOOL_WAIT_MS,\n ),\n async readUiResource(revision, uri) {\n if (disposed || !headlessReady || !mcpSurfaceReady || !headlessHost?.status.ready)\n throw new Error('MCP capability preparation is not ready.');\n if (revision !== mcpSurfaceRevision) throw new Error('The session MCP surface has changed');\n const resource = appliedMcpUiResources.get(uri)?.resource;\n if (resource === undefined) throw new Error('The session MCP UI resource is not active');\n const text = await resource.read();\n if (disposed || !headlessReady || !mcpSurfaceReady || !headlessHost?.status.ready)\n throw new Error('MCP capability preparation is not ready.');\n if (revision !== mcpSurfaceRevision || appliedMcpUiResources.get(uri)?.resource !== resource)\n throw new Error('The session MCP surface has changed');\n return text;\n },\n async readSkill(revision, uri) {\n if (disposed || !headlessReady || !mcpSurfaceReady || !headlessHost?.status.ready)\n throw new Error('MCP capability preparation is not ready.');\n if (revision !== mcpSurfaceRevision) throw new Error('The session MCP surface has changed');\n const skill = appliedMcpSkills.get(uri)?.skill;\n if (skill === undefined) throw new Error('The session MCP skill is not active');\n const text = await skill.read(headlessHost.context);\n if (disposed || !headlessReady || !mcpSurfaceReady || !headlessHost?.status.ready)\n throw new Error('MCP capability preparation is not ready.');\n if (revision !== mcpSurfaceRevision || appliedMcpSkills.get(uri)?.skill !== skill)\n throw new Error('The session MCP surface has changed');\n return text;\n },\n };\n\n return {\n runtime,\n async readExecutionState() {\n const state = await runtime.readState();\n const backgroundWork =\n mcpServiceRoot === undefined\n ? undefined\n : readDoomBackgroundWorkService(mcpServiceRoot)?.snapshot(options.sessionId);\n return {\n isIdle: state.isIdle === true,\n hasPendingMessages: Number(state.pendingMessageCount) > 0,\n ...(backgroundWork === undefined ? {} : { backgroundWork }),\n };\n },\n ...(sessionContext === undefined ? {} : { sessionContext }),\n get host() {\n return headlessHost;\n },\n toolSurface,\n mcpSurface,\n prepareFacets,\n activateFacets,\n canDispatch: () => !disposed && headlessReady && !promptPreparationFailed && headlessHost?.status.ready === true,\n onPresentationFrame(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n onSelection(listener) {\n selectionListeners.add(listener);\n listener(latestSelection);\n return () => {\n selectionListeners.delete(listener);\n };\n },\n respondToExtensionUi(frame) {\n return client?.receive(frame as SessionFrame) ?? false;\n },\n dispose,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiGA,MAAM,qBAAqB;AAC3B,MAAM,sBAAsB;AAC5B,MAAM,kCAAkC;AAaxC,SAAS,SAAS,OAAoC;CACpD,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,YAAY,OAAsC;CACzD,OAAO,MAAM,QAAQ,KAAK,KAAK,MAAM,OAAO,UAAU,OAAO,UAAU,QAAQ,IAAI,QAAQ,KAAA;AAC7F;;AAGA,SAAgB,yBACd,SACA,UACuB;CACvB,IAAI;CACJ,KAAK,IAAI,QAAQ,QAAQ,SAAS,GAAG,SAAS,KAAK,cAAc,KAAA,GAAW,SAAS,GAAG;EACtF,MAAM,QAAQ,QAAQ;EACtB,IAAI,CAAC,SAAS,KAAK,KAAK,MAAM,SAAS,YAAY,CAAC,SAAS,MAAM,IAAI,GAAG;EAC1E,IAAI,cAAc,KAAA,KAAa,MAAM,eAAA,gBAAwC;GAC3E,MAAM,YAAY,MAAM,KAAK;GAC7B,IAAI,CAAC,SAAS,SAAS,KAAK,OAAO,UAAU,cAAc,UAAU;GACrE,MAAM,UAAU,YAAY,UAAU,OAAO;GAC7C,IAAI,YAAY,KAAA,KAAc,UAAU,YAAY,KAAA,KAAa,OAAO,UAAU,YAAY,UAAW;GACzG,YAAY;IACV,WAAW,UAAU;IACrB;IACA,GAAI,OAAO,UAAU,YAAY,WAAW,EAAE,SAAS,UAAU,QAAQ,IAAI,CAAC;GAChF;EACF;CACF;CACA,OAAO;EAAE,GAAG;EAAU,GAAG;CAAU;AACrC;AAEA,SAAS,YAAY,OAAoC;CACvD,IAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW,OAAO;CACtF,IAAI,OAAO,UAAU,UAAU,OAAO,OAAO,SAAS,KAAK;CAC3D,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM,MAAM,WAAW;CACxD,OAAO,SAAS,KAAK,KAAK,OAAO,OAAO,KAAK,CAAC,CAAC,MAAM,WAAW;AAClE;AAEA,SAAS,gBAAgB,OAAyB;CAChD,MAAM,uBAAO,IAAI,IAAY;CAC7B,MAAM,SAAS,MAAe,UAAwB;EACpD,IAAI,QAAQ,KAAK,MAAM,IAAI,UAAU,oCAAoC;EACzE,IAAI,SAAS,QAAQ,OAAO,SAAS,YAAY,OAAO,SAAS,WAAW;EAC5E,IAAI,OAAO,SAAS,YAAY,OAAO,SAAS,IAAI,GAAG;EACvD,IAAI,OAAO,SAAS,YAAY,KAAK,IAAI,IAAI,GAAG,MAAM,IAAI,UAAU,yCAAyC;EAC7G,KAAK,IAAI,IAAI;EACb,KAAK,MAAM,SAAS,OAAO,OAAO,IAAI,GACpC,IAAI,UAAU,KAAA,GAAW,MAAM,OAAO,QAAQ,CAAC;EAEjD,KAAK,OAAO,IAAI;CAClB;CACA,MAAM,OAAO,CAAC;CACd,MAAM,UAAU,KAAK,UAAU,KAAK;CACpC,IAAI,QAAQ,SAAS,UAAkB,MAAM,IAAI,UAAU,+CAA+C;CAC1G,OAAO,KAAK,MAAM,OAAO;AAC3B;AAEA,SAAS,iBAAiB,OAAuC;CAC/D,IAAI,CAAC,SAAS,KAAK,KAAK,OAAO,MAAM,cAAc,YAAY,CAAC,OAAO,SAAS,MAAM,SAAS,GAAG,OAAO;CACzG,IAAI,MAAM,SAAS,QAAQ,OAAO,OAAO,MAAM,YAAY,YAAY,cAAc,MAAM,OAAO;CAClG,IAAI,MAAM,SAAS,UACjB,OACE,OAAO,MAAM,eAAe,YAC5B,OAAO,MAAM,YAAY,cACxB,OAAO,MAAM,YAAY,YAAY,cAAc,MAAM,OAAO;CAErE,IAAI,MAAM,SAAS,qBACjB,OAAO,OAAO,MAAM,YAAY,YAAY,OAAO,MAAM,iBAAiB;CAC5E,IAAI,MAAM,SAAS,iBACjB,OAAO,OAAO,MAAM,YAAY,aAAa,MAAM,WAAW,QAAQ,OAAO,MAAM,WAAW;CAChG,IAAI,MAAM,SAAS,iBACjB,OACE,OAAO,MAAM,YAAY,YACzB,OAAO,MAAM,WAAW,YACxB,OAAO,MAAM,cAAc,aAC3B,OAAO,MAAM,cAAc,cAC1B,MAAM,aAAa,KAAA,KAAa,OAAO,MAAM,aAAa;CAE/D,IAAI,MAAM,SAAS,cAAc,OAAO,cAAc,MAAM,OAAO,KAAK,eAAe,KAAK;CAC5F,OACE,MAAM,SAAS,eACf,MAAM,QAAQ,MAAM,OAAO,KAC3B,MAAM,QAAQ,OAAO,SAAkB;EACrC,IAAI,CAAC,SAAS,IAAI,GAAG,OAAO;EAC5B,IAAI,KAAK,SAAS,QAAQ,OAAO,OAAO,KAAK,SAAS;EACtD,IAAI,KAAK,SAAS,YAAY,OAAO,OAAO,KAAK,aAAa;EAC9D,OACE,KAAK,SAAS,cACd,OAAO,KAAK,OAAO,YACnB,OAAO,KAAK,SAAS,YACrB,aAAa,KAAK,SAAS;CAE/B,CAAC,KACD,eAAe,KAAK;AAExB;AAEA,SAAS,aAAa,OAAkD;CACtE,OAAO,SAAS,KAAK,KAAK,OAAO,OAAO,KAAK,CAAC,CAAC,MAAM,WAAW;AAClE;AAEA,SAAS,cAAc,OAAsC;CAC3D,OACE,MAAM,QAAQ,KAAK,KACnB,MAAM,OAAO,SAAS;EACpB,IAAI,CAAC,SAAS,IAAI,GAAG,OAAO;EAC5B,IAAI,KAAK,SAAS,QAAQ,OAAO,OAAO,KAAK,SAAS;EACtD,OAAO,KAAK,SAAS,WAAW,OAAO,KAAK,SAAS,YAAY,OAAO,KAAK,aAAa;CAC5F,CAAC;AAEL;AAEA,SAAS,QAAQ,OAAgC;CAC/C,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,MAAM,IAAI,GAAG,OAAO;CACtD,MAAM,OAAO,MAAM;CACnB,OACE;EAAC;EAAS;EAAU;EAAa;EAAc;CAAa,CAAC,CAAC,OAC3D,QAAQ,OAAO,MAAM,SAAS,YAAY,OAAO,SAAS,MAAM,IAAI,CACvE,KACA;EAAC;EAAS;EAAU;EAAa;EAAc;CAAO,CAAC,CAAC,OACrD,QAAQ,OAAO,KAAK,SAAS,YAAY,OAAO,SAAS,KAAK,IAAI,CACrE;AAEJ;AAEA,SAAS,eAAe,OAAuC;CAC7D,IAAI,CAAC,SAAS,KAAK,KAAK,OAAO,MAAM,cAAc,YAAY,CAAC,OAAO,SAAS,MAAM,SAAS,GAAG,OAAO;CACzG,IAAI,MAAM,SAAS,QAAQ,OAAO,OAAO,MAAM,YAAY,YAAY,MAAM,QAAQ,MAAM,OAAO;CAClG,IAAI,CAAC,MAAM,QAAQ,MAAM,OAAO,GAAG,OAAO;CAC1C,IAAI,MAAM,SAAS,aACjB,OACE,OAAO,MAAM,QAAQ,YACrB,OAAO,MAAM,aAAa,YAC1B,OAAO,MAAM,UAAU,YACvB,OAAO,MAAM,eAAe,YAC5B,QAAQ,MAAM,KAAK;CAGvB,OACE,MAAM,SAAS,gBACf,OAAO,MAAM,eAAe,YAC5B,OAAO,MAAM,aAAa,YAC1B,OAAO,MAAM,YAAY;AAE7B;AAEA,SAAS,gBAAgB,OAAwC;CAC/D,OACE,SAAS,KAAK,KACd,OAAO,MAAM,YAAY,YACzB,OAAO,MAAM,iBAAiB,YAC9B,OAAO,SAAS,MAAM,YAAY,KAClC,MAAM,QAAQ,MAAM,YAAY,KAChC,MAAM,aAAa,MAAM,cAAc,MACtC,MAAM,UAAU,KAAA,KAAa,QAAQ,MAAM,KAAK,OAChD,MAAM,YAAY,KAAA,KAAa,YAAY,MAAM,OAAO;AAE7D;AAEA,MAAM,eAAe,WAAqC;CA8BxD,MAAM,QAAQ;EA5BZ,CAAC,UAAU,OAAO,IAAI;EACtB,CAAC,aAAa,OAAO,OAAO;EAC5B,CAAC,UAAU,OAAO,IAAI;EACtB,CAAC,WAAW,OAAO,KAAK;EACxB,CAAC,YAAY,OAAO,MAAM;EAC1B,CAAC,gBAAgB,OAAO,SAAS;EACjC,CAAC,cAAc,OAAO,QAAQ;EAC9B,CAAC,YAAY,OAAO,MAAM;EAC1B,CAAC,UAAU,OAAO,IAAI;EACtB,CAAC,iBAAiB,OAAO,UAAU;EACnC,CAAC,aAAa,OAAO,OAAO;EAC5B,CAAC,cAAc,OAAO,OAAO;EAC7B,CAAC,gBAAgB,OAAO,UAAU;EAClC,CAAC,mBAAmB,OAAO,YAAY;EACvC,CAAC,YAAY,OAAO,MAAM;EAC1B,CAAC,eAAe,OAAO,QAAQ;EAC/B,CAAC,sBAAsB,OAAO,eAAe;EAC7C,CAAC,yBAAyB,OAAO,iBAAiB;EAClD,CAAC,YAAY,OAAO,MAAM;EAC1B,CAAC,eAAe,OAAO,QAAQ;EAC/B,CAAC,sBAAsB,OAAO,cAAc;EAC5C,CAAC,WAAW,OAAO,KAAK;EACxB,CAAC,mBAAmB,OAAO,YAAY;EACvC,CAAC,cAAc,OAAO,OAAO;EAC7B,CAAC,sBAAsB,OAAO,cAAc;EAC5C,CAAC,4BAA4B,OAAO,oBAAoB;EACxD,CAAC,aAAa,OAAO,OAAO;CAEZ,CAAC,CAAC,MAAM,GAAG,WAAW,UAAU,KAAA,KAAa,UAAU,KAAK;CAC9E,IAAI,OAAO,OAAO,yCAAyC,MAAM,GAAG;CACpE,IAAI,OAAO,SAAS,SAAS,KAAK,OAAO,SAAS,SAAS,GACzD,OAAO;CACT,MAAM,UAAU,OAAO,aAAa,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;CAClD,OAAO,OAAO,YAAY,WAAW,2CAA2C,QAAQ,KAAK,KAAA;AAC/F;;AAGA,SAAgB,2BAA2B,WAAoC;CAC7E,IAAI,UAAU,SAAS,QAAQ,GAAG,MAAM,IAAI,MAAM,+CAA+C;CACjG,MAAM,SAAS,UAAU,CAAC,GAAG,SAAS,CAAC;CACvC,MAAM,cAAc,OAAO,YAAY,QAAQ,eAAe,WAAW,SAAS,OAAO;CACzF,IAAI,YAAY,QAAQ,MAAM,IAAI,MAAM,YAAY,KAAK,eAAe,WAAW,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;CACtG,MAAM,QAAQ,YAAY,MAAM;CAChC,IAAI,OAAO,MAAM,IAAI,MAAM,KAAK;CAChC,OAAO;AACT;AAEA,SAAS,cAAc,OAAqD;CAC1E,OAAO;EAAE,UAAU,MAAM;EAAU,IAAI,MAAM;CAAG;AAClD;AAEA,SAAS,cAAc,OAA8C;CACnE,MAAM,SAA2C,CAAC;CAClD,MAAM,SAAU,MAA0D;CAC1E,KAAK,MAAM,OAAO;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,GAAG;EACD,MAAM,QAAQ,SAAS;EACvB,IAAI,OAAO,UAAU,aAAa,OAAO,UAAU,UAAU,OAAO,OAAO;CAC7E;CACA,IAAI;CACJ,IAAI;EACF,MAAM,MAAM,IAAI,IAAI,MAAM,OAAO;EACjC,IAAI,WAAW;EACf,IAAI,WAAW;EACf,IAAI,SAAS;EACb,IAAI,OAAO;EACX,UAAU,IAAI,SAAS;CACzB,QAAQ;EAEN,UAAU,KAAA;CACZ;CACA,OAAO,OAAO,OAAO;EACnB,UAAU,MAAM;EAChB,IAAI,MAAM;EACV,KAAK,MAAM;EACX,MAAM,MAAM;EACZ,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;EAC7B,QAAQ,OAAO,OAAO,MAAM;CAC9B,CAAC;AACH;AAEA,eAAe,aACb,QACA,cACA,UACkE;CAClE,MAAM,MAAM,gBAAgB;EAC1B,aAAa,OAAO;EACpB,UAAU,OAAO;EACjB,aAAa,OAAO;EACpB;CACF,CAAC;CACD,IAAI,IAAI,OAAO,MAAM,IAAI,MAAM,IAAI,KAAK;CAExC,IAAI;CACJ,IAAI,OAAO,WAAW,KAAA,KAAa,OAAO,OAAO,SAAS,GAAG;EAE3D,UAAS,MADc,iCAAiC,OAAO,QAAQ,YAAY,EAAA,CACjE,aAAa,EAAE,EAAE;EACnC,IAAI,WAAW,KAAA,GACb,MAAM,IAAI,sBAAsB,wCAAwC,OAAO,OAAO,KAAK,IAAI,EAAE,EAAE;CACvG;CAEA,MAAM,aACJ,IAAI,SACJ,WACC,SAAS,mBAAmB,KAAK,SAAS,gBAAgB,IACvD,aAAa,SAAS,SAAS,mBAAmB,GAAI,SAAS,gBAAgB,CAAE,IACjF,KAAA,OACH,MAAM,aAAa,aAAa,EAAA,CAAG;CACtC,IAAI,eAAe,KAAA,GAAW;EAC5B,MAAM,WAAW,YAAY;EAE7B,MAAM,eAAe,aAAa,SAAS;EAC3C,MAAM,IAAI,sBACR,8FAA8F,SAAS,mGAElG,KAAK,KAAK,UAAU,eAAe,EAAE,MACvC,eAAe,OAAO,iBAAiB,GAC5C;CACF;CACA,OAAO;EACL,OAAO;EACP,eACE,IAAI,iBACJ,OAAO,YACP,SAAS,sBAAsB,WAAW,UAAU,WAAW,EAAE,KACjE,SAAS,wBAAwB;CACrC;AACF;AAEA,SAAS,aAAa,WAIpB;CACA,MAAM,SAAuD,CAAC;CAC9D,MAAM,aAA2D,CAAC;CAClE,MAAM,kBAAyE,CAAC;CAChF,MAAM,UAAoB,CAAC;CAC3B,KAAK,MAAM,YAAY,WACrB,IAAI,SAAS,SAAS,SAAS;EAC7B,MAAM,QAAQ,qBAAqB,QAAQ;EAC3C,OAAO,KAAK,KAAK;EAKjB,IAAI,SAAS,SAAS,KAAA,KAAa,CAAC,WAAW,MAAM,UAAU,MAAM,SAAS,MAAM,IAAI,GAAG,WAAW,KAAK,KAAK;CAClH,OAAO,IAAI,SAAS,SAAS,UAC3B,gBAAgB,KAAK;EAAE,MAAM,SAAS;EAAM,SAAS,SAAS;CAAK,CAAC;MAOpE,QAAQ,KAAK,SAAS,IAAI;CAG9B,OAAO;EAAE,SAAS;GAAE;GAAQ;EAAgB;EAAG;EAAS;CAAW;AACrE;AAEA,SAAS,YACP,MACA,kBACA,gBACsC;CACtC,OAAO;EACL,MAAM,KAAK;EACX,OAAO,KAAK,SAAS,KAAK;EAC1B,aAAa,KAAK;EAClB,YAAY,KAAK;EACjB,GAAI,KAAK,kBAAkB,KAAA,IAAY,CAAC,IAAI,EAAE,eAAe,KAAK,cAAc;EAChF,GAAI,KAAK,qBAAqB,KAAA,IAAY,CAAC,IAAI,EAAE,kBAAkB,KAAK,iBAAiB;EACzF,GAAI,KAAK,kBAAkB,KAAA,IACvB,CAAC,IACD,EACE,eAAe,KAAK,kBAAkB,aAAa,aAAa,aAClE;EACJ,MAAM,QAAQ,YAAY,YAAY,UAAU,cAAc,aAAa,SAAS;GAClF,MAAM,SAAS,MAAM,KAAK,QACxB,YACA,YACA,QAAQ,cACP,YAAY,SAAS;IAAE,SAAS,QAAQ;IAAS,SAAS,QAAQ;GAAQ,CAAC,GAC5E,iBAAiB,CACnB;GACA,IAAI,OAAO,YAAY,MAAM,eAAe,IAAI,UAAU;GAC1D,OAAO;IAAE,SAAS,OAAO;IAAS,SAAS,OAAO;GAAQ;EAC5D;CACF;AACF;AAEA,SAAS,UAAU,OAAkD;CAiBnE,OAAO;EAfL,WAAW;EACX,YAAY;EACZ,SAAS;EACT,YAAY;EACZ,UAAU;EACV,eAAe;EACf,gBAAgB;EAChB,aAAa;EACb,YAAY;EACZ,aAAa;EACb,UAAU;EACV,gBAAgB;EAChB,kBAAkB;EAClB,gBAAgB;CAEP,EAAE;AACf;AAEA,SAAS,OAAO,WAA+C,OAA2B;CAExF,MAAM,WAAW,CAAC,GAAG,SAAS;CAC9B,KAAK,MAAM,YAAY,UACrB,IAAI;EACF,SAAS,KAAK;CAChB,QAAQ,CAER;AAEJ;AAQA,SAAS,mCACP,SACA,MACA,aACA,QAGA,kBACsD;CACtD,IAAI;CACJ,IAAI,kBAAkB;CACtB,IAAI;CAKJ,IAAI,OAAsB,QAAQ,QAAQ;CAE1C,MAAM,UAAU,OAAO,cAAoD;EACzE,iBAAiB,MAAM,OAAO,iBAAA,CAAkB;EAChD,MAAM,YAAY,KAAK,oBAAoB,WAAW,WAAW;EACjE,MAAM,SAAS,iBAAiB;EAChC,MAAM,aAAa,WAAW,KAAA,IAAY,KAAA,IAAY;GAAE,QAAQ,YAAY,OAAO,IAAI;GAAG,OAAO,OAAO;EAAM;EAC9G,MAAM,UAAU,eAAe;GAC7B,UAAU,kBAAkB;GAC5B,WAAW,UAAU;GACrB,GAAI,UAAU,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,SAAS,UAAU,QAAQ;GACxE,QAAQ,OAAO,SAAS;GACxB,SAAS,UAAU;GACnB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,aAAa,UAAU;GACvB;GACA,GAAI,eAAe,KAAA,IAAY,CAAC,IAAI,EAAE,cAAc,WAAW;EACjE,CAAC;EAGD,MAAM,aAAa,KAAK,UAAU;GAChC,GAAG;GACH,UAAU;GACV,YAAY,QAAQ;EACtB,CAAC;EACD,IAAI,eAAe,kBAAkB;EACrC,MAAM,WAAW,kBAAkB;EACnC,MAAM,UAAU,mBAAmB;GACjC,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB;GACA,GAAI,WAAW,KAAA,KAAa,eAAe,KAAA,IACvC,CAAC,IACD,EACE,cAAc;IACZ,MAAM,OAAO;IACb,QAAQ,WAAW;IACnB,OAAO,OAAO;GAChB,EACF;EACN,CAAC;EACD,MAAM,QAAQ,kBAAkB,yBAAyB;GACvD,GAAG;GACH;EACF,CAAC;EACD,mBAAmB,QAAQ,WAAW,UAAU,SAAS,WAAW;EACpE,kBAAkB;EAClB,mBAAmB;CACrB;CAEA,QAAQ,YAAY,KAAK,QAAQ,cAA6B;EAE5D,OAAO,KAAK,WACJ,QAAQ,SAAS,SACjB,QAAQ,SAAS,CACzB;EACA,OAAO;CACT;AACF;;;;;;;;AASA,eAAsB,0BAA0B,SAAmE;CACjH,MAAM,qBAAqB,+BAA+B,QAAQ,WAAW,QAAQ,WAAW;CAChG,IAAI;EACF,OAAO,MAAM,2BAA2B,SAAS,kBAAkB;CACrE,SAAS,OAAO;EACd,mBAAmB;EACnB,MAAM;CACR;AACF;AAEA,eAAe,2BACb,SACA,oBAC8B;CAC9B,MAAM,SAAS,2BAA2B,QAAQ,SAAS;CAC3D,MAAM,WAAW,YAAY;CAC7B,MAAM,WAAW,gBAAgB,OAAO,QAAQ,KAAK,QAAQ;CAE7D,MAAM,WAAW,qBAAqB,QAAQ;CAC9C,MAAM,cAAc,uBAAuB,QAAQ;CACnD,MAAM,gBAAgB,gBAAgB,WAAW,WAAW,gBAAgB,OAAO,QAAQ,KAAK,WAAW;CAC3G,MAAM,eAAe,MAAM,aAAa,OAAO;EAC7C,UAAU,KAAK,KAAK,UAAU,WAAW;EACzC,YAAY,KAAK,KAAK,UAAU,aAAa;EAC7C,iBAAiB;CACnB,CAAC;CACD,4BAA4B,YAAY;CAOxC,MAAM,mBACJ,QAAQ,iBAAiB,QACrB,CAAC,IACD;EACE,GAAI,QAAQ,yBAAyB,KAAA,IAAY,CAAC,IAAK,QAAQ,oBAAoB,CAAC;EACpF,GAAI,MAAM,gCAAgC;GACxC,KAAK,QAAQ;GACb;GACA;GACA,GAAI,QAAQ,aAAa,KAAA,IAAY,CAAC,IAAI,EAAE,UAAU,QAAQ,SAAS;EACzE,CAAC;EAGD,GAAI,aAAa,YAAY,GAAG,WAAW,KAAK,KAAK,UAAU,YAAY,CAAC,IACxE,CAAC,KAAK,KAAK,UAAU,YAAY,CAAC,IAClC,CAAC;CACP;CACN,MAAM,YAAY,MAAM,oBAAoB;EAC1C,KAAK,QAAQ;EACb;EACA,QAAQ;EACR,gBAAgB,CAAC,GAAG,IAAI,IAAI,gBAAgB,CAAC;EAC7C,GAAI,QAAQ,iBAAiB,SAAS,QAAQ,yBAAyB,KAAA,IACnE,CAAC,IACD,EAAE,oBAAoB,MAAM,QAAQ,qBAAqB,EAAE;EAC/D,GAAI,QAAQ,aAAa,KAAA,IAAY,CAAC,IAAI,EAAE,UAAU,QAAQ,SAAS;CACzE,CAAC;CACD,KAAK,MAAM,YAAY,QAAQ,oBAAoB,KAAK,CAAC,GAAG;EAC1D,IAAI,CAAC,SAAS,KAAK,KAAK,KAAK,SAAS,SAAS,SAAS,KAAK,KAAK,GAChE,MAAM,IAAI,MAAM,mCAAmC;EACrD,MAAM,MAAM,IAAI,IAAI,SAAS,OAAO;EACpC,IAAI,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,SAAS,IAAI,QAAQ,KAAK,IAAI,YAAY,IAAI,UACrE,MAAM,IAAI,MAAM,mCAAmC;EAIrD,IAAI,aAAa,4BAA4B,SAAS,IAAI,GAAG;EAC7D,aAAa,iBAAiB,SAAS,MAAM,EAAE,SAAS,SAAS,QAAQ,CAAC;CAC5E;CACA,MAAM,WAAW,MAAM,aAAa,QAAQ,cAAc,aAAa;CACvE,IAAI,OAAO,WAAW,KAAA,GAAW,MAAM,aAAa,iBAAiB,SAAS,MAAM,UAAU,OAAO,MAAM;CAE3G,MAAM,qCAAqB,IAAI,IAAY;CAC3C,IAAI,0BAA0B;CAC9B,IAAI;CACJ,IAAI,gBAAgB;CAGpB,IAAI,eAA2C,CAAC;CAChD,MAAM,sBAAsB,CAAC,OAAO,cAAc,GAAI,OAAO,sBAAsB,CAAC,CAAE,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,MAAM;;;;;;;;;;;;;;;;;;;;CAoBnH,MAAM,sBAAsB,wBAAwB;EAClD,KAAK,QAAQ;EACb;CACF,CAAC;CACD,MAAM,6BAA6B;EACjC,IAAI,oBAAoB,WAAW,GAAG,OAAO;EAO7C,OAAO,yEANc,oBAClB,KACE,EAAE,MAAM,UAAU,cACjB,+BAA+B,SAAS,MAAM,QAAQ,4BAC1D,CAAC,CACA,KAAK,IACmF,EAAE;CAC/F,EAAA,CAAG;CACH,MAAM,uBAAuB,8BAA8B,QAAQ,IAAI,QAAQ,OAAO,GAAG;;;;;;;;CAQzF,MAAM,uBAAuB,cAA2D;EACtF,MAAM,SAAS,aAAa,SAAS;EAOrC,MAAM,SAAS,aAAa,MAAM,UAAU,MAAM,SAAA,YAA6B,IAC3E,KACA,4BAA4B,OAAO,UAAU,CAAC,CAAC,KAAK;EAGxD,OAAO;GACL;GACA;GACA,iBAAiB,YAAY;GAC7B;GACA,GAAG,OAAO;GACV;EACF,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,MAAM;CAChB;;CAEA,IAAI;;;;;;;;;;;CAWJ,MAAM,yBAA2D;EAC/D,IAAI,CAAC,cAAc,OAAO,KAAA;EAC1B,IAAI,sBAAsB,KAAA,GAAW,OAAO;GAAE,MAAM;GAAmB,OAAO;EAAY;EAC1F,OAAO;GACL,MAAM,oBAAoB,aAAa,gBAAgB;GACvD,OAAO;EACT;CACF;CACA,MAAM,aAAqE,OAAO,OAAO,YAAY;EACnG,IAAI,CAAC,iBAAiB,CAAC,cAAc,MAAM,IAAI,MAAM,0CAA0C;EAC/F,MAAM,UAAU,MAAM,aAAa,aAAa,aAAa,OAAO,QAAQ,WAAW;EACvF,IAAI,OAAO,MAAM;EACjB,IAAI;EACJ,KAAK,MAAM,SAAS,SAAS;GAC3B,IAAI,CAAC,SAAS,KAAK,GAAG;GACtB,IAAI,MAAM,SAAS,KAAA,GAAW;IAC5B,IAAI,CAAC,aAAa,MAAM,IAAI,GAAG,MAAM,IAAI,MAAM,iCAAiC;IAChF,OAAO,MAAM;GACf;GACA,IAAI,MAAM,UAAU,KAAA,GAAW;GAC/B,IACE,CAAC,SAAS,MAAM,KAAK,KACrB,OAAO,MAAM,MAAM,WAAW,YAC7B,MAAM,MAAM,cAAc,KAAA,KAAa,OAAO,MAAM,MAAM,cAAc,WAEzE,MAAM,IAAI,MAAM,8BAA8B;GAEhD,QAAQ;IACN,QAAQ,MAAM,MAAM;IACpB,GAAI,OAAO,MAAM,MAAM,cAAc,YAAY,EAAE,WAAW,MAAM,MAAM,UAAU,IAAI,CAAC;GAC3F;GACA;EACF;EACA,OAAO;GACL,GAAI,SAAS,MAAM,OAAO,CAAC,IAAI,EAAE,KAAK;GACtC,GAAI,UAAU,KAAA,IAAY,CAAC,IAAI,EAAE,MAAM;EACzC;CACF;CACA,MAAM,YAAmE,OAAO,OAAO,YAAY;EACjG,IAAI,CAAC,iBAAiB,CAAC,cAAc,MAAM,IAAI,MAAM,0CAA0C;EAE/F,MAAM,WADgB,mBAAmB,OAAO,MAAM,UACzB,IAAI;GAAE,GAAG;GAAO,SAAS;EAAK,IAAI;EAC/D,MAAM,UAAU,MAAM,aAAa,aAAa,eAAe,UAAU,QAAQ,WAAW;EAC5F,IAAI,UAAU,SAAS;EACvB,IAAI,UAAU,SAAS;EACvB,IAAI,UAAU,SAAS;EACvB,IAAI,QAAQ,SAAS;EACrB,IAAI;EACJ,IAAI,kBAAkB;EACtB,KAAK,MAAM,SAAS,SAAS;GAC3B,IAAI,CAAC,SAAS,KAAK,GAAG;GACtB,IAAI,cAAc,MAAM,OAAO,GAAG;IAChC,UAAU,MAAM;IAChB,kBAAkB;GACpB;GACA,IAAI,aAAa,SAAS,YAAY,MAAM,OAAO,GAAG;IACpD,UAAU,MAAM;IAChB,kBAAkB;GACpB;GACA,IAAI,OAAO,MAAM,YAAY,WAAW;IACtC,UAAU,MAAM;IAChB,kBAAkB;GACpB;GACA,IAAI,QAAQ,MAAM,KAAK,GAAG,QAAQ,MAAM;GACxC,IAAI,OAAO,MAAM,cAAc,WAAW,YAAY,MAAM;EAC9D;EAGA,IAAI,mBAAmB,SAAS,OAAO,KAAK,SAAS,SAAS;GAC5D,MAAM,EAAE,KAAK,MAAM,GAAG,oBAAoB;GAC1C,UAAU;EACZ;EACA,OAAO;GACL,GAAI,YAAY,MAAM,UAAU,CAAC,IAAI,EAAE,QAAQ;GAC/C,GAAI,YAAY,MAAM,UAAU,CAAC,IAAI,EAAE,QAAQ;GAC/C,GAAI,YAAY,MAAM,UAAU,CAAC,IAAI,EAAE,QAAQ;GAC/C,GAAI,UAAU,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM;GACzC,GAAI,cAAc,KAAA,IAAY,CAAC,IAAI,EAAE,UAAU;EACjD;CACF;CACA,MAAM,UAAU,MAAM,2BAA2B;EAC/C,KAAK,QAAQ;EACb,WAAW,QAAQ;EACnB,GAAI,QAAQ,oBAAoB,KAAA,IAAY,CAAC,IAAI,EAAE,iBAAiB,QAAQ,gBAAgB;EAC5F,GAAI,QAAQ,uBAAuB,KAAA,IAAY,CAAC,IAAI,EAAE,oBAAoB,QAAQ,mBAAmB;EACrG,GAAI,QAAQ,oBAAoB,KAAA,IAAY,CAAC,IAAI,EAAE,iBAAiB,QAAQ,gBAAgB;EAC5F,SAAS;EACT,kBAAkB,uBAAuB,EAAE,cAAc,SAAS,CAAC;EACnE,aAAa,OAAO,QAAQ,QAAQ;EACpC,GAAI,OAAO,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,aAAa,OAAO,QAAQ;EACtE,cAAc,OAAO,cAAc,KAAK,KAAK,UAAU,UAAU,UAAU;EAC3E,QAAQ;EACR,OAAO,SAAS;EAChB,GAAI,SAAS,kBAAkB,KAAA,IAAY,CAAC,IAAI,EAAE,eAAe,SAAS,cAAc;EACxF,oBAAoB,OAAO,EAAE,YAAY;GACvC,IAAI,CAAC,iBAAiB,CAAC,cAAc,MAAM,IAAI,MAAM,0CAA0C;GAE/F,IAAI,UAAU,UAAU,QAAQ,oBAC9B,MAAM,aAAa,iBAAiB,MAAM,QAAQ,mBAAmB,CAAC;GAExE,MAAM,aAAa,QAAQ;EAC7B;EACA,kBAAkB,OAAO,UAAU;GACjC,IAAI,CAAC,iBAAiB,CAAC,cAAc,MAAM,IAAI,MAAM,0CAA0C;GAC/F,MAAM,UAAU,MAAM,aAAa,aAAa,WAAW,KAAK;GAChE,IAAI,WAAW,MAAM;GACrB,IAAI,eAAe,MAAM;GACzB,KAAK,MAAM,SAAS,SAAS;IAC3B,IAAI,CAAC,SAAS,KAAK,GAAG;IACtB,IAAI,MAAM,aAAa,KAAA,GAAW;KAChC,IAAI,CAAC,MAAM,QAAQ,MAAM,QAAQ,GAAG,MAAM,IAAI,MAAM,mCAAmC;KACvF,WAAW,MAAM;IACnB;IACA,IAAI,MAAM,iBAAiB,KAAA,GAAW;KACpC,IAAI,OAAO,MAAM,iBAAiB,UAAU,MAAM,IAAI,MAAM,wCAAwC;KACpG,eAAe,MAAM;IACvB;GACF;GAGA,OAAO;IACL,UAAU,OAAO,QAAQ,iBAAiB,QAAQ,KAAK;IACvD;GACF;EACF;EACA;EACA;EACA,eAAe,OAAO,UAAU;GAC9B,IAAI,CAAC,iBAAiB,CAAC,cAAc,MAAM,IAAI,MAAM,0CAA0C;GAC/F,MAAM,UAAU,MAAM,aAAa,aAAa,2BAA2B,KAAK;GAChF,IAAI,UAAU,MAAM;GACpB,KAAK,MAAM,SAAS,SAAS;IAC3B,IAAI,UAAU,KAAA,KAAa,UAAU,MAAM;IAC3C,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,aAAa,QAAQ,MAAM,IAAI,MAAM,yCAAyC;IACxG,UAAU,MAAM;GAClB;GACA,OAAO,EAAE,QAAQ;EACnB;EACA,kBAAkB,OAAO,UAAU;GACjC,IAAI,CAAC,iBAAiB,CAAC,cAAc,MAAM,IAAI,MAAM,0CAA0C;GAC/F,MAAM,UAAU,MAAM,aAAa,aAAa,0BAA0B;IACxE,QAAQ,MAAM;IACd,aAAa,MAAM;IACnB,GAAI,MAAM,uBAAuB,KAAA,IAC7B,CAAC,IACD;KACE,cAAc,MAAM;KACpB,oBAAoB,MAAM;IAC5B;GACN,CAAC;GACD,IAAI;IACF,KAAK,MAAM,SAAS,SAAS;KAC3B,IAAI,UAAU,KAAA,KAAa,UAAU,MAAM;KAC3C,IAAI,CAAC,SAAS,KAAK,GAAG,MAAM,IAAI,MAAM,mCAAmC;KACzE,IAAI,MAAM,WAAW,KAAA,KAAa,OAAO,MAAM,WAAW,WACxD,MAAM,IAAI,MAAM,0CAA0C;KAC5D,IAAI,MAAM,YAAY,KAAA,KAAa,OAAO,MAAM,YAAY,WAC1D,MAAM,IAAI,MAAM,qCAAqC;KACvD,MAAM,UAAU,MAAM,WAAW,QAAQ,MAAM,YAAY;KAC3D,IAAI,WAAW,MAAM,eAAe,KAAA,GAAW,MAAM,IAAI,MAAM,uCAAuC;KACtG,IAAI,SAAS,OAAO,EAAE,SAAS,KAAK;KACpC,IAAI,MAAM,eAAe,KAAA,GAAW;MAClC,IAAI,CAAC,gBAAgB,MAAM,UAAU,GAAG,MAAM,IAAI,MAAM,oCAAoC;MAC5F,OAAO,EAAE,YAAY,MAAM,WAAW;KACxC;IACF;GACF,SAAS,OAAO;IACd,QAAQ,WACN,sCAAsC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAC7F;IACA,OAAO,EAAE,SAAS,KAAK;GACzB;GACA,OAAO,QAAQ,iBAAiB,KAAK;EACvC;EACA,cAAc,YAAY;GACxB,IAAI,QAAQ;GACZ,IAAI;IACF,IAAI,CAAC,cAAc,MAAM,IAAI,MAAM,0CAA0C;IAE7E,MAAM,aAAa,QAAQ;IAC3B,IAAI,SAAS,oBAAoB,MAAM,aAAa,cAAc,CAAC;IACnE,QAAQ;IACR,MAAM,UAAU,MAAM,aAAa,aAAa,sBAAsB,EACpE,cAAc,OAChB,CAAC;IACD,KAAK,MAAM,SAAS,SAClB,IAAI,SAAS,OAAO,UAAU,YAAY,kBAAkB,SAAS,OAAO,MAAM,iBAAiB,UACjG,SAAS,MAAM;IAGnB,0BAA0B;IAC1B,yBAAyB,KAAA;IAOzB,IAAI,WAAW,mBAAmB;KAChC,oBAAoB;KACpB,IAAI;MACF,MAAM,mBAAmB;KAC3B,QAAQ,CAER;IACF;IACA,OAAO;GACT,SAAS,OAAO;IAEd,0BAA0B;IAC1B,yBAAyB;IAEzB,QACE,QAAQ,QAAQ,CAAC,CAAC,WAChB,QAAQ,WAAW,YACjB,iCACA,OACA;KAAE,YAAY,QAAQ;KAAW;IAAM,GACvC,EAAE,kBAAkB,KAAK,CAC3B,CACF,CACF;IACA,OAAO;GACT;EACF;EACA,oBAAoB;GAClB,IAAI,CAAC,iBAAiB,CAAC,cAAc,MAAM,IAAI,MAAM,0CAA0C;GAC/F,OAAO,aAAa,aAAa;EACnC;EACA,iBAAiB,OAAO,SAAS;GAC/B,IAAI,CAAC,iBAAiB,CAAC,cAAc,MAAM,IAAI,MAAM,0CAA0C;GAC/F,MAAM,QAAQ,6BAA6B,KAAK,IAAI;GACpD,IAAI,CAAC,OAAO;IACV,MAAM,aAAa,QAAQ;IAC3B,aAAa,aAAa;IAC1B,OAAO;GACT;GACA,MAAM,OAAO,MAAM;GACnB,MAAM,OAAO,MAAM,MAAM;GACzB,IAAI,CAAC,aAAa,aAAa,CAAC,CAAC,MAAM,UAAU,MAAM,SAAS,IAAI,GAAG;IACrE,aAAa,aAAa;IAC1B,OAAO;GACT;GACA,MAAM,aAAa,gBAAgB,MAAM,IAAI;GAC7C,OAAO;EACT;EACA,yBAAyB;GACvB,IAAI,yBACF,MAAM,IAAI,MACR,iDAAiD,oBAAoB,sBAAsB,KAC3F,EAAE,OAAO,uBAAuB,CAClC;GACF,IAAI,CAAC,iBAAiB,CAAC,cAAc,OAAO,OAC1C,MAAM,IAAI,MAAM,+CAA+C;EACnE;CACF,CAAC;CAGD,MAAM,SAAS,OAAO,YAAY;EAChC,MAAM,QAAQ,QAAQ,OAAO,OAAO,OAAO;GACzC,MAAM,WAAW,MAAM,GAAG,IAAI,kBAAkB;GAChD,SAAS,gBAAgB,QAAQ;GACjC,SAAS,YAAY,KAAK,UAAU;IAClC,KAAK,QAAQ;IACb,UAAU,QAAQ;IAClB,aAAa,QAAQ;IACrB,cAAc,QAAQ,gBAAgB,QAAQ;IAC9C,iBAAiB,QAAQ;IACzB,mBAAmB,QAAQ;GAC7B,CAAC;EACH,GAAG,kBAAkB;EACrB,MAAM,QAAQ,MAAM,QAAQ,KAAK,MAAM,kBAAkB;EAKzD,OAAO;GAAE,OAJK,MAAM,QAAQ,aAAa,SAAS,MAAM,MAAM,UAAU,MAAM,MAAM,OAAO,IAAI,KAAA;GAI/E,UAHC,MAAM,QAAQ,YAAY,EAAA,CAAG,QAC3C,QAAQ,UAAU,MAAM,SAAS,YAAY,MAAM,eAAA,cAAsC,CAAC,CAC1F,MAAM,EACa;EAAE;CAC1B,EAAA,CAAG,CAAC,CAAC,MAAM,OAAO,UAAmB;EACnC,MAAM,QACH,QAAQ,CAAC,CACT,OAAO,iBAA0B,QAAQ,WAAW,oCAAoC,OAAO,YAAY,GAAG,CAAC;EAClH,MAAM;CACR,CAAC;CACD,IAAI,eAAe,OAAO;CAE1B,IAAI;CAEJ,MAAM,iBACJ,QAAQ,gBAAgB,KAAA,IACpB,KAAA,IACA,OAAO,OAAO;EACZ,WAAW,QAAQ;EACnB,aAAa,QAAQ;EACrB,eAAe,QAAQ,gBAAgB,QAAQ;EAC/C,cAAc,QAAQ;EACtB,KAAK,QAAQ;EACb,GAAI,QAAQ,oBAAoB,KAAA,IAAY,CAAC,IAAI,EAAE,iBAAiB,QAAQ,gBAAgB;EAC5F,GAAI,QAAQ,sBAAsB,KAAA,IAAY,CAAC,IAAI,EAAE,YAAY,QAAQ,kBAAkB;CAC7F,CAAC;CACP,MAAM,UAAU,OAAO;CACvB,MAAM,4BAAY,IAAI,IAAmC;CACzD,MAAM,qCAAqB,IAAI,IAAgD;CAC/E,IAAI,kBAAyC,QAAQ;CACrD,MAAM,mBAAmB,yBAAyB,SAAS,QAAQ,SAAS;CAC5E,IAAI;CACJ,IAAI;CACJ,IAAI,eAAe,IAAI,gBAAgB;CACvC,MAAM,mBAAmB,IAAI,gBAAgB;CAC7C,IAAI;CACJ,IAAI;CACJ,IAAI,WAAW;CACf,IAAI;CACJ,IAAI,qBAA2E,YAAY;EACzF,MAAM,IAAI,MAAM,yDAAyD;CAC3E;CACA,MAAM,kBAAkB,WAAgD;EACtE,OAAO,eAAe;EACtB,MAAM,OAAO;EACb,IAAI,CAAC,QAAQ,UAAU,MAAM,IAAI,MAAM,iCAAiC;EACxE,MAAM,SAAS,KAAK;EACpB,IAAI,CAAC,OAAO,SAAS,OAAO,sBAAsB,OAAO,iBACvD,MAAM,IAAI,MAAM,iCAAiC;EACnD,MAAM,OAAO,GAAG,aAAa,QAAQ,QAAQ;EAC7C,MAAM,oBAAoB,KAAK,KAAK,GAAG,aAAa,QAAQ,GAAG,WAAW;EAC1E,MAAM,eAAe,oBAAoB,SAAS,EAAE,MAAM,UAAU,cAAc;GAChF,MAAM,WAAW,KAAK,SAAS,QAAQ,UAAU,QAAQ;GACzD,IAAI,aAAa,MAAM,SAAS,WAAW,IAAI,KAAK,KAAK,WAAW,QAAQ,GAAG,OAAO,CAAC;GACvF,IAAI;IACF,MAAM,gBAAgB,GAAG,aAAa,QAAQ;IAC9C,IAAI,kBAAkB,mBAAmB,OAAO,CAAC;IACjD,MAAM,oBAAoB,KAAK,SAAS,MAAM,aAAa;IAC3D,IAAI,sBAAsB,MAAM,kBAAkB,WAAW,IAAI,KAAK,KAAK,WAAW,iBAAiB,GACrG,OAAO,CAAC;GACZ,QAAQ;IACN,OAAO,CAAC;GACV;GACA,OAAO,CAAC;IAAE,MAAM,SAAS,WAAW,KAAK,KAAK,GAAG;IAAG;GAAQ,CAAC;EAC/D,CAAC;EACD,MAAM,YAAY,KAAK,QAAQ;EAC/B,MAAM,UAAU,KAAK,iBAAiB,MACnC,EAAE,MAAM,WAAW,SAAS,uBAAuB,SAAS,SAC/D,CAAC,EAAE;EACH,OAAO,eAAe;EACtB,MAAM,UAAU,KAAK;EACrB,IACE,CAAC,QAAQ,SACT,QAAQ,oBAAoB,OAAO,mBACnC,QAAQ,sBAAsB,QAAQ,iBAEtC,MAAM,IAAI,MAAM,mDAAmD;EACrE,OAAO;GACL,SAAS;IAAE,IAAI,QAAQ;IAAW,UAAU,OAAO;GAAgB;GACnE,YAAY;IAAE,MAAM,QAAQ;IAAU,KAAK,QAAQ;GAAI;GACvD,WAAW;IACT,SAAS,UAAU,WAAW;IAC9B,SAAS,CAAC,GAAG,UAAU,OAAO;IAC9B,WAAW,UAAU;IACrB,cAAc,CAAC,GAAG,UAAU,YAAY;IACxC,YAAY,CAAC,GAAI,UAAU,QAAQ,iBAAiB,CAAC,CAAE;GACzD;GACA;GACA,SAAS,WAAW;EACtB;CACF;CAEA,MAAM,uBAAuB,0CAA0C;EACrE,iBAAiB,QAAQ;EACzB,KAAK,QAAQ;EACb,cAAc,OAAO,cAAc,KAAK,KAAK,UAAU,UAAU,UAAU;EAC3E,QAAQ;EACR,oBAAoB;EACpB,gBAAgB,YAAY;GAC1B,MAAM,QAAQ,MAAM,QAAQ,UAAU;GACtC,IAAI,OAAO,MAAM,aAAa,WAAW,MAAM,IAAI,MAAM,qCAAqC;GAC9F,OAAO,MAAM;EACf;EACA,mBAAmB,aAAa;GAE9B,OACEA,gBAAM,GAAG,qBAAqB,SAAS;IACrC,IAAI,SAAA,+BAA8C,SAAS;GAC7D,CAAC,YAAY,KAAA;EAEjB;EACA,aAAa;GACX,IAAI,YAAY,CAAC,iBAAiB,CAAC,cAAc,OAAO,OACtD,MAAM,IAAI,MAAM,0CAA0C;GAC5D,OAAO,gBAAgB,IAAI,gCAAgC;EAC7D;EACA,eAAe;GACb,IAAI,YAAY,CAAC,iBAAiB,CAAC,cAAc,OAAO,OAAO,OAAO,KAAA;GACtE,OAAO,gBAAgB,IAAI,mCAAmC;EAChE;CACF,CAAC;CAED,MAAM,yBAAyB,OAC7B,WACA,YAGG;EACH,IAAI,YAAY,CAAC,iBAAiB,2BAA2B,CAAC,cAAc,OAAO,OACjF,MAAM,IAAI,MAAM,+CAA+C;EACjE,QAAQ,QAAQ,eAAe;EAC/B,MAAM,YAAY,UAAU,QAAQ,GAAG;EACvC,MAAM,QACJ,YAAY,IAAI,aAAa,SAAS,UAAU,MAAM,GAAG,SAAS,GAAG,UAAU,MAAM,YAAY,CAAC,CAAC,IAAI,KAAA;EACzG,IAAI,CAAC,SAAS,CAAC,aAAa,kBAAkB,MAAM,QAAQ,GAC1D,MAAM,IAAI,MAAM,4BAA4B,WAAW;EACzD,IAAI,CAAC,QAAQ,eAAe,MAAM,IAAI,MAAM,wDAAwD;EACpG,MAAM,WAAW,MAAM,QAAQ,cAC7B,OACA;GACE,cAAc,QAAQ;GACtB,UAAU,CAAC;IAAE,MAAM;IAAQ,SAAS,QAAQ;IAAO,WAAW,KAAK,IAAI;GAAE,CAAC;GAC1E,GAAI,QAAQ,QAAQ,EAAE,OAAO,CAAC,GAAG,QAAQ,KAAK,EAAE,IAAI,CAAC;EACvD,GACA;GACE,QAAQ,QAAQ;GAChB,WAAW,QAAQ;GACnB,gBAAgB,QAAQ;GACxB,iBAAiB;GACjB,YAAY;EACd,CACF;EACA,QAAQ,QAAQ,eAAe;EAC/B,IAAI,SAAS,eAAe,WAAW,SAAS,eAAe,WAC7D,MAAM,IAAI,MAAM,SAAS,gBAAgB,kBAAkB,SAAS,YAAY;EAClF,OAAO;CACT;CAEA,MAAM,wBAAwB,YAKV;EAClB,IAAI,CAAC,WAAW,OAAO,QAAQ,SAAS,YAAY,CAAC,QAAQ,KAAK,KAAK,KAAK,OAAO,QAAQ,SAAS,UAClG,MAAM,IAAI,UAAU,kEAAkE;EACxF,IAAI,QAAQ,YAAY,KAAA,KAAa,OAAO,QAAQ,YAAY,WAC9D,MAAM,IAAI,UAAU,kDAAkD;EACxE,MAAM,UAAU,QAAQ,YAAY,KAAA,IAAY,KAAA,IAAY,gBAAgB,QAAQ,OAAO;EAC3F,OAAO;GACL,MAAM;GACN,YAAY,QAAQ;GACpB,SAAS,QAAQ;GACjB,SAAS,QAAQ,WAAW;GAC5B,GAAI,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,QAAQ;GAC3C,WAAW,KAAK,IAAI;EACtB;CACF;CACA,MAAM,oBAAoB,eAAoE;EAC5F,KAAK,QAAQ;EACb,UAAU,QAAQ;EAClB,WAAW,QAAQ;EACnB,GAAI,mBAAmB,KAAA,IAAY,CAAC,IAAI,EAAE,eAAe;EACzD,aAAa,QAAQ;EACrB,QAAQ,OAAQ;EAChB,OAAO,iBAAiB,KAAA,IAAY,KAAA,IAAY,cAAc,YAAY;EAC1E,SAAS,UAAU,IAAI;GACrB,MAAM,QAAQ,aAAa,SAAS,UAAU,EAAE;GAChD,OAAO,QAAQ,cAAc,KAAK,IAAI,KAAA;EACxC;EACA,qBAAqB;GACnB,IAAI,UAAU,MAAM,IAAI,MAAM,wBAAwB;GACtD,OAAO,aACJ,qBAAqB,CAAC,CACtB,QAAQ,UAAU,aAAa,kBAAkB,MAAM,QAAQ,CAAC,CAAC,CACjE,KAAK,EAAE,UAAU,UAAU;IAAE;IAAU;GAAG,EAAE;EACjD;EACA;EACA,iBAAiB;GACf,iBAAiB,CAAC,YAAY,aAAa,oBAAA,YAA4C;GACvF,MAAM,SAAS,SAAS;IACtB,IAAI,YAAY,CAAC,iBAAiB,2BAA2B,CAAC,cAAc,OAAO,OACjF,MAAM,IAAI,MAAM,+CAA+C;IACjE,OAAO,yBAAyB;KAC9B,iBAAiB,aAAa,oBAAoB,wBAAwB;KAC1E,UAAU,WAAW,aAAa,QAAQ,0BAA0B,EAAE,OAAO,CAAC;IAChF,CAAC,CAAC,CAAC,SAAS;KACV,GAAG;KACH,QAAQ,QAAQ,SAAS,YAAY,IAAI,CAAC,QAAQ,QAAQ,iBAAiB,MAAM,CAAC,IAAI,iBAAiB;IACzG,CAAC;GACH;EACF;EACA,WAAW;GACT,iBAAiB,CAAC,YAAY,aAAa,oBAAA,YAA4C;GACvF,MAAM,OAAO,SAAS;IACpB,IAAI,YAAY,CAAC,iBAAiB,2BAA2B,CAAC,cAAc,OAAO,OACjF,MAAM,IAAI,MAAM,+CAA+C;IACjE,OAAO,6BAA6B;KAClC,iBAAiB,aAAa,oBAAoB,wBAAwB;KAC1E,UAAU,WAAW,aAAa,QAAQ,0BAA0B,EAAE,OAAO,CAAC;IAChF,CAAC,CAAC,CAAC,OAAO;KACR,GAAG;KACH,WAAW,QAAQ;KACnB,GAAI,cAAc,aAAa,iBAAiB,EAAE,OAAO,aAAa,GAAG,IAAI,CAAC;KAC9E,QAAQ,QAAQ,SAAS,YAAY,IAAI,CAAC,QAAQ,QAAQ,iBAAiB,MAAM,CAAC,IAAI,iBAAiB;IACzG,CAAC;GACH;EACF;EACA,gBAAgB;GACd,UAAU,WAAW;IACnB,MAAM,YAAY,UAAU,QAAQ,GAAG;IACvC,OACE,YAAY,KACZ,CAAC,CAAC,aAAa,SAAS,UAAU,MAAM,GAAG,SAAS,GAAG,UAAU,MAAM,YAAY,CAAC,CAAC,KACrF,aAAa,kBAAkB,UAAU,MAAM,GAAG,SAAS,CAAC;GAEhE;GACA,MAAM,UAAU,WAAW,SAAS;IAClC,IAAI,YAAY,CAAC,iBAAiB,2BAA2B,CAAC,cAAc,OAAO,OACjF,MAAM,IAAI,MAAM,+CAA+C;IACjE,QAAQ,QAAQ,eAAe;IAC/B,MAAM,YAAY,UAAU,QAAQ,GAAG;IACvC,MAAM,QACJ,YAAY,IACR,aAAa,SAAS,UAAU,MAAM,GAAG,SAAS,GAAG,UAAU,MAAM,YAAY,CAAC,CAAC,IACnF,KAAA;IACN,IAAI,CAAC,SAAS,CAAC,aAAa,kBAAkB,MAAM,QAAQ,GAC1D,MAAM,IAAI,MAAM,4BAA4B,WAAW;IACzD,IAAI,CAAC,QAAQ,eAAe,MAAM,IAAI,MAAM,wDAAwD;IACpG,MAAM,WAAW,gBAAgB,QAAQ,QAAQ;IACjD,IAAI,CAAC,MAAM,QAAQ,QAAQ,KAAK,CAAC,SAAS,MAAM,gBAAgB,GAC9D,MAAM,IAAI,UAAU,qDAAqD;IAC3E,IACE,OAAO,QAAQ,iBAAiB,YAC/B,QAAQ,oBAAoB,KAAA,KAAa,OAAO,QAAQ,oBAAoB,UAE7E,MAAM,IAAI,UAAU,4DAA4D;IAClF,IACE,QAAQ,kBAAkB,KAAA,KAC1B,CAAC;KAAC;KAAO;KAAW;KAAO;KAAU;KAAQ;KAAS;IAAK,CAAC,CAAC,SAAS,QAAQ,aAAa,GAE3F,MAAM,IAAI,UAAU,qCAAqC;IAC3D,IAAI;IACJ,MAAM,UAAU,MAAM,gBACpB,UACA,OACA,4BAA4B,eAC5B,KAAA,GACA,KAAA,GACA,QAAQ,QACR,QAAQ,cACR,QAAQ,iBACR,QAAQ,gBACP,QAAQ,SAAS,YAAY;KAC5B,MAAM,SAAS,kCAAkC;KACjD,QAAa,cAAe,OAAO,SAAS;MAC1C,QAAQ,SAAS;MACjB,WAAW,SAAS;MACpB,gBAAgB;MAChB,iBAAiB,CAAC,MAAM,aAAa,QAAQ,kBAAkB,QAAQ,SAAS,QAAQ;MACxF,YAAY;KACd,CAAC,CAAC,CAAC,MACA,aAAa;MACZ,IAAI,SAAS,eAAe,WAC1B,iBAAiB,IAAI,MAAM,SAAS,gBAAgB,sBAAsB;MAC5E,OAAO,IAAI,QAAQ;KACrB,IACC,UAAmB;MAClB,iBAAiB,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;MACzE,OAAO,IAAI;OACT,MAAM;OACN,KAAK,MAAM;OACX,UAAU,MAAM;OAChB,OAAO,MAAM;OACb,SAAS,CAAC;OACV,YAAY,QAAQ,QAAQ,UAAU,YAAY;OAClD,cAAc,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;OACnE,WAAW,KAAK,IAAI;OACpB,OAAO;QACL,OAAO;QACP,QAAQ;QACR,WAAW;QACX,YAAY;QACZ,aAAa;QACb,MAAM;SACJ,OAAO;SACP,QAAQ;SACR,WAAW;SACX,YAAY;SACZ,OAAO;QACT;OACF;MACF,CAAC;KACH,CACF;KACA,OAAO;IACT,CACF;IACA,QAAQ,QAAQ,eAAe;IAC/B,IAAI,gBAAgB,MAAM;IAC1B,IAAI,CAAC,QAAQ,KAAK,GAAG,MAAM,IAAI,MAAM,6CAA6C;IAClF,OAAO;GACT;GACA,MAAM,SAAS,WAAW,SAAS;IAKjC,QAAO,MAJgB,uBAAuB,WAAW;KACvD,GAAG;KACH,OAAO,KAAA;IACT,CAAC,EAAA,CACe,QACb,QAAQ,SAAS,KAAK,SAAS,MAAM,CAAC,CACtC,KAAK,SAAS,KAAK,IAAI,CAAC,CACxB,KAAK,EAAE,CAAC,CACR,KAAK;GACV;EACF;EACA,gBAAgB,EACd,MAAM,SAAS,WAAW,SAAS;GACjC,MAAM,WAAW,MAAM,uBAAuB,WAAW,OAAO;GAChE,IAAI,SAAS,eAAe,UAAU,MAAM,IAAI,MAAM,mDAAmD;GACzG,OAAO;IACL,WAAW,SAAS,QAAQ,QAAQ,SAAS,KAAK,SAAS,UAAU;IACrE,OAAO,SAAS;GAClB;EACF,EACF;EACA,SAAS;GACP,cAAc,YAAY,QAAQ,YAAY,OAAO;GACrD,MAAM,oBAAoB;IACxB,MAAM,YAAY,MAAM,QAAQ,KAAK,MAAM,kBAAkB,EAAA,CAAG;IAChE,MAAM,QAAQ,WAAW,aAAa,SAAS,SAAS,UAAU,SAAS,OAAO,IAAI,KAAA;IACtF,MAAM,iBAAiB,MAAM,QAAQ,KAAK,MAAM,kBAAkB,EAAA,CAAG;IACrE,OAAO;KACL,GAAI,QAAQ,EAAE,OAAO,cAAc,KAAK,EAAE,IAAI,CAAC;KAC/C;IACF;GACF;GACA,MAAM,iBAAiB,UAAU;IAC/B,IAAI,SAAS,OAAO,MAAM,QAAQ,SAAS,SAAS,KAAK;IACzD,IAAI,SAAS,kBAAkB,KAAA,GAAW,MAAM,QAAQ,iBAAiB,SAAS,aAAa;GACjG;GACA,MAAM,aAAa;IACjB,MAAM,cAAc,QAAQ;IAC5B,IAAI,OAAO,gBAAgB,UAAU,MAAM,IAAI,MAAM,8CAA8C;IACnG,MAAM,EAAE,WAAW,MAAM,QAAQ,YAAY;IAC7C,OAAO;KACL,MAAM;KACN;KACA,QAAQ,QAAQ;KAChB,GAAI,WAAW,OAAO,CAAC,IAAI,EAAE,SAAS,OAAO;IAC/C;GACF;GACA,SAAS,OAAO,UAAU;IACxB,IAAI,WAAW,MAAM,QAAQ,YAAY,EAAA,CAAG,QAAQ,QACjD,WACE,CAAC,OAAO,QAAQ,MAAM,SAAS,MAAM,UACrC,CAAC,OAAO,cAAe,MAAM,SAAS,YAAY,MAAM,eAAe,MAAM,WAClF;IACA,IAAI,OAAO,UAAU,KAAA,GAAW,UAAU,QAAQ,WAAW,CAAC,CAAC,MAAM,GAAG,MAAM,KAAK;IACnF,OAAO;GACT;GACA,MAAM,cAAc,SAAS;IAC3B,OAAO,QAAQ,cAAc,qBAAqB,OAAO,CAAC;GAC5D;GACA,MAAM,aAAa,SAAS,WAAW,YAAY,WAAW;IAC5D,IAAI;KACF,IAAI,YAAY,CAAC,iBAAiB,2BAA2B,CAAC,cAAc,OAAO,OACjF,MAAM,IAAI,MAAM,+CAA+C;KACjE,IAAI,aAAa,WAAW,aAAa,YACvC,MAAM,IAAI,UAAU,oDAAoD;KAC1E,IAAI,cAAc,KAAA,MAAc,OAAO,cAAc,YAAY,CAAC,UAAU,KAAK,IAC/E,MAAM,IAAI,UAAU,sDAAsD;KAE5E,CAAK,MADoB,QAAQ,sBAAsB,qBAAqB,OAAO,GAAG,UAAU,SAAS,EAAA,CACzF,QAAQ,OAAO,UAC7B,OAAQ,OAAO,OAAO;MACpB,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;MAC3D,OAAO;KACT,CAAC,CACH;IACF,SAAS,OAAO;KACd,MAAM,IAAI,iCAAiC,KAAK;IAClD;GACF;GACA,2BAA2B,UAAU;IACnC,IAAI,CAAC,QAAQ,4BAA4B,MAAM,IAAI,MAAM,+CAA+C;IACxG,MAAM,eAAe,QAAQ,2BAA2B,OAAO,aAAa;KAC1E,IAAI,YAAY,CAAC,iBAAiB,CAAC,cAAc,OAAO,OAAO;KAC/D,MAAM,SAAS;MACb,QAAQ,SAAS;MACjB,gBAAgB,YAAY,SAAS,cAAc,qBAAqB,OAAO,CAAC;KAClF,CAAC;IACH,CAAC;IACD,OAAO;KACL,gBAAgB,YACd,YAAY,CAAC,iBAAiB,CAAC,cAAc,OAAO,QAChD,QAAQ,QAAQ,KAAA,CAAS,IACzB,aAAa,cAAc,qBAAqB,OAAO,CAAC;KAC9D,eAAe,aAAa,QAAQ;IACtC;GACF;GACA,MAAM,kBAAkB;IACtB,MAAM,uBAAuB;KAC3B,IAAI,YAAY,CAAC,iBAAiB,2BAA2B,CAAC,cAAc,OAAO,OACjF,MAAM,IAAI,MAAM,+CAA+C;IACnE;IACA,eAAe;IACf,MAAM,WAAW,gBAAgB,MAAM,QAAQ,mBAAmB,CAAC;IACnE,eAAe;IACf,OAAO;GACT;GACA,MAAM,eAAe;IACnB,MAAM,SAAS,MAAM,QAAQ,gBAAgB,EAAA,CAAG;IAChD,OAAO,QAAQ;KAAE,QAAQ,MAAM;KAAQ,eAAe,MAAM;IAAc,IAAI,KAAA;GAChF;GACA,WAAW,SAAS,UAAU,QAAQ,SAAS,SAAS,KAAK;GAC7D,MAAM,kBAAkB,MAAM,MAAM;IAClC,MAAM,QAAQ,kBAAkB,MAAM,IAAI;GAC5C;GACA,MAAM,OAAO,MAAM,UAAU;IAC3B,OACE,MAAM,QAAQ,aACZ,MACA,KAAA,GACA,aAAa,WAAW,aAAa,aAAa,WAAW,KAAA,CAC/D,EAAA,CACA;GACJ;GACA,MAAM,YAAY,MAAM,UAAU,QAAQ,WAAW;IACnD,IAAI;KACF,IAAI,WAAW,cAAc,aAAa,YAAY,OAAO,MAAM,QAAQ,SAAS,IAAI;KAOxF,CALE,aAAa,cACT,MAAM,QAAQ,iBAAiB,IAAI,IACnC,WAAW,aACT,MAAM,QAAQ,aAAa,MAAM,KAAA,GAAW,aAAa,UAAU,UAAU,KAAA,CAAS,IACtF,MAAM,QAAQ,sBAAsB,MAAM,aAAa,UAAU,UAAU,YAAY,SAAS,EAAA,CACxF,QAAQ,OAAO,UAC7B,OAAQ,OAAO,OAAO;MACpB,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;MAC3D,OAAO;KACT,CAAC,CACH;IACF,SAAS,OAAO;KACd,MAAM,IAAI,iCAAiC,KAAK;IAClD;GACF;GACA,aAAa,QAAQ,MAAM;GAC3B,UAAU,iBAAiB,QAAQ,QAAQ,YAAY;GACvD,MAAM,WAAW;IACf,MAAM,QAAQ,MAAM,QAAQ,UAAU;IACtC,OAAO;KACL,oBAAoB,OAAO,MAAM,mBAAmB,IAAI;KAExD,SAAS,CAAC,MAAM,eAAe,MAAM,gBAAgB,eAAe,CAAC,MAAM;IAC7E;GACF;GACA,UAAU,SAAS,QAAQ,QAAQ,IAAI;EACzC;EACA,gBAAgB,KAAK;CACvB;CAEA,SAAS,qBAAqB;EAC5B,mBAAmB,OAAO,MAAM,SAAS;GACvC,MAAM,QAAQ,kBAAkB,MAAM,IAAI;EAC5C;EACA,YAAY,UAAU,OAAO,WAAW,KAAK;CAC/C,CAAC;CAED,MAAM,0BAA0B,QAAQ,qBAAqB,UAAU,OAAO,WAAW,KAAK,CAAC;CAC/F,IAAI,mBAAmB;CACvB,IAAI,cAA8B,CAAC;CACnC,IAAI,yBAA4C,CAAC;CACjD,IAAI,0BAA6C,CAAC;CAClD,MAAM,oBAAoB,QAAQ,QAAQ,OAAO,OAAO,aAAa;EACnE,KAAK,MAAM,SAAS,eAAe,MAAM,SAAS,iBAAiB,CAAC,kBAAkB;GACpF,mBAAmB;GACnB,cAAc,CAAC;EACjB;EACA,IAAI,MAAM,SAAS,iBAAiB,MAAM,UAAU,KAAA,GAAW,YAAY,KAAK,MAAM,OAAO;EAC7F,IAAI,MAAM,SAAS,aAAa,CAAC,MAAM,iBAAiB;GACtD,MAAM,WAAW;GACjB,cAAc,CAAC;GACf,MAAM,QAAQ;GACd,mBAAmB;GACnB,IAAI,SAAS,cAAc,OAAO,OAAO,MAAM,aAAa,aAAa,aAAa,EAAE,SAAS,CAAC;EACpG;EACA,IAAI,MAAM,SAAS,mBAAmB,MAAM,aAAa,SAAS;GAChE,MAAM,YAAY,MAAM,QAAQ,KAAK,MAAM,kBAAkB,EAAA,CAAG;GAChE,eAAe,WAAW,aAAa,SAAS,SAAS,UAAU,SAAS,OAAO,IAAI,KAAA;GACvF,IAAI,iBAAiB,KAAA,KAAa,iBAAiB,KAAA,KAAa,aAAa,OAAO,OAAO;IACzF,MAAM,aAAa,aAAa,gBAAgB,EAC9C,OAAO,aACT,CAAC;IAGD,MAAM,aAAa;KAAE,UAAU,aAAa;KAAU,IAAI,aAAa;IAAG;IAC1E,MAAM,aAAa,KAAK,UAAU,UAAU;IAC5C,IAAI,eAAe,qBAAqB;KACtC,sBAAsB;KACtB,MAAM,QAAQ,kBAAkB,6BAA6B,UAAU;IACzE;GACF;EACF;EACA,MAAM,OAAO,MAAM,SAAS,aAAa,MAAM,kBAAkB,KAAA,IAAY,UAAU,MAAM,IAAI;EACjG,IAAI,iBAAiB,KAAA,KAAa,SAAS,KAAA,KAAa,aAAa,OAAO,OAC1E,MAAM,aAAa,aACjB,MACA,MAAM,SAAS,qBAAqB;GAAE,GAAG;GAAO,QAAQ;EAAU,IAAK,KACzE;CACJ,CAAC;CAKD,IAAI,oBAA6C,CAAC;CAClD,IAAI,sCAAsB,IAAI,IAAgC;CAC9D,IAAI,gCAAgB,IAAI,IAAqE;CAC7F,IAAI,kBAAkB;CACtB,IAAI,mBAAmB;CACvB,IAAI,oBAAoB;CACxB,IAAI,qBAAqB;CACzB,IAAI,kBAAkB;CACtB,IAAI,kCAAkB,IAAI,IAAgC;CAC1D,IAAI,mCAAmB,IAAI,IAAyE;CACpG,IAAI,wCAAwB,IAAI,IAG9B;CACF,IAAI,mBAAmB;CAEvB,MAAM,2BAAiC;EACrC,IAAI,oBAAoB,YAAY,CAAC,eAAe;EACpD,mBAAmB;EACnB,qBAAqB;GACnB,mBAAmB;GAEnB,IAAI,YAAY,CAAC,iBAAiB,CAAC,cAAc,OAAO,OAAO;GAC/D,kBAAuB,CAAC,CAAC,OAAO,UAC9B,QAAQ,WAAW,4BAA4B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,CACzG;EACF,CAAC;CACH;CAEA,MAAM,oBAAoB,YAA2B;EACnD,IAAI,CAAC,cAAc,OAAO,OAAO,MAAM,IAAI,MAAM,0CAA0C;EAC3F,IAAI,mBAAmB,KAAA,GAAW,MAAM,IAAI,MAAM,yCAAyC;EAC3F,kBAAkB;EAClB,aAAa,MAAM;EACnB,MAAM,YAAY,IAAI,gBAAgB;EACtC,eAAe;EACf,MAAM,gBAAgB;GACpB,WAAW,aAAa;GACxB,UAAU,EACR,MAAS,SACN,gBAAgB,IAAI,IAAI,KAAuB,QAAQ,WAAc,IAAI,EAC9E;GACA,WAAW;IACT,YAAY,aAAc,QAAQ;IAClC,SAAS,WAA2D,aAAc,gBAAgB,MAAM;GAC1G;GACA,mBAAmB,eAAe,UAAU,MAAM;GAClD,QAAQ,UAAU;GAClB,SAAS;EACX;EACA,MAAM,4BAAY,IAAI,IAAgC;EACtD,MAAM,6BAAa,IAAI,IAAyE;EAChG,MAAM,kCAAkB,IAAI,IAAsF;EAClH,KAAK,MAAM,UAAU,QAAQ,cAAc,CAAC,GAAG;GAC7C,MAAM,YAAY,aAAa,QAAQ;GACvC,IACE,CAAC,OAAO,YAAY,OAAO,MACxB,UACC,MAAM,cAAc,UAAU,cAC7B,MAAM,UAAU,aAAa,UAAU,aAAa,SAAS,MAAM,KAAK,EAC7E,GAEA;GACF,MAAM,QACJ,OAAO,OAAO,OAAO,YAAY,aAC7B,MAAM,OAAO,OAAO,QAAQ,aAAa,IACzC,OAAO,OAAO;GACpB,UAAU,OAAO,eAAe;GAChC,MAAM,YAAY,MAAM,eAAe,CAAC;GACxC,KAAK,MAAM,YAAY,WAAW;IAChC,MAAM,MAAM,IAAI,IAAI,SAAS,GAAG;IAChC,IACE,IAAI,aAAa,SACjB,CAAC,IAAI,YACL,IAAI,YACJ,IAAI,YACJ,IAAI,UACJ,IAAI,QACJ,IAAI,SAAS,SAAS,OACtB,SAAS,aAAa,6BAEtB,MAAM,IAAI,MAAM,4BAA4B,SAAS,IAAI,EAAE;IAC7D,IAAI,gBAAgB,IAAI,SAAS,GAAG,KAAK,gBAAgB,IAAI,SAAS,GAAG,CAAC,CAAE,aAAa,UACvF,MAAM,IAAI,MAAM,8BAA8B,SAAS,IAAI,EAAE;IAC/D,MAAM,aAA0C;KAC9C,KAAK,SAAS;KACd,MAAM,SAAS;KACf,UAAU,SAAS;KACnB,GAAI,SAAS,gBAAgB,KAAA,IAAY,CAAC,IAAI,EAAE,aAAa,SAAS,YAAY;KAClF,GAAI,SAAS,UAAU,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO,SAAS,MAAM;IAClE;IACA,gBAAgB,IAAI,SAAS,KAAK;KAAE;KAAY;IAAS,CAAC;GAC5D;GACA,KAAK,MAAM,QAAQ,MAAM,SAAS,CAAC,GAAG;IACpC,IAAI,UAAU,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI,MAAM,uBAAuB,KAAK,KAAK,EAAE;IACjF,MAAM,cAAc,KAAK,OAAO,IAAI;IACpC,IAAI,gBAAgB,KAAA,KAAa,CAAC,UAAU,MAAM,aAAa,SAAS,QAAQ,WAAW,GACzF,MAAM,IAAI,MAAM,aAAa,KAAK,KAAK,mDAAmD;IAG5F,IAAI,CAAC,aAAc,WAAW,KAAK,IAAI,GAAG;IAC1C,UAAU,IAAI,KAAK,MAAM;KACvB,YAAY;MACV,MAAM,KAAK;MACX,OAAO,KAAK,SAAS,KAAK;MAC1B,aAAa,KAAK;MAClB,YAAY,KAAK;MACjB,GAAI,KAAK,gBAAgB,KAAA,IAAY,CAAC,IAAI,EAAE,aAAa,KAAK,YAAY;MAC1E,GAAI,KAAK,iBAAiB,KAAA,IAAY,CAAC,IAAI,EAAE,cAAc,KAAK,aAAa;MAC7E,GAAI,KAAK,UAAU,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM;KAC1D;KACA,UAAU,YAAY,YAAY,QAAQ,UAAU,cAClD,KAAK,QAAQ,YAAY,YAAY,QAAQ,UAAU,aAAa,aAAc,OAAO;IAC7F,CAAC;GACH;GACA,KAAK,MAAM,SAAS,MAAM,UAAU,CAAC,GAAG;IACtC,IAAI,CAAC,GAAG,WAAW,OAAO,CAAC,CAAC,CAAC,MAAM,cAAc,UAAU,WAAW,SAAS,MAAM,IAAI,GACvF,MAAM,IAAI,MAAM,wBAAwB,MAAM,KAAK,EAAE;IACvD,MAAM,MAAM,gBAAgB,mBAAmB,QAAQ,SAAS,EAAE,cAAc,mBAAmB,MAAM,IAAI;IAC7G,WAAW,IAAI,KAAK;KAClB,YAAY;MAAE,MAAM,MAAM;MAAM,aAAa,MAAM;MAAa;KAAI;KACpE;IACF,CAAC;GACH;EACF;EACA,kBAAkB;EAClB,mBAAmB;EACnB,wBAAwB;EACxB,sBAAsB;EACtB,kBAAkB;CACpB;CAEA,MAAM,mBAAmB,OAAO,UAAkD;EAChF,mBAAmB;EACnB,MAAM,aAAa,MAAM,OAAO,8BAA8B;EAC9D,MAAM,aAAa,WAAW,KAAK,SACjC,YACE,KAAK,SAAA,eACD;GACE,GAAG;GACH,aAAa,sBAAsB,KAAK,aAAa,cAAc,oBAAoB,CAAC,CAAC;EAC3F,IACA,YACE,aAAc,SACpB,kBACF,CACF;EAKA,MAAM,aAAa,cAAc,qBAAqB,IAAI,IAAI,WAAW,KAAK,SAAS,KAAK,IAAI,CAAC;EACjG,MAAM,WAAW,QAAQ,SAAS,CAAC,EAAA,CAChC,QAAQ,SAAS,CAAC,WAAW,IAAI,KAAK,IAAI,KAAK,cAAc,WAAW,KAAK,IAAI,MAAM,KAAK,CAAC,CAC7F,KAAK,UAAgD;GACpD,GAAG;GACH,MAAM,QAAQ,GAAG,MAAM;IACrB,aAAc,aAAa;IAC3B,IAAI,CAAC,oBAAoB,CAAC,aAAc,WAAW,KAAK,IAAI,GAC1D,MAAM,IAAI,MAAM,SAAS,KAAK,KAAK,sBAAsB;IAC3D,OAAO,KAAK,QAAQ,GAAG,IAAI;GAC7B;EACF,EAAE;EACJ,MAAM,UAAU,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,IAAI,CAAC;EACxD,MAAM,mBAAmB,CACvB,IAAI,QAAQ,gBAAgB,CAAC,EAAA,CAAG,QAAQ,UAAU,QAAQ,IAAI,MAAM,IAAI,CAAC,GACzE,GAAG,WAAW,KAAK,UAAU;GAC3B,MAAM,KAAK;GACX,GAAI,KAAK,kBAAkB,KAAA,IAAY,CAAC,IAAI,EAAE,eAAe,KAAK,cAAc;GAChF,GAAI,KAAK,qBAAqB,KAAA,IAAY,CAAC,IAAI,EAAE,kBAAkB,KAAK,iBAAiB;EAC3F,EAAE,CACJ;EACA,MAAM,QAAQ,aAAa,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC;EACtD,MAAM,uBAAO,IAAI,IAAgC;EACjD,KAAK,MAAM,QAAQ,SACjB,KAAK,IAAI,KAAK,MAAM;GAClB,YAAY;IACV,MAAM,KAAK;IACX,OAAO,KAAK,SAAS,KAAK;IAC1B,aAAa,KAAK;IAClB,YAAY,KAAK;GACnB;GACA,UAAU,YAAY,YAAY,QAAQ,aACxC,OAAQ,YAAY,KAAK,MAAM,YAAY,YAAY,QAAQ,QAAQ;EAC3E,CAAC;EAEH,KAAK,MAAM,QAAQ,OACjB,KAAK,IAAI,KAAK,MAAM;GAClB,YAAY;IACV,MAAM,KAAK;IACX,OAAO,KAAK,SAAS,KAAK;IAC1B,aAAa,KAAK;IAClB,YAAY,KAAK;IACjB,GAAI,KAAK,gBAAgB,KAAA,IAAY,CAAC,IAAI,EAAE,aAAa,KAAK,YAAY;IAC1E,GAAI,KAAK,iBAAiB,KAAA,IAAY,CAAC,IAAI,EAAE,cAAc,KAAK,aAAa;IAC7E,GAAI,KAAK,UAAU,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM;GAC1D;GACA,UAAU,YAAY,YAAY,QAAQ,aACxC,KAAK,QAAQ,YAAY,YAAY,QAAQ,UAAU,aAAc,OAAO;EAChF,CAAC;EAEH,eAAe;EACf,sBAAsB;EACtB,mBAAmB;EACnB,mBAAmB;CACrB;;;;;;;;CAYA,IAAI,WAA0B,QAAQ,QAAQ;CAC9C,MAAM,yBAAwC;EAE5C,WAAW,SAAS,YAAY,KAAA,CAAS,CAAC,CAAC,WAAW,iBAAiB,iBAAiB,CAAC;EACzF,OAAO;CACT;CAEA,MAAM,4BAAkC;EACtC,IAAI,mBAAmB;EACvB,oBAAoB;EACpB,qBAAqB;GACnB,oBAAoB;GACpB,IAAI,UAAU;GACd,iBAAsB,CAAC,CAAC,OAAO,UAC7B,QAAQ,WACN,qCAAqC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAC5F,CACF;EACF,CAAC;CACH;CAEA,IAAI;CACJ,MAAM,iBAAiB,SAA8B;EACnD,iBAAiB;EACjB,KAAK,QAAQ,YAAY;GACvB,QAAQ,QAAQ,4BAA4B,qBAAqB,IAAI,CAAC;GACtE,QAAQ,mBAAmB,qBAAqB,MAAM,GAAG,yCAAyC;EACpG,CAAC;EACD,IAAI,iBAAiB,KAAA,GAAW,MAAM,IAAI,MAAM,sDAAsD;EACtG,IAAI,cAAc,KAAA,GAChB,SAAS,sBAAsB;GAC7B,KAAK,QAAQ;GACb;GACA,QAAQ;GACR;GACA;GACA,SAAS;GACT,gBAAgB;GAChB,wBAAwB,SAAS,iBAAiB;GAClD,cAAc,QAAQ;GACtB,sBAAsB;GACtB,gBAAgB;IACd,WAAW,QAAQ;IACnB,MAAS,SAAiB,KAAK,IAAI,IAAI;GACzC;GACA,GAAI,QAAQ,aAAa,KAAA,IAAY,CAAC,IAAI,EAAE,UAAU,QAAQ,SAAS;EACzE,CAAC;EAEH,eAAe,IAAI,aAAa,MAAM;GACpC,YAAY,QAAQ;GACpB,mBAAmB;GACnB,WAAW;GACX,oBAAoB,CAClB,mBAAG,IAAI,IAAI,CACT,GAAI,QAAQ,sBAAsB,CAAC,GACnC,GAAI;IAAC;IAAa;IAAW;GAAS,CAAC,CAAW,QAC/C,SAAS,KAAK,UAAU,iBAAiB,KAAK,MAAM,KAAK,UAAU,QAAQ,UAAU,KAAK,CAC7F,CACF,CAAC,CACH;GACA,SAAS;GACT,kBAAkB,QAAQ;GAC1B,oBAAoB,cAAc;IAChC,KAAK,MAAM,eAAe,wBAWxB,IAAI,CAVa,QAAQ,WAAW,MACjC,UACC,MAAM,gBAAgB,eACtB,MAAM,OAAO,SAAS,SAAS,KAC/B,MAAM,OAAO,MACV,UACC,MAAM,cAAc,UAAU,cAC7B,MAAM,UAAU,aAAa,UAAU,aAAa,SAAS,MAAM,KAAK,EAC7E,CAEQ,KAAK,CAAC,wBAAwB,SAAS,WAAW,GAC5D,MAAM,IAAI,MACR,8BAA8B,YAAY,yDAC5C;GAEN;GACA,GAAI,QAAQ,iBAAiB,KAAA,IAAY,CAAC,IAAI,EAAE,oBAAoB,QAAQ,aAAa;GACzF,YAAY,OAAO,UAAU;IAC3B,oBAAoB;IACpB,MAAM,iBAAiB;GACzB;GACA,gBAAgB,OAAO,SAAS;IAC9B,MAAM,SAAS,aAAa,IAAI;IAEhC,MAAM,aAAa,IAAI,KAAK,OAAO,QAAQ,UAAU,CAAC,EAAA,CAAG,KAAK,UAAU,MAAM,IAAI,CAAC;IACnF,MAAM,YAAY,QAAQ,UAAU,CAAC,EAAA,CAAG,QAAQ,UAAU,CAAC,WAAW,IAAI,MAAM,IAAI,CAAC;IACrF,MAAM,eAAe,CAAC,GAAG,UAAU,GAAI,OAAO,QAAQ,UAAU,CAAC,CAAE;IACnE,MAAM,QAAQ,iBACZ,SAAS,WAAW,IAAI,OAAO,UAAU;KAAE,GAAG,OAAO;KAAS,QAAQ;IAAa,CACrF;IACA,gBAAgB,IAAI,IAClB,aAAa,KAAK,UAAU;KAC1B,MAAM,MAAM,gBAAgB,mBAAmB,QAAQ,SAAS,EAAE,UAAU,mBAAmB,MAAM,IAAI;KACzG,OAAO,CACL,KACA;MACE,YAAY;OACV,MAAM,MAAM;OACZ,aAAa,MAAM;OACnB;MACF;MACA,SAAS,MAAM;KACjB,CACF;IACF,CAAC,CACH;IACA,mBAAmB;IAEnB,IAAI,kBAAkB,MAAM,SAAS,KAAK,SAAA,YAA6B,GAAG,MAAM,iBAAiB;GACnG;GACA,WAAW,OAAO,cAAc;IAC9B,QAAQ,0BAA0B,QAAQ,SAAS,OAAQ,OAAO,UAAU,QAAQ,IAAI,GAAG,SAAS;IACpG,kBAAkB;IAClB,KAAK,MAAM,YAAY,oBAAoB,SAAS,SAAS;GAC/D;GACA,UAAU,UAAU,QAAQ,WAAW,8BAA8B,oBAAoB,KAAK,GAAG;EACnG,CAAC;EACD,qBAAqB,mCACnB,SACA,cACA,QAAQ,cACP,cAAc,QAAQ,gBAAgB,MAAM,SAAS,KAAK,CAAC,GAC5D,gBACF;EACA,aAAa,mBAAmB,OAAO,cAAc;GAInD,IAAI,CAAC,iBAAiB,CAAC,cAAc,OAAO,OAAO;GAInD,IAAI;IACF,MAAM,kBAAkB;GAC1B,SAAS,OAAO;IAEd,IAAI,EAAE,iBAAiB,SAAS,MAAM,SAAS,eAC7C,QAAQ,WAAW,4BAA4B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG;GAC3G;GACA,MAAM,mBAAmB,SAAS;EACpC,CAAC;CACH;CAEA,MAAM,iBAAiB,OAAO,cAAoD;EAChF,IAAI,iBAAiB,KAAA,GAAW,MAAM,IAAI,MAAM,wCAAwC;EACxF,MAAM,OAAO;EAGb,MAAM,mBAAyB;GAC7B,IAAI,UAAU,MAAM,IAAI,MAAM,+CAA+C;EAC/E;EACA,yBAA0B,MAAM,QAAQ,yBAAyB,KAAM,CAAC;EACxE,0BAA0B,UAAU;EACpC,WAAW;EACX,KAAK,oBAAoB,UAAU,iBAAiB;EAGpD,IAAI,WAAW,KAAA,GACb,IAAI;GACF,MAAM,OAAO,KAAK;EACpB,SAAS,OAAO;GACd,QAAQ,WAAW,iCAAiC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG;EAC9G;EAEF,WAAW;EACX,MAAM,KAAK,OAAO,gBAAgB;EAClC,WAAW;EAGX,IAAI,CAAC,KAAK,OAAO,OACf,MAAM,IAAI,MAAM,yCAAyC,KAAK,OAAO,SAAS,0BAA0B;EAC1G,gBAAgB;EAChB,MAAM,kBAAkB;EACxB,WAAW;EAEX,MAAM,QAAQ,QAAQ;EACtB,WAAW;EACX,MAAM,KAAK,aAAa,iBAAiB,CAAC,CAAC;EAC3C,MAAM,mBAAmB;EAIzB,CAAK,MADiB,QAAQ,YAAY,EAAA,CAC7B,QAAQ,OAAO,UAC1B,QAAQ,WAAW,0BAA0B,oBAAoB,KAAK,GAAG,CAC3E;EACA,WAAW;CACb;CAEA,MAAM,gBAA+B;EACnC,oBAAoB,YAAY;GAC9B,IAAI,UAAU;GAId,MAAM,WAAW;GACjB,WAAW;GACX,gBAAgB;GAChB,kBAAkB;GAClB,aAAa,MAAM;GACnB,iBAAiB,MAAM;GACvB,MAAM,WAAsB,CAAC;GAC7B,IAAI;IACF,MAAM,QAAQ,UAAU;GAC1B,SAAS,OAAO;IACd,SAAS,KAAK,KAAK;GACrB;GACA,IAAI;IACF,IAAI,YAAY,cAAc,OAAO,OAAO,MAAM,aAAa,aAAa,oBAAoB,CAAC,CAAC;GACpG,SAAS,OAAO;IACd,SAAS,KAAK,KAAK;GACrB;GAEA,IAAI;IACF,MAAM,QAAQ,QAAQ;GACxB,SAAS,OAAO;IACd,SAAS,KAAK,KAAK;GACrB;GACA,IAAI;IACF,MAAM,QAAQ,SAAS;GACzB,SAAS,OAAO;IACd,SAAS,KAAK,KAAK;GACrB;GACA,IAAI;IACF,MAAM,cAAc,MAAM;GAC5B,SAAS,OAAO;IACd,SAAS,KAAK,KAAK;GACrB;GAEA,QAAQ,QAAQ;GAChB,wBAAwB;GACxB,kBAAkB;GAClB,IAAI;IACF,MAAM,qBAAqB,MAAM;GACnC,SAAS,OAAO;IACd,SAAS,KAAK,KAAK;GACrB;GACA,mBAAmB;GACnB,IAAI,SAAS,QAAQ,MAAM,IAAI,eAAe,UAAU,kCAAkC;EAC5F,EAAA,CAAG;EACH,OAAO;CACT;CACA,MAAM,aAAmB;EACvB,QAAa,CAAC,CAAC,OAAO,UAAmB,QAAQ,WAAW,oBAAoB,KAAK,CAAC,CAAC;CACzF;CAEA,MAAM,oBAAoB,OACxB,YACA,cACA,WACA,OACA,iBACA,WACwE;EACxE,IAAI,YAAY,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,cAAc,OAAO,OAClE,MAAM,IAAI,MAAM,uEAAuE;EACzF,IAAI,WAAW,aAAa,aAAa,GAAG,MAAM,IAAI,MAAM,sCAAsC;EAClG,IAAI,CAAC,aAAa,WAAW,SAAS,GAAG,MAAM,IAAI,MAAM,sCAAsC;EAC/F,MAAM,UAAU,UAAU,CAAC,CAAC,IAAI,WAAW,IAAI;EAC/C,IAAI,YAAY,KAAA,GAAW,MAAM,IAAI,MAAM,SAAS,WAAW,KAAK,gBAAgB;EACpF,IAAI,CAAC,MAAM,MAAM,QAAQ,WAAW,YAAY,WAAW,SAAS,GAClE,MAAM,IAAI,MACR,+BAA+B,WAAW,KAAK,KAAK,kBAAkB,QAAQ,WAAW,YAAY,WAAW,SAAS,GAC3H;EACF,MAAM,UAAU,CAAC,WAAW,QAAQ,eAAe,CAAC,CAAC,QAClD,WAAkC,WAAW,KAAA,CAChD;EACA,MAAM,SAAS,QAAQ,WAAW,IAAI,KAAA,IAAY,YAAY,IAAI,OAAO;EACzE,QAAQ,eAAe;EACvB,OAAO,QAAQ,qBACb,YAAY;GACV,QAAQ,eAAe;GACvB,MAAM,WAAW,YAAY;GAC7B,QAAQ,eAAe;GACvB,IAAI,YAAY,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,cAAc,OAAO,OAClE,MAAM,IAAI,MAAM,uEAAuE;GACzF,IAAI,WAAW,aAAa,aAAa,KAAK,UAAU,CAAC,CAAC,IAAI,WAAW,IAAI,MAAM,SACjF,MAAM,IAAI,MAAM,SAAS,WAAW,KAAK,sBAAsB;GACjE,MAAM,aAAa,YAAY,WAAW;GAC1C,MAAM,SAAS,MAAM,WACnB;IACE;IACA,UAAU,WAAW;IACrB,MAAM,WAAW;GACnB,GACA,SAAS,gBAAgB,QAAQ,kBAAkB,IAAI,kBACzD;GACA,IAAI,QAAQ,UAAU,KAAA,GACpB,OAAO;IACL,SAAS,CAAC;KAAE,MAAM;KAAQ,MAAM,OAAO,MAAM;IAAO,CAAC;IACrD,SAAS;GACX;GACF,MAAM,OAAO,QAAQ,QAAS,WAAW;GACzC,IAAI,CAAC,MAAM,MAAM,QAAQ,WAAW,YAAY,IAAI,GAClD,MAAM,IAAI,MACR,+CAA+C,WAAW,KAAK,KAAK,kBAAkB,QAAQ,WAAW,YAAY,IAAI,GAC3H;GACF,MAAM,WAAW,YAAY;GAC7B,QAAQ,eAAe;GACvB,IAAI,YAAY,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,cAAc,OAAO,OAClE,MAAM,IAAI,MAAM,uEAAuE;GACzF,IAAI,WAAW,aAAa,aAAa,KAAK,UAAU,CAAC,CAAC,IAAI,WAAW,IAAI,MAAM,SACjF,MAAM,IAAI,MAAM,SAAS,WAAW,KAAK,sBAAsB;GACjE,MAAM,aAAa;IACjB,MAAM;IACN,OAAO;IACP,QAAQ;IACR;IACA,UAAU,WAAW;IACrB;GACF;GACA,OAAO,WAAW,UAAU;GAG5B,MAAM,aAAa,aAAa,wBAAwB,UAAU;GAClE,IAAI;GACJ,IAAI;IACF,SAAS,MAAM,QAAQ,QACrB,YACA,MACA,SACC,YAAY;KACX,OAAO,WAAW;MAChB,MAAM;MACN,OAAO;MACP,QAAQ;MACR;MACA,UAAU,WAAW;MACrB,eAAe;KACjB,CAAC;KACD,WAAW,WAAW,OAAO;IAC/B,GACA,WAAW,cAAc,KAAA,IACrB,KAAA,IACA;KAAE,GAAG,aAAa;KAAS,WAAW,WAAW;IAAU,CACjE;GACF,SAAS,OAAO;IACd,SAAS;KACP,SAAS,CACP;MACE,MAAM;MACN,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;KAC7D,CACF;KACA,SAAS;IACX;GACF;GAGA,MAAM,QAAQ,QAAQ,UAClB,KAAA,IACA,MAAM,UACJ;IACE;IACA,UAAU,WAAW;IACrB;IACA,SAAS,OAAO;IAChB,GAAI,YAAY,OAAO,OAAO,IAAI,EAAE,SAAS,OAAO,QAAQ,IAAI,CAAC;IACjE,SAAS,OAAO,YAAY;GAC9B,GACA,SAAS,gBAAgB,QAAQ,kBAAkB,IAAI,kBACzD;GACJ,MAAM,UAAU;IACd,SAAS,OAAO,WAAW,OAAO;IAElC,GAAI,OAAO,YAAY,KAAA,KAAa,OAAO,YAAY,KAAA,KAAa,OAAO,sBAAsB,KAAA,IAC7F,CAAC,IACD,EAAE,mBAAmB,OAAO,kBAAkB;IAClD,GAAI,OAAO,YAAY,KAAA,KACvB,OAAO,YAAY,KAAA,KACnB,OAAO,YAAY,KAAA,KACnB,OAAO,UAAU,KAAA,IACb,CAAC,IACD,EAAE,OAAO,OAAO,MAAM;IAC1B,GAAI,OAAO,YAAY,KAAA,IACnB,EAAE,SAAS,MAAM,QAAQ,IACzB,OAAO,YAAY,KAAA,IACjB,CAAC,IACD,EAAE,SAAS,OAAO,QAAQ;IAChC,SAAS,OAAO,WAAW,OAAO,WAAW;GAC/C;GACA,MAAM,WAAW;IACf,MAAM;IACN,OAAO;IACP,QAAQ;IACR;IACA,UAAU,WAAW;IACrB,QAAQ;IACR,SAAS,QAAQ;IACjB,WAAW,OAAO,aAAa;GACjC;GACA,OAAO,WAAW,QAAQ;GAC1B,MAAM,aAAa,aAAa,sBAAsB,QAAQ;GAC9D,OAAO;EACT,GACA;GAAE;GAAQ;EAAO,CACnB;CACF;CAEA,MAAM,cAAkC;EACtC,cAAc;GACZ,IAAI,YAAY,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,cAAc,OAAO,OAC3E,MAAM,IAAI,MAAM,+CAA+C;GACjE,OAAO;IACL,UAAU;IACV,OAAO,CAAC,GAAG,oBAAoB,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,KAAK,UAAU;IACtE,QAAQ,CAAC,GAAG,cAAc,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,MAAM,UAAU;GACrE;EACF;EACA,aAAa,eACX,kBACE,kBACM,uBACA,2BACA,gBACR;EACF,UAAU,UAAU,KAAK;GACvB,IAAI,YAAY,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,cAAc,OAAO,OAC3E,MAAM,IAAI,MAAM,+CAA+C;GACjE,IAAI,aAAa,iBAAiB,MAAM,IAAI,MAAM,uCAAuC;GACzF,MAAM,QAAQ,cAAc,IAAI,GAAG;GACnC,IAAI,UAAU,KAAA,GAAW,MAAM,IAAI,MAAM,iCAAiC;GAC1E,OAAO,MAAM;EACf;CACF;CAEA,sBAAsB;EACpB,mBAAmB,YAAY,YAAY;EAC3C,aAAa,eAAe,YAAY,WAAW,UAAU;CAC/D;CAEA,MAAM,aAAiC;EACrC,cAAc;GACZ,IAAI,YAAY,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,cAAc,OAAO,OAC1E,MAAM,IAAI,MAAM,0CAA0C;GAC5D,OAAO;IACL,UAAU;IACV,OAAO,CAAC,GAAG,gBAAgB,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,KAAK,UAAU;IAClE,QAAQ,CAAC,GAAG,iBAAiB,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,MAAM,UAAU;IACtE,aAAa,CAAC,GAAG,sBAAsB,OAAO,CAAC,CAAC,CAAC,KAAK,aAAa,SAAS,UAAU;GACxF;EACF;EACA,aAAa,eACX,kBACE,kBACM,0BACA,uBACA,iBACN,aAAa,QACb,mBACF;EACF,MAAM,eAAe,UAAU,KAAK;GAClC,IAAI,YAAY,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,cAAc,OAAO,OAC1E,MAAM,IAAI,MAAM,0CAA0C;GAC5D,IAAI,aAAa,oBAAoB,MAAM,IAAI,MAAM,qCAAqC;GAC1F,MAAM,WAAW,sBAAsB,IAAI,GAAG,CAAC,EAAE;GACjD,IAAI,aAAa,KAAA,GAAW,MAAM,IAAI,MAAM,2CAA2C;GACvF,MAAM,OAAO,MAAM,SAAS,KAAK;GACjC,IAAI,YAAY,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,cAAc,OAAO,OAC1E,MAAM,IAAI,MAAM,0CAA0C;GAC5D,IAAI,aAAa,sBAAsB,sBAAsB,IAAI,GAAG,CAAC,EAAE,aAAa,UAClF,MAAM,IAAI,MAAM,qCAAqC;GACvD,OAAO;EACT;EACA,MAAM,UAAU,UAAU,KAAK;GAC7B,IAAI,YAAY,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,cAAc,OAAO,OAC1E,MAAM,IAAI,MAAM,0CAA0C;GAC5D,IAAI,aAAa,oBAAoB,MAAM,IAAI,MAAM,qCAAqC;GAC1F,MAAM,QAAQ,iBAAiB,IAAI,GAAG,CAAC,EAAE;GACzC,IAAI,UAAU,KAAA,GAAW,MAAM,IAAI,MAAM,qCAAqC;GAC9E,MAAM,OAAO,MAAM,MAAM,KAAK,aAAa,OAAO;GAClD,IAAI,YAAY,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,cAAc,OAAO,OAC1E,MAAM,IAAI,MAAM,0CAA0C;GAC5D,IAAI,aAAa,sBAAsB,iBAAiB,IAAI,GAAG,CAAC,EAAE,UAAU,OAC1E,MAAM,IAAI,MAAM,qCAAqC;GACvD,OAAO;EACT;CACF;CAEA,OAAO;EACL;EACA,MAAM,qBAAqB;GACzB,MAAM,QAAQ,MAAM,QAAQ,UAAU;GACtC,MAAM,iBACJ,mBAAmB,KAAA,IACf,KAAA,IACA,8BAA8B,cAAc,CAAC,EAAE,SAAS,QAAQ,SAAS;GAC/E,OAAO;IACL,QAAQ,MAAM,WAAW;IACzB,oBAAoB,OAAO,MAAM,mBAAmB,IAAI;IACxD,GAAI,mBAAmB,KAAA,IAAY,CAAC,IAAI,EAAE,eAAe;GAC3D;EACF;EACA,GAAI,mBAAmB,KAAA,IAAY,CAAC,IAAI,EAAE,eAAe;EACzD,IAAI,OAAO;GACT,OAAO;EACT;EACA;EACA;EACA;EACA;EACA,mBAAmB,CAAC,YAAY,iBAAiB,CAAC,2BAA2B,cAAc,OAAO,UAAU;EAC5G,oBAAoB,UAAU;GAC5B,UAAU,IAAI,QAAQ;GACtB,aAAa,UAAU,OAAO,QAAQ;EACxC;EACA,YAAY,UAAU;GACpB,mBAAmB,IAAI,QAAQ;GAC/B,SAAS,eAAe;GACxB,aAAa;IACX,mBAAmB,OAAO,QAAQ;GACpC;EACF;EACA,qBAAqB,OAAO;GAC1B,OAAO,QAAQ,QAAQ,KAAqB,KAAK;EACnD;EACA;CACF;AACF"}
1
+ {"version":3,"file":"headlessSessionHost.mjs","names":["root"],"sources":["../../../../../src/systems/main/adapters/headlessSessionHost.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport { randomUUID } from 'node:crypto';\nimport path from 'node:path';\n\nimport type { Context as CordisContext } from '@deepseek-ai/cordis';\nimport { BACKGROUND_CONTEXT, withAbortSignal } from '@earendil-works/chord/context';\nimport {\n createAssistantMessageEventStream,\n isContextOverflow,\n type Model,\n type Api,\n type Usage,\n} from '@earendil-works/pi-ai';\nimport { clampMaxTokensToContext } from '@earendil-works/pi-ai/api/simple-options';\nimport { Value } from 'typebox/value';\n\nimport {\n PO_BACKGROUND_WORK_CHANGED_EVENT,\n PO_BACKGROUND_WORK_SERVICE,\n readPoBackgroundWorkService,\n} from '../../../exports/backgroundWork';\nimport {\n PO_CHILD_SESSION_SERVICE,\n PO_CHILD_SESSION_MCP_TOOL_SERVICE,\n PO_CHILD_SESSION_HOOKS_SERVICE,\n PO_CHILD_SESSION_HOOK_REGISTRY_SERVICE,\n type PoChildSessionHooks,\n type PoChildSessionMcpTool,\n} from '../../../exports/childSession';\nimport { registerPoSessionEnvironment } from '../../../exports/cordisHost';\nimport type {\n PoHeadlessEventName,\n PoHeadlessExecutionContext,\n PoHeadlessModelMetadata,\n PoHeadlessSelection,\n PoHeadlessTool,\n PoHeadlessToolCompletionRequest,\n} from '../../../exports/headless';\nimport {\n PO_LOAD_SKILL_TOOL,\n PoHeadlessPromptAdmissionError,\n isPoHeadlessToolModelVisible,\n} from '../../../exports/headless';\nimport type { PoSessionContext } from '../../../exports/hubChannel';\nimport type { PoMcpContextSnapshot, PoMcpSkill, PoMcpUiResource } from '../../../exports/mcpFacet';\nimport { PO_AGENT_MODEL_ENTRY_TYPE } from '../../../schemas/agentModel';\nimport type { PoPlatform } from '../../../schemas/platform';\nimport { validationDetails } from '../../../schemas/protocol';\nimport { createDirectHarnessRuntime } from '../../../server/directHarnessRuntime';\nimport { harnessErrorMessage } from '../../../server/harnessErrorMessage';\nimport { CHATGPT_AUTH_PROVIDER_ID } from '../../../services/chatgptAuth';\nimport { createChatgptImageClient } from '../../../services/chatgptImages';\nimport { createChatgptWebSearchClient } from '../../../services/chatgptWebSearch';\nimport { buildContextDetail } from '../../../services/contextDetail';\nimport { removeContextDetail, writeContextDetail } from '../../../services/contextDetailStore';\nimport { PO_CONTEXT_ENTRY_TYPE, projectContext } from '../../../services/contextProjection';\nimport { SessionMetadataDoc } from '../../../services/durableSession/docs';\nimport { abandonSubagent } from '../../../services/durableSubagents';\nimport { createHeadlessClient } from '../../../services/headlessClient';\nimport { createNodeModelDependencies } from '../../../services/nodeModelDependencies';\nimport { validateDirectHeadlessArgs } from '../../../services/piArgs';\nimport type { PiExtensionHost } from '../../../services/piExtensionHost';\nimport { piAgentDirectory } from '../../../services/piSettings/core';\nimport { summarize } from '../../../services/piSummary';\nimport { observe } from '../../../services/serverTelemetry';\nimport { PO_SESSION_TEMP_DIR, prepareSessionEnvironment } from '../../../services/sessionFiles';\nimport { formatSkillsForSystemPrompt } from '../../../services/skillPrompt';\nimport { formatToolPrompt, type ToolPromptEntry } from '../../../services/toolPrompt';\nimport type { ContextPromptStage } from '../../../types/contextApi';\nimport type {\n AgentHarnessResources,\n AgentHarnessTool,\n AgentMessage,\n HookMap,\n} from '../../../types/server/directHarnessRuntime';\nimport type { DirectHarnessRuntime, DirectHarnessRuntimeOptions } from '../../../types/server/directHarnessRuntime';\nimport type { SessionFrame } from '../../../types/server/session';\nimport type {\n SessionSkillDescriptor,\n SessionToolDescriptor,\n SessionToolSurface,\n SessionUiResourceDescriptor,\n} from '../../../types/server/sessionToolSurface';\nimport {\n composeChildSessionHooks,\n createPoChildSessionHookRegistry,\n createHeadlessChildSessionServiceProvider,\n} from '../../child/adapters/headlessChildSessionService';\nimport type { ResolvedHeadlessResource } from '../types/headlessHost';\nimport type {\n HeadlessModelDependencies,\n HeadlessSessionHost,\n HeadlessSessionHostOptions,\n} from '../types/headlessSessionHost';\nimport { describeLoadSkillTool, HeadlessHost, headlessHarnessSkill } from './headlessHost';\n\nexport { validateDirectHeadlessArgs };\n\ntype AnyRecord = Record<string, unknown>;\ntype HeadlessTool = PoHeadlessTool;\ntype AfterToolPatch = NonNullable<HookMap['after_tool']['result']>;\ntype ToolContent = NonNullable<AfterToolPatch['content']>;\ntype CompactResult = NonNullable<NonNullable<HookMap['before_compaction']['result']>['compaction']>;\ntype JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue };\n\nconst EXTERNAL_OPERATION = 'external';\nconst REMOTE_TOOL_WAIT_MS = 30_000;\nconst PROMPT_PREPARATION_FAILED_EVENT = 'po_server.system_prompt_preparation_failed';\n\ninterface AppliedSessionTool {\n readonly descriptor: SessionToolDescriptor;\n execute(\n toolCallId: string,\n parameters: Record<string, unknown>,\n signal?: AbortSignal,\n onUpdate?: Parameters<SessionToolSurface['invokeTool']>[0]['onUpdate'],\n execution?: PoHeadlessExecutionContext,\n ): Promise<import('../../../exports/headless').PoHeadlessToolResult>;\n}\n\nfunction isRecord(value: unknown): value is AnyRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction stringArray(value: unknown): string[] | undefined {\n return Array.isArray(value) && value.every((entry) => typeof entry === 'string') ? value : undefined;\n}\n\n/** Restores the last accepted live selection from journal projections, falling back on launch configuration. */\nexport function restoreHeadlessSelection(\n entries: readonly AnyRecord[],\n fallback: PoHeadlessSelection,\n): PoHeadlessSelection {\n let projected: Partial<PoHeadlessSelection> | undefined;\n for (let index = entries.length - 1; index >= 0 && projected === undefined; index -= 1) {\n const entry = entries[index];\n if (!isRecord(entry) || entry.type !== 'custom' || !isRecord(entry.data)) continue;\n if (projected === undefined && entry.customType === PO_CONTEXT_ENTRY_TYPE) {\n const selection = entry.data.selection;\n if (!isRecord(selection) || typeof selection.majorMode !== 'string') continue;\n const domains = stringArray(selection.domains);\n if (domains === undefined || (selection.profile !== undefined && typeof selection.profile !== 'string')) continue;\n projected = {\n majorMode: selection.majorMode,\n domains,\n ...(typeof selection.profile === 'string' ? { profile: selection.profile } : {}),\n };\n }\n }\n return { ...fallback, ...projected };\n}\n\nfunction isJsonValue(value: unknown): value is JsonValue {\n if (value === null || typeof value === 'string' || typeof value === 'boolean') return true;\n if (typeof value === 'number') return Number.isFinite(value);\n if (Array.isArray(value)) return value.every(isJsonValue);\n return isRecord(value) && Object.values(value).every(isJsonValue);\n}\n\nfunction boundedJsonCopy(value: unknown): unknown {\n const seen = new Set<object>();\n const visit = (item: unknown, depth: number): void => {\n if (depth > 128) throw new TypeError('Message data is too deeply nested.');\n if (item === null || typeof item === 'string' || typeof item === 'boolean') return;\n if (typeof item === 'number' && Number.isFinite(item)) return;\n if (typeof item !== 'object' || seen.has(item)) throw new TypeError('Message data must be JSON serializable.');\n seen.add(item);\n for (const child of Object.values(item)) {\n if (child !== undefined) visit(child, depth + 1);\n }\n seen.delete(item);\n };\n visit(value, 0);\n const encoded = JSON.stringify(value);\n if (encoded.length > 16 * 1024 * 1024) throw new TypeError('Message data exceeds the serialization limit.');\n return JSON.parse(encoded);\n}\n\nfunction isSummaryMessage(value: unknown): value is AgentMessage {\n if (!isRecord(value) || typeof value.timestamp !== 'number' || !Number.isFinite(value.timestamp)) return false;\n if (value.role === 'user') return typeof value.content === 'string' || isToolContent(value.content);\n if (value.role === 'custom')\n return (\n typeof value.customType === 'string' &&\n typeof value.display === 'boolean' &&\n (typeof value.content === 'string' || isToolContent(value.content))\n );\n if (value.role === 'compactionSummary')\n return typeof value.summary === 'string' && typeof value.tokensBefore === 'number';\n if (value.role === 'branchSummary')\n return typeof value.summary === 'string' && (value.fromId === null || typeof value.fromId === 'string');\n if (value.role === 'bashExecution')\n return (\n typeof value.command === 'string' &&\n typeof value.output === 'string' &&\n typeof value.cancelled === 'boolean' &&\n typeof value.truncated === 'boolean' &&\n (value.exitCode === undefined || typeof value.exitCode === 'number')\n );\n if (value.role === 'toolResult') return isToolContent(value.content) && isAgentMessage(value);\n return (\n value.role === 'assistant' &&\n Array.isArray(value.content) &&\n value.content.every((part: unknown) => {\n if (!isRecord(part)) return false;\n if (part.type === 'text') return typeof part.text === 'string';\n if (part.type === 'thinking') return typeof part.thinking === 'string';\n return (\n part.type === 'toolCall' &&\n typeof part.id === 'string' &&\n typeof part.name === 'string' &&\n isJsonObject(part.arguments)\n );\n }) &&\n isAgentMessage(value)\n );\n}\n\nfunction isJsonObject(value: unknown): value is Record<string, unknown> {\n return isRecord(value) && Object.values(value).every(isJsonValue);\n}\n\nfunction isToolContent(value: unknown): value is ToolContent {\n return (\n Array.isArray(value) &&\n value.every((part) => {\n if (!isRecord(part)) return false;\n if (part.type === 'text') return typeof part.text === 'string';\n return part.type === 'image' && typeof part.data === 'string' && typeof part.mimeType === 'string';\n })\n );\n}\n\nfunction isUsage(value: unknown): value is Usage {\n if (!isRecord(value) || !isRecord(value.cost)) return false;\n const cost = value.cost;\n return (\n ['input', 'output', 'cacheRead', 'cacheWrite', 'totalTokens'].every(\n (key) => typeof value[key] === 'number' && Number.isFinite(value[key]),\n ) &&\n ['input', 'output', 'cacheRead', 'cacheWrite', 'total'].every(\n (key) => typeof cost[key] === 'number' && Number.isFinite(cost[key]),\n )\n );\n}\n\nfunction isAgentMessage(value: unknown): value is AgentMessage {\n if (!isRecord(value) || typeof value.timestamp !== 'number' || !Number.isFinite(value.timestamp)) return false;\n if (value.role === 'user') return typeof value.content === 'string' || Array.isArray(value.content);\n if (!Array.isArray(value.content)) return false;\n if (value.role === 'assistant') {\n return (\n typeof value.api === 'string' &&\n typeof value.provider === 'string' &&\n typeof value.model === 'string' &&\n typeof value.stopReason === 'string' &&\n isUsage(value.usage)\n );\n }\n return (\n value.role === 'toolResult' &&\n typeof value.toolCallId === 'string' &&\n typeof value.toolName === 'string' &&\n typeof value.isError === 'boolean'\n );\n}\n\nfunction isCompactResult(value: unknown): value is CompactResult {\n return (\n isRecord(value) &&\n typeof value.summary === 'string' &&\n typeof value.tokensBefore === 'number' &&\n Number.isFinite(value.tokensBefore) &&\n Array.isArray(value.retainedTail) &&\n value.retainedTail.every(isAgentMessage) &&\n (value.usage === undefined || isUsage(value.usage)) &&\n (value.details === undefined || isJsonValue(value.details))\n );\n}\n\nfunction modelIdentity(model: Model<Api>): { provider: string; id: string } {\n return { provider: model.provider, id: model.id };\n}\n\nfunction modelMetadata(model: Model<Api>): PoHeadlessModelMetadata {\n const compat: Record<string, boolean | string> = {};\n const source = (model as unknown as { compat?: Record<string, unknown> }).compat;\n for (const key of [\n 'supportsStore',\n 'supportsDeveloperRole',\n 'supportsReasoningEffort',\n 'supportsUsageInStreaming',\n 'supportsStrictMode',\n 'maxTokensField',\n 'sendSessionAffinityHeaders',\n 'sessionAffinityFormat',\n 'supportsLongCacheRetention',\n 'thinkingFormat',\n 'requiresReasoningContentOnAssistantMessages',\n 'cacheControlFormat',\n 'forceAdaptiveThinking',\n 'allowEmptySignature',\n ]) {\n const value = source?.[key];\n if (typeof value === 'boolean' || typeof value === 'string') compat[key] = value;\n }\n let baseUrl: string | undefined;\n try {\n const url = new URL(model.baseUrl);\n url.username = '';\n url.password = '';\n url.search = '';\n url.hash = '';\n baseUrl = url.toString();\n } catch {\n // Invalid endpoints cannot safely be exposed to packages or diagnostics.\n baseUrl = undefined;\n }\n return Object.freeze({\n provider: model.provider,\n id: model.id,\n api: model.api,\n name: model.name,\n ...(baseUrl ? { baseUrl } : {}),\n compat: Object.freeze(compat),\n });\n}\n\nfunction mapResources(resources: readonly ResolvedHeadlessResource[]): {\n harness: AgentHarnessResources;\n context: string[];\n advertised: NonNullable<AgentHarnessResources['skills']>;\n} {\n const skills: NonNullable<AgentHarnessResources['skills']> = [];\n const advertised: NonNullable<AgentHarnessResources['skills']> = [];\n const promptTemplates: NonNullable<AgentHarnessResources['promptTemplates']> = [];\n const context: string[] = [];\n for (const resource of resources) {\n if (resource.kind === 'skill') {\n const skill = headlessHarnessSkill(resource);\n skills.push(skill);\n // Advertised only with a path the agent can open. Without one the prompt would\n // point at a po-headless:// URI no tool resolves, so such a skill stays\n // explicitly invocable and silent, exactly as it was before.\n // One entry per name: two domains can each carry the same shared skill.\n if (resource.path !== undefined && !advertised.some((entry) => entry.name === skill.name)) advertised.push(skill);\n } else if (resource.kind === 'prompt') {\n promptTemplates.push({ name: resource.name, content: resource.text });\n } else {\n // Deliberately unwrapped. A generic \"this is data, not instructions\" fence here\n // would also wrap po/profile-config, which carries the operator's persona\n // and *is* authoritative instruction, and demoting it would be worse than the\n // anonymity it fixes. A resource whose body is untrusted owns its own boundary,\n // the way po-goal fences a user objective in escaped <goal_objective>.\n context.push(resource.text);\n }\n }\n return { harness: { skills, promptTemplates }, context, advertised };\n}\n\nfunction toolAdapter(\n tool: HeadlessTool,\n executionContext: () => PoHeadlessExecutionContext,\n reportedErrors: Set<string>,\n): AgentHarnessTool<object | undefined> {\n return {\n name: tool.name,\n label: tool.label ?? tool.name,\n description: tool.description,\n parameters: tool.parameters,\n ...(tool.promptSnippet === undefined ? {} : { promptSnippet: tool.promptSnippet }),\n ...(tool.promptGuidelines === undefined ? {} : { promptGuidelines: tool.promptGuidelines }),\n ...(tool.executionMode === undefined\n ? {}\n : {\n executionMode: tool.executionMode === 'parallel' ? 'parallel' : 'sequential',\n }),\n async execute(toolCallId, parameters, onUpdate, _toolContext, _invocation, context) {\n const result = await tool.execute(\n toolCallId,\n parameters,\n context.abortSignal,\n (partial) => onUpdate({ content: partial.content, details: partial.details }),\n executionContext(),\n );\n if (result.isError === true) reportedErrors.add(toolCallId);\n return { content: result.content, details: result.details };\n },\n };\n}\n\nfunction eventHook(event: string): PoHeadlessEventName | undefined {\n const hooks: Record<string, PoHeadlessEventName> = {\n run_start: 'agent_start',\n run_resume: 'agent_start',\n run_end: 'agent_settled',\n turn_start: 'turn_start',\n turn_end: 'turn_end',\n message_start: 'message_start',\n message_update: 'message_update',\n message_end: 'message_end',\n tool_execution_start: 'tool_execution_start',\n tool_execution_update: 'tool_execution_update',\n tool_execution_end: 'tool_execution_end',\n compaction_end: 'session_compact',\n navigation_start: 'session_tree',\n navigation_end: 'session_tree',\n };\n return hooks[event];\n}\n\nfunction emitTo(listeners: Set<(frame: SessionFrame) => void>, frame: SessionFrame): void {\n // Observers added by a listener begin with the next frame.\n const snapshot = [...listeners];\n for (const listener of snapshot) {\n try {\n listener(frame);\n } catch {\n // Compatibility listeners are observers.\n }\n }\n}\n\n/** The prompt a host has to show, and how complete it is. */\ninterface HeadlessSystemPrompt {\n readonly text: string;\n readonly stage: ContextPromptStage;\n}\n\nfunction createHeadlessCompositionPublisher(\n runtime: Pick<DirectHarnessRuntime, 'sessionId' | 'appendCustomEntry'>,\n host: HeadlessHost,\n environment: Readonly<Record<string, string | undefined>>,\n groups: (\n selection: PoHeadlessSelection,\n ) => import('../../../services/contextProjection').ContextProjectionInput['groups'],\n readSystemPrompt: () => HeadlessSystemPrompt | undefined,\n alive: () => boolean,\n): (selection?: PoHeadlessSelection) => Promise<void> {\n let countTokens: ((text: string) => number) | undefined;\n let contextRevision = 0;\n let publishedContext: string | undefined;\n // Publishes overlap: a selection settling and a turn building its prompt can\n // both ask at once, and each awaits the journal before recording what it\n // published. Run them one after another so the second sees the first's\n // revision rather than spending one of its own on the same composition.\n let tail: Promise<void> = Promise.resolve();\n\n const publish = async (selection: PoHeadlessSelection): Promise<void> => {\n if (!alive()) return;\n countTokens ??= (await import('gpt-tokenizer')).countTokens;\n if (!alive()) return;\n const inventory = host.getContextInventory(selection, countTokens);\n const prompt = readSystemPrompt();\n const promptCost = prompt === undefined ? undefined : { tokens: countTokens(prompt.text), stage: prompt.stage };\n const context = projectContext({\n revision: contextRevision + 1,\n majorMode: selection.majorMode,\n ...(selection.profile === undefined ? {} : { profile: selection.profile }),\n groups: groups(selection),\n domains: selection.domains,\n sources: inventory.sources,\n skills: inventory.skills,\n attribution: inventory.attribution,\n countTokens,\n ...(promptCost === undefined ? {} : { systemPrompt: promptCost }),\n });\n // The prompt joins the key by its text, not just its figure: a reworded\n // prompt of the same length is a different answer to the reader's question.\n const contextKey = JSON.stringify({\n ...context,\n revision: 0,\n promptText: prompt?.text,\n });\n if (contextKey === publishedContext) return;\n const revision = contextRevision + 1;\n const details = buildContextDetail({\n sources: inventory.sources,\n skills: inventory.skills,\n countTokens,\n ...(prompt === undefined || promptCost === undefined\n ? {}\n : {\n systemPrompt: {\n text: prompt.text,\n tokens: promptCost.tokens,\n stage: prompt.stage,\n },\n }),\n });\n await runtime.appendCustomEntry(PO_CONTEXT_ENTRY_TYPE, {\n ...context,\n revision,\n });\n // A journal append may settle after disposal has removed this session's detail.\n if (!alive()) return;\n writeContextDetail(runtime.sessionId, revision, details, environment, { ...context, revision });\n contextRevision = revision;\n publishedContext = contextKey;\n };\n\n return (selection = host.context.selection): Promise<void> => {\n // A failed publish must not strand every publish that follows it.\n tail = tail.then(\n () => publish(selection),\n () => publish(selection),\n );\n return tail;\n };\n}\n\n/**\n * The project instructions an MCP client may read: repository-relative, never the global AGENTS.md,\n * and never a file whose canonical path leaves the repository. Resolved once, like the files\n * themselves; an unresolvable root or agent directory is kept and reported on read.\n */\nasync function repositoryInstructions(\n platform: PoPlatform,\n repoRoot: string,\n agentDir: string,\n files: HeadlessModelDependencies['projectContextFiles'],\n): Promise<readonly { path: string; content: string }[] | Error> {\n const env = platform.env(repoRoot);\n const canonical = async (target: string): Promise<string> => {\n const result = await env.canonicalPath(target, BACKGROUND_CONTEXT);\n if (!result.ok) throw result.error;\n return result.value;\n };\n try {\n const root = await canonical(repoRoot);\n const globalInstruction = path.join(await canonical(agentDir), 'AGENTS.md');\n const out: { path: string; content: string }[] = [];\n for (const { path: filePath, content } of files) {\n const relative = path.relative(repoRoot, filePath);\n if (relative === '' || relative.startsWith('..') || path.isAbsolute(relative)) continue;\n const canonicalPath = await canonical(filePath).catch(() => undefined); // Unresolvable: not offered.\n if (canonicalPath === undefined || canonicalPath === globalInstruction) continue;\n const canonicalRelative = path.relative(root, canonicalPath);\n if (canonicalRelative === '' || canonicalRelative.startsWith('..') || path.isAbsolute(canonicalRelative))\n continue;\n out.push({ path: relative.replaceAll(path.sep, '/'), content });\n }\n return out;\n } catch (error) {\n return error instanceof Error ? error : new Error(String(error));\n } finally {\n await env.cleanup(BACKGROUND_CONTEXT);\n }\n}\n\n/** Create the gated, same-process host used by direct-headless startup tests. */\n/**\n * Composes one server session's host.\n *\n * Its Pi extensions run in the server's process, so the session's admitted environment is\n * registered under its id for them to read instead of `process.env`, and released with it.\n */\nexport async function createHeadlessSessionHost(options: HeadlessSessionHostOptions): Promise<HeadlessSessionHost> {\n let releaseEnvironment: (() => void) | undefined;\n try {\n options = { ...options, environment: await prepareSessionEnvironment(options) };\n releaseEnvironment = registerPoSessionEnvironment(options.sessionId, options.environment);\n return await composeHeadlessSessionHost(options, releaseEnvironment);\n } catch (error) {\n removeContextDetail(options.sessionId, options.environment);\n releaseEnvironment?.();\n throw error;\n }\n}\n\nasync function composeHeadlessSessionHost(\n options: HeadlessSessionHostOptions,\n releaseEnvironment: () => void,\n): Promise<HeadlessSessionHost> {\n const parsed = validateDirectHeadlessArgs(options.agentArgs);\n const models = await (options.modelDependencies ?? createNodeModelDependencies)(options);\n const { agentDir, modelRuntime, projectContextFiles } = models;\n const { platform } = options;\n const instructions = await repositoryInstructions(platform, options.repoRoot, agentDir, projectContextFiles);\n for (const override of options.providerOverrides?.() ?? []) {\n if (!override.name.trim() || override.name !== override.name.trim())\n throw new Error('Invalid native provider identity.');\n const url = new URL(override.baseUrl);\n if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password)\n throw new Error('Invalid native provider base URL.');\n // Preserve external-native-wins precedence from Pi's legacy-then-native preload.\n // Legacy registration deletes a same-name native provider. Arbitrary native auth/stream\n // implementations cannot safely be broker-routed by a baseUrl-only override.\n if (modelRuntime.getRegisteredNativeProvider(override.name)) continue;\n modelRuntime.registerProvider(override.name, { baseUrl: override.baseUrl });\n }\n const resolved = await models.resolveModel(parsed);\n if (parsed.apiKey !== undefined) await modelRuntime.setRuntimeApiKey(resolved.model.provider, parsed.apiKey);\n\n const reportedToolErrors = new Set<string>();\n let promptPreparationFailed = false;\n let promptPreparationError: unknown;\n let headlessReady = false;\n // Guidance for the tools currently applied, refreshed by applyTools so a mode\n // switch adds and removes its tools' prompt text with the tools themselves.\n let toolGuidance: readonly ToolPromptEntry[] = [];\n const initialSystemPrompt = [parsed.systemPrompt, ...(parsed.appendSystemPrompt ?? [])].filter(Boolean).join('\\n\\n');\n /**\n * AGENTS.md and friends, in Pi's own framing.\n *\n * The server had none of this: its prompt began at the --system-prompt flag, so a\n * repository's own instructions reached a terminal session and never a cockpit one.\n * Mirrors @earendil-works/pi-coding-agent@0.86.0 dist/core/system-prompt.js:21-27\n * (the customPrompt branch, which is the shape this host matches). `buildSystemPrompt`\n * is not exported and the package exports map has no wildcard, so the four literals\n * below are copied; re-diff them against that file on upgrade.\n *\n * Not trust-gated, deliberately: TRUST_REQUIRING_PROJECT_CONFIG_RESOURCES in Pi's\n * trust-manager covers settings.json, extensions, skills, prompts, themes, SYSTEM.md\n * and APPEND_SYSTEM.md, all of which execute or replace instructions. AGENTS.md is\n * advisory prose and Pi appends it unconditionally; gating it here would be a\n * divergence from Pi rather than parity with it.\n *\n * Resolved once: cwd is fixed for the host's lifetime, and composeSystemPrompt runs\n * on every generation.\n */\n const projectContextBlock = (() => {\n if (projectContextFiles.length === 0) return '';\n const instructions = projectContextFiles\n .map(\n ({ path: filePath, content }) =>\n `<project_instructions path=\"${filePath}\">\\n${content}\\n</project_instructions>\\n`,\n )\n .join('\\n');\n return `<project_context>\\n\\nProject-specific instructions and guidelines:\\n\\n${instructions}\\n</project_context>`;\n })();\n const workingDirectoryLine = `Current working directory: ${options.cwd.replace(/\\\\/g, '/')}`;\n /**\n * Everything the prompt is made of before a package has had a say.\n *\n * Shared with the runtime callback below rather than copied. Assembling it is\n * pure; the hook pass that follows it there is not, which is why the context\n * panel is shown this rather than a prompt built for the panel's sake.\n */\n const composeSystemPrompt = (resources: readonly ResolvedHeadlessResource[]): string => {\n const mapped = mapResources(resources);\n // formatSkillsForSystemPrompt is the same renderer headlessHost already uses to\n // bill these skills to the context panel. Until now nothing emitted it, so the\n // panel charged for an <available_skills> block the model never received. It\n // returns '' for an empty list and leads with a blank line of its own.\n // With the load tool, its description carries the skill list; without it, the prompt lists\n // the skills the agent can open with read.\n const skills = toolGuidance.some((entry) => entry.name === PO_LOAD_SKILL_TOOL)\n ? ''\n : formatSkillsForSystemPrompt(mapped.advertised).trim();\n // Pi's order for the same sections: operator prompt, project context, tools,\n // skills, package context, then the working directory last.\n return [\n initialSystemPrompt,\n projectContextBlock,\n formatToolPrompt(toolGuidance),\n skills,\n ...mapped.context,\n workingDirectoryLine,\n options.environment[PO_SESSION_TEMP_DIR]\n ? `Session temporary folder: ${options.environment[PO_SESSION_TEMP_DIR]}\\nUse this folder for generated scratch files outside the workspace. Keep workspace edits in place and save important deliverables in session artifacts. Temporary files may be removed by the operating system.`\n : '',\n ]\n .filter(Boolean)\n .join('\\n\\n');\n };\n /** The last prompt a turn actually built, once one has. */\n let builtSystemPrompt: string | undefined;\n /**\n * What the context panel is shown: the prompt a turn sent, or the hook-free\n * base until one has.\n *\n * The base is composed from the applied snapshot rather than a fresh read, so\n * it answers at exactly the moments the tool inventory beside it answers.\n * Re-reading refuses while a selection is mid-apply, and the panel would then\n * spend a published revision saying there is no prompt before the next one\n * said there is.\n */\n const readSystemPrompt = (): HeadlessSystemPrompt | undefined => {\n if (!headlessHost) return undefined;\n if (builtSystemPrompt !== undefined) return { text: builtSystemPrompt, stage: 'effective' };\n return {\n text: composeSystemPrompt(headlessHost.appliedResources),\n stage: 'base',\n };\n };\n const beforeTool: NonNullable<DirectHarnessRuntimeOptions['beforeTool']> = async (event, context) => {\n if (!headlessReady || !headlessHost) throw new Error('Headless capabilities are not installed.');\n const patches = await headlessHost.dispatchHook('tool_call', event, context.abortSignal);\n let args = event.args;\n let block: NonNullable<HookMap['before_tool']['result']>['block'];\n for (const patch of patches) {\n if (!isRecord(patch)) continue;\n if (patch.args !== undefined) {\n if (!isJsonObject(patch.args)) throw new Error('Invalid headless tool arguments');\n args = patch.args as typeof args;\n }\n if (patch.block === undefined) continue;\n if (\n !isRecord(patch.block) ||\n typeof patch.block.reason !== 'string' ||\n (patch.block.terminate !== undefined && typeof patch.block.terminate !== 'boolean')\n ) {\n throw new Error('Invalid headless tool denial');\n }\n block = {\n reason: patch.block.reason,\n ...(typeof patch.block.terminate === 'boolean' ? { terminate: patch.block.terminate } : {}),\n };\n break;\n }\n return {\n ...(args === event.args ? {} : { args }),\n ...(block === undefined ? {} : { block }),\n };\n };\n const afterTool: NonNullable<DirectHarnessRuntimeOptions['afterTool']> = async (event, context) => {\n if (!headlessReady || !headlessHost) throw new Error('Headless capabilities are not installed.');\n const reportedError = reportedToolErrors.delete(event.toolCallId);\n const original = reportedError ? { ...event, isError: true } : event;\n const patches = await headlessHost.dispatchHook('tool_result', original, context.abortSignal);\n let content = original.content;\n let details = original.details;\n let isError = original.isError;\n let usage = original.usage;\n let terminate: boolean | undefined;\n let resultRewritten = false;\n for (const patch of patches) {\n if (!isRecord(patch)) continue;\n if (isToolContent(patch.content)) {\n content = patch.content;\n resultRewritten = true;\n }\n if ('details' in patch && isJsonValue(patch.details)) {\n details = patch.details;\n resultRewritten = true;\n }\n if (typeof patch.isError === 'boolean') {\n isError = patch.isError;\n resultRewritten = true;\n }\n if (isUsage(patch.usage)) usage = patch.usage;\n if (typeof patch.terminate === 'boolean') terminate = patch.terminate;\n }\n // Component snapshots contain the unguarded private result. A result hook cannot\n // redact model output while retaining the original payload in the renderer.\n if (resultRewritten && isRecord(details) && 'app' in details) {\n const { app: _app, ...redactedDetails } = details;\n details = redactedDetails;\n }\n return {\n ...(content === event.content ? {} : { content }),\n ...(details === event.details ? {} : { details }),\n ...(isError === event.isError ? {} : { isError }),\n ...(usage === event.usage ? {} : { usage }),\n ...(terminate === undefined ? {} : { terminate }),\n };\n };\n const selectionCommand = new AsyncLocalStorage<boolean>();\n const runtime = await createDirectHarnessRuntime({\n cwd: options.cwd,\n sessionId: options.sessionId,\n ...(options.initialFastMode === undefined ? {} : { initialFastMode: options.initialFastMode }),\n ...(options.initialAgentLocked === undefined ? {} : { initialAgentLocked: options.initialAgentLocked }),\n ...(options.parentSessionId === undefined ? {} : { parentSessionId: options.parentSessionId }),\n ...(options.resume ? { resume: true } : {}),\n platform,\n sessionName: parsed.name ?? options.sessionName,\n models: modelRuntime,\n model: resolved.model,\n ...(resolved.thinkingLevel === undefined ? {} : { thinkingLevel: resolved.thinkingLevel }),\n beforeModelRequest: async ({ phase }) => {\n if (!headlessReady || !headlessHost) throw new Error('Headless capabilities are not installed.');\n // Standalone hosts have no inherited axes to refresh on each turn.\n if (phase === 'turn' && options.inheritedSelection) {\n await headlessHost.inheritSelection(await options.inheritedSelection());\n }\n await headlessHost.settled();\n },\n transformContext: async (event) => {\n if (!headlessReady || !headlessHost) throw new Error('Headless capabilities are not installed.');\n const patches = await headlessHost.dispatchHook('context', event);\n let messages = event.messages;\n let systemPrompt = event.systemPrompt;\n for (const patch of patches) {\n if (!isRecord(patch)) continue;\n if (patch.messages !== undefined) {\n if (!Array.isArray(patch.messages)) throw new Error('Invalid headless context messages');\n messages = patch.messages as typeof messages;\n }\n if (patch.systemPrompt !== undefined) {\n if (typeof patch.systemPrompt !== 'string') throw new Error('Invalid headless context system prompt');\n systemPrompt = patch.systemPrompt;\n }\n }\n // Pi extensions transform last, the same precedence the tool surface gives packages:\n // a package name wins over a Pi name, so a Pi contribution is the outer layer.\n return {\n messages: await (piHost?.transformContext(messages) ?? messages),\n systemPrompt,\n };\n },\n beforeTool,\n afterTool,\n beforePayload: async (event) => {\n if (!headlessReady || !headlessHost) throw new Error('Headless capabilities are not installed.');\n const patches = await headlessHost.dispatchHook('before_provider_request', event);\n let payload = event.payload;\n for (const patch of patches) {\n if (patch === undefined || patch === null) continue;\n if (!isRecord(patch) || !('payload' in patch)) throw new Error('Invalid headless provider payload patch');\n payload = patch.payload;\n }\n return { payload };\n },\n beforeCompaction: async (event) => {\n if (!headlessReady || !headlessHost) throw new Error('Headless capabilities are not installed.');\n const patches = await headlessHost.dispatchHook('session_before_compact', {\n reason: event.reason,\n preparation: event.preparation,\n ...(event.customInstructions === undefined\n ? {}\n : {\n instructions: event.customInstructions,\n customInstructions: event.customInstructions,\n }),\n });\n try {\n for (const patch of patches) {\n if (patch === undefined || patch === null) continue;\n if (!isRecord(patch)) throw new Error('Invalid headless compaction patch');\n if (patch.cancel !== undefined && typeof patch.cancel !== 'boolean')\n throw new Error('Invalid headless compaction cancellation');\n if (patch.decline !== undefined && typeof patch.decline !== 'boolean')\n throw new Error('Invalid headless compaction decline');\n const decline = patch.cancel === true || patch.decline === true;\n if (decline && patch.compaction !== undefined) throw new Error('Conflicting headless compaction patch');\n if (decline) return { decline: true };\n if (patch.compaction !== undefined) {\n if (!isCompactResult(patch.compaction)) throw new Error('Invalid headless compaction result');\n return { compaction: patch.compaction };\n }\n }\n } catch (error) {\n options.onNotice?.(\n `Headless compaction hook rejected: ${error instanceof Error ? error.message : String(error)}`,\n );\n return { decline: true };\n }\n return piHost?.beforeCompaction(event);\n },\n systemPrompt: async () => {\n let stage = 'resources';\n try {\n if (!headlessHost) throw new Error('Headless capabilities are not installed.');\n // ponytail: changes during resource reads still fail closed. Add a typed retry only if reproduced.\n await headlessHost.settled();\n let prompt = composeSystemPrompt(await headlessHost.readResources());\n stage = 'before_agent_start hooks';\n const patches = await headlessHost.dispatchHook('before_agent_start', {\n systemPrompt: prompt,\n });\n for (const patch of patches) {\n if (patch && typeof patch === 'object' && 'systemPrompt' in patch && typeof patch.systemPrompt === 'string') {\n prompt = patch.systemPrompt;\n }\n }\n promptPreparationFailed = false;\n promptPreparationError = undefined;\n // The panel follows what was sent, so a prompt that changed mid-session\n // republishes rather than waiting for the next selection change. Awaited\n // here, on the same stage that already journals a selection inherited\n // for this turn, so the published composition and the prompt the model\n // receives cannot disagree. Its own guard: a journal that will not take\n // the entry is a panel that lags, never a turn that is refused.\n if (prompt !== builtSystemPrompt) {\n builtSystemPrompt = prompt;\n try {\n await publishComposition();\n } catch {\n // Reported by the next publish, which starts from the same state.\n }\n }\n return prompt;\n } catch (error) {\n // A throwing system-prompt callback faults the upstream harness. Deny at model admission instead.\n promptPreparationFailed = true;\n promptPreparationError = error;\n // Diagnostic delivery must not delay or reject prompt preparation.\n observe(\n Promise.resolve().then(() =>\n options.telemetry?.recordError(\n PROMPT_PREPARATION_FAILED_EVENT,\n error,\n { session_id: options.sessionId, stage },\n { includeException: true },\n ),\n ),\n );\n return '';\n }\n },\n listCommands: () => {\n if (!headlessReady || !headlessHost) throw new Error('Headless capabilities are not installed.');\n return headlessHost.listCommands();\n },\n dispatchCommand: async (text) => {\n if (!headlessReady || !headlessHost) throw new Error('Headless capabilities are not installed.');\n const match = /^\\/(\\S+)(?:\\s+([\\s\\S]*))?$/.exec(text);\n if (!match) {\n await headlessHost.settled();\n headlessHost.assertActive();\n return false;\n }\n const name = match[1]!;\n const args = match[2] ?? '';\n if (!headlessHost.listCommands().some((entry) => entry.name === name)) {\n headlessHost.assertActive();\n return false;\n }\n await selectionCommand.run(['mode', 'domains', 'profile', 'minor'].includes(name), () =>\n headlessHost!.dispatchCommand(name, args),\n );\n return true;\n },\n guardModelRequest: () => {\n if (promptPreparationFailed)\n throw new Error(\n `Headless capability preparation is not ready: ${harnessErrorMessage(promptPreparationError)}`,\n { cause: promptPreparationError },\n );\n if (!headlessReady || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready.');\n },\n });\n // The runtime already holds the history lease. A storage failure while opening must\n // release it, or every retry of this session id fails on the stale lease.\n const opened = await (async () => {\n await runtime.session.commit(async (tx) => {\n const metadata = await tx.doc(SessionMetadataDoc);\n metadata.workspaceRoot = options.repoRoot;\n metadata.execution = JSON.stringify({\n cwd: options.cwd,\n repoRoot: options.repoRoot,\n workspaceId: options.workspaceId,\n groupingRoot: options.groupingRoot ?? options.repoRoot,\n parentSessionId: options.parentSessionId,\n sessionProvenance: options.sessionProvenance,\n files: {\n agentDirectory: path.resolve(piAgentDirectory(options.environment, options.platform.homeDirectory)),\n ...(options.environment[PO_SESSION_TEMP_DIR] === undefined\n ? {}\n : { temporaryDirectory: options.environment[PO_SESSION_TEMP_DIR] }),\n },\n });\n }, BACKGROUND_CONTEXT);\n const agent = await runtime.lane.agent(BACKGROUND_CONTEXT);\n const model = agent.model ? modelRuntime.getModel(agent.model.provider, agent.model.modelId) : undefined;\n const entries = (await runtime.readEntries()).entries\n .filter((entry) => entry.type === 'custom' && entry.customType === PO_CONTEXT_ENTRY_TYPE)\n .slice(-1) as unknown as AnyRecord[];\n return { model, entries };\n })().catch(async (error: unknown) => {\n await runtime\n .dispose()\n .catch((disposeError: unknown) => options.onNotice?.(`Session runtime failed to close: ${String(disposeError)}`));\n throw error;\n });\n let currentModel = opened.model;\n // Last journaled po-agent-model projection; a model_select naming the same model is noise.\n let publishedAgentModel: string | undefined;\n // One frozen baseline, shared by every surface this session exposes.\n const sessionContext: PoSessionContext | undefined =\n options.workspaceId === undefined\n ? undefined\n : Object.freeze({\n sessionId: runtime.sessionId,\n workspaceId: options.workspaceId,\n workspaceRoot: options.groupingRoot ?? options.repoRoot,\n checkoutRoot: options.repoRoot,\n cwd: options.cwd,\n ...(options.parentSessionId === undefined ? {} : { parentSessionId: options.parentSessionId }),\n ...(options.sessionProvenance === undefined ? {} : { provenance: options.sessionProvenance }),\n });\n const entries = opened.entries;\n const listeners = new Set<(frame: SessionFrame) => void>();\n const selectionListeners = new Set<(selection: PoHeadlessSelection) => void>();\n const backgroundWorkListeners = new Set<(active: boolean | null) => void>();\n let backgroundWorkActive: boolean | null = null;\n let backgroundWorkBinding: ReturnType<CordisContext['inject']> | undefined;\n let latestSelection: PoHeadlessSelection = options.selection;\n const initialSelection = restoreHeadlessSelection(entries, options.selection);\n let headlessHost: HeadlessHost | undefined;\n let mcpServiceRoot: CordisContext | undefined;\n let mcpLifecycle = new AbortController();\n const chatgptLifecycle = new AbortController();\n let piHost: PiExtensionHost | undefined;\n let client: ReturnType<typeof createHeadlessClient> | undefined;\n let disposed = false;\n let disposePromise: Promise<void> | undefined;\n let publishComposition: (selection?: PoHeadlessSelection) => Promise<void> = async () => {\n throw new Error('Direct headless composition publisher is not installed.');\n };\n const readMcpContext = (signal: AbortSignal): PoMcpContextSnapshot => {\n signal.throwIfAborted();\n const host = headlessHost;\n if (!host || disposed) throw new Error('Session context is unavailable.');\n const status = host.status;\n if (!status.ready || status.requestedRevision !== status.appliedRevision)\n throw new Error('Session context is unavailable.');\n if (instructions instanceof Error) throw instructions;\n const selection = host.context.selection;\n const persona = host.appliedResources.find(\n ({ name, kind }) => name === 'po/profile-config' && kind === 'context',\n )?.text;\n signal.throwIfAborted();\n const current = host.status;\n if (\n !current.ready ||\n current.appliedRevision !== status.appliedRevision ||\n current.requestedRevision !== current.appliedRevision\n )\n throw new Error('Session context changed. Call load_context again.');\n return {\n session: { id: runtime.sessionId, revision: status.appliedRevision },\n repository: { root: options.repoRoot, cwd: options.cwd },\n selection: {\n profile: selection.profile ?? null,\n domains: [...selection.domains],\n majorMode: selection.majorMode,\n activeLayers: [...selection.activeLayers],\n minorModes: [...(selection.state?.['minor-mode'] ?? [])],\n },\n instructions,\n persona: persona ?? null,\n };\n };\n\n const childHookRegistry = createPoChildSessionHookRegistry();\n const childSessionProvider = createHeadlessChildSessionServiceProvider({\n runtime,\n cwd: options.cwd,\n subscribeMcpTool: (listener) => {\n const root = mcpServiceRoot;\n return (\n root?.on('internal/service', (name) => {\n if (name === PO_CHILD_SESSION_MCP_TOOL_SERVICE) listener();\n }) ?? (() => undefined)\n );\n },\n hooks: () => {\n if (disposed || !headlessReady || !headlessHost?.status.ready)\n throw new Error('Headless capabilities are not installed.');\n return composeChildSessionHooks(\n [\n mcpServiceRoot?.get(PO_CHILD_SESSION_HOOKS_SERVICE) as PoChildSessionHooks | undefined,\n ...childHookRegistry.list(),\n ],\n options.onNotice,\n );\n },\n mcpTool: () => {\n if (disposed || !headlessReady || !headlessHost?.status.ready) return undefined;\n return mcpServiceRoot?.get(PO_CHILD_SESSION_MCP_TOOL_SERVICE) as PoChildSessionMcpTool | undefined;\n },\n });\n\n const completeAuxiliaryModel = async (\n reference: string,\n request: Omit<PoHeadlessToolCompletionRequest, 'tools'> & {\n tools?: PoHeadlessToolCompletionRequest['tools'];\n },\n ) => {\n if (disposed || !headlessReady || promptPreparationFailed || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready.');\n request.signal?.throwIfAborted();\n const separator = reference.indexOf('/');\n const model =\n separator > 0 ? modelRuntime.getModel(reference.slice(0, separator), reference.slice(separator + 1)) : undefined;\n if (!model || !modelRuntime.hasConfiguredAuth(model.provider))\n throw new Error(`Model is not configured: ${reference}`);\n if (!runtime.completeModel) throw new Error('The runtime does not support auxiliary model requests.');\n const response = await runtime.completeModel(\n model,\n {\n systemPrompt: request.systemPrompt,\n messages: [{ role: 'user', content: request.input, timestamp: Date.now() }],\n ...(request.tools ? { tools: [...request.tools] } : {}),\n },\n {\n signal: request.signal,\n maxTokens: request.maxTokens,\n cacheRetention: request.cacheRetention,\n reasoningEffort: 'none',\n maxRetries: 0,\n },\n );\n request.signal?.throwIfAborted();\n if (response.stopReason === 'error' || response.stopReason === 'aborted')\n throw new Error(response.errorMessage ?? `Model stopped: ${response.stopReason}`);\n return response;\n };\n\n const informationalMessage = (message: {\n type: string;\n text: string;\n display?: boolean;\n details?: unknown;\n }): AgentMessage => {\n if (!message || typeof message.type !== 'string' || !message.type.trim() || typeof message.text !== 'string')\n throw new TypeError('Informational messages require a non-empty type and string text.');\n if (message.display !== undefined && typeof message.display !== 'boolean')\n throw new TypeError('Informational message display must be a boolean.');\n const details = message.details === undefined ? undefined : boundedJsonCopy(message.details);\n return {\n role: 'custom',\n customType: message.type,\n content: message.text,\n display: message.display ?? true,\n ...(details === undefined ? {} : { details }),\n timestamp: Date.now(),\n };\n };\n const executionContext = (selection: PoHeadlessSelection): PoHeadlessExecutionContext => ({\n cwd: options.cwd,\n repoRoot: options.repoRoot,\n sessionId: runtime.sessionId,\n ...(sessionContext === undefined ? {} : { sessionContext }),\n environment: options.environment,\n client: client!.client,\n model: currentModel === undefined ? undefined : modelMetadata(currentModel),\n getModel(provider, id) {\n const model = modelRuntime.getModel(provider, id);\n return model ? modelMetadata(model) : undefined;\n },\n async getAvailableModels() {\n if (disposed) throw new Error('The session is closed.');\n // The runtime is created without refreshing, so its snapshot can miss signed-in providers.\n // getAvailable() refreshes first, as the model picker does; a stale list made spawns fall back.\n return (await modelRuntime.getAvailable())\n .filter((model) => modelRuntime.hasConfiguredAuth(model.provider))\n .map(({ provider, id }) => ({ provider, id }));\n },\n selection,\n imageGeneration: {\n available: () => !disposed && modelRuntime.isUsingSubscription(CHATGPT_AUTH_PROVIDER_ID),\n async generate(request) {\n if (disposed || !headlessReady || promptPreparationFailed || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready.');\n return createChatgptImageClient({\n available: () => modelRuntime.isUsingSubscription(CHATGPT_AUTH_PROVIDER_ID),\n getAuth: (signal) => modelRuntime.getAuth(CHATGPT_AUTH_PROVIDER_ID, { signal }),\n }).generate({\n ...request,\n signal: request.signal ? AbortSignal.any([request.signal, chatgptLifecycle.signal]) : chatgptLifecycle.signal,\n });\n },\n },\n webSearch: {\n available: () => !disposed && modelRuntime.isUsingSubscription(CHATGPT_AUTH_PROVIDER_ID),\n async search(request) {\n if (disposed || !headlessReady || promptPreparationFailed || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready.');\n return createChatgptWebSearchClient({\n available: () => modelRuntime.isUsingSubscription(CHATGPT_AUTH_PROVIDER_ID),\n getAuth: (signal) => modelRuntime.getAuth(CHATGPT_AUTH_PROVIDER_ID, { signal }),\n }).search({\n ...request,\n sessionId: runtime.sessionId,\n ...(currentModel?.provider === 'openai-codex' ? { model: currentModel.id } : {}),\n signal: request.signal ? AbortSignal.any([request.signal, chatgptLifecycle.signal]) : chatgptLifecycle.signal,\n });\n },\n },\n textCompletion: {\n available(reference) {\n const separator = reference.indexOf('/');\n return (\n separator > 0 &&\n !!modelRuntime.getModel(reference.slice(0, separator), reference.slice(separator + 1)) &&\n modelRuntime.hasConfiguredAuth(reference.slice(0, separator))\n );\n },\n async summarize(reference, request) {\n if (disposed || !headlessReady || promptPreparationFailed || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready.');\n request.signal?.throwIfAborted();\n const separator = reference.indexOf('/');\n const model =\n separator > 0\n ? modelRuntime.getModel(reference.slice(0, separator), reference.slice(separator + 1))\n : undefined;\n if (!model || !modelRuntime.hasConfiguredAuth(model.provider))\n throw new Error(`Model is not configured: ${reference}`);\n if (!runtime.completeModel) throw new Error('The runtime does not support auxiliary model requests.');\n const messages = boundedJsonCopy(request.messages);\n if (!Array.isArray(messages) || !messages.every(isSummaryMessage))\n throw new TypeError('Summary requests require supported native messages.');\n if (\n typeof request.instructions !== 'string' ||\n (request.previousSummary !== undefined && typeof request.previousSummary !== 'string')\n )\n throw new TypeError('Summary instructions and previous summary must be strings.');\n if (\n request.thinkingLevel !== undefined &&\n !['off', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max'].includes(request.thinkingLevel)\n )\n throw new TypeError('Unsupported summary thinking level.');\n let summaryFailure: Error | undefined;\n let overflowed = false;\n const attempt = (target: Model<Api>) =>\n summarize(\n messages,\n target,\n request.signal,\n request.instructions,\n request.previousSummary,\n request.thinkingLevel,\n (_model, context, options) => {\n const stream = createAssistantMessageEventStream();\n // Pi caps summaries at 80% of its compaction reserve. Give them what the model can write\n // in the room the prompt leaves.\n const maxTokens =\n target.maxTokens > 0 ? clampMaxTokensToContext(target, context, target.maxTokens) : options?.maxTokens;\n void runtime.completeModel!(target, context, {\n signal: options?.signal,\n maxTokens,\n cacheRetention: 'none',\n reasoningEffort: !target.reasoning || request.thinkingLevel === 'off' ? 'none' : request.thinkingLevel,\n maxRetries: 0,\n }).then(\n (response) => {\n if (response.stopReason === 'aborted')\n summaryFailure = new Error(response.errorMessage ?? 'Summary was aborted.');\n // A summary cut short because the prompt filled the window is an overflow too.\n overflowed =\n isContextOverflow(response, target.contextWindow) ||\n (response.stopReason === 'length' && maxTokens !== undefined && maxTokens < target.maxTokens);\n stream.end(response);\n },\n (error: unknown) => {\n summaryFailure = error instanceof Error ? error : new Error(String(error));\n stream.end({\n role: 'assistant',\n api: target.api,\n provider: target.provider,\n model: target.id,\n content: [],\n stopReason: request.signal?.aborted ? 'aborted' : 'error',\n errorMessage: error instanceof Error ? error.message : String(error),\n timestamp: Date.now(),\n usage: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n totalTokens: 0,\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n total: 0,\n },\n },\n });\n },\n );\n return stream;\n },\n );\n let summary: string;\n try {\n summary = await attempt(model);\n } catch (error) {\n // A prompt past the chosen model's window retries once on the widest window that is signed in.\n const widest =\n overflowed && !request.signal?.aborted\n ? (await modelRuntime.getAvailable()).reduce(\n (best, item) => (item.contextWindow > best.contextWindow ? item : best),\n model,\n )\n : model;\n if (widest === model) throw error;\n summaryFailure = undefined;\n summary = await attempt(widest);\n }\n request.signal?.throwIfAborted();\n if (summaryFailure) throw summaryFailure;\n if (!summary.trim()) throw new Error('Summarization returned an empty checkpoint.');\n return summary;\n },\n async complete(reference, request) {\n const response = await completeAuxiliaryModel(reference, {\n ...request,\n tools: undefined,\n });\n return response.content\n .filter((part) => part.type === 'text')\n .map((part) => part.text)\n .join('')\n .trim();\n },\n },\n toolCompletion: {\n async complete(reference, request) {\n const response = await completeAuxiliaryModel(reference, request);\n if (response.stopReason === 'length') throw new Error('Auxiliary tool request exceeded its output limit.');\n return {\n toolCalls: response.content.filter((part) => part.type === 'toolCall'),\n usage: response.usage,\n };\n },\n },\n session: {\n setFastMode: (enabled) => runtime.setFastMode(enabled),\n async readModelSettings() {\n const selected = (await runtime.lane.agent(BACKGROUND_CONTEXT)).model;\n const model = selected ? modelRuntime.getModel(selected.provider, selected.modelId) : undefined;\n const thinkingLevel = (await runtime.lane.agent(BACKGROUND_CONTEXT)).thinkingLevel;\n return {\n ...(model ? { model: modelIdentity(model) } : {}),\n thinkingLevel,\n };\n },\n async setModelSettings(settings) {\n if (settings.model) await runtime.setModel(settings.model);\n if (settings.thinkingLevel !== undefined) await runtime.setThinkingLevel(settings.thinkingLevel);\n },\n async forkSource() {\n const { leafId } = await runtime.readEntries();\n return { kind: 'fork' as const, ...(leafId === null ? {} : { entryId: leafId }) };\n },\n entries: async (query) => {\n let entries = (await runtime.readEntries()).entries.filter(\n (entry) =>\n (!query?.type || entry.type === query.type) &&\n (!query?.customType || (entry.type === 'custom' && entry.customType === query.customType)),\n );\n if (query?.limit !== undefined) entries = entries.toReversed().slice(0, query.limit);\n return entries as unknown as AnyRecord[];\n },\n async appendMessage(message) {\n return runtime.appendMessage(informationalMessage(message));\n },\n async admitMessage(message, delivery = 'followUp', requestId) {\n try {\n if (disposed || !headlessReady || promptPreparationFailed || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready.');\n if (delivery !== 'steer' && delivery !== 'followUp')\n throw new TypeError('Custom message delivery must be steer or followUp.');\n if (requestId !== undefined && (typeof requestId !== 'string' || !requestId.trim()))\n throw new TypeError('Custom message requestId must be a non-empty string.');\n const submission = await runtime.submitInternalMessage(informationalMessage(message), delivery, requestId);\n void submission.settled.catch((error: unknown) =>\n client!.client.notify({\n body: error instanceof Error ? error.message : String(error),\n level: 'error',\n }),\n );\n // As with admitPrompt: a caller acknowledging delivery needs the input durable first.\n if ('admitted' in submission) await submission.admitted;\n } catch (error) {\n throw new PoHeadlessPromptAdmissionError(error);\n }\n },\n registerCheckpointBoundary(callback) {\n if (!runtime.registerCheckpointBoundary) throw new Error('Native checkpoint boundaries are unavailable.');\n const registration = runtime.registerCheckpointBoundary(async (boundary) => {\n if (disposed || !headlessReady || !headlessHost?.status.ready) return;\n await callback({\n signal: boundary.signal,\n appendMessage: (message) => boundary.appendMessage(informationalMessage(message)),\n });\n });\n return {\n appendMessage: (message) =>\n disposed || !headlessReady || !headlessHost?.status.ready\n ? Promise.resolve(undefined)\n : registration.appendMessage(informationalMessage(message)),\n dispose: () => registration.dispose(),\n };\n },\n async contextMessages() {\n const assertReadable = () => {\n if (disposed || !headlessReady || promptPreparationFailed || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready.');\n };\n assertReadable();\n const messages = boundedJsonCopy(await runtime.getContextMessages()) as AnyRecord[];\n assertReadable();\n return messages;\n },\n async contextUsage() {\n const usage = (await runtime.getSessionStats()).contextUsage;\n return usage ? { tokens: usage.tokens, contextWindow: usage.contextWindow } : undefined;\n },\n setLabel: (entryId, label) => runtime.setLabel(entryId, label),\n async appendCustomEntry(type, data) {\n await runtime.appendCustomEntry(type, data);\n },\n async prompt(text, delivery) {\n await (\n await runtime.submitPrompt(\n text,\n undefined,\n delivery === 'steer' || delivery === 'followUp' ? delivery : undefined,\n )\n ).settled;\n },\n async admitPrompt(text, delivery, origin, requestId) {\n try {\n if (origin === 'operator' && delivery === 'followUp') return await runtime.followUp(text);\n const submission =\n delivery === 'interrupt'\n ? await runtime.submitUserPrompt(text)\n : origin === 'operator'\n ? await runtime.submitPrompt(text, undefined, delivery === 'steer' ? 'steer' : undefined)\n : await runtime.submitInternalMessage(text, delivery === 'steer' ? 'steer' : 'followUp', requestId);\n void submission.settled.catch((error: unknown) =>\n client!.client.notify({\n body: error instanceof Error ? error.message : String(error),\n level: 'error',\n }),\n );\n // Delivery records the prompt admitted when this returns, so an interrupted admission must be durable first.\n if ('admitted' in submission) await submission.admitted;\n } catch (error) {\n throw new PoHeadlessPromptAdmissionError(error);\n }\n },\n abort: () => runtime.abort(),\n compact: (instructions) => runtime.compact(instructions),\n async activity() {\n const state = await runtime.readState();\n return {\n hasPendingMessages: Number(state.pendingMessageCount) > 0,\n // Settlement fences external operations but is not an active model run.\n isIdle: (!state.isStreaming || state.operationId === 'settling') && !state.isCompacting,\n };\n },\n setName: (name) => runtime.setName(name),\n },\n shutdown: () => stop(),\n });\n\n client = createHeadlessClient({\n appendCustomEntry: async (type, data) => {\n await runtime.appendCustomEntry(type, data);\n },\n emitFrame: (frame) => emitTo(listeners, frame),\n });\n\n const unsubscribePresentation = runtime.onPresentationFrame((frame) => emitTo(listeners, frame));\n let logicalRunActive = false;\n let runMessages: AgentMessage[] = [];\n let requiredServerPackages: readonly string[] = [];\n let installedServerPackages: readonly string[] = [];\n const unsubscribeEvents = runtime.onEvent(async (event, _context) => {\n if ((event.type === 'run_start' || event.type === 'run_resume') && !logicalRunActive) {\n logicalRunActive = true;\n runMessages = [];\n }\n if (event.type === 'message_end' && event.runId !== undefined) runMessages.push(event.message);\n if (event.type === 'run_end' && !event.successorActive) {\n const messages = runMessages;\n runMessages = [];\n const ended = logicalRunActive;\n logicalRunActive = false;\n if (ended && headlessHost?.status.ready) await headlessHost.dispatchHook('agent_end', { messages });\n }\n if (event.type === 'config_update' && event.property === 'model') {\n const selected = (await runtime.lane.agent(BACKGROUND_CONTEXT)).model;\n currentModel = selected ? modelRuntime.getModel(selected.provider, selected.modelId) : undefined;\n if (headlessHost !== undefined && currentModel !== undefined && headlessHost.status.ready) {\n await headlessHost.dispatchHook('model_select', {\n model: currentModel,\n });\n // Clients get no wire event for a model chosen inside the agent (plan mode's planning\n // model), so journal it on the entry_appended road the dashboard footer folds.\n const projection = { provider: currentModel.provider, id: currentModel.id };\n const serialized = JSON.stringify(projection);\n if (serialized !== publishedAgentModel) {\n publishedAgentModel = serialized;\n await runtime.appendCustomEntry(PO_AGENT_MODEL_ENTRY_TYPE, projection);\n }\n }\n }\n const hook = event.type === 'run_end' && event.successorActive ? undefined : eventHook(event.type);\n if (headlessHost !== undefined && hook !== undefined && headlessHost.status.ready)\n await headlessHost.dispatchHook(\n hook,\n event.type === 'navigation_start' ? { ...event, status: 'started' } : (event as unknown as AnyRecord),\n );\n });\n\n // The package tools from the most recent reconciliation. Kept so a Pi-side restriction change can\n // rebuild the merged surface in memory, the same way the kernel's tools sink does, instead of\n // forcing a session reload.\n let appliedPackageTools: readonly HeadlessTool[] = [];\n let appliedSessionTools = new Map<string, AppliedSessionTool>();\n let appliedSkills = new Map<string, { descriptor: SessionSkillDescriptor; content: string }>();\n let surfaceRevision = 0;\n let toolSurfaceReady = false;\n let toolReapplyQueued = false;\n let mcpSurfaceRevision = 0;\n let mcpSurfaceReady = false;\n let appliedMcpTools = new Map<string, AppliedSessionTool>();\n let appliedMcpSkills = new Map<string, { descriptor: SessionSkillDescriptor; skill: PoMcpSkill }>();\n let appliedMcpUiResources = new Map<string, { descriptor: SessionUiResourceDescriptor; resource: PoMcpUiResource }>();\n let mcpRefreshQueued = false;\n\n const scheduleMcpRefresh = (): void => {\n if (mcpRefreshQueued || disposed || !headlessReady) return;\n mcpRefreshQueued = true;\n queueMicrotask(() => {\n mcpRefreshQueued = false;\n // A selection change in flight also recomposes MCP once it is ready again.\n if (disposed || !headlessReady || !headlessHost?.status.ready) return;\n void prepareMcpSurface().catch((error: unknown) =>\n options.onNotice?.(`MCP tool refresh failed: ${error instanceof Error ? error.message : String(error)}`),\n );\n });\n };\n\n const prepareMcpSurface = async (): Promise<void> => {\n if (!headlessHost?.status.ready) throw new Error('Headless capabilities are not installed.');\n if (mcpServiceRoot === undefined) throw new Error('MCP session services are not installed.');\n mcpSurfaceReady = false;\n mcpLifecycle.abort();\n const lifecycle = new AbortController();\n mcpLifecycle = lifecycle;\n const pluginContext = {\n execution: headlessHost.context,\n services: {\n get: <T>(name: string): T | undefined =>\n (mcpServiceRoot?.get(name) as T | undefined) ?? piHost?.getService<T>(name),\n },\n selection: {\n read: () => headlessHost!.context.selection,\n change: (change: Parameters<HeadlessHost['changeSelection']>[0]) => headlessHost!.changeSelection(change),\n },\n loadContext: () => readMcpContext(lifecycle.signal),\n signal: lifecycle.signal,\n refresh: scheduleMcpRefresh,\n };\n const nextTools = new Map<string, AppliedSessionTool>();\n const nextSkills = new Map<string, { descriptor: SessionSkillDescriptor; skill: PoMcpSkill }>();\n const nextUiResources = new Map<string, { descriptor: SessionUiResourceDescriptor; resource: PoMcpUiResource }>();\n for (const loaded of options.mcpPlugins ?? []) {\n const selection = headlessHost.context.selection;\n if (\n !loaded.declaration.owners.some(\n (owner) =>\n owner.majorMode === selection.majorMode &&\n (owner.layer === 'default' || selection.activeLayers.includes(owner.layer)),\n )\n )\n continue;\n const scope =\n typeof loaded.plugin.session === 'function'\n ? await loaded.plugin.session(pluginContext)\n : loaded.plugin.session;\n lifecycle.signal.throwIfAborted();\n const resources = scope.uiResources ?? [];\n for (const resource of resources) {\n const uri = new URL(resource.uri);\n if (\n uri.protocol !== 'ui:' ||\n !uri.hostname ||\n uri.username ||\n uri.password ||\n uri.search ||\n uri.hash ||\n uri.href !== resource.uri ||\n resource.mimeType !== 'text/html;profile=mcp-app'\n )\n throw new Error(`Invalid MCP UI resource '${resource.uri}'`);\n if (nextUiResources.has(resource.uri) && nextUiResources.get(resource.uri)!.resource !== resource)\n throw new Error(`Duplicate MCP UI resource '${resource.uri}'`);\n const descriptor: SessionUiResourceDescriptor = {\n uri: resource.uri,\n name: resource.name,\n mimeType: resource.mimeType,\n ...(resource.description === undefined ? {} : { description: resource.description }),\n ...(resource._meta === undefined ? {} : { _meta: resource._meta }),\n };\n nextUiResources.set(resource.uri, { descriptor, resource });\n }\n for (const tool of scope.tools ?? []) {\n if (nextTools.has(tool.name)) throw new Error(`Duplicate MCP tool '${tool.name}'`);\n const resourceUri = tool._meta?.ui?.resourceUri;\n if (resourceUri !== undefined && !resources.some((resource) => resource.uri === resourceUri))\n throw new Error(`MCP tool '${tool.name}' references a UI resource not owned by its plugin`);\n // Tool restrictions reach the agent surface through `allowsTool`; the remote surface is\n // composed here and must honour the same withdrawals.\n if (!headlessHost!.allowsTool(tool.name)) continue;\n nextTools.set(tool.name, {\n descriptor: {\n name: tool.name,\n label: tool.label ?? tool.name,\n description: tool.description,\n parameters: tool.parameters,\n ...(tool.annotations === undefined ? {} : { annotations: tool.annotations }),\n ...(tool.outputSchema === undefined ? {} : { outputSchema: tool.outputSchema }),\n ...(tool._meta === undefined ? {} : { _meta: tool._meta }),\n },\n execute: (toolCallId, parameters, signal, onUpdate, execution) =>\n tool.execute(toolCallId, parameters, signal, onUpdate, execution ?? headlessHost!.context),\n });\n }\n for (const skill of scope.skills ?? []) {\n if ([...nextSkills.values()].some((candidate) => candidate.descriptor.name === skill.name))\n throw new Error(`Duplicate MCP skill '${skill.name}'`);\n const uri = `po://session/${encodeURIComponent(runtime.sessionId)}/mcp/skills/${encodeURIComponent(skill.name)}`;\n nextSkills.set(uri, {\n descriptor: { name: skill.name, description: skill.description, uri },\n skill,\n });\n }\n }\n appliedMcpTools = nextTools;\n appliedMcpSkills = nextSkills;\n appliedMcpUiResources = nextUiResources;\n mcpSurfaceRevision += 1;\n mcpSurfaceReady = true;\n };\n\n const applyToolSurface = async (tools: readonly HeadlessTool[]): Promise<void> => {\n toolSurfaceReady = false;\n const modelTools = tools.filter(isPoHeadlessToolModelVisible);\n const packageTools = modelTools.map((tool) =>\n toolAdapter(\n tool.name === PO_LOAD_SKILL_TOOL\n ? {\n ...tool,\n description: describeLoadSkillTool(tool.description, headlessHost?.appliedResources ?? []),\n }\n : tool,\n () => headlessHost!.context,\n reportedToolErrors,\n ),\n );\n // Package tools win a name collision, including when the collision is with a\n // name the package surface declared and then gated out. The reconciled set\n // owns the name either way, so a Pi extension tool never fills a slot a\n // mode-aware package deliberately left empty.\n const packageNames = headlessHost?.declaredToolNames ?? new Set(packageTools.map((tool) => tool.name));\n const piTools = (piHost?.tools ?? [])\n .filter((tool) => !packageNames.has(tool.name) && headlessHost?.allowsTool(tool.name) !== false)\n .map((tool): AgentHarnessTool<object | undefined> => ({\n ...tool,\n async execute(...args) {\n headlessHost!.assertActive();\n if (!toolSurfaceReady || !headlessHost!.allowsTool(tool.name))\n throw new Error(`Tool '${tool.name}' is no longer active`);\n return tool.execute(...args);\n },\n }));\n const piNames = new Set(piTools.map((tool) => tool.name));\n const nextToolGuidance = [\n ...(piHost?.toolGuidance ?? []).filter((entry) => piNames.has(entry.name)),\n ...modelTools.map((tool) => ({\n name: tool.name,\n ...(tool.promptSnippet === undefined ? {} : { promptSnippet: tool.promptSnippet }),\n ...(tool.promptGuidelines === undefined ? {} : { promptGuidelines: tool.promptGuidelines }),\n })),\n ];\n await runtime.replaceTools([...piTools, ...packageTools]);\n const next = new Map<string, AppliedSessionTool>();\n for (const tool of piTools) {\n next.set(tool.name, {\n descriptor: {\n name: tool.name,\n label: tool.label ?? tool.name,\n description: tool.description,\n parameters: tool.parameters,\n },\n execute: (toolCallId, parameters, signal, onUpdate) =>\n piHost!.executeTool(tool.name, toolCallId, parameters, signal, onUpdate),\n });\n }\n for (const tool of tools) {\n next.set(tool.name, {\n descriptor: {\n name: tool.name,\n label: tool.label ?? tool.name,\n description: tool.description,\n parameters: tool.parameters,\n ...(tool.annotations === undefined ? {} : { annotations: tool.annotations }),\n ...(tool.outputSchema === undefined ? {} : { outputSchema: tool.outputSchema }),\n ...(tool._meta === undefined ? {} : { _meta: tool._meta }),\n },\n execute: (toolCallId, parameters, signal, onUpdate) =>\n tool.execute(toolCallId, parameters, signal, onUpdate, headlessHost!.context),\n });\n }\n toolGuidance = nextToolGuidance;\n appliedSessionTools = next;\n surfaceRevision += 1;\n toolSurfaceReady = true;\n };\n\n /**\n * Rebuilds the merged tool surface after a Pi extension narrowed its own tools.\n *\n * Deferred because the tool surface arbiter calls `setActiveTools` synchronously from inside\n * `register`, and coalesced because several extensions register their restrictions in the same\n * tick. The package set is unchanged, so this never re-enters the kernel.\n */\n // Package reconciliation and Pi restriction changes both rebuild the surface. Each run reads\n // the latest package tools when it starts, so the surface converges on the last change\n // instead of whichever overlapping replaceTools happened to finish last.\n let toolLine: Promise<void> = Promise.resolve();\n const applyLatestTools = (): Promise<void> => {\n // A failed run was already reported to the caller that queued it; the line moves on.\n toolLine = toolLine.catch(() => undefined).then(() => applyToolSurface(appliedPackageTools));\n return toolLine;\n };\n\n const scheduleToolReapply = (): void => {\n if (toolReapplyQueued) return;\n toolReapplyQueued = true;\n queueMicrotask(() => {\n toolReapplyQueued = false;\n if (disposed) return;\n void applyLatestTools().catch((error: unknown) =>\n options.onNotice?.(\n `Pi extension tool refresh failed: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n });\n };\n\n const publishBackgroundWork = (active: boolean | null): void => {\n if (disposed || active === backgroundWorkActive) return;\n backgroundWorkActive = active;\n for (const listener of backgroundWorkListeners) listener(active);\n };\n let admittedToolSurface: Pick<SessionToolSurface, 'readSurface' | 'invokeTool'> | undefined;\n const preparePackages = (root: CordisContext): void => {\n mcpServiceRoot = root;\n backgroundWorkBinding = root.inject([PO_BACKGROUND_WORK_SERVICE], (context) => {\n const service = readPoBackgroundWorkService(context);\n if (service === undefined) return undefined;\n let active = true;\n const refresh = (): void => {\n if (disposed || !active) return;\n try {\n const snapshot = service.snapshot(options.sessionId);\n publishBackgroundWork(snapshot.items.length > 0 ? true : snapshot.errors.length > 0 ? null : false);\n } catch {\n publishBackgroundWork(null);\n }\n };\n const unsubscribe = context.on(PO_BACKGROUND_WORK_CHANGED_EVENT, refresh);\n refresh();\n return () => {\n active = false;\n unsubscribe();\n publishBackgroundWork(null);\n };\n });\n root.plugin((context) => {\n context.provide(PO_CHILD_SESSION_SERVICE, childSessionProvider.get());\n context.provide(PO_CHILD_SESSION_HOOK_REGISTRY_SERVICE, childHookRegistry);\n context.effect(() => () => childSessionProvider.close(), 'headless child session service lifetime');\n });\n if (headlessHost !== undefined) throw new Error('Direct headless packages were prepared more than once.');\n if (models.piExtensions !== undefined) {\n piHost = models.piExtensions({\n runtime,\n getModel: () => currentModel,\n getThinkingLevel: () => resolved.thinkingLevel ?? 'off',\n client: () => client?.client,\n onActiveToolsChanged: scheduleToolReapply,\n serverServices: {\n sessionId: options.sessionId,\n get: <T>(name: string) => root.get(name) as T | undefined,\n },\n ...(options.onNotice === undefined ? {} : { onNotice: options.onNotice }),\n });\n }\n headlessHost = new HeadlessHost(root, {\n scheduleSelection: (change, apply) => {\n if (!selectionCommand.getStore()) return apply(change);\n const previous = headlessHost!.context.selection.state?.['minor-mode'] ?? [];\n return runtime.runAtToolBoundary(() =>\n selectionCommand.run(false, () => {\n if (change.axis !== 'state' || change.key !== 'minor-mode') return apply(change);\n // Separate pending toggles must not replace each other's changes with a stale full set.\n const removed = previous.filter((name) => !change.values.includes(name));\n const added = change.values.filter((name) => !previous.includes(name));\n const current = headlessHost!.context.selection.state?.['minor-mode'] ?? [];\n return apply({\n ...change,\n values: [...new Set([...current.filter((name) => !removed.includes(name)), ...added])],\n });\n }),\n );\n },\n candidates: options.candidates,\n toolSurface: () => admittedToolSurface,\n selection: initialSelection,\n selectionOverrides: [\n ...new Set([\n ...(options.selectionOverrides ?? []),\n ...(['majorMode', 'domains', 'profile'] as const).filter(\n (axis) => JSON.stringify(initialSelection[axis]) !== JSON.stringify(options.selection[axis]),\n ),\n ]),\n ],\n context: executionContext,\n resolveSelection: options.resolveSelection,\n validateSelection: (selection) => {\n for (const packageName of requiredServerPackages) {\n const eligible = options.candidates.some(\n (entry) =>\n entry.packageName === packageName &&\n entry.scopes.includes('session') &&\n entry.owners.some(\n (owner) =>\n owner.majorMode === selection.majorMode &&\n (owner.layer === 'default' || selection.activeLayers.includes(owner.layer)),\n ),\n );\n if (!eligible || !installedServerPackages.includes(packageName))\n throw new Error(\n `Required headless package '${packageName}' is unavailable. Run po sync, then reopen this session.`,\n );\n }\n },\n ...(options.allowedTools === undefined ? {} : { allowedTools: () => options.allowedTools }),\n applyTools: async (tools) => {\n appliedPackageTools = tools;\n await applyLatestTools();\n },\n applyResources: async (next) => {\n const mapped = mapResources(next);\n // Package skills win a name collision, for the same reason package tools do.\n const packageNames = new Set((mapped.harness.skills ?? []).map((skill) => skill.name));\n const piSkills = (piHost?.skills ?? []).filter((skill) => !packageNames.has(skill.name));\n const mergedSkills = [...piSkills, ...(mapped.harness.skills ?? [])];\n await runtime.replaceResources(\n piSkills.length === 0 ? mapped.harness : { ...mapped.harness, skills: mergedSkills },\n );\n appliedSkills = new Map(\n mergedSkills.map((skill) => {\n const uri = `po://session/${encodeURIComponent(runtime.sessionId)}/skills/${encodeURIComponent(skill.name)}`;\n return [\n uri,\n {\n descriptor: {\n name: skill.name,\n description: skill.description,\n uri,\n },\n content: skill.content,\n },\n ];\n }),\n );\n surfaceRevision += 1;\n // The load tool lists the skills in its description, so it follows them.\n if (appliedPackageTools.some((tool) => tool.name === PO_LOAD_SKILL_TOOL)) await applyLatestTools();\n },\n onApplied: async (selection) => {\n options.publishSelectionStatus?.((source, text) => client!.client.setStatus(source, text), selection);\n latestSelection = selection;\n for (const listener of selectionListeners) listener(selection);\n },\n onError: (error, source) =>\n options.onNotice?.(`Headless ${source ?? 'host'} failed: ${harnessErrorMessage(error)}`),\n });\n publishComposition = createHeadlessCompositionPublisher(\n runtime,\n headlessHost,\n options.environment,\n (selection) => options.contextGroups?.(root, selection) ?? [],\n readSystemPrompt,\n () => !disposed,\n );\n headlessHost.subscribeSelection(async (selection) => {\n // `onApplied` runs before HeadlessHost publishes its ready snapshot. Recompose\n // the remote surface here, after selection is coherent, rather than making a\n // transient not-ready state fail the host selection.\n if (!headlessReady || !headlessHost?.status.ready) return;\n // A throw here marks the whole host not ready. That is right for a composition that\n // failed to publish, but not for the remote MCP surface: a failure there, or a newer\n // refresh aborting this one, must not block the session's own dispatch.\n try {\n await prepareMcpSurface();\n } catch (error) {\n // A superseded refresh ends with its lifecycle signal's AbortError.\n if (!(error instanceof Error && error.name === 'AbortError'))\n options.onNotice?.(`MCP tool refresh failed: ${error instanceof Error ? error.message : String(error)}`);\n }\n await publishComposition(selection);\n });\n };\n\n const activatePackages = async (installedPackages: readonly string[]): Promise<void> => {\n if (headlessHost === undefined) throw new Error('Direct headless host was not prepared.');\n const host = headlessHost;\n // Dispose can run while activation awaits. Continuing would mark a closed session ready\n // and run its startup hooks against a disposed runtime.\n const assertLive = (): void => {\n if (disposed) throw new Error('The session was closed while it was starting.');\n };\n requiredServerPackages = (await options.requiredServerPackages?.()) ?? [];\n installedServerPackages = installedPackages;\n assertLive();\n host.setAvailableSources(installedPackages);\n // Pi extensions load before the first selection so their session lifetime tools and skills\n // are present in the very first composition. A failure here is reported, never fatal.\n if (piHost !== undefined) {\n try {\n await piHost.load();\n } catch (error) {\n options.onNotice?.(`Pi extensions failed to load: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n assertLive();\n await host.select(initialSelection);\n assertLive();\n // Nothing recomputes readiness after this point, so a session whose first selection\n // failed would stay registered but unable to run. Fail creation instead.\n if (!host.status.ready)\n throw new Error(`Session capabilities failed to start: ${host.status.error ?? 'selection is not ready'}`);\n headlessReady = true;\n await prepareMcpSurface();\n assertLive();\n // Honor persisted abort/pause intent before recovering an interrupted native drive.\n await runtime.recover();\n assertLive();\n await host.dispatchHook('session_start', {});\n await publishComposition();\n // A child resumes with the Harness, so a running child no launcher re-attached gets its lane first. One that\n // cannot is stopped and reported failed before the Harness resumes, so nothing runs it without a launcher.\n const children = childSessionProvider.get();\n for (const run of (await children.stored?.()) ?? []) {\n if (run.settled) continue;\n const runId = run.request.runId;\n try {\n await children.restore?.(runId);\n } catch (error) {\n options.onNotice?.(`Child run ${runId} could not resume: ${harnessErrorMessage(error)}`);\n // A session closing mid-start leaves the run stored, to resume next time.\n assertLive();\n const conversationId = await abandonSubagent(runtime.harness, runId, BACKGROUND_CONTEXT).catch(\n (abandonError: unknown) => {\n options.onNotice?.(`Child run ${runId} could not be stopped: ${harnessErrorMessage(abandonError)}`);\n return undefined;\n },\n );\n if (conversationId !== undefined) runtime.closeLane(conversationId);\n }\n }\n assertLive();\n // Startup waits for continuation admission, not the resumed provider/tool work.\n // An idle lane has released its ownership before activation can succeed.\n const resumed = await runtime.admitResume();\n void resumed.settled.catch((error: unknown) =>\n options.onNotice?.(`Session resume failed: ${harnessErrorMessage(error)}`),\n );\n assertLive();\n };\n\n const dispose = (): Promise<void> => {\n disposePromise ??= (async () => {\n if (disposed) return;\n // Only a session that finished activation ran session_start, so only it gets the\n // matching shutdown hook. The owner disposes this host before removing packages, so a\n // ready host is still ready when the hook is dispatched.\n const wasReady = headlessReady;\n disposed = true;\n headlessReady = false;\n mcpSurfaceReady = false;\n mcpLifecycle.abort();\n chatgptLifecycle.abort();\n const failures: unknown[] = [];\n removeContextDetail(runtime.sessionId, options.environment);\n backgroundWorkListeners.clear();\n try {\n await backgroundWorkBinding?.dispose();\n } catch (error) {\n failures.push(error);\n }\n try {\n await runtime.interrupt();\n } catch (error) {\n failures.push(error);\n }\n try {\n if (wasReady && headlessHost?.status.ready) await headlessHost.dispatchHook('session_shutdown', {});\n } catch (error) {\n failures.push(error);\n }\n // Child lanes detach before their Harness closes; their children resume with it next time.\n try {\n await childSessionProvider.close();\n } catch (error) {\n failures.push(error);\n }\n // Native close seals late model/tool effects while their extension hosts still exist.\n try {\n await runtime.dispose();\n } catch (error) {\n failures.push(error);\n }\n try {\n await piHost?.shutdown();\n } catch (error) {\n failures.push(error);\n }\n try {\n await headlessHost?.close();\n } catch (error) {\n failures.push(error);\n }\n // Activity cleanup still needs its client to clear status during host close.\n client?.dispose();\n unsubscribePresentation();\n unsubscribeEvents();\n releaseEnvironment();\n if (failures.length) throw new AggregateError(failures, 'Headless session shutdown failed');\n })();\n return disposePromise;\n };\n const stop = (): void => {\n void dispose().catch((error: unknown) => options.onNotice?.(harnessErrorMessage(error)));\n };\n\n const invokeSurfaceTool = async (\n invocation: Parameters<SessionToolSurface['invokeTool']>[0],\n readRevision: () => number,\n readTools: () => Map<string, AppliedSessionTool>,\n ready: () => boolean,\n lifecycleSignal?: AbortSignal,\n waitMs?: number,\n ): Promise<import('../../../exports/headless').PoHeadlessToolResult> => {\n if (disposed || !headlessReady || !ready() || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready. Retry in a few seconds.');\n if (invocation.revision !== readRevision()) throw new Error('The session tool surface has changed');\n if (!isJsonObject(invocation.arguments)) throw new Error('Tool arguments must be a JSON object');\n const applied = readTools().get(invocation.name);\n if (applied === undefined) throw new Error(`Tool '${invocation.name}' is not active`);\n if (!Value.Check(applied.descriptor.parameters, invocation.arguments))\n throw new Error(\n `Invalid arguments for tool '${invocation.name}': ${validationDetails(applied.descriptor.parameters, invocation.arguments)}`,\n );\n const signals = [invocation.signal, lifecycleSignal].filter(\n (signal): signal is AbortSignal => signal !== undefined,\n );\n const signal = signals.length === 0 ? undefined : AbortSignal.any(signals);\n signal?.throwIfAborted();\n return runtime.runExternalOperation(\n async () => {\n signal?.throwIfAborted();\n await invocation.authorize?.();\n signal?.throwIfAborted();\n if (disposed || !headlessReady || !ready() || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready. Retry in a few seconds.');\n if (invocation.revision !== readRevision() || readTools().get(invocation.name) !== applied)\n throw new Error(`Tool '${invocation.name}' is no longer active`);\n const toolCallId = `external-${randomUUID()}`;\n const before = await beforeTool(\n {\n toolCallId,\n toolName: invocation.name,\n args: invocation.arguments as Record<string, JsonValue>,\n },\n signal ? withAbortSignal(signal, BACKGROUND_CONTEXT) : BACKGROUND_CONTEXT,\n );\n if (before?.block !== undefined)\n return {\n content: [{ type: 'text', text: before.block.reason }],\n isError: true,\n };\n const args = before?.args ?? (invocation.arguments as Record<string, JsonValue>);\n if (!Value.Check(applied.descriptor.parameters, args))\n throw new Error(\n `A tool hook produced invalid arguments for '${invocation.name}': ${validationDetails(applied.descriptor.parameters, args)}`,\n );\n await invocation.authorize?.();\n signal?.throwIfAborted();\n if (disposed || !headlessReady || !ready() || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready. Retry in a few seconds.');\n if (invocation.revision !== readRevision() || readTools().get(invocation.name) !== applied)\n throw new Error(`Tool '${invocation.name}' is no longer active`);\n const startEvent = {\n type: 'tool_execution_start',\n runId: EXTERNAL_OPERATION,\n turnId: EXTERNAL_OPERATION,\n toolCallId,\n toolName: invocation.name,\n args,\n };\n emitTo(listeners, startEvent);\n // External calls bypass the harness event stream. Deliver the same lifecycle\n // to package hooks as native tools, not just to presentation subscribers.\n await headlessHost.dispatchHook('tool_execution_start', startEvent);\n let result;\n try {\n result = await applied.execute(\n toolCallId,\n args,\n signal,\n (partial) => {\n emitTo(listeners, {\n type: 'tool_execution_update',\n runId: EXTERNAL_OPERATION,\n turnId: EXTERNAL_OPERATION,\n toolCallId,\n toolName: invocation.name,\n partialResult: partial,\n });\n invocation.onUpdate?.(partial);\n },\n invocation.mcpSkills === undefined\n ? undefined\n : { ...headlessHost.context, mcpSkills: invocation.mcpSkills },\n );\n } catch (error) {\n result = {\n content: [\n {\n type: 'text' as const,\n text: error instanceof Error ? error.message : String(error),\n },\n ],\n isError: true,\n };\n }\n // A caller-cancelled tool can still settle normally. Do not begin post hooks\n // for that cancelled operation or replace its already-settled result.\n const patch = signal?.aborted\n ? undefined\n : await afterTool(\n {\n toolCallId,\n toolName: invocation.name,\n args,\n content: result.content,\n ...(isJsonValue(result.details) ? { details: result.details } : {}),\n isError: result.isError === true,\n },\n signal ? withAbortSignal(signal, BACKGROUND_CONTEXT) : BACKGROUND_CONTEXT,\n );\n const patched = {\n content: patch?.content ?? result.content,\n // A hook that rewrites a result must not leave the original payload available remotely.\n ...(patch?.content !== undefined || patch?.isError !== undefined || result.structuredContent === undefined\n ? {}\n : { structuredContent: result.structuredContent }),\n ...(patch?.content !== undefined ||\n patch?.isError !== undefined ||\n patch?.details !== undefined ||\n result._meta === undefined\n ? {}\n : { _meta: result._meta }),\n ...(patch?.details !== undefined\n ? { details: patch.details }\n : result.details === undefined\n ? {}\n : { details: result.details }),\n isError: patch?.isError ?? result.isError ?? false,\n };\n const endEvent = {\n type: 'tool_execution_end',\n runId: EXTERNAL_OPERATION,\n turnId: EXTERNAL_OPERATION,\n toolCallId,\n toolName: invocation.name,\n result: patched,\n isError: patched.isError,\n terminate: patch?.terminate ?? false,\n };\n emitTo(listeners, endEvent);\n await headlessHost.dispatchHook('tool_execution_end', endEvent);\n return patched;\n },\n { signal, waitMs },\n );\n };\n\n const toolSurface: SessionToolSurface = {\n readSurface() {\n if (disposed || !headlessReady || !toolSurfaceReady || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready.');\n return {\n revision: surfaceRevision,\n tools: [...appliedSessionTools.values()].map((tool) => tool.descriptor),\n skills: [...appliedSkills.values()].map((skill) => skill.descriptor),\n };\n },\n invokeTool: (invocation) =>\n invokeSurfaceTool(\n invocation,\n () => surfaceRevision,\n () => appliedSessionTools,\n () => toolSurfaceReady,\n ),\n readSkill(revision, uri) {\n if (disposed || !headlessReady || !toolSurfaceReady || !headlessHost?.status.ready)\n throw new Error('Headless capability preparation is not ready.');\n if (revision !== surfaceRevision) throw new Error('The session skill surface has changed');\n const skill = appliedSkills.get(uri);\n if (skill === undefined) throw new Error('The session skill is not active');\n return skill.content;\n },\n };\n\n admittedToolSurface = {\n readSurface: () => toolSurface.readSurface(),\n invokeTool: (invocation) => toolSurface.invokeTool(invocation),\n };\n\n const mcpSurface: SessionToolSurface = {\n readSurface() {\n if (disposed || !headlessReady || !mcpSurfaceReady || !headlessHost?.status.ready)\n throw new Error('MCP capability preparation is not ready.');\n return {\n revision: mcpSurfaceRevision,\n tools: [...appliedMcpTools.values()].map((tool) => tool.descriptor),\n skills: [...appliedMcpSkills.values()].map((skill) => skill.descriptor),\n uiResources: [...appliedMcpUiResources.values()].map((resource) => resource.descriptor),\n };\n },\n invokeTool: (invocation) =>\n invokeSurfaceTool(\n invocation,\n () => mcpSurfaceRevision,\n () => appliedMcpTools,\n () => mcpSurfaceReady,\n mcpLifecycle.signal,\n REMOTE_TOOL_WAIT_MS,\n ),\n async readUiResource(revision, uri) {\n if (disposed || !headlessReady || !mcpSurfaceReady || !headlessHost?.status.ready)\n throw new Error('MCP capability preparation is not ready.');\n if (revision !== mcpSurfaceRevision) throw new Error('The session MCP surface has changed');\n const resource = appliedMcpUiResources.get(uri)?.resource;\n if (resource === undefined) throw new Error('The session MCP UI resource is not active');\n const text = await resource.read();\n if (disposed || !headlessReady || !mcpSurfaceReady || !headlessHost?.status.ready)\n throw new Error('MCP capability preparation is not ready.');\n if (revision !== mcpSurfaceRevision || appliedMcpUiResources.get(uri)?.resource !== resource)\n throw new Error('The session MCP surface has changed');\n return text;\n },\n async readSkill(revision, uri) {\n if (disposed || !headlessReady || !mcpSurfaceReady || !headlessHost?.status.ready)\n throw new Error('MCP capability preparation is not ready.');\n if (revision !== mcpSurfaceRevision) throw new Error('The session MCP surface has changed');\n const skill = appliedMcpSkills.get(uri)?.skill;\n if (skill === undefined) throw new Error('The session MCP skill is not active');\n const text = await skill.read(headlessHost.context);\n if (disposed || !headlessReady || !mcpSurfaceReady || !headlessHost?.status.ready)\n throw new Error('MCP capability preparation is not ready.');\n if (revision !== mcpSurfaceRevision || appliedMcpSkills.get(uri)?.skill !== skill)\n throw new Error('The session MCP surface has changed');\n return text;\n },\n };\n\n return {\n runtime,\n async readExecutionState() {\n const state = await runtime.readState();\n const backgroundWork =\n mcpServiceRoot === undefined\n ? undefined\n : readPoBackgroundWorkService(mcpServiceRoot)?.snapshot(options.sessionId);\n return {\n isIdle: state.isIdle === true,\n hasPendingMessages: Number(state.pendingMessageCount) > 0,\n ...(backgroundWork === undefined ? {} : { backgroundWork }),\n };\n },\n ...(sessionContext === undefined ? {} : { sessionContext }),\n get host() {\n return headlessHost;\n },\n toolSurface,\n mcpSurface,\n preparePackages,\n activatePackages,\n canDispatch: () => !disposed && headlessReady && !promptPreparationFailed && headlessHost?.status.ready === true,\n childThread: (runId) => childSessionProvider.get().thread(runId),\n onPresentationFrame(listener) {\n listeners.add(listener);\n client?.replay(listener);\n return () => listeners.delete(listener);\n },\n onSelection(listener) {\n selectionListeners.add(listener);\n listener(latestSelection);\n return () => {\n selectionListeners.delete(listener);\n };\n },\n onBackgroundWork(listener) {\n if (disposed) return () => undefined;\n backgroundWorkListeners.add(listener);\n listener(backgroundWorkActive);\n return () => backgroundWorkListeners.delete(listener);\n },\n respondToExtensionUi(frame) {\n return client?.receive(frame as SessionFrame) ?? false;\n },\n dispose,\n };\n}\n"],"mappings":"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"}