@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,2 +1 @@
1
- import { AGENT_PLUGIN_MCP_SCHEMA_URL, DOOM_MCP_PROJECTION_RESOLVER_SERVICE, DOOM_MCP_PROJECTION_SERVICE, DOOM_MCP_PROJECTION_VERSION, DoomMcpAgentPluginProjectionSourceSchema, DoomMcpNativeProjectionSourceSchema, DoomMcpProjectionAllowlistSchema, DoomMcpProjectionSchema, DoomMcpProjectionSourceSchema, createDisabledDoomMcpProjection, createDoomMcpProjectionService, isDoomMcpProjection, readDoomMcpProjectionService, requireDoomMcpProjectionService } from "./src/schemas/mcpProjection.mjs";
2
- export { AGENT_PLUGIN_MCP_SCHEMA_URL, DOOM_MCP_PROJECTION_RESOLVER_SERVICE, DOOM_MCP_PROJECTION_SERVICE, DOOM_MCP_PROJECTION_VERSION, DoomMcpAgentPluginProjectionSourceSchema, DoomMcpNativeProjectionSourceSchema, DoomMcpProjectionAllowlistSchema, DoomMcpProjectionSchema, DoomMcpProjectionSourceSchema, createDisabledDoomMcpProjection, createDoomMcpProjectionService, isDoomMcpProjection, readDoomMcpProjectionService, requireDoomMcpProjectionService };
1
+ export { AGENT_PLUGIN_MCP_SCHEMA_URL, PO_MCP_PROJECTION_RESOLVER_SERVICE, PO_MCP_PROJECTION_SERVICE, PO_MCP_PROJECTION_VERSION, PoMcpAgentPluginProjectionSourceSchema, PoMcpNativeProjectionSourceSchema, PoMcpProjectionAllowlistSchema, PoMcpProjectionSchema, PoMcpProjectionSourceSchema, createDisabledPoMcpProjection, createPoMcpProjectionService, isPoMcpProjection, readPoMcpProjectionService, requirePoMcpProjectionService } from "./src/schemas/mcpProjection.mjs";
@@ -24,7 +24,7 @@ function asStdioServer(value) {
24
24
  ...env ? { env } : {}
25
25
  };
26
26
  }
