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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1149) hide show
  1. package/LICENSE +149 -21
  2. package/NOTICE +41 -0
  3. package/dist/agentModel.cjs +1 -1
  4. package/dist/agentModel.d.mts +2 -2
  5. package/dist/agentModel.mjs +1 -2
  6. package/dist/apiContracts.cjs +623 -802
  7. package/dist/apiContracts.cjs.map +1 -1
  8. package/dist/apiContracts.d.mts +277 -615
  9. package/dist/apiContracts.d.mts.map +1 -1
  10. package/dist/apiContracts.mjs +617 -794
  11. package/dist/apiContracts.mjs.map +1 -1
  12. package/dist/askUser.cjs +2 -2
  13. package/dist/askUser.d.mts +2 -2
  14. package/dist/askUser.mjs +1 -2
  15. package/dist/authorTools.mjs +1 -2
  16. package/dist/backgroundWork.cjs +3 -3
  17. package/dist/backgroundWork.d.mts +2 -2
  18. package/dist/backgroundWork.mjs +1 -2
  19. package/dist/bundleAssetPolicy.mjs +1 -2
  20. package/dist/chatgptAuth.cjs +3 -2
  21. package/dist/chatgptAuth.d.mts +3 -2
  22. package/dist/chatgptAuth.mjs +2 -1
  23. package/dist/childProcess.cjs +1 -1
  24. package/dist/childProcess.d.mts +2 -2
  25. package/dist/childProcess.mjs +1 -2
  26. package/dist/childSession.cjs +11 -6
  27. package/dist/childSession.d.mts +3 -3
  28. package/dist/childSession.mjs +3 -3
  29. package/dist/cockpitContainer.mjs +1 -2
  30. package/dist/config.cjs +1 -1
  31. package/dist/config.d.mts +3 -3
  32. package/dist/config.mjs +1 -2
  33. package/dist/contextApi.cjs +1 -0
  34. package/dist/contextApi.d.mts +2 -2
  35. package/dist/contextApi.mjs +2 -2
  36. package/dist/contextContributions.cjs +4 -4
  37. package/dist/contextContributions.d.mts +3 -3
  38. package/dist/contextContributions.mjs +3 -3
  39. package/dist/contextDetailStore.cjs +7 -5
  40. package/dist/contextDetailStore.cjs.map +1 -1
  41. package/dist/contextDetailStore.d.mts +2 -1
  42. package/dist/contextDetailStore.d.mts.map +1 -1
  43. package/dist/contextDetailStore.mjs +6 -4
  44. package/dist/contextDetailStore.mjs.map +1 -1
  45. package/dist/contextProjection.cjs +7 -2
  46. package/dist/contextProjection.cjs.map +1 -1
  47. package/dist/contextProjection.d.mts +4 -1
  48. package/dist/contextProjection.d.mts.map +1 -1
  49. package/dist/contextProjection.mjs +5 -2
  50. package/dist/contextProjection.mjs.map +1 -1
  51. package/dist/cordisHost.cjs +11 -11
  52. package/dist/cordisHost.d.mts +2 -2
  53. package/dist/cordisHost.mjs +1 -2
  54. package/dist/delegation.cjs +8 -8
  55. package/dist/delegation.d.mts +2 -2
  56. package/dist/delegation.mjs +1 -2
  57. package/dist/executionBudget.cjs +4 -3
  58. package/dist/executionBudget.cjs.map +1 -1
  59. package/dist/executionBudget.d.mts +2 -2
  60. package/dist/executionBudget.d.mts.map +1 -1
  61. package/dist/executionBudget.mjs +4 -3
  62. package/dist/executionBudget.mjs.map +1 -1
  63. package/dist/extensionFile.cjs +5 -0
  64. package/dist/extensionFile.d.mts +4 -2
  65. package/dist/extensionFile.mjs +4 -2
  66. package/dist/footer.d.mts +2 -2
  67. package/dist/footer.mjs +1 -2
  68. package/dist/headless.cjs +14 -14
  69. package/dist/headless.d.mts +2 -2
  70. package/dist/headless.mjs +1 -2
  71. package/dist/headlessHub.cjs +308 -109
  72. package/dist/headlessHub.cjs.map +1 -1
  73. package/dist/headlessHub.d.mts +71 -36
  74. package/dist/headlessHub.d.mts.map +1 -1
  75. package/dist/headlessHub.mjs +309 -110
  76. package/dist/headlessHub.mjs.map +1 -1
  77. package/dist/headlessProtocol.cjs +327 -0
  78. package/dist/headlessProtocol.cjs.map +1 -0
  79. package/dist/headlessProtocol.d.mts +30 -0
  80. package/dist/headlessProtocol.d.mts.map +1 -0
  81. package/dist/headlessProtocol.mjs +326 -0
  82. package/dist/headlessProtocol.mjs.map +1 -0
  83. package/dist/headlessServer.cjs +166 -151
  84. package/dist/headlessServer.cjs.map +1 -1
  85. package/dist/headlessServer.d.mts +13 -5
  86. package/dist/headlessServer.d.mts.map +1 -1
  87. package/dist/headlessServer.mjs +166 -151
  88. package/dist/headlessServer.mjs.map +1 -1
  89. package/dist/headlessSessionHost.d.mts +58 -21
  90. package/dist/headlessSessionHost.d.mts.map +1 -1
  91. package/dist/help.cjs +20 -20
  92. package/dist/help.d.mts +2 -2
  93. package/dist/help.mjs +2 -2
  94. package/dist/history.cjs +16 -20
  95. package/dist/history.d.mts +9 -7
  96. package/dist/history.mjs +6 -7
  97. package/dist/historyOwnership.cjs.map +1 -1
  98. package/dist/historyOwnership.d.mts +1 -1
  99. package/dist/historyOwnership.mjs.map +1 -1
  100. package/dist/hubChannel.cjs +9 -0
  101. package/dist/hubChannel.d.mts +3 -2
  102. package/dist/hubChannel.mjs +3 -2
  103. package/dist/index.cjs +26 -28
  104. package/dist/index.d.mts +6 -6
  105. package/dist/index.mjs +6 -6
  106. package/dist/interop/chord.mjs +1 -0
  107. package/dist/interop/chordContext.mjs +1 -0
  108. package/dist/json.cjs +11 -5
  109. package/dist/json.d.mts +4 -2
  110. package/dist/json.mjs +4 -2
  111. package/dist/kernel.cjs +1 -1
  112. package/dist/kernel.d.mts +3 -3
  113. package/dist/kernel.mjs +1 -2
  114. package/dist/leader.d.mts +2 -2
  115. package/dist/leader.mjs +1 -2
  116. package/dist/logSinkTelemetry.mjs +1 -2
  117. package/dist/machineApi.cjs +80 -74
  118. package/dist/machineApi.cjs.map +1 -1
  119. package/dist/machineApi.d.mts +5 -2
  120. package/dist/machineApi.d.mts.map +1 -1
  121. package/dist/machineApi.mjs +78 -71
  122. package/dist/machineApi.mjs.map +1 -1
  123. package/dist/main.cjs +2 -1
  124. package/dist/main.d.mts +2 -1
  125. package/dist/main.mjs +2 -1
  126. package/dist/mcpFacet.d.mts +3 -3
  127. package/dist/mcpProjection.cjs +13 -13
  128. package/dist/mcpProjection.d.mts +2 -2
  129. package/dist/mcpProjection.mjs +1 -2
  130. package/dist/mcpSchemaCost.cjs +4 -4
  131. package/dist/mcpSchemaCost.cjs.map +1 -1
  132. package/dist/mcpSchemaCost.d.mts +2 -2
  133. package/dist/mcpSchemaCost.mjs +4 -4
  134. package/dist/mcpSchemaCost.mjs.map +1 -1
  135. package/dist/mcpSession.cjs +7 -7
  136. package/dist/mcpSession.d.mts +2 -2
  137. package/dist/mcpSession.mjs +1 -2
  138. package/dist/mcpStatus.cjs +2 -2
  139. package/dist/mcpStatus.d.mts +2 -2
  140. package/dist/mcpStatus.mjs +1 -2
  141. package/dist/mcpToolResolver.cjs +3 -3
  142. package/dist/mcpToolResolver.d.mts +2 -2
  143. package/dist/mcpToolResolver.mjs +1 -2
  144. package/dist/mcpWidget.d.mts +2 -2
  145. package/dist/moduleResolution.cjs +43 -8
  146. package/dist/moduleResolution.cjs.map +1 -1
  147. package/dist/moduleResolution.d.mts +10 -1
  148. package/dist/moduleResolution.d.mts.map +1 -1
  149. package/dist/moduleResolution.mjs +40 -7
  150. package/dist/moduleResolution.mjs.map +1 -1
  151. package/dist/narration.cjs +3 -3
  152. package/dist/narration.d.mts +2 -2
  153. package/dist/narration.mjs +1 -2
  154. package/dist/native.cjs +9 -0
  155. package/dist/native.d.mts +4 -3
  156. package/dist/native.mjs +3 -2
  157. package/dist/nodePlatform.cjs +77 -0
  158. package/dist/nodePlatform.cjs.map +1 -0
  159. package/dist/nodePlatform.d.mts +17 -0
  160. package/dist/nodePlatform.d.mts.map +1 -0
  161. package/dist/nodePlatform.mjs +72 -0
  162. package/dist/nodePlatform.mjs.map +1 -0
  163. package/dist/notification.cjs +15 -15
  164. package/dist/notification.d.mts +2 -2
  165. package/dist/notification.mjs +1 -2
  166. package/dist/packageApi.cjs +11 -11
  167. package/dist/packageApi.d.mts +2 -2
  168. package/dist/packageApi.mjs +2 -2
  169. package/dist/packageApiServer.cjs +45 -27
  170. package/dist/packageApiServer.cjs.map +1 -1
  171. package/dist/packageApiServer.d.mts +36 -26
  172. package/dist/packageApiServer.d.mts.map +1 -1
  173. package/dist/packageApiServer.mjs +44 -26
  174. package/dist/packageApiServer.mjs.map +1 -1
  175. package/dist/piSettings.cjs +41 -20
  176. package/dist/piSettings.d.mts +4 -2
  177. package/dist/piSettings.mjs +4 -2
  178. package/dist/platform.cjs +62 -0
  179. package/dist/platform.d.mts +10 -0
  180. package/dist/platform.mjs +10 -0
  181. package/dist/pluginProtocol.cjs +7 -8
  182. package/dist/pluginProtocol.d.mts +2 -2
  183. package/dist/pluginProtocol.mjs +1 -2
  184. package/dist/poPackage.cjs +12 -0
  185. package/dist/poPackage.d.mts +3 -0
  186. package/dist/poPackage.mjs +3 -0
  187. package/dist/profileIdentity.cjs +1 -1
  188. package/dist/profileIdentity.d.mts +2 -2
  189. package/dist/profileIdentity.mjs +1 -2
  190. package/dist/protocol.cjs +3 -3
  191. package/dist/protocol.d.mts +2 -2
  192. package/dist/protocol.mjs +1 -2
  193. package/dist/readiness.cjs +6 -6
  194. package/dist/readiness.d.mts +2 -2
  195. package/dist/readiness.mjs +1 -2
  196. package/dist/remoteApi.cjs.map +1 -1
  197. package/dist/remoteApi.d.mts +2 -2
  198. package/dist/remoteApi.mjs.map +1 -1
  199. package/dist/remoteRuntime.cjs +42 -65
  200. package/dist/remoteRuntime.cjs.map +1 -1
  201. package/dist/remoteRuntime.d.mts +3 -2
  202. package/dist/remoteRuntime.d.mts.map +1 -1
  203. package/dist/remoteRuntime.mjs +41 -62
  204. package/dist/remoteRuntime.mjs.map +1 -1
  205. package/dist/runtimeConfig.cjs +4 -4
  206. package/dist/runtimeConfig.cjs.map +1 -1
  207. package/dist/runtimeConfig.d.mts +10 -9
  208. package/dist/runtimeConfig.d.mts.map +1 -1
  209. package/dist/runtimeConfig.mjs +4 -4
  210. package/dist/runtimeConfig.mjs.map +1 -1
  211. package/dist/runtimeContextApi.cjs +10 -3
  212. package/dist/runtimeContextApi.cjs.map +1 -1
  213. package/dist/runtimeContextApi.d.mts +3 -3
  214. package/dist/runtimeContextApi.d.mts.map +1 -1
  215. package/dist/runtimeContextApi.mjs +10 -3
  216. package/dist/runtimeContextApi.mjs.map +1 -1
  217. package/dist/runtimeCordisHost.cjs +46 -46
  218. package/dist/runtimeCordisHost.cjs.map +1 -1
  219. package/dist/runtimeCordisHost.d.mts +29 -28
  220. package/dist/runtimeCordisHost.d.mts.map +1 -1
  221. package/dist/runtimeCordisHost.mjs +42 -42
  222. package/dist/runtimeCordisHost.mjs.map +1 -1
  223. package/dist/runtimeIdentity.cjs +6 -9
  224. package/dist/runtimeIdentity.cjs.map +1 -1
  225. package/dist/runtimeIdentity.d.mts +5 -1
  226. package/dist/runtimeIdentity.d.mts.map +1 -1
  227. package/dist/runtimeIdentity.mjs +5 -8
  228. package/dist/runtimeIdentity.mjs.map +1 -1
  229. package/dist/runtimeJson.cjs +10 -45
  230. package/dist/runtimeJson.d.mts +3 -22
  231. package/dist/runtimeJson.mjs +3 -39
  232. package/dist/runtimeLogSinkTelemetry.cjs +19 -19
  233. package/dist/runtimeLogSinkTelemetry.cjs.map +1 -1
  234. package/dist/runtimeLogSinkTelemetry.d.mts +19 -19
  235. package/dist/runtimeLogSinkTelemetry.mjs +19 -19
  236. package/dist/runtimeLogSinkTelemetry.mjs.map +1 -1
  237. package/dist/runtimePackages.cjs +7 -2
  238. package/dist/runtimePackages.cjs.map +1 -1
  239. package/dist/runtimePackages.d.mts +4 -1
  240. package/dist/runtimePackages.d.mts.map +1 -1
  241. package/dist/runtimePackages.mjs +7 -2
  242. package/dist/runtimePackages.mjs.map +1 -1
  243. package/dist/runtimePiSettings.cjs +40 -263
  244. package/dist/runtimePiSettings.d.mts +3 -72
  245. package/dist/runtimePiSettings.mjs +3 -241
  246. package/dist/runtimeProtocol.cjs +19 -19
  247. package/dist/runtimeProtocol.cjs.map +1 -1
  248. package/dist/runtimeProtocol.d.mts +7 -7
  249. package/dist/runtimeProtocol.d.mts.map +1 -1
  250. package/dist/runtimeProtocol.mjs +17 -17
  251. package/dist/runtimeProtocol.mjs.map +1 -1
  252. package/dist/runtimeTransition.cjs +9 -9
  253. package/dist/runtimeTransition.cjs.map +1 -1
  254. package/dist/runtimeTransition.d.mts +10 -10
  255. package/dist/runtimeTransition.d.mts.map +1 -1
  256. package/dist/runtimeTransition.mjs +7 -7
  257. package/dist/runtimeTransition.mjs.map +1 -1
  258. package/dist/sandboxHarness.mjs +1 -2
  259. package/dist/server.cjs +3 -7
  260. package/dist/server.d.mts +6 -6
  261. package/dist/server.mjs +3 -4
  262. package/dist/serverPlugin.cjs +39 -0
  263. package/dist/serverPlugin.d.mts +12 -0
  264. package/dist/serverPlugin.mjs +11 -0
  265. package/dist/serverTelemetry.cjs +1 -1
  266. package/dist/serverTelemetry.cjs.map +1 -1
  267. package/dist/serverTelemetry.d.mts +2 -2
  268. package/dist/serverTelemetry.mjs +2 -2
  269. package/dist/serverTelemetry.mjs.map +1 -1
  270. package/dist/sessionFilesApi.cjs +41 -37
  271. package/dist/sessionFilesApi.cjs.map +1 -1
  272. package/dist/sessionFilesApi.d.mts +6 -3
  273. package/dist/sessionFilesApi.d.mts.map +1 -1
  274. package/dist/sessionFilesApi.mjs +41 -36
  275. package/dist/sessionFilesApi.mjs.map +1 -1
  276. package/dist/sessionProtocol.cjs +31 -6
  277. package/dist/sessionProtocol.d.mts +8 -3
  278. package/dist/sessionProtocol.mjs +8 -2
  279. package/dist/skills.cjs +5 -5
  280. package/dist/skills.d.mts +2 -2
  281. package/dist/skills.mjs +1 -2
  282. package/dist/sqliteSessionStorage.cjs +28 -50
  283. package/dist/sqliteSessionStorage.cjs.map +1 -1
  284. package/dist/sqliteSessionStorage.d.mts +13 -20
  285. package/dist/sqliteSessionStorage.d.mts.map +1 -1
  286. package/dist/sqliteSessionStorage.mjs +25 -48
  287. package/dist/sqliteSessionStorage.mjs.map +1 -1
  288. package/dist/src/constants/agentSettled.cjs +7 -0
  289. package/dist/src/constants/agentSettled.cjs.map +1 -0
  290. package/dist/src/constants/agentSettled.mjs +7 -0
  291. package/dist/src/constants/agentSettled.mjs.map +1 -0
  292. package/dist/src/constants/contextApi.cjs +3 -1
  293. package/dist/src/constants/contextApi.cjs.map +1 -1
  294. package/dist/src/constants/contextApi.d.mts +2 -1
  295. package/dist/src/constants/contextApi.d.mts.map +1 -1
  296. package/dist/src/constants/contextApi.mjs +3 -2
  297. package/dist/src/constants/contextApi.mjs.map +1 -1
  298. package/dist/src/constants/voiceTools.cjs +6 -6
  299. package/dist/src/constants/voiceTools.cjs.map +1 -1
  300. package/dist/src/constants/voiceTools.d.mts +3 -3
  301. package/dist/src/constants/voiceTools.mjs +4 -4
  302. package/dist/src/constants/voiceTools.mjs.map +1 -1
  303. package/dist/src/extensions/extensionFile.cjs +22 -5
  304. package/dist/src/extensions/extensionFile.cjs.map +1 -1
  305. package/dist/src/extensions/extensionFile.d.mts +17 -4
  306. package/dist/src/extensions/extensionFile.d.mts.map +1 -1
  307. package/dist/src/extensions/extensionFile.mjs +22 -6
  308. package/dist/src/extensions/extensionFile.mjs.map +1 -1
  309. package/dist/src/extensions/serverPlugin.cjs +231 -92
  310. package/dist/src/extensions/serverPlugin.cjs.map +1 -1
  311. package/dist/src/extensions/serverPlugin.d.mts +2 -2
  312. package/dist/src/extensions/serverPlugin.d.mts.map +1 -1
  313. package/dist/src/extensions/serverPlugin.mjs +232 -93
  314. package/dist/src/extensions/serverPlugin.mjs.map +1 -1
  315. package/dist/src/pi/piSessionRuntime.cjs +349 -142
  316. package/dist/src/pi/piSessionRuntime.cjs.map +1 -1
  317. package/dist/src/pi/piSessionRuntime.d.mts +18 -17
  318. package/dist/src/pi/piSessionRuntime.d.mts.map +1 -1
  319. package/dist/src/pi/piSessionRuntime.mjs +342 -135
  320. package/dist/src/pi/piSessionRuntime.mjs.map +1 -1
  321. package/dist/src/schemas/agentModel.cjs +2 -2
  322. package/dist/src/schemas/agentModel.cjs.map +1 -1
  323. package/dist/src/schemas/agentModel.d.mts +1 -1
  324. package/dist/src/schemas/agentModel.mjs +2 -2
  325. package/dist/src/schemas/agentModel.mjs.map +1 -1
  326. package/dist/src/schemas/apiContracts.d.mts +2 -2
  327. package/dist/src/schemas/apiContracts.d.mts.map +1 -1
  328. package/dist/src/schemas/askUser.cjs +4 -4
  329. package/dist/src/schemas/askUser.cjs.map +1 -1
  330. package/dist/src/schemas/askUser.d.mts +4 -4
  331. package/dist/src/schemas/askUser.d.mts.map +1 -1
  332. package/dist/src/schemas/askUser.mjs +3 -3
  333. package/dist/src/schemas/askUser.mjs.map +1 -1
  334. package/dist/src/schemas/backgroundWork.cjs +10 -10
  335. package/dist/src/schemas/backgroundWork.cjs.map +1 -1
  336. package/dist/src/schemas/backgroundWork.d.mts +9 -9
  337. package/dist/src/schemas/backgroundWork.d.mts.map +1 -1
  338. package/dist/src/schemas/backgroundWork.mjs +8 -8
  339. package/dist/src/schemas/backgroundWork.mjs.map +1 -1
  340. package/dist/src/schemas/childProcess.cjs +5 -5
  341. package/dist/src/schemas/childProcess.cjs.map +1 -1
  342. package/dist/src/schemas/childProcess.d.mts +2 -2
  343. package/dist/src/schemas/childProcess.mjs +5 -5
  344. package/dist/src/schemas/childProcess.mjs.map +1 -1
  345. package/dist/src/schemas/contextContributions.cjs +10 -10
  346. package/dist/src/schemas/contextContributions.cjs.map +1 -1
  347. package/dist/src/schemas/contextContributions.d.mts +16 -16
  348. package/dist/src/schemas/contextContributions.d.mts.map +1 -1
  349. package/dist/src/schemas/contextContributions.mjs +8 -8
  350. package/dist/src/schemas/contextContributions.mjs.map +1 -1
  351. package/dist/src/schemas/delegation.cjs +17 -17
  352. package/dist/src/schemas/delegation.cjs.map +1 -1
  353. package/dist/src/schemas/delegation.d.mts +16 -16
  354. package/dist/src/schemas/delegation.d.mts.map +1 -1
  355. package/dist/src/schemas/delegation.mjs +10 -10
  356. package/dist/src/schemas/delegation.mjs.map +1 -1
  357. package/dist/src/schemas/extensionFile.d.mts +23 -19
  358. package/dist/src/schemas/extensionFile.d.mts.map +1 -1
  359. package/dist/src/schemas/footer.cjs.map +1 -1
  360. package/dist/src/schemas/footer.d.mts +5 -5
  361. package/dist/src/schemas/footer.d.mts.map +1 -1
  362. package/dist/src/schemas/footer.mjs.map +1 -1
  363. package/dist/src/schemas/headless.cjs +37 -37
  364. package/dist/src/schemas/headless.cjs.map +1 -1
  365. package/dist/src/schemas/headless.d.mts +100 -101
  366. package/dist/src/schemas/headless.d.mts.map +1 -1
  367. package/dist/src/schemas/headless.mjs +24 -24
  368. package/dist/src/schemas/headless.mjs.map +1 -1
  369. package/dist/src/schemas/help.cjs +60 -60
  370. package/dist/src/schemas/help.cjs.map +1 -1
  371. package/dist/src/schemas/help.d.mts +43 -43
  372. package/dist/src/schemas/help.d.mts.map +1 -1
  373. package/dist/src/schemas/help.mjs +41 -41
  374. package/dist/src/schemas/help.mjs.map +1 -1
  375. package/dist/src/schemas/home.cjs +127 -0
  376. package/dist/src/schemas/home.cjs.map +1 -0
  377. package/dist/src/schemas/home.d.mts +63 -0
  378. package/dist/src/schemas/home.d.mts.map +1 -0
  379. package/dist/src/schemas/home.mjs +121 -0
  380. package/dist/src/schemas/home.mjs.map +1 -0
  381. package/dist/src/schemas/httpApiContracts.cjs +441 -0
  382. package/dist/src/schemas/httpApiContracts.cjs.map +1 -0
  383. package/dist/src/schemas/httpApiContracts.d.mts +78 -0
  384. package/dist/src/schemas/httpApiContracts.d.mts.map +1 -0
  385. package/dist/src/schemas/httpApiContracts.mjs +434 -0
  386. package/dist/src/schemas/httpApiContracts.mjs.map +1 -0
  387. package/dist/src/schemas/hubChannel.cjs +3 -0
  388. package/dist/src/schemas/hubChannel.cjs.map +1 -1
  389. package/dist/src/schemas/hubChannel.d.mts +84 -60
  390. package/dist/src/schemas/hubChannel.d.mts.map +1 -1
  391. package/dist/src/schemas/hubChannel.mjs +3 -1
  392. package/dist/src/schemas/hubChannel.mjs.map +1 -1
  393. package/dist/src/schemas/leader.cjs.map +1 -1
  394. package/dist/src/schemas/leader.d.mts +3 -3
  395. package/dist/src/schemas/leader.d.mts.map +1 -1
  396. package/dist/src/schemas/leader.mjs.map +1 -1
  397. package/dist/src/schemas/mcpBundle.d.mts +3 -3
  398. package/dist/src/schemas/mcpFacet.cjs.map +1 -1
  399. package/dist/src/schemas/mcpFacet.d.mts +22 -22
  400. package/dist/src/schemas/mcpFacet.d.mts.map +1 -1
  401. package/dist/src/schemas/mcpFacet.mjs.map +1 -1
  402. package/dist/src/schemas/mcpProjection.cjs +41 -41
  403. package/dist/src/schemas/mcpProjection.cjs.map +1 -1
  404. package/dist/src/schemas/mcpProjection.d.mts +31 -30
  405. package/dist/src/schemas/mcpProjection.d.mts.map +1 -1
  406. package/dist/src/schemas/mcpProjection.mjs +29 -29
  407. package/dist/src/schemas/mcpProjection.mjs.map +1 -1
  408. package/dist/src/schemas/mcpSession.cjs +23 -23
  409. package/dist/src/schemas/mcpSession.cjs.map +1 -1
  410. package/dist/src/schemas/mcpSession.d.mts +12 -12
  411. package/dist/src/schemas/mcpSession.d.mts.map +1 -1
  412. package/dist/src/schemas/mcpSession.mjs +18 -18
  413. package/dist/src/schemas/mcpSession.mjs.map +1 -1
  414. package/dist/src/schemas/mcpStatus.cjs +5 -5
  415. package/dist/src/schemas/mcpStatus.cjs.map +1 -1
  416. package/dist/src/schemas/mcpStatus.d.mts +4 -4
  417. package/dist/src/schemas/mcpStatus.d.mts.map +1 -1
  418. package/dist/src/schemas/mcpStatus.mjs +4 -4
  419. package/dist/src/schemas/mcpStatus.mjs.map +1 -1
  420. package/dist/src/schemas/mcpToolResolver.cjs +9 -9
  421. package/dist/src/schemas/mcpToolResolver.cjs.map +1 -1
  422. package/dist/src/schemas/mcpToolResolver.d.mts +7 -7
  423. package/dist/src/schemas/mcpToolResolver.d.mts.map +1 -1
  424. package/dist/src/schemas/mcpToolResolver.mjs +7 -7
  425. package/dist/src/schemas/mcpToolResolver.mjs.map +1 -1
  426. package/dist/src/schemas/narration.cjs +9 -9
  427. package/dist/src/schemas/narration.cjs.map +1 -1
  428. package/dist/src/schemas/narration.d.mts +5 -5
  429. package/dist/src/schemas/narration.d.mts.map +1 -1
  430. package/dist/src/schemas/narration.mjs +7 -7
  431. package/dist/src/schemas/narration.mjs.map +1 -1
  432. package/dist/src/schemas/notification.cjs +45 -45
  433. package/dist/src/schemas/notification.cjs.map +1 -1
  434. package/dist/src/schemas/notification.d.mts +22 -22
  435. package/dist/src/schemas/notification.d.mts.map +1 -1
  436. package/dist/src/schemas/notification.mjs +31 -31
  437. package/dist/src/schemas/notification.mjs.map +1 -1
  438. package/dist/src/schemas/packageApi.cjs +28 -28
  439. package/dist/src/schemas/packageApi.cjs.map +1 -1
  440. package/dist/src/schemas/packageApi.d.mts +91 -65
  441. package/dist/src/schemas/packageApi.d.mts.map +1 -1
  442. package/dist/src/schemas/packageApi.mjs +18 -18
  443. package/dist/src/schemas/packageApi.mjs.map +1 -1
  444. package/dist/src/schemas/platform.cjs +34 -0
  445. package/dist/src/schemas/platform.cjs.map +1 -0
  446. package/dist/src/schemas/platform.d.mts +75 -0
  447. package/dist/src/schemas/platform.d.mts.map +1 -0
  448. package/dist/src/schemas/platform.mjs +27 -0
  449. package/dist/src/schemas/platform.mjs.map +1 -0
  450. package/dist/src/schemas/pluginContributions.cjs.map +1 -1
  451. package/dist/src/schemas/pluginContributions.d.mts +12 -12
  452. package/dist/src/schemas/pluginContributions.d.mts.map +1 -1
  453. package/dist/src/schemas/pluginContributions.mjs.map +1 -1
  454. package/dist/src/schemas/pluginProtocol.cjs +24 -27
  455. package/dist/src/schemas/pluginProtocol.cjs.map +1 -1
  456. package/dist/src/schemas/pluginProtocol.d.mts +21 -21
  457. package/dist/src/schemas/pluginProtocol.d.mts.map +1 -1
  458. package/dist/src/schemas/pluginProtocol.mjs +18 -20
  459. package/dist/src/schemas/pluginProtocol.mjs.map +1 -1
  460. package/dist/src/schemas/profileIdentity.cjs +2 -2
  461. package/dist/src/schemas/profileIdentity.cjs.map +1 -1
  462. package/dist/src/schemas/profileIdentity.d.mts +1 -1
  463. package/dist/src/schemas/profileIdentity.mjs +2 -2
  464. package/dist/src/schemas/profileIdentity.mjs.map +1 -1
  465. package/dist/src/schemas/protocolChannelsContract.cjs +27 -0
  466. package/dist/src/schemas/protocolChannelsContract.cjs.map +1 -0
  467. package/dist/src/schemas/protocolChannelsContract.d.mts +37 -0
  468. package/dist/src/schemas/protocolChannelsContract.d.mts.map +1 -0
  469. package/dist/src/schemas/protocolChannelsContract.mjs +25 -0
  470. package/dist/src/schemas/protocolChannelsContract.mjs.map +1 -0
  471. package/dist/src/schemas/protocolContracts.cjs +168 -0
  472. package/dist/src/schemas/protocolContracts.cjs.map +1 -0
  473. package/dist/src/schemas/protocolContracts.d.mts +69 -0
  474. package/dist/src/schemas/protocolContracts.d.mts.map +1 -0
  475. package/dist/src/schemas/protocolContracts.mjs +164 -0
  476. package/dist/src/schemas/protocolContracts.mjs.map +1 -0
  477. package/dist/src/schemas/protocolHubContract.cjs +51 -0
  478. package/dist/src/schemas/protocolHubContract.cjs.map +1 -0
  479. package/dist/src/schemas/protocolHubContract.d.mts +218 -0
  480. package/dist/src/schemas/protocolHubContract.d.mts.map +1 -0
  481. package/dist/src/schemas/protocolHubContract.mjs +49 -0
  482. package/dist/src/schemas/protocolHubContract.mjs.map +1 -0
  483. package/dist/src/schemas/protocolSessionContract.cjs +22 -0
  484. package/dist/src/schemas/protocolSessionContract.cjs.map +1 -0
  485. package/dist/src/schemas/protocolSessionContract.d.mts +324 -0
  486. package/dist/src/schemas/protocolSessionContract.d.mts.map +1 -0
  487. package/dist/src/schemas/protocolSessionContract.mjs +22 -0
  488. package/dist/src/schemas/protocolSessionContract.mjs.map +1 -0
  489. package/dist/src/schemas/protocolThreadContract.cjs +21 -0
  490. package/dist/src/schemas/protocolThreadContract.cjs.map +1 -0
  491. package/dist/src/schemas/protocolThreadContract.d.mts +29 -0
  492. package/dist/src/schemas/protocolThreadContract.d.mts.map +1 -0
  493. package/dist/src/schemas/protocolThreadContract.mjs +20 -0
  494. package/dist/src/schemas/protocolThreadContract.mjs.map +1 -0
  495. package/dist/src/schemas/readiness.cjs +36 -36
  496. package/dist/src/schemas/readiness.cjs.map +1 -1
  497. package/dist/src/schemas/readiness.d.mts +37 -37
  498. package/dist/src/schemas/readiness.d.mts.map +1 -1
  499. package/dist/src/schemas/readiness.mjs +31 -31
  500. package/dist/src/schemas/readiness.mjs.map +1 -1
  501. package/dist/src/schemas/serverBundle.d.mts +5 -5
  502. package/dist/src/schemas/serverPlugin.cjs +103 -0
  503. package/dist/src/schemas/serverPlugin.cjs.map +1 -0
  504. package/dist/src/schemas/serverPlugin.d.mts +176 -0
  505. package/dist/src/schemas/serverPlugin.d.mts.map +1 -0
  506. package/dist/src/schemas/serverPlugin.mjs +95 -0
  507. package/dist/src/schemas/serverPlugin.mjs.map +1 -0
  508. package/dist/src/schemas/serverScope.cjs +37 -0
  509. package/dist/src/schemas/serverScope.cjs.map +1 -0
  510. package/dist/src/schemas/serverScope.d.mts +77 -0
  511. package/dist/src/schemas/serverScope.d.mts.map +1 -0
  512. package/dist/src/schemas/serverScope.mjs +33 -0
  513. package/dist/src/schemas/serverScope.mjs.map +1 -0
  514. package/dist/src/schemas/sessionApiContracts.cjs +320 -0
  515. package/dist/src/schemas/sessionApiContracts.cjs.map +1 -0
  516. package/dist/src/schemas/sessionApiContracts.mjs +318 -0
  517. package/dist/src/schemas/sessionApiContracts.mjs.map +1 -0
  518. package/dist/src/schemas/sessionProtocol.cjs +20 -13
  519. package/dist/src/schemas/sessionProtocol.cjs.map +1 -1
  520. package/dist/src/schemas/sessionProtocol.d.mts +37 -54
  521. package/dist/src/schemas/sessionProtocol.d.mts.map +1 -1
  522. package/dist/src/schemas/sessionProtocol.mjs +17 -8
  523. package/dist/src/schemas/sessionProtocol.mjs.map +1 -1
  524. package/dist/src/schemas/skills.cjs +16 -16
  525. package/dist/src/schemas/skills.cjs.map +1 -1
  526. package/dist/src/schemas/skills.d.mts +7 -7
  527. package/dist/src/schemas/skills.d.mts.map +1 -1
  528. package/dist/src/schemas/skills.mjs +12 -12
  529. package/dist/src/schemas/skills.mjs.map +1 -1
  530. package/dist/src/schemas/toolOverrides.cjs +9 -9
  531. package/dist/src/schemas/toolOverrides.cjs.map +1 -1
  532. package/dist/src/schemas/toolOverrides.d.mts +8 -8
  533. package/dist/src/schemas/toolOverrides.d.mts.map +1 -1
  534. package/dist/src/schemas/toolOverrides.mjs +7 -7
  535. package/dist/src/schemas/toolOverrides.mjs.map +1 -1
  536. package/dist/src/schemas/toolSurface.cjs +9 -9
  537. package/dist/src/schemas/toolSurface.cjs.map +1 -1
  538. package/dist/src/schemas/toolSurface.d.mts +13 -13
  539. package/dist/src/schemas/toolSurface.d.mts.map +1 -1
  540. package/dist/src/schemas/toolSurface.mjs +7 -7
  541. package/dist/src/schemas/toolSurface.mjs.map +1 -1
  542. package/dist/src/schemas/uiHub.cjs +9 -9
  543. package/dist/src/schemas/uiHub.cjs.map +1 -1
  544. package/dist/src/schemas/uiHub.d.mts +12 -12
  545. package/dist/src/schemas/uiHub.d.mts.map +1 -1
  546. package/dist/src/schemas/uiHub.mjs +7 -7
  547. package/dist/src/schemas/uiHub.mjs.map +1 -1
  548. package/dist/src/server/directHarnessRuntime.cjs +691 -775
  549. package/dist/src/server/directHarnessRuntime.cjs.map +1 -1
  550. package/dist/src/server/directHarnessRuntime.d.mts +5 -1
  551. package/dist/src/server/directHarnessRuntime.d.mts.map +1 -0
  552. package/dist/src/server/directHarnessRuntime.mjs +671 -754
  553. package/dist/src/server/directHarnessRuntime.mjs.map +1 -1
  554. package/dist/src/server/largeFrameLink.cjs +47 -0
  555. package/dist/src/server/largeFrameLink.cjs.map +1 -0
  556. package/dist/src/server/largeFrameLink.mjs +47 -0
  557. package/dist/src/server/largeFrameLink.mjs.map +1 -0
  558. package/dist/src/server/liveImport.cjs +1 -1
  559. package/dist/src/server/liveImport.cjs.map +1 -1
  560. package/dist/src/server/liveImport.d.mts +1 -1
  561. package/dist/src/server/liveImport.mjs +1 -1
  562. package/dist/src/server/liveImport.mjs.map +1 -1
  563. package/dist/src/server/mcpBundleLoader.cjs.map +1 -1
  564. package/dist/src/server/mcpBundleLoader.d.mts +6 -6
  565. package/dist/src/server/mcpBundleLoader.d.mts.map +1 -1
  566. package/dist/src/server/mcpBundleLoader.mjs.map +1 -1
  567. package/dist/src/server/serverPackages.cjs +60 -0
  568. package/dist/src/server/serverPackages.cjs.map +1 -0
  569. package/dist/src/server/serverPackages.d.mts +44 -0
  570. package/dist/src/server/serverPackages.d.mts.map +1 -0
  571. package/dist/src/server/serverPackages.mjs +59 -0
  572. package/dist/src/server/serverPackages.mjs.map +1 -0
  573. package/dist/src/server/serverScope.cjs +510 -0
  574. package/dist/src/server/serverScope.cjs.map +1 -0
  575. package/dist/src/server/serverScope.d.mts +123 -0
  576. package/dist/src/server/serverScope.d.mts.map +1 -0
  577. package/dist/src/server/serverScope.mjs +510 -0
  578. package/dist/src/server/serverScope.mjs.map +1 -0
  579. package/dist/src/server/sessionMcpHandler.cjs +3 -3
  580. package/dist/src/server/sessionMcpHandler.cjs.map +1 -1
  581. package/dist/src/server/sessionMcpHandler.mjs +4 -4
  582. package/dist/src/server/sessionMcpHandler.mjs.map +1 -1
  583. package/dist/src/server/sessionMcpRoutes.cjs +2 -1
  584. package/dist/src/server/sessionMcpRoutes.cjs.map +1 -1
  585. package/dist/src/server/sessionMcpRoutes.mjs +2 -1
  586. package/dist/src/server/sessionMcpRoutes.mjs.map +1 -1
  587. package/dist/src/server/threadJournals.cjs +38 -107
  588. package/dist/src/server/threadJournals.cjs.map +1 -1
  589. package/dist/src/server/threadJournals.mjs +38 -104
  590. package/dist/src/server/threadJournals.mjs.map +1 -1
  591. package/dist/src/services/apiSurfaceAssert/index.cjs +1 -1
  592. package/dist/src/services/apiSurfaceAssert/index.cjs.map +1 -1
  593. package/dist/src/services/apiSurfaceAssert/index.d.mts +6 -6
  594. package/dist/src/services/apiSurfaceAssert/index.mjs +1 -1
  595. package/dist/src/services/apiSurfaceAssert/index.mjs.map +1 -1
  596. package/dist/src/services/chatgptAuth/index.cjs +1 -220
  597. package/dist/src/services/chatgptAuth/index.cjs.map +1 -1
  598. package/dist/src/services/chatgptAuth/index.d.mts +0 -18
  599. package/dist/src/services/chatgptAuth/index.d.mts.map +1 -1
  600. package/dist/src/services/chatgptAuth/index.mjs +1 -217
  601. package/dist/src/services/chatgptAuth/index.mjs.map +1 -1
  602. package/dist/src/services/chatgptImages/index.cjs +1 -1
  603. package/dist/src/services/chatgptImages/index.cjs.map +1 -1
  604. package/dist/src/services/chatgptImages/index.mjs +1 -1
  605. package/dist/src/services/chatgptImages/index.mjs.map +1 -1
  606. package/dist/src/services/chatgptLogin/index.cjs +230 -0
  607. package/dist/src/services/chatgptLogin/index.cjs.map +1 -0
  608. package/dist/src/services/chatgptLogin/index.d.mts +21 -0
  609. package/dist/src/services/chatgptLogin/index.d.mts.map +1 -0
  610. package/dist/src/services/chatgptLogin/index.mjs +227 -0
  611. package/dist/src/services/chatgptLogin/index.mjs.map +1 -0
  612. package/dist/src/services/chatgptWebSearch/index.cjs +1 -1
  613. package/dist/src/services/chatgptWebSearch/index.cjs.map +1 -1
  614. package/dist/src/services/chatgptWebSearch/index.mjs +1 -1
  615. package/dist/src/services/chatgptWebSearch/index.mjs.map +1 -1
  616. package/dist/src/services/contextContributions/index.cjs +8 -8
  617. package/dist/src/services/contextContributions/index.cjs.map +1 -1
  618. package/dist/src/services/contextContributions/index.d.mts +3 -3
  619. package/dist/src/services/contextContributions/index.d.mts.map +1 -1
  620. package/dist/src/services/contextContributions/index.mjs +8 -8
  621. package/dist/src/services/contextContributions/index.mjs.map +1 -1
  622. package/dist/src/services/devProxyStore/devProxyRecords.cjs +59 -0
  623. package/dist/src/services/devProxyStore/devProxyRecords.cjs.map +1 -0
  624. package/dist/src/services/devProxyStore/devProxyRecords.mjs +56 -0
  625. package/dist/src/services/devProxyStore/devProxyRecords.mjs.map +1 -0
  626. package/dist/src/services/devProxyStore/index.cjs +7 -101
  627. package/dist/src/services/devProxyStore/index.cjs.map +1 -1
  628. package/dist/src/services/devProxyStore/index.mjs +7 -101
  629. package/dist/src/services/devProxyStore/index.mjs.map +1 -1
  630. package/dist/src/services/devProxyStore/sync.cjs +66 -0
  631. package/dist/src/services/devProxyStore/sync.cjs.map +1 -0
  632. package/dist/src/services/devProxyStore/sync.mjs +63 -0
  633. package/dist/src/services/devProxyStore/sync.mjs.map +1 -0
  634. package/dist/src/services/durableNavigation/docs.cjs +15 -0
  635. package/dist/src/services/durableNavigation/docs.cjs.map +1 -0
  636. package/dist/src/services/durableNavigation/docs.mjs +16 -0
  637. package/dist/src/services/durableNavigation/docs.mjs.map +1 -0
  638. package/dist/src/services/durableNavigation/index.cjs +3 -18
  639. package/dist/src/services/durableNavigation/index.cjs.map +1 -1
  640. package/dist/src/services/durableNavigation/index.mjs +2 -17
  641. package/dist/src/services/durableNavigation/index.mjs.map +1 -1
  642. package/dist/src/services/durableQueue/docs.cjs +12 -0
  643. package/dist/src/services/durableQueue/docs.cjs.map +1 -0
  644. package/dist/src/services/durableQueue/docs.mjs +13 -0
  645. package/dist/src/services/durableQueue/docs.mjs.map +1 -0
  646. package/dist/src/services/durableQueue/index.cjs +151 -0
  647. package/dist/src/services/durableQueue/index.cjs.map +1 -0
  648. package/dist/src/services/durableQueue/index.mjs +149 -0
  649. package/dist/src/services/durableQueue/index.mjs.map +1 -0
  650. package/dist/src/services/durableRequestReceipts/docs.cjs +11 -0
  651. package/dist/src/services/durableRequestReceipts/docs.cjs.map +1 -0
  652. package/dist/src/services/durableRequestReceipts/docs.mjs +12 -0
  653. package/dist/src/services/durableRequestReceipts/docs.mjs.map +1 -0
  654. package/dist/src/services/{requestReceipts → durableRequestReceipts}/index.cjs +10 -16
  655. package/dist/src/services/durableRequestReceipts/index.cjs.map +1 -0
  656. package/dist/src/services/durableRequestReceipts/index.d.mts +12 -0
  657. package/dist/src/services/durableRequestReceipts/index.d.mts.map +1 -0
  658. package/dist/src/services/{requestReceipts → durableRequestReceipts}/index.mjs +7 -13
  659. package/dist/src/services/durableRequestReceipts/index.mjs.map +1 -0
  660. package/dist/src/services/durableSession/docs.cjs +65 -0
  661. package/dist/src/services/durableSession/docs.cjs.map +1 -0
  662. package/dist/src/services/durableSession/docs.d.mts +17 -0
  663. package/dist/src/services/durableSession/docs.d.mts.map +1 -0
  664. package/dist/src/services/durableSession/docs.mjs +60 -0
  665. package/dist/src/services/durableSession/docs.mjs.map +1 -0
  666. package/dist/src/services/durableSession/index.cjs +21 -0
  667. package/dist/src/services/durableSession/index.cjs.map +1 -0
  668. package/dist/src/services/durableSession/index.d.mts +13 -0
  669. package/dist/src/services/durableSession/index.d.mts.map +1 -0
  670. package/dist/src/services/durableSession/index.mjs +20 -0
  671. package/dist/src/services/durableSession/index.mjs.map +1 -0
  672. package/dist/src/services/durableSubagents/docs.cjs +15 -0
  673. package/dist/src/services/durableSubagents/docs.cjs.map +1 -0
  674. package/dist/src/services/durableSubagents/docs.mjs +16 -0
  675. package/dist/src/services/durableSubagents/docs.mjs.map +1 -0
  676. package/dist/src/services/durableSubagents/extension.cjs +11 -0
  677. package/dist/src/services/durableSubagents/extension.cjs.map +1 -0
  678. package/dist/src/services/durableSubagents/extension.mjs +12 -0
  679. package/dist/src/services/durableSubagents/extension.mjs.map +1 -0
  680. package/dist/src/services/durableSubagents/index.cjs +95 -0
  681. package/dist/src/services/durableSubagents/index.cjs.map +1 -0
  682. package/dist/src/services/durableSubagents/index.mjs +90 -0
  683. package/dist/src/services/durableSubagents/index.mjs.map +1 -0
  684. package/dist/src/services/durableSubagents/tasks.cjs +25 -0
  685. package/dist/src/services/durableSubagents/tasks.cjs.map +1 -0
  686. package/dist/src/services/durableSubagents/tasks.mjs +26 -0
  687. package/dist/src/services/durableSubagents/tasks.mjs.map +1 -0
  688. package/dist/src/services/headlessClient/index.cjs +20 -13
  689. package/dist/src/services/headlessClient/index.cjs.map +1 -1
  690. package/dist/src/services/headlessClient/index.mjs +21 -14
  691. package/dist/src/services/headlessClient/index.mjs.map +1 -1
  692. package/dist/src/services/historyOwnership/type.d.mts +15 -0
  693. package/dist/src/services/historyOwnership/type.d.mts.map +1 -0
  694. package/dist/src/services/hubChannelHarness/index.cjs +2 -2
  695. package/dist/src/services/hubChannelHarness/index.cjs.map +1 -1
  696. package/dist/src/services/hubChannelHarness/index.d.mts +8 -8
  697. package/dist/src/services/hubChannelHarness/index.d.mts.map +1 -1
  698. package/dist/src/services/hubChannelHarness/index.mjs +2 -2
  699. package/dist/src/services/hubChannelHarness/index.mjs.map +1 -1
  700. package/dist/src/services/json/core.cjs +30 -0
  701. package/dist/src/services/json/core.cjs.map +1 -0
  702. package/dist/src/services/json/core.d.mts +21 -0
  703. package/dist/src/services/json/core.d.mts.map +1 -0
  704. package/dist/src/services/json/core.mjs +26 -0
  705. package/dist/src/services/json/core.mjs.map +1 -0
  706. package/dist/src/services/json/sync.cjs +48 -0
  707. package/dist/src/services/json/sync.cjs.map +1 -0
  708. package/dist/src/services/json/sync.d.mts +22 -0
  709. package/dist/src/services/json/sync.d.mts.map +1 -0
  710. package/dist/src/services/json/sync.mjs +43 -0
  711. package/dist/src/services/json/sync.mjs.map +1 -0
  712. package/dist/src/services/kernel/index.cjs +2 -2
  713. package/dist/src/services/kernel/index.cjs.map +1 -1
  714. package/dist/src/services/kernel/index.d.mts +3 -3
  715. package/dist/src/services/kernel/index.d.mts.map +1 -1
  716. package/dist/src/services/kernel/index.mjs +2 -2
  717. package/dist/src/services/kernel/index.mjs.map +1 -1
  718. package/dist/src/services/nativeChildTools/index.cjs +16 -0
  719. package/dist/src/services/nativeChildTools/index.cjs.map +1 -0
  720. package/dist/src/services/nativeChildTools/index.mjs +16 -0
  721. package/dist/src/services/nativeChildTools/index.mjs.map +1 -0
  722. package/dist/src/services/nodeHost/index.cjs +30 -0
  723. package/dist/src/services/nodeHost/index.cjs.map +1 -0
  724. package/dist/src/services/nodeHost/index.d.mts +16 -0
  725. package/dist/src/services/nodeHost/index.d.mts.map +1 -0
  726. package/dist/src/services/nodeHost/index.mjs +27 -0
  727. package/dist/src/services/nodeHost/index.mjs.map +1 -0
  728. package/dist/src/services/nodeModelDependencies/index.cjs +89 -0
  729. package/dist/src/services/nodeModelDependencies/index.cjs.map +1 -0
  730. package/dist/src/services/nodeModelDependencies/index.mjs +86 -0
  731. package/dist/src/services/nodeModelDependencies/index.mjs.map +1 -0
  732. package/dist/src/services/openSessionRegistry/index.cjs +6 -128
  733. package/dist/src/services/openSessionRegistry/index.cjs.map +1 -1
  734. package/dist/src/services/openSessionRegistry/index.d.mts +5 -36
  735. package/dist/src/services/openSessionRegistry/index.mjs +6 -128
  736. package/dist/src/services/openSessionRegistry/index.mjs.map +1 -1
  737. package/dist/src/services/openSessionRegistry/openSessionRecords.cjs +87 -0
  738. package/dist/src/services/openSessionRegistry/openSessionRecords.cjs.map +1 -0
  739. package/dist/src/services/openSessionRegistry/openSessionRecords.d.mts +30 -0
  740. package/dist/src/services/openSessionRegistry/openSessionRecords.d.mts.map +1 -0
  741. package/dist/src/services/openSessionRegistry/openSessionRecords.mjs +81 -0
  742. package/dist/src/services/openSessionRegistry/openSessionRecords.mjs.map +1 -0
  743. package/dist/src/services/openSessionRegistry/sync.cjs +71 -0
  744. package/dist/src/services/openSessionRegistry/sync.cjs.map +1 -0
  745. package/dist/src/services/openSessionRegistry/sync.d.mts +14 -0
  746. package/dist/src/services/openSessionRegistry/sync.d.mts.map +1 -0
  747. package/dist/src/services/openSessionRegistry/sync.mjs +68 -0
  748. package/dist/src/services/openSessionRegistry/sync.mjs.map +1 -0
  749. package/dist/src/services/packageApiHarness/index.cjs +1 -1
  750. package/dist/src/services/packageApiHarness/index.cjs.map +1 -1
  751. package/dist/src/services/packageApiHarness/index.d.mts +6 -6
  752. package/dist/src/services/packageApiHarness/index.d.mts.map +1 -1
  753. package/dist/src/services/packageApiHarness/index.mjs +2 -2
  754. package/dist/src/services/packageApiHarness/index.mjs.map +1 -1
  755. package/dist/src/services/piArgs/index.cjs +53 -0
  756. package/dist/src/services/piArgs/index.cjs.map +1 -0
  757. package/dist/src/services/piArgs/index.d.mts +6 -0
  758. package/dist/src/services/piArgs/index.d.mts.map +1 -0
  759. package/dist/src/services/piArgs/index.mjs +53 -0
  760. package/dist/src/services/piArgs/index.mjs.map +1 -0
  761. package/dist/src/services/piExtensionHost/index.cjs +47 -39
  762. package/dist/src/services/piExtensionHost/index.cjs.map +1 -1
  763. package/dist/src/services/piExtensionHost/index.d.mts +83 -0
  764. package/dist/src/services/piExtensionHost/index.d.mts.map +1 -0
  765. package/dist/src/services/piExtensionHost/index.mjs +47 -38
  766. package/dist/src/services/piExtensionHost/index.mjs.map +1 -1
  767. package/dist/src/services/piHelpTools/index.cjs +5 -5
  768. package/dist/src/services/piHelpTools/index.cjs.map +1 -1
  769. package/dist/src/services/piHelpTools/index.d.mts.map +1 -1
  770. package/dist/src/services/piHelpTools/index.mjs +7 -7
  771. package/dist/src/services/piHelpTools/index.mjs.map +1 -1
  772. package/dist/src/services/piMessages/index.cjs +106 -0
  773. package/dist/src/services/piMessages/index.cjs.map +1 -0
  774. package/dist/src/services/piMessages/index.mjs +105 -0
  775. package/dist/src/services/piMessages/index.mjs.map +1 -0
  776. package/dist/src/services/piSessionEntries/index.cjs +4 -4
  777. package/dist/src/services/piSessionEntries/index.cjs.map +1 -1
  778. package/dist/src/services/piSessionEntries/index.mjs +3 -3
  779. package/dist/src/services/piSessionEntries/index.mjs.map +1 -1
  780. package/dist/src/services/piSettings/core.cjs +308 -0
  781. package/dist/src/services/piSettings/core.cjs.map +1 -0
  782. package/dist/src/services/piSettings/core.d.mts +102 -0
  783. package/dist/src/services/piSettings/core.d.mts.map +1 -0
  784. package/dist/src/services/piSettings/core.mjs +276 -0
  785. package/dist/src/services/piSettings/core.mjs.map +1 -0
  786. package/dist/src/services/piSettings/sync.cjs +119 -0
  787. package/dist/src/services/piSettings/sync.cjs.map +1 -0
  788. package/dist/src/services/piSettings/sync.d.mts +44 -0
  789. package/dist/src/services/piSettings/sync.d.mts.map +1 -0
  790. package/dist/src/services/piSettings/sync.mjs +110 -0
  791. package/dist/src/services/piSettings/sync.mjs.map +1 -0
  792. package/dist/src/services/piSummary/index.cjs +7 -0
  793. package/dist/src/services/piSummary/index.cjs.map +1 -0
  794. package/dist/src/services/piSummary/index.mjs +7 -0
  795. package/dist/src/services/piSummary/index.mjs.map +1 -0
  796. package/dist/src/services/platformFiles/index.cjs +44 -0
  797. package/dist/src/services/platformFiles/index.cjs.map +1 -0
  798. package/dist/src/services/platformFiles/index.d.mts +16 -0
  799. package/dist/src/services/platformFiles/index.d.mts.map +1 -0
  800. package/dist/src/services/platformFiles/index.mjs +39 -0
  801. package/dist/src/services/platformFiles/index.mjs.map +1 -0
  802. package/dist/src/services/pluginLifecycle/index.cjs +19 -13
  803. package/dist/src/services/pluginLifecycle/index.cjs.map +1 -1
  804. package/dist/src/services/pluginLifecycle/index.d.mts +2 -0
  805. package/dist/src/services/pluginLifecycle/index.d.mts.map +1 -1
  806. package/dist/src/services/pluginLifecycle/index.mjs +19 -14
  807. package/dist/src/services/pluginLifecycle/index.mjs.map +1 -1
  808. package/dist/src/services/poPackage/core.cjs +73 -0
  809. package/dist/src/services/poPackage/core.cjs.map +1 -0
  810. package/dist/src/services/poPackage/core.d.mts +32 -0
  811. package/dist/src/services/poPackage/core.d.mts.map +1 -0
  812. package/dist/src/services/poPackage/core.mjs +66 -0
  813. package/dist/src/services/poPackage/core.mjs.map +1 -0
  814. package/dist/src/services/poPackage/sync.cjs +55 -0
  815. package/dist/src/services/poPackage/sync.cjs.map +1 -0
  816. package/dist/src/services/poPackage/sync.d.mts +21 -0
  817. package/dist/src/services/poPackage/sync.d.mts.map +1 -0
  818. package/dist/src/services/poPackage/sync.mjs +50 -0
  819. package/dist/src/services/poPackage/sync.mjs.map +1 -0
  820. package/dist/src/services/providerAuth/index.cjs +11 -7
  821. package/dist/src/services/providerAuth/index.cjs.map +1 -1
  822. package/dist/src/services/providerAuth/index.mjs +11 -7
  823. package/dist/src/services/providerAuth/index.mjs.map +1 -1
  824. package/dist/src/services/publicFileShares/index.cjs +1 -1
  825. package/dist/src/services/publicFileShares/index.cjs.map +1 -1
  826. package/dist/src/services/publicFileShares/index.d.mts +2 -2
  827. package/dist/src/services/publicFileShares/index.mjs +2 -2
  828. package/dist/src/services/publicFileShares/index.mjs.map +1 -1
  829. package/dist/src/services/remoteAccess/index.d.mts +1 -0
  830. package/dist/src/services/remoteAccess/index.d.mts.map +1 -1
  831. package/dist/src/services/remoteAccessStore/index.cjs +8 -190
  832. package/dist/src/services/remoteAccessStore/index.cjs.map +1 -1
  833. package/dist/src/services/remoteAccessStore/index.d.mts +2 -0
  834. package/dist/src/services/remoteAccessStore/index.mjs +7 -187
  835. package/dist/src/services/remoteAccessStore/index.mjs.map +1 -1
  836. package/dist/src/services/remoteAccessStore/remoteAccessRecords.cjs +98 -0
  837. package/dist/src/services/remoteAccessStore/remoteAccessRecords.cjs.map +1 -0
  838. package/dist/src/services/remoteAccessStore/remoteAccessRecords.mjs +88 -0
  839. package/dist/src/services/remoteAccessStore/remoteAccessRecords.mjs.map +1 -0
  840. package/dist/src/services/remoteAccessStore/sync.cjs +111 -0
  841. package/dist/src/services/remoteAccessStore/sync.cjs.map +1 -0
  842. package/dist/src/services/remoteAccessStore/sync.mjs +108 -0
  843. package/dist/src/services/remoteAccessStore/sync.mjs.map +1 -0
  844. package/dist/src/services/runtimeIdentity/sync.cjs +23 -0
  845. package/dist/src/services/runtimeIdentity/sync.cjs.map +1 -0
  846. package/dist/src/services/runtimeIdentity/sync.d.mts +9 -0
  847. package/dist/src/services/runtimeIdentity/sync.d.mts.map +1 -0
  848. package/dist/src/services/runtimeIdentity/sync.mjs +20 -0
  849. package/dist/src/services/runtimeIdentity/sync.mjs.map +1 -0
  850. package/dist/src/services/serialRunner/index.cjs +25 -0
  851. package/dist/src/services/serialRunner/index.cjs.map +1 -0
  852. package/dist/src/services/serialRunner/index.d.mts +10 -0
  853. package/dist/src/services/serialRunner/index.d.mts.map +1 -0
  854. package/dist/src/services/serialRunner/index.mjs +25 -0
  855. package/dist/src/services/serialRunner/index.mjs.map +1 -0
  856. package/dist/src/services/{serverFacet → serverHost}/index.cjs +5 -5
  857. package/dist/src/services/serverHost/index.cjs.map +1 -0
  858. package/dist/src/services/serverHost/index.d.mts +31 -0
  859. package/dist/src/services/serverHost/index.d.mts.map +1 -0
  860. package/dist/src/services/{serverFacet → serverHost}/index.mjs +5 -5
  861. package/dist/src/services/serverHost/index.mjs.map +1 -0
  862. package/dist/src/services/sessionAttachments/index.cjs +4 -3
  863. package/dist/src/services/sessionAttachments/index.cjs.map +1 -1
  864. package/dist/src/services/sessionAttachments/index.d.mts +1 -6
  865. package/dist/src/services/sessionAttachments/index.d.mts.map +1 -1
  866. package/dist/src/services/sessionAttachments/index.mjs +3 -2
  867. package/dist/src/services/sessionAttachments/index.mjs.map +1 -1
  868. package/dist/src/services/sessionAttachments/type.d.mts +9 -0
  869. package/dist/src/services/sessionAttachments/type.d.mts.map +1 -0
  870. package/dist/src/services/sessionFiles/index.cjs +96 -0
  871. package/dist/src/services/sessionFiles/index.cjs.map +1 -0
  872. package/dist/src/services/sessionFiles/index.d.mts +33 -0
  873. package/dist/src/services/sessionFiles/index.d.mts.map +1 -0
  874. package/dist/src/services/sessionFiles/index.mjs +89 -0
  875. package/dist/src/services/sessionFiles/index.mjs.map +1 -0
  876. package/dist/src/services/sessionFiles/sessionDirectory.cjs +66 -0
  877. package/dist/src/services/sessionFiles/sessionDirectory.cjs.map +1 -0
  878. package/dist/src/services/sessionFiles/sessionDirectory.mjs +62 -0
  879. package/dist/src/services/sessionFiles/sessionDirectory.mjs.map +1 -0
  880. package/dist/src/services/sessionGitStatus/index.cjs +31 -33
  881. package/dist/src/services/sessionGitStatus/index.cjs.map +1 -1
  882. package/dist/src/services/sessionGitStatus/index.mjs +31 -33
  883. package/dist/src/services/sessionGitStatus/index.mjs.map +1 -1
  884. package/dist/src/services/sessionPresentation/index.cjs +3 -27
  885. package/dist/src/services/sessionPresentation/index.cjs.map +1 -1
  886. package/dist/src/services/sessionPresentation/index.mjs +3 -27
  887. package/dist/src/services/sessionPresentation/index.mjs.map +1 -1
  888. package/dist/src/services/skillPrompt/index.cjs +11 -0
  889. package/dist/src/services/skillPrompt/index.cjs.map +1 -0
  890. package/dist/src/services/skillPrompt/index.mjs +11 -0
  891. package/dist/src/services/skillPrompt/index.mjs.map +1 -0
  892. package/dist/src/services/sqliteSessionHistory/index.cjs +44 -30
  893. package/dist/src/services/sqliteSessionHistory/index.cjs.map +1 -1
  894. package/dist/src/services/sqliteSessionHistory/index.d.mts +7 -4
  895. package/dist/src/services/sqliteSessionHistory/index.d.mts.map +1 -1
  896. package/dist/src/services/sqliteSessionHistory/index.mjs +43 -28
  897. package/dist/src/services/sqliteSessionHistory/index.mjs.map +1 -1
  898. package/dist/src/services/sqliteTranscriptReader/index.cjs +21 -45
  899. package/dist/src/services/sqliteTranscriptReader/index.cjs.map +1 -1
  900. package/dist/src/services/sqliteTranscriptReader/index.d.mts +3 -2
  901. package/dist/src/services/sqliteTranscriptReader/index.d.mts.map +1 -1
  902. package/dist/src/services/sqliteTranscriptReader/index.mjs +16 -38
  903. package/dist/src/services/sqliteTranscriptReader/index.mjs.map +1 -1
  904. package/dist/src/services/testMode/index.cjs +162 -0
  905. package/dist/src/services/testMode/index.cjs.map +1 -0
  906. package/dist/src/services/testMode/index.d.mts +17 -0
  907. package/dist/src/services/testMode/index.d.mts.map +1 -0
  908. package/dist/src/services/testMode/index.mjs +155 -0
  909. package/dist/src/services/testMode/index.mjs.map +1 -0
  910. package/dist/src/services/toolOverrides/index.cjs +6 -6
  911. package/dist/src/services/toolOverrides/index.cjs.map +1 -1
  912. package/dist/src/services/toolOverrides/index.d.mts +3 -3
  913. package/dist/src/services/toolOverrides/index.d.mts.map +1 -1
  914. package/dist/src/services/toolOverrides/index.mjs +6 -6
  915. package/dist/src/services/toolOverrides/index.mjs.map +1 -1
  916. package/dist/src/services/toolPrompt/index.d.mts +17 -0
  917. package/dist/src/services/toolPrompt/index.d.mts.map +1 -0
  918. package/dist/src/services/toolSurface/index.cjs +3 -3
  919. package/dist/src/services/toolSurface/index.cjs.map +1 -1
  920. package/dist/src/services/toolSurface/index.d.mts +3 -3
  921. package/dist/src/services/toolSurface/index.d.mts.map +1 -1
  922. package/dist/src/services/toolSurface/index.mjs +4 -4
  923. package/dist/src/services/toolSurface/index.mjs.map +1 -1
  924. package/dist/src/services/traceContext/index.cjs.map +1 -1
  925. package/dist/src/services/traceContext/index.mjs.map +1 -1
  926. package/dist/src/services/transcriptPages/index.cjs +159 -33
  927. package/dist/src/services/transcriptPages/index.cjs.map +1 -1
  928. package/dist/src/services/transcriptPages/index.mjs +158 -34
  929. package/dist/src/services/transcriptPages/index.mjs.map +1 -1
  930. package/dist/src/services/voiceToolsContract/index.cjs +7 -7
  931. package/dist/src/services/voiceToolsContract/index.cjs.map +1 -1
  932. package/dist/src/services/voiceToolsContract/index.d.mts +4 -4
  933. package/dist/src/services/voiceToolsContract/index.d.mts.map +1 -1
  934. package/dist/src/services/voiceToolsContract/index.mjs +7 -7
  935. package/dist/src/services/voiceToolsContract/index.mjs.map +1 -1
  936. package/dist/src/services/workspaceRegistry/index.cjs +9 -179
  937. package/dist/src/services/workspaceRegistry/index.cjs.map +1 -1
  938. package/dist/src/services/workspaceRegistry/index.d.mts +5 -47
  939. package/dist/src/services/workspaceRegistry/index.mjs +7 -176
  940. package/dist/src/services/workspaceRegistry/index.mjs.map +1 -1
  941. package/dist/src/services/workspaceRegistry/sync.cjs +148 -0
  942. package/dist/src/services/workspaceRegistry/sync.cjs.map +1 -0
  943. package/dist/src/services/workspaceRegistry/sync.d.mts +34 -0
  944. package/dist/src/services/workspaceRegistry/sync.d.mts.map +1 -0
  945. package/dist/src/services/workspaceRegistry/sync.mjs +140 -0
  946. package/dist/src/services/workspaceRegistry/sync.mjs.map +1 -0
  947. package/dist/src/services/workspaceRegistry/workspaceRecords.cjs +114 -0
  948. package/dist/src/services/workspaceRegistry/workspaceRecords.cjs.map +1 -0
  949. package/dist/src/services/workspaceRegistry/workspaceRecords.d.mts +31 -0
  950. package/dist/src/services/workspaceRegistry/workspaceRecords.d.mts.map +1 -0
  951. package/dist/src/services/workspaceRegistry/workspaceRecords.mjs +101 -0
  952. package/dist/src/services/workspaceRegistry/workspaceRecords.mjs.map +1 -0
  953. package/dist/src/systems/child/adapters/headlessChildSessionService.cjs +339 -202
  954. package/dist/src/systems/child/adapters/headlessChildSessionService.cjs.map +1 -1
  955. package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts +16 -21
  956. package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts.map +1 -1
  957. package/dist/src/systems/child/adapters/headlessChildSessionService.mjs +329 -191
  958. package/dist/src/systems/child/adapters/headlessChildSessionService.mjs.map +1 -1
  959. package/dist/src/systems/child/services/childSession/index.cjs +94 -20
  960. package/dist/src/systems/child/services/childSession/index.cjs.map +1 -1
  961. package/dist/src/systems/child/services/childSession/index.d.mts +12 -3
  962. package/dist/src/systems/child/services/childSession/index.d.mts.map +1 -1
  963. package/dist/src/systems/child/services/childSession/index.mjs +94 -20
  964. package/dist/src/systems/child/services/childSession/index.mjs.map +1 -1
  965. package/dist/src/systems/child/types/childSession.cjs +33 -13
  966. package/dist/src/systems/child/types/childSession.cjs.map +1 -1
  967. package/dist/src/systems/child/types/childSession.d.mts +143 -80
  968. package/dist/src/systems/child/types/childSession.d.mts.map +1 -1
  969. package/dist/src/systems/child/types/childSession.mjs +24 -9
  970. package/dist/src/systems/child/types/childSession.mjs.map +1 -1
  971. package/dist/src/systems/main/adapters/headlessHost.cjs +30 -27
  972. package/dist/src/systems/main/adapters/headlessHost.cjs.map +1 -1
  973. package/dist/src/systems/main/adapters/headlessHost.d.mts +22 -22
  974. package/dist/src/systems/main/adapters/headlessHost.d.mts.map +1 -1
  975. package/dist/src/systems/main/adapters/headlessHost.mjs +33 -30
  976. package/dist/src/systems/main/adapters/headlessHost.mjs.map +1 -1
  977. package/dist/src/systems/main/adapters/headlessSessionHost.cjs +248 -229
  978. package/dist/src/systems/main/adapters/headlessSessionHost.cjs.map +1 -1
  979. package/dist/src/systems/main/adapters/headlessSessionHost.d.mts +4 -5
  980. package/dist/src/systems/main/adapters/headlessSessionHost.d.mts.map +1 -1
  981. package/dist/src/systems/main/adapters/headlessSessionHost.mjs +239 -219
  982. package/dist/src/systems/main/adapters/headlessSessionHost.mjs.map +1 -1
  983. package/dist/src/systems/main/types/headlessHost.d.mts +16 -14
  984. package/dist/src/systems/main/types/headlessHost.d.mts.map +1 -1
  985. package/dist/src/testing/pi/testHost.cjs +2 -2
  986. package/dist/src/testing/pi/testHost.cjs.map +1 -1
  987. package/dist/src/testing/pi/testHost.d.mts +3 -2
  988. package/dist/src/testing/pi/testHost.mjs +3 -3
  989. package/dist/src/testing/pi/testHost.mjs.map +1 -1
  990. package/dist/src/types/config.d.mts +1 -1
  991. package/dist/src/types/config.d.mts.map +1 -1
  992. package/dist/src/types/kernel.d.mts +3 -3
  993. package/dist/src/types/server/directHarnessRuntime.d.mts +54 -25
  994. package/dist/src/types/server/directHarnessRuntime.d.mts.map +1 -1
  995. package/dist/src/types/server/sessionToolSurface.d.mts +9 -9
  996. package/dist/src/web/services/apiClient/index.d.mts +1 -0
  997. package/dist/src/web/services/apiPaths/index.cjs.map +1 -1
  998. package/dist/src/web/services/apiPaths/index.d.mts +1 -1
  999. package/dist/src/web/services/apiPaths/index.mjs.map +1 -1
  1000. package/dist/src/web/services/mcpWidget.cjs.map +1 -1
  1001. package/dist/src/web/services/mcpWidget.d.mts +2 -2
  1002. package/dist/src/web/services/mcpWidget.d.mts.map +1 -1
  1003. package/dist/src/web/services/mcpWidget.mjs.map +1 -1
  1004. package/dist/src/web/services/testing/templateRail.cjs +3 -0
  1005. package/dist/src/web/services/testing/templateRail.cjs.map +1 -1
  1006. package/dist/src/web/services/testing/templateRail.mjs +3 -0
  1007. package/dist/src/web/services/testing/templateRail.mjs.map +1 -1
  1008. package/dist/src/web/types/mcpWidget.d.mts +1 -1
  1009. package/dist/src/web/types/nativeTemplate.d.mts +1 -1
  1010. package/dist/src/web/types/nativeTemplate.d.mts.map +1 -1
  1011. package/dist/src/web/types/template.d.mts +8 -0
  1012. package/dist/src/web/types/template.d.mts.map +1 -1
  1013. package/dist/src/web/types/webPlugin.d.mts +17 -5
  1014. package/dist/src/web/types/webPlugin.d.mts.map +1 -1
  1015. package/dist/testMode.cjs +4 -0
  1016. package/dist/testMode.d.mts +2 -0
  1017. package/dist/testMode.mjs +1 -0
  1018. package/dist/testing.cjs +1 -1
  1019. package/dist/testing.d.mts +2 -2
  1020. package/dist/testing.mjs +2 -2
  1021. package/dist/toolInventory.cjs.map +1 -1
  1022. package/dist/toolInventory.mjs.map +1 -1
  1023. package/dist/toolNames.mjs +1 -2
  1024. package/dist/toolOverrides.cjs +4 -4
  1025. package/dist/toolOverrides.d.mts +3 -3
  1026. package/dist/toolOverrides.mjs +3 -3
  1027. package/dist/toolSurface.cjs +4 -4
  1028. package/dist/toolSurface.d.mts +3 -3
  1029. package/dist/toolSurface.mjs +3 -3
  1030. package/dist/transition.cjs +3 -3
  1031. package/dist/transition.d.cjs +3 -3
  1032. package/dist/transition.d.mts +2 -2
  1033. package/dist/transition.mjs +1 -2
  1034. package/dist/transitionClassifier.cjs.map +1 -1
  1035. package/dist/transitionClassifier.d.mts +2 -2
  1036. package/dist/transitionClassifier.d.mts.map +1 -1
  1037. package/dist/transitionClassifier.mjs.map +1 -1
  1038. package/dist/transitionCoordinator.cjs +3 -3
  1039. package/dist/transitionCoordinator.cjs.map +1 -1
  1040. package/dist/transitionCoordinator.d.mts +4 -4
  1041. package/dist/transitionCoordinator.d.mts.map +1 -1
  1042. package/dist/transitionCoordinator.mjs +3 -3
  1043. package/dist/transitionCoordinator.mjs.map +1 -1
  1044. package/dist/typesContextApi.d.mts +2 -1
  1045. package/dist/typesContextApi.d.mts.map +1 -1
  1046. package/dist/uiHub.cjs +3 -3
  1047. package/dist/uiHub.d.mts +2 -2
  1048. package/dist/uiHub.mjs +1 -2
  1049. package/dist/voiceTools.cjs +5 -5
  1050. package/dist/voiceTools.d.mts +3 -3
  1051. package/dist/voiceTools.mjs +3 -3
  1052. package/dist/web.cjs +8 -0
  1053. package/dist/web.d.mts +3 -2
  1054. package/dist/web.mjs +2 -1
  1055. package/dist/webCompositions.cjs.map +1 -1
  1056. package/dist/webCompositions.d.mts +7 -7
  1057. package/dist/webCompositions.d.mts.map +1 -1
  1058. package/dist/webCompositions.mjs.map +1 -1
  1059. package/licenses/Codex-Apache-2.0.txt +201 -0
  1060. package/package.json +58 -53
  1061. package/dist/doomPackage.cjs +0 -61
  1062. package/dist/doomPackage.cjs.map +0 -1
  1063. package/dist/doomPackage.d.mts +0 -17
  1064. package/dist/doomPackage.d.mts.map +0 -1
  1065. package/dist/doomPackage.mjs +0 -54
  1066. package/dist/doomPackage.mjs.map +0 -1
  1067. package/dist/jsonlSessionRepo.cjs +0 -44
  1068. package/dist/jsonlSessionRepo.cjs.map +0 -1
  1069. package/dist/jsonlSessionRepo.d.mts +0 -7
  1070. package/dist/jsonlSessionRepo.d.mts.map +0 -1
  1071. package/dist/jsonlSessionRepo.mjs +0 -42
  1072. package/dist/jsonlSessionRepo.mjs.map +0 -1
  1073. package/dist/runtimeJson.cjs.map +0 -1
  1074. package/dist/runtimeJson.d.mts.map +0 -1
  1075. package/dist/runtimeJson.mjs.map +0 -1
  1076. package/dist/runtimePiSettings.cjs.map +0 -1
  1077. package/dist/runtimePiSettings.d.mts.map +0 -1
  1078. package/dist/runtimePiSettings.mjs.map +0 -1
  1079. package/dist/serverFacet.cjs +0 -34
  1080. package/dist/serverFacet.d.mts +0 -10
  1081. package/dist/serverFacet.mjs +0 -9
  1082. package/dist/src/pi/piWebSocketListener.cjs +0 -115
  1083. package/dist/src/pi/piWebSocketListener.cjs.map +0 -1
  1084. package/dist/src/pi/piWebSocketListener.mjs +0 -115
  1085. package/dist/src/pi/piWebSocketListener.mjs.map +0 -1
  1086. package/dist/src/schemas/serverFacet.cjs +0 -111
  1087. package/dist/src/schemas/serverFacet.cjs.map +0 -1
  1088. package/dist/src/schemas/serverFacet.d.mts +0 -152
  1089. package/dist/src/schemas/serverFacet.d.mts.map +0 -1
  1090. package/dist/src/schemas/serverFacet.mjs +0 -101
  1091. package/dist/src/schemas/serverFacet.mjs.map +0 -1
  1092. package/dist/src/schemas/sessionUpdates.d.mts +0 -34
  1093. package/dist/src/schemas/sessionUpdates.d.mts.map +0 -1
  1094. package/dist/src/server/headlessProtocol.cjs +0 -382
  1095. package/dist/src/server/headlessProtocol.cjs.map +0 -1
  1096. package/dist/src/server/headlessProtocol.mjs +0 -382
  1097. package/dist/src/server/headlessProtocol.mjs.map +0 -1
  1098. package/dist/src/server/nativeChildTranscriptReader.cjs +0 -20
  1099. package/dist/src/server/nativeChildTranscriptReader.cjs.map +0 -1
  1100. package/dist/src/server/nativeChildTranscriptReader.mjs +0 -18
  1101. package/dist/src/server/nativeChildTranscriptReader.mjs.map +0 -1
  1102. package/dist/src/server/serverFacetLoader.cjs +0 -214
  1103. package/dist/src/server/serverFacetLoader.cjs.map +0 -1
  1104. package/dist/src/server/serverFacetLoader.d.mts +0 -72
  1105. package/dist/src/server/serverFacetLoader.d.mts.map +0 -1
  1106. package/dist/src/server/serverFacetLoader.mjs +0 -212
  1107. package/dist/src/server/serverFacetLoader.mjs.map +0 -1
  1108. package/dist/src/services/acpSessionUpdates/index.cjs +0 -129
  1109. package/dist/src/services/acpSessionUpdates/index.cjs.map +0 -1
  1110. package/dist/src/services/acpSessionUpdates/index.mjs +0 -129
  1111. package/dist/src/services/acpSessionUpdates/index.mjs.map +0 -1
  1112. package/dist/src/services/historyImport/index.cjs +0 -8
  1113. package/dist/src/services/historyImport/index.cjs.map +0 -1
  1114. package/dist/src/services/historyImport/index.d.mts +0 -68
  1115. package/dist/src/services/historyImport/index.d.mts.map +0 -1
  1116. package/dist/src/services/historyImport/index.mjs +0 -8
  1117. package/dist/src/services/historyImport/index.mjs.map +0 -1
  1118. package/dist/src/services/openSessionRegistry/index.d.mts.map +0 -1
  1119. package/dist/src/services/requestReceipts/index.cjs.map +0 -1
  1120. package/dist/src/services/requestReceipts/index.d.mts +0 -11
  1121. package/dist/src/services/requestReceipts/index.d.mts.map +0 -1
  1122. package/dist/src/services/requestReceipts/index.mjs.map +0 -1
  1123. package/dist/src/services/rpcTranscript/index.cjs +0 -633
  1124. package/dist/src/services/rpcTranscript/index.cjs.map +0 -1
  1125. package/dist/src/services/rpcTranscript/index.d.mts +0 -50
  1126. package/dist/src/services/rpcTranscript/index.d.mts.map +0 -1
  1127. package/dist/src/services/rpcTranscript/index.mjs +0 -632
  1128. package/dist/src/services/rpcTranscript/index.mjs.map +0 -1
  1129. package/dist/src/services/serverFacet/index.cjs.map +0 -1
  1130. package/dist/src/services/serverFacet/index.d.mts +0 -31
  1131. package/dist/src/services/serverFacet/index.d.mts.map +0 -1
  1132. package/dist/src/services/serverFacet/index.mjs.map +0 -1
  1133. package/dist/src/services/workspaceRegistry/index.d.mts.map +0 -1
  1134. package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs +0 -28
  1135. package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs.map +0 -1
  1136. package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs +0 -25
  1137. package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs.map +0 -1
  1138. package/dist/terminalPiChildSessionService.cjs +0 -324
  1139. package/dist/terminalPiChildSessionService.cjs.map +0 -1
  1140. package/dist/terminalPiChildSessionService.d.mts +0 -46
  1141. package/dist/terminalPiChildSessionService.d.mts.map +0 -1
  1142. package/dist/terminalPiChildSessionService.mjs +0 -318
  1143. package/dist/terminalPiChildSessionService.mjs.map +0 -1
  1144. package/dist/v3Export.cjs +0 -10
  1145. package/dist/v3Export.cjs.map +0 -1
  1146. package/dist/v3Export.d.mts +0 -35
  1147. package/dist/v3Export.d.mts.map +0 -1
  1148. package/dist/v3Export.mjs +0 -9
  1149. package/dist/v3Export.mjs.map +0 -1
