@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
@@ -0,0 +1,230 @@
1
+ const require_runtime = require("../../../_virtual/_rolldown/runtime.cjs");
2
+ const require_core = require("../piSettings/core.cjs");
3
+ const require_sync = require("../piSettings/sync.cjs");
4
+ require("../../../runtimePiSettings.cjs");
5
+ const require_index = require("../chatgptAuth/index.cjs");
6
+ let node_crypto = require("node:crypto");
7
+ let node_path = require("node:path");
8
+ node_path = require_runtime.__toESM(node_path, 1);
9
+ let node_http = require("node:http");
10
+ let _earendil_works_pi_coding_agent = require("@earendil-works/pi-coding-agent");
11
+ //#region src/services/chatgptLogin/index.ts
12
+ const CLIENT_ID = "app_EMoamEEZ73f0CkXaXp7hrann";
13
+ const AUTH_ORIGIN = "https://auth.openai.com";
14
+ const TOKEN_URL = `${AUTH_ORIGIN}/oauth/token`;
15
+ /** Realtime voice needs the connector scopes that Pi's own ChatGPT login does not request. */
16
+ const SCOPE = "openid profile email offline_access api.connectors.read api.connectors.invoke";
17
+ const CALLBACK_HOST = "127.0.0.1";
18
+ const CALLBACK_PORT = 1455;
19
+ const CALLBACK_PATH = "/auth/callback";
20
+ /** The redirect registered for this OAuth client; the browser reaches the listener through localhost. */
21
+ const REDIRECT_URI = `http://localhost:${CALLBACK_PORT}${CALLBACK_PATH}`;
22
+ const MAX_TOKEN_RESPONSE_BYTES = 1048576;
23
+ const TOKEN_TIMEOUT_MS = 3e4;
24
+ function record(value) {
25
+ return typeof value === "object" && value !== null && !Array.isArray(value);
26
+ }
27
+ async function requestTokens(body, previousRefresh, signal) {
28
+ const bounded = AbortSignal.any([AbortSignal.timeout(TOKEN_TIMEOUT_MS), ...signal ? [signal] : []]);
29
+ const response = await fetch(TOKEN_URL, {
30
+ method: "POST",
31
+ headers: { "content-type": "application/x-www-form-urlencoded" },
32
+ body,
33
+ redirect: "error",
34
+ signal: bounded
35
+ });
36
+ if (!response.ok) {
37
+ await response.body?.cancel().catch(() => void 0);
38
+ throw new Error(`ChatGPT sign-in was rejected (HTTP ${response.status}). Sign in again.`);
39
+ }
40
+ const json = await require_index.readBoundedJson(response, MAX_TOKEN_RESPONSE_BYTES, bounded);
41
+ const access = record(json) ? json.access_token : void 0;
42
+ const refresh = record(json) ? json.refresh_token ?? previousRefresh : void 0;
43
+ const expiresIn = record(json) ? json.expires_in : void 0;
44
+ if (typeof access !== "string" || typeof refresh !== "string" || typeof expiresIn !== "number" || expiresIn <= 0) throw new Error("ChatGPT sign-in returned an invalid token response.");
45
+ const accountId = require_index.accountIdOf(access);
46
+ if (!accountId) throw new Error("ChatGPT sign-in did not include a ChatGPT account.");
47
+ return {
48
+ access,
49
+ refresh,
50
+ expires: Date.now() + expiresIn * 1e3,
51
+ accountId
52
+ };
53
+ }
54
+ function sameState(supplied, expected) {
55
+ const left = Buffer.from(supplied ?? "");
56
+ const right = Buffer.from(expected);
57
+ return left.length === right.length && (0, node_crypto.timingSafeEqual)(left, right);
58
+ }
59
+ /** The authorization code from a redirect URL; pasted input must carry the expected state. */
60
+ function codeFromRedirect(url, state) {
61
+ for (const name of [
62
+ "state",
63
+ "code",
64
+ "error"
65
+ ]) if (url.searchParams.getAll(name).length > 1) throw new Error("The sign-in address is invalid.");
66
+ if (!sameState(url.searchParams.get("state"), state)) throw new Error("The sign-in address does not match this attempt.");
67
+ if (url.searchParams.get("error")) throw new Error("ChatGPT sign-in was declined.");
68
+ const code = url.searchParams.get("code");
69
+ if (!code || code.trim() !== code) throw new Error("The sign-in address has no authorization code.");
70
+ return code;
71
+ }
72
+ /** Listens for the browser redirect on the registered loopback port; rejects when the port is taken. */
73
+ async function listenForCode(state, signal) {
74
+ const server = (0, node_http.createServer)();
75
+ let resolveCode;
76
+ let rejectCode;
77
+ const code = new Promise((resolve, reject) => {
78
+ resolveCode = resolve;
79
+ rejectCode = reject;
80
+ });
81
+ code.catch(() => void 0);
82
+ server.on("request", (request, response) => {
83
+ const reply = (status, text) => {
84
+ response.writeHead(status, {
85
+ "content-type": "text/plain; charset=utf-8",
86
+ "cache-control": "no-store"
87
+ });
88
+ response.end(text);
89
+ };
90
+ const url = new URL(request.url ?? "/", REDIRECT_URI);
91
+ if (request.method !== "GET" || url.pathname !== CALLBACK_PATH) return reply(404, "Not found.");
92
+ try {
93
+ resolveCode(codeFromRedirect(url, state));
94
+ reply(200, "Signed in. You can close this page.");
95
+ } catch (error) {
96
+ if (sameState(url.searchParams.get("state"), state)) rejectCode(error);
97
+ reply(400, "Sign-in could not be completed.");
98
+ }
99
+ });
100
+ await new Promise((resolve, reject) => {
101
+ server.once("error", reject);
102
+ server.listen({
103
+ host: CALLBACK_HOST,
104
+ port: CALLBACK_PORT,
105
+ exclusive: true
106
+ }, () => {
107
+ server.off("error", reject);
108
+ resolve();
109
+ });
110
+ });
111
+ const close = () => {
112
+ server.close();
113
+ server.closeAllConnections();
114
+ };
115
+ signal?.addEventListener("abort", close, { once: true });
116
+ return {
117
+ code,
118
+ close
119
+ };
120
+ }
121
+ async function login(callbacks) {
122
+ const { signal } = callbacks;
123
+ const verifier = (0, node_crypto.randomBytes)(64).toString("base64url");
124
+ const state = (0, node_crypto.randomBytes)(32).toString("base64url");
125
+ const authorize = new URL(`${AUTH_ORIGIN}/oauth/authorize`);
126
+ authorize.search = new URLSearchParams({
127
+ response_type: "code",
128
+ client_id: CLIENT_ID,
129
+ redirect_uri: REDIRECT_URI,
130
+ scope: SCOPE,
131
+ code_challenge: (0, node_crypto.createHash)("sha256").update(verifier).digest("base64url"),
132
+ code_challenge_method: "S256",
133
+ id_token_add_organizations: "true",
134
+ state
135
+ }).toString();
136
+ const callback = await listenForCode(state, signal).catch(() => void 0);
137
+ try {
138
+ callbacks.onAuth({
139
+ url: authorize.toString(),
140
+ instructions: "Sign in in your browser. If it does not return here, paste the address it lands on."
141
+ });
142
+ const pasted = (callbacks.onManualCodeInput?.() ?? callbacks.onPrompt({
143
+ message: "Paste the address your browser lands on",
144
+ placeholder: REDIRECT_URI
145
+ })).then((input) => {
146
+ if (!URL.canParse(input.trim())) throw new Error("Paste the full address from your browser.");
147
+ return codeFromRedirect(new URL(input.trim()), state);
148
+ });
149
+ const code = await (callback ? Promise.race([callback.code, pasted]) : pasted);
150
+ signal?.throwIfAborted();
151
+ return await requestTokens(new URLSearchParams({
152
+ grant_type: "authorization_code",
153
+ client_id: CLIENT_ID,
154
+ code,
155
+ code_verifier: verifier,
156
+ redirect_uri: REDIRECT_URI
157
+ }), void 0, signal);
158
+ } finally {
159
+ callback?.close();
160
+ }
161
+ }
162
+ const chatgptAuthProvider = {
163
+ name: require_index.CHATGPT_AUTH_PROVIDER_NAME,
164
+ oauth: {
165
+ name: require_index.CHATGPT_AUTH_PROVIDER_NAME,
166
+ isSubscription: true,
167
+ login,
168
+ refreshToken: (credentials, signal) => requestTokens(new URLSearchParams({
169
+ grant_type: "refresh_token",
170
+ client_id: CLIENT_ID,
171
+ refresh_token: credentials.refresh
172
+ }), credentials.refresh, signal),
173
+ getApiKey: (credentials) => credentials.access
174
+ }
175
+ };
176
+ /** Adds the shared sign-in to a Pi model runtime: its Providers row, /login entry, refresh and storage. */
177
+ function registerChatgptAuthProvider(runtime) {
178
+ runtime.registerProvider(require_index.CHATGPT_AUTH_PROVIDER_ID, chatgptAuthProvider);
179
+ }
180
+ /**
181
+ * Reads the shared sign-in outside a session (Voice runs at the hub). It opens the same auth.json
182
+ * a session uses; Pi's file lock keeps refreshes from different runtimes from racing.
183
+ */
184
+ function createChatgptAuthReader(options) {
185
+ let loading;
186
+ const runtime = () => {
187
+ loading ??= (async () => {
188
+ const agentDirectory = require_core.piAgentDirectory(options.environment, options.homeDirectory);
189
+ const directory = require_sync.modelConfigDirectory(agentDirectory, options.homeDirectory);
190
+ const created = await _earendil_works_pi_coding_agent.ModelRuntime.create({
191
+ authPath: node_path.default.join(directory, "auth.json"),
192
+ modelsPath: node_path.default.join(directory, "models.json"),
193
+ refreshOnCreate: false
194
+ });
195
+ registerChatgptAuthProvider(created);
196
+ return created;
197
+ })().catch((error) => {
198
+ loading = void 0;
199
+ throw error;
200
+ });
201
+ return loading;
202
+ };
203
+ const fresh = async (signal) => {
204
+ const current = await runtime();
205
+ await current.refresh({
206
+ allowNetwork: false,
207
+ providers: [require_index.CHATGPT_AUTH_PROVIDER_ID],
208
+ ...signal ? { signal } : {}
209
+ });
210
+ return current;
211
+ };
212
+ return {
213
+ /** Whether the shared sign-in exists on disk. No network call; the same check `credentials` runs first. */
214
+ async signedIn(signal) {
215
+ return (await fresh(signal)).isUsingSubscription(require_index.CHATGPT_AUTH_PROVIDER_ID);
216
+ },
217
+ async credentials(loginMessage, signal) {
218
+ const current = await fresh(signal);
219
+ return require_index.chatgptCredentials({
220
+ available: () => current.isUsingSubscription(require_index.CHATGPT_AUTH_PROVIDER_ID),
221
+ getAuth: (authSignal) => current.getAuth(require_index.CHATGPT_AUTH_PROVIDER_ID, authSignal ? { signal: authSignal } : {})
222
+ }, loginMessage, signal);
223
+ }
224
+ };
225
+ }
226
+ //#endregion
227
+ exports.createChatgptAuthReader = createChatgptAuthReader;
228
+ exports.registerChatgptAuthProvider = registerChatgptAuthProvider;
229
+
230
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["readBoundedJson","accountIdOf","timingSafeEqual","createServer","randomBytes","createHash","CHATGPT_AUTH_PROVIDER_NAME","CHATGPT_AUTH_PROVIDER_ID","piAgentDirectory","modelConfigDirectory","ModelRuntime","path","chatgptCredentials"],"sources":["../../../../src/services/chatgptLogin/index.ts"],"sourcesContent":["/*\n * Portions of this file are adapted from OpenAI Codex at commit 5ecb3afd1b, by way of po-voice.\n * Copyright OpenAI. Licensed under the Apache License, Version 2.0.\n */\n\nimport { createHash, randomBytes, timingSafeEqual } from 'node:crypto';\nimport { createServer } from 'node:http';\nimport path from 'node:path';\n\nimport { ModelRuntime, type ProviderConfig } from '@earendil-works/pi-coding-agent';\n\nimport {\n accountIdOf,\n CHATGPT_AUTH_PROVIDER_ID,\n CHATGPT_AUTH_PROVIDER_NAME,\n chatgptCredentials,\n readBoundedJson,\n} from '../chatgptAuth';\nimport { modelConfigDirectory, piAgentDirectory } from '../piSettings';\n\nconst CLIENT_ID = 'app_EMoamEEZ73f0CkXaXp7hrann';\nconst AUTH_ORIGIN = 'https://auth.openai.com';\nconst TOKEN_URL = `${AUTH_ORIGIN}/oauth/token`;\n/** Realtime voice needs the connector scopes that Pi's own ChatGPT login does not request. */\nconst SCOPE = 'openid profile email offline_access api.connectors.read api.connectors.invoke';\nconst CALLBACK_HOST = '127.0.0.1';\nconst CALLBACK_PORT = 1455;\nconst CALLBACK_PATH = '/auth/callback';\n/** The redirect registered for this OAuth client; the browser reaches the listener through localhost. */\nconst REDIRECT_URI = `http://localhost:${CALLBACK_PORT}${CALLBACK_PATH}`;\nconst MAX_TOKEN_RESPONSE_BYTES = 1024 * 1024;\nconst TOKEN_TIMEOUT_MS = 30_000;\n\ntype ChatgptOAuth = NonNullable<ProviderConfig['oauth']>;\ntype LoginCallbacks = Parameters<ChatgptOAuth['login']>[0];\ntype OAuthCredentials = Awaited<ReturnType<ChatgptOAuth['login']>>;\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nasync function requestTokens(\n body: URLSearchParams,\n previousRefresh: string | undefined,\n signal: AbortSignal | undefined,\n): Promise<OAuthCredentials> {\n const bounded = AbortSignal.any([AbortSignal.timeout(TOKEN_TIMEOUT_MS), ...(signal ? [signal] : [])]);\n const response = await fetch(TOKEN_URL, {\n method: 'POST',\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\n body,\n redirect: 'error',\n signal: bounded,\n });\n if (!response.ok) {\n await response.body?.cancel().catch(() => undefined); // The body may echo tokens; it is never read.\n throw new Error(`ChatGPT sign-in was rejected (HTTP ${response.status}). Sign in again.`);\n }\n const json = await readBoundedJson(response, MAX_TOKEN_RESPONSE_BYTES, bounded);\n const access = record(json) ? json.access_token : undefined;\n const refresh = record(json) ? (json.refresh_token ?? previousRefresh) : undefined;\n const expiresIn = record(json) ? json.expires_in : undefined;\n if (typeof access !== 'string' || typeof refresh !== 'string' || typeof expiresIn !== 'number' || expiresIn <= 0)\n throw new Error('ChatGPT sign-in returned an invalid token response.');\n const accountId = accountIdOf(access);\n if (!accountId) throw new Error('ChatGPT sign-in did not include a ChatGPT account.');\n return { access, refresh, expires: Date.now() + expiresIn * 1000, accountId };\n}\n\nfunction sameState(supplied: string | null, expected: string): boolean {\n const left = Buffer.from(supplied ?? '');\n const right = Buffer.from(expected);\n return left.length === right.length && timingSafeEqual(left, right);\n}\n\n/** The authorization code from a redirect URL; pasted input must carry the expected state. */\nfunction codeFromRedirect(url: URL, state: string): string {\n for (const name of ['state', 'code', 'error'])\n if (url.searchParams.getAll(name).length > 1) throw new Error('The sign-in address is invalid.');\n if (!sameState(url.searchParams.get('state'), state))\n throw new Error('The sign-in address does not match this attempt.');\n if (url.searchParams.get('error')) throw new Error('ChatGPT sign-in was declined.');\n const code = url.searchParams.get('code');\n if (!code || code.trim() !== code) throw new Error('The sign-in address has no authorization code.');\n return code;\n}\n\n/** Listens for the browser redirect on the registered loopback port; rejects when the port is taken. */\nasync function listenForCode(state: string, signal: AbortSignal | undefined) {\n const server = createServer();\n let resolveCode!: (code: string) => void;\n let rejectCode!: (error: Error) => void;\n const code = new Promise<string>((resolve, reject) => {\n resolveCode = resolve;\n rejectCode = reject;\n });\n code.catch(() => undefined); // Observed by the caller's race; never an unhandled rejection.\n server.on('request', (request, response) => {\n const reply = (status: number, text: string): void => {\n response.writeHead(status, { 'content-type': 'text/plain; charset=utf-8', 'cache-control': 'no-store' });\n response.end(text);\n };\n const url = new URL(request.url ?? '/', REDIRECT_URI);\n if (request.method !== 'GET' || url.pathname !== CALLBACK_PATH) return reply(404, 'Not found.');\n try {\n resolveCode(codeFromRedirect(url, state));\n reply(200, 'Signed in. You can close this page.');\n } catch (error) {\n // A stray or forged request must not end the attempt; only a matching declined redirect does.\n if (sameState(url.searchParams.get('state'), state)) rejectCode(error as Error);\n reply(400, 'Sign-in could not be completed.');\n }\n });\n await new Promise<void>((resolve, reject) => {\n server.once('error', reject);\n server.listen({ host: CALLBACK_HOST, port: CALLBACK_PORT, exclusive: true }, () => {\n server.off('error', reject);\n resolve();\n });\n });\n const close = (): void => {\n server.close();\n server.closeAllConnections();\n };\n signal?.addEventListener('abort', close, { once: true });\n return { code, close };\n}\n\nasync function login(callbacks: LoginCallbacks): Promise<OAuthCredentials> {\n const { signal } = callbacks;\n const verifier = randomBytes(64).toString('base64url');\n const state = randomBytes(32).toString('base64url');\n const authorize = new URL(`${AUTH_ORIGIN}/oauth/authorize`);\n authorize.search = new URLSearchParams({\n response_type: 'code',\n client_id: CLIENT_ID,\n redirect_uri: REDIRECT_URI,\n scope: SCOPE,\n code_challenge: createHash('sha256').update(verifier).digest('base64url'),\n code_challenge_method: 'S256',\n id_token_add_organizations: 'true',\n state,\n }).toString();\n // Port 1455 is shared with Codex and Pi's own ChatGPT login; when it is taken, the pasted address still works.\n const callback = await listenForCode(state, signal).catch(() => undefined);\n try {\n callbacks.onAuth({\n url: authorize.toString(),\n instructions: 'Sign in in your browser. If it does not return here, paste the address it lands on.',\n });\n const pasted = (\n callbacks.onManualCodeInput?.() ??\n callbacks.onPrompt({ message: 'Paste the address your browser lands on', placeholder: REDIRECT_URI })\n ).then((input) => {\n if (!URL.canParse(input.trim())) throw new Error('Paste the full address from your browser.');\n return codeFromRedirect(new URL(input.trim()), state);\n });\n const code = await (callback ? Promise.race([callback.code, pasted]) : pasted);\n signal?.throwIfAborted();\n return await requestTokens(\n new URLSearchParams({\n grant_type: 'authorization_code',\n client_id: CLIENT_ID,\n code,\n code_verifier: verifier,\n redirect_uri: REDIRECT_URI,\n }),\n undefined,\n signal,\n );\n } finally {\n callback?.close();\n }\n}\n\nconst chatgptAuthProvider: ProviderConfig = {\n name: CHATGPT_AUTH_PROVIDER_NAME,\n oauth: {\n name: CHATGPT_AUTH_PROVIDER_NAME,\n isSubscription: true,\n login,\n refreshToken: (credentials, signal) =>\n requestTokens(\n new URLSearchParams({ grant_type: 'refresh_token', client_id: CLIENT_ID, refresh_token: credentials.refresh }),\n credentials.refresh,\n signal,\n ),\n getApiKey: (credentials) => credentials.access,\n },\n};\n\n/** Adds the shared sign-in to a Pi model runtime: its Providers row, /login entry, refresh and storage. */\nexport function registerChatgptAuthProvider(runtime: Pick<ModelRuntime, 'registerProvider'>): void {\n runtime.registerProvider(CHATGPT_AUTH_PROVIDER_ID, chatgptAuthProvider);\n}\n\n/**\n * Reads the shared sign-in outside a session (Voice runs at the hub). It opens the same auth.json\n * a session uses; Pi's file lock keeps refreshes from different runtimes from racing.\n */\nexport function createChatgptAuthReader(options: {\n environment?: Readonly<Record<string, string | undefined>>;\n homeDirectory?: string;\n}) {\n let loading: Promise<ModelRuntime> | undefined;\n const runtime = (): Promise<ModelRuntime> => {\n loading ??= (async () => {\n const agentDirectory = piAgentDirectory(options.environment, options.homeDirectory);\n const directory = modelConfigDirectory(agentDirectory, options.homeDirectory);\n const created = await ModelRuntime.create({\n authPath: path.join(directory, 'auth.json'),\n modelsPath: path.join(directory, 'models.json'),\n refreshOnCreate: false,\n });\n registerChatgptAuthProvider(created);\n return created;\n })().catch((error: unknown) => {\n loading = undefined; // A failed open is retried on the next use rather than pinned.\n throw error;\n });\n return loading;\n };\n // Sign-in happens in another runtime (the Providers page or a session), so re-read the file first.\n const fresh = async (signal?: AbortSignal): Promise<ModelRuntime> => {\n const current = await runtime();\n await current.refresh({\n allowNetwork: false,\n providers: [CHATGPT_AUTH_PROVIDER_ID],\n ...(signal ? { signal } : {}),\n });\n return current;\n };\n return {\n /** Whether the shared sign-in exists on disk. No network call; the same check `credentials` runs first. */\n async signedIn(signal?: AbortSignal): Promise<boolean> {\n return (await fresh(signal)).isUsingSubscription(CHATGPT_AUTH_PROVIDER_ID);\n },\n async credentials(loginMessage: string, signal?: AbortSignal): Promise<{ token: string; accountId: string }> {\n const current = await fresh(signal);\n return chatgptCredentials(\n {\n available: () => current.isUsingSubscription(CHATGPT_AUTH_PROVIDER_ID),\n getAuth: (authSignal) => current.getAuth(CHATGPT_AUTH_PROVIDER_ID, authSignal ? { signal: authSignal } : {}),\n },\n loginMessage,\n signal,\n );\n },\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { ModelRuntime } from "@earendil-works/pi-coding-agent";
2
+ //#region src/services/chatgptLogin/index.d.ts
3
+ /** Adds the shared sign-in to a Pi model runtime: its Providers row, /login entry, refresh and storage. */
4
+ export declare function registerChatgptAuthProvider(runtime: Pick<ModelRuntime, 'registerProvider'>): void;
5
+ /**
6
+ * Reads the shared sign-in outside a session (Voice runs at the hub). It opens the same auth.json
7
+ * a session uses; Pi's file lock keeps refreshes from different runtimes from racing.
8
+ */
9
+ export declare function createChatgptAuthReader(options: {
10
+ environment?: Readonly<Record<string, string | undefined>>;
11
+ homeDirectory?: string;
12
+ }): {
13
+ /** Whether the shared sign-in exists on disk. No network call; the same check `credentials` runs first. */
14
+ signedIn(signal?: AbortSignal): Promise<boolean>;
15
+ credentials(loginMessage: string, signal?: AbortSignal): Promise<{
16
+ token: string;
17
+ accountId: string;
18
+ }>;
19
+ };
20
+ //#endregion
21
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/chatgptLogin/index.ts"],"mappings":";;;wBAgMgB,4BAA4B,SAAS,KAAK;;;;;wBAQ1C,wBAAwB;EACtC,cAAc,SAAS;EACvB;;;EAgCQ,SAAQ,SAAU,cAAc;EAGhC,YAAW,sBAAqB,SAAW,cAAc;IAAU;IAAe"}
@@ -0,0 +1,227 @@
1
+ import { piAgentDirectory } from "../piSettings/core.mjs";
2
+ import { modelConfigDirectory } from "../piSettings/sync.mjs";
3
+ import "../../../runtimePiSettings.mjs";
4
+ import { CHATGPT_AUTH_PROVIDER_ID, CHATGPT_AUTH_PROVIDER_NAME, accountIdOf, chatgptCredentials, readBoundedJson } from "../chatgptAuth/index.mjs";
5
+ import { createHash, randomBytes, timingSafeEqual } from "node:crypto";
6
+ import path from "node:path";
7
+ import { createServer } from "node:http";
8
+ import { ModelRuntime } from "@earendil-works/pi-coding-agent";
9
+ //#region src/services/chatgptLogin/index.ts
10
+ const CLIENT_ID = "app_EMoamEEZ73f0CkXaXp7hrann";
11
+ const AUTH_ORIGIN = "https://auth.openai.com";
12
+ const TOKEN_URL = `${AUTH_ORIGIN}/oauth/token`;
13
+ /** Realtime voice needs the connector scopes that Pi's own ChatGPT login does not request. */
14
+ const SCOPE = "openid profile email offline_access api.connectors.read api.connectors.invoke";
15
+ const CALLBACK_HOST = "127.0.0.1";
16
+ const CALLBACK_PORT = 1455;
17
+ const CALLBACK_PATH = "/auth/callback";
18
+ /** The redirect registered for this OAuth client; the browser reaches the listener through localhost. */
19
+ const REDIRECT_URI = `http://localhost:${CALLBACK_PORT}${CALLBACK_PATH}`;
20
+ const MAX_TOKEN_RESPONSE_BYTES = 1048576;
21
+ const TOKEN_TIMEOUT_MS = 3e4;
22
+ function record(value) {
23
+ return typeof value === "object" && value !== null && !Array.isArray(value);
24
+ }
25
+ async function requestTokens(body, previousRefresh, signal) {
26
+ const bounded = AbortSignal.any([AbortSignal.timeout(TOKEN_TIMEOUT_MS), ...signal ? [signal] : []]);
27
+ const response = await fetch(TOKEN_URL, {
28
+ method: "POST",
29
+ headers: { "content-type": "application/x-www-form-urlencoded" },
30
+ body,
31
+ redirect: "error",
32
+ signal: bounded
33
+ });
34
+ if (!response.ok) {
35
+ await response.body?.cancel().catch(() => void 0);
36
+ throw new Error(`ChatGPT sign-in was rejected (HTTP ${response.status}). Sign in again.`);
37
+ }
38
+ const json = await readBoundedJson(response, MAX_TOKEN_RESPONSE_BYTES, bounded);
39
+ const access = record(json) ? json.access_token : void 0;
40
+ const refresh = record(json) ? json.refresh_token ?? previousRefresh : void 0;
41
+ const expiresIn = record(json) ? json.expires_in : void 0;
42
+ if (typeof access !== "string" || typeof refresh !== "string" || typeof expiresIn !== "number" || expiresIn <= 0) throw new Error("ChatGPT sign-in returned an invalid token response.");
43
+ const accountId = accountIdOf(access);
44
+ if (!accountId) throw new Error("ChatGPT sign-in did not include a ChatGPT account.");
45
+ return {
46
+ access,
47
+ refresh,
48
+ expires: Date.now() + expiresIn * 1e3,
49
+ accountId
50
+ };
51
+ }
52
+ function sameState(supplied, expected) {
53
+ const left = Buffer.from(supplied ?? "");
54
+ const right = Buffer.from(expected);
55
+ return left.length === right.length && timingSafeEqual(left, right);
56
+ }
57
+ /** The authorization code from a redirect URL; pasted input must carry the expected state. */
58
+ function codeFromRedirect(url, state) {
59
+ for (const name of [
60
+ "state",
61
+ "code",
62
+ "error"
63
+ ]) if (url.searchParams.getAll(name).length > 1) throw new Error("The sign-in address is invalid.");
64
+ if (!sameState(url.searchParams.get("state"), state)) throw new Error("The sign-in address does not match this attempt.");
65
+ if (url.searchParams.get("error")) throw new Error("ChatGPT sign-in was declined.");
66
+ const code = url.searchParams.get("code");
67
+ if (!code || code.trim() !== code) throw new Error("The sign-in address has no authorization code.");
68
+ return code;
69
+ }
70
+ /** Listens for the browser redirect on the registered loopback port; rejects when the port is taken. */
71
+ async function listenForCode(state, signal) {
72
+ const server = createServer();
73
+ let resolveCode;
74
+ let rejectCode;
75
+ const code = new Promise((resolve, reject) => {
76
+ resolveCode = resolve;
77
+ rejectCode = reject;
78
+ });
79
+ code.catch(() => void 0);
80
+ server.on("request", (request, response) => {
81
+ const reply = (status, text) => {
82
+ response.writeHead(status, {
83
+ "content-type": "text/plain; charset=utf-8",
84
+ "cache-control": "no-store"
85
+ });
86
+ response.end(text);
87
+ };
88
+ const url = new URL(request.url ?? "/", REDIRECT_URI);
89
+ if (request.method !== "GET" || url.pathname !== CALLBACK_PATH) return reply(404, "Not found.");
90
+ try {
91
+ resolveCode(codeFromRedirect(url, state));
92
+ reply(200, "Signed in. You can close this page.");
93
+ } catch (error) {
94
+ if (sameState(url.searchParams.get("state"), state)) rejectCode(error);
95
+ reply(400, "Sign-in could not be completed.");
96
+ }
97
+ });
98
+ await new Promise((resolve, reject) => {
99
+ server.once("error", reject);
100
+ server.listen({
101
+ host: CALLBACK_HOST,
102
+ port: CALLBACK_PORT,
103
+ exclusive: true
104
+ }, () => {
105
+ server.off("error", reject);
106
+ resolve();
107
+ });
108
+ });
109
+ const close = () => {
110
+ server.close();
111
+ server.closeAllConnections();
112
+ };
113
+ signal?.addEventListener("abort", close, { once: true });
114
+ return {
115
+ code,
116
+ close
117
+ };
118
+ }
119
+ async function login(callbacks) {
120
+ const { signal } = callbacks;
121
+ const verifier = randomBytes(64).toString("base64url");
122
+ const state = randomBytes(32).toString("base64url");
123
+ const authorize = new URL(`${AUTH_ORIGIN}/oauth/authorize`);
124
+ authorize.search = new URLSearchParams({
125
+ response_type: "code",
126
+ client_id: CLIENT_ID,
127
+ redirect_uri: REDIRECT_URI,
128
+ scope: SCOPE,
129
+ code_challenge: createHash("sha256").update(verifier).digest("base64url"),
130
+ code_challenge_method: "S256",
131
+ id_token_add_organizations: "true",
132
+ state
133
+ }).toString();
134
+ const callback = await listenForCode(state, signal).catch(() => void 0);
135
+ try {
136
+ callbacks.onAuth({
137
+ url: authorize.toString(),
138
+ instructions: "Sign in in your browser. If it does not return here, paste the address it lands on."
139
+ });
140
+ const pasted = (callbacks.onManualCodeInput?.() ?? callbacks.onPrompt({
141
+ message: "Paste the address your browser lands on",
142
+ placeholder: REDIRECT_URI
143
+ })).then((input) => {
144
+ if (!URL.canParse(input.trim())) throw new Error("Paste the full address from your browser.");
145
+ return codeFromRedirect(new URL(input.trim()), state);
146
+ });
147
+ const code = await (callback ? Promise.race([callback.code, pasted]) : pasted);
148
+ signal?.throwIfAborted();
149
+ return await requestTokens(new URLSearchParams({
150
+ grant_type: "authorization_code",
151
+ client_id: CLIENT_ID,
152
+ code,
153
+ code_verifier: verifier,
154
+ redirect_uri: REDIRECT_URI
155
+ }), void 0, signal);
156
+ } finally {
157
+ callback?.close();
158
+ }
159
+ }
160
+ const chatgptAuthProvider = {
161
+ name: CHATGPT_AUTH_PROVIDER_NAME,
162
+ oauth: {
163
+ name: CHATGPT_AUTH_PROVIDER_NAME,
164
+ isSubscription: true,
165
+ login,
166
+ refreshToken: (credentials, signal) => requestTokens(new URLSearchParams({
167
+ grant_type: "refresh_token",
168
+ client_id: CLIENT_ID,
169
+ refresh_token: credentials.refresh
170
+ }), credentials.refresh, signal),
171
+ getApiKey: (credentials) => credentials.access
172
+ }
173
+ };
174
+ /** Adds the shared sign-in to a Pi model runtime: its Providers row, /login entry, refresh and storage. */
175
+ function registerChatgptAuthProvider(runtime) {
176
+ runtime.registerProvider(CHATGPT_AUTH_PROVIDER_ID, chatgptAuthProvider);
177
+ }
178
+ /**
179
+ * Reads the shared sign-in outside a session (Voice runs at the hub). It opens the same auth.json
180
+ * a session uses; Pi's file lock keeps refreshes from different runtimes from racing.
181
+ */
182
+ function createChatgptAuthReader(options) {
183
+ let loading;
184
+ const runtime = () => {
185
+ loading ??= (async () => {
186
+ const agentDirectory = piAgentDirectory(options.environment, options.homeDirectory);
187
+ const directory = modelConfigDirectory(agentDirectory, options.homeDirectory);
188
+ const created = await ModelRuntime.create({
189
+ authPath: path.join(directory, "auth.json"),
190
+ modelsPath: path.join(directory, "models.json"),
191
+ refreshOnCreate: false
192
+ });
193
+ registerChatgptAuthProvider(created);
194
+ return created;
195
+ })().catch((error) => {
196
+ loading = void 0;
197
+ throw error;
198
+ });
199
+ return loading;
200
+ };
201
+ const fresh = async (signal) => {
202
+ const current = await runtime();
203
+ await current.refresh({
204
+ allowNetwork: false,
205
+ providers: [CHATGPT_AUTH_PROVIDER_ID],
206
+ ...signal ? { signal } : {}
207
+ });
208
+ return current;
209
+ };
210
+ return {
211
+ /** Whether the shared sign-in exists on disk. No network call; the same check `credentials` runs first. */
212
+ async signedIn(signal) {
213
+ return (await fresh(signal)).isUsingSubscription(CHATGPT_AUTH_PROVIDER_ID);
214
+ },
215
+ async credentials(loginMessage, signal) {
216
+ const current = await fresh(signal);
217
+ return chatgptCredentials({
218
+ available: () => current.isUsingSubscription(CHATGPT_AUTH_PROVIDER_ID),
219
+ getAuth: (authSignal) => current.getAuth(CHATGPT_AUTH_PROVIDER_ID, authSignal ? { signal: authSignal } : {})
220
+ }, loginMessage, signal);
221
+ }
222
+ };
223
+ }
224
+ //#endregion
225
+ export { createChatgptAuthReader, registerChatgptAuthProvider };
226
+
227
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/chatgptLogin/index.ts"],"sourcesContent":["/*\n * Portions of this file are adapted from OpenAI Codex at commit 5ecb3afd1b, by way of po-voice.\n * Copyright OpenAI. Licensed under the Apache License, Version 2.0.\n */\n\nimport { createHash, randomBytes, timingSafeEqual } from 'node:crypto';\nimport { createServer } from 'node:http';\nimport path from 'node:path';\n\nimport { ModelRuntime, type ProviderConfig } from '@earendil-works/pi-coding-agent';\n\nimport {\n accountIdOf,\n CHATGPT_AUTH_PROVIDER_ID,\n CHATGPT_AUTH_PROVIDER_NAME,\n chatgptCredentials,\n readBoundedJson,\n} from '../chatgptAuth';\nimport { modelConfigDirectory, piAgentDirectory } from '../piSettings';\n\nconst CLIENT_ID = 'app_EMoamEEZ73f0CkXaXp7hrann';\nconst AUTH_ORIGIN = 'https://auth.openai.com';\nconst TOKEN_URL = `${AUTH_ORIGIN}/oauth/token`;\n/** Realtime voice needs the connector scopes that Pi's own ChatGPT login does not request. */\nconst SCOPE = 'openid profile email offline_access api.connectors.read api.connectors.invoke';\nconst CALLBACK_HOST = '127.0.0.1';\nconst CALLBACK_PORT = 1455;\nconst CALLBACK_PATH = '/auth/callback';\n/** The redirect registered for this OAuth client; the browser reaches the listener through localhost. */\nconst REDIRECT_URI = `http://localhost:${CALLBACK_PORT}${CALLBACK_PATH}`;\nconst MAX_TOKEN_RESPONSE_BYTES = 1024 * 1024;\nconst TOKEN_TIMEOUT_MS = 30_000;\n\ntype ChatgptOAuth = NonNullable<ProviderConfig['oauth']>;\ntype LoginCallbacks = Parameters<ChatgptOAuth['login']>[0];\ntype OAuthCredentials = Awaited<ReturnType<ChatgptOAuth['login']>>;\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nasync function requestTokens(\n body: URLSearchParams,\n previousRefresh: string | undefined,\n signal: AbortSignal | undefined,\n): Promise<OAuthCredentials> {\n const bounded = AbortSignal.any([AbortSignal.timeout(TOKEN_TIMEOUT_MS), ...(signal ? [signal] : [])]);\n const response = await fetch(TOKEN_URL, {\n method: 'POST',\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\n body,\n redirect: 'error',\n signal: bounded,\n });\n if (!response.ok) {\n await response.body?.cancel().catch(() => undefined); // The body may echo tokens; it is never read.\n throw new Error(`ChatGPT sign-in was rejected (HTTP ${response.status}). Sign in again.`);\n }\n const json = await readBoundedJson(response, MAX_TOKEN_RESPONSE_BYTES, bounded);\n const access = record(json) ? json.access_token : undefined;\n const refresh = record(json) ? (json.refresh_token ?? previousRefresh) : undefined;\n const expiresIn = record(json) ? json.expires_in : undefined;\n if (typeof access !== 'string' || typeof refresh !== 'string' || typeof expiresIn !== 'number' || expiresIn <= 0)\n throw new Error('ChatGPT sign-in returned an invalid token response.');\n const accountId = accountIdOf(access);\n if (!accountId) throw new Error('ChatGPT sign-in did not include a ChatGPT account.');\n return { access, refresh, expires: Date.now() + expiresIn * 1000, accountId };\n}\n\nfunction sameState(supplied: string | null, expected: string): boolean {\n const left = Buffer.from(supplied ?? '');\n const right = Buffer.from(expected);\n return left.length === right.length && timingSafeEqual(left, right);\n}\n\n/** The authorization code from a redirect URL; pasted input must carry the expected state. */\nfunction codeFromRedirect(url: URL, state: string): string {\n for (const name of ['state', 'code', 'error'])\n if (url.searchParams.getAll(name).length > 1) throw new Error('The sign-in address is invalid.');\n if (!sameState(url.searchParams.get('state'), state))\n throw new Error('The sign-in address does not match this attempt.');\n if (url.searchParams.get('error')) throw new Error('ChatGPT sign-in was declined.');\n const code = url.searchParams.get('code');\n if (!code || code.trim() !== code) throw new Error('The sign-in address has no authorization code.');\n return code;\n}\n\n/** Listens for the browser redirect on the registered loopback port; rejects when the port is taken. */\nasync function listenForCode(state: string, signal: AbortSignal | undefined) {\n const server = createServer();\n let resolveCode!: (code: string) => void;\n let rejectCode!: (error: Error) => void;\n const code = new Promise<string>((resolve, reject) => {\n resolveCode = resolve;\n rejectCode = reject;\n });\n code.catch(() => undefined); // Observed by the caller's race; never an unhandled rejection.\n server.on('request', (request, response) => {\n const reply = (status: number, text: string): void => {\n response.writeHead(status, { 'content-type': 'text/plain; charset=utf-8', 'cache-control': 'no-store' });\n response.end(text);\n };\n const url = new URL(request.url ?? '/', REDIRECT_URI);\n if (request.method !== 'GET' || url.pathname !== CALLBACK_PATH) return reply(404, 'Not found.');\n try {\n resolveCode(codeFromRedirect(url, state));\n reply(200, 'Signed in. You can close this page.');\n } catch (error) {\n // A stray or forged request must not end the attempt; only a matching declined redirect does.\n if (sameState(url.searchParams.get('state'), state)) rejectCode(error as Error);\n reply(400, 'Sign-in could not be completed.');\n }\n });\n await new Promise<void>((resolve, reject) => {\n server.once('error', reject);\n server.listen({ host: CALLBACK_HOST, port: CALLBACK_PORT, exclusive: true }, () => {\n server.off('error', reject);\n resolve();\n });\n });\n const close = (): void => {\n server.close();\n server.closeAllConnections();\n };\n signal?.addEventListener('abort', close, { once: true });\n return { code, close };\n}\n\nasync function login(callbacks: LoginCallbacks): Promise<OAuthCredentials> {\n const { signal } = callbacks;\n const verifier = randomBytes(64).toString('base64url');\n const state = randomBytes(32).toString('base64url');\n const authorize = new URL(`${AUTH_ORIGIN}/oauth/authorize`);\n authorize.search = new URLSearchParams({\n response_type: 'code',\n client_id: CLIENT_ID,\n redirect_uri: REDIRECT_URI,\n scope: SCOPE,\n code_challenge: createHash('sha256').update(verifier).digest('base64url'),\n code_challenge_method: 'S256',\n id_token_add_organizations: 'true',\n state,\n }).toString();\n // Port 1455 is shared with Codex and Pi's own ChatGPT login; when it is taken, the pasted address still works.\n const callback = await listenForCode(state, signal).catch(() => undefined);\n try {\n callbacks.onAuth({\n url: authorize.toString(),\n instructions: 'Sign in in your browser. If it does not return here, paste the address it lands on.',\n });\n const pasted = (\n callbacks.onManualCodeInput?.() ??\n callbacks.onPrompt({ message: 'Paste the address your browser lands on', placeholder: REDIRECT_URI })\n ).then((input) => {\n if (!URL.canParse(input.trim())) throw new Error('Paste the full address from your browser.');\n return codeFromRedirect(new URL(input.trim()), state);\n });\n const code = await (callback ? Promise.race([callback.code, pasted]) : pasted);\n signal?.throwIfAborted();\n return await requestTokens(\n new URLSearchParams({\n grant_type: 'authorization_code',\n client_id: CLIENT_ID,\n code,\n code_verifier: verifier,\n redirect_uri: REDIRECT_URI,\n }),\n undefined,\n signal,\n );\n } finally {\n callback?.close();\n }\n}\n\nconst chatgptAuthProvider: ProviderConfig = {\n name: CHATGPT_AUTH_PROVIDER_NAME,\n oauth: {\n name: CHATGPT_AUTH_PROVIDER_NAME,\n isSubscription: true,\n login,\n refreshToken: (credentials, signal) =>\n requestTokens(\n new URLSearchParams({ grant_type: 'refresh_token', client_id: CLIENT_ID, refresh_token: credentials.refresh }),\n credentials.refresh,\n signal,\n ),\n getApiKey: (credentials) => credentials.access,\n },\n};\n\n/** Adds the shared sign-in to a Pi model runtime: its Providers row, /login entry, refresh and storage. */\nexport function registerChatgptAuthProvider(runtime: Pick<ModelRuntime, 'registerProvider'>): void {\n runtime.registerProvider(CHATGPT_AUTH_PROVIDER_ID, chatgptAuthProvider);\n}\n\n/**\n * Reads the shared sign-in outside a session (Voice runs at the hub). It opens the same auth.json\n * a session uses; Pi's file lock keeps refreshes from different runtimes from racing.\n */\nexport function createChatgptAuthReader(options: {\n environment?: Readonly<Record<string, string | undefined>>;\n homeDirectory?: string;\n}) {\n let loading: Promise<ModelRuntime> | undefined;\n const runtime = (): Promise<ModelRuntime> => {\n loading ??= (async () => {\n const agentDirectory = piAgentDirectory(options.environment, options.homeDirectory);\n const directory = modelConfigDirectory(agentDirectory, options.homeDirectory);\n const created = await ModelRuntime.create({\n authPath: path.join(directory, 'auth.json'),\n modelsPath: path.join(directory, 'models.json'),\n refreshOnCreate: false,\n });\n registerChatgptAuthProvider(created);\n return created;\n })().catch((error: unknown) => {\n loading = undefined; // A failed open is retried on the next use rather than pinned.\n throw error;\n });\n return loading;\n };\n // Sign-in happens in another runtime (the Providers page or a session), so re-read the file first.\n const fresh = async (signal?: AbortSignal): Promise<ModelRuntime> => {\n const current = await runtime();\n await current.refresh({\n allowNetwork: false,\n providers: [CHATGPT_AUTH_PROVIDER_ID],\n ...(signal ? { signal } : {}),\n });\n return current;\n };\n return {\n /** Whether the shared sign-in exists on disk. No network call; the same check `credentials` runs first. */\n async signedIn(signal?: AbortSignal): Promise<boolean> {\n return (await fresh(signal)).isUsingSubscription(CHATGPT_AUTH_PROVIDER_ID);\n },\n async credentials(loginMessage: string, signal?: AbortSignal): Promise<{ token: string; accountId: string }> {\n const current = await fresh(signal);\n return chatgptCredentials(\n {\n available: () => current.isUsingSubscription(CHATGPT_AUTH_PROVIDER_ID),\n getAuth: (authSignal) => current.getAuth(CHATGPT_AUTH_PROVIDER_ID, authSignal ? { signal: authSignal } : {}),\n },\n loginMessage,\n signal,\n );\n },\n };\n}\n"],"mappings":"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"}
@@ -48,7 +48,7 @@ function conversationInput(conversation) {
48
48
  };
49
49
  });
50
50
  }