27
- function cachePath(server, homeDoomDirectory) {
27
+ function cachePath(server, homePoDirectory) {
28
28
  const env = Object.entries(server.env ?? {}).sort(([left], [right]) => left.localeCompare(right));
29
29
  const identity = [
30
30
  CACHE_VERSION,
@@ -33,7 +33,7 @@ function cachePath(server, homeDoomDirectory) {
33
33
  env
34
34
  ];
35
35
  const digest = node_crypto.default.createHash("sha256").update(JSON.stringify(identity)).digest("hex");
36
- return node_path.default.join(homeDoomDirectory, CACHE_DIRECTORY, `${digest}.json`);
36
+ return node_path.default.join(homePoDirectory, CACHE_DIRECTORY, `${digest}.json`);
37
37
  }
38
38
  function readCache(file) {
39
39
  try {
@@ -141,7 +141,7 @@ async function priceServer(name, configured, options) {
141
141
  cached: false,
142
142
  unavailable: "not a stdio server"
143
143
  };
144
- const file = cachePath(server, options.homeDoomDirectory);
144
+ const file = cachePath(server, options.homePoDirectory);
145
145
  const hit = readCache(file);
146
146
  if (hit) return {
147
147
  name,
@@ -176,7 +176,7 @@ async function priceServer(name, configured, options) {
176
176
  * prompt.
177
177
  *
178
178
  * Servers only report their tools once connected, so this spawns each one and
179
- * snapshots the result under the home Doom directory. Handshakes run in
179
+ * snapshots the result under the home Po directory. Handshakes run in
180
180
  * parallel and the snapshot is keyed on the server descriptor, so a changed
181
181
  * command or pinned version re-prices and everything else stays instant.
182
182
  */
@@ -1 +1 @@
1
- {"version":3,"file":"mcpSchemaCost.cjs","names":["crypto","path","fs","spawn"],"sources":["../src/services/mcpSchemaCost/index.ts"],"sourcesContent":["import { spawn } from 'node:child_process';\nimport crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst CACHE_DIRECTORY = 'mcp-schema-cache';\nconst CACHE_VERSION = 1;\nconst PROTOCOL_VERSION = '2024-11-05';\nconst DEFAULT_TIMEOUT_MS = 10_000;\n\ninterface StdioServer {\n command: string;\n args: string[];\n env?: Record<string, string>;\n}\n\nexport interface McpServerCost {\n name: string;\n tokens: number;\n toolCount: number;\n /** Read from the on-disk snapshot rather than a fresh handshake. */\n cached: boolean;\n /** Why this server could not be priced. Set only when tokens is 0. */\n unavailable?: string;\n}\n\nexport interface McpSchemaCost {\n servers: McpServerCost[];\n totalTokens: number;\n}\n\nexport interface McpSchemaCostOptions {\n /** The resolved MCP config Pi will load. */\n configPath: string;\n homeDoomDirectory: string;\n cwd: string;\n environment: NodeJS.ProcessEnv;\n countTokens: (text: string) => number;\n timeoutMs?: number;\n}\n\nfunction asStdioServer(value: unknown): StdioServer | undefined {\n if (typeof value !== 'object' || value === null) return undefined;\n const record = value as Record<string, unknown>;\n if (typeof record.command !== 'string' || !record.command) return undefined;\n const args = Array.isArray(record.args) ? record.args.filter((arg): arg is string => typeof arg === 'string') : [];\n const env =\n typeof record.env === 'object' && record.env !== null\n ? Object.fromEntries(\n Object.entries(record.env as Record<string, unknown>).filter(\n (entry): entry is [string, string] => typeof entry[1] === 'string',\n ),\n )\n : undefined;\n return { command: record.command, args, ...(env ? { env } : {}) };\n}\n\nfunction cachePath(server: StdioServer, homeDoomDirectory: string): string {\n const env = Object.entries(server.env ?? {}).sort(([left], [right]) => left.localeCompare(right));\n const identity = [CACHE_VERSION, server.command, server.args, env];\n const digest = crypto.createHash('sha256').update(JSON.stringify(identity)).digest('hex');\n return path.join(homeDoomDirectory, CACHE_DIRECTORY, `${digest}.json`);\n}\n\nfunction readCache(file: string): { tokens: number; toolCount: number } | undefined {\n try {\n const parsed = JSON.parse(fs.readFileSync(file, 'utf8')) as unknown;\n if (typeof parsed !== 'object' || parsed === null) return undefined;\n const { tokens, toolCount } = parsed as Record<string, unknown>;\n if (typeof tokens !== 'number' || typeof toolCount !== 'number') return undefined;\n return { tokens, toolCount };\n } catch {\n return undefined;\n }\n}\n\nfunction writeCache(file: string, value: { tokens: number; toolCount: number }): void {\n try {\n fs.mkdirSync(path.dirname(file), { recursive: true });\n fs.writeFileSync(file, JSON.stringify(value), { mode: 0o600 });\n } catch {\n // A cache that cannot be written only costs the next run a handshake.\n }\n}\n\n/**\n * Runs the MCP initialize/tools handshake and returns the advertised tools.\n *\n * The server is a configured executable, so this trusts it the same way a\n * session does, but it is killed as soon as the tool list arrives rather than\n * being left running.\n */\nfunction listTools(server: StdioServer, options: McpSchemaCostOptions): Promise<unknown[]> {\n return new Promise((resolve, reject) => {\n const child = spawn(server.command, server.args, {\n cwd: options.cwd,\n env: { ...options.environment, ...server.env },\n stdio: ['pipe', 'pipe', 'ignore'],\n });\n\n let settled = false;\n const finish = (outcome: () => void): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n child.kill();\n outcome();\n };\n\n const timer = setTimeout(\n () => finish(() => reject(new Error('timed out'))),\n options.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n );\n\n const send = (message: unknown): void => {\n if (!child.stdin.destroyed) child.stdin.write(`${JSON.stringify(message)}\\n`);\n };\n\n let buffer = '';\n child.stdout.on('data', (chunk: Buffer) => {\n buffer += chunk.toString();\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n for (const line of lines) {\n if (!line.trim()) continue;\n let message: { id?: number; result?: { tools?: unknown[] } };\n try {\n message = JSON.parse(line) as typeof message;\n } catch {\n continue;\n }\n if (message.id === 1) {\n send({ jsonrpc: '2.0', method: 'notifications/initialized' });\n send({ jsonrpc: '2.0', id: 2, method: 'tools/list' });\n }\n if (message.id === 2) finish(() => resolve(message.result?.tools ?? []));\n }\n });\n\n child.on('error', (error) => finish(() => reject(error)));\n child.on('exit', () => finish(() => reject(new Error('server exited before reporting tools'))));\n\n send({\n jsonrpc: '2.0',\n id: 1,\n method: 'initialize',\n params: {\n protocolVersion: PROTOCOL_VERSION,\n capabilities: {},\n clientInfo: { name: 'po-explain', version: '1' },\n },\n });\n });\n}\n\nasync function priceServer(name: string, configured: unknown, options: McpSchemaCostOptions): Promise<McpServerCost> {\n const server = asStdioServer(configured);\n if (!server) return { name, tokens: 0, toolCount: 0, cached: false, unavailable: 'not a stdio server' };\n\n const file = cachePath(server, options.homeDoomDirectory);\n const hit = readCache(file);\n if (hit) return { name, tokens: hit.tokens, toolCount: hit.toolCount, cached: true };\n\n try {\n const tools = await listTools(server, options);\n const value = { tokens: options.countTokens(JSON.stringify(tools)), toolCount: tools.length };\n writeCache(file, value);\n return { name, ...value, cached: false };\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n return { name, tokens: 0, toolCount: 0, cached: false, unavailable: detail };\n }\n}\n\n/**\n * Prices the tool schemas every configured MCP server puts in the system\n * prompt.\n *\n * Servers only report their tools once connected, so this spawns each one and\n * snapshots the result under the home Doom directory. Handshakes run in\n * parallel and the snapshot is keyed on the server descriptor, so a changed\n * command or pinned version re-prices and everything else stays instant.\n */\nexport async function priceMcpToolSchemas(options: McpSchemaCostOptions): Promise<McpSchemaCost> {\n const parsed = JSON.parse(fs.readFileSync(options.configPath, 'utf8')) as {\n mcpServers?: Record<string, unknown>;\n };\n const entries = Object.entries(parsed.mcpServers ?? {});\n const servers = await Promise.all(entries.map(([name, configured]) => priceServer(name, configured, options)));\n return { servers, totalTokens: servers.reduce((total, server) => total + server.tokens, 0) };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"mcpSchemaCost.cjs","names":["crypto","path","fs","spawn"],"sources":["../src/services/mcpSchemaCost/index.ts"],"sourcesContent":["import { spawn } from 'node:child_process';\nimport crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst CACHE_DIRECTORY = 'mcp-schema-cache';\nconst CACHE_VERSION = 1;\nconst PROTOCOL_VERSION = '2024-11-05';\nconst DEFAULT_TIMEOUT_MS = 10_000;\n\ninterface StdioServer {\n command: string;\n args: string[];\n env?: Record<string, string>;\n}\n\nexport interface McpServerCost {\n name: string;\n tokens: number;\n toolCount: number;\n /** Read from the on-disk snapshot rather than a fresh handshake. */\n cached: boolean;\n /** Why this server could not be priced. Set only when tokens is 0. */\n unavailable?: string;\n}\n\nexport interface McpSchemaCost {\n servers: McpServerCost[];\n totalTokens: number;\n}\n\nexport interface McpSchemaCostOptions {\n /** The resolved MCP config Pi will load. */\n configPath: string;\n homePoDirectory: string;\n cwd: string;\n environment: NodeJS.ProcessEnv;\n countTokens: (text: string) => number;\n timeoutMs?: number;\n}\n\nfunction asStdioServer(value: unknown): StdioServer | undefined {\n if (typeof value !== 'object' || value === null) return undefined;\n const record = value as Record<string, unknown>;\n if (typeof record.command !== 'string' || !record.command) return undefined;\n const args = Array.isArray(record.args) ? record.args.filter((arg): arg is string => typeof arg === 'string') : [];\n const env =\n typeof record.env === 'object' && record.env !== null\n ? Object.fromEntries(\n Object.entries(record.env as Record<string, unknown>).filter(\n (entry): entry is [string, string] => typeof entry[1] === 'string',\n ),\n )\n : undefined;\n return { command: record.command, args, ...(env ? { env } : {}) };\n}\n\nfunction cachePath(server: StdioServer, homePoDirectory: string): string {\n const env = Object.entries(server.env ?? {}).sort(([left], [right]) => left.localeCompare(right));\n const identity = [CACHE_VERSION, server.command, server.args, env];\n const digest = crypto.createHash('sha256').update(JSON.stringify(identity)).digest('hex');\n return path.join(homePoDirectory, CACHE_DIRECTORY, `${digest}.json`);\n}\n\nfunction readCache(file: string): { tokens: number; toolCount: number } | undefined {\n try {\n const parsed = JSON.parse(fs.readFileSync(file, 'utf8')) as unknown;\n if (typeof parsed !== 'object' || parsed === null) return undefined;\n const { tokens, toolCount } = parsed as Record<string, unknown>;\n if (typeof tokens !== 'number' || typeof toolCount !== 'number') return undefined;\n return { tokens, toolCount };\n } catch {\n return undefined;\n }\n}\n\nfunction writeCache(file: string, value: { tokens: number; toolCount: number }): void {\n try {\n fs.mkdirSync(path.dirname(file), { recursive: true });\n fs.writeFileSync(file, JSON.stringify(value), { mode: 0o600 });\n } catch {\n // A cache that cannot be written only costs the next run a handshake.\n }\n}\n\n/**\n * Runs the MCP initialize/tools handshake and returns the advertised tools.\n *\n * The server is a configured executable, so this trusts it the same way a\n * session does, but it is killed as soon as the tool list arrives rather than\n * being left running.\n */\nfunction listTools(server: StdioServer, options: McpSchemaCostOptions): Promise<unknown[]> {\n return new Promise((resolve, reject) => {\n const child = spawn(server.command, server.args, {\n cwd: options.cwd,\n env: { ...options.environment, ...server.env },\n stdio: ['pipe', 'pipe', 'ignore'],\n });\n\n let settled = false;\n const finish = (outcome: () => void): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n child.kill();\n outcome();\n };\n\n const timer = setTimeout(\n () => finish(() => reject(new Error('timed out'))),\n options.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n );\n\n const send = (message: unknown): void => {\n if (!child.stdin.destroyed) child.stdin.write(`${JSON.stringify(message)}\\n`);\n };\n\n let buffer = '';\n child.stdout.on('data', (chunk: Buffer) => {\n buffer += chunk.toString();\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n for (const line of lines) {\n if (!line.trim()) continue;\n let message: { id?: number; result?: { tools?: unknown[] } };\n try {\n message = JSON.parse(line) as typeof message;\n } catch {\n continue;\n }\n if (message.id === 1) {\n send({ jsonrpc: '2.0', method: 'notifications/initialized' });\n send({ jsonrpc: '2.0', id: 2, method: 'tools/list' });\n }\n if (message.id === 2) finish(() => resolve(message.result?.tools ?? []));\n }\n });\n\n child.on('error', (error) => finish(() => reject(error)));\n child.on('exit', () => finish(() => reject(new Error('server exited before reporting tools'))));\n\n send({\n jsonrpc: '2.0',\n id: 1,\n method: 'initialize',\n params: {\n protocolVersion: PROTOCOL_VERSION,\n capabilities: {},\n clientInfo: { name: 'po-explain', version: '1' },\n },\n });\n });\n}\n\nasync function priceServer(name: string, configured: unknown, options: McpSchemaCostOptions): Promise<McpServerCost> {\n const server = asStdioServer(configured);\n if (!server) return { name, tokens: 0, toolCount: 0, cached: false, unavailable: 'not a stdio server' };\n\n const file = cachePath(server, options.homePoDirectory);\n const hit = readCache(file);\n if (hit) return { name, tokens: hit.tokens, toolCount: hit.toolCount, cached: true };\n\n try {\n const tools = await listTools(server, options);\n const value = { tokens: options.countTokens(JSON.stringify(tools)), toolCount: tools.length };\n writeCache(file, value);\n return { name, ...value, cached: false };\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n return { name, tokens: 0, toolCount: 0, cached: false, unavailable: detail };\n }\n}\n\n/**\n * Prices the tool schemas every configured MCP server puts in the system\n * prompt.\n *\n * Servers only report their tools once connected, so this spawns each one and\n * snapshots the result under the home Po directory. Handshakes run in\n * parallel and the snapshot is keyed on the server descriptor, so a changed\n * command or pinned version re-prices and everything else stays instant.\n */\nexport async function priceMcpToolSchemas(options: McpSchemaCostOptions): Promise<McpSchemaCost> {\n const parsed = JSON.parse(fs.readFileSync(options.configPath, 'utf8')) as {\n mcpServers?: Record<string, unknown>;\n };\n const entries = Object.entries(parsed.mcpServers ?? {});\n const servers = await Promise.all(entries.map(([name, configured]) => priceServer(name, configured, options)));\n return { servers, totalTokens: servers.reduce((total, server) => total + server.tokens, 0) };\n}\n"],"mappings":"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"}
@@ -15,7 +15,7 @@ export interface McpSchemaCost {
15
15
  export interface McpSchemaCostOptions {
16
16
  /** The resolved MCP config Pi will load. */
17
17
  configPath: string;
18
- homeDoomDirectory: string;
18
+ homePoDirectory: string;
19
19
  cwd: string;
20
20
  environment: NodeJS.ProcessEnv;
21
21
  countTokens: (text: string) => number;
@@ -26,7 +26,7 @@ export interface McpSchemaCostOptions {
26
26
  * prompt.
27
27
  *
28
28
  * Servers only report their tools once connected, so this spawns each one and
29
- * snapshots the result under the home Doom directory. Handshakes run in
29
+ * snapshots the result under the home Po directory. Handshakes run in
30
30
  * parallel and the snapshot is keyed on the server descriptor, so a changed
31
31
  * command or pinned version re-prices and everything else stays instant.
32
32
  */
@@ -19,7 +19,7 @@ function asStdioServer(value) {
19
19
  ...env ? { env } : {}
20
20
  };
21
21
  }
22
- function cachePath(server, homeDoomDirectory) {
22
+ function cachePath(server, homePoDirectory) {
23
23
  const env = Object.entries(server.env ?? {}).sort(([left], [right]) => left.localeCompare(right));
24
24
  const identity = [
25
25
  CACHE_VERSION,
@@ -28,7 +28,7 @@ function cachePath(server, homeDoomDirectory) {
28
28
  env
29
29
  ];
30
30
  const digest = crypto.createHash("sha256").update(JSON.stringify(identity)).digest("hex");
31
- return path.join(homeDoomDirectory, CACHE_DIRECTORY, `${digest}.json`);
31
+ return path.join(homePoDirectory, CACHE_DIRECTORY, `${digest}.json`);
32
32
  }
33
33
  function readCache(file) {
34
34
  try {
@@ -136,7 +136,7 @@ async function priceServer(name, configured, options) {
136
136
  cached: false,
137
137
  unavailable: "not a stdio server"
138
138
  };
139
- const file = cachePath(server, options.homeDoomDirectory);
139
+ const file = cachePath(server, options.homePoDirectory);
140
140
  const hit = readCache(file);
141
141
  if (hit) return {
142
142
  name,
@@ -171,7 +171,7 @@ async function priceServer(name, configured, options) {
171
171
  * prompt.
172
172
  *
173
173
  * Servers only report their tools once connected, so this spawns each one and
174
- * snapshots the result under the home Doom directory. Handshakes run in
174
+ * snapshots the result under the home Po directory. Handshakes run in
175
175
  * parallel and the snapshot is keyed on the server descriptor, so a changed
176
176
  * command or pinned version re-prices and everything else stays instant.
177
177
  */
@@ -1 +1 @@
1
- {"version":3,"file":"mcpSchemaCost.mjs","names":[],"sources":["../src/services/mcpSchemaCost/index.ts"],"sourcesContent":["import { spawn } from 'node:child_process';\nimport crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst CACHE_DIRECTORY = 'mcp-schema-cache';\nconst CACHE_VERSION = 1;\nconst PROTOCOL_VERSION = '2024-11-05';\nconst DEFAULT_TIMEOUT_MS = 10_000;\n\ninterface StdioServer {\n command: string;\n args: string[];\n env?: Record<string, string>;\n}\n\nexport interface McpServerCost {\n name: string;\n tokens: number;\n toolCount: number;\n /** Read from the on-disk snapshot rather than a fresh handshake. */\n cached: boolean;\n /** Why this server could not be priced. Set only when tokens is 0. */\n unavailable?: string;\n}\n\nexport interface McpSchemaCost {\n servers: McpServerCost[];\n totalTokens: number;\n}\n\nexport interface McpSchemaCostOptions {\n /** The resolved MCP config Pi will load. */\n configPath: string;\n homeDoomDirectory: string;\n cwd: string;\n environment: NodeJS.ProcessEnv;\n countTokens: (text: string) => number;\n timeoutMs?: number;\n}\n\nfunction asStdioServer(value: unknown): StdioServer | undefined {\n if (typeof value !== 'object' || value === null) return undefined;\n const record = value as Record<string, unknown>;\n if (typeof record.command !== 'string' || !record.command) return undefined;\n const args = Array.isArray(record.args) ? record.args.filter((arg): arg is string => typeof arg === 'string') : [];\n const env =\n typeof record.env === 'object' && record.env !== null\n ? Object.fromEntries(\n Object.entries(record.env as Record<string, unknown>).filter(\n (entry): entry is [string, string] => typeof entry[1] === 'string',\n ),\n )\n : undefined;\n return { command: record.command, args, ...(env ? { env } : {}) };\n}\n\nfunction cachePath(server: StdioServer, homeDoomDirectory: string): string {\n const env = Object.entries(server.env ?? {}).sort(([left], [right]) => left.localeCompare(right));\n const identity = [CACHE_VERSION, server.command, server.args, env];\n const digest = crypto.createHash('sha256').update(JSON.stringify(identity)).digest('hex');\n return path.join(homeDoomDirectory, CACHE_DIRECTORY, `${digest}.json`);\n}\n\nfunction readCache(file: string): { tokens: number; toolCount: number } | undefined {\n try {\n const parsed = JSON.parse(fs.readFileSync(file, 'utf8')) as unknown;\n if (typeof parsed !== 'object' || parsed === null) return undefined;\n const { tokens, toolCount } = parsed as Record<string, unknown>;\n if (typeof tokens !== 'number' || typeof toolCount !== 'number') return undefined;\n return { tokens, toolCount };\n } catch {\n return undefined;\n }\n}\n\nfunction writeCache(file: string, value: { tokens: number; toolCount: number }): void {\n try {\n fs.mkdirSync(path.dirname(file), { recursive: true });\n fs.writeFileSync(file, JSON.stringify(value), { mode: 0o600 });\n } catch {\n // A cache that cannot be written only costs the next run a handshake.\n }\n}\n\n/**\n * Runs the MCP initialize/tools handshake and returns the advertised tools.\n *\n * The server is a configured executable, so this trusts it the same way a\n * session does, but it is killed as soon as the tool list arrives rather than\n * being left running.\n */\nfunction listTools(server: StdioServer, options: McpSchemaCostOptions): Promise<unknown[]> {\n return new Promise((resolve, reject) => {\n const child = spawn(server.command, server.args, {\n cwd: options.cwd,\n env: { ...options.environment, ...server.env },\n stdio: ['pipe', 'pipe', 'ignore'],\n });\n\n let settled = false;\n const finish = (outcome: () => void): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n child.kill();\n outcome();\n };\n\n const timer = setTimeout(\n () => finish(() => reject(new Error('timed out'))),\n options.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n );\n\n const send = (message: unknown): void => {\n if (!child.stdin.destroyed) child.stdin.write(`${JSON.stringify(message)}\\n`);\n };\n\n let buffer = '';\n child.stdout.on('data', (chunk: Buffer) => {\n buffer += chunk.toString();\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n for (const line of lines) {\n if (!line.trim()) continue;\n let message: { id?: number; result?: { tools?: unknown[] } };\n try {\n message = JSON.parse(line) as typeof message;\n } catch {\n continue;\n }\n if (message.id === 1) {\n send({ jsonrpc: '2.0', method: 'notifications/initialized' });\n send({ jsonrpc: '2.0', id: 2, method: 'tools/list' });\n }\n if (message.id === 2) finish(() => resolve(message.result?.tools ?? []));\n }\n });\n\n child.on('error', (error) => finish(() => reject(error)));\n child.on('exit', () => finish(() => reject(new Error('server exited before reporting tools'))));\n\n send({\n jsonrpc: '2.0',\n id: 1,\n method: 'initialize',\n params: {\n protocolVersion: PROTOCOL_VERSION,\n capabilities: {},\n clientInfo: { name: 'po-explain', version: '1' },\n },\n });\n });\n}\n\nasync function priceServer(name: string, configured: unknown, options: McpSchemaCostOptions): Promise<McpServerCost> {\n const server = asStdioServer(configured);\n if (!server) return { name, tokens: 0, toolCount: 0, cached: false, unavailable: 'not a stdio server' };\n\n const file = cachePath(server, options.homeDoomDirectory);\n const hit = readCache(file);\n if (hit) return { name, tokens: hit.tokens, toolCount: hit.toolCount, cached: true };\n\n try {\n const tools = await listTools(server, options);\n const value = { tokens: options.countTokens(JSON.stringify(tools)), toolCount: tools.length };\n writeCache(file, value);\n return { name, ...value, cached: false };\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n return { name, tokens: 0, toolCount: 0, cached: false, unavailable: detail };\n }\n}\n\n/**\n * Prices the tool schemas every configured MCP server puts in the system\n * prompt.\n *\n * Servers only report their tools once connected, so this spawns each one and\n * snapshots the result under the home Doom directory. Handshakes run in\n * parallel and the snapshot is keyed on the server descriptor, so a changed\n * command or pinned version re-prices and everything else stays instant.\n */\nexport async function priceMcpToolSchemas(options: McpSchemaCostOptions): Promise<McpSchemaCost> {\n const parsed = JSON.parse(fs.readFileSync(options.configPath, 'utf8')) as {\n mcpServers?: Record<string, unknown>;\n };\n const entries = Object.entries(parsed.mcpServers ?? {});\n const servers = await Promise.all(entries.map(([name, configured]) => priceServer(name, configured, options)));\n return { servers, totalTokens: servers.reduce((total, server) => total + server.tokens, 0) };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"mcpSchemaCost.mjs","names":[],"sources":["../src/services/mcpSchemaCost/index.ts"],"sourcesContent":["import { spawn } from 'node:child_process';\nimport crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst CACHE_DIRECTORY = 'mcp-schema-cache';\nconst CACHE_VERSION = 1;\nconst PROTOCOL_VERSION = '2024-11-05';\nconst DEFAULT_TIMEOUT_MS = 10_000;\n\ninterface StdioServer {\n command: string;\n args: string[];\n env?: Record<string, string>;\n}\n\nexport interface McpServerCost {\n name: string;\n tokens: number;\n toolCount: number;\n /** Read from the on-disk snapshot rather than a fresh handshake. */\n cached: boolean;\n /** Why this server could not be priced. Set only when tokens is 0. */\n unavailable?: string;\n}\n\nexport interface McpSchemaCost {\n servers: McpServerCost[];\n totalTokens: number;\n}\n\nexport interface McpSchemaCostOptions {\n /** The resolved MCP config Pi will load. */\n configPath: string;\n homePoDirectory: string;\n cwd: string;\n environment: NodeJS.ProcessEnv;\n countTokens: (text: string) => number;\n timeoutMs?: number;\n}\n\nfunction asStdioServer(value: unknown): StdioServer | undefined {\n if (typeof value !== 'object' || value === null) return undefined;\n const record = value as Record<string, unknown>;\n if (typeof record.command !== 'string' || !record.command) return undefined;\n const args = Array.isArray(record.args) ? record.args.filter((arg): arg is string => typeof arg === 'string') : [];\n const env =\n typeof record.env === 'object' && record.env !== null\n ? Object.fromEntries(\n Object.entries(record.env as Record<string, unknown>).filter(\n (entry): entry is [string, string] => typeof entry[1] === 'string',\n ),\n )\n : undefined;\n return { command: record.command, args, ...(env ? { env } : {}) };\n}\n\nfunction cachePath(server: StdioServer, homePoDirectory: string): string {\n const env = Object.entries(server.env ?? {}).sort(([left], [right]) => left.localeCompare(right));\n const identity = [CACHE_VERSION, server.command, server.args, env];\n const digest = crypto.createHash('sha256').update(JSON.stringify(identity)).digest('hex');\n return path.join(homePoDirectory, CACHE_DIRECTORY, `${digest}.json`);\n}\n\nfunction readCache(file: string): { tokens: number; toolCount: number } | undefined {\n try {\n const parsed = JSON.parse(fs.readFileSync(file, 'utf8')) as unknown;\n if (typeof parsed !== 'object' || parsed === null) return undefined;\n const { tokens, toolCount } = parsed as Record<string, unknown>;\n if (typeof tokens !== 'number' || typeof toolCount !== 'number') return undefined;\n return { tokens, toolCount };\n } catch {\n return undefined;\n }\n}\n\nfunction writeCache(file: string, value: { tokens: number; toolCount: number }): void {\n try {\n fs.mkdirSync(path.dirname(file), { recursive: true });\n fs.writeFileSync(file, JSON.stringify(value), { mode: 0o600 });\n } catch {\n // A cache that cannot be written only costs the next run a handshake.\n }\n}\n\n/**\n * Runs the MCP initialize/tools handshake and returns the advertised tools.\n *\n * The server is a configured executable, so this trusts it the same way a\n * session does, but it is killed as soon as the tool list arrives rather than\n * being left running.\n */\nfunction listTools(server: StdioServer, options: McpSchemaCostOptions): Promise<unknown[]> {\n return new Promise((resolve, reject) => {\n const child = spawn(server.command, server.args, {\n cwd: options.cwd,\n env: { ...options.environment, ...server.env },\n stdio: ['pipe', 'pipe', 'ignore'],\n });\n\n let settled = false;\n const finish = (outcome: () => void): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n child.kill();\n outcome();\n };\n\n const timer = setTimeout(\n () => finish(() => reject(new Error('timed out'))),\n options.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n );\n\n const send = (message: unknown): void => {\n if (!child.stdin.destroyed) child.stdin.write(`${JSON.stringify(message)}\\n`);\n };\n\n let buffer = '';\n child.stdout.on('data', (chunk: Buffer) => {\n buffer += chunk.toString();\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n for (const line of lines) {\n if (!line.trim()) continue;\n let message: { id?: number; result?: { tools?: unknown[] } };\n try {\n message = JSON.parse(line) as typeof message;\n } catch {\n continue;\n }\n if (message.id === 1) {\n send({ jsonrpc: '2.0', method: 'notifications/initialized' });\n send({ jsonrpc: '2.0', id: 2, method: 'tools/list' });\n }\n if (message.id === 2) finish(() => resolve(message.result?.tools ?? []));\n }\n });\n\n child.on('error', (error) => finish(() => reject(error)));\n child.on('exit', () => finish(() => reject(new Error('server exited before reporting tools'))));\n\n send({\n jsonrpc: '2.0',\n id: 1,\n method: 'initialize',\n params: {\n protocolVersion: PROTOCOL_VERSION,\n capabilities: {},\n clientInfo: { name: 'po-explain', version: '1' },\n },\n });\n });\n}\n\nasync function priceServer(name: string, configured: unknown, options: McpSchemaCostOptions): Promise<McpServerCost> {\n const server = asStdioServer(configured);\n if (!server) return { name, tokens: 0, toolCount: 0, cached: false, unavailable: 'not a stdio server' };\n\n const file = cachePath(server, options.homePoDirectory);\n const hit = readCache(file);\n if (hit) return { name, tokens: hit.tokens, toolCount: hit.toolCount, cached: true };\n\n try {\n const tools = await listTools(server, options);\n const value = { tokens: options.countTokens(JSON.stringify(tools)), toolCount: tools.length };\n writeCache(file, value);\n return { name, ...value, cached: false };\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n return { name, tokens: 0, toolCount: 0, cached: false, unavailable: detail };\n }\n}\n\n/**\n * Prices the tool schemas every configured MCP server puts in the system\n * prompt.\n *\n * Servers only report their tools once connected, so this spawns each one and\n * snapshots the result under the home Po directory. Handshakes run in\n * parallel and the snapshot is keyed on the server descriptor, so a changed\n * command or pinned version re-prices and everything else stays instant.\n */\nexport async function priceMcpToolSchemas(options: McpSchemaCostOptions): Promise<McpSchemaCost> {\n const parsed = JSON.parse(fs.readFileSync(options.configPath, 'utf8')) as {\n mcpServers?: Record<string, unknown>;\n };\n const entries = Object.entries(parsed.mcpServers ?? {});\n const servers = await Promise.all(entries.map(([name, configured]) => priceServer(name, configured, options)));\n return { servers, totalTokens: servers.reduce((total, server) => total + server.tokens, 0) };\n}\n"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_mcpSession = require("./src/schemas/mcpSession.cjs");
3
- exports.DOOM_MCP_SESSION_ENV_VAR = require_mcpSession.DOOM_MCP_SESSION_ENV_VAR;
4
- exports.DoomMcpSessionAllowlistSchema = require_mcpSession.DoomMcpSessionAllowlistSchema;
5
- exports.DoomMcpSessionConfigSchema = require_mcpSession.DoomMcpSessionConfigSchema;
6
- exports.doomMcpSessionEnvironment = require_mcpSession.doomMcpSessionEnvironment;
7
- exports.parseDoomMcpSessionConfig = require_mcpSession.parseDoomMcpSessionConfig;
8
- exports.readDoomMcpSessionConfig = require_mcpSession.readDoomMcpSessionConfig;
9
- exports.serializeDoomMcpSessionConfig = require_mcpSession.serializeDoomMcpSessionConfig;
3
+ exports.PO_MCP_SESSION_ENV_VAR = require_mcpSession.PO_MCP_SESSION_ENV_VAR;
4
+ exports.PoMcpSessionAllowlistSchema = require_mcpSession.PoMcpSessionAllowlistSchema;
5
+ exports.PoMcpSessionConfigSchema = require_mcpSession.PoMcpSessionConfigSchema;
6
+ exports.parsePoMcpSessionConfig = require_mcpSession.parsePoMcpSessionConfig;
7
+ exports.poMcpSessionEnvironment = require_mcpSession.poMcpSessionEnvironment;
8
+ exports.readPoMcpSessionConfig = require_mcpSession.readPoMcpSessionConfig;
9
+ exports.serializePoMcpSessionConfig = require_mcpSession.serializePoMcpSessionConfig;
@@ -1,2 +1,2 @@
1
- import { DOOM_MCP_SESSION_ENV_VAR, DoomMcpSessionAllowlist, DoomMcpSessionAllowlistSchema, DoomMcpSessionConfig, DoomMcpSessionConfigSchema, doomMcpSessionEnvironment, parseDoomMcpSessionConfig, readDoomMcpSessionConfig, serializeDoomMcpSessionConfig } from "./src/schemas/mcpSession.mjs";
2
- export { DOOM_MCP_SESSION_ENV_VAR, type DoomMcpSessionAllowlist, DoomMcpSessionAllowlistSchema, type DoomMcpSessionConfig, DoomMcpSessionConfigSchema, doomMcpSessionEnvironment, parseDoomMcpSessionConfig, readDoomMcpSessionConfig, serializeDoomMcpSessionConfig };
1
+ import { PO_MCP_SESSION_ENV_VAR, PoMcpSessionAllowlist, PoMcpSessionAllowlistSchema, PoMcpSessionConfig, PoMcpSessionConfigSchema, parsePoMcpSessionConfig, poMcpSessionEnvironment, readPoMcpSessionConfig, serializePoMcpSessionConfig } from "./src/schemas/mcpSession.mjs";
2
+ export { PO_MCP_SESSION_ENV_VAR, type PoMcpSessionAllowlist, PoMcpSessionAllowlistSchema, type PoMcpSessionConfig, PoMcpSessionConfigSchema, parsePoMcpSessionConfig, poMcpSessionEnvironment, readPoMcpSessionConfig, serializePoMcpSessionConfig };
@@ -1,2 +1 @@
1
- import { DOOM_MCP_SESSION_ENV_VAR, DoomMcpSessionAllowlistSchema, DoomMcpSessionConfigSchema, doomMcpSessionEnvironment, parseDoomMcpSessionConfig, readDoomMcpSessionConfig, serializeDoomMcpSessionConfig } from "./src/schemas/mcpSession.mjs";
2
- export { DOOM_MCP_SESSION_ENV_VAR, DoomMcpSessionAllowlistSchema, DoomMcpSessionConfigSchema, doomMcpSessionEnvironment, parseDoomMcpSessionConfig, readDoomMcpSessionConfig, serializeDoomMcpSessionConfig };
1
+ export { PO_MCP_SESSION_ENV_VAR, PoMcpSessionAllowlistSchema, PoMcpSessionConfigSchema, parsePoMcpSessionConfig, poMcpSessionEnvironment, readPoMcpSessionConfig, serializePoMcpSessionConfig } from "./src/schemas/mcpSession.mjs";
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_mcpStatus = require("./src/schemas/mcpStatus.cjs");
3
- exports.DOOM_MCP_STATUS_SERVICE = require_mcpStatus.DOOM_MCP_STATUS_SERVICE;
4
3
  exports.McpServerSnapshotSchema = require_mcpStatus.McpServerSnapshotSchema;
5
4
  exports.McpServerStateSchema = require_mcpStatus.McpServerStateSchema;
6
5
  exports.McpStatusSnapshotSchema = require_mcpStatus.McpStatusSnapshotSchema;
7
- exports.readDoomMcpStatus = require_mcpStatus.readDoomMcpStatus;
6
+ exports.PO_MCP_STATUS_SERVICE = require_mcpStatus.PO_MCP_STATUS_SERVICE;
7
+ exports.readPoMcpStatus = require_mcpStatus.readPoMcpStatus;
@@ -1,2 +1,2 @@
1
- import { DOOM_MCP_STATUS_SERVICE, DoomMcpStatusService, McpServerSnapshot, McpServerSnapshotSchema, McpServerState, McpServerStateSchema, McpStatusSnapshot, McpStatusSnapshotSchema, readDoomMcpStatus } from "./src/schemas/mcpStatus.mjs";
2
- export { DOOM_MCP_STATUS_SERVICE, type DoomMcpStatusService, type McpServerSnapshot, McpServerSnapshotSchema, type McpServerState, McpServerStateSchema, type McpStatusSnapshot, McpStatusSnapshotSchema, readDoomMcpStatus };
1
+ import { McpServerSnapshot, McpServerSnapshotSchema, McpServerState, McpServerStateSchema, McpStatusSnapshot, McpStatusSnapshotSchema, PO_MCP_STATUS_SERVICE, PoMcpStatusService, readPoMcpStatus } from "./src/schemas/mcpStatus.mjs";
2
+ export { type McpServerSnapshot, McpServerSnapshotSchema, type McpServerState, McpServerStateSchema, type McpStatusSnapshot, McpStatusSnapshotSchema, PO_MCP_STATUS_SERVICE, type PoMcpStatusService, readPoMcpStatus };
@@ -1,2 +1 @@
1
- import { DOOM_MCP_STATUS_SERVICE, McpServerSnapshotSchema, McpServerStateSchema, McpStatusSnapshotSchema, readDoomMcpStatus } from "./src/schemas/mcpStatus.mjs";
2
- export { DOOM_MCP_STATUS_SERVICE, McpServerSnapshotSchema, McpServerStateSchema, McpStatusSnapshotSchema, readDoomMcpStatus };
1
+ export { McpServerSnapshotSchema, McpServerStateSchema, McpStatusSnapshotSchema, PO_MCP_STATUS_SERVICE, readPoMcpStatus } from "./src/schemas/mcpStatus.mjs";
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_mcpToolResolver = require("./src/schemas/mcpToolResolver.cjs");
3
- exports.DOOM_MCP_TOOL_RESOLVER_SERVICE = require_mcpToolResolver.DOOM_MCP_TOOL_RESOLVER_SERVICE;
4
- exports.readDoomMcpToolResolver = require_mcpToolResolver.readDoomMcpToolResolver;
5
- exports.requireDoomMcpToolResolver = require_mcpToolResolver.requireDoomMcpToolResolver;
3
+ exports.PO_MCP_TOOL_RESOLVER_SERVICE = require_mcpToolResolver.PO_MCP_TOOL_RESOLVER_SERVICE;
4
+ exports.readPoMcpToolResolver = require_mcpToolResolver.readPoMcpToolResolver;
5
+ exports.requirePoMcpToolResolver = require_mcpToolResolver.requirePoMcpToolResolver;
@@ -1,2 +1,2 @@
1
- import { DOOM_MCP_TOOL_RESOLVER_SERVICE, DoomMcpResolvedToolSelection, DoomMcpToolResolverService, readDoomMcpToolResolver, requireDoomMcpToolResolver } from "./src/schemas/mcpToolResolver.mjs";
2
- export { DOOM_MCP_TOOL_RESOLVER_SERVICE, type DoomMcpResolvedToolSelection, type DoomMcpToolResolverService, readDoomMcpToolResolver, requireDoomMcpToolResolver };
1
+ import { PO_MCP_TOOL_RESOLVER_SERVICE, PoMcpResolvedToolSelection, PoMcpToolResolverService, readPoMcpToolResolver, requirePoMcpToolResolver } from "./src/schemas/mcpToolResolver.mjs";
2
+ export { PO_MCP_TOOL_RESOLVER_SERVICE, type PoMcpResolvedToolSelection, type PoMcpToolResolverService, readPoMcpToolResolver, requirePoMcpToolResolver };
@@ -1,2 +1 @@
1
- import { DOOM_MCP_TOOL_RESOLVER_SERVICE, readDoomMcpToolResolver, requireDoomMcpToolResolver } from "./src/schemas/mcpToolResolver.mjs";
2
- export { DOOM_MCP_TOOL_RESOLVER_SERVICE, readDoomMcpToolResolver, requireDoomMcpToolResolver };
1
+ export { PO_MCP_TOOL_RESOLVER_SERVICE, readPoMcpToolResolver, requirePoMcpToolResolver } from "./src/schemas/mcpToolResolver.mjs";
@@ -1,2 +1,2 @@
1
- import { DoomMcpWidgetProps } from "./src/web/types/mcpWidget.mjs";
2
- export type { DoomMcpWidgetProps };
1
+ import { PoMcpWidgetProps } from "./src/web/types/mcpWidget.mjs";
2
+ export type { PoMcpWidgetProps };
@@ -1,6 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
3
- const require_runtimePiSettings = require("./runtimePiSettings.cjs");
3
+ const require_core = require("./src/services/piSettings/core.cjs");
4
+ require("./runtimePiSettings.cjs");
5
+ const require_index = require("./src/services/testMode/index.cjs");
4
6
  let node_fs = require("node:fs");
5
7
  node_fs = require_runtime.__toESM(node_fs, 1);
6
8
  let node_path = require("node:path");
@@ -126,6 +128,24 @@ function packageEntry(name, origin = require("url").pathToFileURL(__filename).hr
126
128
  if (!entry) throw new Error(`Cannot resolve package entry ${name} from ${origin}`);
127
129
  return node_fs.default.realpathSync(entry);
128
130
  }
131
+ /**
132
+ * The entry a module running from a Po checkout finds in that checkout's own closure.
133
+ * A checkout package is never an implicit override for a consumer, so callers try
134
+ * the consumer first and use this only as the last resort.
135
+ */
136
+ function checkoutPackageEntry(name, origin) {
137
+ const from = node_path.default.dirname((0, node_url.fileURLToPath)(origin));
138
+ if (!runsFromCheckout(from)) return void 0;
139
+ const entry = packageRootEntry(name, from, findInstalledPackage(splitPackageSpecifier(name).name, from));
140
+ return entry === void 0 ? void 0 : node_fs.default.realpathSync(entry);
141
+ }
142
+ /** Whether the package that owns this directory is a package of a Po source checkout. */
143
+ function runsFromCheckout(directory) {
144
+ for (let current = directory;; current = node_path.default.dirname(current)) {
145
+ if (node_fs.default.existsSync(node_path.default.join(current, PACKAGE_MANIFEST))) return require_index.isCheckoutPoPackage(current);
146
+ if (node_path.default.dirname(current) === current) return false;
147
+ }
148
+ }
129
149
  /** Same as packageEntry, but returns undefined when the package is absent. */
130
150
  function optionalPackageEntry(name, origin = require("url").pathToFileURL(__filename).href) {
131
151
  try {
@@ -184,12 +204,20 @@ function findInstalledPackage(name, consumerRoot) {
184
204
  directory = parent;
185
205
  }
186
206
  }
207
+ /** Checkout package overrides inherited by the web, server and sync children of `po --test`. */
208
+ function testPackageRoot(name, environment = process.env) {
209
+ if (environment.PO_TEST !== "1" || !environment.PO_TEST_PACKAGES) return void 0;
210
+ const packages = JSON.parse(environment.PO_TEST_PACKAGES);
211
+ if (!isRecord(packages)) throw new Error("PO_TEST_PACKAGES must be a package-to-directory map.");
212
+ const root = packages[name];
213
+ return typeof root === "string" ? root : void 0;
214
+ }
187
215
  /**
188
216
  * Finds a package Po installed into its shared runtime (`<po home>/runtime`),
189
217
  * without touching the consumer's own package manifest.
190
218
  */
191
219
  function findRuntimePackage(name, environment) {
192
- const candidate = node_path.default.join(require_runtimePiSettings.poRuntimeDirectory(void 0, environment), NODE_MODULES, name);
220
+ const candidate = node_path.default.join(require_core.poRuntimeDirectory(void 0, environment), NODE_MODULES, name);
193
221
  return node_fs.default.existsSync(node_path.default.join(candidate, PACKAGE_MANIFEST)) ? candidate : void 0;
194
222
  }
195
223
  /**
@@ -199,7 +227,7 @@ function findRuntimePackage(name, environment) {
199
227
  * counts.
200
228
  */
201
229
  function runtimePackageDeclared(name, environment) {
202
- const manifestPath = node_path.default.join(require_runtimePiSettings.poRuntimeDirectory(void 0, environment), PACKAGE_MANIFEST);
230
+ const manifestPath = node_path.default.join(require_core.poRuntimeDirectory(void 0, environment), PACKAGE_MANIFEST);
203
231
  if (!node_fs.default.existsSync(manifestPath)) return true;
204
232
  try {
205
233
  return name in (JSON.parse(node_fs.default.readFileSync(manifestPath, "utf8")).dependencies ?? {});
@@ -216,10 +244,12 @@ function runtimePackageDeclared(name, environment) {
216
244
  * their state split between them.
217
245
  */
218
246
  function findConsumerPackage(name, consumerRoot, environment) {
247
+ const local = testPackageRoot(name, environment);
248
+ if (local !== void 0) return local;
219
249
  const installed = findInstalledPackage(name, consumerRoot);
220
- if (installed) return installed;
250
+ if (installed && (environment.PO_TEST === "1" || !require_index.isCheckoutPoPackage(installed))) return installed;
221
251
  const runtime = findRuntimePackage(name, environment);
222
- return runtime && runtimePackageDeclared(name, environment) ? runtime : void 0;
252
+ return runtime && (environment.PO_TEST === "1" || !require_index.isCheckoutPoPackage(runtime)) && runtimePackageDeclared(name, environment) ? runtime : void 0;
223
253
  }
224
254
  /** Resolves every extension declared by a bare package's standard Pi manifest. */
225
255
  function packageEntries(specifier, origin = require("url").pathToFileURL(__filename).href) {
@@ -245,7 +275,7 @@ function optionalPackageEntries(specifier, origin = require("url").pathToFileURL
245
275
  * Resolves manifest entries from the consumer repository's dependency tree.
246
276
  *
247
277
  * The meta-package cannot resolve what the repository declares: under an
248
- * isolated node_modules layout Doom Pi only sees its own dependencies. Walking
278
+ * isolated node_modules layout Po Pi only sees its own dependencies. Walking
249
279
  * the consumer's module chain lets its package manifest answer first without
250
280
  * accidentally falling through to Po's dependency tree.
251
281
  */
@@ -266,9 +296,12 @@ function consumerPackageEntries(specifier, consumerRoot, environment = process.e
266
296
  * `environment` names the Po home whose shared runtime answers after the consumer's own tree.
267
297
  */
268
298
  function consumerPackageEntry(specifier, consumerRoot, environment = process.env) {
269
- const { name, subpath } = splitPackageSpecifier(specifier);
270
- const packageRoot = findConsumerPackage(name, consumerRoot, environment);
299
+ return packageRootEntry(specifier, consumerRoot, findConsumerPackage(splitPackageSpecifier(specifier).name, consumerRoot, environment));
300
+ }
301
+ /** One export or package-relative path of an already located package. */
302
+ function packageRootEntry(specifier, consumerRoot, packageRoot) {
271
303
  if (!packageRoot) return void 0;
304
+ const { subpath } = splitPackageSpecifier(specifier);
272
305
  if (subpath === ".") return localEntry(packageRoot, consumerRoot) ?? extensionIndexEntry(packageRoot);
273
306
  const manifestPath = node_path.default.join(packageRoot, PACKAGE_MANIFEST);
274
307
  const directTarget = node_path.default.join(packageRoot, subpath);
@@ -395,6 +428,7 @@ function piCliPath() {
395
428
  return node_path.default.join(node_path.default.dirname(packageEntry("@earendil-works/pi-coding-agent")), "cli.js");
396
429
  }
397
430
  //#endregion
431
+ exports.checkoutPackageEntry = checkoutPackageEntry;
398
432
  exports.consumerPackageEntries = consumerPackageEntries;
399
433
  exports.consumerPackageEntry = consumerPackageEntry;
400
434
  exports.localEntries = localEntries;
@@ -408,5 +442,6 @@ exports.packageEntries = packageEntries;
408
442
  exports.packageEntry = packageEntry;
409
443
  exports.piCliPath = piCliPath;
410
444
  exports.splitPackageSpecifier = splitPackageSpecifier;
445
+ exports.testPackageRoot = testPackageRoot;
411
446
 
412
447
  //# sourceMappingURL=moduleResolution.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"moduleResolution.cjs","names":["fs","path","fileURLToPath","poRuntimeDirectory"],"sources":["../src/services/moduleResolution/index.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport { minimatch } from 'minimatch';\n\nimport { poRuntimeDirectory } from '../piSettings';\n\nconst PACKAGE_MANIFEST = 'package.json';\nconst NODE_MODULES = 'node_modules';\nconst CURRENT_DIRECTORY_PREFIX = './';\nconst MANIFEST_PATTERN_PREFIXES = ['!', '+', '-'] as const;\nconst GLOB_CHARACTERS = /[*?[\\]{}()]/;\nconst EXTENSION_INDEX_NAMES = ['index.ts', 'index.js', 'index.mts', 'index.mjs', 'index.cts', 'index.cjs'] as const;\nconst EXTENSION_FILE_SUFFIXES = new Set(['.ts', '.js', '.mts', '.mjs', '.cts', '.cjs']);\n/** Import-side conditions, in the order Node prefers them for an ESM consumer. */\nconst IMPORT_CONDITIONS = ['import', 'module', 'node', 'default'] as const;\n\ninterface PackageManifest {\n name?: unknown;\n exports?: unknown;\n module?: unknown;\n main?: unknown;\n pi?: unknown;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction readPackageManifest(packageRoot: string): PackageManifest | undefined {\n try {\n const parsed: unknown = JSON.parse(fs.readFileSync(path.join(packageRoot, PACKAGE_MANIFEST), 'utf8'));\n return isRecord(parsed) ? parsed : undefined;\n } catch {\n // An unreadable manifest is equivalent to an absent package declaration;\n // the normal export resolver remains available as the compatibility path.\n return undefined;\n }\n}\n\nfunction manifestDeclaresExtensions(manifest: PackageManifest | undefined): boolean {\n return Boolean(manifest && isRecord(manifest.pi) && Object.hasOwn(manifest.pi, 'extensions'));\n}\n\nfunction isManifestPattern(entry: string): boolean {\n return MANIFEST_PATTERN_PREFIXES.some((prefix) => entry.startsWith(prefix));\n}\n\nfunction normalizedRelativePath(packageRoot: string, target: string): string {\n return path.relative(packageRoot, target).split(path.sep).join('/');\n}\n\nfunction matchesManifestPattern(target: string, pattern: string, packageRoot: string): boolean {\n const normalizedPattern = pattern.replaceAll('\\\\', '/').replace(/^\\.\\//, '');\n const relative = normalizedRelativePath(packageRoot, target);\n return (\n minimatch(relative, normalizedPattern) ||\n minimatch(path.basename(target), normalizedPattern) ||\n minimatch(target.split(path.sep).join('/'), normalizedPattern)\n );\n}\n\nfunction matchesExactManifestPath(target: string, pattern: string, packageRoot: string): boolean {\n const normalizedPattern = pattern.replaceAll('\\\\', '/').replace(/^\\.\\//, '');\n return (\n normalizedRelativePath(packageRoot, target) === normalizedPattern ||\n target.split(path.sep).join('/') === normalizedPattern\n );\n}\n\nfunction extensionIndexEntry(directory: string): string | undefined {\n for (const indexName of EXTENSION_INDEX_NAMES) {\n const candidate = path.join(directory, indexName);\n if (fs.existsSync(candidate)) return candidate;\n }\n return undefined;\n}\n\nfunction extensionFilesAt(target: string): string[] {\n let stats: fs.Stats;\n try {\n stats = fs.statSync(target);\n } catch {\n return [];\n }\n if (stats.isFile()) return [target];\n if (!stats.isDirectory()) return [];\n\n const files: string[] = [];\n for (const entry of fs\n .readdirSync(target, { withFileTypes: true })\n .sort((left, right) => left.name.localeCompare(right.name))) {\n const entryPath = path.join(target, entry.name);\n if ((entry.isFile() || entry.isSymbolicLink()) && EXTENSION_FILE_SUFFIXES.has(path.extname(entry.name))) {\n files.push(entryPath);\n continue;\n }\n if (!entry.isDirectory() && !entry.isSymbolicLink()) continue;\n const indexEntry = extensionIndexEntry(entryPath);\n if (indexEntry) files.push(indexEntry);\n }\n return files;\n}\n\n/** Resolves the standard package.json pi.extensions declaration exactly as a layer contribution. */\nfunction manifestExtensionEntries(\n packageRoot: string,\n manifest: PackageManifest | undefined,\n packageName: string,\n): string[] | undefined {\n if (!manifestDeclaresExtensions(manifest) || !isRecord(manifest?.pi)) return undefined;\n const configured = manifest.pi.extensions;\n if (!Array.isArray(configured) || !configured.every((entry) => typeof entry === 'string')) {\n throw new Error(`${packageName} package.json pi.extensions must be an array of strings.`);\n }\n\n const allPaths: string[] = [];\n for (const configuredEntry of configured.filter((entry) => !isManifestPattern(entry))) {\n const candidates = GLOB_CHARACTERS.test(configuredEntry)\n ? fs.globSync(configuredEntry, { cwd: packageRoot }).sort()\n : [configuredEntry];\n for (const candidate of candidates) {\n for (const target of extensionFilesAt(path.resolve(packageRoot, candidate))) {\n if (!allPaths.includes(target)) allPaths.push(target);\n }\n }\n }\n\n const excluded = configured.filter((entry) => entry.startsWith('!')).map((entry) => entry.slice(1));\n const forceIncluded = configured.filter((entry) => entry.startsWith('+')).map((entry) => entry.slice(1));\n const forceExcluded = configured.filter((entry) => entry.startsWith('-')).map((entry) => entry.slice(1));\n const selected = allPaths.filter(\n (target) => !excluded.some((pattern) => matchesManifestPattern(target, pattern, packageRoot)),\n );\n for (const target of allPaths) {\n if (\n !selected.includes(target) &&\n forceIncluded.some((pattern) => matchesExactManifestPath(target, pattern, packageRoot))\n ) {\n selected.push(target);\n }\n }\n const filtered = selected.filter(\n (target) => !forceExcluded.some((pattern) => matchesExactManifestPath(target, pattern, packageRoot)),\n );\n return filtered.length > 0 ? filtered : undefined;\n}\n\n/**\n * Resolves the on-disk entry point of an installed package.\n *\n * Pi loads extensions by absolute path, so anything contributed as an\n * extension has to be resolved to a file before it can be passed along.\n */\nexport function packageEntry(name: string, origin: string = import.meta.url): string {\n const entry = consumerPackageEntry(name, path.dirname(fileURLToPath(origin)));\n if (!entry) throw new Error(`Cannot resolve package entry ${name} from ${origin}`);\n return fs.realpathSync(entry);\n}\n\n/** Same as packageEntry, but returns undefined when the package is absent. */\nexport function optionalPackageEntry(name: string, origin: string = import.meta.url): string | undefined {\n try {\n return packageEntry(name, origin);\n } catch {\n return undefined;\n }\n}\n\n/**\n * Splits `@scope/name/sub/path` into the package name and its export subpath.\n *\n * A scoped name owns two segments, an unscoped name one. Everything after that\n * is the subpath the package's own `exports` map has to answer for.\n */\nexport function splitPackageSpecifier(specifier: string): { name: string; subpath: string } {\n const segments = specifier.split('/');\n const nameSegments = specifier.startsWith('@') ? 2 : 1;\n const name = segments.slice(0, nameSegments).join('/');\n const rest = segments.slice(nameSegments).join('/');\n return { name, subpath: rest ? `${CURRENT_DIRECTORY_PREFIX}${rest}` : '.' };\n}\n\n/** Picks the import-side target out of one `exports` entry. */\nfunction selectImportTarget(value: unknown): string | undefined {\n if (typeof value === 'string') return value;\n if (Array.isArray(value)) {\n for (const candidate of value) {\n const target = selectImportTarget(candidate);\n if (target) return target;\n }\n return undefined;\n }\n if (typeof value !== 'object' || value === null) return undefined;\n const conditions = value as Record<string, unknown>;\n for (const condition of IMPORT_CONDITIONS) {\n if (condition in conditions) {\n const target = selectImportTarget(conditions[condition]);\n if (target) return target;\n }\n }\n return undefined;\n}\n\n/**\n * Finds an installed package directory by walking the consumer's module chain.\n *\n * Node's own lookup order, so a workspace link in the repository root is found\n * exactly where the repository installed it, and nothing outside that chain can\n * answer for a specifier the repository declared.\n */\nfunction findInstalledPackage(name: string, consumerRoot: string): string | undefined {\n let directory = path.resolve(consumerRoot);\n while (true) {\n const candidate = path.join(directory, NODE_MODULES, name);\n if (fs.existsSync(path.join(candidate, PACKAGE_MANIFEST))) return candidate;\n const parent = path.dirname(directory);\n if (parent === directory) return undefined;\n directory = parent;\n }\n}\n\n/** The environment a lookup runs for; it names the Po home, and so the shared runtime. */\ntype LookupEnvironment = Readonly<Record<string, string | undefined>>;\n\n/**\n * Finds a package Po installed into its shared runtime (`<po home>/runtime`),\n * without touching the consumer's own package manifest.\n */\nfunction findRuntimePackage(name: string, environment: LookupEnvironment): string | undefined {\n const candidate = path.join(poRuntimeDirectory(undefined, environment), NODE_MODULES, name);\n return fs.existsSync(path.join(candidate, PACKAGE_MANIFEST)) ? candidate : undefined;\n}\n\n/**\n * Whether a Po root asked for this package, rather than it arriving\n * transitively. The runtime's manifest is that list, shared by every root; a\n * runtime without one has nothing to check against and every package in it\n * counts.\n */\nfunction runtimePackageDeclared(name: string, environment: LookupEnvironment): boolean {\n const manifestPath = path.join(poRuntimeDirectory(undefined, environment), PACKAGE_MANIFEST);\n if (!fs.existsSync(manifestPath)) return true;\n try {\n const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8')) as { dependencies?: Record<string, unknown> };\n return name in (manifest.dependencies ?? {});\n } catch {\n // An unreadable manifest declares nothing, so the runtime answers for nothing.\n return false;\n }\n}\n\n/**\n * The consumer's own dependency tree answers first, then the packages a Po\n * root asked the shared runtime for. A package that merely arrived in the\n * runtime as a dependency of one of those (po-config beneath a layer package,\n * say) is not the answer: declining lets the caller's fallback resolve it from\n * Po's own tree, so one session never loads two copies of a core package with\n * their state split between them.\n */\nfunction findConsumerPackage(name: string, consumerRoot: string, environment: LookupEnvironment): string | undefined {\n const installed = findInstalledPackage(name, consumerRoot);\n if (installed) return installed;\n const runtime = findRuntimePackage(name, environment);\n return runtime && runtimePackageDeclared(name, environment) ? runtime : undefined;\n}\n\n/** Resolves every extension declared by a bare package's standard Pi manifest. */\nexport function packageEntries(specifier: string, origin: string = import.meta.url): string[] {\n const { name, subpath } = splitPackageSpecifier(specifier);\n if (subpath !== '.') return [packageEntry(specifier, origin)];\n\n const packageRoot = findInstalledPackage(name, path.dirname(fileURLToPath(origin)));\n if (!packageRoot) throw new Error(`Cannot resolve package ${name}.`);\n const manifest = readPackageManifest(packageRoot);\n if (!manifestDeclaresExtensions(manifest)) {\n throw new Error(`${name} package.json does not declare pi.extensions.`);\n }\n const manifestEntries = manifestExtensionEntries(packageRoot, manifest, name);\n if (!manifestEntries?.length) throw new Error(`${name} package.json pi.extensions resolves no extension files.`);\n return manifestEntries;\n}\n\n/** Same as packageEntries, but returns undefined when the package is absent. */\nexport function optionalPackageEntries(specifier: string, origin: string = import.meta.url): string[] | undefined {\n try {\n return packageEntries(specifier, origin);\n } catch {\n return undefined;\n }\n}\n\n/**\n * Resolves manifest entries from the consumer repository's dependency tree.\n *\n * The meta-package cannot resolve what the repository declares: under an\n * isolated node_modules layout Doom Pi only sees its own dependencies. Walking\n * the consumer's module chain lets its package manifest answer first without\n * accidentally falling through to Po's dependency tree.\n */\nexport function consumerPackageEntries(\n specifier: string,\n consumerRoot: string,\n environment: LookupEnvironment = process.env,\n): string[] | undefined {\n const { name, subpath } = splitPackageSpecifier(specifier);\n const packageRoot = findConsumerPackage(name, consumerRoot, environment);\n if (!packageRoot) return undefined;\n if (subpath === '.') {\n const manifest = readPackageManifest(packageRoot);\n if (!manifestDeclaresExtensions(manifest)) return [];\n return manifestExtensionEntries(packageRoot, manifest, name) ?? [];\n }\n const entry = consumerPackageEntry(specifier, consumerRoot, environment);\n return entry ? [entry] : [];\n}\n\n/**\n * Resolves one explicit package export or direct package-relative path from the consumer.\n * `environment` names the Po home whose shared runtime answers after the consumer's own tree.\n */\nexport function consumerPackageEntry(\n specifier: string,\n consumerRoot: string,\n environment: LookupEnvironment = process.env,\n): string | undefined {\n const { name, subpath } = splitPackageSpecifier(specifier);\n const packageRoot = findConsumerPackage(name, consumerRoot, environment);\n if (!packageRoot) return undefined;\n\n if (subpath === '.') return localEntry(packageRoot, consumerRoot) ?? extensionIndexEntry(packageRoot);\n\n const manifestPath = path.join(packageRoot, PACKAGE_MANIFEST);\n // A relative subpath that the package does not export is still loadable by\n // path, which is how layers point at a file inside a package (`.../index.ts`).\n const directTarget = path.join(packageRoot, subpath);\n let manifest: { exports?: unknown };\n try {\n manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8')) as { exports?: unknown };\n } catch {\n return fs.existsSync(directTarget) ? directTarget : undefined;\n }\n\n const exports = manifest.exports;\n if (exports !== undefined && exports !== null) {\n const entry =\n typeof exports === 'object' && !Array.isArray(exports)\n ? (exports as Record<string, unknown>)[subpath]\n : undefined;\n const target = selectImportTarget(entry);\n if (target) {\n const resolved = path.join(packageRoot, target);\n if (fs.existsSync(resolved)) return resolved;\n }\n }\n\n return fs.existsSync(directTarget) ? directTarget : undefined;\n}\n\n/** Resolves one exports subpath from a path-style package directory. */\nexport function localPackageExport(specifier: string, baseDirectory: string, subpath: string): string | undefined {\n const packageRoot = path.resolve(baseDirectory, specifier);\n const manifest = readPackageManifest(packageRoot);\n const exports = manifest?.exports;\n if (exports === undefined || exports === null) return undefined;\n const target = selectImportTarget(isRecord(exports) ? exports[subpath] : undefined);\n if (!target) return undefined;\n const resolved = path.join(packageRoot, target);\n return fs.existsSync(resolved) ? resolved : undefined;\n}\n\n/** Manifest fields consulted when a local package declares no `exports`. */\nconst MAIN_FIELDS = ['module', 'main'] as const;\n\n/**\n * Returns the canonical name of a path-style package directory.\n *\n * A direct file is intentionally anonymous: treating the repository manifest\n * above it as the file's identity would collapse every local extension in that\n * repository. Only a directory with its own named manifest represents a package\n * that can replace another installed version by logical identity.\n */\nexport function localPackageName(specifier: string, baseDirectory: string): string | undefined {\n const target = path.resolve(baseDirectory, specifier);\n try {\n if (!fs.statSync(target).isDirectory()) return undefined;\n const manifest = JSON.parse(fs.readFileSync(path.join(target, PACKAGE_MANIFEST), 'utf8')) as {\n name?: unknown;\n };\n return typeof manifest.name === 'string' && manifest.name.trim() ? manifest.name.trim() : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Resolves Pi extension entries from a local file, extension directory, or package.\n *\n * A file is taken as the extension entry as written. A package directory uses\n * its native `pi.extensions` declaration or legacy root entry. A plain directory\n * follows Pi's extension discovery convention for scripts and child `index`\n * modules. This lets unpublished extensions live in the repository, or beside\n * the global config in `~/.po`, and still load in deterministic order.\n */\nexport function localEntries(specifier: string, baseDirectory: string): string[] | undefined {\n const target = path.resolve(baseDirectory, specifier);\n let stats: fs.Stats;\n try {\n stats = fs.statSync(target);\n } catch {\n return undefined;\n }\n if (stats.isFile()) return [target];\n if (!stats.isDirectory()) return undefined;\n\n const manifest = readPackageManifest(target);\n const manifestEntries = manifestExtensionEntries(\n target,\n manifest,\n localPackageName(specifier, baseDirectory) ?? target,\n );\n if (manifestEntries !== undefined) return manifestEntries;\n const entry = localEntry(specifier, baseDirectory);\n return entry ? [entry] : extensionFilesAt(target);\n}\n\n/**\n * Resolves a local package selection through its standard Pi manifest.\n * Direct files and extension directories remain valid explicit local paths.\n */\nexport function localPackageEntries(specifier: string, baseDirectory: string): string[] | undefined {\n const target = path.resolve(baseDirectory, specifier);\n let stats: fs.Stats;\n try {\n stats = fs.statSync(target);\n } catch {\n return undefined;\n }\n if (stats.isFile()) return [target];\n if (!stats.isDirectory()) return undefined;\n\n const manifestPath = path.join(target, PACKAGE_MANIFEST);\n if (!fs.existsSync(manifestPath)) return extensionFilesAt(target);\n const manifest = readPackageManifest(target);\n if (!manifestDeclaresExtensions(manifest)) return [];\n return manifestExtensionEntries(target, manifest, localPackageName(specifier, baseDirectory) ?? target) ?? [];\n}\n\n/** Resolves the legacy single entry from a local package's exports, module, or main field. */\nexport function localEntry(specifier: string, baseDirectory: string): string | undefined {\n const target = path.resolve(baseDirectory, specifier);\n let isDirectory: boolean;\n try {\n const stats = fs.statSync(target);\n if (stats.isFile()) return target;\n isDirectory = stats.isDirectory();\n } catch {\n return undefined;\n }\n if (!isDirectory) return undefined;\n\n let manifest: { exports?: unknown; module?: unknown; main?: unknown };\n try {\n manifest = JSON.parse(fs.readFileSync(path.join(target, PACKAGE_MANIFEST), 'utf8')) as typeof manifest;\n } catch {\n return undefined;\n }\n\n const exports = manifest.exports;\n const rootExport =\n typeof exports === 'object' && exports !== null && !Array.isArray(exports)\n ? ((exports as Record<string, unknown>)['.'] ?? exports)\n : exports;\n const candidates = [selectImportTarget(rootExport)];\n for (const field of MAIN_FIELDS) {\n if (typeof manifest[field] === 'string') candidates.push(manifest[field]);\n }\n\n for (const candidate of candidates) {\n if (!candidate) continue;\n const resolved = path.join(target, candidate);\n if (fs.existsSync(resolved)) return resolved;\n }\n return extensionIndexEntry(target);\n}\n\n/** Path to Pi's own CLI, which the launch command spawns. */\nexport function piCliPath(): string {\n return path.join(path.dirname(packageEntry('@earendil-works/pi-coding-agent')), 'cli.js');\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"moduleResolution.cjs","names":["fs","path","fileURLToPath","isCheckoutPoPackage","poRuntimeDirectory"],"sources":["../src/services/moduleResolution/index.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport { minimatch } from 'minimatch';\n\nimport { poRuntimeDirectory } from '../piSettings';\nimport { isCheckoutPoPackage } from '../testMode';\n\nconst PACKAGE_MANIFEST = 'package.json';\nconst NODE_MODULES = 'node_modules';\nconst CURRENT_DIRECTORY_PREFIX = './';\nconst MANIFEST_PATTERN_PREFIXES = ['!', '+', '-'] as const;\nconst GLOB_CHARACTERS = /[*?[\\]{}()]/;\nconst EXTENSION_INDEX_NAMES = ['index.ts', 'index.js', 'index.mts', 'index.mjs', 'index.cts', 'index.cjs'] as const;\nconst EXTENSION_FILE_SUFFIXES = new Set(['.ts', '.js', '.mts', '.mjs', '.cts', '.cjs']);\n/** Import-side conditions, in the order Node prefers them for an ESM consumer. */\nconst IMPORT_CONDITIONS = ['import', 'module', 'node', 'default'] as const;\n\ninterface PackageManifest {\n name?: unknown;\n exports?: unknown;\n module?: unknown;\n main?: unknown;\n pi?: unknown;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction readPackageManifest(packageRoot: string): PackageManifest | undefined {\n try {\n const parsed: unknown = JSON.parse(fs.readFileSync(path.join(packageRoot, PACKAGE_MANIFEST), 'utf8'));\n return isRecord(parsed) ? parsed : undefined;\n } catch {\n // An unreadable manifest is equivalent to an absent package declaration;\n // the normal export resolver remains available as the compatibility path.\n return undefined;\n }\n}\n\nfunction manifestDeclaresExtensions(manifest: PackageManifest | undefined): boolean {\n return Boolean(manifest && isRecord(manifest.pi) && Object.hasOwn(manifest.pi, 'extensions'));\n}\n\nfunction isManifestPattern(entry: string): boolean {\n return MANIFEST_PATTERN_PREFIXES.some((prefix) => entry.startsWith(prefix));\n}\n\nfunction normalizedRelativePath(packageRoot: string, target: string): string {\n return path.relative(packageRoot, target).split(path.sep).join('/');\n}\n\nfunction matchesManifestPattern(target: string, pattern: string, packageRoot: string): boolean {\n const normalizedPattern = pattern.replaceAll('\\\\', '/').replace(/^\\.\\//, '');\n const relative = normalizedRelativePath(packageRoot, target);\n return (\n minimatch(relative, normalizedPattern) ||\n minimatch(path.basename(target), normalizedPattern) ||\n minimatch(target.split(path.sep).join('/'), normalizedPattern)\n );\n}\n\nfunction matchesExactManifestPath(target: string, pattern: string, packageRoot: string): boolean {\n const normalizedPattern = pattern.replaceAll('\\\\', '/').replace(/^\\.\\//, '');\n return (\n normalizedRelativePath(packageRoot, target) === normalizedPattern ||\n target.split(path.sep).join('/') === normalizedPattern\n );\n}\n\nfunction extensionIndexEntry(directory: string): string | undefined {\n for (const indexName of EXTENSION_INDEX_NAMES) {\n const candidate = path.join(directory, indexName);\n if (fs.existsSync(candidate)) return candidate;\n }\n return undefined;\n}\n\nfunction extensionFilesAt(target: string): string[] {\n let stats: fs.Stats;\n try {\n stats = fs.statSync(target);\n } catch {\n return [];\n }\n if (stats.isFile()) return [target];\n if (!stats.isDirectory()) return [];\n\n const files: string[] = [];\n for (const entry of fs\n .readdirSync(target, { withFileTypes: true })\n .sort((left, right) => left.name.localeCompare(right.name))) {\n const entryPath = path.join(target, entry.name);\n if ((entry.isFile() || entry.isSymbolicLink()) && EXTENSION_FILE_SUFFIXES.has(path.extname(entry.name))) {\n files.push(entryPath);\n continue;\n }\n if (!entry.isDirectory() && !entry.isSymbolicLink()) continue;\n const indexEntry = extensionIndexEntry(entryPath);\n if (indexEntry) files.push(indexEntry);\n }\n return files;\n}\n\n/** Resolves the standard package.json pi.extensions declaration exactly as a layer contribution. */\nfunction manifestExtensionEntries(\n packageRoot: string,\n manifest: PackageManifest | undefined,\n packageName: string,\n): string[] | undefined {\n if (!manifestDeclaresExtensions(manifest) || !isRecord(manifest?.pi)) return undefined;\n const configured = manifest.pi.extensions;\n if (!Array.isArray(configured) || !configured.every((entry) => typeof entry === 'string')) {\n throw new Error(`${packageName} package.json pi.extensions must be an array of strings.`);\n }\n\n const allPaths: string[] = [];\n for (const configuredEntry of configured.filter((entry) => !isManifestPattern(entry))) {\n const candidates = GLOB_CHARACTERS.test(configuredEntry)\n ? fs.globSync(configuredEntry, { cwd: packageRoot }).sort()\n : [configuredEntry];\n for (const candidate of candidates) {\n for (const target of extensionFilesAt(path.resolve(packageRoot, candidate))) {\n if (!allPaths.includes(target)) allPaths.push(target);\n }\n }\n }\n\n const excluded = configured.filter((entry) => entry.startsWith('!')).map((entry) => entry.slice(1));\n const forceIncluded = configured.filter((entry) => entry.startsWith('+')).map((entry) => entry.slice(1));\n const forceExcluded = configured.filter((entry) => entry.startsWith('-')).map((entry) => entry.slice(1));\n const selected = allPaths.filter(\n (target) => !excluded.some((pattern) => matchesManifestPattern(target, pattern, packageRoot)),\n );\n for (const target of allPaths) {\n if (\n !selected.includes(target) &&\n forceIncluded.some((pattern) => matchesExactManifestPath(target, pattern, packageRoot))\n ) {\n selected.push(target);\n }\n }\n const filtered = selected.filter(\n (target) => !forceExcluded.some((pattern) => matchesExactManifestPath(target, pattern, packageRoot)),\n );\n return filtered.length > 0 ? filtered : undefined;\n}\n\n/**\n * Resolves the on-disk entry point of an installed package.\n *\n * Pi loads extensions by absolute path, so anything contributed as an\n * extension has to be resolved to a file before it can be passed along.\n */\nexport function packageEntry(name: string, origin: string = import.meta.url): string {\n const from = path.dirname(fileURLToPath(origin));\n const entry = consumerPackageEntry(name, from);\n if (!entry) throw new Error(`Cannot resolve package entry ${name} from ${origin}`);\n return fs.realpathSync(entry);\n}\n\n/**\n * The entry a module running from a Po checkout finds in that checkout's own closure.\n * A checkout package is never an implicit override for a consumer, so callers try\n * the consumer first and use this only as the last resort.\n */\nexport function checkoutPackageEntry(name: string, origin: string): string | undefined {\n const from = path.dirname(fileURLToPath(origin));\n if (!runsFromCheckout(from)) return undefined;\n const entry = packageRootEntry(name, from, findInstalledPackage(splitPackageSpecifier(name).name, from));\n return entry === undefined ? undefined : fs.realpathSync(entry);\n}\n\n/** Whether the package that owns this directory is a package of a Po source checkout. */\nfunction runsFromCheckout(directory: string): boolean {\n for (let current = directory; ; current = path.dirname(current)) {\n if (fs.existsSync(path.join(current, PACKAGE_MANIFEST))) return isCheckoutPoPackage(current);\n if (path.dirname(current) === current) return false;\n }\n}\n\n/** Same as packageEntry, but returns undefined when the package is absent. */\nexport function optionalPackageEntry(name: string, origin: string = import.meta.url): string | undefined {\n try {\n return packageEntry(name, origin);\n } catch {\n return undefined;\n }\n}\n\n/**\n * Splits `@scope/name/sub/path` into the package name and its export subpath.\n *\n * A scoped name owns two segments, an unscoped name one. Everything after that\n * is the subpath the package's own `exports` map has to answer for.\n */\nexport function splitPackageSpecifier(specifier: string): { name: string; subpath: string } {\n const segments = specifier.split('/');\n const nameSegments = specifier.startsWith('@') ? 2 : 1;\n const name = segments.slice(0, nameSegments).join('/');\n const rest = segments.slice(nameSegments).join('/');\n return { name, subpath: rest ? `${CURRENT_DIRECTORY_PREFIX}${rest}` : '.' };\n}\n\n/** Picks the import-side target out of one `exports` entry. */\nfunction selectImportTarget(value: unknown): string | undefined {\n if (typeof value === 'string') return value;\n if (Array.isArray(value)) {\n for (const candidate of value) {\n const target = selectImportTarget(candidate);\n if (target) return target;\n }\n return undefined;\n }\n if (typeof value !== 'object' || value === null) return undefined;\n const conditions = value as Record<string, unknown>;\n for (const condition of IMPORT_CONDITIONS) {\n if (condition in conditions) {\n const target = selectImportTarget(conditions[condition]);\n if (target) return target;\n }\n }\n return undefined;\n}\n\n/**\n * Finds an installed package directory by walking the consumer's module chain.\n *\n * Node's own lookup order, so a workspace link in the repository root is found\n * exactly where the repository installed it, and nothing outside that chain can\n * answer for a specifier the repository declared.\n */\nfunction findInstalledPackage(name: string, consumerRoot: string): string | undefined {\n let directory = path.resolve(consumerRoot);\n while (true) {\n const candidate = path.join(directory, NODE_MODULES, name);\n if (fs.existsSync(path.join(candidate, PACKAGE_MANIFEST))) return candidate;\n const parent = path.dirname(directory);\n if (parent === directory) return undefined;\n directory = parent;\n }\n}\n\n/** The environment a lookup runs for; it names the Po home, and so the shared runtime. */\ntype LookupEnvironment = Readonly<Record<string, string | undefined>>;\n\n/** Checkout package overrides inherited by the web, server and sync children of `po --test`. */\nexport function testPackageRoot(name: string, environment: LookupEnvironment = process.env): string | undefined {\n if (environment.PO_TEST !== '1' || !environment.PO_TEST_PACKAGES) return undefined;\n const packages: unknown = JSON.parse(environment.PO_TEST_PACKAGES);\n if (!isRecord(packages)) throw new Error('PO_TEST_PACKAGES must be a package-to-directory map.');\n const root = packages[name];\n return typeof root === 'string' ? root : undefined;\n}\n\n/**\n * Finds a package Po installed into its shared runtime (`<po home>/runtime`),\n * without touching the consumer's own package manifest.\n */\nfunction findRuntimePackage(name: string, environment: LookupEnvironment): string | undefined {\n const candidate = path.join(poRuntimeDirectory(undefined, environment), NODE_MODULES, name);\n return fs.existsSync(path.join(candidate, PACKAGE_MANIFEST)) ? candidate : undefined;\n}\n\n/**\n * Whether a Po root asked for this package, rather than it arriving\n * transitively. The runtime's manifest is that list, shared by every root; a\n * runtime without one has nothing to check against and every package in it\n * counts.\n */\nfunction runtimePackageDeclared(name: string, environment: LookupEnvironment): boolean {\n const manifestPath = path.join(poRuntimeDirectory(undefined, environment), PACKAGE_MANIFEST);\n if (!fs.existsSync(manifestPath)) return true;\n try {\n const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8')) as { dependencies?: Record<string, unknown> };\n return name in (manifest.dependencies ?? {});\n } catch {\n // An unreadable manifest declares nothing, so the runtime answers for nothing.\n return false;\n }\n}\n\n/**\n * The consumer's own dependency tree answers first, then the packages a Po\n * root asked the shared runtime for. A package that merely arrived in the\n * runtime as a dependency of one of those (po-config beneath a layer package,\n * say) is not the answer: declining lets the caller's fallback resolve it from\n * Po's own tree, so one session never loads two copies of a core package with\n * their state split between them.\n */\nfunction findConsumerPackage(name: string, consumerRoot: string, environment: LookupEnvironment): string | undefined {\n const local = testPackageRoot(name, environment);\n if (local !== undefined) return local;\n const installed = findInstalledPackage(name, consumerRoot);\n if (installed && (environment.PO_TEST === '1' || !isCheckoutPoPackage(installed))) return installed;\n const runtime = findRuntimePackage(name, environment);\n return runtime &&\n (environment.PO_TEST === '1' || !isCheckoutPoPackage(runtime)) &&\n runtimePackageDeclared(name, environment)\n ? runtime\n : undefined;\n}\n\n/** Resolves every extension declared by a bare package's standard Pi manifest. */\nexport function packageEntries(specifier: string, origin: string = import.meta.url): string[] {\n const { name, subpath } = splitPackageSpecifier(specifier);\n if (subpath !== '.') return [packageEntry(specifier, origin)];\n\n const packageRoot = findInstalledPackage(name, path.dirname(fileURLToPath(origin)));\n if (!packageRoot) throw new Error(`Cannot resolve package ${name}.`);\n const manifest = readPackageManifest(packageRoot);\n if (!manifestDeclaresExtensions(manifest)) {\n throw new Error(`${name} package.json does not declare pi.extensions.`);\n }\n const manifestEntries = manifestExtensionEntries(packageRoot, manifest, name);\n if (!manifestEntries?.length) throw new Error(`${name} package.json pi.extensions resolves no extension files.`);\n return manifestEntries;\n}\n\n/** Same as packageEntries, but returns undefined when the package is absent. */\nexport function optionalPackageEntries(specifier: string, origin: string = import.meta.url): string[] | undefined {\n try {\n return packageEntries(specifier, origin);\n } catch {\n return undefined;\n }\n}\n\n/**\n * Resolves manifest entries from the consumer repository's dependency tree.\n *\n * The meta-package cannot resolve what the repository declares: under an\n * isolated node_modules layout Po Pi only sees its own dependencies. Walking\n * the consumer's module chain lets its package manifest answer first without\n * accidentally falling through to Po's dependency tree.\n */\nexport function consumerPackageEntries(\n specifier: string,\n consumerRoot: string,\n environment: LookupEnvironment = process.env,\n): string[] | undefined {\n const { name, subpath } = splitPackageSpecifier(specifier);\n const packageRoot = findConsumerPackage(name, consumerRoot, environment);\n if (!packageRoot) return undefined;\n if (subpath === '.') {\n const manifest = readPackageManifest(packageRoot);\n if (!manifestDeclaresExtensions(manifest)) return [];\n return manifestExtensionEntries(packageRoot, manifest, name) ?? [];\n }\n const entry = consumerPackageEntry(specifier, consumerRoot, environment);\n return entry ? [entry] : [];\n}\n\n/**\n * Resolves one explicit package export or direct package-relative path from the consumer.\n * `environment` names the Po home whose shared runtime answers after the consumer's own tree.\n */\nexport function consumerPackageEntry(\n specifier: string,\n consumerRoot: string,\n environment: LookupEnvironment = process.env,\n): string | undefined {\n const packageRoot = findConsumerPackage(splitPackageSpecifier(specifier).name, consumerRoot, environment);\n return packageRootEntry(specifier, consumerRoot, packageRoot);\n}\n\n/** One export or package-relative path of an already located package. */\nfunction packageRootEntry(\n specifier: string,\n consumerRoot: string,\n packageRoot: string | undefined,\n): string | undefined {\n if (!packageRoot) return undefined;\n const { subpath } = splitPackageSpecifier(specifier);\n if (subpath === '.') return localEntry(packageRoot, consumerRoot) ?? extensionIndexEntry(packageRoot);\n const manifestPath = path.join(packageRoot, PACKAGE_MANIFEST);\n // A relative subpath that the package does not export is still loadable by\n // path, which is how layers point at a file inside a package (`.../index.ts`).\n const directTarget = path.join(packageRoot, subpath);\n let manifest: { exports?: unknown };\n try {\n manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8')) as { exports?: unknown };\n } catch {\n return fs.existsSync(directTarget) ? directTarget : undefined;\n }\n\n const exports = manifest.exports;\n if (exports !== undefined && exports !== null) {\n const entry =\n typeof exports === 'object' && !Array.isArray(exports)\n ? (exports as Record<string, unknown>)[subpath]\n : undefined;\n const target = selectImportTarget(entry);\n if (target) {\n const resolved = path.join(packageRoot, target);\n if (fs.existsSync(resolved)) return resolved;\n }\n }\n\n return fs.existsSync(directTarget) ? directTarget : undefined;\n}\n\n/** Resolves one exports subpath from a path-style package directory. */\nexport function localPackageExport(specifier: string, baseDirectory: string, subpath: string): string | undefined {\n const packageRoot = path.resolve(baseDirectory, specifier);\n const manifest = readPackageManifest(packageRoot);\n const exports = manifest?.exports;\n if (exports === undefined || exports === null) return undefined;\n const target = selectImportTarget(isRecord(exports) ? exports[subpath] : undefined);\n if (!target) return undefined;\n const resolved = path.join(packageRoot, target);\n return fs.existsSync(resolved) ? resolved : undefined;\n}\n\n/** Manifest fields consulted when a local package declares no `exports`. */\nconst MAIN_FIELDS = ['module', 'main'] as const;\n\n/**\n * Returns the canonical name of a path-style package directory.\n *\n * A direct file is intentionally anonymous: treating the repository manifest\n * above it as the file's identity would collapse every local extension in that\n * repository. Only a directory with its own named manifest represents a package\n * that can replace another installed version by logical identity.\n */\nexport function localPackageName(specifier: string, baseDirectory: string): string | undefined {\n const target = path.resolve(baseDirectory, specifier);\n try {\n if (!fs.statSync(target).isDirectory()) return undefined;\n const manifest = JSON.parse(fs.readFileSync(path.join(target, PACKAGE_MANIFEST), 'utf8')) as {\n name?: unknown;\n };\n return typeof manifest.name === 'string' && manifest.name.trim() ? manifest.name.trim() : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Resolves Pi extension entries from a local file, extension directory, or package.\n *\n * A file is taken as the extension entry as written. A package directory uses\n * its native `pi.extensions` declaration or legacy root entry. A plain directory\n * follows Pi's extension discovery convention for scripts and child `index`\n * modules. This lets unpublished extensions live in the repository, or beside\n * the global config in `~/.po`, and still load in deterministic order.\n */\nexport function localEntries(specifier: string, baseDirectory: string): string[] | undefined {\n const target = path.resolve(baseDirectory, specifier);\n let stats: fs.Stats;\n try {\n stats = fs.statSync(target);\n } catch {\n return undefined;\n }\n if (stats.isFile()) return [target];\n if (!stats.isDirectory()) return undefined;\n\n const manifest = readPackageManifest(target);\n const manifestEntries = manifestExtensionEntries(\n target,\n manifest,\n localPackageName(specifier, baseDirectory) ?? target,\n );\n if (manifestEntries !== undefined) return manifestEntries;\n const entry = localEntry(specifier, baseDirectory);\n return entry ? [entry] : extensionFilesAt(target);\n}\n\n/**\n * Resolves a local package selection through its standard Pi manifest.\n * Direct files and extension directories remain valid explicit local paths.\n */\nexport function localPackageEntries(specifier: string, baseDirectory: string): string[] | undefined {\n const target = path.resolve(baseDirectory, specifier);\n let stats: fs.Stats;\n try {\n stats = fs.statSync(target);\n } catch {\n return undefined;\n }\n if (stats.isFile()) return [target];\n if (!stats.isDirectory()) return undefined;\n\n const manifestPath = path.join(target, PACKAGE_MANIFEST);\n if (!fs.existsSync(manifestPath)) return extensionFilesAt(target);\n const manifest = readPackageManifest(target);\n if (!manifestDeclaresExtensions(manifest)) return [];\n return manifestExtensionEntries(target, manifest, localPackageName(specifier, baseDirectory) ?? target) ?? [];\n}\n\n/** Resolves the legacy single entry from a local package's exports, module, or main field. */\nexport function localEntry(specifier: string, baseDirectory: string): string | undefined {\n const target = path.resolve(baseDirectory, specifier);\n let isDirectory: boolean;\n try {\n const stats = fs.statSync(target);\n if (stats.isFile()) return target;\n isDirectory = stats.isDirectory();\n } catch {\n return undefined;\n }\n if (!isDirectory) return undefined;\n\n let manifest: { exports?: unknown; module?: unknown; main?: unknown };\n try {\n manifest = JSON.parse(fs.readFileSync(path.join(target, PACKAGE_MANIFEST), 'utf8')) as typeof manifest;\n } catch {\n return undefined;\n }\n\n const exports = manifest.exports;\n const rootExport =\n typeof exports === 'object' && exports !== null && !Array.isArray(exports)\n ? ((exports as Record<string, unknown>)['.'] ?? exports)\n : exports;\n const candidates = [selectImportTarget(rootExport)];\n for (const field of MAIN_FIELDS) {\n if (typeof manifest[field] === 'string') candidates.push(manifest[field]);\n }\n\n for (const candidate of candidates) {\n if (!candidate) continue;\n const resolved = path.join(target, candidate);\n if (fs.existsSync(resolved)) return resolved;\n }\n return extensionIndexEntry(target);\n}\n\n/** Path to Pi's own CLI, which the launch command spawns. */\nexport function piCliPath(): string {\n return path.join(path.dirname(packageEntry('@earendil-works/pi-coding-agent')), 'cli.js');\n}\n"],"mappings":"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"}
@@ -6,6 +6,12 @@
6
6
  * extension has to be resolved to a file before it can be passed along.
7
7
  */
8
8
  export declare function packageEntry(name: string, origin?: string): string;
9
+ /**
10
+ * The entry a module running from a Po checkout finds in that checkout's own closure.
11
+ * A checkout package is never an implicit override for a consumer, so callers try
12
+ * the consumer first and use this only as the last resort.
13
+ */
14
+ export declare function checkoutPackageEntry(name: string, origin: string): string | undefined;
9
15
  /** Same as packageEntry, but returns undefined when the package is absent. */
10
16
  export declare function optionalPackageEntry(name: string, origin?: string): string | undefined;
11
17
  /**
@@ -20,6 +26,8 @@ export declare function splitPackageSpecifier(specifier: string): {
20
26
  };
21
27
  /** The environment a lookup runs for; it names the Po home, and so the shared runtime. */
22
28
  type LookupEnvironment = Readonly<Record<string, string | undefined>>;
29
+ /** Checkout package overrides inherited by the web, server and sync children of `po --test`. */
30
+ export declare function testPackageRoot(name: string, environment?: LookupEnvironment): string | undefined;
23
31
  /** Resolves every extension declared by a bare package's standard Pi manifest. */
24
32
  export declare function packageEntries(specifier: string, origin?: string): string[];
25
33
  /** Same as packageEntries, but returns undefined when the package is absent. */
@@ -28,7 +36,7 @@ export declare function optionalPackageEntries(specifier: string, origin?: strin
28
36
  * Resolves manifest entries from the consumer repository's dependency tree.
29
37
  *
30
38
  * The meta-package cannot resolve what the repository declares: under an
31
- * isolated node_modules layout Doom Pi only sees its own dependencies. Walking
39
+ * isolated node_modules layout Po Pi only sees its own dependencies. Walking
32
40
  * the consumer's module chain lets its package manifest answer first without
33
41
  * accidentally falling through to Po's dependency tree.
34
42
  */
@@ -69,4 +77,5 @@ export declare function localEntry(specifier: string, baseDirectory: string): st
69
77
  /** Path to Pi's own CLI, which the launch command spawns. */
70
78
  export declare function piCliPath(): string;
71
79
  //#endregion
80
+ export {};
72
81
  //# sourceMappingURL=moduleResolution.d.mts.map