@@ -1,4 +1,3 @@
1
- import { ModelRuntime } from "@earendil-works/pi-coding-agent";
2
1
  //#region src/services/chatgptAuth/index.d.ts
3
2
  /** The one ChatGPT sign-in every Po feature shares; separate from Pi's `openai-codex` model login. */
4
3
  export declare const CHATGPT_AUTH_PROVIDER_ID = "po-chatgpt";
@@ -20,22 +19,5 @@ export declare function chatgptCredentials(source: ChatgptAuthSource, loginMessa
20
19
  token: string;
21
20
  accountId: string;
22
21
  }>;
23
- /** Adds the shared sign-in to a Pi model runtime: its Providers row, /login entry, refresh and storage. */
24
- export declare function registerChatgptAuthProvider(runtime: Pick<ModelRuntime, 'registerProvider'>): void;
25
- /**
26
- * Reads the shared sign-in outside a session (Voice runs at the hub). It opens the same auth.json
27
- * a session uses; Pi's file lock keeps refreshes from different runtimes from racing.
28
- */
29
- export declare function createChatgptAuthReader(options: {
30
- environment?: Readonly<Record<string, string | undefined>>;
31
- homeDirectory?: string;
32
- }): {
33
- /** Whether the shared sign-in exists on disk. No network call; the same check `credentials` runs first. */
34
- signedIn(signal?: AbortSignal): Promise<boolean>;
35
- credentials(loginMessage: string, signal?: AbortSignal): Promise<{
36
- token: string;
37
- accountId: string;
38
- }>;
39
- };
40
22
  //#endregion