51
- /** Host-only transport: authentication never crosses the facet boundary. */
51
+ /** Host-only transport: authentication never crosses the package boundary. */
52
52
  function createChatgptWebSearchClient(dependencies) {
53
53
  return { async search(request) {
54
54
  const { signal } = request;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["CHATGPT_SIGN_IN_HINT","chatgptCredentials","readBoundedJson"],"sources":["../../../../src/services/chatgptWebSearch/index.ts"],"sourcesContent":["import type { DoomHeadlessExecutionContext } from '../../schemas/headless';\nimport { CHATGPT_SIGN_IN_HINT, chatgptCredentials, readBoundedJson } from '../chatgptAuth';\nimport type { ChatgptBackendDependencies } from '../chatgptImages/type';\n\nconst ENDPOINT = 'https://chatgpt.com/backend-api/codex/alpha/search';\nconst MAX_OUTPUT_TOKENS = 10_000; // Codex models.json tool truncation budget.\nconst MAX_COMMANDS_BYTES = 64 * 1024;\n// Fits the layer's ~20k-character excerpt even when every character needs a six-byte JSON escape.\nconst MAX_CONVERSATION_BYTES = 256 * 1024;\nconst MAX_CONVERSATION_ITEMS = 16;\nconst MAX_RESPONSE_BYTES = 4 * 1024 * 1024;\nconst MAX_RESULTS = 100;\nconst LOGIN_MESSAGE = `Web search needs a ChatGPT sign-in. ${CHATGPT_SIGN_IN_HINT}`;\nconst INVALID_RESPONSE = 'Web search returned an invalid response.';\nconst FAILED = 'Web search request failed.';\nconst ACCESS = { cached: false, indexed: 'indexed', live: true } as const;\n// ponytail: copy of Pi's defaultModelPerProvider['openai-codex'] (model-resolver.js), which Pi does not export.\n// Used when the chat model is not a ChatGPT model; goes stale when Pi's catalog moves.\nconst DEFAULT_MODEL = 'gpt-6.1-sol';\n\nexport type WebSearchRequest = Parameters<NonNullable<DoomHeadlessExecutionContext['webSearch']>['search']>[0] & {\n sessionId: string;\n /** The active ChatGPT model id; omitted when the chat model belongs to another provider. */\n model?: string;\n};\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** Detaches caller data into plain JSON so the wire body is exactly what was validated. */\nfunction boundedJson(value: unknown, limit: number, message: string): unknown {\n let json: string | undefined;\n try {\n json = JSON.stringify(value);\n } catch {\n throw new Error(message);\n }\n if (json === undefined || Buffer.byteLength(json) > limit) throw new Error(message);\n return JSON.parse(json) as unknown;\n}\n\nfunction conversationInput(conversation: unknown) {\n if (conversation === undefined) return undefined;\n const message = 'Invalid web search conversation.';\n if (!Array.isArray(conversation) || conversation.length > MAX_CONVERSATION_ITEMS) throw new Error(message);\n const items = boundedJson(conversation, MAX_CONVERSATION_BYTES, message) as unknown[];\n if (items.length === 0) return undefined;\n return items.map((item) => {\n if (\n !record(item) ||\n (item.role !== 'user' && item.role !== 'assistant') ||\n typeof item.text !== 'string' ||\n !item.text\n )\n throw new Error(message);\n return {\n type: 'message',\n role: item.role,\n content: [{ type: item.role === 'user' ? 'input_text' : 'output_text', text: item.text }],\n };\n });\n}\n\n/** Host-only transport: authentication never crosses the facet boundary. */\nexport function createChatgptWebSearchClient(dependencies: ChatgptBackendDependencies) {\n return {\n async search(request: WebSearchRequest): Promise<{ output: string; results?: Record<string, unknown>[] }> {\n const { signal } = request;\n signal?.throwIfAborted();\n if (!record(request.commands) || Object.keys(request.commands).length === 0)\n throw new Error('Invalid web search commands.');\n const commands = boundedJson(request.commands, MAX_COMMANDS_BYTES, 'Invalid web search commands.');\n const input = conversationInput(request.conversation);\n if (!Object.hasOwn(ACCESS, request.access)) throw new Error('Invalid web search access mode.');\n const model = request.model ?? DEFAULT_MODEL;\n if (typeof model !== 'string' || !/^[A-Za-z0-9._:-]{1,128}$/.test(model))\n throw new Error('Invalid web search model.');\n if (typeof request.sessionId !== 'string' || !/^[\\x21-\\x7e]{1,256}$/.test(request.sessionId))\n throw new Error('Invalid web search session.');\n const { token, accountId } = await chatgptCredentials(dependencies, LOGIN_MESSAGE, signal);\n let response: Response;\n try {\n response = await (dependencies.fetch ?? globalThis.fetch)(ENDPOINT, {\n method: 'POST',\n redirect: 'error',\n signal,\n headers: {\n Authorization: `Bearer ${token}`,\n 'chatgpt-account-id': accountId,\n originator: 'po_web_search',\n 'User-Agent': '@agimon-ai/po-web-search',\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify({\n id: request.sessionId,\n model,\n ...(input ? { input } : {}),\n commands,\n settings: { allowed_callers: ['direct'], external_web_access: ACCESS[request.access] },\n max_output_tokens: MAX_OUTPUT_TOKENS,\n }),\n });\n } catch {\n signal?.throwIfAborted();\n throw new Error(FAILED);\n }\n if (!response.ok) {\n await response.body?.cancel().catch(() => undefined);\n if (response.status === 401) throw new Error(LOGIN_MESSAGE);\n if (response.status === 403) throw new Error('Web search is not available for this ChatGPT account.');\n if (response.status === 429) {\n const retry = response.headers.get('retry-after');\n throw new Error(\n `Web search quota reached.${retry && /^\\d{1,6}$/.test(retry) ? ` Try again in ${retry} seconds.` : ''}`,\n );\n }\n throw new Error(`Web search request failed (HTTP ${response.status}).`);\n }\n let body: unknown;\n try {\n body = await readBoundedJson(response, MAX_RESPONSE_BYTES, signal);\n } catch {\n signal?.throwIfAborted();\n throw new Error(INVALID_RESPONSE);\n }\n if (!record(body) || typeof body.output !== 'string') throw new Error(INVALID_RESPONSE);\n const output = body.output.trim() ? body.output : 'Web search returned no results.';\n // `results` is display-only, so a malformed list is dropped rather than failing the search.\n const results =\n Array.isArray(body.results) && body.results.length <= MAX_RESULTS && body.results.every(record)\n ? body.results\n : undefined;\n return results ? { output, results } : { output };\n },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["CHATGPT_SIGN_IN_HINT","chatgptCredentials","readBoundedJson"],"sources":["../../../../src/services/chatgptWebSearch/index.ts"],"sourcesContent":["import type { PoHeadlessExecutionContext } from '../../schemas/headless';\nimport { CHATGPT_SIGN_IN_HINT, chatgptCredentials, readBoundedJson } from '../chatgptAuth';\nimport type { ChatgptBackendDependencies } from '../chatgptImages/type';\n\nconst ENDPOINT = 'https://chatgpt.com/backend-api/codex/alpha/search';\nconst MAX_OUTPUT_TOKENS = 10_000; // Codex models.json tool truncation budget.\nconst MAX_COMMANDS_BYTES = 64 * 1024;\n// Fits the layer's ~20k-character excerpt even when every character needs a six-byte JSON escape.\nconst MAX_CONVERSATION_BYTES = 256 * 1024;\nconst MAX_CONVERSATION_ITEMS = 16;\nconst MAX_RESPONSE_BYTES = 4 * 1024 * 1024;\nconst MAX_RESULTS = 100;\nconst LOGIN_MESSAGE = `Web search needs a ChatGPT sign-in. ${CHATGPT_SIGN_IN_HINT}`;\nconst INVALID_RESPONSE = 'Web search returned an invalid response.';\nconst FAILED = 'Web search request failed.';\nconst ACCESS = { cached: false, indexed: 'indexed', live: true } as const;\n// ponytail: copy of Pi's defaultModelPerProvider['openai-codex'] (model-resolver.js), which Pi does not export.\n// Used when the chat model is not a ChatGPT model; goes stale when Pi's catalog moves.\nconst DEFAULT_MODEL = 'gpt-6.1-sol';\n\nexport type WebSearchRequest = Parameters<NonNullable<PoHeadlessExecutionContext['webSearch']>['search']>[0] & {\n sessionId: string;\n /** The active ChatGPT model id; omitted when the chat model belongs to another provider. */\n model?: string;\n};\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** Detaches caller data into plain JSON so the wire body is exactly what was validated. */\nfunction boundedJson(value: unknown, limit: number, message: string): unknown {\n let json: string | undefined;\n try {\n json = JSON.stringify(value);\n } catch {\n throw new Error(message);\n }\n if (json === undefined || Buffer.byteLength(json) > limit) throw new Error(message);\n return JSON.parse(json) as unknown;\n}\n\nfunction conversationInput(conversation: unknown) {\n if (conversation === undefined) return undefined;\n const message = 'Invalid web search conversation.';\n if (!Array.isArray(conversation) || conversation.length > MAX_CONVERSATION_ITEMS) throw new Error(message);\n const items = boundedJson(conversation, MAX_CONVERSATION_BYTES, message) as unknown[];\n if (items.length === 0) return undefined;\n return items.map((item) => {\n if (\n !record(item) ||\n (item.role !== 'user' && item.role !== 'assistant') ||\n typeof item.text !== 'string' ||\n !item.text\n )\n throw new Error(message);\n return {\n type: 'message',\n role: item.role,\n content: [{ type: item.role === 'user' ? 'input_text' : 'output_text', text: item.text }],\n };\n });\n}\n\n/** Host-only transport: authentication never crosses the package boundary. */\nexport function createChatgptWebSearchClient(dependencies: ChatgptBackendDependencies) {\n return {\n async search(request: WebSearchRequest): Promise<{ output: string; results?: Record<string, unknown>[] }> {\n const { signal } = request;\n signal?.throwIfAborted();\n if (!record(request.commands) || Object.keys(request.commands).length === 0)\n throw new Error('Invalid web search commands.');\n const commands = boundedJson(request.commands, MAX_COMMANDS_BYTES, 'Invalid web search commands.');\n const input = conversationInput(request.conversation);\n if (!Object.hasOwn(ACCESS, request.access)) throw new Error('Invalid web search access mode.');\n const model = request.model ?? DEFAULT_MODEL;\n if (typeof model !== 'string' || !/^[A-Za-z0-9._:-]{1,128}$/.test(model))\n throw new Error('Invalid web search model.');\n if (typeof request.sessionId !== 'string' || !/^[\\x21-\\x7e]{1,256}$/.test(request.sessionId))\n throw new Error('Invalid web search session.');\n const { token, accountId } = await chatgptCredentials(dependencies, LOGIN_MESSAGE, signal);\n let response: Response;\n try {\n response = await (dependencies.fetch ?? globalThis.fetch)(ENDPOINT, {\n method: 'POST',\n redirect: 'error',\n signal,\n headers: {\n Authorization: `Bearer ${token}`,\n 'chatgpt-account-id': accountId,\n originator: 'po_web_search',\n 'User-Agent': '@agimon-ai/po-web-search',\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify({\n id: request.sessionId,\n model,\n ...(input ? { input } : {}),\n commands,\n settings: { allowed_callers: ['direct'], external_web_access: ACCESS[request.access] },\n max_output_tokens: MAX_OUTPUT_TOKENS,\n }),\n });\n } catch {\n signal?.throwIfAborted();\n throw new Error(FAILED);\n }\n if (!response.ok) {\n await response.body?.cancel().catch(() => undefined);\n if (response.status === 401) throw new Error(LOGIN_MESSAGE);\n if (response.status === 403) throw new Error('Web search is not available for this ChatGPT account.');\n if (response.status === 429) {\n const retry = response.headers.get('retry-after');\n throw new Error(\n `Web search quota reached.${retry && /^\\d{1,6}$/.test(retry) ? ` Try again in ${retry} seconds.` : ''}`,\n );\n }\n throw new Error(`Web search request failed (HTTP ${response.status}).`);\n }\n let body: unknown;\n try {\n body = await readBoundedJson(response, MAX_RESPONSE_BYTES, signal);\n } catch {\n signal?.throwIfAborted();\n throw new Error(INVALID_RESPONSE);\n }\n if (!record(body) || typeof body.output !== 'string') throw new Error(INVALID_RESPONSE);\n const output = body.output.trim() ? body.output : 'Web search returned no results.';\n // `results` is display-only, so a malformed list is dropped rather than failing the search.\n const results =\n Array.isArray(body.results) && body.results.length <= MAX_RESULTS && body.results.every(record)\n ? body.results\n : undefined;\n return results ? { output, results } : { output };\n },\n };\n}\n"],"mappings":"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"}
@@ -48,7 +48,7 @@ function conversationInput(conversation) {
48
48
  };
49
49
  });
50
50
  }
51
- /** Host-only transport: authentication never crosses the facet boundary. */
51
+ /** Host-only transport: authentication never crosses the package boundary. */
52
52
  function createChatgptWebSearchClient(dependencies) {
53
53
  return { async search(request) {
54
54
  const { signal } = request;