@agimon-ai/doompi-core 0.0.1-alpha.100

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 (1233) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  4. package/dist/agentModel.cjs +4 -0
  5. package/dist/agentModel.d.mts +2 -0
  6. package/dist/agentModel.mjs +2 -0
  7. package/dist/apiContracts.cjs +2009 -0
  8. package/dist/apiContracts.cjs.map +1 -0
  9. package/dist/apiContracts.d.mts +1018 -0
  10. package/dist/apiContracts.d.mts.map +1 -0
  11. package/dist/apiContracts.mjs +1989 -0
  12. package/dist/apiContracts.mjs.map +1 -0
  13. package/dist/askUser.cjs +8 -0
  14. package/dist/askUser.d.mts +2 -0
  15. package/dist/askUser.mjs +2 -0
  16. package/dist/authorTools.cjs +5 -0
  17. package/dist/authorTools.d.mts +2 -0
  18. package/dist/authorTools.mjs +2 -0
  19. package/dist/backgroundWork.cjs +7 -0
  20. package/dist/backgroundWork.d.mts +2 -0
  21. package/dist/backgroundWork.mjs +2 -0
  22. package/dist/bundleAssetPolicy.cjs +5 -0
  23. package/dist/bundleAssetPolicy.d.mts +2 -0
  24. package/dist/bundleAssetPolicy.mjs +2 -0
  25. package/dist/childProcess.cjs +15 -0
  26. package/dist/childProcess.d.mts +2 -0
  27. package/dist/childProcess.mjs +2 -0
  28. package/dist/childSession.cjs +8 -0
  29. package/dist/childSession.d.mts +3 -0
  30. package/dist/childSession.mjs +3 -0
  31. package/dist/cockpitContainer.cjs +4 -0
  32. package/dist/cockpitContainer.d.mts +2 -0
  33. package/dist/cockpitContainer.mjs +2 -0
  34. package/dist/config.cjs +13 -0
  35. package/dist/config.d.mts +3 -0
  36. package/dist/config.mjs +2 -0
  37. package/dist/contextApi.cjs +10 -0
  38. package/dist/contextApi.d.mts +4 -0
  39. package/dist/contextApi.mjs +3 -0
  40. package/dist/contextContributions.cjs +7 -0
  41. package/dist/contextContributions.d.mts +3 -0
  42. package/dist/contextContributions.mjs +3 -0
  43. package/dist/contextDetail.cjs +65 -0
  44. package/dist/contextDetail.cjs.map +1 -0
  45. package/dist/contextDetail.d.mts +19 -0
  46. package/dist/contextDetail.d.mts.map +1 -0
  47. package/dist/contextDetail.mjs +64 -0
  48. package/dist/contextDetail.mjs.map +1 -0
  49. package/dist/contextDetailStore.cjs +100 -0
  50. package/dist/contextDetailStore.cjs.map +1 -0
  51. package/dist/contextDetailStore.d.mts +19 -0
  52. package/dist/contextDetailStore.d.mts.map +1 -0
  53. package/dist/contextDetailStore.mjs +91 -0
  54. package/dist/contextDetailStore.mjs.map +1 -0
  55. package/dist/contextProjection.cjs +121 -0
  56. package/dist/contextProjection.cjs.map +1 -0
  57. package/dist/contextProjection.d.mts +130 -0
  58. package/dist/contextProjection.d.mts.map +1 -0
  59. package/dist/contextProjection.mjs +117 -0
  60. package/dist/contextProjection.mjs.map +1 -0
  61. package/dist/cordisHost.cjs +11 -0
  62. package/dist/cordisHost.d.mts +2 -0
  63. package/dist/cordisHost.mjs +2 -0
  64. package/dist/delegation.cjs +18 -0
  65. package/dist/delegation.d.mts +2 -0
  66. package/dist/delegation.mjs +2 -0
  67. package/dist/doomPackage.cjs +61 -0
  68. package/dist/doomPackage.cjs.map +1 -0
  69. package/dist/doomPackage.d.mts +17 -0
  70. package/dist/doomPackage.d.mts.map +1 -0
  71. package/dist/doomPackage.mjs +54 -0
  72. package/dist/doomPackage.mjs.map +1 -0
  73. package/dist/executionBudget.cjs +231 -0
  74. package/dist/executionBudget.cjs.map +1 -0
  75. package/dist/executionBudget.d.mts +11 -0
  76. package/dist/executionBudget.d.mts.map +1 -0
  77. package/dist/executionBudget.mjs +225 -0
  78. package/dist/executionBudget.mjs.map +1 -0
  79. package/dist/extensionFile.cjs +24 -0
  80. package/dist/extensionFile.d.mts +3 -0
  81. package/dist/extensionFile.mjs +2 -0
  82. package/dist/footer.cjs +6 -0
  83. package/dist/footer.d.mts +2 -0
  84. package/dist/footer.mjs +2 -0
  85. package/dist/headless.cjs +9 -0
  86. package/dist/headless.d.mts +2 -0
  87. package/dist/headless.mjs +2 -0
  88. package/dist/headlessHub.cjs +914 -0
  89. package/dist/headlessHub.cjs.map +1 -0
  90. package/dist/headlessHub.d.mts +157 -0
  91. package/dist/headlessHub.d.mts.map +1 -0
  92. package/dist/headlessHub.mjs +911 -0
  93. package/dist/headlessHub.mjs.map +1 -0
  94. package/dist/headlessServer.cjs +910 -0
  95. package/dist/headlessServer.cjs.map +1 -0
  96. package/dist/headlessServer.d.mts +64 -0
  97. package/dist/headlessServer.d.mts.map +1 -0
  98. package/dist/headlessServer.mjs +904 -0
  99. package/dist/headlessServer.mjs.map +1 -0
  100. package/dist/headlessSessionHost.cjs +0 -0
  101. package/dist/headlessSessionHost.d.mts +71 -0
  102. package/dist/headlessSessionHost.d.mts.map +1 -0
  103. package/dist/headlessSessionHost.mjs +1 -0
  104. package/dist/headlessSessionManager.cjs +51 -0
  105. package/dist/headlessSessionManager.cjs.map +1 -0
  106. package/dist/headlessSessionManager.d.mts +6 -0
  107. package/dist/headlessSessionManager.d.mts.map +1 -0
  108. package/dist/headlessSessionManager.mjs +50 -0
  109. package/dist/headlessSessionManager.mjs.map +1 -0
  110. package/dist/help.cjs +24 -0
  111. package/dist/help.d.mts +3 -0
  112. package/dist/help.mjs +3 -0
  113. package/dist/history.cjs +25 -0
  114. package/dist/history.d.mts +10 -0
  115. package/dist/history.mjs +10 -0
  116. package/dist/historyImport.cjs +553 -0
  117. package/dist/historyImport.cjs.map +1 -0
  118. package/dist/historyImport.d.mts +76 -0
  119. package/dist/historyImport.d.mts.map +1 -0
  120. package/dist/historyImport.mjs +547 -0
  121. package/dist/historyImport.mjs.map +1 -0
  122. package/dist/historyOwnership.cjs +253 -0
  123. package/dist/historyOwnership.cjs.map +1 -0
  124. package/dist/historyOwnership.d.mts +23 -0
  125. package/dist/historyOwnership.d.mts.map +1 -0
  126. package/dist/historyOwnership.mjs +247 -0
  127. package/dist/historyOwnership.mjs.map +1 -0
  128. package/dist/hubChannel.cjs +4 -0
  129. package/dist/hubChannel.d.mts +2 -0
  130. package/dist/hubChannel.mjs +2 -0
  131. package/dist/index.cjs +44 -0
  132. package/dist/index.d.mts +6 -0
  133. package/dist/index.mjs +6 -0
  134. package/dist/json.cjs +6 -0
  135. package/dist/json.d.mts +2 -0
  136. package/dist/json.mjs +2 -0
  137. package/dist/jsonlSessionRepo.cjs +217 -0
  138. package/dist/jsonlSessionRepo.cjs.map +1 -0
  139. package/dist/jsonlSessionRepo.d.mts +7 -0
  140. package/dist/jsonlSessionRepo.d.mts.map +1 -0
  141. package/dist/jsonlSessionRepo.mjs +212 -0
  142. package/dist/jsonlSessionRepo.mjs.map +1 -0
  143. package/dist/kernel.cjs +3 -0
  144. package/dist/kernel.d.mts +3 -0
  145. package/dist/kernel.mjs +2 -0
  146. package/dist/leader.cjs +9 -0
  147. package/dist/leader.d.mts +2 -0
  148. package/dist/leader.mjs +2 -0
  149. package/dist/logSinkTelemetry.cjs +5 -0
  150. package/dist/logSinkTelemetry.d.mts +2 -0
  151. package/dist/logSinkTelemetry.mjs +2 -0
  152. package/dist/machineApi.cjs +92 -0
  153. package/dist/machineApi.cjs.map +1 -0
  154. package/dist/machineApi.d.mts +7 -0
  155. package/dist/machineApi.d.mts.map +1 -0
  156. package/dist/machineApi.mjs +88 -0
  157. package/dist/machineApi.mjs.map +1 -0
  158. package/dist/main.cjs +11 -0
  159. package/dist/main.d.mts +5 -0
  160. package/dist/main.mjs +4 -0
  161. package/dist/mcpFacet.cjs +12 -0
  162. package/dist/mcpFacet.d.mts +4 -0
  163. package/dist/mcpFacet.mjs +4 -0
  164. package/dist/mcpProjection.cjs +16 -0
  165. package/dist/mcpProjection.d.mts +2 -0
  166. package/dist/mcpProjection.mjs +2 -0
  167. package/dist/mcpSchemaCost.cjs +195 -0
  168. package/dist/mcpSchemaCost.cjs.map +1 -0
  169. package/dist/mcpSchemaCost.d.mts +35 -0
  170. package/dist/mcpSchemaCost.d.mts.map +1 -0
  171. package/dist/mcpSchemaCost.mjs +190 -0
  172. package/dist/mcpSchemaCost.mjs.map +1 -0
  173. package/dist/mcpSession.cjs +9 -0
  174. package/dist/mcpSession.d.mts +2 -0
  175. package/dist/mcpSession.mjs +2 -0
  176. package/dist/mcpStatus.cjs +7 -0
  177. package/dist/mcpStatus.d.mts +2 -0
  178. package/dist/mcpStatus.mjs +2 -0
  179. package/dist/mcpToolResolver.cjs +5 -0
  180. package/dist/mcpToolResolver.d.mts +2 -0
  181. package/dist/mcpToolResolver.mjs +2 -0
  182. package/dist/mcpWidget.cjs +0 -0
  183. package/dist/mcpWidget.d.mts +2 -0
  184. package/dist/mcpWidget.mjs +1 -0
  185. package/dist/moduleResolution.cjs +405 -0
  186. package/dist/moduleResolution.cjs.map +1 -0
  187. package/dist/moduleResolution.d.mts +67 -0
  188. package/dist/moduleResolution.d.mts.map +1 -0
  189. package/dist/moduleResolution.mjs +389 -0
  190. package/dist/moduleResolution.mjs.map +1 -0
  191. package/dist/narration.cjs +10 -0
  192. package/dist/narration.d.mts +2 -0
  193. package/dist/narration.mjs +2 -0
  194. package/dist/notification.cjs +17 -0
  195. package/dist/notification.d.mts +2 -0
  196. package/dist/notification.mjs +2 -0
  197. package/dist/packageApi.cjs +16 -0
  198. package/dist/packageApi.d.mts +3 -0
  199. package/dist/packageApi.mjs +3 -0
  200. package/dist/packageApiServer.cjs +191 -0
  201. package/dist/packageApiServer.cjs.map +1 -0
  202. package/dist/packageApiServer.d.mts +57 -0
  203. package/dist/packageApiServer.d.mts.map +1 -0
  204. package/dist/packageApiServer.mjs +189 -0
  205. package/dist/packageApiServer.mjs.map +1 -0
  206. package/dist/piExtension.cjs +13 -0
  207. package/dist/piExtension.d.mts +5 -0
  208. package/dist/piExtension.mjs +4 -0
  209. package/dist/piSettings.cjs +12 -0
  210. package/dist/piSettings.d.mts +2 -0
  211. package/dist/piSettings.mjs +2 -0
  212. package/dist/pluginProtocol.cjs +10 -0
  213. package/dist/pluginProtocol.d.mts +2 -0
  214. package/dist/pluginProtocol.mjs +2 -0
  215. package/dist/profileIdentity.cjs +6 -0
  216. package/dist/profileIdentity.d.mts +2 -0
  217. package/dist/profileIdentity.mjs +2 -0
  218. package/dist/protocol.cjs +10 -0
  219. package/dist/protocol.d.mts +2 -0
  220. package/dist/protocol.mjs +2 -0
  221. package/dist/readiness.cjs +8 -0
  222. package/dist/readiness.d.mts +2 -0
  223. package/dist/readiness.mjs +2 -0
  224. package/dist/relaunchHandoff.cjs +6 -0
  225. package/dist/relaunchHandoff.d.mts +2 -0
  226. package/dist/relaunchHandoff.mjs +2 -0
  227. package/dist/remoteApi.cjs +42 -0
  228. package/dist/remoteApi.cjs.map +1 -0
  229. package/dist/remoteApi.d.mts +7 -0
  230. package/dist/remoteApi.d.mts.map +1 -0
  231. package/dist/remoteApi.mjs +41 -0
  232. package/dist/remoteApi.mjs.map +1 -0
  233. package/dist/remoteRuntime.cjs +460 -0
  234. package/dist/remoteRuntime.cjs.map +1 -0
  235. package/dist/remoteRuntime.d.mts +28 -0
  236. package/dist/remoteRuntime.d.mts.map +1 -0
  237. package/dist/remoteRuntime.mjs +456 -0
  238. package/dist/remoteRuntime.mjs.map +1 -0
  239. package/dist/runtimeConfig.cjs +232 -0
  240. package/dist/runtimeConfig.cjs.map +1 -0
  241. package/dist/runtimeConfig.d.mts +313 -0
  242. package/dist/runtimeConfig.d.mts.map +1 -0
  243. package/dist/runtimeConfig.mjs +221 -0
  244. package/dist/runtimeConfig.mjs.map +1 -0
  245. package/dist/runtimeContextApi.cjs +64 -0
  246. package/dist/runtimeContextApi.cjs.map +1 -0
  247. package/dist/runtimeContextApi.d.mts +16 -0
  248. package/dist/runtimeContextApi.d.mts.map +1 -0
  249. package/dist/runtimeContextApi.mjs +62 -0
  250. package/dist/runtimeContextApi.mjs.map +1 -0
  251. package/dist/runtimeCordisHost.cjs +193 -0
  252. package/dist/runtimeCordisHost.cjs.map +1 -0
  253. package/dist/runtimeCordisHost.d.mts +63 -0
  254. package/dist/runtimeCordisHost.d.mts.map +1 -0
  255. package/dist/runtimeCordisHost.mjs +184 -0
  256. package/dist/runtimeCordisHost.mjs.map +1 -0
  257. package/dist/runtimeHeadlessSessionManager.cjs +0 -0
  258. package/dist/runtimeHeadlessSessionManager.d.mts +18 -0
  259. package/dist/runtimeHeadlessSessionManager.d.mts.map +1 -0
  260. package/dist/runtimeHeadlessSessionManager.mjs +1 -0
  261. package/dist/runtimeIdentity.cjs +26 -0
  262. package/dist/runtimeIdentity.cjs.map +1 -0
  263. package/dist/runtimeIdentity.d.mts +7 -0
  264. package/dist/runtimeIdentity.d.mts.map +1 -0
  265. package/dist/runtimeIdentity.mjs +21 -0
  266. package/dist/runtimeIdentity.mjs.map +1 -0
  267. package/dist/runtimeJson.cjs +46 -0
  268. package/dist/runtimeJson.cjs.map +1 -0
  269. package/dist/runtimeJson.d.mts +22 -0
  270. package/dist/runtimeJson.d.mts.map +1 -0
  271. package/dist/runtimeJson.mjs +39 -0
  272. package/dist/runtimeJson.mjs.map +1 -0
  273. package/dist/runtimeLogSinkTelemetry.cjs +102 -0
  274. package/dist/runtimeLogSinkTelemetry.cjs.map +1 -0
  275. package/dist/runtimeLogSinkTelemetry.d.mts +49 -0
  276. package/dist/runtimeLogSinkTelemetry.d.mts.map +1 -0
  277. package/dist/runtimeLogSinkTelemetry.mjs +99 -0
  278. package/dist/runtimeLogSinkTelemetry.mjs.map +1 -0
  279. package/dist/runtimePiExtension.cjs +339 -0
  280. package/dist/runtimePiExtension.cjs.map +1 -0
  281. package/dist/runtimePiExtension.d.mts +160 -0
  282. package/dist/runtimePiExtension.d.mts.map +1 -0
  283. package/dist/runtimePiExtension.mjs +333 -0
  284. package/dist/runtimePiExtension.mjs.map +1 -0
  285. package/dist/runtimePiSettings.cjs +116 -0
  286. package/dist/runtimePiSettings.cjs.map +1 -0
  287. package/dist/runtimePiSettings.d.mts +29 -0
  288. package/dist/runtimePiSettings.d.mts.map +1 -0
  289. package/dist/runtimePiSettings.mjs +103 -0
  290. package/dist/runtimePiSettings.mjs.map +1 -0
  291. package/dist/runtimeProtocol.cjs +223 -0
  292. package/dist/runtimeProtocol.cjs.map +1 -0
  293. package/dist/runtimeProtocol.d.mts +84 -0
  294. package/dist/runtimeProtocol.d.mts.map +1 -0
  295. package/dist/runtimeProtocol.mjs +215 -0
  296. package/dist/runtimeProtocol.mjs.map +1 -0
  297. package/dist/runtimeToolNames.cjs +51 -0
  298. package/dist/runtimeToolNames.cjs.map +1 -0
  299. package/dist/runtimeToolNames.d.mts +24 -0
  300. package/dist/runtimeToolNames.d.mts.map +1 -0
  301. package/dist/runtimeToolNames.mjs +49 -0
  302. package/dist/runtimeToolNames.mjs.map +1 -0
  303. package/dist/runtimeTransition.cjs +27 -0
  304. package/dist/runtimeTransition.cjs.map +1 -0
  305. package/dist/runtimeTransition.d.mts +114 -0
  306. package/dist/runtimeTransition.d.mts.map +1 -0
  307. package/dist/runtimeTransition.mjs +24 -0
  308. package/dist/runtimeTransition.mjs.map +1 -0
  309. package/dist/sandboxHarness.cjs +6 -0
  310. package/dist/sandboxHarness.d.mts +2 -0
  311. package/dist/sandboxHarness.mjs +2 -0
  312. package/dist/server.cjs +17 -0
  313. package/dist/server.d.mts +10 -0
  314. package/dist/server.mjs +7 -0
  315. package/dist/serverFacet.cjs +30 -0
  316. package/dist/serverFacet.d.mts +8 -0
  317. package/dist/serverFacet.mjs +8 -0
  318. package/dist/serverTelemetry.cjs +25 -0
  319. package/dist/serverTelemetry.cjs.map +1 -0
  320. package/dist/serverTelemetry.d.mts +12 -0
  321. package/dist/serverTelemetry.d.mts.map +1 -0
  322. package/dist/serverTelemetry.mjs +23 -0
  323. package/dist/serverTelemetry.mjs.map +1 -0
  324. package/dist/sessionFilesApi.cjs +96 -0
  325. package/dist/sessionFilesApi.cjs.map +1 -0
  326. package/dist/sessionFilesApi.d.mts +7 -0
  327. package/dist/sessionFilesApi.d.mts.map +1 -0
  328. package/dist/sessionFilesApi.mjs +91 -0
  329. package/dist/sessionFilesApi.mjs.map +1 -0
  330. package/dist/sessionMcp.cjs +6 -0
  331. package/dist/sessionMcp.d.mts +5 -0
  332. package/dist/sessionMcp.mjs +3 -0
  333. package/dist/sessionProtocol.cjs +8 -0
  334. package/dist/sessionProtocol.d.mts +3 -0
  335. package/dist/sessionProtocol.mjs +2 -0
  336. package/dist/skills.cjs +9 -0
  337. package/dist/skills.d.mts +2 -0
  338. package/dist/skills.mjs +2 -0
  339. package/dist/sqliteHistoryImport.cjs +151 -0
  340. package/dist/sqliteHistoryImport.cjs.map +1 -0
  341. package/dist/sqliteHistoryImport.d.mts +8 -0
  342. package/dist/sqliteHistoryImport.d.mts.map +1 -0
  343. package/dist/sqliteHistoryImport.mjs +146 -0
  344. package/dist/sqliteHistoryImport.mjs.map +1 -0
  345. package/dist/sqliteSessionStorage.cjs +53 -0
  346. package/dist/sqliteSessionStorage.cjs.map +1 -0
  347. package/dist/sqliteSessionStorage.d.mts +7 -0
  348. package/dist/sqliteSessionStorage.d.mts.map +1 -0
  349. package/dist/sqliteSessionStorage.mjs +49 -0
  350. package/dist/sqliteSessionStorage.mjs.map +1 -0
  351. package/dist/src/constants/authorTools.cjs +10 -0
  352. package/dist/src/constants/authorTools.cjs.map +1 -0
  353. package/dist/src/constants/authorTools.d.mts +6 -0
  354. package/dist/src/constants/authorTools.d.mts.map +1 -0
  355. package/dist/src/constants/authorTools.mjs +8 -0
  356. package/dist/src/constants/authorTools.mjs.map +1 -0
  357. package/dist/src/constants/contextApi.cjs +28 -0
  358. package/dist/src/constants/contextApi.cjs.map +1 -0
  359. package/dist/src/constants/contextApi.d.mts +21 -0
  360. package/dist/src/constants/contextApi.d.mts.map +1 -0
  361. package/dist/src/constants/contextApi.mjs +23 -0
  362. package/dist/src/constants/contextApi.mjs.map +1 -0
  363. package/dist/src/constants/remote.cjs +90 -0
  364. package/dist/src/constants/remote.cjs.map +1 -0
  365. package/dist/src/constants/remote.mjs +69 -0
  366. package/dist/src/constants/remote.mjs.map +1 -0
  367. package/dist/src/constants/voiceReloadHandoff.cjs +12 -0
  368. package/dist/src/constants/voiceReloadHandoff.cjs.map +1 -0
  369. package/dist/src/constants/voiceReloadHandoff.d.mts +7 -0
  370. package/dist/src/constants/voiceReloadHandoff.d.mts.map +1 -0
  371. package/dist/src/constants/voiceReloadHandoff.mjs +9 -0
  372. package/dist/src/constants/voiceReloadHandoff.mjs.map +1 -0
  373. package/dist/src/constants/voiceTools.cjs +96 -0
  374. package/dist/src/constants/voiceTools.cjs.map +1 -0
  375. package/dist/src/constants/voiceTools.d.mts +58 -0
  376. package/dist/src/constants/voiceTools.d.mts.map +1 -0
  377. package/dist/src/constants/voiceTools.mjs +60 -0
  378. package/dist/src/constants/voiceTools.mjs.map +1 -0
  379. package/dist/src/extensions/extensionFile.cjs +165 -0
  380. package/dist/src/extensions/extensionFile.cjs.map +1 -0
  381. package/dist/src/extensions/extensionFile.d.mts +79 -0
  382. package/dist/src/extensions/extensionFile.d.mts.map +1 -0
  383. package/dist/src/extensions/extensionFile.mjs +144 -0
  384. package/dist/src/extensions/extensionFile.mjs.map +1 -0
  385. package/dist/src/extensions/serverPlugin.cjs +106 -0
  386. package/dist/src/extensions/serverPlugin.cjs.map +1 -0
  387. package/dist/src/extensions/serverPlugin.d.mts +5 -0
  388. package/dist/src/extensions/serverPlugin.d.mts.map +1 -0
  389. package/dist/src/extensions/serverPlugin.mjs +106 -0
  390. package/dist/src/extensions/serverPlugin.mjs.map +1 -0
  391. package/dist/src/extensions/webPlugin.cjs +131 -0
  392. package/dist/src/extensions/webPlugin.cjs.map +1 -0
  393. package/dist/src/extensions/webPlugin.d.mts +66 -0
  394. package/dist/src/extensions/webPlugin.d.mts.map +1 -0
  395. package/dist/src/extensions/webPlugin.mjs +110 -0
  396. package/dist/src/extensions/webPlugin.mjs.map +1 -0
  397. package/dist/src/pi/piSessionRuntime.cjs +572 -0
  398. package/dist/src/pi/piSessionRuntime.cjs.map +1 -0
  399. package/dist/src/pi/piSessionRuntime.d.mts +43 -0
  400. package/dist/src/pi/piSessionRuntime.d.mts.map +1 -0
  401. package/dist/src/pi/piSessionRuntime.mjs +571 -0
  402. package/dist/src/pi/piSessionRuntime.mjs.map +1 -0
  403. package/dist/src/pi/piWebSocketListener.cjs +115 -0
  404. package/dist/src/pi/piWebSocketListener.cjs.map +1 -0
  405. package/dist/src/pi/piWebSocketListener.mjs +115 -0
  406. package/dist/src/pi/piWebSocketListener.mjs.map +1 -0
  407. package/dist/src/schemas/agentModel.cjs +33 -0
  408. package/dist/src/schemas/agentModel.cjs.map +1 -0
  409. package/dist/src/schemas/agentModel.d.mts +26 -0
  410. package/dist/src/schemas/agentModel.d.mts.map +1 -0
  411. package/dist/src/schemas/agentModel.mjs +32 -0
  412. package/dist/src/schemas/agentModel.mjs.map +1 -0
  413. package/dist/src/schemas/apiContracts.d.mts +58 -0
  414. package/dist/src/schemas/apiContracts.d.mts.map +1 -0
  415. package/dist/src/schemas/askUser.cjs +42 -0
  416. package/dist/src/schemas/askUser.cjs.map +1 -0
  417. package/dist/src/schemas/askUser.d.mts +47 -0
  418. package/dist/src/schemas/askUser.d.mts.map +1 -0
  419. package/dist/src/schemas/askUser.mjs +37 -0
  420. package/dist/src/schemas/askUser.mjs.map +1 -0
  421. package/dist/src/schemas/backgroundWork.cjs +31 -0
  422. package/dist/src/schemas/backgroundWork.cjs.map +1 -0
  423. package/dist/src/schemas/backgroundWork.d.mts +72 -0
  424. package/dist/src/schemas/backgroundWork.d.mts.map +1 -0
  425. package/dist/src/schemas/backgroundWork.mjs +27 -0
  426. package/dist/src/schemas/backgroundWork.mjs.map +1 -0
  427. package/dist/src/schemas/childProcess.cjs +67 -0
  428. package/dist/src/schemas/childProcess.cjs.map +1 -0
  429. package/dist/src/schemas/childProcess.d.mts +30 -0
  430. package/dist/src/schemas/childProcess.d.mts.map +1 -0
  431. package/dist/src/schemas/childProcess.mjs +55 -0
  432. package/dist/src/schemas/childProcess.mjs.map +1 -0
  433. package/dist/src/schemas/cockpitContainer.cjs +31 -0
  434. package/dist/src/schemas/cockpitContainer.cjs.map +1 -0
  435. package/dist/src/schemas/cockpitContainer.d.mts +80 -0
  436. package/dist/src/schemas/cockpitContainer.d.mts.map +1 -0
  437. package/dist/src/schemas/cockpitContainer.mjs +30 -0
  438. package/dist/src/schemas/cockpitContainer.mjs.map +1 -0
  439. package/dist/src/schemas/contextContributions.cjs +17 -0
  440. package/dist/src/schemas/contextContributions.cjs.map +1 -0
  441. package/dist/src/schemas/contextContributions.d.mts +49 -0
  442. package/dist/src/schemas/contextContributions.d.mts.map +1 -0
  443. package/dist/src/schemas/contextContributions.mjs +15 -0
  444. package/dist/src/schemas/contextContributions.mjs.map +1 -0
  445. package/dist/src/schemas/delegation.cjs +91 -0
  446. package/dist/src/schemas/delegation.cjs.map +1 -0
  447. package/dist/src/schemas/delegation.d.mts +95 -0
  448. package/dist/src/schemas/delegation.d.mts.map +1 -0
  449. package/dist/src/schemas/delegation.mjs +76 -0
  450. package/dist/src/schemas/delegation.mjs.map +1 -0
  451. package/dist/src/schemas/extensionFile.d.mts +136 -0
  452. package/dist/src/schemas/extensionFile.d.mts.map +1 -0
  453. package/dist/src/schemas/footer.cjs +48 -0
  454. package/dist/src/schemas/footer.cjs.map +1 -0
  455. package/dist/src/schemas/footer.d.mts +48 -0
  456. package/dist/src/schemas/footer.d.mts.map +1 -0
  457. package/dist/src/schemas/footer.mjs +45 -0
  458. package/dist/src/schemas/footer.mjs.map +1 -0
  459. package/dist/src/schemas/headless.cjs +44 -0
  460. package/dist/src/schemas/headless.cjs.map +1 -0
  461. package/dist/src/schemas/headless.d.mts +370 -0
  462. package/dist/src/schemas/headless.d.mts.map +1 -0
  463. package/dist/src/schemas/headless.mjs +38 -0
  464. package/dist/src/schemas/headless.mjs.map +1 -0
  465. package/dist/src/schemas/help.cjs +281 -0
  466. package/dist/src/schemas/help.cjs.map +1 -0
  467. package/dist/src/schemas/help.d.mts +119 -0
  468. package/dist/src/schemas/help.d.mts.map +1 -0
  469. package/dist/src/schemas/help.mjs +262 -0
  470. package/dist/src/schemas/help.mjs.map +1 -0
  471. package/dist/src/schemas/hubChannel.cjs +20 -0
  472. package/dist/src/schemas/hubChannel.cjs.map +1 -0
  473. package/dist/src/schemas/hubChannel.d.mts +236 -0
  474. package/dist/src/schemas/hubChannel.d.mts.map +1 -0
  475. package/dist/src/schemas/hubChannel.mjs +19 -0
  476. package/dist/src/schemas/hubChannel.mjs.map +1 -0
  477. package/dist/src/schemas/leader.cjs +57 -0
  478. package/dist/src/schemas/leader.cjs.map +1 -0
  479. package/dist/src/schemas/leader.d.mts +107 -0
  480. package/dist/src/schemas/leader.d.mts.map +1 -0
  481. package/dist/src/schemas/leader.mjs +51 -0
  482. package/dist/src/schemas/leader.mjs.map +1 -0
  483. package/dist/src/schemas/mcpBundle.cjs +92 -0
  484. package/dist/src/schemas/mcpBundle.cjs.map +1 -0
  485. package/dist/src/schemas/mcpBundle.d.mts +33 -0
  486. package/dist/src/schemas/mcpBundle.d.mts.map +1 -0
  487. package/dist/src/schemas/mcpBundle.mjs +90 -0
  488. package/dist/src/schemas/mcpBundle.mjs.map +1 -0
  489. package/dist/src/schemas/mcpFacet.cjs +24 -0
  490. package/dist/src/schemas/mcpFacet.cjs.map +1 -0
  491. package/dist/src/schemas/mcpFacet.d.mts +91 -0
  492. package/dist/src/schemas/mcpFacet.d.mts.map +1 -0
  493. package/dist/src/schemas/mcpFacet.mjs +21 -0
  494. package/dist/src/schemas/mcpFacet.mjs.map +1 -0
  495. package/dist/src/schemas/mcpProjection.cjs +117 -0
  496. package/dist/src/schemas/mcpProjection.cjs.map +1 -0
  497. package/dist/src/schemas/mcpProjection.d.mts +124 -0
  498. package/dist/src/schemas/mcpProjection.d.mts.map +1 -0
  499. package/dist/src/schemas/mcpProjection.mjs +104 -0
  500. package/dist/src/schemas/mcpProjection.mjs.map +1 -0
  501. package/dist/src/schemas/mcpSession.cjs +57 -0
  502. package/dist/src/schemas/mcpSession.cjs.map +1 -0
  503. package/dist/src/schemas/mcpSession.d.mts +57 -0
  504. package/dist/src/schemas/mcpSession.d.mts.map +1 -0
  505. package/dist/src/schemas/mcpSession.mjs +51 -0
  506. package/dist/src/schemas/mcpSession.mjs.map +1 -0
  507. package/dist/src/schemas/mcpStatus.cjs +52 -0
  508. package/dist/src/schemas/mcpStatus.cjs.map +1 -0
  509. package/dist/src/schemas/mcpStatus.d.mts +73 -0
  510. package/dist/src/schemas/mcpStatus.d.mts.map +1 -0
  511. package/dist/src/schemas/mcpStatus.mjs +48 -0
  512. package/dist/src/schemas/mcpStatus.mjs.map +1 -0
  513. package/dist/src/schemas/mcpToolResolver.cjs +17 -0
  514. package/dist/src/schemas/mcpToolResolver.cjs.map +1 -0
  515. package/dist/src/schemas/mcpToolResolver.d.mts +24 -0
  516. package/dist/src/schemas/mcpToolResolver.d.mts.map +1 -0
  517. package/dist/src/schemas/mcpToolResolver.mjs +15 -0
  518. package/dist/src/schemas/mcpToolResolver.mjs.map +1 -0
  519. package/dist/src/schemas/narration.cjs +54 -0
  520. package/dist/src/schemas/narration.cjs.map +1 -0
  521. package/dist/src/schemas/narration.d.mts +29 -0
  522. package/dist/src/schemas/narration.d.mts.map +1 -0
  523. package/dist/src/schemas/narration.mjs +47 -0
  524. package/dist/src/schemas/narration.mjs.map +1 -0
  525. package/dist/src/schemas/notification.cjs +122 -0
  526. package/dist/src/schemas/notification.cjs.map +1 -0
  527. package/dist/src/schemas/notification.d.mts +48 -0
  528. package/dist/src/schemas/notification.d.mts.map +1 -0
  529. package/dist/src/schemas/notification.mjs +108 -0
  530. package/dist/src/schemas/notification.mjs.map +1 -0
  531. package/dist/src/schemas/packageApi.cjs +73 -0
  532. package/dist/src/schemas/packageApi.cjs.map +1 -0
  533. package/dist/src/schemas/packageApi.d.mts +249 -0
  534. package/dist/src/schemas/packageApi.d.mts.map +1 -0
  535. package/dist/src/schemas/packageApi.mjs +64 -0
  536. package/dist/src/schemas/packageApi.mjs.map +1 -0
  537. package/dist/src/schemas/piTool.cjs +26 -0
  538. package/dist/src/schemas/piTool.cjs.map +1 -0
  539. package/dist/src/schemas/piTool.d.mts +25 -0
  540. package/dist/src/schemas/piTool.d.mts.map +1 -0
  541. package/dist/src/schemas/piTool.mjs +26 -0
  542. package/dist/src/schemas/piTool.mjs.map +1 -0
  543. package/dist/src/schemas/pluginContributions.cjs +19 -0
  544. package/dist/src/schemas/pluginContributions.cjs.map +1 -0
  545. package/dist/src/schemas/pluginContributions.d.mts +56 -0
  546. package/dist/src/schemas/pluginContributions.d.mts.map +1 -0
  547. package/dist/src/schemas/pluginContributions.mjs +18 -0
  548. package/dist/src/schemas/pluginContributions.mjs.map +1 -0
  549. package/dist/src/schemas/pluginProtocol.cjs +103 -0
  550. package/dist/src/schemas/pluginProtocol.cjs.map +1 -0
  551. package/dist/src/schemas/pluginProtocol.d.mts +68 -0
  552. package/dist/src/schemas/pluginProtocol.d.mts.map +1 -0
  553. package/dist/src/schemas/pluginProtocol.mjs +96 -0
  554. package/dist/src/schemas/pluginProtocol.mjs.map +1 -0
  555. package/dist/src/schemas/profileIdentity.cjs +67 -0
  556. package/dist/src/schemas/profileIdentity.cjs.map +1 -0
  557. package/dist/src/schemas/profileIdentity.d.mts +50 -0
  558. package/dist/src/schemas/profileIdentity.d.mts.map +1 -0
  559. package/dist/src/schemas/profileIdentity.mjs +64 -0
  560. package/dist/src/schemas/profileIdentity.mjs.map +1 -0
  561. package/dist/src/schemas/readiness.cjs +251 -0
  562. package/dist/src/schemas/readiness.cjs.map +1 -0
  563. package/dist/src/schemas/readiness.d.mts +84 -0
  564. package/dist/src/schemas/readiness.d.mts.map +1 -0
  565. package/dist/src/schemas/readiness.mjs +246 -0
  566. package/dist/src/schemas/readiness.mjs.map +1 -0
  567. package/dist/src/schemas/relaunchHandoff.cjs +47 -0
  568. package/dist/src/schemas/relaunchHandoff.cjs.map +1 -0
  569. package/dist/src/schemas/relaunchHandoff.d.mts +25 -0
  570. package/dist/src/schemas/relaunchHandoff.d.mts.map +1 -0
  571. package/dist/src/schemas/relaunchHandoff.mjs +44 -0
  572. package/dist/src/schemas/relaunchHandoff.mjs.map +1 -0
  573. package/dist/src/schemas/sandboxHarness.cjs +29 -0
  574. package/dist/src/schemas/sandboxHarness.cjs.map +1 -0
  575. package/dist/src/schemas/sandboxHarness.d.mts +39 -0
  576. package/dist/src/schemas/sandboxHarness.d.mts.map +1 -0
  577. package/dist/src/schemas/sandboxHarness.mjs +26 -0
  578. package/dist/src/schemas/sandboxHarness.mjs.map +1 -0
  579. package/dist/src/schemas/serverBundle.cjs +79 -0
  580. package/dist/src/schemas/serverBundle.cjs.map +1 -0
  581. package/dist/src/schemas/serverBundle.d.mts +34 -0
  582. package/dist/src/schemas/serverBundle.d.mts.map +1 -0
  583. package/dist/src/schemas/serverBundle.mjs +77 -0
  584. package/dist/src/schemas/serverBundle.mjs.map +1 -0
  585. package/dist/src/schemas/serverFacet.cjs +102 -0
  586. package/dist/src/schemas/serverFacet.cjs.map +1 -0
  587. package/dist/src/schemas/serverFacet.d.mts +141 -0
  588. package/dist/src/schemas/serverFacet.d.mts.map +1 -0
  589. package/dist/src/schemas/serverFacet.mjs +93 -0
  590. package/dist/src/schemas/serverFacet.mjs.map +1 -0
  591. package/dist/src/schemas/sessionMcpActivity.d.mts +45 -0
  592. package/dist/src/schemas/sessionMcpActivity.d.mts.map +1 -0
  593. package/dist/src/schemas/sessionProtocol.cjs +17 -0
  594. package/dist/src/schemas/sessionProtocol.cjs.map +1 -0
  595. package/dist/src/schemas/sessionProtocol.d.mts +308 -0
  596. package/dist/src/schemas/sessionProtocol.d.mts.map +1 -0
  597. package/dist/src/schemas/sessionProtocol.mjs +12 -0
  598. package/dist/src/schemas/sessionProtocol.mjs.map +1 -0
  599. package/dist/src/schemas/sessionUpdates.d.mts +34 -0
  600. package/dist/src/schemas/sessionUpdates.d.mts.map +1 -0
  601. package/dist/src/schemas/skills.cjs +115 -0
  602. package/dist/src/schemas/skills.cjs.map +1 -0
  603. package/dist/src/schemas/skills.d.mts +65 -0
  604. package/dist/src/schemas/skills.d.mts.map +1 -0
  605. package/dist/src/schemas/skills.mjs +109 -0
  606. package/dist/src/schemas/skills.mjs.map +1 -0
  607. package/dist/src/schemas/toolOverrides.cjs +17 -0
  608. package/dist/src/schemas/toolOverrides.cjs.map +1 -0
  609. package/dist/src/schemas/toolOverrides.d.mts +29 -0
  610. package/dist/src/schemas/toolOverrides.d.mts.map +1 -0
  611. package/dist/src/schemas/toolOverrides.mjs +15 -0
  612. package/dist/src/schemas/toolOverrides.mjs.map +1 -0
  613. package/dist/src/schemas/toolSurface.cjs +17 -0
  614. package/dist/src/schemas/toolSurface.cjs.map +1 -0
  615. package/dist/src/schemas/toolSurface.d.mts +70 -0
  616. package/dist/src/schemas/toolSurface.d.mts.map +1 -0
  617. package/dist/src/schemas/toolSurface.mjs +15 -0
  618. package/dist/src/schemas/toolSurface.mjs.map +1 -0
  619. package/dist/src/schemas/uiHub.cjs +17 -0
  620. package/dist/src/schemas/uiHub.cjs.map +1 -0
  621. package/dist/src/schemas/uiHub.d.mts +23 -0
  622. package/dist/src/schemas/uiHub.d.mts.map +1 -0
  623. package/dist/src/schemas/uiHub.mjs +15 -0
  624. package/dist/src/schemas/uiHub.mjs.map +1 -0
  625. package/dist/src/schemas/voiceReloadHandoff.cjs +78 -0
  626. package/dist/src/schemas/voiceReloadHandoff.cjs.map +1 -0
  627. package/dist/src/schemas/voiceReloadHandoff.d.mts +31 -0
  628. package/dist/src/schemas/voiceReloadHandoff.d.mts.map +1 -0
  629. package/dist/src/schemas/voiceReloadHandoff.mjs +75 -0
  630. package/dist/src/schemas/voiceReloadHandoff.mjs.map +1 -0
  631. package/dist/src/schemas/voiceTools.cjs +205 -0
  632. package/dist/src/schemas/voiceTools.cjs.map +1 -0
  633. package/dist/src/schemas/voiceTools.d.mts +120 -0
  634. package/dist/src/schemas/voiceTools.d.mts.map +1 -0
  635. package/dist/src/schemas/voiceTools.mjs +194 -0
  636. package/dist/src/schemas/voiceTools.mjs.map +1 -0
  637. package/dist/src/server/devProxyForward.cjs +141 -0
  638. package/dist/src/server/devProxyForward.cjs.map +1 -0
  639. package/dist/src/server/devProxyForward.mjs +139 -0
  640. package/dist/src/server/devProxyForward.mjs.map +1 -0
  641. package/dist/src/server/devProxyRoutes.cjs +97 -0
  642. package/dist/src/server/devProxyRoutes.cjs.map +1 -0
  643. package/dist/src/server/devProxyRoutes.mjs +97 -0
  644. package/dist/src/server/devProxyRoutes.mjs.map +1 -0
  645. package/dist/src/server/devProxySocket.cjs +87 -0
  646. package/dist/src/server/devProxySocket.cjs.map +1 -0
  647. package/dist/src/server/devProxySocket.mjs +87 -0
  648. package/dist/src/server/devProxySocket.mjs.map +1 -0
  649. package/dist/src/server/directHarnessRuntime.cjs +1964 -0
  650. package/dist/src/server/directHarnessRuntime.cjs.map +1 -0
  651. package/dist/src/server/directHarnessRuntime.d.mts +3 -0
  652. package/dist/src/server/directHarnessRuntime.mjs +1958 -0
  653. package/dist/src/server/directHarnessRuntime.mjs.map +1 -0
  654. package/dist/src/server/harnessErrorMessage.cjs +13 -0
  655. package/dist/src/server/harnessErrorMessage.cjs.map +1 -0
  656. package/dist/src/server/harnessErrorMessage.mjs +13 -0
  657. package/dist/src/server/harnessErrorMessage.mjs.map +1 -0
  658. package/dist/src/server/headlessProtocol.cjs +366 -0
  659. package/dist/src/server/headlessProtocol.cjs.map +1 -0
  660. package/dist/src/server/headlessProtocol.mjs +366 -0
  661. package/dist/src/server/headlessProtocol.mjs.map +1 -0
  662. package/dist/src/server/jsonlTranscriptReader.cjs +85 -0
  663. package/dist/src/server/jsonlTranscriptReader.cjs.map +1 -0
  664. package/dist/src/server/jsonlTranscriptReader.mjs +83 -0
  665. package/dist/src/server/jsonlTranscriptReader.mjs.map +1 -0
  666. package/dist/src/server/mcpBundleLoader.cjs +115 -0
  667. package/dist/src/server/mcpBundleLoader.cjs.map +1 -0
  668. package/dist/src/server/mcpBundleLoader.d.mts +27 -0
  669. package/dist/src/server/mcpBundleLoader.d.mts.map +1 -0
  670. package/dist/src/server/mcpBundleLoader.mjs +111 -0
  671. package/dist/src/server/mcpBundleLoader.mjs.map +1 -0
  672. package/dist/src/server/nativeChildTranscriptReader.cjs +20 -0
  673. package/dist/src/server/nativeChildTranscriptReader.cjs.map +1 -0
  674. package/dist/src/server/nativeChildTranscriptReader.mjs +18 -0
  675. package/dist/src/server/nativeChildTranscriptReader.mjs.map +1 -0
  676. package/dist/src/server/remoteRoutes.cjs +386 -0
  677. package/dist/src/server/remoteRoutes.cjs.map +1 -0
  678. package/dist/src/server/remoteRoutes.mjs +386 -0
  679. package/dist/src/server/remoteRoutes.mjs.map +1 -0
  680. package/dist/src/server/serverFacetLoader.cjs +220 -0
  681. package/dist/src/server/serverFacetLoader.cjs.map +1 -0
  682. package/dist/src/server/serverFacetLoader.d.mts +77 -0
  683. package/dist/src/server/serverFacetLoader.d.mts.map +1 -0
  684. package/dist/src/server/serverFacetLoader.mjs +215 -0
  685. package/dist/src/server/serverFacetLoader.mjs.map +1 -0
  686. package/dist/src/server/sessionMcpHandler.cjs +494 -0
  687. package/dist/src/server/sessionMcpHandler.cjs.map +1 -0
  688. package/dist/src/server/sessionMcpHandler.d.mts +47 -0
  689. package/dist/src/server/sessionMcpHandler.d.mts.map +1 -0
  690. package/dist/src/server/sessionMcpHandler.mjs +493 -0
  691. package/dist/src/server/sessionMcpHandler.mjs.map +1 -0
  692. package/dist/src/server/sessionMcpRoutes.cjs +780 -0
  693. package/dist/src/server/sessionMcpRoutes.cjs.map +1 -0
  694. package/dist/src/server/sessionMcpRoutes.mjs +775 -0
  695. package/dist/src/server/sessionMcpRoutes.mjs.map +1 -0
  696. package/dist/src/server/threadJournals.cjs +172 -0
  697. package/dist/src/server/threadJournals.cjs.map +1 -0
  698. package/dist/src/server/threadJournals.mjs +169 -0
  699. package/dist/src/server/threadJournals.mjs.map +1 -0
  700. package/dist/src/services/acpSessionUpdates/index.cjs +129 -0
  701. package/dist/src/services/acpSessionUpdates/index.cjs.map +1 -0
  702. package/dist/src/services/acpSessionUpdates/index.mjs +129 -0
  703. package/dist/src/services/acpSessionUpdates/index.mjs.map +1 -0
  704. package/dist/src/services/apiSurfaceAssert/index.cjs +60 -0
  705. package/dist/src/services/apiSurfaceAssert/index.cjs.map +1 -0
  706. package/dist/src/services/apiSurfaceAssert/index.d.mts +24 -0
  707. package/dist/src/services/apiSurfaceAssert/index.d.mts.map +1 -0
  708. package/dist/src/services/apiSurfaceAssert/index.mjs +60 -0
  709. package/dist/src/services/apiSurfaceAssert/index.mjs.map +1 -0
  710. package/dist/src/services/bundlePublication/index.cjs +88 -0
  711. package/dist/src/services/bundlePublication/index.cjs.map +1 -0
  712. package/dist/src/services/bundlePublication/index.mjs +85 -0
  713. package/dist/src/services/bundlePublication/index.mjs.map +1 -0
  714. package/dist/src/services/contextApiUrls/index.cjs +14 -0
  715. package/dist/src/services/contextApiUrls/index.cjs.map +1 -0
  716. package/dist/src/services/contextApiUrls/index.d.mts +6 -0
  717. package/dist/src/services/contextApiUrls/index.d.mts.map +1 -0
  718. package/dist/src/services/contextApiUrls/index.mjs +14 -0
  719. package/dist/src/services/contextApiUrls/index.mjs.map +1 -0
  720. package/dist/src/services/contextContributions/index.cjs +79 -0
  721. package/dist/src/services/contextContributions/index.cjs.map +1 -0
  722. package/dist/src/services/contextContributions/index.d.mts +6 -0
  723. package/dist/src/services/contextContributions/index.d.mts.map +1 -0
  724. package/dist/src/services/contextContributions/index.mjs +79 -0
  725. package/dist/src/services/contextContributions/index.mjs.map +1 -0
  726. package/dist/src/services/contextUsage/index.cjs +27 -0
  727. package/dist/src/services/contextUsage/index.cjs.map +1 -0
  728. package/dist/src/services/contextUsage/index.mjs +25 -0
  729. package/dist/src/services/contextUsage/index.mjs.map +1 -0
  730. package/dist/src/services/devProxyPolicy/index.cjs +168 -0
  731. package/dist/src/services/devProxyPolicy/index.cjs.map +1 -0
  732. package/dist/src/services/devProxyPolicy/index.mjs +165 -0
  733. package/dist/src/services/devProxyPolicy/index.mjs.map +1 -0
  734. package/dist/src/services/devProxyStore/index.cjs +107 -0
  735. package/dist/src/services/devProxyStore/index.cjs.map +1 -0
  736. package/dist/src/services/devProxyStore/index.mjs +104 -0
  737. package/dist/src/services/devProxyStore/index.mjs.map +1 -0
  738. package/dist/src/services/deviceAuth/index.cjs +125 -0
  739. package/dist/src/services/deviceAuth/index.cjs.map +1 -0
  740. package/dist/src/services/deviceAuth/index.d.mts +9 -0
  741. package/dist/src/services/deviceAuth/index.d.mts.map +1 -0
  742. package/dist/src/services/deviceAuth/index.mjs +125 -0
  743. package/dist/src/services/deviceAuth/index.mjs.map +1 -0
  744. package/dist/src/services/deviceSessions/index.cjs +147 -0
  745. package/dist/src/services/deviceSessions/index.cjs.map +1 -0
  746. package/dist/src/services/deviceSessions/index.d.mts +15 -0
  747. package/dist/src/services/deviceSessions/index.d.mts.map +1 -0
  748. package/dist/src/services/deviceSessions/index.mjs +141 -0
  749. package/dist/src/services/deviceSessions/index.mjs.map +1 -0
  750. package/dist/src/services/headlessClient/index.cjs +125 -0
  751. package/dist/src/services/headlessClient/index.cjs.map +1 -0
  752. package/dist/src/services/headlessClient/index.mjs +125 -0
  753. package/dist/src/services/headlessClient/index.mjs.map +1 -0
  754. package/dist/src/services/historyCreationFileSystem/index.cjs +115 -0
  755. package/dist/src/services/historyCreationFileSystem/index.cjs.map +1 -0
  756. package/dist/src/services/historyCreationFileSystem/index.mjs +115 -0
  757. package/dist/src/services/historyCreationFileSystem/index.mjs.map +1 -0
  758. package/dist/src/services/hubChannelHarness/index.cjs +50 -0
  759. package/dist/src/services/hubChannelHarness/index.cjs.map +1 -0
  760. package/dist/src/services/hubChannelHarness/index.d.mts +17 -0
  761. package/dist/src/services/hubChannelHarness/index.d.mts.map +1 -0
  762. package/dist/src/services/hubChannelHarness/index.mjs +50 -0
  763. package/dist/src/services/hubChannelHarness/index.mjs.map +1 -0
  764. package/dist/src/services/kernel/index.cjs +147 -0
  765. package/dist/src/services/kernel/index.cjs.map +1 -0
  766. package/dist/src/services/kernel/index.d.mts +9 -0
  767. package/dist/src/services/kernel/index.d.mts.map +1 -0
  768. package/dist/src/services/kernel/index.mjs +147 -0
  769. package/dist/src/services/kernel/index.mjs.map +1 -0
  770. package/dist/src/services/loginFlow/index.cjs +131 -0
  771. package/dist/src/services/loginFlow/index.cjs.map +1 -0
  772. package/dist/src/services/loginFlow/index.mjs +131 -0
  773. package/dist/src/services/loginFlow/index.mjs.map +1 -0
  774. package/dist/src/services/loopbackAddress/index.cjs +58 -0
  775. package/dist/src/services/loopbackAddress/index.cjs.map +1 -0
  776. package/dist/src/services/loopbackAddress/index.mjs +56 -0
  777. package/dist/src/services/loopbackAddress/index.mjs.map +1 -0
  778. package/dist/src/services/openSessionRegistry/index.cjs +144 -0
  779. package/dist/src/services/openSessionRegistry/index.cjs.map +1 -0
  780. package/dist/src/services/openSessionRegistry/index.d.mts +40 -0
  781. package/dist/src/services/openSessionRegistry/index.d.mts.map +1 -0
  782. package/dist/src/services/openSessionRegistry/index.mjs +141 -0
  783. package/dist/src/services/openSessionRegistry/index.mjs.map +1 -0
  784. package/dist/src/services/packageApiHarness/index.cjs +36 -0
  785. package/dist/src/services/packageApiHarness/index.cjs.map +1 -0
  786. package/dist/src/services/packageApiHarness/index.d.mts +40 -0
  787. package/dist/src/services/packageApiHarness/index.d.mts.map +1 -0
  788. package/dist/src/services/packageApiHarness/index.mjs +36 -0
  789. package/dist/src/services/packageApiHarness/index.mjs.map +1 -0
  790. package/dist/src/services/packageResource/index.cjs +54 -0
  791. package/dist/src/services/packageResource/index.cjs.map +1 -0
  792. package/dist/src/services/packageResource/index.d.mts +26 -0
  793. package/dist/src/services/packageResource/index.d.mts.map +1 -0
  794. package/dist/src/services/packageResource/index.mjs +51 -0
  795. package/dist/src/services/packageResource/index.mjs.map +1 -0
  796. package/dist/src/services/pairingFlow/index.cjs +145 -0
  797. package/dist/src/services/pairingFlow/index.cjs.map +1 -0
  798. package/dist/src/services/pairingFlow/index.d.mts +44 -0
  799. package/dist/src/services/pairingFlow/index.d.mts.map +1 -0
  800. package/dist/src/services/pairingFlow/index.mjs +145 -0
  801. package/dist/src/services/pairingFlow/index.mjs.map +1 -0
  802. package/dist/src/services/pairingPage/index.cjs +450 -0
  803. package/dist/src/services/pairingPage/index.cjs.map +1 -0
  804. package/dist/src/services/pairingPage/index.mjs +447 -0
  805. package/dist/src/services/pairingPage/index.mjs.map +1 -0
  806. package/dist/src/services/piExtensionHost/index.cjs +821 -0
  807. package/dist/src/services/piExtensionHost/index.cjs.map +1 -0
  808. package/dist/src/services/piExtensionHost/index.mjs +817 -0
  809. package/dist/src/services/piExtensionHost/index.mjs.map +1 -0
  810. package/dist/src/services/piHelpTools/index.cjs +68 -0
  811. package/dist/src/services/piHelpTools/index.cjs.map +1 -0
  812. package/dist/src/services/piHelpTools/index.d.mts +10 -0
  813. package/dist/src/services/piHelpTools/index.d.mts.map +1 -0
  814. package/dist/src/services/piHelpTools/index.mjs +68 -0
  815. package/dist/src/services/piHelpTools/index.mjs.map +1 -0
  816. package/dist/src/services/piSessionEntries/index.cjs +112 -0
  817. package/dist/src/services/piSessionEntries/index.cjs.map +1 -0
  818. package/dist/src/services/piSessionEntries/index.mjs +108 -0
  819. package/dist/src/services/piSessionEntries/index.mjs.map +1 -0
  820. package/dist/src/services/pluginLifecycle/index.cjs +71 -0
  821. package/dist/src/services/pluginLifecycle/index.cjs.map +1 -0
  822. package/dist/src/services/pluginLifecycle/index.d.mts +11 -0
  823. package/dist/src/services/pluginLifecycle/index.d.mts.map +1 -0
  824. package/dist/src/services/pluginLifecycle/index.mjs +71 -0
  825. package/dist/src/services/pluginLifecycle/index.mjs.map +1 -0
  826. package/dist/src/services/providerAuth/index.cjs +156 -0
  827. package/dist/src/services/providerAuth/index.cjs.map +1 -0
  828. package/dist/src/services/providerAuth/index.mjs +154 -0
  829. package/dist/src/services/providerAuth/index.mjs.map +1 -0
  830. package/dist/src/services/remoteAccess/index.cjs +396 -0
  831. package/dist/src/services/remoteAccess/index.cjs.map +1 -0
  832. package/dist/src/services/remoteAccess/index.d.mts +81 -0
  833. package/dist/src/services/remoteAccess/index.d.mts.map +1 -0
  834. package/dist/src/services/remoteAccess/index.mjs +396 -0
  835. package/dist/src/services/remoteAccess/index.mjs.map +1 -0
  836. package/dist/src/services/remoteAccessSettings/index.cjs +151 -0
  837. package/dist/src/services/remoteAccessSettings/index.cjs.map +1 -0
  838. package/dist/src/services/remoteAccessSettings/index.mjs +149 -0
  839. package/dist/src/services/remoteAccessSettings/index.mjs.map +1 -0
  840. package/dist/src/services/remoteAccessStore/index.cjs +126 -0
  841. package/dist/src/services/remoteAccessStore/index.cjs.map +1 -0
  842. package/dist/src/services/remoteAccessStore/index.mjs +121 -0
  843. package/dist/src/services/remoteAccessStore/index.mjs.map +1 -0
  844. package/dist/src/services/remoteGuardPolicy/index.cjs +190 -0
  845. package/dist/src/services/remoteGuardPolicy/index.cjs.map +1 -0
  846. package/dist/src/services/remoteGuardPolicy/index.d.mts +7 -0
  847. package/dist/src/services/remoteGuardPolicy/index.d.mts.map +1 -0
  848. package/dist/src/services/remoteGuardPolicy/index.mjs +186 -0
  849. package/dist/src/services/remoteGuardPolicy/index.mjs.map +1 -0
  850. package/dist/src/services/requestReceipts/index.cjs +161 -0
  851. package/dist/src/services/requestReceipts/index.cjs.map +1 -0
  852. package/dist/src/services/requestReceipts/index.d.mts +11 -0
  853. package/dist/src/services/requestReceipts/index.d.mts.map +1 -0
  854. package/dist/src/services/requestReceipts/index.mjs +161 -0
  855. package/dist/src/services/requestReceipts/index.mjs.map +1 -0
  856. package/dist/src/services/rpcTranscript/index.cjs +590 -0
  857. package/dist/src/services/rpcTranscript/index.cjs.map +1 -0
  858. package/dist/src/services/rpcTranscript/index.d.mts +50 -0
  859. package/dist/src/services/rpcTranscript/index.d.mts.map +1 -0
  860. package/dist/src/services/rpcTranscript/index.mjs +589 -0
  861. package/dist/src/services/rpcTranscript/index.mjs.map +1 -0
  862. package/dist/src/services/serverFacet/index.cjs +197 -0
  863. package/dist/src/services/serverFacet/index.cjs.map +1 -0
  864. package/dist/src/services/serverFacet/index.d.mts +31 -0
  865. package/dist/src/services/serverFacet/index.d.mts.map +1 -0
  866. package/dist/src/services/serverFacet/index.mjs +197 -0
  867. package/dist/src/services/serverFacet/index.mjs.map +1 -0
  868. package/dist/src/services/sessionGitStatus/index.cjs +46 -0
  869. package/dist/src/services/sessionGitStatus/index.cjs.map +1 -0
  870. package/dist/src/services/sessionGitStatus/index.mjs +46 -0
  871. package/dist/src/services/sessionGitStatus/index.mjs.map +1 -0
  872. package/dist/src/services/sessionGitStatus/type.d.mts +8 -0
  873. package/dist/src/services/sessionGitStatus/type.d.mts.map +1 -0
  874. package/dist/src/services/sessionMcpActivity/index.cjs +115 -0
  875. package/dist/src/services/sessionMcpActivity/index.cjs.map +1 -0
  876. package/dist/src/services/sessionMcpActivity/index.mjs +111 -0
  877. package/dist/src/services/sessionMcpActivity/index.mjs.map +1 -0
  878. package/dist/src/services/sessionMcpAuthorization/index.cjs +432 -0
  879. package/dist/src/services/sessionMcpAuthorization/index.cjs.map +1 -0
  880. package/dist/src/services/sessionMcpAuthorization/index.d.mts +123 -0
  881. package/dist/src/services/sessionMcpAuthorization/index.d.mts.map +1 -0
  882. package/dist/src/services/sessionMcpAuthorization/index.mjs +430 -0
  883. package/dist/src/services/sessionMcpAuthorization/index.mjs.map +1 -0
  884. package/dist/src/services/sessionMcpConversations/index.cjs +217 -0
  885. package/dist/src/services/sessionMcpConversations/index.cjs.map +1 -0
  886. package/dist/src/services/sessionMcpConversations/index.mjs +212 -0
  887. package/dist/src/services/sessionMcpConversations/index.mjs.map +1 -0
  888. package/dist/src/services/sessionMcpRegistrationStore/index.cjs +86 -0
  889. package/dist/src/services/sessionMcpRegistrationStore/index.cjs.map +1 -0
  890. package/dist/src/services/sessionMcpRegistrationStore/index.mjs +83 -0
  891. package/dist/src/services/sessionMcpRegistrationStore/index.mjs.map +1 -0
  892. package/dist/src/services/sessionPresentation/index.cjs +119 -0
  893. package/dist/src/services/sessionPresentation/index.cjs.map +1 -0
  894. package/dist/src/services/sessionPresentation/index.mjs +119 -0
  895. package/dist/src/services/sessionPresentation/index.mjs.map +1 -0
  896. package/dist/src/services/sqliteSessionHistory/index.cjs +105 -0
  897. package/dist/src/services/sqliteSessionHistory/index.cjs.map +1 -0
  898. package/dist/src/services/sqliteSessionHistory/index.d.mts +29 -0
  899. package/dist/src/services/sqliteSessionHistory/index.d.mts.map +1 -0
  900. package/dist/src/services/sqliteSessionHistory/index.mjs +100 -0
  901. package/dist/src/services/sqliteSessionHistory/index.mjs.map +1 -0
  902. package/dist/src/services/sqliteTranscriptReader/index.cjs +70 -0
  903. package/dist/src/services/sqliteTranscriptReader/index.cjs.map +1 -0
  904. package/dist/src/services/sqliteTranscriptReader/index.d.mts +14 -0
  905. package/dist/src/services/sqliteTranscriptReader/index.d.mts.map +1 -0
  906. package/dist/src/services/sqliteTranscriptReader/index.mjs +67 -0
  907. package/dist/src/services/sqliteTranscriptReader/index.mjs.map +1 -0
  908. package/dist/src/services/toolCost/index.cjs +47 -0
  909. package/dist/src/services/toolCost/index.cjs.map +1 -0
  910. package/dist/src/services/toolCost/index.d.mts +38 -0
  911. package/dist/src/services/toolCost/index.d.mts.map +1 -0
  912. package/dist/src/services/toolCost/index.mjs +46 -0
  913. package/dist/src/services/toolCost/index.mjs.map +1 -0
  914. package/dist/src/services/toolOverrides/index.cjs +45 -0
  915. package/dist/src/services/toolOverrides/index.cjs.map +1 -0
  916. package/dist/src/services/toolOverrides/index.d.mts +6 -0
  917. package/dist/src/services/toolOverrides/index.d.mts.map +1 -0
  918. package/dist/src/services/toolOverrides/index.mjs +45 -0
  919. package/dist/src/services/toolOverrides/index.mjs.map +1 -0
  920. package/dist/src/services/toolPrompt/index.cjs +13 -0
  921. package/dist/src/services/toolPrompt/index.cjs.map +1 -0
  922. package/dist/src/services/toolPrompt/index.mjs +13 -0
  923. package/dist/src/services/toolPrompt/index.mjs.map +1 -0
  924. package/dist/src/services/toolSurface/index.cjs +134 -0
  925. package/dist/src/services/toolSurface/index.cjs.map +1 -0
  926. package/dist/src/services/toolSurface/index.d.mts +19 -0
  927. package/dist/src/services/toolSurface/index.d.mts.map +1 -0
  928. package/dist/src/services/toolSurface/index.mjs +134 -0
  929. package/dist/src/services/toolSurface/index.mjs.map +1 -0
  930. package/dist/src/services/traceContext/index.cjs +13 -0
  931. package/dist/src/services/traceContext/index.cjs.map +1 -0
  932. package/dist/src/services/traceContext/index.mjs +13 -0
  933. package/dist/src/services/traceContext/index.mjs.map +1 -0
  934. package/dist/src/services/transcriptPages/index.cjs +74 -0
  935. package/dist/src/services/transcriptPages/index.cjs.map +1 -0
  936. package/dist/src/services/transcriptPages/index.mjs +73 -0
  937. package/dist/src/services/transcriptPages/index.mjs.map +1 -0
  938. package/dist/src/services/tunnelOutput/index.cjs +58 -0
  939. package/dist/src/services/tunnelOutput/index.cjs.map +1 -0
  940. package/dist/src/services/tunnelOutput/index.mjs +54 -0
  941. package/dist/src/services/tunnelOutput/index.mjs.map +1 -0
  942. package/dist/src/services/tunnelProcess/index.cjs +487 -0
  943. package/dist/src/services/tunnelProcess/index.cjs.map +1 -0
  944. package/dist/src/services/tunnelProcess/index.mjs +481 -0
  945. package/dist/src/services/tunnelProcess/index.mjs.map +1 -0
  946. package/dist/src/services/voiceReloadHandoff/index.cjs +136 -0
  947. package/dist/src/services/voiceReloadHandoff/index.cjs.map +1 -0
  948. package/dist/src/services/voiceReloadHandoff/index.d.mts +34 -0
  949. package/dist/src/services/voiceReloadHandoff/index.d.mts.map +1 -0
  950. package/dist/src/services/voiceReloadHandoff/index.mjs +135 -0
  951. package/dist/src/services/voiceReloadHandoff/index.mjs.map +1 -0
  952. package/dist/src/services/voiceToolsContract/index.cjs +26 -0
  953. package/dist/src/services/voiceToolsContract/index.cjs.map +1 -0
  954. package/dist/src/services/voiceToolsContract/index.d.mts +76 -0
  955. package/dist/src/services/voiceToolsContract/index.d.mts.map +1 -0
  956. package/dist/src/services/voiceToolsContract/index.mjs +24 -0
  957. package/dist/src/services/voiceToolsContract/index.mjs.map +1 -0
  958. package/dist/src/services/webauthn/index.cjs +262 -0
  959. package/dist/src/services/webauthn/index.cjs.map +1 -0
  960. package/dist/src/services/webauthn/index.d.mts +39 -0
  961. package/dist/src/services/webauthn/index.d.mts.map +1 -0
  962. package/dist/src/services/webauthn/index.mjs +262 -0
  963. package/dist/src/services/webauthn/index.mjs.map +1 -0
  964. package/dist/src/services/webauthnPolicy/index.cjs +163 -0
  965. package/dist/src/services/webauthnPolicy/index.cjs.map +1 -0
  966. package/dist/src/services/webauthnPolicy/index.d.mts +41 -0
  967. package/dist/src/services/webauthnPolicy/index.d.mts.map +1 -0
  968. package/dist/src/services/webauthnPolicy/index.mjs +156 -0
  969. package/dist/src/services/webauthnPolicy/index.mjs.map +1 -0
  970. package/dist/src/services/workspaceRegistry/index.cjs +151 -0
  971. package/dist/src/services/workspaceRegistry/index.cjs.map +1 -0
  972. package/dist/src/services/workspaceRegistry/index.d.mts +47 -0
  973. package/dist/src/services/workspaceRegistry/index.d.mts.map +1 -0
  974. package/dist/src/services/workspaceRegistry/index.mjs +144 -0
  975. package/dist/src/services/workspaceRegistry/index.mjs.map +1 -0
  976. package/dist/src/systems/child/adapters/headlessChildSessionService.cjs +261 -0
  977. package/dist/src/systems/child/adapters/headlessChildSessionService.cjs.map +1 -0
  978. package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts +32 -0
  979. package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts.map +1 -0
  980. package/dist/src/systems/child/adapters/headlessChildSessionService.mjs +254 -0
  981. package/dist/src/systems/child/adapters/headlessChildSessionService.mjs.map +1 -0
  982. package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs +28 -0
  983. package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs.map +1 -0
  984. package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs +25 -0
  985. package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs.map +1 -0
  986. package/dist/src/systems/child/services/childSession/index.cjs +219 -0
  987. package/dist/src/systems/child/services/childSession/index.cjs.map +1 -0
  988. package/dist/src/systems/child/services/childSession/index.d.mts +14 -0
  989. package/dist/src/systems/child/services/childSession/index.d.mts.map +1 -0
  990. package/dist/src/systems/child/services/childSession/index.mjs +219 -0
  991. package/dist/src/systems/child/services/childSession/index.mjs.map +1 -0
  992. package/dist/src/systems/child/types/childSession.cjs +19 -0
  993. package/dist/src/systems/child/types/childSession.cjs.map +1 -0
  994. package/dist/src/systems/child/types/childSession.d.mts +148 -0
  995. package/dist/src/systems/child/types/childSession.d.mts.map +1 -0
  996. package/dist/src/systems/child/types/childSession.mjs +16 -0
  997. package/dist/src/systems/child/types/childSession.mjs.map +1 -0
  998. package/dist/src/systems/main/adapters/headlessHost.cjs +554 -0
  999. package/dist/src/systems/main/adapters/headlessHost.cjs.map +1 -0
  1000. package/dist/src/systems/main/adapters/headlessHost.d.mts +111 -0
  1001. package/dist/src/systems/main/adapters/headlessHost.d.mts.map +1 -0
  1002. package/dist/src/systems/main/adapters/headlessHost.mjs +552 -0
  1003. package/dist/src/systems/main/adapters/headlessHost.mjs.map +1 -0
  1004. package/dist/src/systems/main/adapters/headlessSessionHost.cjs +1293 -0
  1005. package/dist/src/systems/main/adapters/headlessSessionHost.cjs.map +1 -0
  1006. package/dist/src/systems/main/adapters/headlessSessionHost.d.mts +14 -0
  1007. package/dist/src/systems/main/adapters/headlessSessionHost.d.mts.map +1 -0
  1008. package/dist/src/systems/main/adapters/headlessSessionHost.mjs +1288 -0
  1009. package/dist/src/systems/main/adapters/headlessSessionHost.mjs.map +1 -0
  1010. package/dist/src/systems/main/types/headlessHost.d.mts +36 -0
  1011. package/dist/src/systems/main/types/headlessHost.d.mts.map +1 -0
  1012. package/dist/src/testing/pi/extensionScenarios.cjs +73 -0
  1013. package/dist/src/testing/pi/extensionScenarios.cjs.map +1 -0
  1014. package/dist/src/testing/pi/extensionScenarios.d.mts +41 -0
  1015. package/dist/src/testing/pi/extensionScenarios.d.mts.map +1 -0
  1016. package/dist/src/testing/pi/extensionScenarios.mjs +73 -0
  1017. package/dist/src/testing/pi/extensionScenarios.mjs.map +1 -0
  1018. package/dist/src/testing/pi/testHost.cjs +398 -0
  1019. package/dist/src/testing/pi/testHost.cjs.map +1 -0
  1020. package/dist/src/testing/pi/testHost.d.mts +160 -0
  1021. package/dist/src/testing/pi/testHost.d.mts.map +1 -0
  1022. package/dist/src/testing/pi/testHost.mjs +398 -0
  1023. package/dist/src/testing/pi/testHost.mjs.map +1 -0
  1024. package/dist/src/types/config.d.mts +20 -0
  1025. package/dist/src/types/config.d.mts.map +1 -0
  1026. package/dist/src/types/kernel.d.mts +69 -0
  1027. package/dist/src/types/kernel.d.mts.map +1 -0
  1028. package/dist/src/types/remote.d.mts +124 -0
  1029. package/dist/src/types/remote.d.mts.map +1 -0
  1030. package/dist/src/types/server/directHarnessRuntime.d.mts +209 -0
  1031. package/dist/src/types/server/directHarnessRuntime.d.mts.map +1 -0
  1032. package/dist/src/types/server/session.d.mts +5 -0
  1033. package/dist/src/types/server/session.d.mts.map +1 -0
  1034. package/dist/src/types/server/sessionToolSurface.d.mts +44 -0
  1035. package/dist/src/types/server/sessionToolSurface.d.mts.map +1 -0
  1036. package/dist/src/web/models/globalStore.cjs +23 -0
  1037. package/dist/src/web/models/globalStore.cjs.map +1 -0
  1038. package/dist/src/web/models/globalStore.d.mts +6 -0
  1039. package/dist/src/web/models/globalStore.d.mts.map +1 -0
  1040. package/dist/src/web/models/globalStore.mjs +23 -0
  1041. package/dist/src/web/models/globalStore.mjs.map +1 -0
  1042. package/dist/src/web/models/sessionStore.cjs +56 -0
  1043. package/dist/src/web/models/sessionStore.cjs.map +1 -0
  1044. package/dist/src/web/models/sessionStore.d.mts +14 -0
  1045. package/dist/src/web/models/sessionStore.d.mts.map +1 -0
  1046. package/dist/src/web/models/sessionStore.mjs +56 -0
  1047. package/dist/src/web/models/sessionStore.mjs.map +1 -0
  1048. package/dist/src/web/models/workspaceStore.cjs +50 -0
  1049. package/dist/src/web/models/workspaceStore.cjs.map +1 -0
  1050. package/dist/src/web/models/workspaceStore.d.mts +18 -0
  1051. package/dist/src/web/models/workspaceStore.d.mts.map +1 -0
  1052. package/dist/src/web/models/workspaceStore.mjs +50 -0
  1053. package/dist/src/web/models/workspaceStore.mjs.map +1 -0
  1054. package/dist/src/web/schemas/bundleAssetPolicy.cjs +20 -0
  1055. package/dist/src/web/schemas/bundleAssetPolicy.cjs.map +1 -0
  1056. package/dist/src/web/schemas/bundleAssetPolicy.d.mts +10 -0
  1057. package/dist/src/web/schemas/bundleAssetPolicy.d.mts.map +1 -0
  1058. package/dist/src/web/schemas/bundleAssetPolicy.mjs +18 -0
  1059. package/dist/src/web/schemas/bundleAssetPolicy.mjs.map +1 -0
  1060. package/dist/src/web/schemas/template.cjs +15 -0
  1061. package/dist/src/web/schemas/template.cjs.map +1 -0
  1062. package/dist/src/web/schemas/template.d.mts +6 -0
  1063. package/dist/src/web/schemas/template.d.mts.map +1 -0
  1064. package/dist/src/web/schemas/template.mjs +15 -0
  1065. package/dist/src/web/schemas/template.mjs.map +1 -0
  1066. package/dist/src/web/services/apiClient/index.cjs +156 -0
  1067. package/dist/src/web/services/apiClient/index.cjs.map +1 -0
  1068. package/dist/src/web/services/apiClient/index.d.mts +152 -0
  1069. package/dist/src/web/services/apiClient/index.d.mts.map +1 -0
  1070. package/dist/src/web/services/apiClient/index.mjs +154 -0
  1071. package/dist/src/web/services/apiClient/index.mjs.map +1 -0
  1072. package/dist/src/web/services/apiPaths/index.cjs +83 -0
  1073. package/dist/src/web/services/apiPaths/index.cjs.map +1 -0
  1074. package/dist/src/web/services/apiPaths/index.d.mts +81 -0
  1075. package/dist/src/web/services/apiPaths/index.d.mts.map +1 -0
  1076. package/dist/src/web/services/apiPaths/index.mjs +78 -0
  1077. package/dist/src/web/services/apiPaths/index.mjs.map +1 -0
  1078. package/dist/src/web/services/apiRoutes/index.cjs +47 -0
  1079. package/dist/src/web/services/apiRoutes/index.cjs.map +1 -0
  1080. package/dist/src/web/services/apiRoutes/index.d.mts +21 -0
  1081. package/dist/src/web/services/apiRoutes/index.d.mts.map +1 -0
  1082. package/dist/src/web/services/apiRoutes/index.mjs +43 -0
  1083. package/dist/src/web/services/apiRoutes/index.mjs.map +1 -0
  1084. package/dist/src/web/services/mcpWidget.cjs +9 -0
  1085. package/dist/src/web/services/mcpWidget.cjs.map +1 -0
  1086. package/dist/src/web/services/mcpWidget.d.mts +6 -0
  1087. package/dist/src/web/services/mcpWidget.d.mts.map +1 -0
  1088. package/dist/src/web/services/mcpWidget.mjs +9 -0
  1089. package/dist/src/web/services/mcpWidget.mjs.map +1 -0
  1090. package/dist/src/web/services/sessionRegistry/index.cjs +70 -0
  1091. package/dist/src/web/services/sessionRegistry/index.cjs.map +1 -0
  1092. package/dist/src/web/services/sessionRegistry/index.d.mts +29 -0
  1093. package/dist/src/web/services/sessionRegistry/index.d.mts.map +1 -0
  1094. package/dist/src/web/services/sessionRegistry/index.mjs +66 -0
  1095. package/dist/src/web/services/sessionRegistry/index.mjs.map +1 -0
  1096. package/dist/src/web/services/testing/channels.cjs +11 -0
  1097. package/dist/src/web/services/testing/channels.cjs.map +1 -0
  1098. package/dist/src/web/services/testing/channels.d.mts +8 -0
  1099. package/dist/src/web/services/testing/channels.d.mts.map +1 -0
  1100. package/dist/src/web/services/testing/channels.mjs +11 -0
  1101. package/dist/src/web/services/testing/channels.mjs.map +1 -0
  1102. package/dist/src/web/services/testing/index.cjs +27 -0
  1103. package/dist/src/web/services/testing/index.cjs.map +1 -0
  1104. package/dist/src/web/services/testing/index.d.mts +31 -0
  1105. package/dist/src/web/services/testing/index.d.mts.map +1 -0
  1106. package/dist/src/web/services/testing/index.mjs +27 -0
  1107. package/dist/src/web/services/testing/index.mjs.map +1 -0
  1108. package/dist/src/web/services/testing/rpcStub.cjs +58 -0
  1109. package/dist/src/web/services/testing/rpcStub.cjs.map +1 -0
  1110. package/dist/src/web/services/testing/rpcStub.d.mts +37 -0
  1111. package/dist/src/web/services/testing/rpcStub.d.mts.map +1 -0
  1112. package/dist/src/web/services/testing/rpcStub.mjs +58 -0
  1113. package/dist/src/web/services/testing/rpcStub.mjs.map +1 -0
  1114. package/dist/src/web/services/testing/slotProps.cjs +91 -0
  1115. package/dist/src/web/services/testing/slotProps.cjs.map +1 -0
  1116. package/dist/src/web/services/testing/slotProps.d.mts +69 -0
  1117. package/dist/src/web/services/testing/slotProps.d.mts.map +1 -0
  1118. package/dist/src/web/services/testing/slotProps.mjs +90 -0
  1119. package/dist/src/web/services/testing/slotProps.mjs.map +1 -0
  1120. package/dist/src/web/services/testing/templateRail.cjs +128 -0
  1121. package/dist/src/web/services/testing/templateRail.cjs.map +1 -0
  1122. package/dist/src/web/services/testing/templateRail.d.mts +31 -0
  1123. package/dist/src/web/services/testing/templateRail.d.mts.map +1 -0
  1124. package/dist/src/web/services/testing/templateRail.mjs +126 -0
  1125. package/dist/src/web/services/testing/templateRail.mjs.map +1 -0
  1126. package/dist/src/web/services/toolResult/index.cjs +30 -0
  1127. package/dist/src/web/services/toolResult/index.cjs.map +1 -0
  1128. package/dist/src/web/services/toolResult/index.d.mts +14 -0
  1129. package/dist/src/web/services/toolResult/index.d.mts.map +1 -0
  1130. package/dist/src/web/services/toolResult/index.mjs +29 -0
  1131. package/dist/src/web/services/toolResult/index.mjs.map +1 -0
  1132. package/dist/src/web/types/extensionFile.d.mts +59 -0
  1133. package/dist/src/web/types/extensionFile.d.mts.map +1 -0
  1134. package/dist/src/web/types/mcpWidget.d.mts +14 -0
  1135. package/dist/src/web/types/mcpWidget.d.mts.map +1 -0
  1136. package/dist/src/web/types/modelContext.d.mts +43 -0
  1137. package/dist/src/web/types/modelContext.d.mts.map +1 -0
  1138. package/dist/src/web/types/sessionRegistry.d.mts +43 -0
  1139. package/dist/src/web/types/sessionRegistry.d.mts.map +1 -0
  1140. package/dist/src/web/types/template.d.mts +155 -0
  1141. package/dist/src/web/types/template.d.mts.map +1 -0
  1142. package/dist/src/web/types/webPlugin.d.mts +896 -0
  1143. package/dist/src/web/types/webPlugin.d.mts.map +1 -0
  1144. package/dist/syncLocation.cjs +244 -0
  1145. package/dist/syncLocation.cjs.map +1 -0
  1146. package/dist/syncLocation.d.mts +37 -0
  1147. package/dist/syncLocation.d.mts.map +1 -0
  1148. package/dist/syncLocation.mjs +231 -0
  1149. package/dist/syncLocation.mjs.map +1 -0
  1150. package/dist/syncRegistration.cjs +171 -0
  1151. package/dist/syncRegistration.cjs.map +1 -0
  1152. package/dist/syncRegistration.d.mts +48 -0
  1153. package/dist/syncRegistration.d.mts.map +1 -0
  1154. package/dist/syncRegistration.mjs +159 -0
  1155. package/dist/syncRegistration.mjs.map +1 -0
  1156. package/dist/syncStateContract.cjs +19 -0
  1157. package/dist/syncStateContract.cjs.map +1 -0
  1158. package/dist/syncStateContract.d.mts +14 -0
  1159. package/dist/syncStateContract.d.mts.map +1 -0
  1160. package/dist/syncStateContract.mjs +16 -0
  1161. package/dist/syncStateContract.mjs.map +1 -0
  1162. package/dist/terminalPiChildSessionService.cjs +267 -0
  1163. package/dist/terminalPiChildSessionService.cjs.map +1 -0
  1164. package/dist/terminalPiChildSessionService.d.mts +42 -0
  1165. package/dist/terminalPiChildSessionService.d.mts.map +1 -0
  1166. package/dist/terminalPiChildSessionService.mjs +260 -0
  1167. package/dist/terminalPiChildSessionService.mjs.map +1 -0
  1168. package/dist/testing.cjs +11 -0
  1169. package/dist/testing.d.mts +6 -0
  1170. package/dist/testing.mjs +6 -0
  1171. package/dist/toolInventory.cjs +136 -0
  1172. package/dist/toolInventory.cjs.map +1 -0
  1173. package/dist/toolInventory.d.mts +66 -0
  1174. package/dist/toolInventory.d.mts.map +1 -0
  1175. package/dist/toolInventory.mjs +133 -0
  1176. package/dist/toolInventory.mjs.map +1 -0
  1177. package/dist/toolNames.cjs +4 -0
  1178. package/dist/toolNames.d.mts +2 -0
  1179. package/dist/toolNames.mjs +2 -0
  1180. package/dist/toolOverrides.cjs +7 -0
  1181. package/dist/toolOverrides.d.mts +3 -0
  1182. package/dist/toolOverrides.mjs +3 -0
  1183. package/dist/toolSurface.cjs +7 -0
  1184. package/dist/toolSurface.d.mts +3 -0
  1185. package/dist/toolSurface.mjs +3 -0
  1186. package/dist/transition.cjs +5 -0
  1187. package/dist/transition.d.cjs +5 -0
  1188. package/dist/transition.d.mts +2 -0
  1189. package/dist/transition.mjs +2 -0
  1190. package/dist/transitionClassifier.cjs +112 -0
  1191. package/dist/transitionClassifier.cjs.map +1 -0
  1192. package/dist/transitionClassifier.d.mts +18 -0
  1193. package/dist/transitionClassifier.d.mts.map +1 -0
  1194. package/dist/transitionClassifier.mjs +111 -0
  1195. package/dist/transitionClassifier.mjs.map +1 -0
  1196. package/dist/transitionCoordinator.cjs +131 -0
  1197. package/dist/transitionCoordinator.cjs.map +1 -0
  1198. package/dist/transitionCoordinator.d.mts +16 -0
  1199. package/dist/transitionCoordinator.d.mts.map +1 -0
  1200. package/dist/transitionCoordinator.mjs +130 -0
  1201. package/dist/transitionCoordinator.mjs.map +1 -0
  1202. package/dist/typesContextApi.cjs +0 -0
  1203. package/dist/typesContextApi.d.mts +73 -0
  1204. package/dist/typesContextApi.d.mts.map +1 -0
  1205. package/dist/typesContextApi.mjs +1 -0
  1206. package/dist/uiHub.cjs +5 -0
  1207. package/dist/uiHub.d.mts +2 -0
  1208. package/dist/uiHub.mjs +2 -0
  1209. package/dist/v3Export.cjs +1004 -0
  1210. package/dist/v3Export.cjs.map +1 -0
  1211. package/dist/v3Export.d.mts +34 -0
  1212. package/dist/v3Export.d.mts.map +1 -0
  1213. package/dist/v3Export.mjs +1000 -0
  1214. package/dist/v3Export.mjs.map +1 -0
  1215. package/dist/voiceReloadHandoff.cjs +14 -0
  1216. package/dist/voiceReloadHandoff.d.mts +4 -0
  1217. package/dist/voiceReloadHandoff.mjs +4 -0
  1218. package/dist/voiceTools.cjs +56 -0
  1219. package/dist/voiceTools.d.mts +4 -0
  1220. package/dist/voiceTools.mjs +4 -0
  1221. package/dist/web.cjs +64 -0
  1222. package/dist/web.d.mts +19 -0
  1223. package/dist/web.mjs +13 -0
  1224. package/dist/webCompositions.cjs +100 -0
  1225. package/dist/webCompositions.cjs.map +1 -0
  1226. package/dist/webCompositions.d.mts +20 -0
  1227. package/dist/webCompositions.d.mts.map +1 -0
  1228. package/dist/webCompositions.mjs +95 -0
  1229. package/dist/webCompositions.mjs.map +1 -0
  1230. package/dist/webTesting.cjs +14 -0
  1231. package/dist/webTesting.d.mts +6 -0
  1232. package/dist/webTesting.mjs +6 -0
  1233. package/package.json +616 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/piExtensionHost/index.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport { isDeepStrictEqual } from 'node:util';\n\nimport type {\n AgentHarnessTool,\n AgentMessage,\n CompactionPreparation as HarnessCompactionPreparation,\n Entry,\n HarnessEvent,\n HookMap,\n JsonValue,\n Skill,\n ThinkingLevel,\n} from '@earendil-works/pi-agent-core';\nimport type { Api, Message, Model } from '@earendil-works/pi-ai';\nimport {\n createEventBus,\n DefaultPackageManager,\n discoverAndLoadExtensions,\n ExtensionRunner,\n ModelRegistry,\n initTheme,\n loadSkills,\n SessionManager,\n sessionEntryToContextMessages,\n type CompactionEntry,\n type BoundaryContextPreview,\n type CompactionResult,\n type SessionBeforeCompactEvent,\n type Extension,\n type ExtensionActions,\n type ExtensionContextActions,\n type ExtensionUIContext,\n type LoadExtensionsResult,\n type ModelRuntime,\n type RegisteredTool,\n type SessionEntry,\n type SettingsManager,\n type ToolInfo,\n} from '@earendil-works/pi-coding-agent';\n\nimport {\n toDoomHeadlessToolResult,\n type DoomHeadlessClient,\n type DoomHeadlessClientRequest,\n type DoomHeadlessToolResult,\n} from '../../exports/headless';\nimport {\n connectDoomCordisHost,\n DOOM_CORDIS_SERVER_SERVICES,\n type DoomCordisHostConnection,\n type DoomCordisServerServices,\n} from '../../pi/cordisHost';\nimport { contextTokensOf, contextUsageOf, latestAssistantUsage } from '../../services/contextUsage';\nimport {\n fromPiSessionEntry,\n toPiFileEntries,\n toPiSessionEntries,\n toPiSessionEntry,\n type PiSessionHeaderInput,\n} from '../../services/piSessionEntries';\nimport { readSyncRegistration } from '../../services/syncRegistration';\nimport type { ToolPromptEntry } from '../../services/toolPrompt';\nimport type { DirectHarnessRuntime } from '../../types/server/directHarnessRuntime';\n\n/**\n * Pi entries for this worktree, taken from the validated sync registration.\n *\n * This is the same admission gate Pi's own managed dispatcher applies: the registration is\n * checked for protocol version, worktree identity, state hash, and manifest agreement before\n * any entry is returned. An unsynced or mismatched worktree contributes nothing.\n */\nexport function resolvePiExtensionEntries(repoRoot: string): readonly string[] {\n try {\n const registration = readSyncRegistration(repoRoot);\n return registration ? [registration.package.entry] : [];\n } catch {\n // A stale or mismatched registration is a normal unsynced state, not a session failure.\n return [];\n }\n}\n\n/**\n * Extension entries of the packages listed under `packages` in Pi's settings.json.\n *\n * Interactive Pi expands that list through its resource loader, which this server does not run,\n * so a provider package such as a local Claude Code bridge would load under `pi` and be missing\n * here. Only `packages` entries are taken: Pi's top-level `extensions` list can name DoomPi\n * itself, and the auto-discovered `extensions/` folders are already loaded by\n * `discoverAndLoadExtensions`. A package that is not installed is skipped, never installed, so\n * starting a session cannot trigger a network install.\n */\nexport async function resolvePiSettingsPackageEntries(options: {\n readonly cwd: string;\n readonly agentDir: string;\n readonly settings: SettingsManager;\n readonly onNotice?: (message: string) => void;\n}): Promise<readonly string[]> {\n try {\n const packages = new DefaultPackageManager({\n cwd: options.cwd,\n agentDir: options.agentDir,\n settingsManager: options.settings,\n });\n const resolved = await packages.resolve(async (source) => {\n options.onNotice?.(`Pi package ${source} is not installed; skipped. Install it with pi to load it here.`);\n return 'skip';\n });\n return resolved.extensions\n .filter((resource) => resource.enabled && resource.metadata.origin === 'package')\n .map((resource) => resource.path);\n } catch (error) {\n // Settings packages are optional additions; a broken entry must not stop the session.\n options.onNotice?.(`Pi settings packages: ${error instanceof Error ? error.message : String(error)}`);\n return [];\n }\n}\n\n/**\n * Load Pi extensions and apply their provider registrations to the model runtime.\n *\n * `pi.registerProvider` only queues into the extension runtime while extensions load; Pi drains\n * that queue in `ExtensionRunner.bindCore`. The runner cannot exist before the harness runtime,\n * and the harness runtime is built from an already-resolved model, so waiting for `bindCore`\n * would resolve the session's default model before extension providers exist and silently fall\n * back to the first available model. Draining the queue here puts provider registration ahead of\n * model resolution.\n *\n * The result is returned so `createPiExtensionHost` reuses it instead of discovering again, which\n * keeps every extension factory running exactly once.\n */\nexport async function preloadPiExtensions(options: {\n readonly cwd: string;\n readonly agentDir: string;\n readonly models: ModelRuntime;\n readonly extensionPaths: readonly string[];\n readonly onNotice?: (message: string) => void;\n}): Promise<(LoadExtensionsResult & { readonly events?: ReturnType<typeof createEventBus> }) | undefined> {\n if (options.extensionPaths.length === 0) return undefined;\n\n const events = createEventBus();\n const result = await discoverAndLoadExtensions([...options.extensionPaths], options.cwd, options.agentDir, events);\n for (const failure of result.errors) options.onNotice?.(`Pi extension ${failure.path}: ${failure.error}`);\n\n // The same target bindCore uses: without providerActions it registers through ModelRegistry,\n // which delegates to this ModelRuntime.\n const registry = new ModelRegistry(options.models);\n const report = (extensionPath: string, error: unknown): void =>\n options.onNotice?.(\n `Pi extension ${extensionPath}: provider registration failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n\n for (const pending of result.runtime.pendingProviderRegistrations) {\n try {\n registry.registerProvider(pending.name, pending.config);\n } catch (error) {\n report(pending.extensionPath, error);\n }\n }\n for (const pending of result.runtime.pendingNativeProviderRegistrations) {\n try {\n registry.registerProvider(pending.provider);\n } catch (error) {\n report(pending.extensionPath, error);\n }\n }\n // Cleared so bindCore does not repeat registrations already applied to the same runtime.\n result.runtime.pendingProviderRegistrations = [];\n result.runtime.pendingNativeProviderRegistrations = [];\n\n return Object.assign(result, { events });\n}\n/**\n * Pi native extensions are session lifetime. They contribute tools once and are never\n * retracted, so they are merged at the harness apply boundary rather than contributed to the\n * headless kernel, whose active layers come solely from server bundle candidates and would\n * drop any owner that is not a declared facet package.\n *\n * Their event handlers are a second surface. Pi drives them from an interactive\n * AgentSession this server does not run, so the handful the harness can speak to\n * faithfully are bridged here: the two agent-loop notifications an extension needs\n * to observe a turn, and the three hooks that let one shape or replace context.\n * Everything else stays undelivered rather than being approximated.\n */\nexport interface PiExtensionHostOptions {\n readonly cwd: string;\n readonly agentDir: string;\n readonly models: ModelRuntime;\n /** Backs Pi's `getSettings()`, the same manager that resolved the settings packages. */\n readonly settings: SettingsManager;\n readonly runtime: DirectHarnessRuntime;\n /**\n * Extensions already loaded by `preloadPiExtensions`, or undefined when this worktree\n * contributes none. Reused rather than re-discovered so each factory runs exactly once.\n */\n readonly preload: (LoadExtensionsResult & { readonly events?: ReturnType<typeof createEventBus> }) | undefined;\n /** Current model, tracked by the caller because harness session metadata does not carry it. */\n readonly getModel: () => Model<Api> | undefined;\n readonly getThinkingLevel: () => ThinkingLevel;\n /**\n * Resolved at call time, because the host is constructed while the session is still assembling.\n * Backs Pi's extension dialogs, notifications and status text.\n */\n readonly client: () => DoomHeadlessClient | undefined;\n /** Borrow services from this session only, never from another conversation. */\n readonly serverServices?: DoomCordisServerServices;\n readonly onNotice?: (message: string) => void;\n /**\n * Called when a Pi extension tool restriction changes the active set.\n *\n * Doom extensions register their restrictions asynchronously, after the first tool apply has\n * already run, so the caller has to re-apply rather than read `tools` once at load.\n */\n readonly onActiveToolsChanged?: () => void;\n}\n\nexport interface PiExtensionHost {\n /** Session lifetime tools contributed by Pi extensions, in load order. */\n readonly tools: readonly AgentHarnessTool<object | undefined>[];\n /**\n * System-prompt guidance for those same tools, in the same order.\n *\n * `AgentHarnessTool` has no field for it, so it cannot ride on the harness\n * tool the way it does on a Pi extension definition, and the headless host\n * renders it into the prompt itself.\n */\n readonly toolGuidance: readonly ToolPromptEntry[];\n /** Session lifetime skills contributed by Pi extensions, in discovery order. */\n readonly skills: readonly Skill[];\n executeTool(\n name: string,\n toolCallId: string,\n parameters: Record<string, unknown>,\n signal?: AbortSignal,\n onUpdate?: (result: DoomHeadlessToolResult) => void,\n ): Promise<DoomHeadlessToolResult>;\n /**\n * Pi's `context` event, as one step in the host's transform chain.\n *\n * Returns the messages unchanged when no extension is loaded, so the caller can\n * chain it unconditionally.\n */\n transformContext(messages: AgentMessage[]): Promise<AgentMessage[]>;\n /** Pi's `session_before_compact` event, translated into the harness hook's answer. */\n beforeCompaction(event: HookMap['before_compaction']['event']): Promise<HookMap['before_compaction']['result']>;\n /** Reads a session service from the Pi Cordis root without exposing registration APIs. */\n getService<T>(name: string): T | undefined;\n load(): Promise<void>;\n shutdown(): Promise<void>;\n}\n/** Pi does not export the preparation type on its own, only through the event that carries it. */\ntype PiCompactionPreparation = SessionBeforeCompactEvent['preparation'];\n\n/**\n * The compaction boundary, named the way Pi names it.\n *\n * Pi identifies the cut by the first entry it keeps; the harness carries the kept\n * messages inline instead. Counting whole entries back from the tip until the kept\n * messages are covered recovers the id, and {@link retainedTailFrom} is its exact\n * inverse, so an extension that echoes the id it was given gets its own tail back.\n */\nfunction boundaryEntryId(branchEntries: readonly SessionEntry[], retainedCount: number): string | undefined {\n let remaining = retainedCount;\n for (let index = branchEntries.length - 1; index >= 0; index -= 1) {\n const entry = branchEntries[index];\n if (entry === undefined) continue;\n if (remaining <= 0) return entry.id;\n remaining -= sessionEntryToContextMessages(entry).length;\n if (remaining <= 0) return entry.id;\n }\n return branchEntries[0]?.id;\n}\n\n/** The messages an entry id keeps, which is what the harness stores on the compaction entry. */\nfunction retainedTailFrom(branchEntries: readonly SessionEntry[], firstKeptEntryId: string): AgentMessage[] {\n const index = branchEntries.findIndex((entry) => entry.id === firstKeptEntryId);\n if (index === -1) return [];\n return branchEntries.slice(index).flatMap((entry) => sessionEntryToContextMessages(entry));\n}\n\nfunction toPiCompactionPreparation(\n preparation: HarnessCompactionPreparation,\n branchEntries: readonly SessionEntry[],\n): PiCompactionPreparation {\n return {\n firstKeptEntryId: boundaryEntryId(branchEntries, preparation.retainedTail.length) ?? '',\n messagesToSummarize: preparation.messagesToSummarize,\n turnPrefixMessages: preparation.turnPrefixMessages,\n isSplitTurn: preparation.isSplitTurn,\n tokensBefore: preparation.tokensBefore,\n ...(preparation.previousSummary === undefined ? {} : { previousSummary: preparation.previousSummary }),\n fileOps: preparation.fileOps,\n settings: preparation.settings,\n };\n}\n\nfunction toHarnessCompactResult(\n result: CompactionResult,\n branchEntries: readonly SessionEntry[],\n): NonNullable<NonNullable<HookMap['before_compaction']['result']>['compaction']> {\n return {\n summary: result.summary,\n tokensBefore: result.tokensBefore,\n retainedTail: retainedTailFrom(branchEntries, result.firstKeptEntryId),\n ...(result.usage === undefined ? {} : { usage: result.usage }),\n ...(result.details === undefined ? {} : { details: result.details as JsonValue }),\n };\n}\n\nfunction piBranchEntries(entries: readonly Entry[]): SessionEntry[] {\n return toPiSessionEntries(entries);\n}\n\nasync function executePiTool(\n registered: RegisteredTool,\n runner: () => ExtensionRunner,\n isActive: (name: string) => boolean,\n toolCallId: string,\n parameters: unknown,\n signal: AbortSignal | undefined,\n onUpdate: ((result: DoomHeadlessToolResult) => void) | undefined,\n): Promise<DoomHeadlessToolResult> {\n const definition = registered.definition;\n // Admission, not visibility. A cached definition must still be active when called.\n if (!isActive(definition.name)) throw new Error(`Tool '${definition.name}' is no longer active`);\n const prepared = definition.prepareArguments ? definition.prepareArguments(parameters) : parameters;\n const result = await definition.execute(\n toolCallId,\n prepared,\n signal,\n (partial) => onUpdate?.(toDoomHeadlessToolResult(partial)),\n // ponytail: the runner has no executeTool bound, so nested calls return an isError result.\n // Bind contextActions.executeTool/getCallableTools in bindCore when codemode must run here.\n runner().createToolContext(toolCallId, signal),\n );\n return toDoomHeadlessToolResult(result);\n}\n\nfunction toHarnessTool(\n registered: RegisteredTool,\n runner: () => ExtensionRunner,\n isActive: (name: string) => boolean,\n): AgentHarnessTool<object | undefined> {\n const definition = registered.definition;\n return {\n name: definition.name,\n label: definition.label ?? definition.name,\n description: definition.description,\n parameters: definition.parameters,\n ...(definition.executionMode === undefined ? {} : { executionMode: definition.executionMode }),\n async execute(toolCallId, parameters, onUpdate, _toolContext, _invocation, context) {\n const result = await executePiTool(\n registered,\n runner,\n isActive,\n toolCallId,\n parameters,\n context.abortSignal,\n (partial) => onUpdate({ content: partial.content, details: partial.details }),\n );\n // Pi 0.99 lets a tool report failure without throwing. The harness reads a throw as the failed call.\n if (result.isError) {\n const text = result.content.map((part) => (part.type === 'text' ? part.text : '')).join('\\n');\n throw new Error(text || `Tool '${definition.name}' failed`);\n }\n return { content: result.content, details: result.details };\n },\n };\n}\n\n/**\n * Resolves the skills Pi extensions contribute.\n *\n * Pi wires this through AgentSession's resource loader, which the headless server does not use,\n * so the pipeline is rebuilt here against the harness. Pi's own loader parses and validates the\n * frontmatter; only the body has to be read, because Pi's Skill record carries a path where the\n * harness wants inline content.\n */\nasync function loadPiSkills(\n runner: ExtensionRunner,\n cwd: string,\n agentDir: string,\n onNotice: ((message: string) => void) | undefined,\n): Promise<readonly Skill[]> {\n const discovered = await runner.emitResourcesDiscover(cwd, 'startup');\n if (discovered.skillPaths.length === 0) return [];\n\n const loaded = loadSkills({\n cwd,\n agentDir,\n skillPaths: discovered.skillPaths.map((entry) => entry.path),\n includeDefaults: false,\n });\n for (const diagnostic of loaded.diagnostics) onNotice?.(`Pi skill ${diagnostic.path}: ${diagnostic.message}`);\n\n const resolved: Skill[] = [];\n for (const skill of loaded.skills) {\n try {\n resolved.push({\n name: skill.name,\n description: skill.description,\n content: readFileSync(skill.filePath, 'utf8'),\n filePath: skill.filePath,\n ...(skill.disableModelInvocation ? { disableModelInvocation: true } : {}),\n });\n } catch (error) {\n // One unreadable skill file must not cost the session every other skill.\n onNotice?.(`Pi skill ${skill.filePath}: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n return resolved;\n}\n/**\n * A SessionManager backed by the session the server already has open.\n *\n * Pi extensions read history through a SessionManager, which is JSONL backed, while the server\n * persists to SQLite through the harness. Rather than opening a second connection and taking a\n * second history lease, the manager is hydrated in memory from the live session and its writes\n * are mirrored back through the same harness runtime.\n *\n * `_persist` is public in Pi's source and in its shipped types, but it is not a documented\n * extension point, so the guard below turns a rename in a future Pi release into an immediate,\n * named failure instead of history that silently stops being recorded.\n */\n/**\n * Pi's default theme, reached through public API only.\n *\n * The singleton lives in Pi's interactive theme module, which the package `exports` map does not\n * expose, so a deep import fails with ERR_PACKAGE_PATH_NOT_EXPORTED. A freshly constructed runner\n * still carries Pi's own no-op UI context, whose `theme` getter returns that singleton, so reading\n * it back before binding is the supported route. The getter throws until `initTheme` has run.\n */\nfunction resolveDefaultTheme(runner: ExtensionRunner): ExtensionUIContext['theme'] {\n try {\n return runner.getUIContext().theme;\n } catch {\n // Not a failure: the theme singleton is lazily initialised and no TUI has done it here.\n initTheme(undefined, false);\n return runner.getUIContext().theme;\n }\n}\n\n/**\n * Pi's extension UI surface, backed by the headless client the server already speaks.\n *\n * Dialogs, notifications and status text have a real transport, so they are wired through. The\n * members that need a live TUI (custom components, widgets, footer, header, editor component,\n * autocomplete, terminal input, themes) have no headless equivalent and degrade to the same no-ops\n * Pi's own RPC mode uses, rather than throwing into extension code that checked `hasUI` first.\n */\nfunction createHeadlessUiContext(\n client: () => DoomHeadlessClient | undefined,\n theme: ExtensionUIContext['theme'],\n): ExtensionUIContext {\n const ask = async (request: DoomHeadlessClientRequest, signal?: AbortSignal): Promise<unknown> => {\n const target = client();\n if (target === undefined) return undefined;\n return await target.request(request, signal);\n };\n\n return {\n async select(title, options, opts) {\n const answer = await ask(\n { kind: 'select', title, options: options.map((option) => ({ label: option, value: option })) },\n opts?.signal,\n );\n return typeof answer === 'string' ? answer : undefined;\n },\n async confirm(title, message, opts) {\n return (await ask({ kind: 'confirm', title, message }, opts?.signal)) === true;\n },\n async input(title, _placeholder, opts) {\n // The headless request carries no placeholder field. Sending the hint as initialValue would\n // prefill the answer with it, so the hint is dropped rather than misrepresented.\n const answer = await ask({ kind: 'input', title }, opts?.signal);\n return typeof answer === 'string' ? answer : undefined;\n },\n async editor(title, prefill) {\n const answer = await ask({\n kind: 'input',\n title,\n multiline: true,\n ...(prefill === undefined ? {} : { initialValue: prefill }),\n });\n return typeof answer === 'string' ? answer : undefined;\n },\n notify(message, type) {\n // The notification schema requires a non-empty body.\n if (message.length === 0) return;\n void client()?.notify({ body: message, ...(type === undefined ? {} : { level: type }) });\n },\n setStatus(key, text) {\n client()?.setStatus(key, text);\n },\n pasteToEditor(text) {\n client()?.appendComposerText?.(text);\n },\n\n onTerminalInput: () => () => {},\n setWorkingMessage: () => {},\n setWorkingVisible: () => {},\n setWorkingIndicator: () => {},\n setHiddenThinkingLabel: () => {},\n setWidget: () => {},\n setFooter: () => {},\n setHeader: () => {},\n setTitle: () => {},\n // Matches Pi's own RPC mode, which also resolves undefined because custom components need a TUI.\n custom: async <T>(): Promise<T> => undefined as T,\n setEditorText: () => {},\n getEditorText: () => '',\n addAutocompleteProvider: () => {},\n setEditorComponent: () => {},\n getEditorComponent: () => undefined,\n theme,\n getAllThemes: () => [],\n getTheme: () => undefined,\n setTheme: () => ({ success: false, error: 'Themes are not available in the headless server' }),\n getToolsExpanded: () => false,\n setToolsExpanded: () => {},\n };\n}\n\ninterface BridgedSessionSync {\n append(entry: Entry): void;\n toHarnessId(entryId: string): string;\n toPiId(entryId: string | null): string | null;\n}\n\nconst bridgedSessionSync = new WeakMap<SessionManager, BridgedSessionSync>();\n\nexport async function createBridgedSessionManager(\n runtime: DirectHarnessRuntime,\n cwd: string,\n onNotice?: (message: string) => void,\n /** The branch the caller has already read, so opening a session scans it once. */\n branchEntries?: readonly Entry[],\n): Promise<SessionManager> {\n const metadata = runtime.session.metadata;\n const entries = branchEntries ?? (await runtime.readEntries()).entries;\n const header: PiSessionHeaderInput = {\n id: metadata.id,\n cwd: metadata.cwd ?? cwd,\n createdAt: metadata.createdAt,\n ...(metadata.parentSessionId === undefined ? {} : { parentSessionId: metadata.parentSessionId }),\n };\n\n const manager = SessionManager.inMemory(\n header.cwd,\n {\n id: metadata.id,\n ...(metadata.parentSessionId === undefined ? {} : { parentSession: metadata.parentSessionId }),\n },\n toPiFileEntries(header, entries),\n );\n\n if (typeof manager._persist !== 'function') {\n throw new Error(\"Pi's SessionManager no longer exposes '_persist'; the headless session bridge must be updated\");\n }\n const append = (manager as unknown as { _appendEntry?: (entry: SessionEntry) => void })._appendEntry;\n if (typeof append !== 'function') {\n throw new Error(\"Pi's SessionManager no longer exposes '_appendEntry'; the live session bridge must be updated\");\n }\n\n let syncingHarnessEntry = false;\n const pendingMirrors: Array<{\n readonly entry: SessionEntry;\n readonly mirrored: { customType: string; data: unknown };\n }> = [];\n const harnessToPiId = new Map<string, string>();\n const piToHarnessId = new Map<string, string>();\n const persist = manager._persist.bind(manager);\n manager._persist = (entry) => {\n persist(entry);\n if (syncingHarnessEntry) return;\n const mirrored = fromPiSessionEntry(entry);\n if (mirrored === undefined) return;\n const pending = { entry, mirrored };\n pendingMirrors.push(pending);\n void runtime.appendCustomEntry(mirrored.customType, mirrored.data).catch((error: unknown) => {\n const index = pendingMirrors.indexOf(pending);\n if (index !== -1) pendingMirrors.splice(index, 1);\n onNotice?.(\n `Pi session write for '${mirrored.customType}' was not mirrored: ${error instanceof Error ? error.message : String(error)}`,\n );\n });\n };\n const resolvePiId = (entryId: string | null): string | null => {\n if (entryId === null) return null;\n return harnessToPiId.get(entryId) ?? entryId;\n };\n bridgedSessionSync.set(manager, {\n append(entry) {\n if (manager.getEntry(entry.id) !== undefined) return;\n if (entry.type === 'custom') {\n const pendingIndex = pendingMirrors.findIndex(\n (pending) =>\n pending.mirrored.customType === entry.customType && isDeepStrictEqual(pending.mirrored.data, entry.data),\n );\n if (pendingIndex !== -1) {\n const pending = pendingMirrors.splice(pendingIndex, 1)[0];\n if (pending !== undefined) {\n harnessToPiId.set(entry.id, pending.entry.id);\n piToHarnessId.set(pending.entry.id, entry.id);\n }\n return;\n }\n }\n const converted =\n entry.type === 'compaction'\n ? toPiSessionEntry(entry, boundaryEntryId(manager.getBranch(), entry.retainedTail.length))\n : toPiSessionEntry(entry);\n if (converted === undefined) return;\n const parentId = resolvePiId(converted.parentId);\n syncingHarnessEntry = true;\n try {\n append.call(manager, parentId === converted.parentId ? converted : { ...converted, parentId });\n } finally {\n syncingHarnessEntry = false;\n }\n },\n toHarnessId: (entryId) => piToHarnessId.get(entryId) ?? entryId,\n toPiId: resolvePiId,\n });\n\n return manager;\n}\n\nexport function createPiExtensionHost(options: PiExtensionHostOptions): PiExtensionHost {\n const { cwd, agentDir, models, runtime, preload } = options;\n let runner: ExtensionRunner | undefined;\n let sessionManager: SessionManager | undefined;\n let sessionSync: BridgedSessionSync | undefined;\n let tools: readonly AgentHarnessTool<object | undefined>[] = [];\n let skills: readonly Skill[] = [];\n let registered: readonly RegisteredTool[] = [];\n // Every registered name until a restriction narrows it. Seeded at load(), because an empty set\n // before load must not read as \"everything is hidden\".\n let activeNames = new Set<string>();\n let unsubscribeEvents: (() => void) | undefined;\n let unsubscribeLifecycle: (() => void) | undefined;\n let cordisConnection: DoomCordisHostConnection | undefined;\n\n // Pi's ExtensionContext getters are synchronous while every harness read is not, so the\n // facts they answer from are tracked off the harness event stream and primed from history.\n // Hot lifecycle events update only bounded, incremental state. No event rereads history.\n let contextTokens: number | null = null;\n let currentOperation: 'run' | 'compaction' | 'navigation' | null = null;\n let nativeQueuedMessages = 0;\n let retainedQueuedMessages = 0;\n let turnIndex = 0;\n let runMessages: AgentMessage[] = [];\n const toolArguments = new Map<string, unknown>();\n /** Whether the compaction now running came from a Pi extension rather than the harness. */\n let compactionFromExtension = false;\n /**\n * Set once shutdown begins. The session disposes its runtime before extensions see\n * session_shutdown, so tool changes made from that handler have no runtime to reach.\n */\n let shuttingDown = false;\n\n const report = (source: string, error: unknown): void =>\n options.onNotice?.(`Pi extension ${source}: ${error instanceof Error ? error.message : String(error)}`);\n\n const activeTools = (): readonly AgentHarnessTool<object | undefined>[] =>\n tools.filter((tool) => activeNames.has(tool.name));\n const requireRunner = (): ExtensionRunner => {\n if (runner === undefined) throw new Error('The Pi extension host is not loaded');\n return runner;\n };\n\n /**\n * Where one custom message goes, following Pi's own order in `sendCustomMessage`.\n *\n * An explicit `nextTurn` always queues; a running turn takes the message unless the\n * caller opted out; an idle agent is woken only when the caller asked for a turn.\n * Pi's remaining branch, deferring an append made mid-turn, needs no counterpart:\n * the lane already holds a write until the operation reaches a safe commit point.\n */\n const deliverMessage = (\n message: AgentMessage,\n sendOptions?: { triggerTurn?: boolean; deliverAs?: 'steer' | 'followUp' | 'nextTurn' },\n ): Promise<unknown> => {\n if (sendOptions?.deliverAs === 'nextTurn') return runtime.nextRun(message);\n if (currentOperation === 'run' && sendOptions?.triggerTurn !== false) {\n return sendOptions?.deliverAs === 'followUp' ? runtime.followUp(message) : runtime.steer(message);\n }\n if (sendOptions?.triggerTurn === true) return runtime.admitMessage(message);\n return runtime.appendMessage(message);\n };\n\n const actions: ExtensionActions = {\n sendMessage: (message, sendOptions) => {\n const custom: Extract<AgentMessage, { role: 'custom' }> = {\n role: 'custom',\n customType: message.customType,\n // Untyped extensions can pass missing content; Pi normalizes it at the same point.\n content: message.content ?? [],\n display: message.display,\n ...(message.details === undefined ? {} : { details: message.details }),\n timestamp: Date.now(),\n };\n void deliverMessage(custom, sendOptions).catch((error: unknown) => report('send_message', error));\n },\n sendUserMessage: (content) => {\n void runtime\n .prompt(typeof content === 'string' ? content : JSON.stringify(content))\n .catch((error: unknown) => report('send_user_message', error));\n },\n appendEntry: (customType, data) => {\n void runtime.appendCustomEntry(customType, data).catch((error: unknown) => report('append_entry', error));\n },\n setSessionName: (name) => {\n void runtime.setName(name).catch((error: unknown) => report('set_session_name', error));\n },\n // Harness SessionMetadata carries no display name, and Pi allows this to be absent.\n getSessionName: () => undefined,\n getSettings: () => options.settings.getSettings(),\n setLabel: (entryId, label) => {\n void runtime\n .setLabel(sessionSync?.toHarnessId(entryId) ?? entryId, label)\n .catch((error: unknown) => report('set_label', error));\n },\n getActiveTools: () => activeTools().map((tool) => tool.name),\n getAllTools: (): ToolInfo[] =>\n registered.map((tool) => ({\n name: tool.definition.name,\n description: tool.definition.description,\n parameters: tool.definition.parameters,\n exposure: tool.definition.exposure ?? 'direct',\n ...(tool.definition.promptGuidelines === undefined\n ? {}\n : { promptGuidelines: tool.definition.promptGuidelines }),\n sourceInfo: tool.sourceInfo,\n })),\n // Backs DOOM_TOOL_SURFACE_SERVICE, which is the only way a Pi extension can hide its own\n // tools. Throwing here left every restriction inert and leaked mode-gated tools such as\n // narrate into sessions whose mode was off.\n setActiveTools: (names) => {\n const known = new Set(registered.map((tool) => tool.definition.name));\n activeNames = new Set(names.filter((name) => known.has(name)));\n if (!shuttingDown) options.onActiveToolsChanged?.();\n },\n // The session owns the merged Pi and facet surface. Replacing the runtime tools with Pi\n // tools alone would drop every facet tool, so a refresh goes through the same rebuild.\n refreshTools: () => {\n if (!shuttingDown) options.onActiveToolsChanged?.();\n },\n getCommands: () => [],\n setModel: async (model) => {\n await runtime.setModel({ provider: model.provider, id: model.id });\n return true;\n },\n getThinkingLevel: () => options.getThinkingLevel(),\n setThinkingLevel: (level) => {\n void runtime.setThinkingLevel(level).catch((error: unknown) => report('set_thinking_level', error));\n },\n };\n\n const contextActions: ExtensionContextActions = {\n getModel: () => options.getModel(),\n getScopedModels: () => [],\n // Mirrors the server's own readState: a tree navigation is not a turn, so it does not\n // make the agent busy.\n isIdle: () => currentOperation !== 'run' && currentOperation !== 'compaction',\n isProjectTrusted: () => true,\n getSignal: () => undefined,\n abort: () => {\n void runtime.abort().catch((error: unknown) => report('abort', error));\n },\n // Queued writes are excluded. An extension's own deferred append is not a message the\n // model is waiting on, and counting it would stall every extension that waits for a\n // quiet queue before acting.\n hasPendingMessages: () => nativeQueuedMessages > 0 || retainedQueuedMessages > 0,\n shutdown: () => {\n runtime.stop();\n },\n getContextUsage: () => contextUsageOf(contextTokens, options.getModel()?.contextWindow),\n compact: () => {\n void runtime.compact().catch((error: unknown) => report('compact', error));\n },\n getSystemPrompt: () => '',\n };\n\n const piCompactionEntry = async (entryId: string): Promise<CompactionEntry | undefined> => {\n const { entries } = await runtime.readEntries();\n const converted = toPiSessionEntries(entries).find((entry) => entry.id === entryId);\n return converted?.type === 'compaction' ? converted : undefined;\n };\n\n const turnBoundaryContext = (): BoundaryContextPreview => {\n const projection = sessionManager?.buildSessionProjection();\n const contextEntries = projection?.entries ?? [];\n const contextMessages = projection?.messages ?? [];\n return {\n contextEntries,\n contextMessages,\n llmMessages: contextMessages.filter((message): message is Message => message.role !== 'bashExecution'),\n pendingMessages: [],\n canContinue: contextMessages.at(-1)?.role !== 'assistant',\n };\n };\n\n /** Harness events, translated into Pi events in AgentSession order. */\n const handleHarnessEvent = async (event: HarnessEvent): Promise<void> => {\n switch (event.type) {\n case 'run_start':\n currentOperation = 'run';\n turnIndex = 0;\n runMessages = [];\n toolArguments.clear();\n await runner?.emit({ type: 'agent_start' });\n return;\n case 'run_resume':\n currentOperation = 'run';\n return;\n case 'turn_start':\n await runner?.emit({ type: 'turn_start', turnIndex, timestamp: Date.now() });\n return;\n case 'message_start':\n await runner?.emit({ type: 'message_start', message: event.message });\n return;\n case 'message_update':\n await runner?.emit({\n type: 'message_update',\n message: event.message,\n assistantMessageEvent: event.event,\n });\n return;\n case 'message_end':\n if (event.runId !== undefined) runMessages.push(event.message);\n if (event.message.role === 'assistant') contextTokens = contextTokensOf(event.message.usage);\n // Harness persistence has already committed at this boundary, so replacement results cannot\n // be honored faithfully. The handler still observes the same lifecycle boundary.\n await runner?.emitMessageEnd({ type: 'message_end', message: event.message });\n return;\n case 'tool_start':\n toolArguments.set(event.toolCallId, event.args);\n await runner?.emit({\n type: 'tool_execution_start',\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n args: event.args,\n });\n return;\n case 'tool_update':\n await runner?.emit({\n type: 'tool_execution_update',\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n args: toolArguments.get(event.toolCallId),\n partialResult: event.partialResult,\n });\n return;\n case 'tool_end':\n toolArguments.delete(event.toolCallId);\n await runner?.emit({\n type: 'tool_execution_end',\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n result: event.result,\n isError: event.isError,\n });\n return;\n case 'entry_added':\n sessionSync?.append(event.entry);\n return;\n case 'queue_update':\n nativeQueuedMessages = event.queues.filter((item) => item.kind !== 'write').length;\n return;\n case 'turn_end': {\n const branch = sessionManager?.getBranch() ?? [];\n // The harness commits a fresh entry after message_end (and may normalize the message\n // during settlement), so its entry_added payload need not share the event's identity.\n // A turn ends at the latest persisted assistant on this branch.\n const messageEntryId = branch.findLast(\n (entry) => entry.type === 'message' && entry.message.role === 'assistant',\n )?.id;\n if (messageEntryId === undefined) {\n report('turn_end', new Error('The persisted assistant entry was not available for the Pi boundary'));\n turnIndex += 1;\n return;\n }\n const toolResultEntryIds = event.toolResults.flatMap((result) => {\n const entryId = branch.findLast(\n (entry) =>\n entry.type === 'message' &&\n entry.message.role === 'toolResult' &&\n entry.message.toolCallId === result.toolCallId,\n )?.id;\n return entryId === undefined ? [] : [entryId];\n });\n await runner?.emitBoundary(\n {\n type: 'turn_end',\n turnIndex,\n message: event.message,\n toolResults: event.toolResults,\n messageEntryId,\n toolResultEntryIds,\n outcome:\n event.message.stopReason === 'aborted'\n ? 'aborted'\n : event.message.stopReason === 'error'\n ? 'error'\n : 'completed',\n },\n turnBoundaryContext,\n );\n turnIndex += 1;\n return;\n }\n case 'run_end':\n currentOperation = null;\n await runner?.emit({ type: 'agent_end', messages: runMessages });\n await runner?.emit({ type: 'agent_settled' });\n runMessages = [];\n toolArguments.clear();\n return;\n case 'compaction_start':\n currentOperation = 'compaction';\n return;\n case 'compaction_end': {\n currentOperation = null;\n const fromExtension = compactionFromExtension;\n compactionFromExtension = false;\n if (event.status !== 'completed') {\n await runner?.emit({\n type: 'session_compact_failed',\n reason: event.reason,\n ...(event.status === 'failed' ? { errorMessage: event.error.message } : {}),\n aborted: event.status === 'aborted',\n willRetry: event.reason === 'overflow',\n fromExtension,\n });\n return;\n }\n // Usage measured against the pre-compaction context no longer describes this one.\n contextTokens = null;\n const compactionEntry = await piCompactionEntry(event.entryId);\n if (compactionEntry === undefined) return;\n await runner?.emit({\n type: 'session_compact',\n compactionEntry,\n fromExtension,\n reason: event.reason,\n // Overflow is the only reason the harness compacts to retry a turn it had to abort.\n willRetry: event.reason === 'overflow',\n });\n return;\n }\n case 'navigation_start':\n currentOperation = 'navigation';\n return;\n case 'navigation_end': {\n currentOperation = null;\n if (event.status !== 'completed') return;\n const newLeafId = sessionSync?.toPiId(event.tipId) ?? event.tipId;\n const oldLeafId = sessionSync?.toPiId(event.fromTipId) ?? event.fromTipId;\n if (newLeafId === null) sessionManager?.resetLeaf();\n else if (sessionManager?.getEntry(newLeafId) !== undefined) sessionManager.branch(newLeafId);\n const leaf = newLeafId === null ? undefined : sessionManager?.getEntry(newLeafId);\n await runner?.emit({\n type: 'session_tree',\n newLeafId,\n oldLeafId,\n ...(leaf?.type === 'branch_summary' ? { summaryEntry: leaf } : {}),\n });\n return;\n }\n case 'value_update':\n if (event.value === 'session_name') {\n await runner?.emit({ type: 'session_info_changed', name: event.name });\n }\n return;\n case 'config_update':\n if (event.property === 'model') {\n const model = models.getModel(event.value.provider, event.value.modelId);\n const previous = event.previous as { provider?: unknown; modelId?: unknown } | undefined;\n const previousModel =\n typeof previous?.provider === 'string' && typeof previous.modelId === 'string'\n ? models.getModel(previous.provider, previous.modelId)\n : undefined;\n if (model !== undefined) await runner?.emit({ type: 'model_select', model, previousModel, source: 'set' });\n } else if (event.property === 'thinkingLevel') {\n await runner?.emit({\n type: 'thinking_level_select',\n level: event.value,\n previousLevel: event.previous,\n });\n }\n return;\n default:\n return;\n }\n };\n\n // An extension that throws must not fault the lane, so the rejection is reported here and\n // the harness sees a settled listener.\n const onHarnessEvent = (event: HarnessEvent): Promise<void> =>\n handleHarnessEvent(event).catch((error: unknown) => report(`event '${event.type}'`, error));\n\n const transformContext = async (messages: AgentMessage[]): Promise<AgentMessage[]> =>\n runner === undefined ? messages : runner.emitContext(messages);\n\n const beforeCompaction = async (\n event: HookMap['before_compaction']['event'],\n ): Promise<HookMap['before_compaction']['result']> => {\n if (runner === undefined) return undefined;\n const branchEntries = piBranchEntries((await runtime.readEntries()).entries);\n const result = await runner.emit({\n type: 'session_before_compact',\n preparation: toPiCompactionPreparation(event.preparation, branchEntries),\n branchEntries,\n ...(event.customInstructions === undefined ? {} : { customInstructions: event.customInstructions }),\n reason: event.reason,\n willRetry: event.reason === 'overflow',\n // The harness exposes no per-compaction signal. A handler that checks this sees an\n // accurate \"not aborted\" at the moment it runs; only a long handler misses a later abort.\n signal: new AbortController().signal,\n });\n if (result?.cancel === true) return { decline: true };\n if (result?.compaction === undefined) return undefined;\n compactionFromExtension = true;\n return { compaction: toHarnessCompactResult(result.compaction, branchEntries) };\n };\n\n return {\n transformContext,\n beforeCompaction,\n get tools() {\n return activeTools();\n },\n\n get toolGuidance(): readonly ToolPromptEntry[] {\n // Filtered alongside `tools`: guidance for a hidden tool would otherwise keep instructing the\n // model to call something it cannot see.\n return registered\n .filter((tool) => activeNames.has(tool.definition.name))\n .map((tool) => ({\n name: tool.definition.name,\n ...(tool.definition.promptSnippet === undefined ? {} : { promptSnippet: tool.definition.promptSnippet }),\n ...(tool.definition.promptGuidelines === undefined\n ? {}\n : { promptGuidelines: tool.definition.promptGuidelines }),\n }));\n },\n\n get skills() {\n return skills;\n },\n\n getService<T>(name: string): T | undefined {\n return cordisConnection?.root.get(name) as T | undefined;\n },\n executeTool(name, toolCallId, parameters, signal, onUpdate) {\n const tool = registered.find((entry) => entry.definition.name === name);\n if (tool === undefined) throw new Error(`Unknown Pi extension tool '${name}'`);\n return executePiTool(\n tool,\n requireRunner,\n (candidate) => activeNames.has(candidate),\n toolCallId,\n parameters,\n signal,\n onUpdate,\n );\n },\n\n async load(): Promise<void> {\n if (runner !== undefined) throw new Error('The Pi extension host was loaded more than once');\n if (preload === undefined) return;\n\n const { entries } = await runtime.readEntries();\n // A resumed session has already spent context that no future event will re-announce,\n // so the counter starts from what history measured rather than from zero.\n contextTokens = contextTokensOf(latestAssistantUsage(entries));\n\n const loaded: Extension[] = [...preload.extensions];\n\n sessionManager = await createBridgedSessionManager(runtime, cwd, options.onNotice, entries);\n const manager = sessionManager;\n sessionSync = bridgedSessionSync.get(manager);\n if (sessionSync === undefined) throw new Error('The live Pi session bridge was not initialized');\n\n runner = new ExtensionRunner(loaded, preload.runtime, cwd, manager, new ModelRegistry(models));\n // 'rpc' is the accurate mode for a server with no terminal, and it must be set before any\n // extension runs. Provider registrations were already drained against this same ModelRuntime\n // by preloadPiExtensions, so bindCore finds an empty queue here.\n runner.setUIContext(createHeadlessUiContext(options.client, resolveDefaultTheme(runner)), 'rpc');\n runner.bindCore(actions, contextActions);\n\n registered = loaded.flatMap((extension) => [...extension.tools.values()]);\n tools = registered.map((tool) => toHarnessTool(tool, requireRunner, (name) => activeNames.has(name)));\n activeNames = new Set(tools.map((tool) => tool.name));\n // Subscribe before extension lifecycle handlers run: those handlers may write history,\n // and missing their entry_added acknowledgement would permanently stale this mirror.\n unsubscribeEvents = runtime.onEvent(onHarnessEvent);\n const initialLifecycle = await runtime.readLifecycle();\n currentOperation = initialLifecycle.operation?.kind ?? null;\n nativeQueuedMessages = Number((await runtime.readState()).pendingMessageCount) || 0;\n retainedQueuedMessages = initialLifecycle.queue.length;\n unsubscribeLifecycle = runtime.onPresentationFrame((frame) => {\n if (frame.type !== 'lifecycle_update' || !frame.lifecycle || typeof frame.lifecycle !== 'object') return;\n const lifecycle = frame.lifecycle as Awaited<ReturnType<typeof runtime.readLifecycle>>;\n retainedQueuedMessages = lifecycle.queue.length;\n currentOperation = lifecycle.operation?.kind ?? null;\n });\n // Pi opens session-scoped extension services before resource discovery. Doom tool\n // restrictions depend on the same ordering.\n if (preload.events !== undefined) {\n cordisConnection = await connectDoomCordisHost({ events: preload.events }, 'headless-pi-extension-host');\n if (options.serverServices !== undefined) {\n if (options.serverServices.sessionId !== runtime.sessionId)\n throw new Error('Server services belong to a different session');\n cordisConnection.root.provide(DOOM_CORDIS_SERVER_SERVICES, options.serverServices);\n }\n }\n await runner.emit({ type: 'session_start', reason: 'startup' });\n skills = await loadPiSkills(runner, cwd, agentDir, options.onNotice);\n },\n\n async shutdown(): Promise<void> {\n shuttingDown = true;\n unsubscribeEvents?.();\n unsubscribeEvents = undefined;\n unsubscribeLifecycle?.();\n unsubscribeLifecycle = undefined;\n sessionSync = undefined;\n sessionManager = undefined;\n runMessages = [];\n toolArguments.clear();\n const connection = cordisConnection;\n cordisConnection = undefined;\n try {\n if (runner !== undefined) await runner.emit({ type: 'session_shutdown', reason: 'quit' });\n } finally {\n await connection?.dispose();\n }\n },\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ const require_toolSurface = require("../../schemas/toolSurface.cjs");
2
+ const require_help = require("../../schemas/help.cjs");
3
+ //#region src/services/piHelpTools/index.ts
4
+ /** Keep package-owned Pi tools closed when Help or its session provider is absent. */
5
+ function createPiHelpToolGate(source, names) {
6
+ const controlled = new Set(names);
7
+ let active;
8
+ let surface;
9
+ let refresh = () => {};
10
+ const deactivate = () => {
11
+ active?.abort(/* @__PURE__ */ new Error("Help tools are no longer active."));
12
+ active = void 0;
13
+ };
14
+ const bind = (context) => {
15
+ context.inject([require_toolSurface.DOOM_TOOL_SURFACE_SERVICE], (child) => {
16
+ const current = require_toolSurface.requireDoomToolSurface(child);
17
+ surface = current;
18
+ const restrict = (incoming) => active ? incoming : incoming.filter((name) => !controlled.has(name));
19
+ const registration = current.register({
20
+ source,
21
+ controlledTools: [...controlled],
22
+ attribution: require_help.DOOM_HELP_WHEN.attribution,
23
+ restrict
24
+ });
25
+ refresh = () => registration.update(restrict);
26
+ child.inject([require_help.DOOM_HELP_SERVICE], (helpContext) => {
27
+ const help = require_help.requireDoomHelpService(helpContext);
28
+ const synchronize = () => {
29
+ const state = help.getSnapshot().activation;
30
+ if (state === "active" || state === "degraded") active ??= new AbortController();
31
+ else deactivate();
32
+ registration.update(restrict);
33
+ };
34
+ const unsubscribe = help.subscribeSnapshot(synchronize);
35
+ synchronize();
36
+ return () => {
37
+ unsubscribe();
38
+ deactivate();
39
+ registration.update(restrict);
40
+ };
41
+ });
42
+ return () => {
43
+ deactivate();
44
+ if (surface === current) {
45
+ surface = void 0;
46
+ refresh = () => {};
47
+ }
48
+ registration.dispose();
49
+ };
50
+ });
51
+ };
52
+ return {
53
+ services: [bind],
54
+ onStart() {
55
+ refresh();
56
+ },
57
+ assertActive(name, signal) {
58
+ signal?.throwIfAborted();
59
+ if (!controlled.has(name) || !active || !surface?.active().includes(name)) throw new Error(`Help tool '${name}' is inactive or restricted.`);
60
+ active.signal.throwIfAborted();
61
+ return signal ? AbortSignal.any([signal, active.signal]) : active.signal;
62
+ }
63
+ };
64
+ }
65
+ //#endregion
66
+ exports.createPiHelpToolGate = createPiHelpToolGate;
67
+
68
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["DOOM_TOOL_SURFACE_SERVICE","requireDoomToolSurface","DOOM_HELP_WHEN","DOOM_HELP_SERVICE","requireDoomHelpService"],"sources":["../../../../src/services/piHelpTools/index.ts"],"sourcesContent":["import type { Context } from '@deepseek-ai/cordis';\n\nimport { DOOM_HELP_SERVICE, requireDoomHelpService } from '../../schemas/help';\nimport { DOOM_HELP_WHEN } from '../../schemas/help';\nimport {\n DOOM_TOOL_SURFACE_SERVICE,\n requireDoomToolSurface,\n type DoomToolSurfaceService,\n} from '../../schemas/toolSurface';\n\n/** Keep package-owned Pi tools closed when Help or its session provider is absent. */\nexport function createPiHelpToolGate(source: string, names: readonly string[]) {\n const controlled = new Set(names);\n let active: AbortController | undefined;\n let surface: DoomToolSurfaceService | undefined;\n let refresh = () => {};\n const deactivate = () => {\n active?.abort(new Error('Help tools are no longer active.'));\n active = undefined;\n };\n const bind = (context: Context): void => {\n context.inject([DOOM_TOOL_SURFACE_SERVICE], (child) => {\n const current = requireDoomToolSurface(child);\n surface = current;\n const restrict = (incoming: readonly string[]) =>\n active ? incoming : incoming.filter((name) => !controlled.has(name));\n const registration = current.register({\n source,\n controlledTools: [...controlled],\n attribution: DOOM_HELP_WHEN.attribution,\n restrict,\n });\n refresh = () => registration.update(restrict);\n // This restriction outlives the Help binding. Removing Help must not restore its tools.\n child.inject([DOOM_HELP_SERVICE], (helpContext) => {\n const help = requireDoomHelpService(helpContext);\n const synchronize = () => {\n const state = help.getSnapshot().activation;\n if (state === 'active' || state === 'degraded') active ??= new AbortController();\n else deactivate();\n registration.update(restrict);\n };\n const unsubscribe = help.subscribeSnapshot(synchronize);\n synchronize();\n return () => {\n unsubscribe();\n deactivate();\n registration.update(restrict);\n };\n });\n return () => {\n deactivate();\n if (surface === current) {\n surface = undefined;\n refresh = () => {};\n }\n registration.dispose();\n };\n });\n };\n return {\n services: [bind],\n // Native tools have been registered by this point, including a late package mount.\n onStart(this: void) {\n refresh();\n },\n assertActive(name: string, signal?: AbortSignal): AbortSignal {\n signal?.throwIfAborted();\n if (!controlled.has(name) || !active || !surface?.active().includes(name))\n throw new Error(`Help tool '${name}' is inactive or restricted.`);\n active.signal.throwIfAborted();\n return signal ? AbortSignal.any([signal, active.signal]) : active.signal;\n },\n };\n}\n"],"mappings":";;;;AAWA,SAAgB,qBAAqB,QAAgB,OAA0B;CAC7E,MAAM,aAAa,IAAI,IAAI,KAAK;CAChC,IAAI;CACJ,IAAI;CACJ,IAAI,gBAAgB,CAAC;CACrB,MAAM,mBAAmB;EACvB,QAAQ,sBAAM,IAAI,MAAM,kCAAkC,CAAC;EAC3D,SAAS,KAAA;CACX;CACA,MAAM,QAAQ,YAA2B;EACvC,QAAQ,OAAO,CAACA,oBAAAA,yBAAyB,IAAI,UAAU;GACrD,MAAM,UAAUC,oBAAAA,uBAAuB,KAAK;GAC5C,UAAU;GACV,MAAM,YAAY,aAChB,SAAS,WAAW,SAAS,QAAQ,SAAS,CAAC,WAAW,IAAI,IAAI,CAAC;GACrE,MAAM,eAAe,QAAQ,SAAS;IACpC;IACA,iBAAiB,CAAC,GAAG,UAAU;IAC/B,aAAaC,aAAAA,eAAe;IAC5B;GACF,CAAC;GACD,gBAAgB,aAAa,OAAO,QAAQ;GAE5C,MAAM,OAAO,CAACC,aAAAA,iBAAiB,IAAI,gBAAgB;IACjD,MAAM,OAAOC,aAAAA,uBAAuB,WAAW;IAC/C,MAAM,oBAAoB;KACxB,MAAM,QAAQ,KAAK,YAAY,CAAC,CAAC;KACjC,IAAI,UAAU,YAAY,UAAU,YAAY,WAAW,IAAI,gBAAgB;UAC1E,WAAW;KAChB,aAAa,OAAO,QAAQ;IAC9B;IACA,MAAM,cAAc,KAAK,kBAAkB,WAAW;IACtD,YAAY;IACZ,aAAa;KACX,YAAY;KACZ,WAAW;KACX,aAAa,OAAO,QAAQ;IAC9B;GACF,CAAC;GACD,aAAa;IACX,WAAW;IACX,IAAI,YAAY,SAAS;KACvB,UAAU,KAAA;KACV,gBAAgB,CAAC;IACnB;IACA,aAAa,QAAQ;GACvB;EACF,CAAC;CACH;CACA,OAAO;EACL,UAAU,CAAC,IAAI;EAEf,UAAoB;GAClB,QAAQ;EACV;EACA,aAAa,MAAc,QAAmC;GAC5D,QAAQ,eAAe;GACvB,IAAI,CAAC,WAAW,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,OAAO,CAAC,CAAC,SAAS,IAAI,GACtE,MAAM,IAAI,MAAM,cAAc,KAAK,6BAA6B;GAClE,OAAO,OAAO,eAAe;GAC7B,OAAO,SAAS,YAAY,IAAI,CAAC,QAAQ,OAAO,MAAM,CAAC,IAAI,OAAO;EACpE;CACF;AACF"}
@@ -0,0 +1,10 @@
1
+ import { Context } from "@deepseek-ai/cordis";
2
+ //#region src/services/piHelpTools/index.d.ts
3
+ /** Keep package-owned Pi tools closed when Help or its session provider is absent. */
4
+ export declare function createPiHelpToolGate(source: string, names: readonly string[]): {
5
+ services: ((context: Context) => void)[];
6
+ onStart(this: void): void;
7
+ assertActive(name: string, signal?: AbortSignal): AbortSignal;
8
+ };
9
+ //#endregion
10
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/piHelpTools/index.ts"],"mappings":";;;wBAWgB,qBAAqB,gBAAgB;EAkDjD,YAAQ,SAzCa;EA2CrB,QAAO;EAGP,aAAY,cAAa,SAAW,cAAc"}
@@ -0,0 +1,68 @@
1
+ import { DOOM_TOOL_SURFACE_SERVICE, requireDoomToolSurface } from "../../schemas/toolSurface.mjs";
2
+ import { DOOM_HELP_SERVICE, DOOM_HELP_WHEN, requireDoomHelpService } from "../../schemas/help.mjs";
3
+ //#region src/services/piHelpTools/index.ts
4
+ /** Keep package-owned Pi tools closed when Help or its session provider is absent. */
5
+ function createPiHelpToolGate(source, names) {
6
+ const controlled = new Set(names);
7
+ let active;
8
+ let surface;
9
+ let refresh = () => {};
10
+ const deactivate = () => {
11
+ active?.abort(/* @__PURE__ */ new Error("Help tools are no longer active."));
12
+ active = void 0;
13
+ };
14
+ const bind = (context) => {
15
+ context.inject([DOOM_TOOL_SURFACE_SERVICE], (child) => {
16
+ const current = requireDoomToolSurface(child);
17
+ surface = current;
18
+ const restrict = (incoming) => active ? incoming : incoming.filter((name) => !controlled.has(name));
19
+ const registration = current.register({
20
+ source,
21
+ controlledTools: [...controlled],
22
+ attribution: DOOM_HELP_WHEN.attribution,
23
+ restrict
24
+ });
25
+ refresh = () => registration.update(restrict);
26
+ child.inject([DOOM_HELP_SERVICE], (helpContext) => {
27
+ const help = requireDoomHelpService(helpContext);
28
+ const synchronize = () => {
29
+ const state = help.getSnapshot().activation;
30
+ if (state === "active" || state === "degraded") active ??= new AbortController();
31
+ else deactivate();
32
+ registration.update(restrict);
33
+ };
34
+ const unsubscribe = help.subscribeSnapshot(synchronize);
35
+ synchronize();
36
+ return () => {
37
+ unsubscribe();
38
+ deactivate();
39
+ registration.update(restrict);
40
+ };
41
+ });
42
+ return () => {
43
+ deactivate();
44
+ if (surface === current) {
45
+ surface = void 0;
46
+ refresh = () => {};
47
+ }
48
+ registration.dispose();
49
+ };
50
+ });
51
+ };
52
+ return {
53
+ services: [bind],
54
+ onStart() {
55
+ refresh();
56
+ },
57
+ assertActive(name, signal) {
58
+ signal?.throwIfAborted();
59
+ if (!controlled.has(name) || !active || !surface?.active().includes(name)) throw new Error(`Help tool '${name}' is inactive or restricted.`);
60
+ active.signal.throwIfAborted();
61
+ return signal ? AbortSignal.any([signal, active.signal]) : active.signal;
62
+ }
63
+ };
64
+ }
65
+ //#endregion
66
+ export { createPiHelpToolGate };
67
+
68
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/piHelpTools/index.ts"],"sourcesContent":["import type { Context } from '@deepseek-ai/cordis';\n\nimport { DOOM_HELP_SERVICE, requireDoomHelpService } from '../../schemas/help';\nimport { DOOM_HELP_WHEN } from '../../schemas/help';\nimport {\n DOOM_TOOL_SURFACE_SERVICE,\n requireDoomToolSurface,\n type DoomToolSurfaceService,\n} from '../../schemas/toolSurface';\n\n/** Keep package-owned Pi tools closed when Help or its session provider is absent. */\nexport function createPiHelpToolGate(source: string, names: readonly string[]) {\n const controlled = new Set(names);\n let active: AbortController | undefined;\n let surface: DoomToolSurfaceService | undefined;\n let refresh = () => {};\n const deactivate = () => {\n active?.abort(new Error('Help tools are no longer active.'));\n active = undefined;\n };\n const bind = (context: Context): void => {\n context.inject([DOOM_TOOL_SURFACE_SERVICE], (child) => {\n const current = requireDoomToolSurface(child);\n surface = current;\n const restrict = (incoming: readonly string[]) =>\n active ? incoming : incoming.filter((name) => !controlled.has(name));\n const registration = current.register({\n source,\n controlledTools: [...controlled],\n attribution: DOOM_HELP_WHEN.attribution,\n restrict,\n });\n refresh = () => registration.update(restrict);\n // This restriction outlives the Help binding. Removing Help must not restore its tools.\n child.inject([DOOM_HELP_SERVICE], (helpContext) => {\n const help = requireDoomHelpService(helpContext);\n const synchronize = () => {\n const state = help.getSnapshot().activation;\n if (state === 'active' || state === 'degraded') active ??= new AbortController();\n else deactivate();\n registration.update(restrict);\n };\n const unsubscribe = help.subscribeSnapshot(synchronize);\n synchronize();\n return () => {\n unsubscribe();\n deactivate();\n registration.update(restrict);\n };\n });\n return () => {\n deactivate();\n if (surface === current) {\n surface = undefined;\n refresh = () => {};\n }\n registration.dispose();\n };\n });\n };\n return {\n services: [bind],\n // Native tools have been registered by this point, including a late package mount.\n onStart(this: void) {\n refresh();\n },\n assertActive(name: string, signal?: AbortSignal): AbortSignal {\n signal?.throwIfAborted();\n if (!controlled.has(name) || !active || !surface?.active().includes(name))\n throw new Error(`Help tool '${name}' is inactive or restricted.`);\n active.signal.throwIfAborted();\n return signal ? AbortSignal.any([signal, active.signal]) : active.signal;\n },\n };\n}\n"],"mappings":";;;;AAWA,SAAgB,qBAAqB,QAAgB,OAA0B;CAC7E,MAAM,aAAa,IAAI,IAAI,KAAK;CAChC,IAAI;CACJ,IAAI;CACJ,IAAI,gBAAgB,CAAC;CACrB,MAAM,mBAAmB;EACvB,QAAQ,sBAAM,IAAI,MAAM,kCAAkC,CAAC;EAC3D,SAAS,KAAA;CACX;CACA,MAAM,QAAQ,YAA2B;EACvC,QAAQ,OAAO,CAAC,yBAAyB,IAAI,UAAU;GACrD,MAAM,UAAU,uBAAuB,KAAK;GAC5C,UAAU;GACV,MAAM,YAAY,aAChB,SAAS,WAAW,SAAS,QAAQ,SAAS,CAAC,WAAW,IAAI,IAAI,CAAC;GACrE,MAAM,eAAe,QAAQ,SAAS;IACpC;IACA,iBAAiB,CAAC,GAAG,UAAU;IAC/B,aAAa,eAAe;IAC5B;GACF,CAAC;GACD,gBAAgB,aAAa,OAAO,QAAQ;GAE5C,MAAM,OAAO,CAAC,iBAAiB,IAAI,gBAAgB;IACjD,MAAM,OAAO,uBAAuB,WAAW;IAC/C,MAAM,oBAAoB;KACxB,MAAM,QAAQ,KAAK,YAAY,CAAC,CAAC;KACjC,IAAI,UAAU,YAAY,UAAU,YAAY,WAAW,IAAI,gBAAgB;UAC1E,WAAW;KAChB,aAAa,OAAO,QAAQ;IAC9B;IACA,MAAM,cAAc,KAAK,kBAAkB,WAAW;IACtD,YAAY;IACZ,aAAa;KACX,YAAY;KACZ,WAAW;KACX,aAAa,OAAO,QAAQ;IAC9B;GACF,CAAC;GACD,aAAa;IACX,WAAW;IACX,IAAI,YAAY,SAAS;KACvB,UAAU,KAAA;KACV,gBAAgB,CAAC;IACnB;IACA,aAAa,QAAQ;GACvB;EACF,CAAC;CACH;CACA,OAAO;EACL,UAAU,CAAC,IAAI;EAEf,UAAoB;GAClB,QAAQ;EACV;EACA,aAAa,MAAc,QAAmC;GAC5D,QAAQ,eAAe;GACvB,IAAI,CAAC,WAAW,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,OAAO,CAAC,CAAC,SAAS,IAAI,GACtE,MAAM,IAAI,MAAM,cAAc,KAAK,6BAA6B;GAClE,OAAO,OAAO,eAAe;GAC7B,OAAO,SAAS,YAAY,IAAI,CAAC,QAAQ,OAAO,MAAM,CAAC,IAAI,OAAO;EACpE;CACF;AACF"}
@@ -0,0 +1,112 @@
1
+ let _earendil_works_pi_coding_agent = require("@earendil-works/pi-coding-agent");
2
+ function toIsoTimestamp(epochMilliseconds) {
3
+ return new Date(epochMilliseconds).toISOString();
4
+ }
5
+ /** Synthesize the Pi session header the harness has no direct equivalent for. */
6
+ function toPiSessionHeader(input) {
7
+ return {
8
+ type: "session",
9
+ version: _earendil_works_pi_coding_agent.CURRENT_SESSION_VERSION,
10
+ id: input.id,
11
+ timestamp: toIsoTimestamp(input.createdAt),
12
+ cwd: input.cwd,
13
+ ...input.parentSessionId === void 0 ? {} : { parentSession: input.parentSessionId }
14
+ };
15
+ }
16
+ /** Convert one harness entry. Compactions require their retained boundary when the tail is non-empty. */
17
+ function toPiSessionEntry(entry, firstKeptEntryId) {
18
+ const base = {
19
+ id: entry.id,
20
+ parentId: entry.parentId,
21
+ timestamp: toIsoTimestamp(entry.timestamp)
22
+ };
23
+ switch (entry.type) {
24
+ case "message": return {
25
+ ...base,
26
+ type: "message",
27
+ message: entry.message
28
+ };
29
+ case "compaction": {
30
+ const retainedBoundary = firstKeptEntryId ?? (entry.retainedTail.length === 0 ? entry.parentId : null);
31
+ if (retainedBoundary === null) return void 0;
32
+ return {
33
+ ...base,
34
+ type: "compaction",
35
+ summary: entry.summary,
36
+ firstKeptEntryId: retainedBoundary,
37
+ tokensBefore: entry.tokensBefore,
38
+ fromHook: entry.fromHook,
39
+ ...entry.details === void 0 ? {} : { details: entry.details },
40
+ ...entry.usage === void 0 ? {} : { usage: entry.usage }
41
+ };
42
+ }
43
+ case "branch_summary": {
44
+ const fromId = entry.fromId ?? entry.parentId;
45
+ if (fromId === null) return void 0;
46
+ return {
47
+ ...base,
48
+ type: "branch_summary",
49
+ fromId,
50
+ summary: entry.summary,
51
+ fromHook: entry.fromHook,
52
+ ...entry.details === void 0 ? {} : { details: entry.details },
53
+ ...entry.usage === void 0 ? {} : { usage: entry.usage }
54
+ };
55
+ }
56
+ case "custom": return {
57
+ ...base,
58
+ type: "custom",
59
+ customType: entry.customType,
60
+ ...entry.data === void 0 ? {} : { data: entry.data }
61
+ };
62
+ default: return;
63
+ }
64
+ }
65
+ /** Convert every representable entry while deriving compaction boundaries from prior branch context. */
66
+ function toPiSessionEntries(entries) {
67
+ const converted = [];
68
+ for (const entry of entries) {
69
+ const next = toPiSessionEntry(entry, entry.type === "compaction" ? boundaryEntryId(converted, entry.retainedTail.length) : void 0);
70
+ if (next !== void 0) converted.push(next);
71
+ }
72
+ return converted;
73
+ }
74
+ function boundaryEntryId(branchEntries, retainedCount) {
75
+ let remaining = retainedCount;
76
+ for (let index = branchEntries.length - 1; index >= 0; index -= 1) {
77
+ const entry = branchEntries[index];
78
+ if (entry === void 0) continue;
79
+ if (remaining <= 0) return entry.id;
80
+ remaining -= (0, _earendil_works_pi_coding_agent.sessionEntryToContextMessages)(entry).length;
81
+ if (remaining <= 0) return entry.id;
82
+ }
83
+ return branchEntries[0]?.id;
84
+ }
85
+ /** Header followed by every convertible entry, preserving input order. */
86
+ function toPiFileEntries(header, entries) {
87
+ return [toPiSessionHeader(header), ...toPiSessionEntries(entries)];
88
+ }
89
+ /** Reverse direction, for mirroring extension-initiated writes back into the harness. */
90
+ function fromPiSessionEntry(entry) {
91
+ switch (entry.type) {
92
+ case "message":
93
+ case "compaction":
94
+ case "branch_summary": return;
95
+ case "custom": return {
96
+ customType: entry.customType,
97
+ data: entry.data
98
+ };
99
+ default: return {
100
+ customType: `pi.${entry.type}`,
101
+ data: entry
102
+ };
103
+ }
104
+ }
105
+ //#endregion
106
+ exports.fromPiSessionEntry = fromPiSessionEntry;
107
+ exports.toPiFileEntries = toPiFileEntries;
108
+ exports.toPiSessionEntries = toPiSessionEntries;
109
+ exports.toPiSessionEntry = toPiSessionEntry;
110
+ exports.toPiSessionHeader = toPiSessionHeader;
111
+
112
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["CURRENT_SESSION_VERSION","sessionEntryToContextMessages"],"sources":["../../../../src/services/piSessionEntries/index.ts"],"sourcesContent":["/**\n * Boundary between the two session record formats DoomPi carries.\n *\n * The headless server persists conversations through the pi-agent-core harness `Session`, whose\n * entries are numbered (`seq`) and timestamped in epoch milliseconds. Pi extensions are instead\n * handed a pi-coding-agent `SessionManager`, whose JSONL records carry no sequence and use ISO\n * timestamps, and whose entry union has five members the harness cannot express natively.\n *\n * This module is the only place that translation happens. It is pure: no IO, no SQLite, no file\n * access, just functions over arrays.\n */\nimport type { Entry } from '@earendil-works/pi-agent-core';\nimport {\n CURRENT_SESSION_VERSION,\n sessionEntryToContextMessages,\n type BranchSummaryEntry,\n type CompactionEntry,\n type CustomEntry,\n type FileEntry,\n type SessionEntry,\n type SessionEntryBase,\n type SessionHeader,\n type SessionMessageEntry,\n} from '@earendil-works/pi-coding-agent';\n\n/** Reserved harness `customType` prefix for Pi entry types the harness has no native record for. */\nexport const PI_MIRRORED_ENTRY_PREFIX = 'pi.';\n\n/** Harness `SessionMetadata` carries no name, model, or thinking level, so the header is synthesized. */\nexport interface PiSessionHeaderInput {\n id: string;\n cwd: string;\n createdAt: number;\n parentSessionId?: string;\n}\n\nfunction toIsoTimestamp(epochMilliseconds: number): string {\n return new Date(epochMilliseconds).toISOString();\n}\n\n/** Synthesize the Pi session header the harness has no direct equivalent for. */\nexport function toPiSessionHeader(input: PiSessionHeaderInput): SessionHeader {\n return {\n type: 'session',\n version: CURRENT_SESSION_VERSION,\n id: input.id,\n timestamp: toIsoTimestamp(input.createdAt),\n cwd: input.cwd,\n ...(input.parentSessionId === undefined ? {} : { parentSession: input.parentSessionId }),\n };\n}\n\n/** Convert one harness entry. Compactions require their retained boundary when the tail is non-empty. */\nexport function toPiSessionEntry(entry: Entry, firstKeptEntryId?: string): SessionEntry | undefined {\n // `seq` is deliberately dropped: Pi orders entries by file position and the parent link.\n const base: Omit<SessionEntryBase, 'type'> = {\n id: entry.id,\n parentId: entry.parentId,\n timestamp: toIsoTimestamp(entry.timestamp),\n };\n switch (entry.type) {\n case 'message': {\n const message: SessionMessageEntry = { ...base, type: 'message', message: entry.message };\n return message;\n }\n case 'compaction': {\n const retainedBoundary = firstKeptEntryId ?? (entry.retainedTail.length === 0 ? entry.parentId : null);\n if (retainedBoundary === null) return undefined;\n const compaction: CompactionEntry = {\n ...base,\n type: 'compaction',\n summary: entry.summary,\n firstKeptEntryId: retainedBoundary,\n tokensBefore: entry.tokensBefore,\n fromHook: entry.fromHook,\n ...(entry.details === undefined ? {} : { details: entry.details }),\n ...(entry.usage === undefined ? {} : { usage: entry.usage }),\n };\n return compaction;\n }\n case 'branch_summary': {\n // Pi requires an origin entry id. A summary of a branch with no origin cannot be represented,\n // and a partial record would corrupt the tree Pi rebuilds from these links.\n const fromId = entry.fromId ?? entry.parentId;\n if (fromId === null) return undefined;\n const branchSummary: BranchSummaryEntry = {\n ...base,\n type: 'branch_summary',\n fromId,\n summary: entry.summary,\n fromHook: entry.fromHook,\n ...(entry.details === undefined ? {} : { details: entry.details }),\n ...(entry.usage === undefined ? {} : { usage: entry.usage }),\n };\n return branchSummary;\n }\n case 'custom': {\n const custom: CustomEntry = {\n ...base,\n type: 'custom',\n customType: entry.customType,\n ...(entry.data === undefined ? {} : { data: entry.data }),\n };\n return custom;\n }\n default:\n // A harness entry type introduced after this boundary was written has no Pi record yet.\n return undefined;\n }\n}\n\n/** Convert every representable entry while deriving compaction boundaries from prior branch context. */\nexport function toPiSessionEntries(entries: readonly Entry[]): SessionEntry[] {\n const converted: SessionEntry[] = [];\n for (const entry of entries) {\n const firstKeptEntryId =\n entry.type === 'compaction' ? boundaryEntryId(converted, entry.retainedTail.length) : undefined;\n const next = toPiSessionEntry(entry, firstKeptEntryId);\n if (next !== undefined) converted.push(next);\n }\n return converted;\n}\n\nfunction boundaryEntryId(branchEntries: readonly SessionEntry[], retainedCount: number): string | undefined {\n let remaining = retainedCount;\n for (let index = branchEntries.length - 1; index >= 0; index -= 1) {\n const entry = branchEntries[index];\n if (entry === undefined) continue;\n if (remaining <= 0) return entry.id;\n remaining -= sessionEntryToContextMessages(entry).length;\n if (remaining <= 0) return entry.id;\n }\n return branchEntries[0]?.id;\n}\n\n/** Header followed by every convertible entry, preserving input order. */\nexport function toPiFileEntries(header: PiSessionHeaderInput, entries: readonly Entry[]): FileEntry[] {\n return [toPiSessionHeader(header), ...toPiSessionEntries(entries)];\n}\n\n/** Reverse direction, for mirroring extension-initiated writes back into the harness. */\nexport function fromPiSessionEntry(entry: SessionEntry): { customType: string; data: unknown } | undefined {\n switch (entry.type) {\n case 'message':\n case 'compaction':\n case 'branch_summary':\n // Produced by the agent loop itself; mirroring these back would double-record them.\n return undefined;\n case 'custom':\n return { customType: entry.customType, data: entry.data };\n default:\n // thinking_level_change, model_change, custom_message, label and session_info have no harness\n // counterpart, so the whole Pi record is preserved under a reserved customType.\n return { customType: `${PI_MIRRORED_ENTRY_PREFIX}${entry.type}`, data: entry };\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import { CURRENT_SESSION_VERSION, sessionEntryToContextMessages } from "@earendil-works/pi-coding-agent";
2
+ function toIsoTimestamp(epochMilliseconds) {
3
+ return new Date(epochMilliseconds).toISOString();
4
+ }
5
+ /** Synthesize the Pi session header the harness has no direct equivalent for. */
6
+ function toPiSessionHeader(input) {
7
+ return {
8
+ type: "session",
9
+ version: CURRENT_SESSION_VERSION,
10
+ id: input.id,
11
+ timestamp: toIsoTimestamp(input.createdAt),
12
+ cwd: input.cwd,
13
+ ...input.parentSessionId === void 0 ? {} : { parentSession: input.parentSessionId }
14
+ };
15
+ }
16
+ /** Convert one harness entry. Compactions require their retained boundary when the tail is non-empty. */
17
+ function toPiSessionEntry(entry, firstKeptEntryId) {
18
+ const base = {
19
+ id: entry.id,
20
+ parentId: entry.parentId,
21
+ timestamp: toIsoTimestamp(entry.timestamp)
22
+ };
23
+ switch (entry.type) {
24
+ case "message": return {
25
+ ...base,
26
+ type: "message",
27
+ message: entry.message
28
+ };
29
+ case "compaction": {
30
+ const retainedBoundary = firstKeptEntryId ?? (entry.retainedTail.length === 0 ? entry.parentId : null);
31
+ if (retainedBoundary === null) return void 0;
32
+ return {
33
+ ...base,
34
+ type: "compaction",
35
+ summary: entry.summary,
36
+ firstKeptEntryId: retainedBoundary,
37
+ tokensBefore: entry.tokensBefore,
38
+ fromHook: entry.fromHook,
39
+ ...entry.details === void 0 ? {} : { details: entry.details },
40
+ ...entry.usage === void 0 ? {} : { usage: entry.usage }
41
+ };
42
+ }
43
+ case "branch_summary": {
44
+ const fromId = entry.fromId ?? entry.parentId;
45
+ if (fromId === null) return void 0;
46
+ return {
47
+ ...base,
48
+ type: "branch_summary",
49
+ fromId,
50
+ summary: entry.summary,
51
+ fromHook: entry.fromHook,
52
+ ...entry.details === void 0 ? {} : { details: entry.details },
53
+ ...entry.usage === void 0 ? {} : { usage: entry.usage }
54
+ };
55
+ }
56
+ case "custom": return {
57
+ ...base,
58
+ type: "custom",
59
+ customType: entry.customType,
60
+ ...entry.data === void 0 ? {} : { data: entry.data }
61
+ };
62
+ default: return;
63
+ }
64
+ }
65
+ /** Convert every representable entry while deriving compaction boundaries from prior branch context. */
66
+ function toPiSessionEntries(entries) {
67
+ const converted = [];
68
+ for (const entry of entries) {
69
+ const next = toPiSessionEntry(entry, entry.type === "compaction" ? boundaryEntryId(converted, entry.retainedTail.length) : void 0);
70
+ if (next !== void 0) converted.push(next);
71
+ }
72
+ return converted;
73
+ }
74
+ function boundaryEntryId(branchEntries, retainedCount) {
75
+ let remaining = retainedCount;
76
+ for (let index = branchEntries.length - 1; index >= 0; index -= 1) {
77
+ const entry = branchEntries[index];
78
+ if (entry === void 0) continue;
79
+ if (remaining <= 0) return entry.id;
80
+ remaining -= sessionEntryToContextMessages(entry).length;
81
+ if (remaining <= 0) return entry.id;
82
+ }
83
+ return branchEntries[0]?.id;
84
+ }
85
+ /** Header followed by every convertible entry, preserving input order. */
86
+ function toPiFileEntries(header, entries) {
87
+ return [toPiSessionHeader(header), ...toPiSessionEntries(entries)];
88
+ }
89
+ /** Reverse direction, for mirroring extension-initiated writes back into the harness. */
90
+ function fromPiSessionEntry(entry) {
91
+ switch (entry.type) {
92
+ case "message":
93
+ case "compaction":
94
+ case "branch_summary": return;
95
+ case "custom": return {
96
+ customType: entry.customType,
97
+ data: entry.data
98
+ };
99
+ default: return {
100
+ customType: `pi.${entry.type}`,
101
+ data: entry
102
+ };
103
+ }
104
+ }
105
+ //#endregion
106
+ export { fromPiSessionEntry, toPiFileEntries, toPiSessionEntries, toPiSessionEntry, toPiSessionHeader };
107
+
108
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/piSessionEntries/index.ts"],"sourcesContent":["/**\n * Boundary between the two session record formats DoomPi carries.\n *\n * The headless server persists conversations through the pi-agent-core harness `Session`, whose\n * entries are numbered (`seq`) and timestamped in epoch milliseconds. Pi extensions are instead\n * handed a pi-coding-agent `SessionManager`, whose JSONL records carry no sequence and use ISO\n * timestamps, and whose entry union has five members the harness cannot express natively.\n *\n * This module is the only place that translation happens. It is pure: no IO, no SQLite, no file\n * access, just functions over arrays.\n */\nimport type { Entry } from '@earendil-works/pi-agent-core';\nimport {\n CURRENT_SESSION_VERSION,\n sessionEntryToContextMessages,\n type BranchSummaryEntry,\n type CompactionEntry,\n type CustomEntry,\n type FileEntry,\n type SessionEntry,\n type SessionEntryBase,\n type SessionHeader,\n type SessionMessageEntry,\n} from '@earendil-works/pi-coding-agent';\n\n/** Reserved harness `customType` prefix for Pi entry types the harness has no native record for. */\nexport const PI_MIRRORED_ENTRY_PREFIX = 'pi.';\n\n/** Harness `SessionMetadata` carries no name, model, or thinking level, so the header is synthesized. */\nexport interface PiSessionHeaderInput {\n id: string;\n cwd: string;\n createdAt: number;\n parentSessionId?: string;\n}\n\nfunction toIsoTimestamp(epochMilliseconds: number): string {\n return new Date(epochMilliseconds).toISOString();\n}\n\n/** Synthesize the Pi session header the harness has no direct equivalent for. */\nexport function toPiSessionHeader(input: PiSessionHeaderInput): SessionHeader {\n return {\n type: 'session',\n version: CURRENT_SESSION_VERSION,\n id: input.id,\n timestamp: toIsoTimestamp(input.createdAt),\n cwd: input.cwd,\n ...(input.parentSessionId === undefined ? {} : { parentSession: input.parentSessionId }),\n };\n}\n\n/** Convert one harness entry. Compactions require their retained boundary when the tail is non-empty. */\nexport function toPiSessionEntry(entry: Entry, firstKeptEntryId?: string): SessionEntry | undefined {\n // `seq` is deliberately dropped: Pi orders entries by file position and the parent link.\n const base: Omit<SessionEntryBase, 'type'> = {\n id: entry.id,\n parentId: entry.parentId,\n timestamp: toIsoTimestamp(entry.timestamp),\n };\n switch (entry.type) {\n case 'message': {\n const message: SessionMessageEntry = { ...base, type: 'message', message: entry.message };\n return message;\n }\n case 'compaction': {\n const retainedBoundary = firstKeptEntryId ?? (entry.retainedTail.length === 0 ? entry.parentId : null);\n if (retainedBoundary === null) return undefined;\n const compaction: CompactionEntry = {\n ...base,\n type: 'compaction',\n summary: entry.summary,\n firstKeptEntryId: retainedBoundary,\n tokensBefore: entry.tokensBefore,\n fromHook: entry.fromHook,\n ...(entry.details === undefined ? {} : { details: entry.details }),\n ...(entry.usage === undefined ? {} : { usage: entry.usage }),\n };\n return compaction;\n }\n case 'branch_summary': {\n // Pi requires an origin entry id. A summary of a branch with no origin cannot be represented,\n // and a partial record would corrupt the tree Pi rebuilds from these links.\n const fromId = entry.fromId ?? entry.parentId;\n if (fromId === null) return undefined;\n const branchSummary: BranchSummaryEntry = {\n ...base,\n type: 'branch_summary',\n fromId,\n summary: entry.summary,\n fromHook: entry.fromHook,\n ...(entry.details === undefined ? {} : { details: entry.details }),\n ...(entry.usage === undefined ? {} : { usage: entry.usage }),\n };\n return branchSummary;\n }\n case 'custom': {\n const custom: CustomEntry = {\n ...base,\n type: 'custom',\n customType: entry.customType,\n ...(entry.data === undefined ? {} : { data: entry.data }),\n };\n return custom;\n }\n default:\n // A harness entry type introduced after this boundary was written has no Pi record yet.\n return undefined;\n }\n}\n\n/** Convert every representable entry while deriving compaction boundaries from prior branch context. */\nexport function toPiSessionEntries(entries: readonly Entry[]): SessionEntry[] {\n const converted: SessionEntry[] = [];\n for (const entry of entries) {\n const firstKeptEntryId =\n entry.type === 'compaction' ? boundaryEntryId(converted, entry.retainedTail.length) : undefined;\n const next = toPiSessionEntry(entry, firstKeptEntryId);\n if (next !== undefined) converted.push(next);\n }\n return converted;\n}\n\nfunction boundaryEntryId(branchEntries: readonly SessionEntry[], retainedCount: number): string | undefined {\n let remaining = retainedCount;\n for (let index = branchEntries.length - 1; index >= 0; index -= 1) {\n const entry = branchEntries[index];\n if (entry === undefined) continue;\n if (remaining <= 0) return entry.id;\n remaining -= sessionEntryToContextMessages(entry).length;\n if (remaining <= 0) return entry.id;\n }\n return branchEntries[0]?.id;\n}\n\n/** Header followed by every convertible entry, preserving input order. */\nexport function toPiFileEntries(header: PiSessionHeaderInput, entries: readonly Entry[]): FileEntry[] {\n return [toPiSessionHeader(header), ...toPiSessionEntries(entries)];\n}\n\n/** Reverse direction, for mirroring extension-initiated writes back into the harness. */\nexport function fromPiSessionEntry(entry: SessionEntry): { customType: string; data: unknown } | undefined {\n switch (entry.type) {\n case 'message':\n case 'compaction':\n case 'branch_summary':\n // Produced by the agent loop itself; mirroring these back would double-record them.\n return undefined;\n case 'custom':\n return { customType: entry.customType, data: entry.data };\n default:\n // thinking_level_change, model_change, custom_message, label and session_info have no harness\n // counterpart, so the whole Pi record is preserved under a reserved customType.\n return { customType: `${PI_MIRRORED_ENTRY_PREFIX}${entry.type}`, data: entry };\n }\n}\n"],"mappings":";AAoCA,SAAS,eAAe,mBAAmC;CACzD,OAAO,IAAI,KAAK,iBAAiB,CAAC,CAAC,YAAY;AACjD;;AAGA,SAAgB,kBAAkB,OAA4C;CAC5E,OAAO;EACL,MAAM;EACN,SAAS;EACT,IAAI,MAAM;EACV,WAAW,eAAe,MAAM,SAAS;EACzC,KAAK,MAAM;EACX,GAAI,MAAM,oBAAoB,KAAA,IAAY,CAAC,IAAI,EAAE,eAAe,MAAM,gBAAgB;CACxF;AACF;;AAGA,SAAgB,iBAAiB,OAAc,kBAAqD;CAElG,MAAM,OAAuC;EAC3C,IAAI,MAAM;EACV,UAAU,MAAM;EAChB,WAAW,eAAe,MAAM,SAAS;CAC3C;CACA,QAAQ,MAAM,MAAd;EACE,KAAK,WAEH,OAAO;GADgC,GAAG;GAAM,MAAM;GAAW,SAAS,MAAM;EACnE;EAEf,KAAK,cAAc;GACjB,MAAM,mBAAmB,qBAAqB,MAAM,aAAa,WAAW,IAAI,MAAM,WAAW;GACjG,IAAI,qBAAqB,MAAM,OAAO,KAAA;GAWtC,OAAO;IATL,GAAG;IACH,MAAM;IACN,SAAS,MAAM;IACf,kBAAkB;IAClB,cAAc,MAAM;IACpB,UAAU,MAAM;IAChB,GAAI,MAAM,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,SAAS,MAAM,QAAQ;IAChE,GAAI,MAAM,UAAU,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO,MAAM,MAAM;GAE5C;EAClB;EACA,KAAK,kBAAkB;GAGrB,MAAM,SAAS,MAAM,UAAU,MAAM;GACrC,IAAI,WAAW,MAAM,OAAO,KAAA;GAU5B,OAAO;IARL,GAAG;IACH,MAAM;IACN;IACA,SAAS,MAAM;IACf,UAAU,MAAM;IAChB,GAAI,MAAM,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,SAAS,MAAM,QAAQ;IAChE,GAAI,MAAM,UAAU,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO,MAAM,MAAM;GAEzC;EACrB;EACA,KAAK,UAOH,OAAO;GALL,GAAG;GACH,MAAM;GACN,YAAY,MAAM;GAClB,GAAI,MAAM,SAAS,KAAA,IAAY,CAAC,IAAI,EAAE,MAAM,MAAM,KAAK;EAE7C;EAEd,SAEE;CACJ;AACF;;AAGA,SAAgB,mBAAmB,SAA2C;CAC5E,MAAM,YAA4B,CAAC;CACnC,KAAK,MAAM,SAAS,SAAS;EAG3B,MAAM,OAAO,iBAAiB,OAD5B,MAAM,SAAS,eAAe,gBAAgB,WAAW,MAAM,aAAa,MAAM,IAAI,KAAA,CACnC;EACrD,IAAI,SAAS,KAAA,GAAW,UAAU,KAAK,IAAI;CAC7C;CACA,OAAO;AACT;AAEA,SAAS,gBAAgB,eAAwC,eAA2C;CAC1G,IAAI,YAAY;CAChB,KAAK,IAAI,QAAQ,cAAc,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;EACjE,MAAM,QAAQ,cAAc;EAC5B,IAAI,UAAU,KAAA,GAAW;EACzB,IAAI,aAAa,GAAG,OAAO,MAAM;EACjC,aAAa,8BAA8B,KAAK,CAAC,CAAC;EAClD,IAAI,aAAa,GAAG,OAAO,MAAM;CACnC;CACA,OAAO,cAAc,EAAE,EAAE;AAC3B;;AAGA,SAAgB,gBAAgB,QAA8B,SAAwC;CACpG,OAAO,CAAC,kBAAkB,MAAM,GAAG,GAAG,mBAAmB,OAAO,CAAC;AACnE;;AAGA,SAAgB,mBAAmB,OAAwE;CACzG,QAAQ,MAAM,MAAd;EACE,KAAK;EACL,KAAK;EACL,KAAK,kBAEH;EACF,KAAK,UACH,OAAO;GAAE,YAAY,MAAM;GAAY,MAAM,MAAM;EAAK;EAC1D,SAGE,OAAO;GAAE,YAAY,MAA8B,MAAM;GAAQ,MAAM;EAAM;CACjF;AACF"}