41
23
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/chatgptAuth/index.ts"],"mappings":";;;qBAca;qBACA;qBACA;;iBAoBI;EACf;EACA,QAAQ,SAAS,cAAc;IAAU;MAAQ;;;;;wBAQ7B,gBAAgB,UAAU,UAAU,eAAe,SAAS,cAAc;;wBAmC1E,mBACpB,QAAQ,mBACR,sBACA,SAAS,cACR;EAAU;EAAe;;;wBAsKZ,4BAA4B,SAAS,KAAK;;;;;wBAQ1C,wBAAwB;EACtC,cAAc,SAAS;EACvB;;;EAgCQ,SAAQ,SAAU,cAAc;EAGhC,YAAW,sBAAqB,SAAW,cAAc;IAAU;IAAe"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/chatgptAuth/index.ts"],"mappings":";;qBAMa;qBACA;qBACA;;iBAGI;EACf;EACA,QAAQ,SAAS,cAAc;IAAU;MAAQ;;;;;wBAQ7B,gBAAgB,UAAU,UAAU,eAAe,SAAS,cAAc;;wBAmC1E,mBACpB,QAAQ,mBACR,sBACA,SAAS,cACR;EAAU;EAAe"}
@@ -1,25 +1,8 @@
1
- import { modelConfigDirectory, piAgentDirectory } from "../../../runtimePiSettings.mjs";
2
- import { createHash, randomBytes, timingSafeEqual } from "node:crypto";
3
- import path from "node:path";
4
- import { createServer } from "node:http";
5
- import { ModelRuntime } from "@earendil-works/pi-coding-agent";
6
1
  //#region src/services/chatgptAuth/index.ts
