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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1149) hide show
  1. package/LICENSE +149 -21
  2. package/NOTICE +41 -0
  3. package/dist/agentModel.cjs +1 -1
  4. package/dist/agentModel.d.mts +2 -2
  5. package/dist/agentModel.mjs +1 -2
  6. package/dist/apiContracts.cjs +623 -802
  7. package/dist/apiContracts.cjs.map +1 -1
  8. package/dist/apiContracts.d.mts +277 -615
  9. package/dist/apiContracts.d.mts.map +1 -1
  10. package/dist/apiContracts.mjs +617 -794
  11. package/dist/apiContracts.mjs.map +1 -1
  12. package/dist/askUser.cjs +2 -2
  13. package/dist/askUser.d.mts +2 -2
  14. package/dist/askUser.mjs +1 -2
  15. package/dist/authorTools.mjs +1 -2
  16. package/dist/backgroundWork.cjs +3 -3
  17. package/dist/backgroundWork.d.mts +2 -2
  18. package/dist/backgroundWork.mjs +1 -2
  19. package/dist/bundleAssetPolicy.mjs +1 -2
  20. package/dist/chatgptAuth.cjs +3 -2
  21. package/dist/chatgptAuth.d.mts +3 -2
  22. package/dist/chatgptAuth.mjs +2 -1
  23. package/dist/childProcess.cjs +1 -1
  24. package/dist/childProcess.d.mts +2 -2
  25. package/dist/childProcess.mjs +1 -2
  26. package/dist/childSession.cjs +11 -6
  27. package/dist/childSession.d.mts +3 -3
  28. package/dist/childSession.mjs +3 -3
  29. package/dist/cockpitContainer.mjs +1 -2
  30. package/dist/config.cjs +1 -1
  31. package/dist/config.d.mts +3 -3
  32. package/dist/config.mjs +1 -2
  33. package/dist/contextApi.cjs +1 -0
  34. package/dist/contextApi.d.mts +2 -2
  35. package/dist/contextApi.mjs +2 -2
  36. package/dist/contextContributions.cjs +4 -4
  37. package/dist/contextContributions.d.mts +3 -3
  38. package/dist/contextContributions.mjs +3 -3
  39. package/dist/contextDetailStore.cjs +7 -5
  40. package/dist/contextDetailStore.cjs.map +1 -1
  41. package/dist/contextDetailStore.d.mts +2 -1
  42. package/dist/contextDetailStore.d.mts.map +1 -1
  43. package/dist/contextDetailStore.mjs +6 -4
  44. package/dist/contextDetailStore.mjs.map +1 -1
  45. package/dist/contextProjection.cjs +7 -2
  46. package/dist/contextProjection.cjs.map +1 -1
  47. package/dist/contextProjection.d.mts +4 -1
  48. package/dist/contextProjection.d.mts.map +1 -1
  49. package/dist/contextProjection.mjs +5 -2
  50. package/dist/contextProjection.mjs.map +1 -1
  51. package/dist/cordisHost.cjs +11 -11
  52. package/dist/cordisHost.d.mts +2 -2
  53. package/dist/cordisHost.mjs +1 -2
  54. package/dist/delegation.cjs +8 -8
  55. package/dist/delegation.d.mts +2 -2
  56. package/dist/delegation.mjs +1 -2
  57. package/dist/executionBudget.cjs +4 -3
  58. package/dist/executionBudget.cjs.map +1 -1
  59. package/dist/executionBudget.d.mts +2 -2
  60. package/dist/executionBudget.d.mts.map +1 -1
  61. package/dist/executionBudget.mjs +4 -3
  62. package/dist/executionBudget.mjs.map +1 -1
  63. package/dist/extensionFile.cjs +5 -0
  64. package/dist/extensionFile.d.mts +4 -2
  65. package/dist/extensionFile.mjs +4 -2
  66. package/dist/footer.d.mts +2 -2
  67. package/dist/footer.mjs +1 -2
  68. package/dist/headless.cjs +14 -14
  69. package/dist/headless.d.mts +2 -2
  70. package/dist/headless.mjs +1 -2
  71. package/dist/headlessHub.cjs +308 -109
  72. package/dist/headlessHub.cjs.map +1 -1
  73. package/dist/headlessHub.d.mts +71 -36
  74. package/dist/headlessHub.d.mts.map +1 -1
  75. package/dist/headlessHub.mjs +309 -110
  76. package/dist/headlessHub.mjs.map +1 -1
  77. package/dist/headlessProtocol.cjs +327 -0
  78. package/dist/headlessProtocol.cjs.map +1 -0
  79. package/dist/headlessProtocol.d.mts +30 -0
  80. package/dist/headlessProtocol.d.mts.map +1 -0
  81. package/dist/headlessProtocol.mjs +326 -0
  82. package/dist/headlessProtocol.mjs.map +1 -0
  83. package/dist/headlessServer.cjs +166 -151
  84. package/dist/headlessServer.cjs.map +1 -1
  85. package/dist/headlessServer.d.mts +13 -5
  86. package/dist/headlessServer.d.mts.map +1 -1
  87. package/dist/headlessServer.mjs +166 -151
  88. package/dist/headlessServer.mjs.map +1 -1
  89. package/dist/headlessSessionHost.d.mts +58 -21
  90. package/dist/headlessSessionHost.d.mts.map +1 -1
  91. package/dist/help.cjs +20 -20
  92. package/dist/help.d.mts +2 -2
  93. package/dist/help.mjs +2 -2
  94. package/dist/history.cjs +16 -20
  95. package/dist/history.d.mts +9 -7
  96. package/dist/history.mjs +6 -7
  97. package/dist/historyOwnership.cjs.map +1 -1
  98. package/dist/historyOwnership.d.mts +1 -1
  99. package/dist/historyOwnership.mjs.map +1 -1
  100. package/dist/hubChannel.cjs +9 -0
  101. package/dist/hubChannel.d.mts +3 -2
  102. package/dist/hubChannel.mjs +3 -2
  103. package/dist/index.cjs +26 -28
  104. package/dist/index.d.mts +6 -6
  105. package/dist/index.mjs +6 -6
  106. package/dist/interop/chord.mjs +1 -0
  107. package/dist/interop/chordContext.mjs +1 -0
  108. package/dist/json.cjs +11 -5
  109. package/dist/json.d.mts +4 -2
  110. package/dist/json.mjs +4 -2
  111. package/dist/kernel.cjs +1 -1
  112. package/dist/kernel.d.mts +3 -3
  113. package/dist/kernel.mjs +1 -2
  114. package/dist/leader.d.mts +2 -2
  115. package/dist/leader.mjs +1 -2
  116. package/dist/logSinkTelemetry.mjs +1 -2
  117. package/dist/machineApi.cjs +80 -74
  118. package/dist/machineApi.cjs.map +1 -1
  119. package/dist/machineApi.d.mts +5 -2
  120. package/dist/machineApi.d.mts.map +1 -1
  121. package/dist/machineApi.mjs +78 -71
  122. package/dist/machineApi.mjs.map +1 -1
  123. package/dist/main.cjs +2 -1
  124. package/dist/main.d.mts +2 -1
  125. package/dist/main.mjs +2 -1
  126. package/dist/mcpFacet.d.mts +3 -3
  127. package/dist/mcpProjection.cjs +13 -13
  128. package/dist/mcpProjection.d.mts +2 -2
  129. package/dist/mcpProjection.mjs +1 -2
  130. package/dist/mcpSchemaCost.cjs +4 -4
  131. package/dist/mcpSchemaCost.cjs.map +1 -1
  132. package/dist/mcpSchemaCost.d.mts +2 -2
  133. package/dist/mcpSchemaCost.mjs +4 -4
  134. package/dist/mcpSchemaCost.mjs.map +1 -1
  135. package/dist/mcpSession.cjs +7 -7
  136. package/dist/mcpSession.d.mts +2 -2
  137. package/dist/mcpSession.mjs +1 -2
  138. package/dist/mcpStatus.cjs +2 -2
  139. package/dist/mcpStatus.d.mts +2 -2
  140. package/dist/mcpStatus.mjs +1 -2
  141. package/dist/mcpToolResolver.cjs +3 -3
  142. package/dist/mcpToolResolver.d.mts +2 -2
  143. package/dist/mcpToolResolver.mjs +1 -2
  144. package/dist/mcpWidget.d.mts +2 -2
  145. package/dist/moduleResolution.cjs +43 -8
  146. package/dist/moduleResolution.cjs.map +1 -1
  147. package/dist/moduleResolution.d.mts +10 -1
  148. package/dist/moduleResolution.d.mts.map +1 -1
  149. package/dist/moduleResolution.mjs +40 -7
  150. package/dist/moduleResolution.mjs.map +1 -1
  151. package/dist/narration.cjs +3 -3
  152. package/dist/narration.d.mts +2 -2
  153. package/dist/narration.mjs +1 -2
  154. package/dist/native.cjs +9 -0
  155. package/dist/native.d.mts +4 -3
  156. package/dist/native.mjs +3 -2
  157. package/dist/nodePlatform.cjs +77 -0
  158. package/dist/nodePlatform.cjs.map +1 -0
  159. package/dist/nodePlatform.d.mts +17 -0
  160. package/dist/nodePlatform.d.mts.map +1 -0
  161. package/dist/nodePlatform.mjs +72 -0
  162. package/dist/nodePlatform.mjs.map +1 -0
  163. package/dist/notification.cjs +15 -15
  164. package/dist/notification.d.mts +2 -2
  165. package/dist/notification.mjs +1 -2
  166. package/dist/packageApi.cjs +11 -11
  167. package/dist/packageApi.d.mts +2 -2
  168. package/dist/packageApi.mjs +2 -2
  169. package/dist/packageApiServer.cjs +45 -27
  170. package/dist/packageApiServer.cjs.map +1 -1
  171. package/dist/packageApiServer.d.mts +36 -26
  172. package/dist/packageApiServer.d.mts.map +1 -1
  173. package/dist/packageApiServer.mjs +44 -26
  174. package/dist/packageApiServer.mjs.map +1 -1
  175. package/dist/piSettings.cjs +41 -20
  176. package/dist/piSettings.d.mts +4 -2
  177. package/dist/piSettings.mjs +4 -2
  178. package/dist/platform.cjs +62 -0
  179. package/dist/platform.d.mts +10 -0
  180. package/dist/platform.mjs +10 -0
  181. package/dist/pluginProtocol.cjs +7 -8
  182. package/dist/pluginProtocol.d.mts +2 -2
  183. package/dist/pluginProtocol.mjs +1 -2
  184. package/dist/poPackage.cjs +12 -0
  185. package/dist/poPackage.d.mts +3 -0
  186. package/dist/poPackage.mjs +3 -0
  187. package/dist/profileIdentity.cjs +1 -1
  188. package/dist/profileIdentity.d.mts +2 -2
  189. package/dist/profileIdentity.mjs +1 -2
  190. package/dist/protocol.cjs +3 -3
  191. package/dist/protocol.d.mts +2 -2
  192. package/dist/protocol.mjs +1 -2
  193. package/dist/readiness.cjs +6 -6
  194. package/dist/readiness.d.mts +2 -2
  195. package/dist/readiness.mjs +1 -2
  196. package/dist/remoteApi.cjs.map +1 -1
  197. package/dist/remoteApi.d.mts +2 -2
  198. package/dist/remoteApi.mjs.map +1 -1
  199. package/dist/remoteRuntime.cjs +42 -65
  200. package/dist/remoteRuntime.cjs.map +1 -1
  201. package/dist/remoteRuntime.d.mts +3 -2
  202. package/dist/remoteRuntime.d.mts.map +1 -1
  203. package/dist/remoteRuntime.mjs +41 -62
  204. package/dist/remoteRuntime.mjs.map +1 -1
  205. package/dist/runtimeConfig.cjs +4 -4
  206. package/dist/runtimeConfig.cjs.map +1 -1
  207. package/dist/runtimeConfig.d.mts +10 -9
  208. package/dist/runtimeConfig.d.mts.map +1 -1
  209. package/dist/runtimeConfig.mjs +4 -4
  210. package/dist/runtimeConfig.mjs.map +1 -1
  211. package/dist/runtimeContextApi.cjs +10 -3
  212. package/dist/runtimeContextApi.cjs.map +1 -1
  213. package/dist/runtimeContextApi.d.mts +3 -3
  214. package/dist/runtimeContextApi.d.mts.map +1 -1
  215. package/dist/runtimeContextApi.mjs +10 -3
  216. package/dist/runtimeContextApi.mjs.map +1 -1
  217. package/dist/runtimeCordisHost.cjs +46 -46
  218. package/dist/runtimeCordisHost.cjs.map +1 -1
  219. package/dist/runtimeCordisHost.d.mts +29 -28
  220. package/dist/runtimeCordisHost.d.mts.map +1 -1
  221. package/dist/runtimeCordisHost.mjs +42 -42
  222. package/dist/runtimeCordisHost.mjs.map +1 -1
  223. package/dist/runtimeIdentity.cjs +6 -9
  224. package/dist/runtimeIdentity.cjs.map +1 -1
  225. package/dist/runtimeIdentity.d.mts +5 -1
  226. package/dist/runtimeIdentity.d.mts.map +1 -1
  227. package/dist/runtimeIdentity.mjs +5 -8
  228. package/dist/runtimeIdentity.mjs.map +1 -1
  229. package/dist/runtimeJson.cjs +10 -45
  230. package/dist/runtimeJson.d.mts +3 -22
  231. package/dist/runtimeJson.mjs +3 -39
  232. package/dist/runtimeLogSinkTelemetry.cjs +19 -19
  233. package/dist/runtimeLogSinkTelemetry.cjs.map +1 -1
  234. package/dist/runtimeLogSinkTelemetry.d.mts +19 -19
  235. package/dist/runtimeLogSinkTelemetry.mjs +19 -19
  236. package/dist/runtimeLogSinkTelemetry.mjs.map +1 -1
  237. package/dist/runtimePackages.cjs +7 -2
  238. package/dist/runtimePackages.cjs.map +1 -1
  239. package/dist/runtimePackages.d.mts +4 -1
  240. package/dist/runtimePackages.d.mts.map +1 -1
  241. package/dist/runtimePackages.mjs +7 -2
  242. package/dist/runtimePackages.mjs.map +1 -1
  243. package/dist/runtimePiSettings.cjs +40 -263
  244. package/dist/runtimePiSettings.d.mts +3 -72
  245. package/dist/runtimePiSettings.mjs +3 -241
  246. package/dist/runtimeProtocol.cjs +19 -19
  247. package/dist/runtimeProtocol.cjs.map +1 -1
  248. package/dist/runtimeProtocol.d.mts +7 -7
  249. package/dist/runtimeProtocol.d.mts.map +1 -1
  250. package/dist/runtimeProtocol.mjs +17 -17
  251. package/dist/runtimeProtocol.mjs.map +1 -1
  252. package/dist/runtimeTransition.cjs +9 -9
  253. package/dist/runtimeTransition.cjs.map +1 -1
  254. package/dist/runtimeTransition.d.mts +10 -10
  255. package/dist/runtimeTransition.d.mts.map +1 -1
  256. package/dist/runtimeTransition.mjs +7 -7
  257. package/dist/runtimeTransition.mjs.map +1 -1
  258. package/dist/sandboxHarness.mjs +1 -2
  259. package/dist/server.cjs +3 -7
  260. package/dist/server.d.mts +6 -6
  261. package/dist/server.mjs +3 -4
  262. package/dist/serverPlugin.cjs +39 -0
  263. package/dist/serverPlugin.d.mts +12 -0
  264. package/dist/serverPlugin.mjs +11 -0
  265. package/dist/serverTelemetry.cjs +1 -1
  266. package/dist/serverTelemetry.cjs.map +1 -1
  267. package/dist/serverTelemetry.d.mts +2 -2
  268. package/dist/serverTelemetry.mjs +2 -2
  269. package/dist/serverTelemetry.mjs.map +1 -1
  270. package/dist/sessionFilesApi.cjs +41 -37
  271. package/dist/sessionFilesApi.cjs.map +1 -1
  272. package/dist/sessionFilesApi.d.mts +6 -3
  273. package/dist/sessionFilesApi.d.mts.map +1 -1
  274. package/dist/sessionFilesApi.mjs +41 -36
  275. package/dist/sessionFilesApi.mjs.map +1 -1
  276. package/dist/sessionProtocol.cjs +31 -6
  277. package/dist/sessionProtocol.d.mts +8 -3
  278. package/dist/sessionProtocol.mjs +8 -2
  279. package/dist/skills.cjs +5 -5
  280. package/dist/skills.d.mts +2 -2
  281. package/dist/skills.mjs +1 -2
  282. package/dist/sqliteSessionStorage.cjs +28 -50
  283. package/dist/sqliteSessionStorage.cjs.map +1 -1
  284. package/dist/sqliteSessionStorage.d.mts +13 -20
  285. package/dist/sqliteSessionStorage.d.mts.map +1 -1
  286. package/dist/sqliteSessionStorage.mjs +25 -48
  287. package/dist/sqliteSessionStorage.mjs.map +1 -1
  288. package/dist/src/constants/agentSettled.cjs +7 -0
  289. package/dist/src/constants/agentSettled.cjs.map +1 -0
  290. package/dist/src/constants/agentSettled.mjs +7 -0
  291. package/dist/src/constants/agentSettled.mjs.map +1 -0
  292. package/dist/src/constants/contextApi.cjs +3 -1
  293. package/dist/src/constants/contextApi.cjs.map +1 -1
  294. package/dist/src/constants/contextApi.d.mts +2 -1
  295. package/dist/src/constants/contextApi.d.mts.map +1 -1
  296. package/dist/src/constants/contextApi.mjs +3 -2
  297. package/dist/src/constants/contextApi.mjs.map +1 -1
  298. package/dist/src/constants/voiceTools.cjs +6 -6
  299. package/dist/src/constants/voiceTools.cjs.map +1 -1
  300. package/dist/src/constants/voiceTools.d.mts +3 -3
  301. package/dist/src/constants/voiceTools.mjs +4 -4
  302. package/dist/src/constants/voiceTools.mjs.map +1 -1
  303. package/dist/src/extensions/extensionFile.cjs +22 -5
  304. package/dist/src/extensions/extensionFile.cjs.map +1 -1
  305. package/dist/src/extensions/extensionFile.d.mts +17 -4
  306. package/dist/src/extensions/extensionFile.d.mts.map +1 -1
  307. package/dist/src/extensions/extensionFile.mjs +22 -6
  308. package/dist/src/extensions/extensionFile.mjs.map +1 -1
  309. package/dist/src/extensions/serverPlugin.cjs +231 -92
  310. package/dist/src/extensions/serverPlugin.cjs.map +1 -1
  311. package/dist/src/extensions/serverPlugin.d.mts +2 -2
  312. package/dist/src/extensions/serverPlugin.d.mts.map +1 -1
  313. package/dist/src/extensions/serverPlugin.mjs +232 -93
  314. package/dist/src/extensions/serverPlugin.mjs.map +1 -1
  315. package/dist/src/pi/piSessionRuntime.cjs +349 -142
  316. package/dist/src/pi/piSessionRuntime.cjs.map +1 -1
  317. package/dist/src/pi/piSessionRuntime.d.mts +18 -17
  318. package/dist/src/pi/piSessionRuntime.d.mts.map +1 -1
  319. package/dist/src/pi/piSessionRuntime.mjs +342 -135
  320. package/dist/src/pi/piSessionRuntime.mjs.map +1 -1
  321. package/dist/src/schemas/agentModel.cjs +2 -2
  322. package/dist/src/schemas/agentModel.cjs.map +1 -1
  323. package/dist/src/schemas/agentModel.d.mts +1 -1
  324. package/dist/src/schemas/agentModel.mjs +2 -2
  325. package/dist/src/schemas/agentModel.mjs.map +1 -1
  326. package/dist/src/schemas/apiContracts.d.mts +2 -2
  327. package/dist/src/schemas/apiContracts.d.mts.map +1 -1
  328. package/dist/src/schemas/askUser.cjs +4 -4
  329. package/dist/src/schemas/askUser.cjs.map +1 -1
  330. package/dist/src/schemas/askUser.d.mts +4 -4
  331. package/dist/src/schemas/askUser.d.mts.map +1 -1
  332. package/dist/src/schemas/askUser.mjs +3 -3
  333. package/dist/src/schemas/askUser.mjs.map +1 -1
  334. package/dist/src/schemas/backgroundWork.cjs +10 -10
  335. package/dist/src/schemas/backgroundWork.cjs.map +1 -1
  336. package/dist/src/schemas/backgroundWork.d.mts +9 -9
  337. package/dist/src/schemas/backgroundWork.d.mts.map +1 -1
  338. package/dist/src/schemas/backgroundWork.mjs +8 -8
  339. package/dist/src/schemas/backgroundWork.mjs.map +1 -1
  340. package/dist/src/schemas/childProcess.cjs +5 -5
  341. package/dist/src/schemas/childProcess.cjs.map +1 -1
  342. package/dist/src/schemas/childProcess.d.mts +2 -2
  343. package/dist/src/schemas/childProcess.mjs +5 -5
  344. package/dist/src/schemas/childProcess.mjs.map +1 -1
  345. package/dist/src/schemas/contextContributions.cjs +10 -10
  346. package/dist/src/schemas/contextContributions.cjs.map +1 -1
  347. package/dist/src/schemas/contextContributions.d.mts +16 -16
  348. package/dist/src/schemas/contextContributions.d.mts.map +1 -1
  349. package/dist/src/schemas/contextContributions.mjs +8 -8
  350. package/dist/src/schemas/contextContributions.mjs.map +1 -1
  351. package/dist/src/schemas/delegation.cjs +17 -17
  352. package/dist/src/schemas/delegation.cjs.map +1 -1
  353. package/dist/src/schemas/delegation.d.mts +16 -16
  354. package/dist/src/schemas/delegation.d.mts.map +1 -1
  355. package/dist/src/schemas/delegation.mjs +10 -10
  356. package/dist/src/schemas/delegation.mjs.map +1 -1
  357. package/dist/src/schemas/extensionFile.d.mts +23 -19
  358. package/dist/src/schemas/extensionFile.d.mts.map +1 -1
  359. package/dist/src/schemas/footer.cjs.map +1 -1
  360. package/dist/src/schemas/footer.d.mts +5 -5
  361. package/dist/src/schemas/footer.d.mts.map +1 -1
  362. package/dist/src/schemas/footer.mjs.map +1 -1
  363. package/dist/src/schemas/headless.cjs +37 -37
  364. package/dist/src/schemas/headless.cjs.map +1 -1
  365. package/dist/src/schemas/headless.d.mts +100 -101
  366. package/dist/src/schemas/headless.d.mts.map +1 -1
  367. package/dist/src/schemas/headless.mjs +24 -24
  368. package/dist/src/schemas/headless.mjs.map +1 -1
  369. package/dist/src/schemas/help.cjs +60 -60
  370. package/dist/src/schemas/help.cjs.map +1 -1
  371. package/dist/src/schemas/help.d.mts +43 -43
  372. package/dist/src/schemas/help.d.mts.map +1 -1
  373. package/dist/src/schemas/help.mjs +41 -41
  374. package/dist/src/schemas/help.mjs.map +1 -1
  375. package/dist/src/schemas/home.cjs +127 -0
  376. package/dist/src/schemas/home.cjs.map +1 -0
  377. package/dist/src/schemas/home.d.mts +63 -0
  378. package/dist/src/schemas/home.d.mts.map +1 -0
  379. package/dist/src/schemas/home.mjs +121 -0
  380. package/dist/src/schemas/home.mjs.map +1 -0
  381. package/dist/src/schemas/httpApiContracts.cjs +441 -0
  382. package/dist/src/schemas/httpApiContracts.cjs.map +1 -0
  383. package/dist/src/schemas/httpApiContracts.d.mts +78 -0
  384. package/dist/src/schemas/httpApiContracts.d.mts.map +1 -0
  385. package/dist/src/schemas/httpApiContracts.mjs +434 -0
  386. package/dist/src/schemas/httpApiContracts.mjs.map +1 -0
  387. package/dist/src/schemas/hubChannel.cjs +3 -0
  388. package/dist/src/schemas/hubChannel.cjs.map +1 -1
  389. package/dist/src/schemas/hubChannel.d.mts +84 -60
  390. package/dist/src/schemas/hubChannel.d.mts.map +1 -1
  391. package/dist/src/schemas/hubChannel.mjs +3 -1
  392. package/dist/src/schemas/hubChannel.mjs.map +1 -1
  393. package/dist/src/schemas/leader.cjs.map +1 -1
  394. package/dist/src/schemas/leader.d.mts +3 -3
  395. package/dist/src/schemas/leader.d.mts.map +1 -1
  396. package/dist/src/schemas/leader.mjs.map +1 -1
  397. package/dist/src/schemas/mcpBundle.d.mts +3 -3
  398. package/dist/src/schemas/mcpFacet.cjs.map +1 -1
  399. package/dist/src/schemas/mcpFacet.d.mts +22 -22
  400. package/dist/src/schemas/mcpFacet.d.mts.map +1 -1
  401. package/dist/src/schemas/mcpFacet.mjs.map +1 -1
  402. package/dist/src/schemas/mcpProjection.cjs +41 -41
  403. package/dist/src/schemas/mcpProjection.cjs.map +1 -1
  404. package/dist/src/schemas/mcpProjection.d.mts +31 -30
  405. package/dist/src/schemas/mcpProjection.d.mts.map +1 -1
  406. package/dist/src/schemas/mcpProjection.mjs +29 -29
  407. package/dist/src/schemas/mcpProjection.mjs.map +1 -1
  408. package/dist/src/schemas/mcpSession.cjs +23 -23
  409. package/dist/src/schemas/mcpSession.cjs.map +1 -1
  410. package/dist/src/schemas/mcpSession.d.mts +12 -12
  411. package/dist/src/schemas/mcpSession.d.mts.map +1 -1
  412. package/dist/src/schemas/mcpSession.mjs +18 -18
  413. package/dist/src/schemas/mcpSession.mjs.map +1 -1
  414. package/dist/src/schemas/mcpStatus.cjs +5 -5
  415. package/dist/src/schemas/mcpStatus.cjs.map +1 -1
  416. package/dist/src/schemas/mcpStatus.d.mts +4 -4
  417. package/dist/src/schemas/mcpStatus.d.mts.map +1 -1
  418. package/dist/src/schemas/mcpStatus.mjs +4 -4
  419. package/dist/src/schemas/mcpStatus.mjs.map +1 -1
  420. package/dist/src/schemas/mcpToolResolver.cjs +9 -9
  421. package/dist/src/schemas/mcpToolResolver.cjs.map +1 -1
  422. package/dist/src/schemas/mcpToolResolver.d.mts +7 -7
  423. package/dist/src/schemas/mcpToolResolver.d.mts.map +1 -1
  424. package/dist/src/schemas/mcpToolResolver.mjs +7 -7
  425. package/dist/src/schemas/mcpToolResolver.mjs.map +1 -1
  426. package/dist/src/schemas/narration.cjs +9 -9
  427. package/dist/src/schemas/narration.cjs.map +1 -1
  428. package/dist/src/schemas/narration.d.mts +5 -5
  429. package/dist/src/schemas/narration.d.mts.map +1 -1
  430. package/dist/src/schemas/narration.mjs +7 -7
  431. package/dist/src/schemas/narration.mjs.map +1 -1
  432. package/dist/src/schemas/notification.cjs +45 -45
  433. package/dist/src/schemas/notification.cjs.map +1 -1
  434. package/dist/src/schemas/notification.d.mts +22 -22
  435. package/dist/src/schemas/notification.d.mts.map +1 -1
  436. package/dist/src/schemas/notification.mjs +31 -31
  437. package/dist/src/schemas/notification.mjs.map +1 -1
  438. package/dist/src/schemas/packageApi.cjs +28 -28
  439. package/dist/src/schemas/packageApi.cjs.map +1 -1
  440. package/dist/src/schemas/packageApi.d.mts +91 -65
  441. package/dist/src/schemas/packageApi.d.mts.map +1 -1
  442. package/dist/src/schemas/packageApi.mjs +18 -18
  443. package/dist/src/schemas/packageApi.mjs.map +1 -1
  444. package/dist/src/schemas/platform.cjs +34 -0
  445. package/dist/src/schemas/platform.cjs.map +1 -0
  446. package/dist/src/schemas/platform.d.mts +75 -0
  447. package/dist/src/schemas/platform.d.mts.map +1 -0
  448. package/dist/src/schemas/platform.mjs +27 -0
  449. package/dist/src/schemas/platform.mjs.map +1 -0
  450. package/dist/src/schemas/pluginContributions.cjs.map +1 -1
  451. package/dist/src/schemas/pluginContributions.d.mts +12 -12
  452. package/dist/src/schemas/pluginContributions.d.mts.map +1 -1
  453. package/dist/src/schemas/pluginContributions.mjs.map +1 -1
  454. package/dist/src/schemas/pluginProtocol.cjs +24 -27
  455. package/dist/src/schemas/pluginProtocol.cjs.map +1 -1
  456. package/dist/src/schemas/pluginProtocol.d.mts +21 -21
  457. package/dist/src/schemas/pluginProtocol.d.mts.map +1 -1
  458. package/dist/src/schemas/pluginProtocol.mjs +18 -20
  459. package/dist/src/schemas/pluginProtocol.mjs.map +1 -1
  460. package/dist/src/schemas/profileIdentity.cjs +2 -2
  461. package/dist/src/schemas/profileIdentity.cjs.map +1 -1
  462. package/dist/src/schemas/profileIdentity.d.mts +1 -1
  463. package/dist/src/schemas/profileIdentity.mjs +2 -2
  464. package/dist/src/schemas/profileIdentity.mjs.map +1 -1
  465. package/dist/src/schemas/protocolChannelsContract.cjs +27 -0
  466. package/dist/src/schemas/protocolChannelsContract.cjs.map +1 -0
  467. package/dist/src/schemas/protocolChannelsContract.d.mts +37 -0
  468. package/dist/src/schemas/protocolChannelsContract.d.mts.map +1 -0
  469. package/dist/src/schemas/protocolChannelsContract.mjs +25 -0
  470. package/dist/src/schemas/protocolChannelsContract.mjs.map +1 -0
  471. package/dist/src/schemas/protocolContracts.cjs +168 -0
  472. package/dist/src/schemas/protocolContracts.cjs.map +1 -0
  473. package/dist/src/schemas/protocolContracts.d.mts +69 -0
  474. package/dist/src/schemas/protocolContracts.d.mts.map +1 -0
  475. package/dist/src/schemas/protocolContracts.mjs +164 -0
  476. package/dist/src/schemas/protocolContracts.mjs.map +1 -0
  477. package/dist/src/schemas/protocolHubContract.cjs +51 -0
  478. package/dist/src/schemas/protocolHubContract.cjs.map +1 -0
  479. package/dist/src/schemas/protocolHubContract.d.mts +218 -0
  480. package/dist/src/schemas/protocolHubContract.d.mts.map +1 -0
  481. package/dist/src/schemas/protocolHubContract.mjs +49 -0
  482. package/dist/src/schemas/protocolHubContract.mjs.map +1 -0
  483. package/dist/src/schemas/protocolSessionContract.cjs +22 -0
  484. package/dist/src/schemas/protocolSessionContract.cjs.map +1 -0
  485. package/dist/src/schemas/protocolSessionContract.d.mts +324 -0
  486. package/dist/src/schemas/protocolSessionContract.d.mts.map +1 -0
  487. package/dist/src/schemas/protocolSessionContract.mjs +22 -0
  488. package/dist/src/schemas/protocolSessionContract.mjs.map +1 -0
  489. package/dist/src/schemas/protocolThreadContract.cjs +21 -0
  490. package/dist/src/schemas/protocolThreadContract.cjs.map +1 -0
  491. package/dist/src/schemas/protocolThreadContract.d.mts +29 -0
  492. package/dist/src/schemas/protocolThreadContract.d.mts.map +1 -0
  493. package/dist/src/schemas/protocolThreadContract.mjs +20 -0
  494. package/dist/src/schemas/protocolThreadContract.mjs.map +1 -0
  495. package/dist/src/schemas/readiness.cjs +36 -36
  496. package/dist/src/schemas/readiness.cjs.map +1 -1
  497. package/dist/src/schemas/readiness.d.mts +37 -37
  498. package/dist/src/schemas/readiness.d.mts.map +1 -1
  499. package/dist/src/schemas/readiness.mjs +31 -31
  500. package/dist/src/schemas/readiness.mjs.map +1 -1
  501. package/dist/src/schemas/serverBundle.d.mts +5 -5
  502. package/dist/src/schemas/serverPlugin.cjs +103 -0
  503. package/dist/src/schemas/serverPlugin.cjs.map +1 -0
  504. package/dist/src/schemas/serverPlugin.d.mts +176 -0
  505. package/dist/src/schemas/serverPlugin.d.mts.map +1 -0
  506. package/dist/src/schemas/serverPlugin.mjs +95 -0
  507. package/dist/src/schemas/serverPlugin.mjs.map +1 -0
  508. package/dist/src/schemas/serverScope.cjs +37 -0
  509. package/dist/src/schemas/serverScope.cjs.map +1 -0
  510. package/dist/src/schemas/serverScope.d.mts +77 -0
  511. package/dist/src/schemas/serverScope.d.mts.map +1 -0
  512. package/dist/src/schemas/serverScope.mjs +33 -0
  513. package/dist/src/schemas/serverScope.mjs.map +1 -0
  514. package/dist/src/schemas/sessionApiContracts.cjs +320 -0
  515. package/dist/src/schemas/sessionApiContracts.cjs.map +1 -0
  516. package/dist/src/schemas/sessionApiContracts.mjs +318 -0
  517. package/dist/src/schemas/sessionApiContracts.mjs.map +1 -0
  518. package/dist/src/schemas/sessionProtocol.cjs +20 -13
  519. package/dist/src/schemas/sessionProtocol.cjs.map +1 -1
  520. package/dist/src/schemas/sessionProtocol.d.mts +37 -54
  521. package/dist/src/schemas/sessionProtocol.d.mts.map +1 -1
  522. package/dist/src/schemas/sessionProtocol.mjs +17 -8
  523. package/dist/src/schemas/sessionProtocol.mjs.map +1 -1
  524. package/dist/src/schemas/skills.cjs +16 -16
  525. package/dist/src/schemas/skills.cjs.map +1 -1
  526. package/dist/src/schemas/skills.d.mts +7 -7
  527. package/dist/src/schemas/skills.d.mts.map +1 -1
  528. package/dist/src/schemas/skills.mjs +12 -12
  529. package/dist/src/schemas/skills.mjs.map +1 -1
  530. package/dist/src/schemas/toolOverrides.cjs +9 -9
  531. package/dist/src/schemas/toolOverrides.cjs.map +1 -1
  532. package/dist/src/schemas/toolOverrides.d.mts +8 -8
  533. package/dist/src/schemas/toolOverrides.d.mts.map +1 -1
  534. package/dist/src/schemas/toolOverrides.mjs +7 -7
  535. package/dist/src/schemas/toolOverrides.mjs.map +1 -1
  536. package/dist/src/schemas/toolSurface.cjs +9 -9
  537. package/dist/src/schemas/toolSurface.cjs.map +1 -1
  538. package/dist/src/schemas/toolSurface.d.mts +13 -13
  539. package/dist/src/schemas/toolSurface.d.mts.map +1 -1
  540. package/dist/src/schemas/toolSurface.mjs +7 -7
  541. package/dist/src/schemas/toolSurface.mjs.map +1 -1
  542. package/dist/src/schemas/uiHub.cjs +9 -9
  543. package/dist/src/schemas/uiHub.cjs.map +1 -1
  544. package/dist/src/schemas/uiHub.d.mts +12 -12
  545. package/dist/src/schemas/uiHub.d.mts.map +1 -1
  546. package/dist/src/schemas/uiHub.mjs +7 -7
  547. package/dist/src/schemas/uiHub.mjs.map +1 -1
  548. package/dist/src/server/directHarnessRuntime.cjs +691 -775
  549. package/dist/src/server/directHarnessRuntime.cjs.map +1 -1
  550. package/dist/src/server/directHarnessRuntime.d.mts +5 -1
  551. package/dist/src/server/directHarnessRuntime.d.mts.map +1 -0
  552. package/dist/src/server/directHarnessRuntime.mjs +671 -754
  553. package/dist/src/server/directHarnessRuntime.mjs.map +1 -1
  554. package/dist/src/server/largeFrameLink.cjs +47 -0
  555. package/dist/src/server/largeFrameLink.cjs.map +1 -0
  556. package/dist/src/server/largeFrameLink.mjs +47 -0
  557. package/dist/src/server/largeFrameLink.mjs.map +1 -0
  558. package/dist/src/server/liveImport.cjs +1 -1
  559. package/dist/src/server/liveImport.cjs.map +1 -1
  560. package/dist/src/server/liveImport.d.mts +1 -1
  561. package/dist/src/server/liveImport.mjs +1 -1
  562. package/dist/src/server/liveImport.mjs.map +1 -1
  563. package/dist/src/server/mcpBundleLoader.cjs.map +1 -1
  564. package/dist/src/server/mcpBundleLoader.d.mts +6 -6
  565. package/dist/src/server/mcpBundleLoader.d.mts.map +1 -1
  566. package/dist/src/server/mcpBundleLoader.mjs.map +1 -1
  567. package/dist/src/server/serverPackages.cjs +60 -0
  568. package/dist/src/server/serverPackages.cjs.map +1 -0
  569. package/dist/src/server/serverPackages.d.mts +44 -0
  570. package/dist/src/server/serverPackages.d.mts.map +1 -0
  571. package/dist/src/server/serverPackages.mjs +59 -0
  572. package/dist/src/server/serverPackages.mjs.map +1 -0
  573. package/dist/src/server/serverScope.cjs +510 -0
  574. package/dist/src/server/serverScope.cjs.map +1 -0
  575. package/dist/src/server/serverScope.d.mts +123 -0
  576. package/dist/src/server/serverScope.d.mts.map +1 -0
  577. package/dist/src/server/serverScope.mjs +510 -0
  578. package/dist/src/server/serverScope.mjs.map +1 -0
  579. package/dist/src/server/sessionMcpHandler.cjs +3 -3
  580. package/dist/src/server/sessionMcpHandler.cjs.map +1 -1
  581. package/dist/src/server/sessionMcpHandler.mjs +4 -4
  582. package/dist/src/server/sessionMcpHandler.mjs.map +1 -1
  583. package/dist/src/server/sessionMcpRoutes.cjs +2 -1
  584. package/dist/src/server/sessionMcpRoutes.cjs.map +1 -1
  585. package/dist/src/server/sessionMcpRoutes.mjs +2 -1
  586. package/dist/src/server/sessionMcpRoutes.mjs.map +1 -1
  587. package/dist/src/server/threadJournals.cjs +38 -107
  588. package/dist/src/server/threadJournals.cjs.map +1 -1
  589. package/dist/src/server/threadJournals.mjs +38 -104
  590. package/dist/src/server/threadJournals.mjs.map +1 -1
  591. package/dist/src/services/apiSurfaceAssert/index.cjs +1 -1
  592. package/dist/src/services/apiSurfaceAssert/index.cjs.map +1 -1
  593. package/dist/src/services/apiSurfaceAssert/index.d.mts +6 -6
  594. package/dist/src/services/apiSurfaceAssert/index.mjs +1 -1
  595. package/dist/src/services/apiSurfaceAssert/index.mjs.map +1 -1
  596. package/dist/src/services/chatgptAuth/index.cjs +1 -220
  597. package/dist/src/services/chatgptAuth/index.cjs.map +1 -1
  598. package/dist/src/services/chatgptAuth/index.d.mts +0 -18
  599. package/dist/src/services/chatgptAuth/index.d.mts.map +1 -1
  600. package/dist/src/services/chatgptAuth/index.mjs +1 -217
  601. package/dist/src/services/chatgptAuth/index.mjs.map +1 -1
  602. package/dist/src/services/chatgptImages/index.cjs +1 -1
  603. package/dist/src/services/chatgptImages/index.cjs.map +1 -1
  604. package/dist/src/services/chatgptImages/index.mjs +1 -1
  605. package/dist/src/services/chatgptImages/index.mjs.map +1 -1
  606. package/dist/src/services/chatgptLogin/index.cjs +230 -0
  607. package/dist/src/services/chatgptLogin/index.cjs.map +1 -0
  608. package/dist/src/services/chatgptLogin/index.d.mts +21 -0
  609. package/dist/src/services/chatgptLogin/index.d.mts.map +1 -0
  610. package/dist/src/services/chatgptLogin/index.mjs +227 -0
  611. package/dist/src/services/chatgptLogin/index.mjs.map +1 -0
  612. package/dist/src/services/chatgptWebSearch/index.cjs +1 -1
  613. package/dist/src/services/chatgptWebSearch/index.cjs.map +1 -1
  614. package/dist/src/services/chatgptWebSearch/index.mjs +1 -1
  615. package/dist/src/services/chatgptWebSearch/index.mjs.map +1 -1
  616. package/dist/src/services/contextContributions/index.cjs +8 -8
  617. package/dist/src/services/contextContributions/index.cjs.map +1 -1
  618. package/dist/src/services/contextContributions/index.d.mts +3 -3
  619. package/dist/src/services/contextContributions/index.d.mts.map +1 -1
  620. package/dist/src/services/contextContributions/index.mjs +8 -8
  621. package/dist/src/services/contextContributions/index.mjs.map +1 -1
  622. package/dist/src/services/devProxyStore/devProxyRecords.cjs +59 -0
  623. package/dist/src/services/devProxyStore/devProxyRecords.cjs.map +1 -0
  624. package/dist/src/services/devProxyStore/devProxyRecords.mjs +56 -0
  625. package/dist/src/services/devProxyStore/devProxyRecords.mjs.map +1 -0
  626. package/dist/src/services/devProxyStore/index.cjs +7 -101
  627. package/dist/src/services/devProxyStore/index.cjs.map +1 -1
  628. package/dist/src/services/devProxyStore/index.mjs +7 -101
  629. package/dist/src/services/devProxyStore/index.mjs.map +1 -1
  630. package/dist/src/services/devProxyStore/sync.cjs +66 -0
  631. package/dist/src/services/devProxyStore/sync.cjs.map +1 -0
  632. package/dist/src/services/devProxyStore/sync.mjs +63 -0
  633. package/dist/src/services/devProxyStore/sync.mjs.map +1 -0
  634. package/dist/src/services/durableNavigation/docs.cjs +15 -0
  635. package/dist/src/services/durableNavigation/docs.cjs.map +1 -0
  636. package/dist/src/services/durableNavigation/docs.mjs +16 -0
  637. package/dist/src/services/durableNavigation/docs.mjs.map +1 -0
  638. package/dist/src/services/durableNavigation/index.cjs +3 -18
  639. package/dist/src/services/durableNavigation/index.cjs.map +1 -1
  640. package/dist/src/services/durableNavigation/index.mjs +2 -17
  641. package/dist/src/services/durableNavigation/index.mjs.map +1 -1
  642. package/dist/src/services/durableQueue/docs.cjs +12 -0
  643. package/dist/src/services/durableQueue/docs.cjs.map +1 -0
  644. package/dist/src/services/durableQueue/docs.mjs +13 -0
  645. package/dist/src/services/durableQueue/docs.mjs.map +1 -0
  646. package/dist/src/services/durableQueue/index.cjs +151 -0
  647. package/dist/src/services/durableQueue/index.cjs.map +1 -0
  648. package/dist/src/services/durableQueue/index.mjs +149 -0
  649. package/dist/src/services/durableQueue/index.mjs.map +1 -0
  650. package/dist/src/services/durableRequestReceipts/docs.cjs +11 -0
  651. package/dist/src/services/durableRequestReceipts/docs.cjs.map +1 -0
  652. package/dist/src/services/durableRequestReceipts/docs.mjs +12 -0
  653. package/dist/src/services/durableRequestReceipts/docs.mjs.map +1 -0
  654. package/dist/src/services/{requestReceipts → durableRequestReceipts}/index.cjs +10 -16
  655. package/dist/src/services/durableRequestReceipts/index.cjs.map +1 -0
  656. package/dist/src/services/durableRequestReceipts/index.d.mts +12 -0
  657. package/dist/src/services/durableRequestReceipts/index.d.mts.map +1 -0
  658. package/dist/src/services/{requestReceipts → durableRequestReceipts}/index.mjs +7 -13
  659. package/dist/src/services/durableRequestReceipts/index.mjs.map +1 -0
  660. package/dist/src/services/durableSession/docs.cjs +65 -0
  661. package/dist/src/services/durableSession/docs.cjs.map +1 -0
  662. package/dist/src/services/durableSession/docs.d.mts +17 -0
  663. package/dist/src/services/durableSession/docs.d.mts.map +1 -0
  664. package/dist/src/services/durableSession/docs.mjs +60 -0
  665. package/dist/src/services/durableSession/docs.mjs.map +1 -0
  666. package/dist/src/services/durableSession/index.cjs +21 -0
  667. package/dist/src/services/durableSession/index.cjs.map +1 -0
  668. package/dist/src/services/durableSession/index.d.mts +13 -0
  669. package/dist/src/services/durableSession/index.d.mts.map +1 -0
  670. package/dist/src/services/durableSession/index.mjs +20 -0
  671. package/dist/src/services/durableSession/index.mjs.map +1 -0
  672. package/dist/src/services/durableSubagents/docs.cjs +15 -0
  673. package/dist/src/services/durableSubagents/docs.cjs.map +1 -0
  674. package/dist/src/services/durableSubagents/docs.mjs +16 -0
  675. package/dist/src/services/durableSubagents/docs.mjs.map +1 -0
  676. package/dist/src/services/durableSubagents/extension.cjs +11 -0
  677. package/dist/src/services/durableSubagents/extension.cjs.map +1 -0
  678. package/dist/src/services/durableSubagents/extension.mjs +12 -0
  679. package/dist/src/services/durableSubagents/extension.mjs.map +1 -0
  680. package/dist/src/services/durableSubagents/index.cjs +95 -0
  681. package/dist/src/services/durableSubagents/index.cjs.map +1 -0
  682. package/dist/src/services/durableSubagents/index.mjs +90 -0
  683. package/dist/src/services/durableSubagents/index.mjs.map +1 -0
  684. package/dist/src/services/durableSubagents/tasks.cjs +25 -0
  685. package/dist/src/services/durableSubagents/tasks.cjs.map +1 -0
  686. package/dist/src/services/durableSubagents/tasks.mjs +26 -0
  687. package/dist/src/services/durableSubagents/tasks.mjs.map +1 -0
  688. package/dist/src/services/headlessClient/index.cjs +20 -13
  689. package/dist/src/services/headlessClient/index.cjs.map +1 -1
  690. package/dist/src/services/headlessClient/index.mjs +21 -14
  691. package/dist/src/services/headlessClient/index.mjs.map +1 -1
  692. package/dist/src/services/historyOwnership/type.d.mts +15 -0
  693. package/dist/src/services/historyOwnership/type.d.mts.map +1 -0
  694. package/dist/src/services/hubChannelHarness/index.cjs +2 -2
  695. package/dist/src/services/hubChannelHarness/index.cjs.map +1 -1
  696. package/dist/src/services/hubChannelHarness/index.d.mts +8 -8
  697. package/dist/src/services/hubChannelHarness/index.d.mts.map +1 -1
  698. package/dist/src/services/hubChannelHarness/index.mjs +2 -2
  699. package/dist/src/services/hubChannelHarness/index.mjs.map +1 -1
  700. package/dist/src/services/json/core.cjs +30 -0
  701. package/dist/src/services/json/core.cjs.map +1 -0
  702. package/dist/src/services/json/core.d.mts +21 -0
  703. package/dist/src/services/json/core.d.mts.map +1 -0
  704. package/dist/src/services/json/core.mjs +26 -0
  705. package/dist/src/services/json/core.mjs.map +1 -0
  706. package/dist/src/services/json/sync.cjs +48 -0
  707. package/dist/src/services/json/sync.cjs.map +1 -0
  708. package/dist/src/services/json/sync.d.mts +22 -0
  709. package/dist/src/services/json/sync.d.mts.map +1 -0
  710. package/dist/src/services/json/sync.mjs +43 -0
  711. package/dist/src/services/json/sync.mjs.map +1 -0
  712. package/dist/src/services/kernel/index.cjs +2 -2
  713. package/dist/src/services/kernel/index.cjs.map +1 -1
  714. package/dist/src/services/kernel/index.d.mts +3 -3
  715. package/dist/src/services/kernel/index.d.mts.map +1 -1
  716. package/dist/src/services/kernel/index.mjs +2 -2
  717. package/dist/src/services/kernel/index.mjs.map +1 -1
  718. package/dist/src/services/nativeChildTools/index.cjs +16 -0
  719. package/dist/src/services/nativeChildTools/index.cjs.map +1 -0
  720. package/dist/src/services/nativeChildTools/index.mjs +16 -0
  721. package/dist/src/services/nativeChildTools/index.mjs.map +1 -0
  722. package/dist/src/services/nodeHost/index.cjs +30 -0
  723. package/dist/src/services/nodeHost/index.cjs.map +1 -0
  724. package/dist/src/services/nodeHost/index.d.mts +16 -0
  725. package/dist/src/services/nodeHost/index.d.mts.map +1 -0
  726. package/dist/src/services/nodeHost/index.mjs +27 -0
  727. package/dist/src/services/nodeHost/index.mjs.map +1 -0
  728. package/dist/src/services/nodeModelDependencies/index.cjs +89 -0
  729. package/dist/src/services/nodeModelDependencies/index.cjs.map +1 -0
  730. package/dist/src/services/nodeModelDependencies/index.mjs +86 -0
  731. package/dist/src/services/nodeModelDependencies/index.mjs.map +1 -0
  732. package/dist/src/services/openSessionRegistry/index.cjs +6 -128
  733. package/dist/src/services/openSessionRegistry/index.cjs.map +1 -1
  734. package/dist/src/services/openSessionRegistry/index.d.mts +5 -36
  735. package/dist/src/services/openSessionRegistry/index.mjs +6 -128
  736. package/dist/src/services/openSessionRegistry/index.mjs.map +1 -1
  737. package/dist/src/services/openSessionRegistry/openSessionRecords.cjs +87 -0
  738. package/dist/src/services/openSessionRegistry/openSessionRecords.cjs.map +1 -0
  739. package/dist/src/services/openSessionRegistry/openSessionRecords.d.mts +30 -0
  740. package/dist/src/services/openSessionRegistry/openSessionRecords.d.mts.map +1 -0
  741. package/dist/src/services/openSessionRegistry/openSessionRecords.mjs +81 -0
  742. package/dist/src/services/openSessionRegistry/openSessionRecords.mjs.map +1 -0
  743. package/dist/src/services/openSessionRegistry/sync.cjs +71 -0
  744. package/dist/src/services/openSessionRegistry/sync.cjs.map +1 -0
  745. package/dist/src/services/openSessionRegistry/sync.d.mts +14 -0
  746. package/dist/src/services/openSessionRegistry/sync.d.mts.map +1 -0
  747. package/dist/src/services/openSessionRegistry/sync.mjs +68 -0
  748. package/dist/src/services/openSessionRegistry/sync.mjs.map +1 -0
  749. package/dist/src/services/packageApiHarness/index.cjs +1 -1
  750. package/dist/src/services/packageApiHarness/index.cjs.map +1 -1
  751. package/dist/src/services/packageApiHarness/index.d.mts +6 -6
  752. package/dist/src/services/packageApiHarness/index.d.mts.map +1 -1
  753. package/dist/src/services/packageApiHarness/index.mjs +2 -2
  754. package/dist/src/services/packageApiHarness/index.mjs.map +1 -1
  755. package/dist/src/services/piArgs/index.cjs +53 -0
  756. package/dist/src/services/piArgs/index.cjs.map +1 -0
  757. package/dist/src/services/piArgs/index.d.mts +6 -0
  758. package/dist/src/services/piArgs/index.d.mts.map +1 -0
  759. package/dist/src/services/piArgs/index.mjs +53 -0
  760. package/dist/src/services/piArgs/index.mjs.map +1 -0
  761. package/dist/src/services/piExtensionHost/index.cjs +47 -39
  762. package/dist/src/services/piExtensionHost/index.cjs.map +1 -1
  763. package/dist/src/services/piExtensionHost/index.d.mts +83 -0
  764. package/dist/src/services/piExtensionHost/index.d.mts.map +1 -0
  765. package/dist/src/services/piExtensionHost/index.mjs +47 -38
  766. package/dist/src/services/piExtensionHost/index.mjs.map +1 -1
  767. package/dist/src/services/piHelpTools/index.cjs +5 -5
  768. package/dist/src/services/piHelpTools/index.cjs.map +1 -1
  769. package/dist/src/services/piHelpTools/index.d.mts.map +1 -1
  770. package/dist/src/services/piHelpTools/index.mjs +7 -7
  771. package/dist/src/services/piHelpTools/index.mjs.map +1 -1
  772. package/dist/src/services/piMessages/index.cjs +106 -0
  773. package/dist/src/services/piMessages/index.cjs.map +1 -0
  774. package/dist/src/services/piMessages/index.mjs +105 -0
  775. package/dist/src/services/piMessages/index.mjs.map +1 -0
  776. package/dist/src/services/piSessionEntries/index.cjs +4 -4
  777. package/dist/src/services/piSessionEntries/index.cjs.map +1 -1
  778. package/dist/src/services/piSessionEntries/index.mjs +3 -3
  779. package/dist/src/services/piSessionEntries/index.mjs.map +1 -1
  780. package/dist/src/services/piSettings/core.cjs +308 -0
  781. package/dist/src/services/piSettings/core.cjs.map +1 -0
  782. package/dist/src/services/piSettings/core.d.mts +102 -0
  783. package/dist/src/services/piSettings/core.d.mts.map +1 -0
  784. package/dist/src/services/piSettings/core.mjs +276 -0
  785. package/dist/src/services/piSettings/core.mjs.map +1 -0
  786. package/dist/src/services/piSettings/sync.cjs +119 -0
  787. package/dist/src/services/piSettings/sync.cjs.map +1 -0
  788. package/dist/src/services/piSettings/sync.d.mts +44 -0
  789. package/dist/src/services/piSettings/sync.d.mts.map +1 -0
  790. package/dist/src/services/piSettings/sync.mjs +110 -0
  791. package/dist/src/services/piSettings/sync.mjs.map +1 -0
  792. package/dist/src/services/piSummary/index.cjs +7 -0
  793. package/dist/src/services/piSummary/index.cjs.map +1 -0
  794. package/dist/src/services/piSummary/index.mjs +7 -0
  795. package/dist/src/services/piSummary/index.mjs.map +1 -0
  796. package/dist/src/services/platformFiles/index.cjs +44 -0
  797. package/dist/src/services/platformFiles/index.cjs.map +1 -0
  798. package/dist/src/services/platformFiles/index.d.mts +16 -0
  799. package/dist/src/services/platformFiles/index.d.mts.map +1 -0
  800. package/dist/src/services/platformFiles/index.mjs +39 -0
  801. package/dist/src/services/platformFiles/index.mjs.map +1 -0
  802. package/dist/src/services/pluginLifecycle/index.cjs +19 -13
  803. package/dist/src/services/pluginLifecycle/index.cjs.map +1 -1
  804. package/dist/src/services/pluginLifecycle/index.d.mts +2 -0
  805. package/dist/src/services/pluginLifecycle/index.d.mts.map +1 -1
  806. package/dist/src/services/pluginLifecycle/index.mjs +19 -14
  807. package/dist/src/services/pluginLifecycle/index.mjs.map +1 -1
  808. package/dist/src/services/poPackage/core.cjs +73 -0
  809. package/dist/src/services/poPackage/core.cjs.map +1 -0
  810. package/dist/src/services/poPackage/core.d.mts +32 -0
  811. package/dist/src/services/poPackage/core.d.mts.map +1 -0
  812. package/dist/src/services/poPackage/core.mjs +66 -0
  813. package/dist/src/services/poPackage/core.mjs.map +1 -0
  814. package/dist/src/services/poPackage/sync.cjs +55 -0
  815. package/dist/src/services/poPackage/sync.cjs.map +1 -0
  816. package/dist/src/services/poPackage/sync.d.mts +21 -0
  817. package/dist/src/services/poPackage/sync.d.mts.map +1 -0
  818. package/dist/src/services/poPackage/sync.mjs +50 -0
  819. package/dist/src/services/poPackage/sync.mjs.map +1 -0
  820. package/dist/src/services/providerAuth/index.cjs +11 -7
  821. package/dist/src/services/providerAuth/index.cjs.map +1 -1
  822. package/dist/src/services/providerAuth/index.mjs +11 -7
  823. package/dist/src/services/providerAuth/index.mjs.map +1 -1
  824. package/dist/src/services/publicFileShares/index.cjs +1 -1
  825. package/dist/src/services/publicFileShares/index.cjs.map +1 -1
  826. package/dist/src/services/publicFileShares/index.d.mts +2 -2
  827. package/dist/src/services/publicFileShares/index.mjs +2 -2
  828. package/dist/src/services/publicFileShares/index.mjs.map +1 -1
  829. package/dist/src/services/remoteAccess/index.d.mts +1 -0
  830. package/dist/src/services/remoteAccess/index.d.mts.map +1 -1
  831. package/dist/src/services/remoteAccessStore/index.cjs +8 -190
  832. package/dist/src/services/remoteAccessStore/index.cjs.map +1 -1
  833. package/dist/src/services/remoteAccessStore/index.d.mts +2 -0
  834. package/dist/src/services/remoteAccessStore/index.mjs +7 -187
  835. package/dist/src/services/remoteAccessStore/index.mjs.map +1 -1
  836. package/dist/src/services/remoteAccessStore/remoteAccessRecords.cjs +98 -0
  837. package/dist/src/services/remoteAccessStore/remoteAccessRecords.cjs.map +1 -0
  838. package/dist/src/services/remoteAccessStore/remoteAccessRecords.mjs +88 -0
  839. package/dist/src/services/remoteAccessStore/remoteAccessRecords.mjs.map +1 -0
  840. package/dist/src/services/remoteAccessStore/sync.cjs +111 -0
  841. package/dist/src/services/remoteAccessStore/sync.cjs.map +1 -0
  842. package/dist/src/services/remoteAccessStore/sync.mjs +108 -0
  843. package/dist/src/services/remoteAccessStore/sync.mjs.map +1 -0
  844. package/dist/src/services/runtimeIdentity/sync.cjs +23 -0
  845. package/dist/src/services/runtimeIdentity/sync.cjs.map +1 -0
  846. package/dist/src/services/runtimeIdentity/sync.d.mts +9 -0
  847. package/dist/src/services/runtimeIdentity/sync.d.mts.map +1 -0
  848. package/dist/src/services/runtimeIdentity/sync.mjs +20 -0
  849. package/dist/src/services/runtimeIdentity/sync.mjs.map +1 -0
  850. package/dist/src/services/serialRunner/index.cjs +25 -0
  851. package/dist/src/services/serialRunner/index.cjs.map +1 -0
  852. package/dist/src/services/serialRunner/index.d.mts +10 -0
  853. package/dist/src/services/serialRunner/index.d.mts.map +1 -0
  854. package/dist/src/services/serialRunner/index.mjs +25 -0
  855. package/dist/src/services/serialRunner/index.mjs.map +1 -0
  856. package/dist/src/services/{serverFacet → serverHost}/index.cjs +5 -5
  857. package/dist/src/services/serverHost/index.cjs.map +1 -0
  858. package/dist/src/services/serverHost/index.d.mts +31 -0
  859. package/dist/src/services/serverHost/index.d.mts.map +1 -0
  860. package/dist/src/services/{serverFacet → serverHost}/index.mjs +5 -5
  861. package/dist/src/services/serverHost/index.mjs.map +1 -0
  862. package/dist/src/services/sessionAttachments/index.cjs +4 -3
  863. package/dist/src/services/sessionAttachments/index.cjs.map +1 -1
  864. package/dist/src/services/sessionAttachments/index.d.mts +1 -6
  865. package/dist/src/services/sessionAttachments/index.d.mts.map +1 -1
  866. package/dist/src/services/sessionAttachments/index.mjs +3 -2
  867. package/dist/src/services/sessionAttachments/index.mjs.map +1 -1
  868. package/dist/src/services/sessionAttachments/type.d.mts +9 -0
  869. package/dist/src/services/sessionAttachments/type.d.mts.map +1 -0
  870. package/dist/src/services/sessionFiles/index.cjs +96 -0
  871. package/dist/src/services/sessionFiles/index.cjs.map +1 -0
  872. package/dist/src/services/sessionFiles/index.d.mts +33 -0
  873. package/dist/src/services/sessionFiles/index.d.mts.map +1 -0
  874. package/dist/src/services/sessionFiles/index.mjs +89 -0
  875. package/dist/src/services/sessionFiles/index.mjs.map +1 -0
  876. package/dist/src/services/sessionFiles/sessionDirectory.cjs +66 -0
  877. package/dist/src/services/sessionFiles/sessionDirectory.cjs.map +1 -0
  878. package/dist/src/services/sessionFiles/sessionDirectory.mjs +62 -0
  879. package/dist/src/services/sessionFiles/sessionDirectory.mjs.map +1 -0
  880. package/dist/src/services/sessionGitStatus/index.cjs +31 -33
  881. package/dist/src/services/sessionGitStatus/index.cjs.map +1 -1
  882. package/dist/src/services/sessionGitStatus/index.mjs +31 -33
  883. package/dist/src/services/sessionGitStatus/index.mjs.map +1 -1
  884. package/dist/src/services/sessionPresentation/index.cjs +3 -27
  885. package/dist/src/services/sessionPresentation/index.cjs.map +1 -1
  886. package/dist/src/services/sessionPresentation/index.mjs +3 -27
  887. package/dist/src/services/sessionPresentation/index.mjs.map +1 -1
  888. package/dist/src/services/skillPrompt/index.cjs +11 -0
  889. package/dist/src/services/skillPrompt/index.cjs.map +1 -0
  890. package/dist/src/services/skillPrompt/index.mjs +11 -0
  891. package/dist/src/services/skillPrompt/index.mjs.map +1 -0
  892. package/dist/src/services/sqliteSessionHistory/index.cjs +44 -30
  893. package/dist/src/services/sqliteSessionHistory/index.cjs.map +1 -1
  894. package/dist/src/services/sqliteSessionHistory/index.d.mts +7 -4
  895. package/dist/src/services/sqliteSessionHistory/index.d.mts.map +1 -1
  896. package/dist/src/services/sqliteSessionHistory/index.mjs +43 -28
  897. package/dist/src/services/sqliteSessionHistory/index.mjs.map +1 -1
  898. package/dist/src/services/sqliteTranscriptReader/index.cjs +21 -45
  899. package/dist/src/services/sqliteTranscriptReader/index.cjs.map +1 -1
  900. package/dist/src/services/sqliteTranscriptReader/index.d.mts +3 -2
  901. package/dist/src/services/sqliteTranscriptReader/index.d.mts.map +1 -1
  902. package/dist/src/services/sqliteTranscriptReader/index.mjs +16 -38
  903. package/dist/src/services/sqliteTranscriptReader/index.mjs.map +1 -1
  904. package/dist/src/services/testMode/index.cjs +162 -0
  905. package/dist/src/services/testMode/index.cjs.map +1 -0
  906. package/dist/src/services/testMode/index.d.mts +17 -0
  907. package/dist/src/services/testMode/index.d.mts.map +1 -0
  908. package/dist/src/services/testMode/index.mjs +155 -0
  909. package/dist/src/services/testMode/index.mjs.map +1 -0
  910. package/dist/src/services/toolOverrides/index.cjs +6 -6
  911. package/dist/src/services/toolOverrides/index.cjs.map +1 -1
  912. package/dist/src/services/toolOverrides/index.d.mts +3 -3
  913. package/dist/src/services/toolOverrides/index.d.mts.map +1 -1
  914. package/dist/src/services/toolOverrides/index.mjs +6 -6
  915. package/dist/src/services/toolOverrides/index.mjs.map +1 -1
  916. package/dist/src/services/toolPrompt/index.d.mts +17 -0
  917. package/dist/src/services/toolPrompt/index.d.mts.map +1 -0
  918. package/dist/src/services/toolSurface/index.cjs +3 -3
  919. package/dist/src/services/toolSurface/index.cjs.map +1 -1
  920. package/dist/src/services/toolSurface/index.d.mts +3 -3
  921. package/dist/src/services/toolSurface/index.d.mts.map +1 -1
  922. package/dist/src/services/toolSurface/index.mjs +4 -4
  923. package/dist/src/services/toolSurface/index.mjs.map +1 -1
  924. package/dist/src/services/traceContext/index.cjs.map +1 -1
  925. package/dist/src/services/traceContext/index.mjs.map +1 -1
  926. package/dist/src/services/transcriptPages/index.cjs +159 -33
  927. package/dist/src/services/transcriptPages/index.cjs.map +1 -1
  928. package/dist/src/services/transcriptPages/index.mjs +158 -34
  929. package/dist/src/services/transcriptPages/index.mjs.map +1 -1
  930. package/dist/src/services/voiceToolsContract/index.cjs +7 -7
  931. package/dist/src/services/voiceToolsContract/index.cjs.map +1 -1
  932. package/dist/src/services/voiceToolsContract/index.d.mts +4 -4
  933. package/dist/src/services/voiceToolsContract/index.d.mts.map +1 -1
  934. package/dist/src/services/voiceToolsContract/index.mjs +7 -7
  935. package/dist/src/services/voiceToolsContract/index.mjs.map +1 -1
  936. package/dist/src/services/workspaceRegistry/index.cjs +9 -179
  937. package/dist/src/services/workspaceRegistry/index.cjs.map +1 -1
  938. package/dist/src/services/workspaceRegistry/index.d.mts +5 -47
  939. package/dist/src/services/workspaceRegistry/index.mjs +7 -176
  940. package/dist/src/services/workspaceRegistry/index.mjs.map +1 -1
  941. package/dist/src/services/workspaceRegistry/sync.cjs +148 -0
  942. package/dist/src/services/workspaceRegistry/sync.cjs.map +1 -0
  943. package/dist/src/services/workspaceRegistry/sync.d.mts +34 -0
  944. package/dist/src/services/workspaceRegistry/sync.d.mts.map +1 -0
  945. package/dist/src/services/workspaceRegistry/sync.mjs +140 -0
  946. package/dist/src/services/workspaceRegistry/sync.mjs.map +1 -0
  947. package/dist/src/services/workspaceRegistry/workspaceRecords.cjs +114 -0
  948. package/dist/src/services/workspaceRegistry/workspaceRecords.cjs.map +1 -0
  949. package/dist/src/services/workspaceRegistry/workspaceRecords.d.mts +31 -0
  950. package/dist/src/services/workspaceRegistry/workspaceRecords.d.mts.map +1 -0
  951. package/dist/src/services/workspaceRegistry/workspaceRecords.mjs +101 -0
  952. package/dist/src/services/workspaceRegistry/workspaceRecords.mjs.map +1 -0
  953. package/dist/src/systems/child/adapters/headlessChildSessionService.cjs +339 -202
  954. package/dist/src/systems/child/adapters/headlessChildSessionService.cjs.map +1 -1
  955. package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts +16 -21
  956. package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts.map +1 -1
  957. package/dist/src/systems/child/adapters/headlessChildSessionService.mjs +329 -191
  958. package/dist/src/systems/child/adapters/headlessChildSessionService.mjs.map +1 -1
  959. package/dist/src/systems/child/services/childSession/index.cjs +94 -20
  960. package/dist/src/systems/child/services/childSession/index.cjs.map +1 -1
  961. package/dist/src/systems/child/services/childSession/index.d.mts +12 -3
  962. package/dist/src/systems/child/services/childSession/index.d.mts.map +1 -1
  963. package/dist/src/systems/child/services/childSession/index.mjs +94 -20
  964. package/dist/src/systems/child/services/childSession/index.mjs.map +1 -1
  965. package/dist/src/systems/child/types/childSession.cjs +33 -13
  966. package/dist/src/systems/child/types/childSession.cjs.map +1 -1
  967. package/dist/src/systems/child/types/childSession.d.mts +143 -80
  968. package/dist/src/systems/child/types/childSession.d.mts.map +1 -1
  969. package/dist/src/systems/child/types/childSession.mjs +24 -9
  970. package/dist/src/systems/child/types/childSession.mjs.map +1 -1
  971. package/dist/src/systems/main/adapters/headlessHost.cjs +30 -27
  972. package/dist/src/systems/main/adapters/headlessHost.cjs.map +1 -1
  973. package/dist/src/systems/main/adapters/headlessHost.d.mts +22 -22
  974. package/dist/src/systems/main/adapters/headlessHost.d.mts.map +1 -1
  975. package/dist/src/systems/main/adapters/headlessHost.mjs +33 -30
  976. package/dist/src/systems/main/adapters/headlessHost.mjs.map +1 -1
  977. package/dist/src/systems/main/adapters/headlessSessionHost.cjs +248 -229
  978. package/dist/src/systems/main/adapters/headlessSessionHost.cjs.map +1 -1
  979. package/dist/src/systems/main/adapters/headlessSessionHost.d.mts +4 -5
  980. package/dist/src/systems/main/adapters/headlessSessionHost.d.mts.map +1 -1
  981. package/dist/src/systems/main/adapters/headlessSessionHost.mjs +239 -219
  982. package/dist/src/systems/main/adapters/headlessSessionHost.mjs.map +1 -1
  983. package/dist/src/systems/main/types/headlessHost.d.mts +16 -14
  984. package/dist/src/systems/main/types/headlessHost.d.mts.map +1 -1
  985. package/dist/src/testing/pi/testHost.cjs +2 -2
  986. package/dist/src/testing/pi/testHost.cjs.map +1 -1
  987. package/dist/src/testing/pi/testHost.d.mts +3 -2
  988. package/dist/src/testing/pi/testHost.mjs +3 -3
  989. package/dist/src/testing/pi/testHost.mjs.map +1 -1
  990. package/dist/src/types/config.d.mts +1 -1
  991. package/dist/src/types/config.d.mts.map +1 -1
  992. package/dist/src/types/kernel.d.mts +3 -3
  993. package/dist/src/types/server/directHarnessRuntime.d.mts +54 -25
  994. package/dist/src/types/server/directHarnessRuntime.d.mts.map +1 -1
  995. package/dist/src/types/server/sessionToolSurface.d.mts +9 -9
  996. package/dist/src/web/services/apiClient/index.d.mts +1 -0
  997. package/dist/src/web/services/apiPaths/index.cjs.map +1 -1
  998. package/dist/src/web/services/apiPaths/index.d.mts +1 -1
  999. package/dist/src/web/services/apiPaths/index.mjs.map +1 -1
  1000. package/dist/src/web/services/mcpWidget.cjs.map +1 -1
  1001. package/dist/src/web/services/mcpWidget.d.mts +2 -2
  1002. package/dist/src/web/services/mcpWidget.d.mts.map +1 -1
  1003. package/dist/src/web/services/mcpWidget.mjs.map +1 -1
  1004. package/dist/src/web/services/testing/templateRail.cjs +3 -0
  1005. package/dist/src/web/services/testing/templateRail.cjs.map +1 -1
  1006. package/dist/src/web/services/testing/templateRail.mjs +3 -0
  1007. package/dist/src/web/services/testing/templateRail.mjs.map +1 -1
  1008. package/dist/src/web/types/mcpWidget.d.mts +1 -1
  1009. package/dist/src/web/types/nativeTemplate.d.mts +1 -1
  1010. package/dist/src/web/types/nativeTemplate.d.mts.map +1 -1
  1011. package/dist/src/web/types/template.d.mts +8 -0
  1012. package/dist/src/web/types/template.d.mts.map +1 -1
  1013. package/dist/src/web/types/webPlugin.d.mts +17 -5
  1014. package/dist/src/web/types/webPlugin.d.mts.map +1 -1
  1015. package/dist/testMode.cjs +4 -0
  1016. package/dist/testMode.d.mts +2 -0
  1017. package/dist/testMode.mjs +1 -0
  1018. package/dist/testing.cjs +1 -1
  1019. package/dist/testing.d.mts +2 -2
  1020. package/dist/testing.mjs +2 -2
  1021. package/dist/toolInventory.cjs.map +1 -1
  1022. package/dist/toolInventory.mjs.map +1 -1
  1023. package/dist/toolNames.mjs +1 -2
  1024. package/dist/toolOverrides.cjs +4 -4
  1025. package/dist/toolOverrides.d.mts +3 -3
  1026. package/dist/toolOverrides.mjs +3 -3
  1027. package/dist/toolSurface.cjs +4 -4
  1028. package/dist/toolSurface.d.mts +3 -3
  1029. package/dist/toolSurface.mjs +3 -3
  1030. package/dist/transition.cjs +3 -3
  1031. package/dist/transition.d.cjs +3 -3
  1032. package/dist/transition.d.mts +2 -2
  1033. package/dist/transition.mjs +1 -2
  1034. package/dist/transitionClassifier.cjs.map +1 -1
  1035. package/dist/transitionClassifier.d.mts +2 -2
  1036. package/dist/transitionClassifier.d.mts.map +1 -1
  1037. package/dist/transitionClassifier.mjs.map +1 -1
  1038. package/dist/transitionCoordinator.cjs +3 -3
  1039. package/dist/transitionCoordinator.cjs.map +1 -1
  1040. package/dist/transitionCoordinator.d.mts +4 -4
  1041. package/dist/transitionCoordinator.d.mts.map +1 -1
  1042. package/dist/transitionCoordinator.mjs +3 -3
  1043. package/dist/transitionCoordinator.mjs.map +1 -1
  1044. package/dist/typesContextApi.d.mts +2 -1
  1045. package/dist/typesContextApi.d.mts.map +1 -1
  1046. package/dist/uiHub.cjs +3 -3
  1047. package/dist/uiHub.d.mts +2 -2
  1048. package/dist/uiHub.mjs +1 -2
  1049. package/dist/voiceTools.cjs +5 -5
  1050. package/dist/voiceTools.d.mts +3 -3
  1051. package/dist/voiceTools.mjs +3 -3
  1052. package/dist/web.cjs +8 -0
  1053. package/dist/web.d.mts +3 -2
  1054. package/dist/web.mjs +2 -1
  1055. package/dist/webCompositions.cjs.map +1 -1
  1056. package/dist/webCompositions.d.mts +7 -7
  1057. package/dist/webCompositions.d.mts.map +1 -1
  1058. package/dist/webCompositions.mjs.map +1 -1
  1059. package/licenses/Codex-Apache-2.0.txt +201 -0
  1060. package/package.json +58 -53
  1061. package/dist/doomPackage.cjs +0 -61
  1062. package/dist/doomPackage.cjs.map +0 -1
  1063. package/dist/doomPackage.d.mts +0 -17
  1064. package/dist/doomPackage.d.mts.map +0 -1
  1065. package/dist/doomPackage.mjs +0 -54
  1066. package/dist/doomPackage.mjs.map +0 -1
  1067. package/dist/jsonlSessionRepo.cjs +0 -44
  1068. package/dist/jsonlSessionRepo.cjs.map +0 -1
  1069. package/dist/jsonlSessionRepo.d.mts +0 -7
  1070. package/dist/jsonlSessionRepo.d.mts.map +0 -1
  1071. package/dist/jsonlSessionRepo.mjs +0 -42
  1072. package/dist/jsonlSessionRepo.mjs.map +0 -1
  1073. package/dist/runtimeJson.cjs.map +0 -1
  1074. package/dist/runtimeJson.d.mts.map +0 -1
  1075. package/dist/runtimeJson.mjs.map +0 -1
  1076. package/dist/runtimePiSettings.cjs.map +0 -1
  1077. package/dist/runtimePiSettings.d.mts.map +0 -1
  1078. package/dist/runtimePiSettings.mjs.map +0 -1
  1079. package/dist/serverFacet.cjs +0 -34
  1080. package/dist/serverFacet.d.mts +0 -10
  1081. package/dist/serverFacet.mjs +0 -9
  1082. package/dist/src/pi/piWebSocketListener.cjs +0 -115
  1083. package/dist/src/pi/piWebSocketListener.cjs.map +0 -1
  1084. package/dist/src/pi/piWebSocketListener.mjs +0 -115
  1085. package/dist/src/pi/piWebSocketListener.mjs.map +0 -1
  1086. package/dist/src/schemas/serverFacet.cjs +0 -111
  1087. package/dist/src/schemas/serverFacet.cjs.map +0 -1
  1088. package/dist/src/schemas/serverFacet.d.mts +0 -152
  1089. package/dist/src/schemas/serverFacet.d.mts.map +0 -1
  1090. package/dist/src/schemas/serverFacet.mjs +0 -101
  1091. package/dist/src/schemas/serverFacet.mjs.map +0 -1
  1092. package/dist/src/schemas/sessionUpdates.d.mts +0 -34
  1093. package/dist/src/schemas/sessionUpdates.d.mts.map +0 -1
  1094. package/dist/src/server/headlessProtocol.cjs +0 -382
  1095. package/dist/src/server/headlessProtocol.cjs.map +0 -1
  1096. package/dist/src/server/headlessProtocol.mjs +0 -382
  1097. package/dist/src/server/headlessProtocol.mjs.map +0 -1
  1098. package/dist/src/server/nativeChildTranscriptReader.cjs +0 -20
  1099. package/dist/src/server/nativeChildTranscriptReader.cjs.map +0 -1
  1100. package/dist/src/server/nativeChildTranscriptReader.mjs +0 -18
  1101. package/dist/src/server/nativeChildTranscriptReader.mjs.map +0 -1
  1102. package/dist/src/server/serverFacetLoader.cjs +0 -214
  1103. package/dist/src/server/serverFacetLoader.cjs.map +0 -1
  1104. package/dist/src/server/serverFacetLoader.d.mts +0 -72
  1105. package/dist/src/server/serverFacetLoader.d.mts.map +0 -1
  1106. package/dist/src/server/serverFacetLoader.mjs +0 -212
  1107. package/dist/src/server/serverFacetLoader.mjs.map +0 -1
  1108. package/dist/src/services/acpSessionUpdates/index.cjs +0 -129
  1109. package/dist/src/services/acpSessionUpdates/index.cjs.map +0 -1
  1110. package/dist/src/services/acpSessionUpdates/index.mjs +0 -129
  1111. package/dist/src/services/acpSessionUpdates/index.mjs.map +0 -1
  1112. package/dist/src/services/historyImport/index.cjs +0 -8
  1113. package/dist/src/services/historyImport/index.cjs.map +0 -1
  1114. package/dist/src/services/historyImport/index.d.mts +0 -68
  1115. package/dist/src/services/historyImport/index.d.mts.map +0 -1
  1116. package/dist/src/services/historyImport/index.mjs +0 -8
  1117. package/dist/src/services/historyImport/index.mjs.map +0 -1
  1118. package/dist/src/services/openSessionRegistry/index.d.mts.map +0 -1
  1119. package/dist/src/services/requestReceipts/index.cjs.map +0 -1
  1120. package/dist/src/services/requestReceipts/index.d.mts +0 -11
  1121. package/dist/src/services/requestReceipts/index.d.mts.map +0 -1
  1122. package/dist/src/services/requestReceipts/index.mjs.map +0 -1
  1123. package/dist/src/services/rpcTranscript/index.cjs +0 -633
  1124. package/dist/src/services/rpcTranscript/index.cjs.map +0 -1
  1125. package/dist/src/services/rpcTranscript/index.d.mts +0 -50
  1126. package/dist/src/services/rpcTranscript/index.d.mts.map +0 -1
  1127. package/dist/src/services/rpcTranscript/index.mjs +0 -632
  1128. package/dist/src/services/rpcTranscript/index.mjs.map +0 -1
  1129. package/dist/src/services/serverFacet/index.cjs.map +0 -1
  1130. package/dist/src/services/serverFacet/index.d.mts +0 -31
  1131. package/dist/src/services/serverFacet/index.d.mts.map +0 -1
  1132. package/dist/src/services/serverFacet/index.mjs.map +0 -1
  1133. package/dist/src/services/workspaceRegistry/index.d.mts.map +0 -1
  1134. package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs +0 -28
  1135. package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs.map +0 -1
  1136. package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs +0 -25
  1137. package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs.map +0 -1
  1138. package/dist/terminalPiChildSessionService.cjs +0 -324
  1139. package/dist/terminalPiChildSessionService.cjs.map +0 -1
  1140. package/dist/terminalPiChildSessionService.d.mts +0 -46
  1141. package/dist/terminalPiChildSessionService.d.mts.map +0 -1
  1142. package/dist/terminalPiChildSessionService.mjs +0 -318
  1143. package/dist/terminalPiChildSessionService.mjs.map +0 -1
  1144. package/dist/v3Export.cjs +0 -10
  1145. package/dist/v3Export.cjs.map +0 -1
  1146. package/dist/v3Export.d.mts +0 -35
  1147. package/dist/v3Export.d.mts.map +0 -1
  1148. package/dist/v3Export.mjs +0 -9
  1149. package/dist/v3Export.mjs.map +0 -1
@@ -1,6 +1,8 @@
1
- import { DOOM_CORDIS_SERVER_SERVICES, connectDoomCordisHost } from "../../../runtimeCordisHost.mjs";
2
- import { toDoomHeadlessToolResult } from "../../schemas/headless.mjs";
3
- import { SessionIdentityDoc, SessionMetadataDoc } from "../../../sqliteSessionStorage.mjs";
1
+ import { modelSettingsDirectory } from "../piSettings/sync.mjs";
2
+ import "../../../runtimePiSettings.mjs";
3
+ import { PO_CORDIS_SERVER_SERVICES, connectPoCordisHost } from "../../../runtimeCordisHost.mjs";
4
+ import { toPoHeadlessToolResult } from "../../schemas/headless.mjs";
5
+ import { SessionIdentityDoc, SessionMetadataDoc } from "../durableSession/docs.mjs";
4
6
  import { contextTokensOf, contextUsageOf, latestAssistantUsage } from "../contextUsage/index.mjs";
5
7
  import { fromPiSessionEntry, toPiFileEntries, toPiSessionEntries, toPiSessionEntry } from "../piSessionEntries/index.mjs";
6
8
  import { readFileSync } from "node:fs";
@@ -20,10 +22,11 @@ import { isDeepStrictEqual } from "node:util";
20
22
  */