7
2
  /** The one ChatGPT sign-in every Po feature shares; separate from Pi's `openai-codex` model login. */
8
3
  const CHATGPT_AUTH_PROVIDER_ID = "po-chatgpt";
9
4
  const CHATGPT_AUTH_PROVIDER_NAME = "ChatGPT for Po features";
10
5
  const CHATGPT_SIGN_IN_HINT = `Sign in to ${CHATGPT_AUTH_PROVIDER_NAME} under Settings > Providers, or with /login.`;
11
- const CLIENT_ID = "app_EMoamEEZ73f0CkXaXp7hrann";
12
- const AUTH_ORIGIN = "https://auth.openai.com";
13
- const TOKEN_URL = `${AUTH_ORIGIN}/oauth/token`;
14
- /** Realtime voice needs the connector scopes that Pi's own ChatGPT login does not request. */
15
- const SCOPE = "openid profile email offline_access api.connectors.read api.connectors.invoke";
16
- const CALLBACK_HOST = "127.0.0.1";
17
- const CALLBACK_PORT = 1455;
18
- const CALLBACK_PATH = "/auth/callback";
19
- /** The redirect registered for this OAuth client; the browser reaches the listener through localhost. */
20
- const REDIRECT_URI = `http://localhost:${CALLBACK_PORT}${CALLBACK_PATH}`;
21
- const MAX_TOKEN_RESPONSE_BYTES = 1048576;
22
- const TOKEN_TIMEOUT_MS = 3e4;
23
6
  function record(value) {
24
7
  return typeof value === "object" && value !== null && !Array.isArray(value);
25
8
  }