21
23
  async function resolvePiSettingsPackageEntries(options) {
22
24
  try {
25
+ const agentDir = modelSettingsDirectory(options.agentDir);
23
26
  return (await new DefaultPackageManager({
24
27
  cwd: options.cwd,
25
- agentDir: options.agentDir,
26
- settingsManager: options.settings
28
+ agentDir,
29
+ settingsManager: agentDir === options.agentDir ? options.settings : SettingsManager.create(options.cwd, agentDir)
27
30
  }).resolve(async (source) => {
28
31
  options.onNotice?.(`Pi package ${source} is not installed; skipped. Install it with pi to load it here.`);
29
32
  return "skip";
@@ -86,26 +89,9 @@ async function preloadPiExtensions(options) {
86
89
  return Object.assign(result, { events });
87
90
  }
88
91
  /**
89
- * Pi native extensions are session lifetime. They contribute tools once and are never
90
- * retracted, so they are merged at the harness apply boundary rather than contributed to the
91
- * headless kernel, whose active layers come solely from server bundle candidates and would
92
- * drop any owner that is not a declared facet package.
93
- *
94
- * Their event handlers are a second surface. Pi drives them from an interactive
95
- * AgentSession this server does not run, so the handful the harness can speak to
96
- * faithfully are bridged here: the two agent-loop notifications an extension needs
97
- * to observe a turn, and the three hooks that let one shape or replace context.
98
- * Everything else stays undelivered rather than being approximated.
99
- */
100
- function formatSkillsForSystemPrompt(skills) {
101
- const escape = (text) => text.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\"", "&quot;");
102
- const visible = skills.filter((skill) => !skill.disableModelInvocation);
103
- return visible.length ? `\n\n<available_skills>\n${visible.map((skill) => `<skill><name>${escape(skill.name)}</name><description>${escape(skill.description)}</description><location>${escape(skill.filePath)}</location></skill>`).join("\n")}\n</available_skills>` : "";
104
- }
105
- /**
106
92
  * The compaction boundary, named the way Pi names it.
107
93
  *
108
- * Pi identifies the cut by the first entry it keeps; the harness carries the kept
94
+ * Pi identifies the cut by the first entry it keeps; a stored compaction entry carries the kept
109
95
  * messages inline instead. Counting whole entries back from the tip until the kept
110
96
  * messages are covered recovers the id, and {@link retainedTailFrom} is its exact
111
97
  * inverse, so an extension that echoes the id it was given gets its own tail back.
@@ -127,9 +113,10 @@ function retainedTailFrom(branchEntries, firstKeptEntryId) {
127
113
  if (index === -1) return [];
128
114
  return branchEntries.slice(index).flatMap((entry) => sessionEntryToContextMessages(entry));
129
115
  }
130
- function toPiCompactionPreparation(preparation, branchEntries) {
116
+ /** A live compaction is named by the harness's own cut, which counting cannot recover once the tail is empty. */
117
+ function toPiCompactionPreparation(preparation) {
131
118
  return {
132
- firstKeptEntryId: boundaryEntryId(branchEntries, preparation.retainedTail.length) ?? "",
119
+ firstKeptEntryId: preparation.firstKeptEntryId,
133
120
  messagesToSummarize: preparation.messagesToSummarize,
134
121
  turnPrefixMessages: preparation.turnPrefixMessages,
135
122
  isSplitTurn: preparation.isSplitTurn,
@@ -155,8 +142,8 @@ async function executePiTool(registered, runner, isActive, toolCallId, parameter
155
142
  const definition = registered.definition;
156
143
  if (!isActive(definition.name)) throw new Error(`Tool '${definition.name}' is no longer active`);
157
144
  const prepared = !alreadyPrepared && definition.prepareArguments ? definition.prepareArguments(parameters) : parameters;
158
- const result = await definition.execute(toolCallId, prepared, signal, (partial) => onUpdate?.(toDoomHeadlessToolResult(partial)), runner().createToolContext(toolCallId, signal));
159
- return toDoomHeadlessToolResult(result);
145
+ const result = await definition.execute(toolCallId, prepared, signal, (partial) => onUpdate?.(toPoHeadlessToolResult(partial)), runner().createToolContext(toolCallId, signal));
146
+ return toPoHeadlessToolResult(result);
160
147
  }
161
148
  function toHarnessTool(registered, runner, isActive) {
162
149
  const definition = registered.definition;
@@ -394,7 +381,7 @@ async function createBridgedSessionManager(runtime, cwd, onNotice, branchEntries
394
381
  return;
395
382
  }
396
383
  }
397
- const converted = entry.type === "compaction" ? toPiSessionEntry(entry, boundaryEntryId(manager.getBranch(), entry.retainedTail.length)) : toPiSessionEntry(entry);
384
+ const converted = entry.type === "compaction" ? toPiSessionEntry(entry, entry.firstKeptEntryId === void 0 ? boundaryEntryId(manager.getBranch(), entry.retainedTail.length) : resolvePiId(entry.firstKeptEntryId) ?? void 0) : toPiSessionEntry(entry);
398
385
  if (converted === void 0) return;
399
386
  const parentId = resolvePiId(converted.parentId);
400
387
  syncingHarnessEntry = true;
@@ -417,6 +404,12 @@ function createPiExtensionHost(options) {
417
404
  let runner;
418
405
  let sessionManager;
419
406
  let sessionSync;
407
+ let backfill;
408
+ let backfillEpoch = 0;
409
+ const resetBackfill = () => {
410
+ backfill = void 0;
411
+ backfillEpoch++;
412
+ };
420
413
  let tools = [];
421
414
  let skills = [];
422
415
  let registered = [];
@@ -610,7 +603,7 @@ function createPiExtensionHost(options) {
610
603
  message: event.message
611
604
  });
612
605
  return;
613
- case "tool_start":
606
+ case "tool_execution_start":
614
607
  toolArguments.set(event.toolCallId, event.args);
615
608
  await runner?.emit({
616
609
  type: "tool_execution_start",
@@ -619,7 +612,7 @@ function createPiExtensionHost(options) {
619
612
  args: event.args
620
613
  });
621
614
  return;
622
- case "tool_update":
615
+ case "tool_execution_update":
623
616
  await runner?.emit({
624
617
  type: "tool_execution_update",
625
618
  toolCallId: event.toolCallId,
@@ -628,7 +621,7 @@ function createPiExtensionHost(options) {
628
621
  partialResult: event.partialResult
629
622
  });
630
623
  return;
631
- case "tool_end":
624
+ case "tool_execution_end":
632
625
  toolArguments.delete(event.toolCallId);
633
626
  await runner?.emit({
634
627
  type: "tool_execution_end",
@@ -638,7 +631,7 @@ function createPiExtensionHost(options) {
638
631
  isError: event.isError
639
632
  });
640
633
  return;
641
- case "entry_added":
634
+ case "entry_appended":
642
635
  sessionSync?.append(event.entry);
643
636
  if (event.entry.type === "message") turnEntryIds.add(event.entry.id);
644
637
  return;
@@ -721,10 +714,12 @@ function createPiExtensionHost(options) {
721
714
  return;
722
715
  }
723
716
  case "navigation_start":
717
+ resetBackfill();
724
718
  turnEntryIds.clear();
725
719
  currentOperation = "navigation";
726
720
  return;
727
721
  case "navigation_end": {
722
+ resetBackfill();
728
723
  currentOperation = null;
729
724
  if (event.status !== "completed") return;
730
725
  const newLeafId = sessionSync?.toPiId(event.tipId) ?? event.tipId;
@@ -769,18 +764,31 @@ function createPiExtensionHost(options) {
769
764
  const onHarnessEvent = (event) => handleHarnessEvent(event).catch((error) => report(`event '${event.type}'`, error));
770
765
  const transformContext = async (messages) => {
771
766
  if (runner === void 0) return messages;
772
- const { entries, leafId } = await runtime.readEntries();
767
+ const lane = runtime.lane;
768
+ const startedNonEmpty = sessionManager !== void 0 && sessionManager.getLeafId() !== null;
769
+ if (!startedNonEmpty || backfill?.lane !== lane) resetBackfill();
770
+ const previous = backfill;
771
+ const epoch = backfillEpoch;
772
+ let raw = previous === void 0 ? await runtime.readEntries() : await runtime.readEntriesFrom(previous.seq);
773
+ if (previous !== void 0 && raw.entries[0]?.seq !== previous.seq) raw = await runtime.readEntries();
774
+ const { entries, leafId } = raw;
773
775
  for (const entry of entries) sessionSync?.append(entry);
774
776
  const leaf = sessionSync?.toPiId(leafId) ?? leafId;
775
777
  if (sessionManager && leaf !== null && sessionManager.getEntry(leaf) !== void 0) sessionManager.branch(leaf);
776
- return runner.emitContext(messages);
778
+ const seq = entries.at(-1)?.seq;
779
+ const transformed = await runner.emitContext(messages);
780
+ if (startedNonEmpty && epoch === backfillEpoch && runtime.lane === lane && backfill === previous) backfill = seq === void 0 ? void 0 : {
781
+ lane,
782
+ seq
783
+ };
784
+ return transformed;
777
785
  };
778
786
  const beforeCompaction = async (event) => {
779
787
  if (runner === void 0) return void 0;
780
788
  const branchEntries = piBranchEntries((await runtime.readEntries()).entries);
781
789
  const result = await runner.emit({
782
790
  type: "session_before_compact",
783
- preparation: toPiCompactionPreparation(event.preparation, branchEntries),
791
+ preparation: toPiCompactionPreparation(event.preparation),
784
792
  branchEntries,
785
793
  ...event.customInstructions === void 0 ? {} : { customInstructions: event.customInstructions },
786
794
  reason: event.reason,
@@ -845,10 +853,10 @@ function createPiExtensionHost(options) {
845
853
  currentOperation = lifecycle.operation?.kind ?? null;
846
854
  });
847
855
  if (preload.events !== void 0) {
848
- cordisConnection = await connectDoomCordisHost({ events: preload.events }, "headless-pi-extension-host", { optional: true });
856
+ cordisConnection = await connectPoCordisHost({ events: preload.events }, "headless-pi-extension-host", { optional: true });
849
857
  if (cordisConnection !== void 0 && options.serverServices !== void 0) {
850
858
  if (options.serverServices.sessionId !== runtime.sessionId) throw new Error("Server services belong to a different session");
851
- cordisConnection.root.provide(DOOM_CORDIS_SERVER_SERVICES, options.serverServices);
859
+ cordisConnection.root.provide(PO_CORDIS_SERVER_SERVICES, options.serverServices);
852
860
  }
853
861
  }
854
862
  await runner.emit({
@@ -858,6 +866,7 @@ function createPiExtensionHost(options) {
858
866
  skills = await loadPiSkills(runner, cwd, agentDir, options.onNotice);
859
867
  },
860
868
  async shutdown() {
869
+ resetBackfill();
861
870
  shuttingDown = true;
862
871
  pendingRead++;
863
872
  unsubscribeEvents?.();
@@ -883,6 +892,6 @@ function createPiExtensionHost(options) {
883
892
  };
884
893
  }
885
894
  //#endregion
886
- export { createBridgedSessionManager, createPiExtensionHost, formatSkillsForSystemPrompt, preloadPiExtensions, resolvePiSettingsPackageEntries };
895
+ export { createBridgedSessionManager, createPiExtensionHost, preloadPiExtensions, resolvePiSettingsPackageEntries };
887
896
 
888
897
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["PiSettingsManager"],"sources":["../../../../src/services/piExtensionHost/index.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport { isDeepStrictEqual } from 'node:util';\n\nimport { BACKGROUND_CONTEXT } from '@earendil-works/chord/context';\nimport type { Api, Message, Model } from '@earendil-works/pi-ai';\nimport {\n createEventBus,\n DefaultPackageManager,\n DefaultResourceLoader,\n discoverAndLoadExtensions,\n ExtensionRunner,\n ModelRegistry,\n initTheme,\n SettingsManager as PiSettingsManager,\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 InlineExtension,\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 type { ToolPromptEntry } from '../../services/toolPrompt';\nimport type {\n AgentHarnessTool,\n AgentMessage,\n CompactionPreparation as HarnessCompactionPreparation,\n Entry,\n HarnessEvent,\n HookMap,\n JsonValue,\n Skill,\n ThinkingLevel,\n} from '../../types/server/directHarnessRuntime';\nimport type { DirectHarnessRuntime } from '../../types/server/directHarnessRuntime';\nimport { SessionIdentityDoc, SessionMetadataDoc } from '../sqliteSessionStorage';\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 Po\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\nasync function loadWithResourceLoader(\n options: { readonly cwd: string; readonly agentDir: string; readonly extensionPaths: readonly string[] },\n factories: readonly InlineExtension[],\n events: ReturnType<typeof createEventBus>,\n): Promise<LoadExtensionsResult> {\n const loader = new DefaultResourceLoader({\n cwd: options.cwd,\n agentDir: options.agentDir,\n // Empty settings: the settings packages were already resolved (missing ones skipped) and\n // arrive as paths, so the loader must not resolve, and possibly install, them again.\n settingsManager: PiSettingsManager.inMemory(),\n eventBus: events,\n additionalExtensionPaths: [...options.extensionPaths],\n extensionFactories: [...factories],\n noExtensions: true,\n noSkills: true,\n noPromptTemplates: true,\n noThemes: true,\n noContextFiles: true,\n });\n await loader.reload();\n return loader.getExtensions();\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 /**\n * Po factories already imported from each package's built Pi entry. When given, they load\n * through Pi's `DefaultResourceLoader` with discovery off, and `extensionPaths` (vanilla Pi\n * packages) still go through Pi's own path loader in the same runtime.\n */\n readonly extensionFactories?: readonly InlineExtension[];\n readonly onNotice?: (message: string) => void;\n}): Promise<(LoadExtensionsResult & { readonly events?: ReturnType<typeof createEventBus> }) | undefined> {\n const factories = options.extensionFactories ?? [];\n if (options.extensionPaths.length === 0 && factories.length === 0) return undefined;\n\n const events = createEventBus();\n const result =\n options.extensionFactories === undefined\n ? await discoverAndLoadExtensions([...options.extensionPaths], options.cwd, options.agentDir, events)\n : await loadWithResourceLoader(options, factories, 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 function formatSkillsForSystemPrompt(skills: readonly Skill[]): string {\n const escape = (text: string) =>\n text.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;').replaceAll('\"', '&quot;');\n const visible = skills.filter((skill) => !skill.disableModelInvocation);\n return visible.length\n ? `\\n\\n<available_skills>\\n${visible.map((skill) => `<skill><name>${escape(skill.name)}</name><description>${escape(skill.description)}</description><location>${escape(skill.filePath)}</location></skill>`).join('\\n')}\\n</available_skills>`\n : '';\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 alreadyPrepared = false,\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 =\n !alreadyPrepared && 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 prepareArguments: definition.prepareArguments,\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 true,\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 identity = await runtime.session.snapshot(SessionIdentityDoc, BACKGROUND_CONTEXT);\n const storedMetadata = await runtime.session.snapshot(SessionMetadataDoc, BACKGROUND_CONTEXT);\n const metadata = {\n id: runtime.sessionId,\n cwd: storedMetadata?.workspaceRoot || cwd,\n createdAt: identity?.createdAt ?? Date.now(),\n parentSessionId: identity?.parentSessionId || undefined,\n };\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(resolvePiId(entry.id) ?? 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 pendingRead = 0;\n // Durable successors are physical runs within one Pi agent loop. Lifecycle frames can\n // change the current operation between them, so track the logical loop separately.\n let logicalLoopActive = false;\n let turnIndex = 0;\n let runMessages: AgentMessage[] = [];\n const turnEntryIds = new Set<string>();\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 * `nextTurn` is staged before considering triggerTurn, even when it is false.\n * Otherwise a running turn takes the message unless the caller opted out; an\n * 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.submitInternalMessage(message, 'nextTurn');\n if (sendOptions?.triggerTurn === false) return runtime.appendMessage(message);\n if (currentOperation === 'run' || sendOptions?.triggerTurn === true)\n return runtime.submitInternalMessage(\n message,\n sendOptions?.deliverAs === 'steer' || (currentOperation === 'run' && sendOptions?.deliverAs === undefined)\n ? 'steer'\n : 'followUp',\n );\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, sendOptions) => {\n const deliver = async (): Promise<void> => {\n if (currentOperation === 'run' && sendOptions?.deliverAs === undefined)\n throw new Error('sendUserMessage during streaming requires deliverAs: steer or followUp');\n const text =\n typeof content === 'string'\n ? content\n : content\n .filter((part) => part.type === 'text')\n .map((part) => part.text)\n .join('\\n');\n if (sendOptions?.expandPromptTemplates && (await runtime.dispatchCommand(text))) return;\n const message: Extract<AgentMessage, { role: 'user' }> = { role: 'user', content, timestamp: Date.now() };\n const submission = await runtime.submitInternalMessage(\n message,\n sendOptions?.deliverAs === 'steer' ? 'steer' : 'followUp',\n );\n void submission.settled.catch((error: unknown) => report('send_user_message', error));\n };\n void deliver().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 if (logicalLoopActive) return;\n logicalLoopActive = true;\n turnIndex = 0;\n runMessages = [];\n turnEntryIds.clear();\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 turnEntryIds.clear();\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 if (event.entry.type === 'message') turnEntryIds.add(event.entry.id);\n return;\n case 'queue_update':\n nativeQueuedMessages = event.queues.filter((item) => item.kind !== 'write').length;\n return;\n case 'turn_end': {\n // Only commits observed in this turn can satisfy its boundary. Event messages may\n // be cloned or normalized, so resolve persisted IDs rather than object identity.\n const entries = (sessionManager?.getBranch() ?? []).filter((entry) =>\n turnEntryIds.has(sessionSync?.toHarnessId(entry.id) ?? entry.id),\n );\n turnEntryIds.clear();\n const messageEntryId = entries.findLast(\n (entry) => entry?.type === 'message' && entry.message.role === 'assistant',\n )?.id;\n const toolResultEntryIds = event.toolResults.map(\n (result) =>\n entries.findLast(\n (entry) =>\n entry?.type === 'message' &&\n entry.message.role === 'toolResult' &&\n entry.message.toolCallId === result.toolCallId,\n )?.id,\n );\n if (messageEntryId === undefined || toolResultEntryIds.some((id) => id === undefined)) {\n report('turn_end', new Error('The persisted current-turn entries were not available for the Pi boundary'));\n turnIndex += 1;\n return;\n }\n await runner?.emitBoundary(\n {\n type: 'turn_end',\n turnIndex,\n message: event.message,\n toolResults: event.toolResults,\n messageEntryId,\n toolResultEntryIds: toolResultEntryIds as string[],\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 if (event.successorActive) return;\n // Settlement hooks must see reconciled pending work, not a detached lifecycle snapshot.\n ++pendingRead;\n const state = await runtime.readState();\n // Also fence lifecycle reads started while the authoritative read was in flight.\n ++pendingRead;\n if (!shuttingDown) retainedQueuedMessages = Number(state.pendingMessageCount) || 0;\n currentOperation = null;\n if (logicalLoopActive) {\n logicalLoopActive = false;\n await runner?.emit({ type: 'agent_end', messages: runMessages });\n await runner?.emit({ type: 'agent_settled', aborted: event.aborted === true });\n }\n runMessages = [];\n turnEntryIds.clear();\n toolArguments.clear();\n return;\n }\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 = event.entryId === undefined ? undefined : 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 turnEntryIds.clear();\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 if (runner === undefined) return messages;\n // Journal publication can trail model admission, so context hooks read the committed branch.\n const { entries, leafId } = await runtime.readEntries();\n for (const entry of entries) sessionSync?.append(entry);\n const leaf = sessionSync?.toPiId(leafId) ?? leafId;\n if (sessionManager && leaf !== null && sessionManager.getEntry(leaf) !== undefined) sessionManager.branch(leaf);\n return runner.emitContext(messages);\n };\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 retainedQueuedMessages = Number((await runtime.readState()).pendingMessageCount) || 0;\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 // The visible queue excludes retained nonqueue inputs. Pending checks must\n // still account for those inputs, including legacy unknown-origin records.\n const read = ++pendingRead;\n void runtime\n .readState()\n .then((state) => {\n if (!shuttingDown && read === pendingRead) retainedQueuedMessages = Number(state.pendingMessageCount) || 0;\n })\n .catch((error: unknown) => report('pending_messages', error));\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 optional: true,\n });\n if (cordisConnection !== undefined && 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 pendingRead++;\n unsubscribeEvents?.();\n unsubscribeEvents = undefined;\n unsubscribeLifecycle?.();\n unsubscribeLifecycle = undefined;\n sessionSync = undefined;\n sessionManager = undefined;\n runMessages = [];\n turnEntryIds.clear();\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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"}
1
+ {"version":3,"file":"index.mjs","names":["PiSettingsManager"],"sources":["../../../../src/services/piExtensionHost/index.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport { isDeepStrictEqual } from 'node:util';\n\nimport { BACKGROUND_CONTEXT } from '@earendil-works/chord/context';\nimport type { Api, Message, Model } from '@earendil-works/pi-ai';\nimport {\n createEventBus,\n DefaultPackageManager,\n DefaultResourceLoader,\n discoverAndLoadExtensions,\n ExtensionRunner,\n ModelRegistry,\n initTheme,\n SettingsManager as PiSettingsManager,\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 InlineExtension,\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 toPoHeadlessToolResult,\n type PoHeadlessClient,\n type PoHeadlessClientRequest,\n type PoHeadlessToolResult,\n} from '../../exports/headless';\nimport {\n connectPoCordisHost,\n PO_CORDIS_SERVER_SERVICES,\n type PoCordisHostConnection,\n type PoCordisServerServices,\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 type { ToolPromptEntry } from '../../services/toolPrompt';\nimport type {\n AgentHarnessTool,\n AgentMessage,\n CompactionPreparation as HarnessCompactionPreparation,\n Entry,\n HarnessEvent,\n HookMap,\n JsonValue,\n Skill,\n ThinkingLevel,\n} from '../../types/server/directHarnessRuntime';\nimport type { DirectHarnessRuntime } from '../../types/server/directHarnessRuntime';\nimport { SessionIdentityDoc, SessionMetadataDoc } from '../durableSession/docs';\nimport { modelSettingsDirectory } from '../piSettings';\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 Po\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 agentDir = modelSettingsDirectory(options.agentDir);\n const packages = new DefaultPackageManager({\n cwd: options.cwd,\n agentDir,\n settingsManager:\n agentDir === options.agentDir ? options.settings : PiSettingsManager.create(options.cwd, agentDir),\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\nasync function loadWithResourceLoader(\n options: { readonly cwd: string; readonly agentDir: string; readonly extensionPaths: readonly string[] },\n factories: readonly InlineExtension[],\n events: ReturnType<typeof createEventBus>,\n): Promise<LoadExtensionsResult> {\n const loader = new DefaultResourceLoader({\n cwd: options.cwd,\n agentDir: options.agentDir,\n // Empty settings: the settings packages were already resolved (missing ones skipped) and\n // arrive as paths, so the loader must not resolve, and possibly install, them again.\n settingsManager: PiSettingsManager.inMemory(),\n eventBus: events,\n additionalExtensionPaths: [...options.extensionPaths],\n extensionFactories: [...factories],\n noExtensions: true,\n noSkills: true,\n noPromptTemplates: true,\n noThemes: true,\n noContextFiles: true,\n });\n await loader.reload();\n return loader.getExtensions();\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 /**\n * Po factories already imported from each package's built Pi entry. When given, they load\n * through Pi's `DefaultResourceLoader` with discovery off, and `extensionPaths` (vanilla Pi\n * packages) still go through Pi's own path loader in the same runtime.\n */\n readonly extensionFactories?: readonly InlineExtension[];\n readonly onNotice?: (message: string) => void;\n}): Promise<(LoadExtensionsResult & { readonly events?: ReturnType<typeof createEventBus> }) | undefined> {\n const factories = options.extensionFactories ?? [];\n if (options.extensionPaths.length === 0 && factories.length === 0) return undefined;\n\n const events = createEventBus();\n const result =\n options.extensionFactories === undefined\n ? await discoverAndLoadExtensions([...options.extensionPaths], options.cwd, options.agentDir, events)\n : await loadWithResourceLoader(options, factories, 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 server 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: () => PoHeadlessClient | undefined;\n /** Borrow services from this session only, never from another conversation. */\n readonly serverServices?: PoCordisServerServices;\n readonly onNotice?: (message: string) => void;\n /**\n * Called when a Pi extension tool restriction changes the active set.\n *\n * Po 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: PoHeadlessToolResult) => void,\n ): Promise<PoHeadlessToolResult>;\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; a stored compaction entry 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\n/** A live compaction is named by the harness's own cut, which counting cannot recover once the tail is empty. */\nfunction toPiCompactionPreparation(preparation: HarnessCompactionPreparation): PiCompactionPreparation {\n return {\n firstKeptEntryId: preparation.firstKeptEntryId,\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: PoHeadlessToolResult) => void) | undefined,\n alreadyPrepared = false,\n): Promise<PoHeadlessToolResult> {\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 =\n !alreadyPrepared && definition.prepareArguments ? definition.prepareArguments(parameters) : parameters;\n const result = await definition.execute(\n toolCallId,\n prepared,\n signal,\n (partial) => onUpdate?.(toPoHeadlessToolResult(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 toPoHeadlessToolResult(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 prepareArguments: definition.prepareArguments,\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 true,\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: () => PoHeadlessClient | undefined,\n theme: ExtensionUIContext['theme'],\n): ExtensionUIContext {\n const ask = async (request: PoHeadlessClientRequest, 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 identity = await runtime.session.snapshot(SessionIdentityDoc, BACKGROUND_CONTEXT);\n const storedMetadata = await runtime.session.snapshot(SessionMetadataDoc, BACKGROUND_CONTEXT);\n const metadata = {\n id: runtime.sessionId,\n cwd: storedMetadata?.workspaceRoot || cwd,\n createdAt: identity?.createdAt ?? Date.now(),\n parentSessionId: identity?.parentSessionId || undefined,\n };\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(resolvePiId(entry.id) ?? 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(\n entry,\n entry.firstKeptEntryId === undefined\n ? boundaryEntryId(manager.getBranch(), entry.retainedTail.length)\n : (resolvePiId(entry.firstKeptEntryId) ?? undefined),\n )\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 backfill: { lane: DirectHarnessRuntime['lane']; seq: number } | undefined;\n let backfillEpoch = 0;\n const resetBackfill = (): void => {\n backfill = undefined;\n backfillEpoch++;\n };\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: PoCordisHostConnection | 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 pendingRead = 0;\n // Durable successors are physical runs within one Pi agent loop. Lifecycle frames can\n // change the current operation between them, so track the logical loop separately.\n let logicalLoopActive = false;\n let turnIndex = 0;\n let runMessages: AgentMessage[] = [];\n const turnEntryIds = new Set<string>();\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 * `nextTurn` is staged before considering triggerTurn, even when it is false.\n * Otherwise a running turn takes the message unless the caller opted out; an\n * 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.submitInternalMessage(message, 'nextTurn');\n if (sendOptions?.triggerTurn === false) return runtime.appendMessage(message);\n if (currentOperation === 'run' || sendOptions?.triggerTurn === true)\n return runtime.submitInternalMessage(\n message,\n sendOptions?.deliverAs === 'steer' || (currentOperation === 'run' && sendOptions?.deliverAs === undefined)\n ? 'steer'\n : 'followUp',\n );\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, sendOptions) => {\n const deliver = async (): Promise<void> => {\n if (currentOperation === 'run' && sendOptions?.deliverAs === undefined)\n throw new Error('sendUserMessage during streaming requires deliverAs: steer or followUp');\n const text =\n typeof content === 'string'\n ? content\n : content\n .filter((part) => part.type === 'text')\n .map((part) => part.text)\n .join('\\n');\n if (sendOptions?.expandPromptTemplates && (await runtime.dispatchCommand(text))) return;\n const message: Extract<AgentMessage, { role: 'user' }> = { role: 'user', content, timestamp: Date.now() };\n const submission = await runtime.submitInternalMessage(\n message,\n sendOptions?.deliverAs === 'steer' ? 'steer' : 'followUp',\n );\n void submission.settled.catch((error: unknown) => report('send_user_message', error));\n };\n void deliver().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 PO_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 package surface. Replacing the runtime tools with Pi\n // tools alone would drop every package 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 if (logicalLoopActive) return;\n logicalLoopActive = true;\n turnIndex = 0;\n runMessages = [];\n turnEntryIds.clear();\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 turnEntryIds.clear();\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_execution_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_execution_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_execution_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_appended':\n sessionSync?.append(event.entry);\n if (event.entry.type === 'message') turnEntryIds.add(event.entry.id);\n return;\n case 'queue_update':\n nativeQueuedMessages = event.queues.filter((item) => item.kind !== 'write').length;\n return;\n case 'turn_end': {\n // Only commits observed in this turn can satisfy its boundary. Event messages may\n // be cloned or normalized, so resolve persisted IDs rather than object identity.\n const entries = (sessionManager?.getBranch() ?? []).filter((entry) =>\n turnEntryIds.has(sessionSync?.toHarnessId(entry.id) ?? entry.id),\n );\n turnEntryIds.clear();\n const messageEntryId = entries.findLast(\n (entry) => entry?.type === 'message' && entry.message.role === 'assistant',\n )?.id;\n const toolResultEntryIds = event.toolResults.map(\n (result) =>\n entries.findLast(\n (entry) =>\n entry?.type === 'message' &&\n entry.message.role === 'toolResult' &&\n entry.message.toolCallId === result.toolCallId,\n )?.id,\n );\n if (messageEntryId === undefined || toolResultEntryIds.some((id) => id === undefined)) {\n report('turn_end', new Error('The persisted current-turn entries were not available for the Pi boundary'));\n turnIndex += 1;\n return;\n }\n await runner?.emitBoundary(\n {\n type: 'turn_end',\n turnIndex,\n message: event.message,\n toolResults: event.toolResults,\n messageEntryId,\n toolResultEntryIds: toolResultEntryIds as string[],\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 if (event.successorActive) return;\n // Settlement hooks must see reconciled pending work, not a detached lifecycle snapshot.\n ++pendingRead;\n const state = await runtime.readState();\n // Also fence lifecycle reads started while the authoritative read was in flight.\n ++pendingRead;\n if (!shuttingDown) retainedQueuedMessages = Number(state.pendingMessageCount) || 0;\n currentOperation = null;\n if (logicalLoopActive) {\n logicalLoopActive = false;\n await runner?.emit({ type: 'agent_end', messages: runMessages });\n await runner?.emit({ type: 'agent_settled', aborted: event.aborted === true });\n }\n runMessages = [];\n turnEntryIds.clear();\n toolArguments.clear();\n return;\n }\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 = event.entryId === undefined ? undefined : 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 resetBackfill();\n turnEntryIds.clear();\n currentOperation = 'navigation';\n return;\n case 'navigation_end': {\n resetBackfill();\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 if (runner === undefined) return messages;\n // Journal publication can trail admission and publishes only position zero of each raw record.\n const lane = runtime.lane;\n const startedNonEmpty = sessionManager !== undefined && sessionManager.getLeafId() !== null;\n if (!startedNonEmpty || backfill?.lane !== lane) resetBackfill();\n const previous = backfill;\n const epoch = backfillEpoch;\n let raw = previous === undefined ? await runtime.readEntries() : await runtime.readEntriesFrom(previous.seq);\n if (previous !== undefined && raw.entries[0]?.seq !== previous.seq) raw = await runtime.readEntries();\n const { entries, leafId } = raw;\n // Replay every position, including the boundary record; append is idempotent and retains mirror aliases.\n for (const entry of entries) sessionSync?.append(entry);\n const leaf = sessionSync?.toPiId(leafId) ?? leafId;\n if (sessionManager && leaf !== null && sessionManager.getEntry(leaf) !== undefined) sessionManager.branch(leaf);\n const seq = entries.at(-1)?.seq;\n const transformed = await runner.emitContext(messages);\n // Empty starting branches need another full sweep to retry previously unconvertible compactions.\n // Neither a failure nor a read completed after navigation may publish a watermark.\n if (startedNonEmpty && epoch === backfillEpoch && runtime.lane === lane && backfill === previous)\n backfill = seq === undefined ? undefined : { lane, seq };\n return transformed;\n };\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),\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 retainedQueuedMessages = Number((await runtime.readState()).pendingMessageCount) || 0;\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 // The visible queue excludes retained nonqueue inputs. Pending checks must\n // still account for those inputs, including legacy unknown-origin records.\n const read = ++pendingRead;\n void runtime\n .readState()\n .then((state) => {\n if (!shuttingDown && read === pendingRead) retainedQueuedMessages = Number(state.pendingMessageCount) || 0;\n })\n .catch((error: unknown) => report('pending_messages', error));\n currentOperation = lifecycle.operation?.kind ?? null;\n });\n // Pi opens session-scoped extension services before resource discovery. Po tool\n // restrictions depend on the same ordering.\n if (preload.events !== undefined) {\n cordisConnection = await connectPoCordisHost({ events: preload.events }, 'headless-pi-extension-host', {\n optional: true,\n });\n if (cordisConnection !== undefined && 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(PO_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 resetBackfill();\n shuttingDown = true;\n pendingRead++;\n unsubscribeEvents?.();\n unsubscribeEvents = undefined;\n unsubscribeLifecycle?.();\n unsubscribeLifecycle = undefined;\n sessionSync = undefined;\n sessionManager = undefined;\n runMessages = [];\n turnEntryIds.clear();\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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"}
@@ -12,19 +12,19 @@ function createPiHelpToolGate(source, names) {
12
12
  active = void 0;
13
13
  };
14
14
  const bind = (context) => {
15
- context.inject([require_toolSurface.DOOM_TOOL_SURFACE_SERVICE], (child) => {
16
- const current = require_toolSurface.requireDoomToolSurface(child);
15
+ context.inject([require_toolSurface.PO_TOOL_SURFACE_SERVICE], (child) => {
16
+ const current = require_toolSurface.requirePoToolSurface(child);
17
17
  surface = current;
18
18
  const restrict = (incoming) => active ? incoming : incoming.filter((name) => !controlled.has(name));
19
19
  const registration = current.register({
20
20
  source,
21
21
  controlledTools: [...controlled],
22
- attribution: require_help.DOOM_HELP_WHEN.attribution,
22
+ attribution: require_help.PO_HELP_WHEN.attribution,
23
23
  restrict
24
24
  });
25
25
  refresh = () => registration.update(restrict);
26
- child.inject([require_help.DOOM_HELP_SERVICE], (helpContext) => {
27
- const help = require_help.requireDoomHelpService(helpContext);
26
+ child.inject([require_help.PO_HELP_SERVICE], (helpContext) => {
27
+ const help = require_help.requirePoHelpService(helpContext);
28
28
  const synchronize = () => {
29
29
  const state = help.getSnapshot().activation;
30
30
  if (state === "active" || state === "degraded") active ??= new AbortController();