@@ -74,206 +57,7 @@ async function chatgptCredentials(source, loginMessage, signal) {
74
57
  accountId
75
58
  };
76
59
  }
77
- async function requestTokens(body, previousRefresh, signal) {
78
- const bounded = AbortSignal.any([AbortSignal.timeout(TOKEN_TIMEOUT_MS), ...signal ? [signal] : []]);
79
- const response = await fetch(TOKEN_URL, {
80
- method: "POST",
81
- headers: { "content-type": "application/x-www-form-urlencoded" },
82
- body,
83
- redirect: "error",
84
- signal: bounded
85
- });
86
- if (!response.ok) {
87
- await response.body?.cancel().catch(() => void 0);
88
- throw new Error(`ChatGPT sign-in was rejected (HTTP ${response.status}). Sign in again.`);
89
- }
90
- const json = await readBoundedJson(response, MAX_TOKEN_RESPONSE_BYTES, bounded);
91
- const access = record(json) ? json.access_token : void 0;
92
- const refresh = record(json) ? json.refresh_token ?? previousRefresh : void 0;
93
- const expiresIn = record(json) ? json.expires_in : void 0;
94
- if (typeof access !== "string" || typeof refresh !== "string" || typeof expiresIn !== "number" || expiresIn <= 0) throw new Error("ChatGPT sign-in returned an invalid token response.");
95
- const accountId = accountIdOf(access);
96
- if (!accountId) throw new Error("ChatGPT sign-in did not include a ChatGPT account.");
97
- return {
98
- access,
99
- refresh,
100
- expires: Date.now() + expiresIn * 1e3,
101
- accountId
102
- };
103
- }
104
- function sameState(supplied, expected) {
105
- const left = Buffer.from(supplied ?? "");
106
- const right = Buffer.from(expected);
107
- return left.length === right.length && timingSafeEqual(left, right);
108
- }
109
- /** The authorization code from a redirect URL; pasted input must carry the expected state. */
110
- function codeFromRedirect(url, state) {
111
- for (const name of [
112
- "state",
113
- "code",
114
- "error"
115
- ]) if (url.searchParams.getAll(name).length > 1) throw new Error("The sign-in address is invalid.");
116
- if (!sameState(url.searchParams.get("state"), state)) throw new Error("The sign-in address does not match this attempt.");
117
- if (url.searchParams.get("error")) throw new Error("ChatGPT sign-in was declined.");
118
- const code = url.searchParams.get("code");
119
- if (!code || code.trim() !== code) throw new Error("The sign-in address has no authorization code.");
120
- return code;
121
- }
122
- /** Listens for the browser redirect on the registered loopback port; rejects when the port is taken. */
123
- async function listenForCode(state, signal) {
124
- const server = createServer();
125
- let resolveCode;
126
- let rejectCode;
127
- const code = new Promise((resolve, reject) => {
128
- resolveCode = resolve;
129
- rejectCode = reject;
130
- });
131
- code.catch(() => void 0);
132
- server.on("request", (request, response) => {
133
- const reply = (status, text) => {
134
- response.writeHead(status, {
135
- "content-type": "text/plain; charset=utf-8",
136
- "cache-control": "no-store"
137
- });
138
- response.end(text);
139
- };
140
- const url = new URL(request.url ?? "/", REDIRECT_URI);
141
- if (request.method !== "GET" || url.pathname !== CALLBACK_PATH) return reply(404, "Not found.");
142
- try {
143
- resolveCode(codeFromRedirect(url, state));
144
- reply(200, "Signed in. You can close this page.");
145
- } catch (error) {
146
- if (sameState(url.searchParams.get("state"), state)) rejectCode(error);
147
- reply(400, "Sign-in could not be completed.");
148
- }
149
- });
150
- await new Promise((resolve, reject) => {
151
- server.once("error", reject);
152
- server.listen({
153
- host: CALLBACK_HOST,
154
- port: CALLBACK_PORT,
155
- exclusive: true
156
- }, () => {
157
- server.off("error", reject);
158
- resolve();
159
- });
160
- });
161
- const close = () => {
162
- server.close();
163
- server.closeAllConnections();
164
- };
165
- signal?.addEventListener("abort", close, { once: true });
166
- return {
167
- code,
168
- close
169
- };
170
- }
171
- async function login(callbacks) {
172
- const { signal } = callbacks;
173
- const verifier = randomBytes(64).toString("base64url");
174
- const state = randomBytes(32).toString("base64url");
175
- const authorize = new URL(`${AUTH_ORIGIN}/oauth/authorize`);
176
- authorize.search = new URLSearchParams({
177
- response_type: "code",
178
- client_id: CLIENT_ID,
179
- redirect_uri: REDIRECT_URI,
180
- scope: SCOPE,
181
- code_challenge: createHash("sha256").update(verifier).digest("base64url"),
182
- code_challenge_method: "S256",
183
- id_token_add_organizations: "true",
184
- state
185
- }).toString();
186
- const callback = await listenForCode(state, signal).catch(() => void 0);
187
- try {
188
- callbacks.onAuth({
189
- url: authorize.toString(),
190
- instructions: "Sign in in your browser. If it does not return here, paste the address it lands on."
191
- });
192
- const pasted = (callbacks.onManualCodeInput?.() ?? callbacks.onPrompt({
193
- message: "Paste the address your browser lands on",
194
- placeholder: REDIRECT_URI
195
- })).then((input) => {
196
- if (!URL.canParse(input.trim())) throw new Error("Paste the full address from your browser.");
197
- return codeFromRedirect(new URL(input.trim()), state);
198
- });
199
- const code = await (callback ? Promise.race([callback.code, pasted]) : pasted);
200
- signal?.throwIfAborted();
201
- return await requestTokens(new URLSearchParams({
202
- grant_type: "authorization_code",
203
- client_id: CLIENT_ID,
204
- code,
205
- code_verifier: verifier,
206
- redirect_uri: REDIRECT_URI
207
- }), void 0, signal);
208
- } finally {
209
- callback?.close();
210
- }
211
- }
212
- const chatgptAuthProvider = {
213
- name: CHATGPT_AUTH_PROVIDER_NAME,
214
- oauth: {
215
- name: CHATGPT_AUTH_PROVIDER_NAME,
216
- isSubscription: true,
217
- login,
218
- refreshToken: (credentials, signal) => requestTokens(new URLSearchParams({
219
- grant_type: "refresh_token",
220
- client_id: CLIENT_ID,
221
- refresh_token: credentials.refresh
222
- }), credentials.refresh, signal),
223
- getApiKey: (credentials) => credentials.access
224
- }
225
- };
226
- /** Adds the shared sign-in to a Pi model runtime: its Providers row, /login entry, refresh and storage. */
227
- function registerChatgptAuthProvider(runtime) {
228
- runtime.registerProvider(CHATGPT_AUTH_PROVIDER_ID, chatgptAuthProvider);
229
- }
230
- /**
231
- * Reads the shared sign-in outside a session (Voice runs at the hub). It opens the same auth.json
232
- * a session uses; Pi's file lock keeps refreshes from different runtimes from racing.
233
- */
234
- function createChatgptAuthReader(options) {
235
- let loading;
236
- const runtime = () => {
237
- loading ??= (async () => {
238
- const agentDirectory = piAgentDirectory(options.environment, options.homeDirectory);
239
- const directory = modelConfigDirectory(agentDirectory, options.homeDirectory);
240
- const created = await ModelRuntime.create({
241
- authPath: path.join(directory, "auth.json"),
242
- modelsPath: path.join(directory, "models.json"),
243
- refreshOnCreate: false
244
- });
245
- registerChatgptAuthProvider(created);
246
- return created;
247
- })().catch((error) => {
248
- loading = void 0;
249
- throw error;
250
- });
251
- return loading;
252
- };
253
- const fresh = async (signal) => {
254
- const current = await runtime();
255
- await current.refresh({
256
- allowNetwork: false,
257
- providers: [CHATGPT_AUTH_PROVIDER_ID],
258
- ...signal ? { signal } : {}
259
- });
260
- return current;
261
- };
262
- return {
263
- /** Whether the shared sign-in exists on disk. No network call; the same check `credentials` runs first. */
264
- async signedIn(signal) {
265
- return (await fresh(signal)).isUsingSubscription(CHATGPT_AUTH_PROVIDER_ID);
266
- },
267
- async credentials(loginMessage, signal) {
268
- const current = await fresh(signal);
269
- return chatgptCredentials({
270
- available: () => current.isUsingSubscription(CHATGPT_AUTH_PROVIDER_ID),
271
- getAuth: (authSignal) => current.getAuth(CHATGPT_AUTH_PROVIDER_ID, authSignal ? { signal: authSignal } : {})
272
- }, loginMessage, signal);
273
- }
274
- };
275
- }
276
60
  //#endregion
277
- export { CHATGPT_AUTH_PROVIDER_ID, CHATGPT_AUTH_PROVIDER_NAME, CHATGPT_SIGN_IN_HINT, chatgptCredentials, createChatgptAuthReader, readBoundedJson, registerChatgptAuthProvider };
61
+ export { CHATGPT_AUTH_PROVIDER_ID, CHATGPT_AUTH_PROVIDER_NAME, CHATGPT_SIGN_IN_HINT, accountIdOf, chatgptCredentials, readBoundedJson };
278
62
 
279
63
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/chatgptAuth/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 { modelConfigDirectory, piAgentDirectory } from '../piSettings';\n\n/** The one ChatGPT sign-in every Po feature shares; separate from Pi's `openai-codex` model login. */\nexport const CHATGPT_AUTH_PROVIDER_ID = 'po-chatgpt';\nexport const CHATGPT_AUTH_PROVIDER_NAME = 'ChatGPT for Po features';\nexport const CHATGPT_SIGN_IN_HINT = `Sign in to ${CHATGPT_AUTH_PROVIDER_NAME} under Settings > Providers, or with /login.`;\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\n/** Where a feature reads the shared sign-in: a session's or the hub's Pi model runtime. */\nexport interface ChatgptAuthSource {\n available(): boolean;\n getAuth(signal?: AbortSignal): Promise<{ auth: { apiKey?: string } } | undefined>;\n}\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** Reads a JSON body without buffering more than `limit` bytes. Errors are generic; callers map them. */\nexport async function readBoundedJson(response: Response, limit: number, signal?: AbortSignal): Promise<unknown> {\n if (!response.body) throw new Error('Response has no body.');\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n let length = 0;\n try {\n while (true) {\n signal?.throwIfAborted();\n const { value, done } = await reader.read();\n if (done) break;\n length += value.length;\n if (length > limit) throw new Error('Response body is too large.');\n chunks.push(value);\n }\n signal?.throwIfAborted();\n return JSON.parse(Buffer.concat(chunks).toString('utf8')) as unknown;\n } finally {\n await reader.cancel().catch(() => undefined); // Response cleanup never replaces the operation error.\n reader.releaseLock();\n }\n}\n\n/** The ChatGPT account claim of an access token, or undefined when it is missing or malformed. */\nfunction accountIdOf(token: string): string | undefined {\n try {\n const payload: unknown = JSON.parse(Buffer.from(token.split('.')[1] ?? '', 'base64url').toString('utf8'));\n const auth = record(payload) ? payload['https://api.openai.com/auth'] : undefined;\n const id = record(auth) ? auth.chatgpt_account_id : undefined;\n return typeof id === 'string' && /^[A-Za-z0-9_-]{1,256}$/.test(id) ? id : undefined;\n } catch {\n return undefined; // Documented fallback: a malformed token has no account, which callers treat as signed out.\n }\n}\n\n/** Resolves the subscription token and account claim; every failure becomes `loginMessage` unless aborted. */\nexport async function chatgptCredentials(\n source: ChatgptAuthSource,\n loginMessage: string,\n signal?: AbortSignal,\n): Promise<{ token: string; accountId: string }> {\n if (!source.available()) throw new Error(loginMessage);\n let token: string | undefined;\n try {\n token = (await source.getAuth(signal))?.auth.apiKey;\n } catch {\n signal?.throwIfAborted();\n throw new Error(loginMessage);\n }\n signal?.throwIfAborted();\n const accountId = token ? accountIdOf(token) : undefined;\n if (!token || !accountId) throw new Error(loginMessage);\n return { token, accountId };\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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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/chatgptAuth/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\n/** The one ChatGPT sign-in every Po feature shares; separate from Pi's `openai-codex` model login. */\nexport const CHATGPT_AUTH_PROVIDER_ID = 'po-chatgpt';\nexport const CHATGPT_AUTH_PROVIDER_NAME = 'ChatGPT for Po features';\nexport const CHATGPT_SIGN_IN_HINT = `Sign in to ${CHATGPT_AUTH_PROVIDER_NAME} under Settings > Providers, or with /login.`;\n\n/** Where a feature reads the shared sign-in: a session's or the hub's Pi model runtime. */\nexport interface ChatgptAuthSource {\n available(): boolean;\n getAuth(signal?: AbortSignal): Promise<{ auth: { apiKey?: string } } | undefined>;\n}\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** Reads a JSON body without buffering more than `limit` bytes. Errors are generic; callers map them. */\nexport async function readBoundedJson(response: Response, limit: number, signal?: AbortSignal): Promise<unknown> {\n if (!response.body) throw new Error('Response has no body.');\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n let length = 0;\n try {\n while (true) {\n signal?.throwIfAborted();\n const { value, done } = await reader.read();\n if (done) break;\n length += value.length;\n if (length > limit) throw new Error('Response body is too large.');\n chunks.push(value);\n }\n signal?.throwIfAborted();\n return JSON.parse(Buffer.concat(chunks).toString('utf8')) as unknown;\n } finally {\n await reader.cancel().catch(() => undefined); // Response cleanup never replaces the operation error.\n reader.releaseLock();\n }\n}\n\n/** The ChatGPT account claim of an access token, or undefined when it is missing or malformed. */\nexport function accountIdOf(token: string): string | undefined {\n try {\n const payload: unknown = JSON.parse(Buffer.from(token.split('.')[1] ?? '', 'base64url').toString('utf8'));\n const auth = record(payload) ? payload['https://api.openai.com/auth'] : undefined;\n const id = record(auth) ? auth.chatgpt_account_id : undefined;\n return typeof id === 'string' && /^[A-Za-z0-9_-]{1,256}$/.test(id) ? id : undefined;\n } catch {\n return undefined; // Documented fallback: a malformed token has no account, which callers treat as signed out.\n }\n}\n\n/** Resolves the subscription token and account claim; every failure becomes `loginMessage` unless aborted. */\nexport async function chatgptCredentials(\n source: ChatgptAuthSource,\n loginMessage: string,\n signal?: AbortSignal,\n): Promise<{ token: string; accountId: string }> {\n if (!source.available()) throw new Error(loginMessage);\n let token: string | undefined;\n try {\n token = (await source.getAuth(signal))?.auth.apiKey;\n } catch {\n signal?.throwIfAborted();\n throw new Error(loginMessage);\n }\n signal?.throwIfAborted();\n const accountId = token ? accountIdOf(token) : undefined;\n if (!token || !accountId) throw new Error(loginMessage);\n return { token, accountId };\n}\n"],"mappings":";;AAMA,MAAa,2BAA2B;AACxC,MAAa,6BAA6B;AAC1C,MAAa,uBAAuB,cAAc,2BAA2B;AAQ7E,SAAS,OAAO,OAAkD;CAChE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;;AAGA,eAAsB,gBAAgB,UAAoB,OAAe,QAAwC;CAC/G,IAAI,CAAC,SAAS,MAAM,MAAM,IAAI,MAAM,uBAAuB;CAC3D,MAAM,SAAS,SAAS,KAAK,UAAU;CACvC,MAAM,SAAuB,CAAC;CAC9B,IAAI,SAAS;CACb,IAAI;EACF,OAAO,MAAM;GACX,QAAQ,eAAe;GACvB,MAAM,EAAE,OAAO,SAAS,MAAM,OAAO,KAAK;GAC1C,IAAI,MAAM;GACV,UAAU,MAAM;GAChB,IAAI,SAAS,OAAO,MAAM,IAAI,MAAM,6BAA6B;GACjE,OAAO,KAAK,KAAK;EACnB;EACA,QAAQ,eAAe;EACvB,OAAO,KAAK,MAAM,OAAO,OAAO,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC;CAC1D,UAAU;EACR,MAAM,OAAO,OAAO,CAAC,CAAC,YAAY,KAAA,CAAS;EAC3C,OAAO,YAAY;CACrB;AACF;;AAGA,SAAgB,YAAY,OAAmC;CAC7D,IAAI;EACF,MAAM,UAAmB,KAAK,MAAM,OAAO,KAAK,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC;EACxG,MAAM,OAAO,OAAO,OAAO,IAAI,QAAQ,iCAAiC,KAAA;EACxE,MAAM,KAAK,OAAO,IAAI,IAAI,KAAK,qBAAqB,KAAA;EACpD,OAAO,OAAO,OAAO,YAAY,yBAAyB,KAAK,EAAE,IAAI,KAAK,KAAA;CAC5E,QAAQ;EACN;CACF;AACF;;AAGA,eAAsB,mBACpB,QACA,cACA,QAC+C;CAC/C,IAAI,CAAC,OAAO,UAAU,GAAG,MAAM,IAAI,MAAM,YAAY;CACrD,IAAI;CACJ,IAAI;EACF,SAAS,MAAM,OAAO,QAAQ,MAAM,EAAA,EAAI,KAAK;CAC/C,QAAQ;EACN,QAAQ,eAAe;EACvB,MAAM,IAAI,MAAM,YAAY;CAC9B;CACA,QAAQ,eAAe;CACvB,MAAM,YAAY,QAAQ,YAAY,KAAK,IAAI,KAAA;CAC/C,IAAI,CAAC,SAAS,CAAC,WAAW,MAAM,IAAI,MAAM,YAAY;CACtD,OAAO;EAAE;EAAO;CAAU;AAC5B"}
@@ -31,7 +31,7 @@ function matchesMime(bytes, mimeType) {
31
31
  if (mimeType === "image/jpeg") return bytes[0] === 255 && bytes[1] === 216 && bytes[2] === 255;
32
32
  return mimeType === "image/webp" && bytes.toString("ascii", 0, 4) === "RIFF" && bytes.toString("ascii", 8, 12) === "WEBP";
33
33
  }
34
- /** Host-only transport: authentication never crosses the facet boundary. */
34
+ /** Host-only transport: authentication never crosses the package boundary. */
35
35
  function createChatgptImageClient(dependencies) {
36
36
  return {
37
37
  available: () => dependencies.available(),
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["CHATGPT_SIGN_IN_HINT","chatgptCredentials","readBoundedJson"],"sources":["../../../../src/services/chatgptImages/index.ts"],"sourcesContent":["import { CHATGPT_SIGN_IN_HINT, chatgptCredentials, readBoundedJson } from '../chatgptAuth';\nimport type { ChatgptBackendDependencies, ImageGenerationRequest } from './type';\n\nconst BASE_URL = 'https://chatgpt.com/backend-api/codex/images/';\nconst MAX_IMAGE_BYTES = 32 * 1024 * 1024;\nconst MAX_REFERENCE_BYTES = 20 * 1024 * 1024;\nconst MAX_REFERENCES_BYTES = 50 * 1024 * 1024;\nconst MAX_RESPONSE_BYTES = Math.ceil((MAX_IMAGE_BYTES * 4) / 3) + 1024 * 1024;\nconst LOGIN_MESSAGE = `Image generation needs a ChatGPT sign-in. ${CHATGPT_SIGN_IN_HINT}`;\nconst INVALID_RESPONSE = 'Image generation returned an invalid image.';\nconst PNG_SIGNATURE = Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]);\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nfunction decodeImage(data: string, limit: number): Buffer {\n if (!data || data.length > Math.ceil((limit * 4) / 3) + 4 || !/^[A-Za-z0-9+/]*={0,2}$/.test(data))\n throw new Error(INVALID_RESPONSE);\n const bytes = Buffer.from(data, 'base64');\n if (bytes.length > limit || bytes.toString('base64') !== data) throw new Error(INVALID_RESPONSE);\n return bytes;\n}\n\nfunction matchesMime(bytes: Buffer, mimeType: string): boolean {\n if (mimeType === 'image/png') return bytes.subarray(0, 8).equals(PNG_SIGNATURE);\n if (mimeType === 'image/jpeg') return bytes[0] === 255 && bytes[1] === 216 && bytes[2] === 255;\n return (\n mimeType === 'image/webp' && bytes.toString('ascii', 0, 4) === 'RIFF' && bytes.toString('ascii', 8, 12) === 'WEBP'\n );\n}\n\n/** Host-only transport: authentication never crosses the facet boundary. */\nexport function createChatgptImageClient(dependencies: ChatgptBackendDependencies) {\n return {\n available: () => dependencies.available(),\n async generate(request: ImageGenerationRequest) {\n request.signal?.throwIfAborted();\n if (typeof request.prompt !== 'string' || !request.prompt.trim()) throw new Error('An image prompt is required.');\n if (request.transparentBackground !== undefined && typeof request.transparentBackground !== 'boolean')\n throw new Error('Invalid transparency option.');\n if (typeof request.correlationId !== 'string' || !/^[\\x21-\\x7e]{1,1024}$/.test(request.correlationId))\n throw new Error('Invalid image operation identifier.');\n if (request.images !== undefined && (!Array.isArray(request.images) || request.images.length > 5))\n throw new Error('At most five reference images are supported.');\n let total = 0;\n for (const image of request.images ?? []) {\n if (!record(image) || typeof image.data !== 'string' || typeof image.mimeType !== 'string')\n throw new Error('Invalid reference image.');\n const bytes = decodeImage(image.data, MAX_REFERENCE_BYTES);\n total += bytes.length;\n if (total > MAX_REFERENCES_BYTES || !matchesMime(bytes, image.mimeType))\n throw new Error('Invalid or oversized reference image.');\n }\n const { token, accountId: id } = await chatgptCredentials(dependencies, LOGIN_MESSAGE, request.signal);\n let response: Response;\n try {\n response = await (dependencies.fetch ?? globalThis.fetch)(\n BASE_URL + (request.images?.length ? 'edits' : 'generations'),\n {\n method: 'POST',\n redirect: 'error',\n signal: request.signal,\n headers: {\n Authorization: `Bearer ${token}`,\n 'chatgpt-account-id': id,\n originator: 'po_image_gen',\n 'User-Agent': '@agimon-ai/po-image-gen',\n 'Content-Type': 'application/json',\n 'x-codex-image-turn-id': request.correlationId,\n },\n body: JSON.stringify({\n prompt: request.prompt,\n background: request.transparentBackground ? 'transparent' : 'opaque',\n model: 'gpt-image-2',\n quality: 'auto',\n size: 'auto',\n ...(request.images?.length\n ? {\n images: request.images.map((image) => ({\n image_url: `data:${image.mimeType};base64,${image.data}`,\n })),\n }\n : {}),\n }),\n },\n );\n } catch {\n request.signal?.throwIfAborted();\n throw new Error('Image generation request 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('Image generation was denied for this account.');\n if (response.status === 429) {\n const reset = response.headers.get('x-image-gen-primary-reset-at');\n throw new Error(\n `Image generation quota reached.${reset && /^\\d{1,12}$/.test(reset) ? ` Reset time: ${reset}.` : ''}`,\n );\n }\n throw new Error('Image generation request failed.');\n }\n let body: unknown;\n try {\n body = await readBoundedJson(response, MAX_RESPONSE_BYTES, request.signal);\n } catch {\n request.signal?.throwIfAborted();\n throw new Error(INVALID_RESPONSE);\n }\n const first = record(body) && Array.isArray(body.data) ? (body.data[0] as unknown) : undefined;\n if (!record(first) || typeof first.b64_json !== 'string') throw new Error(INVALID_RESPONSE);\n const bytes = decodeImage(first.b64_json, MAX_IMAGE_BYTES);\n if (!matchesMime(bytes, 'image/png')) throw new Error(INVALID_RESPONSE);\n const requestId = response.headers.get('x-codex-imagegen-request-id');\n const generationId = first.generation_id;\n return {\n data: first.b64_json,\n mimeType: 'image/png' as const,\n ...(requestId && /^[A-Za-z0-9_-]{1,256}$/.test(requestId) ? { requestId } : {}),\n ...(typeof generationId === 'string' && /^[A-Za-z0-9_-]{1,256}$/.test(generationId) ? { generationId } : {}),\n };\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/chatgptImages/index.ts"],"sourcesContent":["import { CHATGPT_SIGN_IN_HINT, chatgptCredentials, readBoundedJson } from '../chatgptAuth';\nimport type { ChatgptBackendDependencies, ImageGenerationRequest } from './type';\n\nconst BASE_URL = 'https://chatgpt.com/backend-api/codex/images/';\nconst MAX_IMAGE_BYTES = 32 * 1024 * 1024;\nconst MAX_REFERENCE_BYTES = 20 * 1024 * 1024;\nconst MAX_REFERENCES_BYTES = 50 * 1024 * 1024;\nconst MAX_RESPONSE_BYTES = Math.ceil((MAX_IMAGE_BYTES * 4) / 3) + 1024 * 1024;\nconst LOGIN_MESSAGE = `Image generation needs a ChatGPT sign-in. ${CHATGPT_SIGN_IN_HINT}`;\nconst INVALID_RESPONSE = 'Image generation returned an invalid image.';\nconst PNG_SIGNATURE = Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]);\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nfunction decodeImage(data: string, limit: number): Buffer {\n if (!data || data.length > Math.ceil((limit * 4) / 3) + 4 || !/^[A-Za-z0-9+/]*={0,2}$/.test(data))\n throw new Error(INVALID_RESPONSE);\n const bytes = Buffer.from(data, 'base64');\n if (bytes.length > limit || bytes.toString('base64') !== data) throw new Error(INVALID_RESPONSE);\n return bytes;\n}\n\nfunction matchesMime(bytes: Buffer, mimeType: string): boolean {\n if (mimeType === 'image/png') return bytes.subarray(0, 8).equals(PNG_SIGNATURE);\n if (mimeType === 'image/jpeg') return bytes[0] === 255 && bytes[1] === 216 && bytes[2] === 255;\n return (\n mimeType === 'image/webp' && bytes.toString('ascii', 0, 4) === 'RIFF' && bytes.toString('ascii', 8, 12) === 'WEBP'\n );\n}\n\n/** Host-only transport: authentication never crosses the package boundary. */\nexport function createChatgptImageClient(dependencies: ChatgptBackendDependencies) {\n return {\n available: () => dependencies.available(),\n async generate(request: ImageGenerationRequest) {\n request.signal?.throwIfAborted();\n if (typeof request.prompt !== 'string' || !request.prompt.trim()) throw new Error('An image prompt is required.');\n if (request.transparentBackground !== undefined && typeof request.transparentBackground !== 'boolean')\n throw new Error('Invalid transparency option.');\n if (typeof request.correlationId !== 'string' || !/^[\\x21-\\x7e]{1,1024}$/.test(request.correlationId))\n throw new Error('Invalid image operation identifier.');\n if (request.images !== undefined && (!Array.isArray(request.images) || request.images.length > 5))\n throw new Error('At most five reference images are supported.');\n let total = 0;\n for (const image of request.images ?? []) {\n if (!record(image) || typeof image.data !== 'string' || typeof image.mimeType !== 'string')\n throw new Error('Invalid reference image.');\n const bytes = decodeImage(image.data, MAX_REFERENCE_BYTES);\n total += bytes.length;\n if (total > MAX_REFERENCES_BYTES || !matchesMime(bytes, image.mimeType))\n throw new Error('Invalid or oversized reference image.');\n }\n const { token, accountId: id } = await chatgptCredentials(dependencies, LOGIN_MESSAGE, request.signal);\n let response: Response;\n try {\n response = await (dependencies.fetch ?? globalThis.fetch)(\n BASE_URL + (request.images?.length ? 'edits' : 'generations'),\n {\n method: 'POST',\n redirect: 'error',\n signal: request.signal,\n headers: {\n Authorization: `Bearer ${token}`,\n 'chatgpt-account-id': id,\n originator: 'po_image_gen',\n 'User-Agent': '@agimon-ai/po-image-gen',\n 'Content-Type': 'application/json',\n 'x-codex-image-turn-id': request.correlationId,\n },\n body: JSON.stringify({\n prompt: request.prompt,\n background: request.transparentBackground ? 'transparent' : 'opaque',\n model: 'gpt-image-2',\n quality: 'auto',\n size: 'auto',\n ...(request.images?.length\n ? {\n images: request.images.map((image) => ({\n image_url: `data:${image.mimeType};base64,${image.data}`,\n })),\n }\n : {}),\n }),\n },\n );\n } catch {\n request.signal?.throwIfAborted();\n throw new Error('Image generation request 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('Image generation was denied for this account.');\n if (response.status === 429) {\n const reset = response.headers.get('x-image-gen-primary-reset-at');\n throw new Error(\n `Image generation quota reached.${reset && /^\\d{1,12}$/.test(reset) ? ` Reset time: ${reset}.` : ''}`,\n );\n }\n throw new Error('Image generation request failed.');\n }\n let body: unknown;\n try {\n body = await readBoundedJson(response, MAX_RESPONSE_BYTES, request.signal);\n } catch {\n request.signal?.throwIfAborted();\n throw new Error(INVALID_RESPONSE);\n }\n const first = record(body) && Array.isArray(body.data) ? (body.data[0] as unknown) : undefined;\n if (!record(first) || typeof first.b64_json !== 'string') throw new Error(INVALID_RESPONSE);\n const bytes = decodeImage(first.b64_json, MAX_IMAGE_BYTES);\n if (!matchesMime(bytes, 'image/png')) throw new Error(INVALID_RESPONSE);\n const requestId = response.headers.get('x-codex-imagegen-request-id');\n const generationId = first.generation_id;\n return {\n data: first.b64_json,\n mimeType: 'image/png' as const,\n ...(requestId && /^[A-Za-z0-9_-]{1,256}$/.test(requestId) ? { requestId } : {}),\n ...(typeof generationId === 'string' && /^[A-Za-z0-9_-]{1,256}$/.test(generationId) ? { generationId } : {}),\n };\n },\n };\n}\n"],"mappings":";;AAGA,MAAM,WAAW;AACjB,MAAM,kBAAkB;AACxB,MAAM,sBAAsB;AAC5B,MAAM,uBAAuB;AAC7B,MAAM,qBAAqB,KAAK,KAAM,kBAAkB,IAAK,CAAC,IAAI;AAClE,MAAM,gBAAgB,6CAA6CA,cAAAA;AACnE,MAAM,mBAAmB;AACzB,MAAM,gBAAgB,OAAO,KAAK;CAAC;CAAK;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;AAAE,CAAC;AAEnE,SAAS,OAAO,OAAkD;CAChE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AACA,SAAS,YAAY,MAAc,OAAuB;CACxD,IAAI,CAAC,QAAQ,KAAK,SAAS,KAAK,KAAM,QAAQ,IAAK,CAAC,IAAI,KAAK,CAAC,yBAAyB,KAAK,IAAI,GAC9F,MAAM,IAAI,MAAM,gBAAgB;CAClC,MAAM,QAAQ,OAAO,KAAK,MAAM,QAAQ;CACxC,IAAI,MAAM,SAAS,SAAS,MAAM,SAAS,QAAQ,MAAM,MAAM,MAAM,IAAI,MAAM,gBAAgB;CAC/F,OAAO;AACT;AAEA,SAAS,YAAY,OAAe,UAA2B;CAC7D,IAAI,aAAa,aAAa,OAAO,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,OAAO,aAAa;CAC9E,IAAI,aAAa,cAAc,OAAO,MAAM,OAAO,OAAO,MAAM,OAAO,OAAO,MAAM,OAAO;CAC3F,OACE,aAAa,gBAAgB,MAAM,SAAS,SAAS,GAAG,CAAC,MAAM,UAAU,MAAM,SAAS,SAAS,GAAG,EAAE,MAAM;AAEhH;;AAGA,SAAgB,yBAAyB,cAA0C;CACjF,OAAO;EACL,iBAAiB,aAAa,UAAU;EACxC,MAAM,SAAS,SAAiC;GAC9C,QAAQ,QAAQ,eAAe;GAC/B,IAAI,OAAO,QAAQ,WAAW,YAAY,CAAC,QAAQ,OAAO,KAAK,GAAG,MAAM,IAAI,MAAM,8BAA8B;GAChH,IAAI,QAAQ,0BAA0B,KAAA,KAAa,OAAO,QAAQ,0BAA0B,WAC1F,MAAM,IAAI,MAAM,8BAA8B;GAChD,IAAI,OAAO,QAAQ,kBAAkB,YAAY,CAAC,wBAAwB,KAAK,QAAQ,aAAa,GAClG,MAAM,IAAI,MAAM,qCAAqC;GACvD,IAAI,QAAQ,WAAW,KAAA,MAAc,CAAC,MAAM,QAAQ,QAAQ,MAAM,KAAK,QAAQ,OAAO,SAAS,IAC7F,MAAM,IAAI,MAAM,8CAA8C;GAChE,IAAI,QAAQ;GACZ,KAAK,MAAM,SAAS,QAAQ,UAAU,CAAC,GAAG;IACxC,IAAI,CAAC,OAAO,KAAK,KAAK,OAAO,MAAM,SAAS,YAAY,OAAO,MAAM,aAAa,UAChF,MAAM,IAAI,MAAM,0BAA0B;IAC5C,MAAM,QAAQ,YAAY,MAAM,MAAM,mBAAmB;IACzD,SAAS,MAAM;IACf,IAAI,QAAQ,wBAAwB,CAAC,YAAY,OAAO,MAAM,QAAQ,GACpE,MAAM,IAAI,MAAM,uCAAuC;GAC3D;GACA,MAAM,EAAE,OAAO,WAAW,OAAO,MAAMC,cAAAA,mBAAmB,cAAc,eAAe,QAAQ,MAAM;GACrG,IAAI;GACJ,IAAI;IACF,WAAW,OAAO,aAAa,SAAS,WAAW,MAAA,CACjD,YAAY,QAAQ,QAAQ,SAAS,UAAU,gBAC/C;KACE,QAAQ;KACR,UAAU;KACV,QAAQ,QAAQ;KAChB,SAAS;MACP,eAAe,UAAU;MACzB,sBAAsB;MACtB,YAAY;MACZ,cAAc;MACd,gBAAgB;MAChB,yBAAyB,QAAQ;KACnC;KACA,MAAM,KAAK,UAAU;MACnB,QAAQ,QAAQ;MAChB,YAAY,QAAQ,wBAAwB,gBAAgB;MAC5D,OAAO;MACP,SAAS;MACT,MAAM;MACN,GAAI,QAAQ,QAAQ,SAChB,EACE,QAAQ,QAAQ,OAAO,KAAK,WAAW,EACrC,WAAW,QAAQ,MAAM,SAAS,UAAU,MAAM,OACpD,EAAE,EACJ,IACA,CAAC;KACP,CAAC;IACH,CACF;GACF,QAAQ;IACN,QAAQ,QAAQ,eAAe;IAC/B,MAAM,IAAI,MAAM,kCAAkC;GACpD;GACA,IAAI,CAAC,SAAS,IAAI;IAChB,MAAM,SAAS,MAAM,OAAO,CAAC,CAAC,YAAY,KAAA,CAAS;IACnD,IAAI,SAAS,WAAW,KAAK,MAAM,IAAI,MAAM,aAAa;IAC1D,IAAI,SAAS,WAAW,KAAK,MAAM,IAAI,MAAM,+CAA+C;IAC5F,IAAI,SAAS,WAAW,KAAK;KAC3B,MAAM,QAAQ,SAAS,QAAQ,IAAI,8BAA8B;KACjE,MAAM,IAAI,MACR,kCAAkC,SAAS,aAAa,KAAK,KAAK,IAAI,gBAAgB,MAAM,KAAK,IACnG;IACF;IACA,MAAM,IAAI,MAAM,kCAAkC;GACpD;GACA,IAAI;GACJ,IAAI;IACF,OAAO,MAAMC,cAAAA,gBAAgB,UAAU,oBAAoB,QAAQ,MAAM;GAC3E,QAAQ;IACN,QAAQ,QAAQ,eAAe;IAC/B,MAAM,IAAI,MAAM,gBAAgB;GAClC;GACA,MAAM,QAAQ,OAAO,IAAI,KAAK,MAAM,QAAQ,KAAK,IAAI,IAAK,KAAK,KAAK,KAAiB,KAAA;GACrF,IAAI,CAAC,OAAO,KAAK,KAAK,OAAO,MAAM,aAAa,UAAU,MAAM,IAAI,MAAM,gBAAgB;GAE1F,IAAI,CAAC,YADS,YAAY,MAAM,UAAU,eACrB,GAAG,WAAW,GAAG,MAAM,IAAI,MAAM,gBAAgB;GACtE,MAAM,YAAY,SAAS,QAAQ,IAAI,6BAA6B;GACpE,MAAM,eAAe,MAAM;GAC3B,OAAO;IACL,MAAM,MAAM;IACZ,UAAU;IACV,GAAI,aAAa,yBAAyB,KAAK,SAAS,IAAI,EAAE,UAAU,IAAI,CAAC;IAC7E,GAAI,OAAO,iBAAiB,YAAY,yBAAyB,KAAK,YAAY,IAAI,EAAE,aAAa,IAAI,CAAC;GAC5G;EACF;CACF;AACF"}
@@ -31,7 +31,7 @@ function matchesMime(bytes, mimeType) {
31
31
  if (mimeType === "image/jpeg") return bytes[0] === 255 && bytes[1] === 216 && bytes[2] === 255;
32
32
  return mimeType === "image/webp" && bytes.toString("ascii", 0, 4) === "RIFF" && bytes.toString("ascii", 8, 12) === "WEBP";
33
33
  }
34
- /** Host-only transport: authentication never crosses the facet boundary. */
34
+ /** Host-only transport: authentication never crosses the package boundary. */
35
35
  function createChatgptImageClient(dependencies) {
36
36
  return {
37
37
  available: () => dependencies.available(),
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/chatgptImages/index.ts"],"sourcesContent":["import { CHATGPT_SIGN_IN_HINT, chatgptCredentials, readBoundedJson } from '../chatgptAuth';\nimport type { ChatgptBackendDependencies, ImageGenerationRequest } from './type';\n\nconst BASE_URL = 'https://chatgpt.com/backend-api/codex/images/';\nconst MAX_IMAGE_BYTES = 32 * 1024 * 1024;\nconst MAX_REFERENCE_BYTES = 20 * 1024 * 1024;\nconst MAX_REFERENCES_BYTES = 50 * 1024 * 1024;\nconst MAX_RESPONSE_BYTES = Math.ceil((MAX_IMAGE_BYTES * 4) / 3) + 1024 * 1024;\nconst LOGIN_MESSAGE = `Image generation needs a ChatGPT sign-in. ${CHATGPT_SIGN_IN_HINT}`;\nconst INVALID_RESPONSE = 'Image generation returned an invalid image.';\nconst PNG_SIGNATURE = Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]);\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nfunction decodeImage(data: string, limit: number): Buffer {\n if (!data || data.length > Math.ceil((limit * 4) / 3) + 4 || !/^[A-Za-z0-9+/]*={0,2}$/.test(data))\n throw new Error(INVALID_RESPONSE);\n const bytes = Buffer.from(data, 'base64');\n if (bytes.length > limit || bytes.toString('base64') !== data) throw new Error(INVALID_RESPONSE);\n return bytes;\n}\n\nfunction matchesMime(bytes: Buffer, mimeType: string): boolean {\n if (mimeType === 'image/png') return bytes.subarray(0, 8).equals(PNG_SIGNATURE);\n if (mimeType === 'image/jpeg') return bytes[0] === 255 && bytes[1] === 216 && bytes[2] === 255;\n return (\n mimeType === 'image/webp' && bytes.toString('ascii', 0, 4) === 'RIFF' && bytes.toString('ascii', 8, 12) === 'WEBP'\n );\n}\n\n/** Host-only transport: authentication never crosses the facet boundary. */\nexport function createChatgptImageClient(dependencies: ChatgptBackendDependencies) {\n return {\n available: () => dependencies.available(),\n async generate(request: ImageGenerationRequest) {\n request.signal?.throwIfAborted();\n if (typeof request.prompt !== 'string' || !request.prompt.trim()) throw new Error('An image prompt is required.');\n if (request.transparentBackground !== undefined && typeof request.transparentBackground !== 'boolean')\n throw new Error('Invalid transparency option.');\n if (typeof request.correlationId !== 'string' || !/^[\\x21-\\x7e]{1,1024}$/.test(request.correlationId))\n throw new Error('Invalid image operation identifier.');\n if (request.images !== undefined && (!Array.isArray(request.images) || request.images.length > 5))\n throw new Error('At most five reference images are supported.');\n let total = 0;\n for (const image of request.images ?? []) {\n if (!record(image) || typeof image.data !== 'string' || typeof image.mimeType !== 'string')\n throw new Error('Invalid reference image.');\n const bytes = decodeImage(image.data, MAX_REFERENCE_BYTES);\n total += bytes.length;\n if (total > MAX_REFERENCES_BYTES || !matchesMime(bytes, image.mimeType))\n throw new Error('Invalid or oversized reference image.');\n }\n const { token, accountId: id } = await chatgptCredentials(dependencies, LOGIN_MESSAGE, request.signal);\n let response: Response;\n try {\n response = await (dependencies.fetch ?? globalThis.fetch)(\n BASE_URL + (request.images?.length ? 'edits' : 'generations'),\n {\n method: 'POST',\n redirect: 'error',\n signal: request.signal,\n headers: {\n Authorization: `Bearer ${token}`,\n 'chatgpt-account-id': id,\n originator: 'po_image_gen',\n 'User-Agent': '@agimon-ai/po-image-gen',\n 'Content-Type': 'application/json',\n 'x-codex-image-turn-id': request.correlationId,\n },\n body: JSON.stringify({\n prompt: request.prompt,\n background: request.transparentBackground ? 'transparent' : 'opaque',\n model: 'gpt-image-2',\n quality: 'auto',\n size: 'auto',\n ...(request.images?.length\n ? {\n images: request.images.map((image) => ({\n image_url: `data:${image.mimeType};base64,${image.data}`,\n })),\n }\n : {}),\n }),\n },\n );\n } catch {\n request.signal?.throwIfAborted();\n throw new Error('Image generation request 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('Image generation was denied for this account.');\n if (response.status === 429) {\n const reset = response.headers.get('x-image-gen-primary-reset-at');\n throw new Error(\n `Image generation quota reached.${reset && /^\\d{1,12}$/.test(reset) ? ` Reset time: ${reset}.` : ''}`,\n );\n }\n throw new Error('Image generation request failed.');\n }\n let body: unknown;\n try {\n body = await readBoundedJson(response, MAX_RESPONSE_BYTES, request.signal);\n } catch {\n request.signal?.throwIfAborted();\n throw new Error(INVALID_RESPONSE);\n }\n const first = record(body) && Array.isArray(body.data) ? (body.data[0] as unknown) : undefined;\n if (!record(first) || typeof first.b64_json !== 'string') throw new Error(INVALID_RESPONSE);\n const bytes = decodeImage(first.b64_json, MAX_IMAGE_BYTES);\n if (!matchesMime(bytes, 'image/png')) throw new Error(INVALID_RESPONSE);\n const requestId = response.headers.get('x-codex-imagegen-request-id');\n const generationId = first.generation_id;\n return {\n data: first.b64_json,\n mimeType: 'image/png' as const,\n ...(requestId && /^[A-Za-z0-9_-]{1,256}$/.test(requestId) ? { requestId } : {}),\n ...(typeof generationId === 'string' && /^[A-Za-z0-9_-]{1,256}$/.test(generationId) ? { generationId } : {}),\n };\n },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/chatgptImages/index.ts"],"sourcesContent":["import { CHATGPT_SIGN_IN_HINT, chatgptCredentials, readBoundedJson } from '../chatgptAuth';\nimport type { ChatgptBackendDependencies, ImageGenerationRequest } from './type';\n\nconst BASE_URL = 'https://chatgpt.com/backend-api/codex/images/';\nconst MAX_IMAGE_BYTES = 32 * 1024 * 1024;\nconst MAX_REFERENCE_BYTES = 20 * 1024 * 1024;\nconst MAX_REFERENCES_BYTES = 50 * 1024 * 1024;\nconst MAX_RESPONSE_BYTES = Math.ceil((MAX_IMAGE_BYTES * 4) / 3) + 1024 * 1024;\nconst LOGIN_MESSAGE = `Image generation needs a ChatGPT sign-in. ${CHATGPT_SIGN_IN_HINT}`;\nconst INVALID_RESPONSE = 'Image generation returned an invalid image.';\nconst PNG_SIGNATURE = Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]);\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nfunction decodeImage(data: string, limit: number): Buffer {\n if (!data || data.length > Math.ceil((limit * 4) / 3) + 4 || !/^[A-Za-z0-9+/]*={0,2}$/.test(data))\n throw new Error(INVALID_RESPONSE);\n const bytes = Buffer.from(data, 'base64');\n if (bytes.length > limit || bytes.toString('base64') !== data) throw new Error(INVALID_RESPONSE);\n return bytes;\n}\n\nfunction matchesMime(bytes: Buffer, mimeType: string): boolean {\n if (mimeType === 'image/png') return bytes.subarray(0, 8).equals(PNG_SIGNATURE);\n if (mimeType === 'image/jpeg') return bytes[0] === 255 && bytes[1] === 216 && bytes[2] === 255;\n return (\n mimeType === 'image/webp' && bytes.toString('ascii', 0, 4) === 'RIFF' && bytes.toString('ascii', 8, 12) === 'WEBP'\n );\n}\n\n/** Host-only transport: authentication never crosses the package boundary. */\nexport function createChatgptImageClient(dependencies: ChatgptBackendDependencies) {\n return {\n available: () => dependencies.available(),\n async generate(request: ImageGenerationRequest) {\n request.signal?.throwIfAborted();\n if (typeof request.prompt !== 'string' || !request.prompt.trim()) throw new Error('An image prompt is required.');\n if (request.transparentBackground !== undefined && typeof request.transparentBackground !== 'boolean')\n throw new Error('Invalid transparency option.');\n if (typeof request.correlationId !== 'string' || !/^[\\x21-\\x7e]{1,1024}$/.test(request.correlationId))\n throw new Error('Invalid image operation identifier.');\n if (request.images !== undefined && (!Array.isArray(request.images) || request.images.length > 5))\n throw new Error('At most five reference images are supported.');\n let total = 0;\n for (const image of request.images ?? []) {\n if (!record(image) || typeof image.data !== 'string' || typeof image.mimeType !== 'string')\n throw new Error('Invalid reference image.');\n const bytes = decodeImage(image.data, MAX_REFERENCE_BYTES);\n total += bytes.length;\n if (total > MAX_REFERENCES_BYTES || !matchesMime(bytes, image.mimeType))\n throw new Error('Invalid or oversized reference image.');\n }\n const { token, accountId: id } = await chatgptCredentials(dependencies, LOGIN_MESSAGE, request.signal);\n let response: Response;\n try {\n response = await (dependencies.fetch ?? globalThis.fetch)(\n BASE_URL + (request.images?.length ? 'edits' : 'generations'),\n {\n method: 'POST',\n redirect: 'error',\n signal: request.signal,\n headers: {\n Authorization: `Bearer ${token}`,\n 'chatgpt-account-id': id,\n originator: 'po_image_gen',\n 'User-Agent': '@agimon-ai/po-image-gen',\n 'Content-Type': 'application/json',\n 'x-codex-image-turn-id': request.correlationId,\n },\n body: JSON.stringify({\n prompt: request.prompt,\n background: request.transparentBackground ? 'transparent' : 'opaque',\n model: 'gpt-image-2',\n quality: 'auto',\n size: 'auto',\n ...(request.images?.length\n ? {\n images: request.images.map((image) => ({\n image_url: `data:${image.mimeType};base64,${image.data}`,\n })),\n }\n : {}),\n }),\n },\n );\n } catch {\n request.signal?.throwIfAborted();\n throw new Error('Image generation request 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('Image generation was denied for this account.');\n if (response.status === 429) {\n const reset = response.headers.get('x-image-gen-primary-reset-at');\n throw new Error(\n `Image generation quota reached.${reset && /^\\d{1,12}$/.test(reset) ? ` Reset time: ${reset}.` : ''}`,\n );\n }\n throw new Error('Image generation request failed.');\n }\n let body: unknown;\n try {\n body = await readBoundedJson(response, MAX_RESPONSE_BYTES, request.signal);\n } catch {\n request.signal?.throwIfAborted();\n throw new Error(INVALID_RESPONSE);\n }\n const first = record(body) && Array.isArray(body.data) ? (body.data[0] as unknown) : undefined;\n if (!record(first) || typeof first.b64_json !== 'string') throw new Error(INVALID_RESPONSE);\n const bytes = decodeImage(first.b64_json, MAX_IMAGE_BYTES);\n if (!matchesMime(bytes, 'image/png')) throw new Error(INVALID_RESPONSE);\n const requestId = response.headers.get('x-codex-imagegen-request-id');\n const generationId = first.generation_id;\n return {\n data: first.b64_json,\n mimeType: 'image/png' as const,\n ...(requestId && /^[A-Za-z0-9_-]{1,256}$/.test(requestId) ? { requestId } : {}),\n ...(typeof generationId === 'string' && /^[A-Za-z0-9_-]{1,256}$/.test(generationId) ? { generationId } : {}),\n };\n },\n };\n}\n"],"mappings":"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"}