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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1233) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  4. package/dist/agentModel.cjs +4 -0
  5. package/dist/agentModel.d.mts +2 -0
  6. package/dist/agentModel.mjs +2 -0
  7. package/dist/apiContracts.cjs +2009 -0
  8. package/dist/apiContracts.cjs.map +1 -0
  9. package/dist/apiContracts.d.mts +1018 -0
  10. package/dist/apiContracts.d.mts.map +1 -0
  11. package/dist/apiContracts.mjs +1989 -0
  12. package/dist/apiContracts.mjs.map +1 -0
  13. package/dist/askUser.cjs +8 -0
  14. package/dist/askUser.d.mts +2 -0
  15. package/dist/askUser.mjs +2 -0
  16. package/dist/authorTools.cjs +5 -0
  17. package/dist/authorTools.d.mts +2 -0
  18. package/dist/authorTools.mjs +2 -0
  19. package/dist/backgroundWork.cjs +7 -0
  20. package/dist/backgroundWork.d.mts +2 -0
  21. package/dist/backgroundWork.mjs +2 -0
  22. package/dist/bundleAssetPolicy.cjs +5 -0
  23. package/dist/bundleAssetPolicy.d.mts +2 -0
  24. package/dist/bundleAssetPolicy.mjs +2 -0
  25. package/dist/childProcess.cjs +15 -0
  26. package/dist/childProcess.d.mts +2 -0
  27. package/dist/childProcess.mjs +2 -0
  28. package/dist/childSession.cjs +8 -0
  29. package/dist/childSession.d.mts +3 -0
  30. package/dist/childSession.mjs +3 -0
  31. package/dist/cockpitContainer.cjs +4 -0
  32. package/dist/cockpitContainer.d.mts +2 -0
  33. package/dist/cockpitContainer.mjs +2 -0
  34. package/dist/config.cjs +13 -0
  35. package/dist/config.d.mts +3 -0
  36. package/dist/config.mjs +2 -0
  37. package/dist/contextApi.cjs +10 -0
  38. package/dist/contextApi.d.mts +4 -0
  39. package/dist/contextApi.mjs +3 -0
  40. package/dist/contextContributions.cjs +7 -0
  41. package/dist/contextContributions.d.mts +3 -0
  42. package/dist/contextContributions.mjs +3 -0
  43. package/dist/contextDetail.cjs +65 -0
  44. package/dist/contextDetail.cjs.map +1 -0
  45. package/dist/contextDetail.d.mts +19 -0
  46. package/dist/contextDetail.d.mts.map +1 -0
  47. package/dist/contextDetail.mjs +64 -0
  48. package/dist/contextDetail.mjs.map +1 -0
  49. package/dist/contextDetailStore.cjs +100 -0
  50. package/dist/contextDetailStore.cjs.map +1 -0
  51. package/dist/contextDetailStore.d.mts +19 -0
  52. package/dist/contextDetailStore.d.mts.map +1 -0
  53. package/dist/contextDetailStore.mjs +91 -0
  54. package/dist/contextDetailStore.mjs.map +1 -0
  55. package/dist/contextProjection.cjs +121 -0
  56. package/dist/contextProjection.cjs.map +1 -0
  57. package/dist/contextProjection.d.mts +130 -0
  58. package/dist/contextProjection.d.mts.map +1 -0
  59. package/dist/contextProjection.mjs +117 -0
  60. package/dist/contextProjection.mjs.map +1 -0
  61. package/dist/cordisHost.cjs +11 -0
  62. package/dist/cordisHost.d.mts +2 -0
  63. package/dist/cordisHost.mjs +2 -0
  64. package/dist/delegation.cjs +18 -0
  65. package/dist/delegation.d.mts +2 -0
  66. package/dist/delegation.mjs +2 -0
  67. package/dist/doomPackage.cjs +61 -0
  68. package/dist/doomPackage.cjs.map +1 -0
  69. package/dist/doomPackage.d.mts +17 -0
  70. package/dist/doomPackage.d.mts.map +1 -0
  71. package/dist/doomPackage.mjs +54 -0
  72. package/dist/doomPackage.mjs.map +1 -0
  73. package/dist/executionBudget.cjs +231 -0
  74. package/dist/executionBudget.cjs.map +1 -0
  75. package/dist/executionBudget.d.mts +11 -0
  76. package/dist/executionBudget.d.mts.map +1 -0
  77. package/dist/executionBudget.mjs +225 -0
  78. package/dist/executionBudget.mjs.map +1 -0
  79. package/dist/extensionFile.cjs +24 -0
  80. package/dist/extensionFile.d.mts +3 -0
  81. package/dist/extensionFile.mjs +2 -0
  82. package/dist/footer.cjs +6 -0
  83. package/dist/footer.d.mts +2 -0
  84. package/dist/footer.mjs +2 -0
  85. package/dist/headless.cjs +9 -0
  86. package/dist/headless.d.mts +2 -0
  87. package/dist/headless.mjs +2 -0
  88. package/dist/headlessHub.cjs +914 -0
  89. package/dist/headlessHub.cjs.map +1 -0
  90. package/dist/headlessHub.d.mts +157 -0
  91. package/dist/headlessHub.d.mts.map +1 -0
  92. package/dist/headlessHub.mjs +911 -0
  93. package/dist/headlessHub.mjs.map +1 -0
  94. package/dist/headlessServer.cjs +910 -0
  95. package/dist/headlessServer.cjs.map +1 -0
  96. package/dist/headlessServer.d.mts +64 -0
  97. package/dist/headlessServer.d.mts.map +1 -0
  98. package/dist/headlessServer.mjs +904 -0
  99. package/dist/headlessServer.mjs.map +1 -0
  100. package/dist/headlessSessionHost.cjs +0 -0
  101. package/dist/headlessSessionHost.d.mts +71 -0
  102. package/dist/headlessSessionHost.d.mts.map +1 -0
  103. package/dist/headlessSessionHost.mjs +1 -0
  104. package/dist/headlessSessionManager.cjs +51 -0
  105. package/dist/headlessSessionManager.cjs.map +1 -0
  106. package/dist/headlessSessionManager.d.mts +6 -0
  107. package/dist/headlessSessionManager.d.mts.map +1 -0
  108. package/dist/headlessSessionManager.mjs +50 -0
  109. package/dist/headlessSessionManager.mjs.map +1 -0
  110. package/dist/help.cjs +24 -0
  111. package/dist/help.d.mts +3 -0
  112. package/dist/help.mjs +3 -0
  113. package/dist/history.cjs +25 -0
  114. package/dist/history.d.mts +10 -0
  115. package/dist/history.mjs +10 -0
  116. package/dist/historyImport.cjs +553 -0
  117. package/dist/historyImport.cjs.map +1 -0
  118. package/dist/historyImport.d.mts +76 -0
  119. package/dist/historyImport.d.mts.map +1 -0
  120. package/dist/historyImport.mjs +547 -0
  121. package/dist/historyImport.mjs.map +1 -0
  122. package/dist/historyOwnership.cjs +253 -0
  123. package/dist/historyOwnership.cjs.map +1 -0
  124. package/dist/historyOwnership.d.mts +23 -0
  125. package/dist/historyOwnership.d.mts.map +1 -0
  126. package/dist/historyOwnership.mjs +247 -0
  127. package/dist/historyOwnership.mjs.map +1 -0
  128. package/dist/hubChannel.cjs +4 -0
  129. package/dist/hubChannel.d.mts +2 -0
  130. package/dist/hubChannel.mjs +2 -0
  131. package/dist/index.cjs +44 -0
  132. package/dist/index.d.mts +6 -0
  133. package/dist/index.mjs +6 -0
  134. package/dist/json.cjs +6 -0
  135. package/dist/json.d.mts +2 -0
  136. package/dist/json.mjs +2 -0
  137. package/dist/jsonlSessionRepo.cjs +217 -0
  138. package/dist/jsonlSessionRepo.cjs.map +1 -0
  139. package/dist/jsonlSessionRepo.d.mts +7 -0
  140. package/dist/jsonlSessionRepo.d.mts.map +1 -0
  141. package/dist/jsonlSessionRepo.mjs +212 -0
  142. package/dist/jsonlSessionRepo.mjs.map +1 -0
  143. package/dist/kernel.cjs +3 -0
  144. package/dist/kernel.d.mts +3 -0
  145. package/dist/kernel.mjs +2 -0
  146. package/dist/leader.cjs +9 -0
  147. package/dist/leader.d.mts +2 -0
  148. package/dist/leader.mjs +2 -0
  149. package/dist/logSinkTelemetry.cjs +5 -0
  150. package/dist/logSinkTelemetry.d.mts +2 -0
  151. package/dist/logSinkTelemetry.mjs +2 -0
  152. package/dist/machineApi.cjs +92 -0
  153. package/dist/machineApi.cjs.map +1 -0
  154. package/dist/machineApi.d.mts +7 -0
  155. package/dist/machineApi.d.mts.map +1 -0
  156. package/dist/machineApi.mjs +88 -0
  157. package/dist/machineApi.mjs.map +1 -0
  158. package/dist/main.cjs +11 -0
  159. package/dist/main.d.mts +5 -0
  160. package/dist/main.mjs +4 -0
  161. package/dist/mcpFacet.cjs +12 -0
  162. package/dist/mcpFacet.d.mts +4 -0
  163. package/dist/mcpFacet.mjs +4 -0
  164. package/dist/mcpProjection.cjs +16 -0
  165. package/dist/mcpProjection.d.mts +2 -0
  166. package/dist/mcpProjection.mjs +2 -0
  167. package/dist/mcpSchemaCost.cjs +195 -0
  168. package/dist/mcpSchemaCost.cjs.map +1 -0
  169. package/dist/mcpSchemaCost.d.mts +35 -0
  170. package/dist/mcpSchemaCost.d.mts.map +1 -0
  171. package/dist/mcpSchemaCost.mjs +190 -0
  172. package/dist/mcpSchemaCost.mjs.map +1 -0
  173. package/dist/mcpSession.cjs +9 -0
  174. package/dist/mcpSession.d.mts +2 -0
  175. package/dist/mcpSession.mjs +2 -0
  176. package/dist/mcpStatus.cjs +7 -0
  177. package/dist/mcpStatus.d.mts +2 -0
  178. package/dist/mcpStatus.mjs +2 -0
  179. package/dist/mcpToolResolver.cjs +5 -0
  180. package/dist/mcpToolResolver.d.mts +2 -0
  181. package/dist/mcpToolResolver.mjs +2 -0
  182. package/dist/mcpWidget.cjs +0 -0
  183. package/dist/mcpWidget.d.mts +2 -0
  184. package/dist/mcpWidget.mjs +1 -0
  185. package/dist/moduleResolution.cjs +405 -0
  186. package/dist/moduleResolution.cjs.map +1 -0
  187. package/dist/moduleResolution.d.mts +67 -0
  188. package/dist/moduleResolution.d.mts.map +1 -0
  189. package/dist/moduleResolution.mjs +389 -0
  190. package/dist/moduleResolution.mjs.map +1 -0
  191. package/dist/narration.cjs +10 -0
  192. package/dist/narration.d.mts +2 -0
  193. package/dist/narration.mjs +2 -0
  194. package/dist/notification.cjs +17 -0
  195. package/dist/notification.d.mts +2 -0
  196. package/dist/notification.mjs +2 -0
  197. package/dist/packageApi.cjs +16 -0
  198. package/dist/packageApi.d.mts +3 -0
  199. package/dist/packageApi.mjs +3 -0
  200. package/dist/packageApiServer.cjs +191 -0
  201. package/dist/packageApiServer.cjs.map +1 -0
  202. package/dist/packageApiServer.d.mts +57 -0
  203. package/dist/packageApiServer.d.mts.map +1 -0
  204. package/dist/packageApiServer.mjs +189 -0
  205. package/dist/packageApiServer.mjs.map +1 -0
  206. package/dist/piExtension.cjs +13 -0
  207. package/dist/piExtension.d.mts +5 -0
  208. package/dist/piExtension.mjs +4 -0
  209. package/dist/piSettings.cjs +12 -0
  210. package/dist/piSettings.d.mts +2 -0
  211. package/dist/piSettings.mjs +2 -0
  212. package/dist/pluginProtocol.cjs +10 -0
  213. package/dist/pluginProtocol.d.mts +2 -0
  214. package/dist/pluginProtocol.mjs +2 -0
  215. package/dist/profileIdentity.cjs +6 -0
  216. package/dist/profileIdentity.d.mts +2 -0
  217. package/dist/profileIdentity.mjs +2 -0
  218. package/dist/protocol.cjs +10 -0
  219. package/dist/protocol.d.mts +2 -0
  220. package/dist/protocol.mjs +2 -0
  221. package/dist/readiness.cjs +8 -0
  222. package/dist/readiness.d.mts +2 -0
  223. package/dist/readiness.mjs +2 -0
  224. package/dist/relaunchHandoff.cjs +6 -0
  225. package/dist/relaunchHandoff.d.mts +2 -0
  226. package/dist/relaunchHandoff.mjs +2 -0
  227. package/dist/remoteApi.cjs +42 -0
  228. package/dist/remoteApi.cjs.map +1 -0
  229. package/dist/remoteApi.d.mts +7 -0
  230. package/dist/remoteApi.d.mts.map +1 -0
  231. package/dist/remoteApi.mjs +41 -0
  232. package/dist/remoteApi.mjs.map +1 -0
  233. package/dist/remoteRuntime.cjs +460 -0
  234. package/dist/remoteRuntime.cjs.map +1 -0
  235. package/dist/remoteRuntime.d.mts +28 -0
  236. package/dist/remoteRuntime.d.mts.map +1 -0
  237. package/dist/remoteRuntime.mjs +456 -0
  238. package/dist/remoteRuntime.mjs.map +1 -0
  239. package/dist/runtimeConfig.cjs +232 -0
  240. package/dist/runtimeConfig.cjs.map +1 -0
  241. package/dist/runtimeConfig.d.mts +313 -0
  242. package/dist/runtimeConfig.d.mts.map +1 -0
  243. package/dist/runtimeConfig.mjs +221 -0
  244. package/dist/runtimeConfig.mjs.map +1 -0
  245. package/dist/runtimeContextApi.cjs +64 -0
  246. package/dist/runtimeContextApi.cjs.map +1 -0
  247. package/dist/runtimeContextApi.d.mts +16 -0
  248. package/dist/runtimeContextApi.d.mts.map +1 -0
  249. package/dist/runtimeContextApi.mjs +62 -0
  250. package/dist/runtimeContextApi.mjs.map +1 -0
  251. package/dist/runtimeCordisHost.cjs +193 -0
  252. package/dist/runtimeCordisHost.cjs.map +1 -0
  253. package/dist/runtimeCordisHost.d.mts +63 -0
  254. package/dist/runtimeCordisHost.d.mts.map +1 -0
  255. package/dist/runtimeCordisHost.mjs +184 -0
  256. package/dist/runtimeCordisHost.mjs.map +1 -0
  257. package/dist/runtimeHeadlessSessionManager.cjs +0 -0
  258. package/dist/runtimeHeadlessSessionManager.d.mts +18 -0
  259. package/dist/runtimeHeadlessSessionManager.d.mts.map +1 -0
  260. package/dist/runtimeHeadlessSessionManager.mjs +1 -0
  261. package/dist/runtimeIdentity.cjs +26 -0
  262. package/dist/runtimeIdentity.cjs.map +1 -0
  263. package/dist/runtimeIdentity.d.mts +7 -0
  264. package/dist/runtimeIdentity.d.mts.map +1 -0
  265. package/dist/runtimeIdentity.mjs +21 -0
  266. package/dist/runtimeIdentity.mjs.map +1 -0
  267. package/dist/runtimeJson.cjs +46 -0
  268. package/dist/runtimeJson.cjs.map +1 -0
  269. package/dist/runtimeJson.d.mts +22 -0
  270. package/dist/runtimeJson.d.mts.map +1 -0
  271. package/dist/runtimeJson.mjs +39 -0
  272. package/dist/runtimeJson.mjs.map +1 -0
  273. package/dist/runtimeLogSinkTelemetry.cjs +102 -0
  274. package/dist/runtimeLogSinkTelemetry.cjs.map +1 -0
  275. package/dist/runtimeLogSinkTelemetry.d.mts +49 -0
  276. package/dist/runtimeLogSinkTelemetry.d.mts.map +1 -0
  277. package/dist/runtimeLogSinkTelemetry.mjs +99 -0
  278. package/dist/runtimeLogSinkTelemetry.mjs.map +1 -0
  279. package/dist/runtimePiExtension.cjs +339 -0
  280. package/dist/runtimePiExtension.cjs.map +1 -0
  281. package/dist/runtimePiExtension.d.mts +160 -0
  282. package/dist/runtimePiExtension.d.mts.map +1 -0
  283. package/dist/runtimePiExtension.mjs +333 -0
  284. package/dist/runtimePiExtension.mjs.map +1 -0
  285. package/dist/runtimePiSettings.cjs +116 -0
  286. package/dist/runtimePiSettings.cjs.map +1 -0
  287. package/dist/runtimePiSettings.d.mts +29 -0
  288. package/dist/runtimePiSettings.d.mts.map +1 -0
  289. package/dist/runtimePiSettings.mjs +103 -0
  290. package/dist/runtimePiSettings.mjs.map +1 -0
  291. package/dist/runtimeProtocol.cjs +223 -0
  292. package/dist/runtimeProtocol.cjs.map +1 -0
  293. package/dist/runtimeProtocol.d.mts +84 -0
  294. package/dist/runtimeProtocol.d.mts.map +1 -0
  295. package/dist/runtimeProtocol.mjs +215 -0
  296. package/dist/runtimeProtocol.mjs.map +1 -0
  297. package/dist/runtimeToolNames.cjs +51 -0
  298. package/dist/runtimeToolNames.cjs.map +1 -0
  299. package/dist/runtimeToolNames.d.mts +24 -0
  300. package/dist/runtimeToolNames.d.mts.map +1 -0
  301. package/dist/runtimeToolNames.mjs +49 -0
  302. package/dist/runtimeToolNames.mjs.map +1 -0
  303. package/dist/runtimeTransition.cjs +27 -0
  304. package/dist/runtimeTransition.cjs.map +1 -0
  305. package/dist/runtimeTransition.d.mts +114 -0
  306. package/dist/runtimeTransition.d.mts.map +1 -0
  307. package/dist/runtimeTransition.mjs +24 -0
  308. package/dist/runtimeTransition.mjs.map +1 -0
  309. package/dist/sandboxHarness.cjs +6 -0
  310. package/dist/sandboxHarness.d.mts +2 -0
  311. package/dist/sandboxHarness.mjs +2 -0
  312. package/dist/server.cjs +17 -0
  313. package/dist/server.d.mts +10 -0
  314. package/dist/server.mjs +7 -0
  315. package/dist/serverFacet.cjs +30 -0
  316. package/dist/serverFacet.d.mts +8 -0
  317. package/dist/serverFacet.mjs +8 -0
  318. package/dist/serverTelemetry.cjs +25 -0
  319. package/dist/serverTelemetry.cjs.map +1 -0
  320. package/dist/serverTelemetry.d.mts +12 -0
  321. package/dist/serverTelemetry.d.mts.map +1 -0
  322. package/dist/serverTelemetry.mjs +23 -0
  323. package/dist/serverTelemetry.mjs.map +1 -0
  324. package/dist/sessionFilesApi.cjs +96 -0
  325. package/dist/sessionFilesApi.cjs.map +1 -0
  326. package/dist/sessionFilesApi.d.mts +7 -0
  327. package/dist/sessionFilesApi.d.mts.map +1 -0
  328. package/dist/sessionFilesApi.mjs +91 -0
  329. package/dist/sessionFilesApi.mjs.map +1 -0
  330. package/dist/sessionMcp.cjs +6 -0
  331. package/dist/sessionMcp.d.mts +5 -0
  332. package/dist/sessionMcp.mjs +3 -0
  333. package/dist/sessionProtocol.cjs +8 -0
  334. package/dist/sessionProtocol.d.mts +3 -0
  335. package/dist/sessionProtocol.mjs +2 -0
  336. package/dist/skills.cjs +9 -0
  337. package/dist/skills.d.mts +2 -0
  338. package/dist/skills.mjs +2 -0
  339. package/dist/sqliteHistoryImport.cjs +151 -0
  340. package/dist/sqliteHistoryImport.cjs.map +1 -0
  341. package/dist/sqliteHistoryImport.d.mts +8 -0
  342. package/dist/sqliteHistoryImport.d.mts.map +1 -0
  343. package/dist/sqliteHistoryImport.mjs +146 -0
  344. package/dist/sqliteHistoryImport.mjs.map +1 -0
  345. package/dist/sqliteSessionStorage.cjs +53 -0
  346. package/dist/sqliteSessionStorage.cjs.map +1 -0
  347. package/dist/sqliteSessionStorage.d.mts +7 -0
  348. package/dist/sqliteSessionStorage.d.mts.map +1 -0
  349. package/dist/sqliteSessionStorage.mjs +49 -0
  350. package/dist/sqliteSessionStorage.mjs.map +1 -0
  351. package/dist/src/constants/authorTools.cjs +10 -0
  352. package/dist/src/constants/authorTools.cjs.map +1 -0
  353. package/dist/src/constants/authorTools.d.mts +6 -0
  354. package/dist/src/constants/authorTools.d.mts.map +1 -0
  355. package/dist/src/constants/authorTools.mjs +8 -0
  356. package/dist/src/constants/authorTools.mjs.map +1 -0
  357. package/dist/src/constants/contextApi.cjs +28 -0
  358. package/dist/src/constants/contextApi.cjs.map +1 -0
  359. package/dist/src/constants/contextApi.d.mts +21 -0
  360. package/dist/src/constants/contextApi.d.mts.map +1 -0
  361. package/dist/src/constants/contextApi.mjs +23 -0
  362. package/dist/src/constants/contextApi.mjs.map +1 -0
  363. package/dist/src/constants/remote.cjs +90 -0
  364. package/dist/src/constants/remote.cjs.map +1 -0
  365. package/dist/src/constants/remote.mjs +69 -0
  366. package/dist/src/constants/remote.mjs.map +1 -0
  367. package/dist/src/constants/voiceReloadHandoff.cjs +12 -0
  368. package/dist/src/constants/voiceReloadHandoff.cjs.map +1 -0
  369. package/dist/src/constants/voiceReloadHandoff.d.mts +7 -0
  370. package/dist/src/constants/voiceReloadHandoff.d.mts.map +1 -0
  371. package/dist/src/constants/voiceReloadHandoff.mjs +9 -0
  372. package/dist/src/constants/voiceReloadHandoff.mjs.map +1 -0
  373. package/dist/src/constants/voiceTools.cjs +96 -0
  374. package/dist/src/constants/voiceTools.cjs.map +1 -0
  375. package/dist/src/constants/voiceTools.d.mts +58 -0
  376. package/dist/src/constants/voiceTools.d.mts.map +1 -0
  377. package/dist/src/constants/voiceTools.mjs +60 -0
  378. package/dist/src/constants/voiceTools.mjs.map +1 -0
  379. package/dist/src/extensions/extensionFile.cjs +165 -0
  380. package/dist/src/extensions/extensionFile.cjs.map +1 -0
  381. package/dist/src/extensions/extensionFile.d.mts +79 -0
  382. package/dist/src/extensions/extensionFile.d.mts.map +1 -0
  383. package/dist/src/extensions/extensionFile.mjs +144 -0
  384. package/dist/src/extensions/extensionFile.mjs.map +1 -0
  385. package/dist/src/extensions/serverPlugin.cjs +106 -0
  386. package/dist/src/extensions/serverPlugin.cjs.map +1 -0
  387. package/dist/src/extensions/serverPlugin.d.mts +5 -0
  388. package/dist/src/extensions/serverPlugin.d.mts.map +1 -0
  389. package/dist/src/extensions/serverPlugin.mjs +106 -0
  390. package/dist/src/extensions/serverPlugin.mjs.map +1 -0
  391. package/dist/src/extensions/webPlugin.cjs +131 -0
  392. package/dist/src/extensions/webPlugin.cjs.map +1 -0
  393. package/dist/src/extensions/webPlugin.d.mts +66 -0
  394. package/dist/src/extensions/webPlugin.d.mts.map +1 -0
  395. package/dist/src/extensions/webPlugin.mjs +110 -0
  396. package/dist/src/extensions/webPlugin.mjs.map +1 -0
  397. package/dist/src/pi/piSessionRuntime.cjs +572 -0
  398. package/dist/src/pi/piSessionRuntime.cjs.map +1 -0
  399. package/dist/src/pi/piSessionRuntime.d.mts +43 -0
  400. package/dist/src/pi/piSessionRuntime.d.mts.map +1 -0
  401. package/dist/src/pi/piSessionRuntime.mjs +571 -0
  402. package/dist/src/pi/piSessionRuntime.mjs.map +1 -0
  403. package/dist/src/pi/piWebSocketListener.cjs +115 -0
  404. package/dist/src/pi/piWebSocketListener.cjs.map +1 -0
  405. package/dist/src/pi/piWebSocketListener.mjs +115 -0
  406. package/dist/src/pi/piWebSocketListener.mjs.map +1 -0
  407. package/dist/src/schemas/agentModel.cjs +33 -0
  408. package/dist/src/schemas/agentModel.cjs.map +1 -0
  409. package/dist/src/schemas/agentModel.d.mts +26 -0
  410. package/dist/src/schemas/agentModel.d.mts.map +1 -0
  411. package/dist/src/schemas/agentModel.mjs +32 -0
  412. package/dist/src/schemas/agentModel.mjs.map +1 -0
  413. package/dist/src/schemas/apiContracts.d.mts +58 -0
  414. package/dist/src/schemas/apiContracts.d.mts.map +1 -0
  415. package/dist/src/schemas/askUser.cjs +42 -0
  416. package/dist/src/schemas/askUser.cjs.map +1 -0
  417. package/dist/src/schemas/askUser.d.mts +47 -0
  418. package/dist/src/schemas/askUser.d.mts.map +1 -0
  419. package/dist/src/schemas/askUser.mjs +37 -0
  420. package/dist/src/schemas/askUser.mjs.map +1 -0
  421. package/dist/src/schemas/backgroundWork.cjs +31 -0
  422. package/dist/src/schemas/backgroundWork.cjs.map +1 -0
  423. package/dist/src/schemas/backgroundWork.d.mts +72 -0
  424. package/dist/src/schemas/backgroundWork.d.mts.map +1 -0
  425. package/dist/src/schemas/backgroundWork.mjs +27 -0
  426. package/dist/src/schemas/backgroundWork.mjs.map +1 -0
  427. package/dist/src/schemas/childProcess.cjs +67 -0
  428. package/dist/src/schemas/childProcess.cjs.map +1 -0
  429. package/dist/src/schemas/childProcess.d.mts +30 -0
  430. package/dist/src/schemas/childProcess.d.mts.map +1 -0
  431. package/dist/src/schemas/childProcess.mjs +55 -0
  432. package/dist/src/schemas/childProcess.mjs.map +1 -0
  433. package/dist/src/schemas/cockpitContainer.cjs +31 -0
  434. package/dist/src/schemas/cockpitContainer.cjs.map +1 -0
  435. package/dist/src/schemas/cockpitContainer.d.mts +80 -0
  436. package/dist/src/schemas/cockpitContainer.d.mts.map +1 -0
  437. package/dist/src/schemas/cockpitContainer.mjs +30 -0
  438. package/dist/src/schemas/cockpitContainer.mjs.map +1 -0
  439. package/dist/src/schemas/contextContributions.cjs +17 -0
  440. package/dist/src/schemas/contextContributions.cjs.map +1 -0
  441. package/dist/src/schemas/contextContributions.d.mts +49 -0
  442. package/dist/src/schemas/contextContributions.d.mts.map +1 -0
  443. package/dist/src/schemas/contextContributions.mjs +15 -0
  444. package/dist/src/schemas/contextContributions.mjs.map +1 -0
  445. package/dist/src/schemas/delegation.cjs +91 -0
  446. package/dist/src/schemas/delegation.cjs.map +1 -0
  447. package/dist/src/schemas/delegation.d.mts +95 -0
  448. package/dist/src/schemas/delegation.d.mts.map +1 -0
  449. package/dist/src/schemas/delegation.mjs +76 -0
  450. package/dist/src/schemas/delegation.mjs.map +1 -0
  451. package/dist/src/schemas/extensionFile.d.mts +136 -0
  452. package/dist/src/schemas/extensionFile.d.mts.map +1 -0
  453. package/dist/src/schemas/footer.cjs +48 -0
  454. package/dist/src/schemas/footer.cjs.map +1 -0
  455. package/dist/src/schemas/footer.d.mts +48 -0
  456. package/dist/src/schemas/footer.d.mts.map +1 -0
  457. package/dist/src/schemas/footer.mjs +45 -0
  458. package/dist/src/schemas/footer.mjs.map +1 -0
  459. package/dist/src/schemas/headless.cjs +44 -0
  460. package/dist/src/schemas/headless.cjs.map +1 -0
  461. package/dist/src/schemas/headless.d.mts +370 -0
  462. package/dist/src/schemas/headless.d.mts.map +1 -0
  463. package/dist/src/schemas/headless.mjs +38 -0
  464. package/dist/src/schemas/headless.mjs.map +1 -0
  465. package/dist/src/schemas/help.cjs +281 -0
  466. package/dist/src/schemas/help.cjs.map +1 -0
  467. package/dist/src/schemas/help.d.mts +119 -0
  468. package/dist/src/schemas/help.d.mts.map +1 -0
  469. package/dist/src/schemas/help.mjs +262 -0
  470. package/dist/src/schemas/help.mjs.map +1 -0
  471. package/dist/src/schemas/hubChannel.cjs +20 -0
  472. package/dist/src/schemas/hubChannel.cjs.map +1 -0
  473. package/dist/src/schemas/hubChannel.d.mts +236 -0
  474. package/dist/src/schemas/hubChannel.d.mts.map +1 -0
  475. package/dist/src/schemas/hubChannel.mjs +19 -0
  476. package/dist/src/schemas/hubChannel.mjs.map +1 -0
  477. package/dist/src/schemas/leader.cjs +57 -0
  478. package/dist/src/schemas/leader.cjs.map +1 -0
  479. package/dist/src/schemas/leader.d.mts +107 -0
  480. package/dist/src/schemas/leader.d.mts.map +1 -0
  481. package/dist/src/schemas/leader.mjs +51 -0
  482. package/dist/src/schemas/leader.mjs.map +1 -0
  483. package/dist/src/schemas/mcpBundle.cjs +92 -0
  484. package/dist/src/schemas/mcpBundle.cjs.map +1 -0
  485. package/dist/src/schemas/mcpBundle.d.mts +33 -0
  486. package/dist/src/schemas/mcpBundle.d.mts.map +1 -0
  487. package/dist/src/schemas/mcpBundle.mjs +90 -0
  488. package/dist/src/schemas/mcpBundle.mjs.map +1 -0
  489. package/dist/src/schemas/mcpFacet.cjs +24 -0
  490. package/dist/src/schemas/mcpFacet.cjs.map +1 -0
  491. package/dist/src/schemas/mcpFacet.d.mts +91 -0
  492. package/dist/src/schemas/mcpFacet.d.mts.map +1 -0
  493. package/dist/src/schemas/mcpFacet.mjs +21 -0
  494. package/dist/src/schemas/mcpFacet.mjs.map +1 -0
  495. package/dist/src/schemas/mcpProjection.cjs +117 -0
  496. package/dist/src/schemas/mcpProjection.cjs.map +1 -0
  497. package/dist/src/schemas/mcpProjection.d.mts +124 -0
  498. package/dist/src/schemas/mcpProjection.d.mts.map +1 -0
  499. package/dist/src/schemas/mcpProjection.mjs +104 -0
  500. package/dist/src/schemas/mcpProjection.mjs.map +1 -0
  501. package/dist/src/schemas/mcpSession.cjs +57 -0
  502. package/dist/src/schemas/mcpSession.cjs.map +1 -0
  503. package/dist/src/schemas/mcpSession.d.mts +57 -0
  504. package/dist/src/schemas/mcpSession.d.mts.map +1 -0
  505. package/dist/src/schemas/mcpSession.mjs +51 -0
  506. package/dist/src/schemas/mcpSession.mjs.map +1 -0
  507. package/dist/src/schemas/mcpStatus.cjs +52 -0
  508. package/dist/src/schemas/mcpStatus.cjs.map +1 -0
  509. package/dist/src/schemas/mcpStatus.d.mts +73 -0
  510. package/dist/src/schemas/mcpStatus.d.mts.map +1 -0
  511. package/dist/src/schemas/mcpStatus.mjs +48 -0
  512. package/dist/src/schemas/mcpStatus.mjs.map +1 -0
  513. package/dist/src/schemas/mcpToolResolver.cjs +17 -0
  514. package/dist/src/schemas/mcpToolResolver.cjs.map +1 -0
  515. package/dist/src/schemas/mcpToolResolver.d.mts +24 -0
  516. package/dist/src/schemas/mcpToolResolver.d.mts.map +1 -0
  517. package/dist/src/schemas/mcpToolResolver.mjs +15 -0
  518. package/dist/src/schemas/mcpToolResolver.mjs.map +1 -0
  519. package/dist/src/schemas/narration.cjs +54 -0
  520. package/dist/src/schemas/narration.cjs.map +1 -0
  521. package/dist/src/schemas/narration.d.mts +29 -0
  522. package/dist/src/schemas/narration.d.mts.map +1 -0
  523. package/dist/src/schemas/narration.mjs +47 -0
  524. package/dist/src/schemas/narration.mjs.map +1 -0
  525. package/dist/src/schemas/notification.cjs +122 -0
  526. package/dist/src/schemas/notification.cjs.map +1 -0
  527. package/dist/src/schemas/notification.d.mts +48 -0
  528. package/dist/src/schemas/notification.d.mts.map +1 -0
  529. package/dist/src/schemas/notification.mjs +108 -0
  530. package/dist/src/schemas/notification.mjs.map +1 -0
  531. package/dist/src/schemas/packageApi.cjs +73 -0
  532. package/dist/src/schemas/packageApi.cjs.map +1 -0
  533. package/dist/src/schemas/packageApi.d.mts +249 -0
  534. package/dist/src/schemas/packageApi.d.mts.map +1 -0
  535. package/dist/src/schemas/packageApi.mjs +64 -0
  536. package/dist/src/schemas/packageApi.mjs.map +1 -0
  537. package/dist/src/schemas/piTool.cjs +26 -0
  538. package/dist/src/schemas/piTool.cjs.map +1 -0
  539. package/dist/src/schemas/piTool.d.mts +25 -0
  540. package/dist/src/schemas/piTool.d.mts.map +1 -0
  541. package/dist/src/schemas/piTool.mjs +26 -0
  542. package/dist/src/schemas/piTool.mjs.map +1 -0
  543. package/dist/src/schemas/pluginContributions.cjs +19 -0
  544. package/dist/src/schemas/pluginContributions.cjs.map +1 -0
  545. package/dist/src/schemas/pluginContributions.d.mts +56 -0
  546. package/dist/src/schemas/pluginContributions.d.mts.map +1 -0
  547. package/dist/src/schemas/pluginContributions.mjs +18 -0
  548. package/dist/src/schemas/pluginContributions.mjs.map +1 -0
  549. package/dist/src/schemas/pluginProtocol.cjs +103 -0
  550. package/dist/src/schemas/pluginProtocol.cjs.map +1 -0
  551. package/dist/src/schemas/pluginProtocol.d.mts +68 -0
  552. package/dist/src/schemas/pluginProtocol.d.mts.map +1 -0
  553. package/dist/src/schemas/pluginProtocol.mjs +96 -0
  554. package/dist/src/schemas/pluginProtocol.mjs.map +1 -0
  555. package/dist/src/schemas/profileIdentity.cjs +67 -0
  556. package/dist/src/schemas/profileIdentity.cjs.map +1 -0
  557. package/dist/src/schemas/profileIdentity.d.mts +50 -0
  558. package/dist/src/schemas/profileIdentity.d.mts.map +1 -0
  559. package/dist/src/schemas/profileIdentity.mjs +64 -0
  560. package/dist/src/schemas/profileIdentity.mjs.map +1 -0
  561. package/dist/src/schemas/readiness.cjs +251 -0
  562. package/dist/src/schemas/readiness.cjs.map +1 -0
  563. package/dist/src/schemas/readiness.d.mts +84 -0
  564. package/dist/src/schemas/readiness.d.mts.map +1 -0
  565. package/dist/src/schemas/readiness.mjs +246 -0
  566. package/dist/src/schemas/readiness.mjs.map +1 -0
  567. package/dist/src/schemas/relaunchHandoff.cjs +47 -0
  568. package/dist/src/schemas/relaunchHandoff.cjs.map +1 -0
  569. package/dist/src/schemas/relaunchHandoff.d.mts +25 -0
  570. package/dist/src/schemas/relaunchHandoff.d.mts.map +1 -0
  571. package/dist/src/schemas/relaunchHandoff.mjs +44 -0
  572. package/dist/src/schemas/relaunchHandoff.mjs.map +1 -0
  573. package/dist/src/schemas/sandboxHarness.cjs +29 -0
  574. package/dist/src/schemas/sandboxHarness.cjs.map +1 -0
  575. package/dist/src/schemas/sandboxHarness.d.mts +39 -0
  576. package/dist/src/schemas/sandboxHarness.d.mts.map +1 -0
  577. package/dist/src/schemas/sandboxHarness.mjs +26 -0
  578. package/dist/src/schemas/sandboxHarness.mjs.map +1 -0
  579. package/dist/src/schemas/serverBundle.cjs +79 -0
  580. package/dist/src/schemas/serverBundle.cjs.map +1 -0
  581. package/dist/src/schemas/serverBundle.d.mts +34 -0
  582. package/dist/src/schemas/serverBundle.d.mts.map +1 -0
  583. package/dist/src/schemas/serverBundle.mjs +77 -0
  584. package/dist/src/schemas/serverBundle.mjs.map +1 -0
  585. package/dist/src/schemas/serverFacet.cjs +102 -0
  586. package/dist/src/schemas/serverFacet.cjs.map +1 -0
  587. package/dist/src/schemas/serverFacet.d.mts +141 -0
  588. package/dist/src/schemas/serverFacet.d.mts.map +1 -0
  589. package/dist/src/schemas/serverFacet.mjs +93 -0
  590. package/dist/src/schemas/serverFacet.mjs.map +1 -0
  591. package/dist/src/schemas/sessionMcpActivity.d.mts +45 -0
  592. package/dist/src/schemas/sessionMcpActivity.d.mts.map +1 -0
  593. package/dist/src/schemas/sessionProtocol.cjs +17 -0
  594. package/dist/src/schemas/sessionProtocol.cjs.map +1 -0
  595. package/dist/src/schemas/sessionProtocol.d.mts +308 -0
  596. package/dist/src/schemas/sessionProtocol.d.mts.map +1 -0
  597. package/dist/src/schemas/sessionProtocol.mjs +12 -0
  598. package/dist/src/schemas/sessionProtocol.mjs.map +1 -0
  599. package/dist/src/schemas/sessionUpdates.d.mts +34 -0
  600. package/dist/src/schemas/sessionUpdates.d.mts.map +1 -0
  601. package/dist/src/schemas/skills.cjs +115 -0
  602. package/dist/src/schemas/skills.cjs.map +1 -0
  603. package/dist/src/schemas/skills.d.mts +65 -0
  604. package/dist/src/schemas/skills.d.mts.map +1 -0
  605. package/dist/src/schemas/skills.mjs +109 -0
  606. package/dist/src/schemas/skills.mjs.map +1 -0
  607. package/dist/src/schemas/toolOverrides.cjs +17 -0
  608. package/dist/src/schemas/toolOverrides.cjs.map +1 -0
  609. package/dist/src/schemas/toolOverrides.d.mts +29 -0
  610. package/dist/src/schemas/toolOverrides.d.mts.map +1 -0
  611. package/dist/src/schemas/toolOverrides.mjs +15 -0
  612. package/dist/src/schemas/toolOverrides.mjs.map +1 -0
  613. package/dist/src/schemas/toolSurface.cjs +17 -0
  614. package/dist/src/schemas/toolSurface.cjs.map +1 -0
  615. package/dist/src/schemas/toolSurface.d.mts +70 -0
  616. package/dist/src/schemas/toolSurface.d.mts.map +1 -0
  617. package/dist/src/schemas/toolSurface.mjs +15 -0
  618. package/dist/src/schemas/toolSurface.mjs.map +1 -0
  619. package/dist/src/schemas/uiHub.cjs +17 -0
  620. package/dist/src/schemas/uiHub.cjs.map +1 -0
  621. package/dist/src/schemas/uiHub.d.mts +23 -0
  622. package/dist/src/schemas/uiHub.d.mts.map +1 -0
  623. package/dist/src/schemas/uiHub.mjs +15 -0
  624. package/dist/src/schemas/uiHub.mjs.map +1 -0
  625. package/dist/src/schemas/voiceReloadHandoff.cjs +78 -0
  626. package/dist/src/schemas/voiceReloadHandoff.cjs.map +1 -0
  627. package/dist/src/schemas/voiceReloadHandoff.d.mts +31 -0
  628. package/dist/src/schemas/voiceReloadHandoff.d.mts.map +1 -0
  629. package/dist/src/schemas/voiceReloadHandoff.mjs +75 -0
  630. package/dist/src/schemas/voiceReloadHandoff.mjs.map +1 -0
  631. package/dist/src/schemas/voiceTools.cjs +205 -0
  632. package/dist/src/schemas/voiceTools.cjs.map +1 -0
  633. package/dist/src/schemas/voiceTools.d.mts +120 -0
  634. package/dist/src/schemas/voiceTools.d.mts.map +1 -0
  635. package/dist/src/schemas/voiceTools.mjs +194 -0
  636. package/dist/src/schemas/voiceTools.mjs.map +1 -0
  637. package/dist/src/server/devProxyForward.cjs +141 -0
  638. package/dist/src/server/devProxyForward.cjs.map +1 -0
  639. package/dist/src/server/devProxyForward.mjs +139 -0
  640. package/dist/src/server/devProxyForward.mjs.map +1 -0
  641. package/dist/src/server/devProxyRoutes.cjs +97 -0
  642. package/dist/src/server/devProxyRoutes.cjs.map +1 -0
  643. package/dist/src/server/devProxyRoutes.mjs +97 -0
  644. package/dist/src/server/devProxyRoutes.mjs.map +1 -0
  645. package/dist/src/server/devProxySocket.cjs +87 -0
  646. package/dist/src/server/devProxySocket.cjs.map +1 -0
  647. package/dist/src/server/devProxySocket.mjs +87 -0
  648. package/dist/src/server/devProxySocket.mjs.map +1 -0
  649. package/dist/src/server/directHarnessRuntime.cjs +1964 -0
  650. package/dist/src/server/directHarnessRuntime.cjs.map +1 -0
  651. package/dist/src/server/directHarnessRuntime.d.mts +3 -0
  652. package/dist/src/server/directHarnessRuntime.mjs +1958 -0
  653. package/dist/src/server/directHarnessRuntime.mjs.map +1 -0
  654. package/dist/src/server/harnessErrorMessage.cjs +13 -0
  655. package/dist/src/server/harnessErrorMessage.cjs.map +1 -0
  656. package/dist/src/server/harnessErrorMessage.mjs +13 -0
  657. package/dist/src/server/harnessErrorMessage.mjs.map +1 -0
  658. package/dist/src/server/headlessProtocol.cjs +366 -0
  659. package/dist/src/server/headlessProtocol.cjs.map +1 -0
  660. package/dist/src/server/headlessProtocol.mjs +366 -0
  661. package/dist/src/server/headlessProtocol.mjs.map +1 -0
  662. package/dist/src/server/jsonlTranscriptReader.cjs +85 -0
  663. package/dist/src/server/jsonlTranscriptReader.cjs.map +1 -0
  664. package/dist/src/server/jsonlTranscriptReader.mjs +83 -0
  665. package/dist/src/server/jsonlTranscriptReader.mjs.map +1 -0
  666. package/dist/src/server/mcpBundleLoader.cjs +115 -0
  667. package/dist/src/server/mcpBundleLoader.cjs.map +1 -0
  668. package/dist/src/server/mcpBundleLoader.d.mts +27 -0
  669. package/dist/src/server/mcpBundleLoader.d.mts.map +1 -0
  670. package/dist/src/server/mcpBundleLoader.mjs +111 -0
  671. package/dist/src/server/mcpBundleLoader.mjs.map +1 -0
  672. package/dist/src/server/nativeChildTranscriptReader.cjs +20 -0
  673. package/dist/src/server/nativeChildTranscriptReader.cjs.map +1 -0
  674. package/dist/src/server/nativeChildTranscriptReader.mjs +18 -0
  675. package/dist/src/server/nativeChildTranscriptReader.mjs.map +1 -0
  676. package/dist/src/server/remoteRoutes.cjs +386 -0
  677. package/dist/src/server/remoteRoutes.cjs.map +1 -0
  678. package/dist/src/server/remoteRoutes.mjs +386 -0
  679. package/dist/src/server/remoteRoutes.mjs.map +1 -0
  680. package/dist/src/server/serverFacetLoader.cjs +220 -0
  681. package/dist/src/server/serverFacetLoader.cjs.map +1 -0
  682. package/dist/src/server/serverFacetLoader.d.mts +77 -0
  683. package/dist/src/server/serverFacetLoader.d.mts.map +1 -0
  684. package/dist/src/server/serverFacetLoader.mjs +215 -0
  685. package/dist/src/server/serverFacetLoader.mjs.map +1 -0
  686. package/dist/src/server/sessionMcpHandler.cjs +494 -0
  687. package/dist/src/server/sessionMcpHandler.cjs.map +1 -0
  688. package/dist/src/server/sessionMcpHandler.d.mts +47 -0
  689. package/dist/src/server/sessionMcpHandler.d.mts.map +1 -0
  690. package/dist/src/server/sessionMcpHandler.mjs +493 -0
  691. package/dist/src/server/sessionMcpHandler.mjs.map +1 -0
  692. package/dist/src/server/sessionMcpRoutes.cjs +780 -0
  693. package/dist/src/server/sessionMcpRoutes.cjs.map +1 -0
  694. package/dist/src/server/sessionMcpRoutes.mjs +775 -0
  695. package/dist/src/server/sessionMcpRoutes.mjs.map +1 -0
  696. package/dist/src/server/threadJournals.cjs +172 -0
  697. package/dist/src/server/threadJournals.cjs.map +1 -0
  698. package/dist/src/server/threadJournals.mjs +169 -0
  699. package/dist/src/server/threadJournals.mjs.map +1 -0
  700. package/dist/src/services/acpSessionUpdates/index.cjs +129 -0
  701. package/dist/src/services/acpSessionUpdates/index.cjs.map +1 -0
  702. package/dist/src/services/acpSessionUpdates/index.mjs +129 -0
  703. package/dist/src/services/acpSessionUpdates/index.mjs.map +1 -0
  704. package/dist/src/services/apiSurfaceAssert/index.cjs +60 -0
  705. package/dist/src/services/apiSurfaceAssert/index.cjs.map +1 -0
  706. package/dist/src/services/apiSurfaceAssert/index.d.mts +24 -0
  707. package/dist/src/services/apiSurfaceAssert/index.d.mts.map +1 -0
  708. package/dist/src/services/apiSurfaceAssert/index.mjs +60 -0
  709. package/dist/src/services/apiSurfaceAssert/index.mjs.map +1 -0
  710. package/dist/src/services/bundlePublication/index.cjs +88 -0
  711. package/dist/src/services/bundlePublication/index.cjs.map +1 -0
  712. package/dist/src/services/bundlePublication/index.mjs +85 -0
  713. package/dist/src/services/bundlePublication/index.mjs.map +1 -0
  714. package/dist/src/services/contextApiUrls/index.cjs +14 -0
  715. package/dist/src/services/contextApiUrls/index.cjs.map +1 -0
  716. package/dist/src/services/contextApiUrls/index.d.mts +6 -0
  717. package/dist/src/services/contextApiUrls/index.d.mts.map +1 -0
  718. package/dist/src/services/contextApiUrls/index.mjs +14 -0
  719. package/dist/src/services/contextApiUrls/index.mjs.map +1 -0
  720. package/dist/src/services/contextContributions/index.cjs +79 -0
  721. package/dist/src/services/contextContributions/index.cjs.map +1 -0
  722. package/dist/src/services/contextContributions/index.d.mts +6 -0
  723. package/dist/src/services/contextContributions/index.d.mts.map +1 -0
  724. package/dist/src/services/contextContributions/index.mjs +79 -0
  725. package/dist/src/services/contextContributions/index.mjs.map +1 -0
  726. package/dist/src/services/contextUsage/index.cjs +27 -0
  727. package/dist/src/services/contextUsage/index.cjs.map +1 -0
  728. package/dist/src/services/contextUsage/index.mjs +25 -0
  729. package/dist/src/services/contextUsage/index.mjs.map +1 -0
  730. package/dist/src/services/devProxyPolicy/index.cjs +168 -0
  731. package/dist/src/services/devProxyPolicy/index.cjs.map +1 -0
  732. package/dist/src/services/devProxyPolicy/index.mjs +165 -0
  733. package/dist/src/services/devProxyPolicy/index.mjs.map +1 -0
  734. package/dist/src/services/devProxyStore/index.cjs +107 -0
  735. package/dist/src/services/devProxyStore/index.cjs.map +1 -0
  736. package/dist/src/services/devProxyStore/index.mjs +104 -0
  737. package/dist/src/services/devProxyStore/index.mjs.map +1 -0
  738. package/dist/src/services/deviceAuth/index.cjs +125 -0
  739. package/dist/src/services/deviceAuth/index.cjs.map +1 -0
  740. package/dist/src/services/deviceAuth/index.d.mts +9 -0
  741. package/dist/src/services/deviceAuth/index.d.mts.map +1 -0
  742. package/dist/src/services/deviceAuth/index.mjs +125 -0
  743. package/dist/src/services/deviceAuth/index.mjs.map +1 -0
  744. package/dist/src/services/deviceSessions/index.cjs +147 -0
  745. package/dist/src/services/deviceSessions/index.cjs.map +1 -0
  746. package/dist/src/services/deviceSessions/index.d.mts +15 -0
  747. package/dist/src/services/deviceSessions/index.d.mts.map +1 -0
  748. package/dist/src/services/deviceSessions/index.mjs +141 -0
  749. package/dist/src/services/deviceSessions/index.mjs.map +1 -0
  750. package/dist/src/services/headlessClient/index.cjs +125 -0
  751. package/dist/src/services/headlessClient/index.cjs.map +1 -0
  752. package/dist/src/services/headlessClient/index.mjs +125 -0
  753. package/dist/src/services/headlessClient/index.mjs.map +1 -0
  754. package/dist/src/services/historyCreationFileSystem/index.cjs +115 -0
  755. package/dist/src/services/historyCreationFileSystem/index.cjs.map +1 -0
  756. package/dist/src/services/historyCreationFileSystem/index.mjs +115 -0
  757. package/dist/src/services/historyCreationFileSystem/index.mjs.map +1 -0
  758. package/dist/src/services/hubChannelHarness/index.cjs +50 -0
  759. package/dist/src/services/hubChannelHarness/index.cjs.map +1 -0
  760. package/dist/src/services/hubChannelHarness/index.d.mts +17 -0
  761. package/dist/src/services/hubChannelHarness/index.d.mts.map +1 -0
  762. package/dist/src/services/hubChannelHarness/index.mjs +50 -0
  763. package/dist/src/services/hubChannelHarness/index.mjs.map +1 -0
  764. package/dist/src/services/kernel/index.cjs +147 -0
  765. package/dist/src/services/kernel/index.cjs.map +1 -0
  766. package/dist/src/services/kernel/index.d.mts +9 -0
  767. package/dist/src/services/kernel/index.d.mts.map +1 -0
  768. package/dist/src/services/kernel/index.mjs +147 -0
  769. package/dist/src/services/kernel/index.mjs.map +1 -0
  770. package/dist/src/services/loginFlow/index.cjs +131 -0
  771. package/dist/src/services/loginFlow/index.cjs.map +1 -0
  772. package/dist/src/services/loginFlow/index.mjs +131 -0
  773. package/dist/src/services/loginFlow/index.mjs.map +1 -0
  774. package/dist/src/services/loopbackAddress/index.cjs +58 -0
  775. package/dist/src/services/loopbackAddress/index.cjs.map +1 -0
  776. package/dist/src/services/loopbackAddress/index.mjs +56 -0
  777. package/dist/src/services/loopbackAddress/index.mjs.map +1 -0
  778. package/dist/src/services/openSessionRegistry/index.cjs +144 -0
  779. package/dist/src/services/openSessionRegistry/index.cjs.map +1 -0
  780. package/dist/src/services/openSessionRegistry/index.d.mts +40 -0
  781. package/dist/src/services/openSessionRegistry/index.d.mts.map +1 -0
  782. package/dist/src/services/openSessionRegistry/index.mjs +141 -0
  783. package/dist/src/services/openSessionRegistry/index.mjs.map +1 -0
  784. package/dist/src/services/packageApiHarness/index.cjs +36 -0
  785. package/dist/src/services/packageApiHarness/index.cjs.map +1 -0
  786. package/dist/src/services/packageApiHarness/index.d.mts +40 -0
  787. package/dist/src/services/packageApiHarness/index.d.mts.map +1 -0
  788. package/dist/src/services/packageApiHarness/index.mjs +36 -0
  789. package/dist/src/services/packageApiHarness/index.mjs.map +1 -0
  790. package/dist/src/services/packageResource/index.cjs +54 -0
  791. package/dist/src/services/packageResource/index.cjs.map +1 -0
  792. package/dist/src/services/packageResource/index.d.mts +26 -0
  793. package/dist/src/services/packageResource/index.d.mts.map +1 -0
  794. package/dist/src/services/packageResource/index.mjs +51 -0
  795. package/dist/src/services/packageResource/index.mjs.map +1 -0
  796. package/dist/src/services/pairingFlow/index.cjs +145 -0
  797. package/dist/src/services/pairingFlow/index.cjs.map +1 -0
  798. package/dist/src/services/pairingFlow/index.d.mts +44 -0
  799. package/dist/src/services/pairingFlow/index.d.mts.map +1 -0
  800. package/dist/src/services/pairingFlow/index.mjs +145 -0
  801. package/dist/src/services/pairingFlow/index.mjs.map +1 -0
  802. package/dist/src/services/pairingPage/index.cjs +450 -0
  803. package/dist/src/services/pairingPage/index.cjs.map +1 -0
  804. package/dist/src/services/pairingPage/index.mjs +447 -0
  805. package/dist/src/services/pairingPage/index.mjs.map +1 -0
  806. package/dist/src/services/piExtensionHost/index.cjs +821 -0
  807. package/dist/src/services/piExtensionHost/index.cjs.map +1 -0
  808. package/dist/src/services/piExtensionHost/index.mjs +817 -0
  809. package/dist/src/services/piExtensionHost/index.mjs.map +1 -0
  810. package/dist/src/services/piHelpTools/index.cjs +68 -0
  811. package/dist/src/services/piHelpTools/index.cjs.map +1 -0
  812. package/dist/src/services/piHelpTools/index.d.mts +10 -0
  813. package/dist/src/services/piHelpTools/index.d.mts.map +1 -0
  814. package/dist/src/services/piHelpTools/index.mjs +68 -0
  815. package/dist/src/services/piHelpTools/index.mjs.map +1 -0
  816. package/dist/src/services/piSessionEntries/index.cjs +112 -0
  817. package/dist/src/services/piSessionEntries/index.cjs.map +1 -0
  818. package/dist/src/services/piSessionEntries/index.mjs +108 -0
  819. package/dist/src/services/piSessionEntries/index.mjs.map +1 -0
  820. package/dist/src/services/pluginLifecycle/index.cjs +71 -0
  821. package/dist/src/services/pluginLifecycle/index.cjs.map +1 -0
  822. package/dist/src/services/pluginLifecycle/index.d.mts +11 -0
  823. package/dist/src/services/pluginLifecycle/index.d.mts.map +1 -0
  824. package/dist/src/services/pluginLifecycle/index.mjs +71 -0
  825. package/dist/src/services/pluginLifecycle/index.mjs.map +1 -0
  826. package/dist/src/services/providerAuth/index.cjs +156 -0
  827. package/dist/src/services/providerAuth/index.cjs.map +1 -0
  828. package/dist/src/services/providerAuth/index.mjs +154 -0
  829. package/dist/src/services/providerAuth/index.mjs.map +1 -0
  830. package/dist/src/services/remoteAccess/index.cjs +396 -0
  831. package/dist/src/services/remoteAccess/index.cjs.map +1 -0
  832. package/dist/src/services/remoteAccess/index.d.mts +81 -0
  833. package/dist/src/services/remoteAccess/index.d.mts.map +1 -0
  834. package/dist/src/services/remoteAccess/index.mjs +396 -0
  835. package/dist/src/services/remoteAccess/index.mjs.map +1 -0
  836. package/dist/src/services/remoteAccessSettings/index.cjs +151 -0
  837. package/dist/src/services/remoteAccessSettings/index.cjs.map +1 -0
  838. package/dist/src/services/remoteAccessSettings/index.mjs +149 -0
  839. package/dist/src/services/remoteAccessSettings/index.mjs.map +1 -0
  840. package/dist/src/services/remoteAccessStore/index.cjs +126 -0
  841. package/dist/src/services/remoteAccessStore/index.cjs.map +1 -0
  842. package/dist/src/services/remoteAccessStore/index.mjs +121 -0
  843. package/dist/src/services/remoteAccessStore/index.mjs.map +1 -0
  844. package/dist/src/services/remoteGuardPolicy/index.cjs +190 -0
  845. package/dist/src/services/remoteGuardPolicy/index.cjs.map +1 -0
  846. package/dist/src/services/remoteGuardPolicy/index.d.mts +7 -0
  847. package/dist/src/services/remoteGuardPolicy/index.d.mts.map +1 -0
  848. package/dist/src/services/remoteGuardPolicy/index.mjs +186 -0
  849. package/dist/src/services/remoteGuardPolicy/index.mjs.map +1 -0
  850. package/dist/src/services/requestReceipts/index.cjs +161 -0
  851. package/dist/src/services/requestReceipts/index.cjs.map +1 -0
  852. package/dist/src/services/requestReceipts/index.d.mts +11 -0
  853. package/dist/src/services/requestReceipts/index.d.mts.map +1 -0
  854. package/dist/src/services/requestReceipts/index.mjs +161 -0
  855. package/dist/src/services/requestReceipts/index.mjs.map +1 -0
  856. package/dist/src/services/rpcTranscript/index.cjs +590 -0
  857. package/dist/src/services/rpcTranscript/index.cjs.map +1 -0
  858. package/dist/src/services/rpcTranscript/index.d.mts +50 -0
  859. package/dist/src/services/rpcTranscript/index.d.mts.map +1 -0
  860. package/dist/src/services/rpcTranscript/index.mjs +589 -0
  861. package/dist/src/services/rpcTranscript/index.mjs.map +1 -0
  862. package/dist/src/services/serverFacet/index.cjs +197 -0
  863. package/dist/src/services/serverFacet/index.cjs.map +1 -0
  864. package/dist/src/services/serverFacet/index.d.mts +31 -0
  865. package/dist/src/services/serverFacet/index.d.mts.map +1 -0
  866. package/dist/src/services/serverFacet/index.mjs +197 -0
  867. package/dist/src/services/serverFacet/index.mjs.map +1 -0
  868. package/dist/src/services/sessionGitStatus/index.cjs +46 -0
  869. package/dist/src/services/sessionGitStatus/index.cjs.map +1 -0
  870. package/dist/src/services/sessionGitStatus/index.mjs +46 -0
  871. package/dist/src/services/sessionGitStatus/index.mjs.map +1 -0
  872. package/dist/src/services/sessionGitStatus/type.d.mts +8 -0
  873. package/dist/src/services/sessionGitStatus/type.d.mts.map +1 -0
  874. package/dist/src/services/sessionMcpActivity/index.cjs +115 -0
  875. package/dist/src/services/sessionMcpActivity/index.cjs.map +1 -0
  876. package/dist/src/services/sessionMcpActivity/index.mjs +111 -0
  877. package/dist/src/services/sessionMcpActivity/index.mjs.map +1 -0
  878. package/dist/src/services/sessionMcpAuthorization/index.cjs +432 -0
  879. package/dist/src/services/sessionMcpAuthorization/index.cjs.map +1 -0
  880. package/dist/src/services/sessionMcpAuthorization/index.d.mts +123 -0
  881. package/dist/src/services/sessionMcpAuthorization/index.d.mts.map +1 -0
  882. package/dist/src/services/sessionMcpAuthorization/index.mjs +430 -0
  883. package/dist/src/services/sessionMcpAuthorization/index.mjs.map +1 -0
  884. package/dist/src/services/sessionMcpConversations/index.cjs +217 -0
  885. package/dist/src/services/sessionMcpConversations/index.cjs.map +1 -0
  886. package/dist/src/services/sessionMcpConversations/index.mjs +212 -0
  887. package/dist/src/services/sessionMcpConversations/index.mjs.map +1 -0
  888. package/dist/src/services/sessionMcpRegistrationStore/index.cjs +86 -0
  889. package/dist/src/services/sessionMcpRegistrationStore/index.cjs.map +1 -0
  890. package/dist/src/services/sessionMcpRegistrationStore/index.mjs +83 -0
  891. package/dist/src/services/sessionMcpRegistrationStore/index.mjs.map +1 -0
  892. package/dist/src/services/sessionPresentation/index.cjs +119 -0
  893. package/dist/src/services/sessionPresentation/index.cjs.map +1 -0
  894. package/dist/src/services/sessionPresentation/index.mjs +119 -0
  895. package/dist/src/services/sessionPresentation/index.mjs.map +1 -0
  896. package/dist/src/services/sqliteSessionHistory/index.cjs +105 -0
  897. package/dist/src/services/sqliteSessionHistory/index.cjs.map +1 -0
  898. package/dist/src/services/sqliteSessionHistory/index.d.mts +29 -0
  899. package/dist/src/services/sqliteSessionHistory/index.d.mts.map +1 -0
  900. package/dist/src/services/sqliteSessionHistory/index.mjs +100 -0
  901. package/dist/src/services/sqliteSessionHistory/index.mjs.map +1 -0
  902. package/dist/src/services/sqliteTranscriptReader/index.cjs +70 -0
  903. package/dist/src/services/sqliteTranscriptReader/index.cjs.map +1 -0
  904. package/dist/src/services/sqliteTranscriptReader/index.d.mts +14 -0
  905. package/dist/src/services/sqliteTranscriptReader/index.d.mts.map +1 -0
  906. package/dist/src/services/sqliteTranscriptReader/index.mjs +67 -0
  907. package/dist/src/services/sqliteTranscriptReader/index.mjs.map +1 -0
  908. package/dist/src/services/toolCost/index.cjs +47 -0
  909. package/dist/src/services/toolCost/index.cjs.map +1 -0
  910. package/dist/src/services/toolCost/index.d.mts +38 -0
  911. package/dist/src/services/toolCost/index.d.mts.map +1 -0
  912. package/dist/src/services/toolCost/index.mjs +46 -0
  913. package/dist/src/services/toolCost/index.mjs.map +1 -0
  914. package/dist/src/services/toolOverrides/index.cjs +45 -0
  915. package/dist/src/services/toolOverrides/index.cjs.map +1 -0
  916. package/dist/src/services/toolOverrides/index.d.mts +6 -0
  917. package/dist/src/services/toolOverrides/index.d.mts.map +1 -0
  918. package/dist/src/services/toolOverrides/index.mjs +45 -0
  919. package/dist/src/services/toolOverrides/index.mjs.map +1 -0
  920. package/dist/src/services/toolPrompt/index.cjs +13 -0
  921. package/dist/src/services/toolPrompt/index.cjs.map +1 -0
  922. package/dist/src/services/toolPrompt/index.mjs +13 -0
  923. package/dist/src/services/toolPrompt/index.mjs.map +1 -0
  924. package/dist/src/services/toolSurface/index.cjs +134 -0
  925. package/dist/src/services/toolSurface/index.cjs.map +1 -0
  926. package/dist/src/services/toolSurface/index.d.mts +19 -0
  927. package/dist/src/services/toolSurface/index.d.mts.map +1 -0
  928. package/dist/src/services/toolSurface/index.mjs +134 -0
  929. package/dist/src/services/toolSurface/index.mjs.map +1 -0
  930. package/dist/src/services/traceContext/index.cjs +13 -0
  931. package/dist/src/services/traceContext/index.cjs.map +1 -0
  932. package/dist/src/services/traceContext/index.mjs +13 -0
  933. package/dist/src/services/traceContext/index.mjs.map +1 -0
  934. package/dist/src/services/transcriptPages/index.cjs +74 -0
  935. package/dist/src/services/transcriptPages/index.cjs.map +1 -0
  936. package/dist/src/services/transcriptPages/index.mjs +73 -0
  937. package/dist/src/services/transcriptPages/index.mjs.map +1 -0
  938. package/dist/src/services/tunnelOutput/index.cjs +58 -0
  939. package/dist/src/services/tunnelOutput/index.cjs.map +1 -0
  940. package/dist/src/services/tunnelOutput/index.mjs +54 -0
  941. package/dist/src/services/tunnelOutput/index.mjs.map +1 -0
  942. package/dist/src/services/tunnelProcess/index.cjs +487 -0
  943. package/dist/src/services/tunnelProcess/index.cjs.map +1 -0
  944. package/dist/src/services/tunnelProcess/index.mjs +481 -0
  945. package/dist/src/services/tunnelProcess/index.mjs.map +1 -0
  946. package/dist/src/services/voiceReloadHandoff/index.cjs +136 -0
  947. package/dist/src/services/voiceReloadHandoff/index.cjs.map +1 -0
  948. package/dist/src/services/voiceReloadHandoff/index.d.mts +34 -0
  949. package/dist/src/services/voiceReloadHandoff/index.d.mts.map +1 -0
  950. package/dist/src/services/voiceReloadHandoff/index.mjs +135 -0
  951. package/dist/src/services/voiceReloadHandoff/index.mjs.map +1 -0
  952. package/dist/src/services/voiceToolsContract/index.cjs +26 -0
  953. package/dist/src/services/voiceToolsContract/index.cjs.map +1 -0
  954. package/dist/src/services/voiceToolsContract/index.d.mts +76 -0
  955. package/dist/src/services/voiceToolsContract/index.d.mts.map +1 -0
  956. package/dist/src/services/voiceToolsContract/index.mjs +24 -0
  957. package/dist/src/services/voiceToolsContract/index.mjs.map +1 -0
  958. package/dist/src/services/webauthn/index.cjs +262 -0
  959. package/dist/src/services/webauthn/index.cjs.map +1 -0
  960. package/dist/src/services/webauthn/index.d.mts +39 -0
  961. package/dist/src/services/webauthn/index.d.mts.map +1 -0
  962. package/dist/src/services/webauthn/index.mjs +262 -0
  963. package/dist/src/services/webauthn/index.mjs.map +1 -0
  964. package/dist/src/services/webauthnPolicy/index.cjs +163 -0
  965. package/dist/src/services/webauthnPolicy/index.cjs.map +1 -0
  966. package/dist/src/services/webauthnPolicy/index.d.mts +41 -0
  967. package/dist/src/services/webauthnPolicy/index.d.mts.map +1 -0
  968. package/dist/src/services/webauthnPolicy/index.mjs +156 -0
  969. package/dist/src/services/webauthnPolicy/index.mjs.map +1 -0
  970. package/dist/src/services/workspaceRegistry/index.cjs +151 -0
  971. package/dist/src/services/workspaceRegistry/index.cjs.map +1 -0
  972. package/dist/src/services/workspaceRegistry/index.d.mts +47 -0
  973. package/dist/src/services/workspaceRegistry/index.d.mts.map +1 -0
  974. package/dist/src/services/workspaceRegistry/index.mjs +144 -0
  975. package/dist/src/services/workspaceRegistry/index.mjs.map +1 -0
  976. package/dist/src/systems/child/adapters/headlessChildSessionService.cjs +261 -0
  977. package/dist/src/systems/child/adapters/headlessChildSessionService.cjs.map +1 -0
  978. package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts +32 -0
  979. package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts.map +1 -0
  980. package/dist/src/systems/child/adapters/headlessChildSessionService.mjs +254 -0
  981. package/dist/src/systems/child/adapters/headlessChildSessionService.mjs.map +1 -0
  982. package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs +28 -0
  983. package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs.map +1 -0
  984. package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs +25 -0
  985. package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs.map +1 -0
  986. package/dist/src/systems/child/services/childSession/index.cjs +219 -0
  987. package/dist/src/systems/child/services/childSession/index.cjs.map +1 -0
  988. package/dist/src/systems/child/services/childSession/index.d.mts +14 -0
  989. package/dist/src/systems/child/services/childSession/index.d.mts.map +1 -0
  990. package/dist/src/systems/child/services/childSession/index.mjs +219 -0
  991. package/dist/src/systems/child/services/childSession/index.mjs.map +1 -0
  992. package/dist/src/systems/child/types/childSession.cjs +19 -0
  993. package/dist/src/systems/child/types/childSession.cjs.map +1 -0
  994. package/dist/src/systems/child/types/childSession.d.mts +148 -0
  995. package/dist/src/systems/child/types/childSession.d.mts.map +1 -0
  996. package/dist/src/systems/child/types/childSession.mjs +16 -0
  997. package/dist/src/systems/child/types/childSession.mjs.map +1 -0
  998. package/dist/src/systems/main/adapters/headlessHost.cjs +554 -0
  999. package/dist/src/systems/main/adapters/headlessHost.cjs.map +1 -0
  1000. package/dist/src/systems/main/adapters/headlessHost.d.mts +111 -0
  1001. package/dist/src/systems/main/adapters/headlessHost.d.mts.map +1 -0
  1002. package/dist/src/systems/main/adapters/headlessHost.mjs +552 -0
  1003. package/dist/src/systems/main/adapters/headlessHost.mjs.map +1 -0
  1004. package/dist/src/systems/main/adapters/headlessSessionHost.cjs +1293 -0
  1005. package/dist/src/systems/main/adapters/headlessSessionHost.cjs.map +1 -0
  1006. package/dist/src/systems/main/adapters/headlessSessionHost.d.mts +14 -0
  1007. package/dist/src/systems/main/adapters/headlessSessionHost.d.mts.map +1 -0
  1008. package/dist/src/systems/main/adapters/headlessSessionHost.mjs +1288 -0
  1009. package/dist/src/systems/main/adapters/headlessSessionHost.mjs.map +1 -0
  1010. package/dist/src/systems/main/types/headlessHost.d.mts +36 -0
  1011. package/dist/src/systems/main/types/headlessHost.d.mts.map +1 -0
  1012. package/dist/src/testing/pi/extensionScenarios.cjs +73 -0
  1013. package/dist/src/testing/pi/extensionScenarios.cjs.map +1 -0
  1014. package/dist/src/testing/pi/extensionScenarios.d.mts +41 -0
  1015. package/dist/src/testing/pi/extensionScenarios.d.mts.map +1 -0
  1016. package/dist/src/testing/pi/extensionScenarios.mjs +73 -0
  1017. package/dist/src/testing/pi/extensionScenarios.mjs.map +1 -0
  1018. package/dist/src/testing/pi/testHost.cjs +398 -0
  1019. package/dist/src/testing/pi/testHost.cjs.map +1 -0
  1020. package/dist/src/testing/pi/testHost.d.mts +160 -0
  1021. package/dist/src/testing/pi/testHost.d.mts.map +1 -0
  1022. package/dist/src/testing/pi/testHost.mjs +398 -0
  1023. package/dist/src/testing/pi/testHost.mjs.map +1 -0
  1024. package/dist/src/types/config.d.mts +20 -0
  1025. package/dist/src/types/config.d.mts.map +1 -0
  1026. package/dist/src/types/kernel.d.mts +69 -0
  1027. package/dist/src/types/kernel.d.mts.map +1 -0
  1028. package/dist/src/types/remote.d.mts +124 -0
  1029. package/dist/src/types/remote.d.mts.map +1 -0
  1030. package/dist/src/types/server/directHarnessRuntime.d.mts +209 -0
  1031. package/dist/src/types/server/directHarnessRuntime.d.mts.map +1 -0
  1032. package/dist/src/types/server/session.d.mts +5 -0
  1033. package/dist/src/types/server/session.d.mts.map +1 -0
  1034. package/dist/src/types/server/sessionToolSurface.d.mts +44 -0
  1035. package/dist/src/types/server/sessionToolSurface.d.mts.map +1 -0
  1036. package/dist/src/web/models/globalStore.cjs +23 -0
  1037. package/dist/src/web/models/globalStore.cjs.map +1 -0
  1038. package/dist/src/web/models/globalStore.d.mts +6 -0
  1039. package/dist/src/web/models/globalStore.d.mts.map +1 -0
  1040. package/dist/src/web/models/globalStore.mjs +23 -0
  1041. package/dist/src/web/models/globalStore.mjs.map +1 -0
  1042. package/dist/src/web/models/sessionStore.cjs +56 -0
  1043. package/dist/src/web/models/sessionStore.cjs.map +1 -0
  1044. package/dist/src/web/models/sessionStore.d.mts +14 -0
  1045. package/dist/src/web/models/sessionStore.d.mts.map +1 -0
  1046. package/dist/src/web/models/sessionStore.mjs +56 -0
  1047. package/dist/src/web/models/sessionStore.mjs.map +1 -0
  1048. package/dist/src/web/models/workspaceStore.cjs +50 -0
  1049. package/dist/src/web/models/workspaceStore.cjs.map +1 -0
  1050. package/dist/src/web/models/workspaceStore.d.mts +18 -0
  1051. package/dist/src/web/models/workspaceStore.d.mts.map +1 -0
  1052. package/dist/src/web/models/workspaceStore.mjs +50 -0
  1053. package/dist/src/web/models/workspaceStore.mjs.map +1 -0
  1054. package/dist/src/web/schemas/bundleAssetPolicy.cjs +20 -0
  1055. package/dist/src/web/schemas/bundleAssetPolicy.cjs.map +1 -0
  1056. package/dist/src/web/schemas/bundleAssetPolicy.d.mts +10 -0
  1057. package/dist/src/web/schemas/bundleAssetPolicy.d.mts.map +1 -0
  1058. package/dist/src/web/schemas/bundleAssetPolicy.mjs +18 -0
  1059. package/dist/src/web/schemas/bundleAssetPolicy.mjs.map +1 -0
  1060. package/dist/src/web/schemas/template.cjs +15 -0
  1061. package/dist/src/web/schemas/template.cjs.map +1 -0
  1062. package/dist/src/web/schemas/template.d.mts +6 -0
  1063. package/dist/src/web/schemas/template.d.mts.map +1 -0
  1064. package/dist/src/web/schemas/template.mjs +15 -0
  1065. package/dist/src/web/schemas/template.mjs.map +1 -0
  1066. package/dist/src/web/services/apiClient/index.cjs +156 -0
  1067. package/dist/src/web/services/apiClient/index.cjs.map +1 -0
  1068. package/dist/src/web/services/apiClient/index.d.mts +152 -0
  1069. package/dist/src/web/services/apiClient/index.d.mts.map +1 -0
  1070. package/dist/src/web/services/apiClient/index.mjs +154 -0
  1071. package/dist/src/web/services/apiClient/index.mjs.map +1 -0
  1072. package/dist/src/web/services/apiPaths/index.cjs +83 -0
  1073. package/dist/src/web/services/apiPaths/index.cjs.map +1 -0
  1074. package/dist/src/web/services/apiPaths/index.d.mts +81 -0
  1075. package/dist/src/web/services/apiPaths/index.d.mts.map +1 -0
  1076. package/dist/src/web/services/apiPaths/index.mjs +78 -0
  1077. package/dist/src/web/services/apiPaths/index.mjs.map +1 -0
  1078. package/dist/src/web/services/apiRoutes/index.cjs +47 -0
  1079. package/dist/src/web/services/apiRoutes/index.cjs.map +1 -0
  1080. package/dist/src/web/services/apiRoutes/index.d.mts +21 -0
  1081. package/dist/src/web/services/apiRoutes/index.d.mts.map +1 -0
  1082. package/dist/src/web/services/apiRoutes/index.mjs +43 -0
  1083. package/dist/src/web/services/apiRoutes/index.mjs.map +1 -0
  1084. package/dist/src/web/services/mcpWidget.cjs +9 -0
  1085. package/dist/src/web/services/mcpWidget.cjs.map +1 -0
  1086. package/dist/src/web/services/mcpWidget.d.mts +6 -0
  1087. package/dist/src/web/services/mcpWidget.d.mts.map +1 -0
  1088. package/dist/src/web/services/mcpWidget.mjs +9 -0
  1089. package/dist/src/web/services/mcpWidget.mjs.map +1 -0
  1090. package/dist/src/web/services/sessionRegistry/index.cjs +70 -0
  1091. package/dist/src/web/services/sessionRegistry/index.cjs.map +1 -0
  1092. package/dist/src/web/services/sessionRegistry/index.d.mts +29 -0
  1093. package/dist/src/web/services/sessionRegistry/index.d.mts.map +1 -0
  1094. package/dist/src/web/services/sessionRegistry/index.mjs +66 -0
  1095. package/dist/src/web/services/sessionRegistry/index.mjs.map +1 -0
  1096. package/dist/src/web/services/testing/channels.cjs +11 -0
  1097. package/dist/src/web/services/testing/channels.cjs.map +1 -0
  1098. package/dist/src/web/services/testing/channels.d.mts +8 -0
  1099. package/dist/src/web/services/testing/channels.d.mts.map +1 -0
  1100. package/dist/src/web/services/testing/channels.mjs +11 -0
  1101. package/dist/src/web/services/testing/channels.mjs.map +1 -0
  1102. package/dist/src/web/services/testing/index.cjs +27 -0
  1103. package/dist/src/web/services/testing/index.cjs.map +1 -0
  1104. package/dist/src/web/services/testing/index.d.mts +31 -0
  1105. package/dist/src/web/services/testing/index.d.mts.map +1 -0
  1106. package/dist/src/web/services/testing/index.mjs +27 -0
  1107. package/dist/src/web/services/testing/index.mjs.map +1 -0
  1108. package/dist/src/web/services/testing/rpcStub.cjs +58 -0
  1109. package/dist/src/web/services/testing/rpcStub.cjs.map +1 -0
  1110. package/dist/src/web/services/testing/rpcStub.d.mts +37 -0
  1111. package/dist/src/web/services/testing/rpcStub.d.mts.map +1 -0
  1112. package/dist/src/web/services/testing/rpcStub.mjs +58 -0
  1113. package/dist/src/web/services/testing/rpcStub.mjs.map +1 -0
  1114. package/dist/src/web/services/testing/slotProps.cjs +91 -0
  1115. package/dist/src/web/services/testing/slotProps.cjs.map +1 -0
  1116. package/dist/src/web/services/testing/slotProps.d.mts +69 -0
  1117. package/dist/src/web/services/testing/slotProps.d.mts.map +1 -0
  1118. package/dist/src/web/services/testing/slotProps.mjs +90 -0
  1119. package/dist/src/web/services/testing/slotProps.mjs.map +1 -0
  1120. package/dist/src/web/services/testing/templateRail.cjs +128 -0
  1121. package/dist/src/web/services/testing/templateRail.cjs.map +1 -0
  1122. package/dist/src/web/services/testing/templateRail.d.mts +31 -0
  1123. package/dist/src/web/services/testing/templateRail.d.mts.map +1 -0
  1124. package/dist/src/web/services/testing/templateRail.mjs +126 -0
  1125. package/dist/src/web/services/testing/templateRail.mjs.map +1 -0
  1126. package/dist/src/web/services/toolResult/index.cjs +30 -0
  1127. package/dist/src/web/services/toolResult/index.cjs.map +1 -0
  1128. package/dist/src/web/services/toolResult/index.d.mts +14 -0
  1129. package/dist/src/web/services/toolResult/index.d.mts.map +1 -0
  1130. package/dist/src/web/services/toolResult/index.mjs +29 -0
  1131. package/dist/src/web/services/toolResult/index.mjs.map +1 -0
  1132. package/dist/src/web/types/extensionFile.d.mts +59 -0
  1133. package/dist/src/web/types/extensionFile.d.mts.map +1 -0
  1134. package/dist/src/web/types/mcpWidget.d.mts +14 -0
  1135. package/dist/src/web/types/mcpWidget.d.mts.map +1 -0
  1136. package/dist/src/web/types/modelContext.d.mts +43 -0
  1137. package/dist/src/web/types/modelContext.d.mts.map +1 -0
  1138. package/dist/src/web/types/sessionRegistry.d.mts +43 -0
  1139. package/dist/src/web/types/sessionRegistry.d.mts.map +1 -0
  1140. package/dist/src/web/types/template.d.mts +155 -0
  1141. package/dist/src/web/types/template.d.mts.map +1 -0
  1142. package/dist/src/web/types/webPlugin.d.mts +896 -0
  1143. package/dist/src/web/types/webPlugin.d.mts.map +1 -0
  1144. package/dist/syncLocation.cjs +244 -0
  1145. package/dist/syncLocation.cjs.map +1 -0
  1146. package/dist/syncLocation.d.mts +37 -0
  1147. package/dist/syncLocation.d.mts.map +1 -0
  1148. package/dist/syncLocation.mjs +231 -0
  1149. package/dist/syncLocation.mjs.map +1 -0
  1150. package/dist/syncRegistration.cjs +171 -0
  1151. package/dist/syncRegistration.cjs.map +1 -0
  1152. package/dist/syncRegistration.d.mts +48 -0
  1153. package/dist/syncRegistration.d.mts.map +1 -0
  1154. package/dist/syncRegistration.mjs +159 -0
  1155. package/dist/syncRegistration.mjs.map +1 -0
  1156. package/dist/syncStateContract.cjs +19 -0
  1157. package/dist/syncStateContract.cjs.map +1 -0
  1158. package/dist/syncStateContract.d.mts +14 -0
  1159. package/dist/syncStateContract.d.mts.map +1 -0
  1160. package/dist/syncStateContract.mjs +16 -0
  1161. package/dist/syncStateContract.mjs.map +1 -0
  1162. package/dist/terminalPiChildSessionService.cjs +267 -0
  1163. package/dist/terminalPiChildSessionService.cjs.map +1 -0
  1164. package/dist/terminalPiChildSessionService.d.mts +42 -0
  1165. package/dist/terminalPiChildSessionService.d.mts.map +1 -0
  1166. package/dist/terminalPiChildSessionService.mjs +260 -0
  1167. package/dist/terminalPiChildSessionService.mjs.map +1 -0
  1168. package/dist/testing.cjs +11 -0
  1169. package/dist/testing.d.mts +6 -0
  1170. package/dist/testing.mjs +6 -0
  1171. package/dist/toolInventory.cjs +136 -0
  1172. package/dist/toolInventory.cjs.map +1 -0
  1173. package/dist/toolInventory.d.mts +66 -0
  1174. package/dist/toolInventory.d.mts.map +1 -0
  1175. package/dist/toolInventory.mjs +133 -0
  1176. package/dist/toolInventory.mjs.map +1 -0
  1177. package/dist/toolNames.cjs +4 -0
  1178. package/dist/toolNames.d.mts +2 -0
  1179. package/dist/toolNames.mjs +2 -0
  1180. package/dist/toolOverrides.cjs +7 -0
  1181. package/dist/toolOverrides.d.mts +3 -0
  1182. package/dist/toolOverrides.mjs +3 -0
  1183. package/dist/toolSurface.cjs +7 -0
  1184. package/dist/toolSurface.d.mts +3 -0
  1185. package/dist/toolSurface.mjs +3 -0
  1186. package/dist/transition.cjs +5 -0
  1187. package/dist/transition.d.cjs +5 -0
  1188. package/dist/transition.d.mts +2 -0
  1189. package/dist/transition.mjs +2 -0
  1190. package/dist/transitionClassifier.cjs +112 -0
  1191. package/dist/transitionClassifier.cjs.map +1 -0
  1192. package/dist/transitionClassifier.d.mts +18 -0
  1193. package/dist/transitionClassifier.d.mts.map +1 -0
  1194. package/dist/transitionClassifier.mjs +111 -0
  1195. package/dist/transitionClassifier.mjs.map +1 -0
  1196. package/dist/transitionCoordinator.cjs +131 -0
  1197. package/dist/transitionCoordinator.cjs.map +1 -0
  1198. package/dist/transitionCoordinator.d.mts +16 -0
  1199. package/dist/transitionCoordinator.d.mts.map +1 -0
  1200. package/dist/transitionCoordinator.mjs +130 -0
  1201. package/dist/transitionCoordinator.mjs.map +1 -0
  1202. package/dist/typesContextApi.cjs +0 -0
  1203. package/dist/typesContextApi.d.mts +73 -0
  1204. package/dist/typesContextApi.d.mts.map +1 -0
  1205. package/dist/typesContextApi.mjs +1 -0
  1206. package/dist/uiHub.cjs +5 -0
  1207. package/dist/uiHub.d.mts +2 -0
  1208. package/dist/uiHub.mjs +2 -0
  1209. package/dist/v3Export.cjs +1004 -0
  1210. package/dist/v3Export.cjs.map +1 -0
  1211. package/dist/v3Export.d.mts +34 -0
  1212. package/dist/v3Export.d.mts.map +1 -0
  1213. package/dist/v3Export.mjs +1000 -0
  1214. package/dist/v3Export.mjs.map +1 -0
  1215. package/dist/voiceReloadHandoff.cjs +14 -0
  1216. package/dist/voiceReloadHandoff.d.mts +4 -0
  1217. package/dist/voiceReloadHandoff.mjs +4 -0
  1218. package/dist/voiceTools.cjs +56 -0
  1219. package/dist/voiceTools.d.mts +4 -0
  1220. package/dist/voiceTools.mjs +4 -0
  1221. package/dist/web.cjs +64 -0
  1222. package/dist/web.d.mts +19 -0
  1223. package/dist/web.mjs +13 -0
  1224. package/dist/webCompositions.cjs +100 -0
  1225. package/dist/webCompositions.cjs.map +1 -0
  1226. package/dist/webCompositions.d.mts +20 -0
  1227. package/dist/webCompositions.d.mts.map +1 -0
  1228. package/dist/webCompositions.mjs +95 -0
  1229. package/dist/webCompositions.mjs.map +1 -0
  1230. package/dist/webTesting.cjs +14 -0
  1231. package/dist/webTesting.d.mts +6 -0
  1232. package/dist/webTesting.mjs +6 -0
  1233. package/package.json +616 -0
@@ -0,0 +1,125 @@
1
+ import { deviceExpiryAt, deviceLabelFor, evaluateDevice, sanitizeUserAgent, touchDevice } from "../deviceSessions/index.mjs";
2
+ import { createHash, randomBytes } from "node:crypto";
3
+ //#region src/services/deviceAuth/index.ts
4
+ /** 256 bits. The token is scanned or set by the server, never typed, so there is no reason to economise. */
5
+ const TOKEN_BYTES = 32;
6
+ const ID_BYTES = 8;
7
+ function digest(token) {
8
+ return createHash("sha256").update(token).digest("hex");
9
+ }
10
+ /**
11
+ * Paired sessions, held in memory only.
12
+ *
13
+ * Keyed by digest rather than scanned, so verification is a map lookup and
14
+ * there is no comparison loop for a timing side channel to live in. That is why
15
+ * `timingSafeEqual` does not appear here: there is nothing to compare. If a
16
+ * future change introduces a scan, it will need one.
17
+ */
18
+ function createDeviceAuth(options) {
19
+ const now = options.now ?? (() => Date.now());
20
+ const notice = options.onNotice ?? (() => {});
21
+ /** Digest to record. The raw token exists only in flight. */
22
+ const devices = /* @__PURE__ */ new Map();
23
+ const timers = /* @__PURE__ */ new Map();
24
+ const clearDeadline = (hash) => {
25
+ const timer = timers.get(hash);
26
+ if (timer !== void 0) clearTimeout(timer);
27
+ timers.delete(hash);
28
+ };
29
+ const drop = (hash, reason) => {
30
+ const record = devices.get(hash);
31
+ if (record === void 0) return void 0;
32
+ devices.delete(hash);
33
+ clearDeadline(hash);
34
+ options.onDrop?.(record, reason);
35
+ return record;
36
+ };
37
+ const schedule = (hash, record) => {
38
+ clearDeadline(hash);
39
+ const deadline = deviceExpiryAt(record, options.settings());
40
+ if (deadline === void 0) return;
41
+ const remaining = deadline - now();
42
+ if (remaining <= 0) {
43
+ drop(hash, "expired");
44
+ return;
45
+ }
46
+ const timer = setTimeout(() => {
47
+ const current = devices.get(hash);
48
+ if (current === void 0) return;
49
+ if (evaluateDevice(current, now(), options.settings()).ok) schedule(hash, current);
50
+ else drop(hash, "expired");
51
+ }, Math.min(remaining, 2147483647));
52
+ timer.unref();
53
+ timers.set(hash, timer);
54
+ };
55
+ return {
56
+ enrol(input) {
57
+ const token = randomBytes(TOKEN_BYTES).toString("base64url");
58
+ const userAgent = sanitizeUserAgent(input.userAgent);
59
+ const at = now();
60
+ const record = {
61
+ id: randomBytes(ID_BYTES).toString("hex"),
62
+ tokenHash: digest(token),
63
+ label: deviceLabelFor(userAgent),
64
+ userAgent,
65
+ createdAt: at,
66
+ lastSeenAt: at
67
+ };
68
+ devices.set(record.tokenHash, record);
69
+ schedule(record.tokenHash, record);
70
+ notice(`paired ${record.label} (${record.id})`);
71
+ return {
72
+ token,
73
+ record
74
+ };
75
+ },
76
+ verify(token) {
77
+ if (token === void 0 || token === "") return void 0;
78
+ const hash = digest(token);
79
+ const at = now();
80
+ const verdict = evaluateDevice(devices.get(hash), at, options.settings());
81
+ if (!verdict.ok) {
82
+ if (verdict.reason !== "unknown") drop(hash, "expired");
83
+ return;
84
+ }
85
+ const seen = touchDevice(verdict.record, at);
86
+ devices.set(hash, seen);
87
+ schedule(hash, seen);
88
+ return seen;
89
+ },
90
+ revoke(id) {
91
+ for (const [hash, record] of devices) {
92
+ if (record.id !== id) continue;
93
+ drop(hash, "revoked");
94
+ notice(`revoked ${record.label} (${record.id})`);
95
+ return true;
96
+ }
97
+ return false;
98
+ },
99
+ revokeAll() {
100
+ const records = [...devices.values()];
101
+ for (const [hash] of devices) drop(hash, "revoked");
102
+ if (records.length > 0) notice(`revoked ${String(records.length)} paired device(s)`);
103
+ return records.length;
104
+ },
105
+ list: () => [...devices.values()],
106
+ reschedule() {
107
+ for (const [hash, record] of devices) schedule(hash, record);
108
+ },
109
+ sweep() {
110
+ const at = now();
111
+ const settings = options.settings();
112
+ let dropped = 0;
113
+ for (const [hash, record] of devices) {
114
+ if (evaluateDevice(record, at, settings).ok) continue;
115
+ drop(hash, "expired");
116
+ dropped += 1;
117
+ }
118
+ return dropped;
119
+ }
120
+ };
121
+ }
122
+ //#endregion
123
+ export { createDeviceAuth };
124
+
125
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/deviceAuth/index.ts"],"sourcesContent":["import { createHash, randomBytes } from 'node:crypto';\n\nimport type { RemoteAccessSettings } from '../../types/remote';\nimport {\n type DeviceRecord,\n deviceExpiryAt,\n deviceLabelFor,\n evaluateDevice,\n sanitizeUserAgent,\n touchDevice,\n} from '../deviceSessions';\n\n/** 256 bits. The token is scanned or set by the server, never typed, so there is no reason to economise. */\nconst TOKEN_BYTES = 32;\nconst ID_BYTES = 8;\n\nexport interface DeviceAuthOptions {\n /** Read fresh on every check, so a changed toggle takes effect on the next request. */\n settings: () => RemoteAccessSettings;\n now?: () => number;\n onNotice?: (message: string) => void;\n onDrop?: (record: DeviceRecord, reason: 'revoked' | 'expired') => void;\n}\n\nexport interface EnrolledDevice {\n /** Returned exactly once, to be sent as the cookie value. Only its digest is retained. */\n token: string;\n record: DeviceRecord;\n}\n\nexport interface DeviceAuth {\n enrol(input: { userAgent: string | undefined }): EnrolledDevice;\n /** The device this cookie names, or undefined. Bumps last-seen as a side effect. */\n verify(token: string | undefined): DeviceRecord | undefined;\n revoke(id: string): boolean;\n revokeAll(): number;\n list(): readonly DeviceRecord[];\n /** Re-arms exact deadlines after expiry settings change. */\n reschedule(): void;\n /** Drops what has expired under the current settings. Returns how many went. */\n sweep(): number;\n}\n\nfunction digest(token: string): string {\n // No salt and no KDF, deliberately. The input is 256 bits of uniform\n // randomness, so there is no dictionary to attack and a slow hash would only\n // add latency to every request. Do not \"fix\" this into bcrypt.\n return createHash('sha256').update(token).digest('hex');\n}\n\n/**\n * Paired sessions, held in memory only.\n *\n * Keyed by digest rather than scanned, so verification is a map lookup and\n * there is no comparison loop for a timing side channel to live in. That is why\n * `timingSafeEqual` does not appear here: there is nothing to compare. If a\n * future change introduces a scan, it will need one.\n */\nexport function createDeviceAuth(options: DeviceAuthOptions): DeviceAuth {\n const now = options.now ?? ((): number => Date.now());\n const notice = options.onNotice ?? ((): void => {});\n /** Digest to record. The raw token exists only in flight. */\n const devices = new Map<string, DeviceRecord>();\n const timers = new Map<string, ReturnType<typeof setTimeout>>();\n\n const clearDeadline = (hash: string): void => {\n const timer = timers.get(hash);\n if (timer !== undefined) clearTimeout(timer);\n timers.delete(hash);\n };\n\n const drop = (hash: string, reason: 'revoked' | 'expired'): DeviceRecord | undefined => {\n const record = devices.get(hash);\n if (record === undefined) return undefined;\n devices.delete(hash);\n clearDeadline(hash);\n options.onDrop?.(record, reason);\n return record;\n };\n\n const schedule = (hash: string, record: DeviceRecord): void => {\n clearDeadline(hash);\n const deadline = deviceExpiryAt(record, options.settings());\n if (deadline === undefined) return;\n const remaining = deadline - now();\n if (remaining <= 0) {\n drop(hash, 'expired');\n return;\n }\n const timer = setTimeout(\n () => {\n const current = devices.get(hash);\n if (current === undefined) return;\n if (evaluateDevice(current, now(), options.settings()).ok) schedule(hash, current);\n else drop(hash, 'expired');\n },\n Math.min(remaining, 2_147_483_647),\n );\n timer.unref();\n timers.set(hash, timer);\n };\n return {\n enrol(input) {\n const token = randomBytes(TOKEN_BYTES).toString('base64url');\n const userAgent = sanitizeUserAgent(input.userAgent);\n const at = now();\n const record: DeviceRecord = {\n id: randomBytes(ID_BYTES).toString('hex'),\n tokenHash: digest(token),\n label: deviceLabelFor(userAgent),\n userAgent,\n createdAt: at,\n lastSeenAt: at,\n };\n devices.set(record.tokenHash, record);\n schedule(record.tokenHash, record);\n notice(`paired ${record.label} (${record.id})`);\n return { token, record };\n },\n\n verify(token) {\n if (token === undefined || token === '') return undefined;\n const hash = digest(token);\n const at = now();\n const verdict = evaluateDevice(devices.get(hash), at, options.settings());\n if (!verdict.ok) {\n // An expired record is dropped on the way past rather than left to the\n // sweeper, so a revoked-by-time device stops appearing in the list.\n if (verdict.reason !== 'unknown') drop(hash, 'expired');\n return undefined;\n }\n const seen = touchDevice(verdict.record, at);\n devices.set(hash, seen);\n schedule(hash, seen);\n return seen;\n },\n\n revoke(id) {\n for (const [hash, record] of devices) {\n if (record.id !== id) continue;\n drop(hash, 'revoked');\n notice(`revoked ${record.label} (${record.id})`);\n return true;\n }\n return false;\n },\n\n revokeAll() {\n const records = [...devices.values()];\n for (const [hash] of devices) drop(hash, 'revoked');\n if (records.length > 0) notice(`revoked ${String(records.length)} paired device(s)`);\n return records.length;\n },\n\n list: () => [...devices.values()],\n\n reschedule() {\n for (const [hash, record] of devices) schedule(hash, record);\n },\n sweep() {\n const at = now();\n const settings = options.settings();\n let dropped = 0;\n for (const [hash, record] of devices) {\n if (evaluateDevice(record, at, settings).ok) continue;\n drop(hash, 'expired');\n dropped += 1;\n }\n return dropped;\n },\n };\n}\n"],"mappings":";;;;AAaA,MAAM,cAAc;AACpB,MAAM,WAAW;AA6BjB,SAAS,OAAO,OAAuB;CAIrC,OAAO,WAAW,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,KAAK;AACxD;;;;;;;;;AAUA,SAAgB,iBAAiB,SAAwC;CACvE,MAAM,MAAM,QAAQ,cAAsB,KAAK,IAAI;CACnD,MAAM,SAAS,QAAQ,mBAAyB,CAAC;;CAEjD,MAAM,0BAAU,IAAI,IAA0B;CAC9C,MAAM,yBAAS,IAAI,IAA2C;CAE9D,MAAM,iBAAiB,SAAuB;EAC5C,MAAM,QAAQ,OAAO,IAAI,IAAI;EAC7B,IAAI,UAAU,KAAA,GAAW,aAAa,KAAK;EAC3C,OAAO,OAAO,IAAI;CACpB;CAEA,MAAM,QAAQ,MAAc,WAA4D;EACtF,MAAM,SAAS,QAAQ,IAAI,IAAI;EAC/B,IAAI,WAAW,KAAA,GAAW,OAAO,KAAA;EACjC,QAAQ,OAAO,IAAI;EACnB,cAAc,IAAI;EAClB,QAAQ,SAAS,QAAQ,MAAM;EAC/B,OAAO;CACT;CAEA,MAAM,YAAY,MAAc,WAA+B;EAC7D,cAAc,IAAI;EAClB,MAAM,WAAW,eAAe,QAAQ,QAAQ,SAAS,CAAC;EAC1D,IAAI,aAAa,KAAA,GAAW;EAC5B,MAAM,YAAY,WAAW,IAAI;EACjC,IAAI,aAAa,GAAG;GAClB,KAAK,MAAM,SAAS;GACpB;EACF;EACA,MAAM,QAAQ,iBACN;GACJ,MAAM,UAAU,QAAQ,IAAI,IAAI;GAChC,IAAI,YAAY,KAAA,GAAW;GAC3B,IAAI,eAAe,SAAS,IAAI,GAAG,QAAQ,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,MAAM,OAAO;QAC5E,KAAK,MAAM,SAAS;EAC3B,GACA,KAAK,IAAI,WAAW,UAAa,CACnC;EACA,MAAM,MAAM;EACZ,OAAO,IAAI,MAAM,KAAK;CACxB;CACA,OAAO;EACL,MAAM,OAAO;GACX,MAAM,QAAQ,YAAY,WAAW,CAAC,CAAC,SAAS,WAAW;GAC3D,MAAM,YAAY,kBAAkB,MAAM,SAAS;GACnD,MAAM,KAAK,IAAI;GACf,MAAM,SAAuB;IAC3B,IAAI,YAAY,QAAQ,CAAC,CAAC,SAAS,KAAK;IACxC,WAAW,OAAO,KAAK;IACvB,OAAO,eAAe,SAAS;IAC/B;IACA,WAAW;IACX,YAAY;GACd;GACA,QAAQ,IAAI,OAAO,WAAW,MAAM;GACpC,SAAS,OAAO,WAAW,MAAM;GACjC,OAAO,UAAU,OAAO,MAAM,IAAI,OAAO,GAAG,EAAE;GAC9C,OAAO;IAAE;IAAO;GAAO;EACzB;EAEA,OAAO,OAAO;GACZ,IAAI,UAAU,KAAA,KAAa,UAAU,IAAI,OAAO,KAAA;GAChD,MAAM,OAAO,OAAO,KAAK;GACzB,MAAM,KAAK,IAAI;GACf,MAAM,UAAU,eAAe,QAAQ,IAAI,IAAI,GAAG,IAAI,QAAQ,SAAS,CAAC;GACxE,IAAI,CAAC,QAAQ,IAAI;IAGf,IAAI,QAAQ,WAAW,WAAW,KAAK,MAAM,SAAS;IACtD;GACF;GACA,MAAM,OAAO,YAAY,QAAQ,QAAQ,EAAE;GAC3C,QAAQ,IAAI,MAAM,IAAI;GACtB,SAAS,MAAM,IAAI;GACnB,OAAO;EACT;EAEA,OAAO,IAAI;GACT,KAAK,MAAM,CAAC,MAAM,WAAW,SAAS;IACpC,IAAI,OAAO,OAAO,IAAI;IACtB,KAAK,MAAM,SAAS;IACpB,OAAO,WAAW,OAAO,MAAM,IAAI,OAAO,GAAG,EAAE;IAC/C,OAAO;GACT;GACA,OAAO;EACT;EAEA,YAAY;GACV,MAAM,UAAU,CAAC,GAAG,QAAQ,OAAO,CAAC;GACpC,KAAK,MAAM,CAAC,SAAS,SAAS,KAAK,MAAM,SAAS;GAClD,IAAI,QAAQ,SAAS,GAAG,OAAO,WAAW,OAAO,QAAQ,MAAM,EAAE,kBAAkB;GACnF,OAAO,QAAQ;EACjB;EAEA,YAAY,CAAC,GAAG,QAAQ,OAAO,CAAC;EAEhC,aAAa;GACX,KAAK,MAAM,CAAC,MAAM,WAAW,SAAS,SAAS,MAAM,MAAM;EAC7D;EACA,QAAQ;GACN,MAAM,KAAK,IAAI;GACf,MAAM,WAAW,QAAQ,SAAS;GAClC,IAAI,UAAU;GACd,KAAK,MAAM,CAAC,MAAM,WAAW,SAAS;IACpC,IAAI,eAAe,QAAQ,IAAI,QAAQ,CAAC,CAAC,IAAI;IAC7C,KAAK,MAAM,SAAS;IACpB,WAAW;GACb;GACA,OAAO;EACT;CACF;AACF"}
@@ -0,0 +1,147 @@
1
+ //#region src/services/deviceSessions/index.ts
2
+ const MS_PER_MINUTE = 6e4;
3
+ const MS_PER_HOUR = 36e5;
4
+ const MS_PER_SECOND = 1e3;
5
+ /** Long enough to tell an iPhone from a laptop, short enough not to be a fingerprint in a log. */
6
+ const MAX_USER_AGENT = 200;
7
+ /** Upper bound of the C0 block, and the bounds of C1. Codepoints rather than a character class:
8
+ * a regex over control characters is unreadable, hard to review, and trips no-control-regex. */
9
+ const C0_END = 31;
10
+ const C1_START = 127;
11
+ const C1_END = 159;
12
+ const UNKNOWN_DEVICE = "unknown device";
13
+ /** Whether this record still authorizes a request, under the settings in force right now. */
14
+ function evaluateDevice(record, now, settings) {
15
+ if (record === void 0) return {
16
+ ok: false,
17
+ reason: "unknown"
18
+ };
19
+ if (!settings.sessionExpiryEnabled) return {
20
+ ok: true,
21
+ record
22
+ };
23
+ if (now - record.lastSeenAt >= settings.idleMinutes * MS_PER_MINUTE) return {
24
+ ok: false,
25
+ reason: "idle"
26
+ };
27
+ if (now - record.createdAt >= settings.absoluteHours * MS_PER_HOUR) return {
28
+ ok: false,
29
+ reason: "absolute"
30
+ };
31
+ return {
32
+ ok: true,
33
+ record
34
+ };
35
+ }
36
+ /** Exact deadline at which this device stops authorizing, or undefined while expiry is disabled. */
37
+ function deviceExpiryAt(record, settings) {
38
+ if (!settings.sessionExpiryEnabled) return void 0;
39
+ return Math.min(record.lastSeenAt + settings.idleMinutes * MS_PER_MINUTE, record.createdAt + settings.absoluteHours * MS_PER_HOUR);
40
+ }
41
+ function touchDevice(record, now) {
42
+ return {
43
+ ...record,
44
+ lastSeenAt: now
45
+ };
46
+ }
47
+ /** How long the cookie should live, so the browser forgets roughly when the server does. */
48
+ function cookieMaxAgeSeconds(settings, ceilingSeconds) {
49
+ if (!settings.sessionExpiryEnabled) return ceilingSeconds;
50
+ return Math.min(ceilingSeconds, Math.round(settings.absoluteHours * MS_PER_HOUR / MS_PER_SECOND));
51
+ }
52
+ /** Replaces every C0 and C1 control character with a space; those are what could forge a log line. */
53
+ function withoutControlCharacters(value) {
54
+ let out = "";
55
+ for (const character of value) {
56
+ const code = character.codePointAt(0) ?? 0;
57
+ out += code <= C0_END || code >= C1_START && code <= C1_END ? " " : character;
58
+ }
59
+ return out;
60
+ }
61
+ /**
62
+ * Strips anything that could forge a second line in a log or a second element
63
+ * in the approval dialog, then truncates.
64
+ *
65
+ * The user agent is attacker-supplied and lands in both `notice()` output and
66
+ * the host's approval prompt, so control characters are the concern rather than
67
+ * length.
68
+ */
69
+ function sanitizeUserAgent(raw) {
70
+ if (raw === void 0) return UNKNOWN_DEVICE;
71
+ const stripped = withoutControlCharacters(raw).replaceAll(/\s+/gu, " ").trim();
72
+ if (stripped === "") return UNKNOWN_DEVICE;
73
+ return stripped.slice(0, MAX_USER_AGENT);
74
+ }
75
+ /**
76
+ * The address Cloudflare's edge reported, reduced to a safe display and key value.
77
+ *
78
+ * It never authorizes a request. The tunnel route may use it only for abuse
79
+ * throttling when Cloudflare is the trusted proxy. A local process can forge it,
80
+ * but local processes are outside that public-internet boundary.
81
+ */
82
+ function sanitizeEdgeIp(raw) {
83
+ if (raw === void 0) return "unknown";
84
+ const candidate = raw.split(",")[0]?.trim() ?? "";
85
+ return /^[0-9a-f:.]{1,45}$/iu.test(candidate) ? candidate : "unknown";
86
+ }
87
+ const DEVICE_HINTS = [
88
+ {
89
+ pattern: /iphone/iu,
90
+ label: "iPhone"
91
+ },
92
+ {
93
+ pattern: /ipad/iu,
94
+ label: "iPad"
95
+ },
96
+ {
97
+ pattern: /android/iu,
98
+ label: "Android"
99
+ },
100
+ {
101
+ pattern: /macintosh|mac os x/iu,
102
+ label: "Mac"
103
+ },
104
+ {
105
+ pattern: /windows/iu,
106
+ label: "Windows"
107
+ },
108
+ {
109
+ pattern: /linux/iu,
110
+ label: "Linux"
111
+ }
112
+ ];
113
+ const BROWSER_HINTS = [
114
+ {
115
+ pattern: /edg\//iu,
116
+ label: "Edge"
117
+ },
118
+ {
119
+ pattern: /firefox\//iu,
120
+ label: "Firefox"
121
+ },
122
+ {
123
+ pattern: /chrome\/|crios\//iu,
124
+ label: "Chrome"
125
+ },
126
+ {
127
+ pattern: /safari\//iu,
128
+ label: "Safari"
129
+ }
130
+ ];
131
+ /** A human label for the device list, best effort; the full user agent is shown alongside. */
132
+ function deviceLabelFor(userAgent) {
133
+ const device = DEVICE_HINTS.find((hint) => hint.pattern.test(userAgent))?.label;
134
+ const browser = BROWSER_HINTS.find((hint) => hint.pattern.test(userAgent))?.label;
135
+ if (device !== void 0 && browser !== void 0) return `${device} · ${browser}`;
136
+ return device ?? browser ?? "paired device";
137
+ }
138
+ //#endregion
139
+ exports.cookieMaxAgeSeconds = cookieMaxAgeSeconds;
140
+ exports.deviceExpiryAt = deviceExpiryAt;
141
+ exports.deviceLabelFor = deviceLabelFor;
142
+ exports.evaluateDevice = evaluateDevice;
143
+ exports.sanitizeEdgeIp = sanitizeEdgeIp;
144
+ exports.sanitizeUserAgent = sanitizeUserAgent;
145
+ exports.touchDevice = touchDevice;
146
+
147
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/services/deviceSessions/index.ts"],"sourcesContent":["/**\n * What makes a paired device's session still valid.\n *\n * Expiry is derived from the settings in force at the moment of the check,\n * never stamped onto the record when it was minted. That is what makes the\n * setting honest in both directions: switching expiry on has to invalidate a\n * session that is already idle, and switching it off has to bring it back. A\n * stored `expiresAt` would do neither.\n */\n\nimport type { RemoteAccessSettings } from '../../types/remote';\n\nconst MS_PER_MINUTE = 60_000;\nconst MS_PER_HOUR = 3_600_000;\nconst MS_PER_SECOND = 1000;\n/** Long enough to tell an iPhone from a laptop, short enough not to be a fingerprint in a log. */\nconst MAX_USER_AGENT = 200;\n/** Upper bound of the C0 block, and the bounds of C1. Codepoints rather than a character class:\n * a regex over control characters is unreadable, hard to review, and trips no-control-regex. */\nconst C0_END = 0x1f;\nconst C1_START = 0x7f;\nconst C1_END = 0x9f;\nconst UNKNOWN_DEVICE = 'unknown device';\n\nexport interface DeviceRecord {\n /** Opaque, safe to display and to name in a revoke call. Never the secret. */\n id: string;\n /** SHA-256 of the session token. The token itself is never retained. */\n tokenHash: string;\n label: string;\n userAgent: string;\n /** Epoch milliseconds. */\n createdAt: number;\n /** Epoch milliseconds, bumped on every authenticated request. */\n lastSeenAt: number;\n}\n\nexport type DeviceRejection = 'unknown' | 'idle' | 'absolute';\n\nexport type DeviceVerdict = { ok: true; record: DeviceRecord } | { ok: false; reason: DeviceRejection };\n\n/** Whether this record still authorizes a request, under the settings in force right now. */\nexport function evaluateDevice(\n record: DeviceRecord | undefined,\n now: number,\n settings: RemoteAccessSettings,\n): DeviceVerdict {\n if (record === undefined) return { ok: false, reason: 'unknown' };\n if (!settings.sessionExpiryEnabled) return { ok: true, record };\n if (now - record.lastSeenAt >= settings.idleMinutes * MS_PER_MINUTE) return { ok: false, reason: 'idle' };\n if (now - record.createdAt >= settings.absoluteHours * MS_PER_HOUR) return { ok: false, reason: 'absolute' };\n return { ok: true, record };\n}\n\n/** Exact deadline at which this device stops authorizing, or undefined while expiry is disabled. */\nexport function deviceExpiryAt(record: DeviceRecord, settings: RemoteAccessSettings): number | undefined {\n if (!settings.sessionExpiryEnabled) return undefined;\n return Math.min(\n record.lastSeenAt + settings.idleMinutes * MS_PER_MINUTE,\n record.createdAt + settings.absoluteHours * MS_PER_HOUR,\n );\n}\n\nexport function touchDevice(record: DeviceRecord, now: number): DeviceRecord {\n return { ...record, lastSeenAt: now };\n}\n\n/** How long the cookie should live, so the browser forgets roughly when the server does. */\nexport function cookieMaxAgeSeconds(settings: RemoteAccessSettings, ceilingSeconds: number): number {\n if (!settings.sessionExpiryEnabled) return ceilingSeconds;\n return Math.min(ceilingSeconds, Math.round((settings.absoluteHours * MS_PER_HOUR) / MS_PER_SECOND));\n}\n\n/** Replaces every C0 and C1 control character with a space; those are what could forge a log line. */\nfunction withoutControlCharacters(value: string): string {\n let out = '';\n for (const character of value) {\n const code = character.codePointAt(0) ?? 0;\n out += code <= C0_END || (code >= C1_START && code <= C1_END) ? ' ' : character;\n }\n return out;\n}\n\n/**\n * Strips anything that could forge a second line in a log or a second element\n * in the approval dialog, then truncates.\n *\n * The user agent is attacker-supplied and lands in both `notice()` output and\n * the host's approval prompt, so control characters are the concern rather than\n * length.\n */\nexport function sanitizeUserAgent(raw: string | undefined): string {\n if (raw === undefined) return UNKNOWN_DEVICE;\n const stripped = withoutControlCharacters(raw).replaceAll(/\\s+/gu, ' ').trim();\n if (stripped === '') return UNKNOWN_DEVICE;\n return stripped.slice(0, MAX_USER_AGENT);\n}\n\n/**\n * The address Cloudflare's edge reported, reduced to a safe display and key value.\n *\n * It never authorizes a request. The tunnel route may use it only for abuse\n * throttling when Cloudflare is the trusted proxy. A local process can forge it,\n * but local processes are outside that public-internet boundary.\n */\nexport function sanitizeEdgeIp(raw: string | undefined): string {\n if (raw === undefined) return 'unknown';\n const candidate = raw.split(',')[0]?.trim() ?? '';\n return /^[0-9a-f:.]{1,45}$/iu.test(candidate) ? candidate : 'unknown';\n}\n\nconst DEVICE_HINTS: readonly { pattern: RegExp; label: string }[] = [\n { pattern: /iphone/iu, label: 'iPhone' },\n { pattern: /ipad/iu, label: 'iPad' },\n { pattern: /android/iu, label: 'Android' },\n { pattern: /macintosh|mac os x/iu, label: 'Mac' },\n { pattern: /windows/iu, label: 'Windows' },\n { pattern: /linux/iu, label: 'Linux' },\n];\n\nconst BROWSER_HINTS: readonly { pattern: RegExp; label: string }[] = [\n // Order matters: every Chromium user agent also says Safari, and Edge says both.\n { pattern: /edg\\//iu, label: 'Edge' },\n { pattern: /firefox\\//iu, label: 'Firefox' },\n { pattern: /chrome\\/|crios\\//iu, label: 'Chrome' },\n { pattern: /safari\\//iu, label: 'Safari' },\n];\n\n/** A human label for the device list, best effort; the full user agent is shown alongside. */\nexport function deviceLabelFor(userAgent: string): string {\n const device = DEVICE_HINTS.find((hint) => hint.pattern.test(userAgent))?.label;\n const browser = BROWSER_HINTS.find((hint) => hint.pattern.test(userAgent))?.label;\n if (device !== undefined && browser !== undefined) return `${device} · ${browser}`;\n return device ?? browser ?? 'paired device';\n}\n"],"mappings":";AAYA,MAAM,gBAAgB;AACtB,MAAM,cAAc;AACpB,MAAM,gBAAgB;;AAEtB,MAAM,iBAAiB;;;AAGvB,MAAM,SAAS;AACf,MAAM,WAAW;AACjB,MAAM,SAAS;AACf,MAAM,iBAAiB;;AAoBvB,SAAgB,eACd,QACA,KACA,UACe;CACf,IAAI,WAAW,KAAA,GAAW,OAAO;EAAE,IAAI;EAAO,QAAQ;CAAU;CAChE,IAAI,CAAC,SAAS,sBAAsB,OAAO;EAAE,IAAI;EAAM;CAAO;CAC9D,IAAI,MAAM,OAAO,cAAc,SAAS,cAAc,eAAe,OAAO;EAAE,IAAI;EAAO,QAAQ;CAAO;CACxG,IAAI,MAAM,OAAO,aAAa,SAAS,gBAAgB,aAAa,OAAO;EAAE,IAAI;EAAO,QAAQ;CAAW;CAC3G,OAAO;EAAE,IAAI;EAAM;CAAO;AAC5B;;AAGA,SAAgB,eAAe,QAAsB,UAAoD;CACvG,IAAI,CAAC,SAAS,sBAAsB,OAAO,KAAA;CAC3C,OAAO,KAAK,IACV,OAAO,aAAa,SAAS,cAAc,eAC3C,OAAO,YAAY,SAAS,gBAAgB,WAC9C;AACF;AAEA,SAAgB,YAAY,QAAsB,KAA2B;CAC3E,OAAO;EAAE,GAAG;EAAQ,YAAY;CAAI;AACtC;;AAGA,SAAgB,oBAAoB,UAAgC,gBAAgC;CAClG,IAAI,CAAC,SAAS,sBAAsB,OAAO;CAC3C,OAAO,KAAK,IAAI,gBAAgB,KAAK,MAAO,SAAS,gBAAgB,cAAe,aAAa,CAAC;AACpG;;AAGA,SAAS,yBAAyB,OAAuB;CACvD,IAAI,MAAM;CACV,KAAK,MAAM,aAAa,OAAO;EAC7B,MAAM,OAAO,UAAU,YAAY,CAAC,KAAK;EACzC,OAAO,QAAQ,UAAW,QAAQ,YAAY,QAAQ,SAAU,MAAM;CACxE;CACA,OAAO;AACT;;;;;;;;;AAUA,SAAgB,kBAAkB,KAAiC;CACjE,IAAI,QAAQ,KAAA,GAAW,OAAO;CAC9B,MAAM,WAAW,yBAAyB,GAAG,CAAC,CAAC,WAAW,SAAS,GAAG,CAAC,CAAC,KAAK;CAC7E,IAAI,aAAa,IAAI,OAAO;CAC5B,OAAO,SAAS,MAAM,GAAG,cAAc;AACzC;;;;;;;;AASA,SAAgB,eAAe,KAAiC;CAC9D,IAAI,QAAQ,KAAA,GAAW,OAAO;CAC9B,MAAM,YAAY,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,KAAK;CAC/C,OAAO,uBAAuB,KAAK,SAAS,IAAI,YAAY;AAC9D;AAEA,MAAM,eAA8D;CAClE;EAAE,SAAS;EAAY,OAAO;CAAS;CACvC;EAAE,SAAS;EAAU,OAAO;CAAO;CACnC;EAAE,SAAS;EAAa,OAAO;CAAU;CACzC;EAAE,SAAS;EAAwB,OAAO;CAAM;CAChD;EAAE,SAAS;EAAa,OAAO;CAAU;CACzC;EAAE,SAAS;EAAW,OAAO;CAAQ;AACvC;AAEA,MAAM,gBAA+D;CAEnE;EAAE,SAAS;EAAW,OAAO;CAAO;CACpC;EAAE,SAAS;EAAe,OAAO;CAAU;CAC3C;EAAE,SAAS;EAAsB,OAAO;CAAS;CACjD;EAAE,SAAS;EAAc,OAAO;CAAS;AAC3C;;AAGA,SAAgB,eAAe,WAA2B;CACxD,MAAM,SAAS,aAAa,MAAM,SAAS,KAAK,QAAQ,KAAK,SAAS,CAAC,CAAC,EAAE;CAC1E,MAAM,UAAU,cAAc,MAAM,SAAS,KAAK,QAAQ,KAAK,SAAS,CAAC,CAAC,EAAE;CAC5E,IAAI,WAAW,KAAA,KAAa,YAAY,KAAA,GAAW,OAAO,GAAG,OAAO,KAAK;CACzE,OAAO,UAAU,WAAW;AAC9B"}
@@ -0,0 +1,15 @@
1
+ //#region src/services/deviceSessions/index.d.ts
2
+ export interface DeviceRecord {
3
+ /** Opaque, safe to display and to name in a revoke call. Never the secret. */
4
+ id: string;
5
+ /** SHA-256 of the session token. The token itself is never retained. */
6
+ tokenHash: string;
7
+ label: string;
8
+ userAgent: string;
9
+ /** Epoch milliseconds. */
10
+ createdAt: number;
11
+ /** Epoch milliseconds, bumped on every authenticated request. */
12
+ lastSeenAt: number;
13
+ }
14
+ //#endregion
15
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/deviceSessions/index.ts"],"mappings":";iBAwBiB;;EAEf;;EAEA;EACA;EACA;;EAEA;;EAEA"}
@@ -0,0 +1,141 @@
1
+ //#region src/services/deviceSessions/index.ts
2
+ const MS_PER_MINUTE = 6e4;
3
+ const MS_PER_HOUR = 36e5;
4
+ const MS_PER_SECOND = 1e3;
5
+ /** Long enough to tell an iPhone from a laptop, short enough not to be a fingerprint in a log. */
6
+ const MAX_USER_AGENT = 200;
7
+ /** Upper bound of the C0 block, and the bounds of C1. Codepoints rather than a character class:
8
+ * a regex over control characters is unreadable, hard to review, and trips no-control-regex. */
9
+ const C0_END = 31;
10
+ const C1_START = 127;
11
+ const C1_END = 159;
12
+ const UNKNOWN_DEVICE = "unknown device";
13
+ /** Whether this record still authorizes a request, under the settings in force right now. */
14
+ function evaluateDevice(record, now, settings) {
15
+ if (record === void 0) return {
16
+ ok: false,
17
+ reason: "unknown"
18
+ };
19
+ if (!settings.sessionExpiryEnabled) return {
20
+ ok: true,
21
+ record
22
+ };
23
+ if (now - record.lastSeenAt >= settings.idleMinutes * MS_PER_MINUTE) return {
24
+ ok: false,
25
+ reason: "idle"
26
+ };
27
+ if (now - record.createdAt >= settings.absoluteHours * MS_PER_HOUR) return {
28
+ ok: false,
29
+ reason: "absolute"
30
+ };
31
+ return {
32
+ ok: true,
33
+ record
34
+ };
35
+ }
36
+ /** Exact deadline at which this device stops authorizing, or undefined while expiry is disabled. */
37
+ function deviceExpiryAt(record, settings) {
38
+ if (!settings.sessionExpiryEnabled) return void 0;
39
+ return Math.min(record.lastSeenAt + settings.idleMinutes * MS_PER_MINUTE, record.createdAt + settings.absoluteHours * MS_PER_HOUR);
40
+ }
41
+ function touchDevice(record, now) {
42
+ return {
43
+ ...record,
44
+ lastSeenAt: now
45
+ };
46
+ }
47
+ /** How long the cookie should live, so the browser forgets roughly when the server does. */
48
+ function cookieMaxAgeSeconds(settings, ceilingSeconds) {
49
+ if (!settings.sessionExpiryEnabled) return ceilingSeconds;
50
+ return Math.min(ceilingSeconds, Math.round(settings.absoluteHours * MS_PER_HOUR / MS_PER_SECOND));
51
+ }
52
+ /** Replaces every C0 and C1 control character with a space; those are what could forge a log line. */
53
+ function withoutControlCharacters(value) {
54
+ let out = "";
55
+ for (const character of value) {
56
+ const code = character.codePointAt(0) ?? 0;
57
+ out += code <= C0_END || code >= C1_START && code <= C1_END ? " " : character;
58
+ }
59
+ return out;
60
+ }
61
+ /**
62
+ * Strips anything that could forge a second line in a log or a second element
63
+ * in the approval dialog, then truncates.
64
+ *
65
+ * The user agent is attacker-supplied and lands in both `notice()` output and
66
+ * the host's approval prompt, so control characters are the concern rather than
67
+ * length.
68
+ */
69
+ function sanitizeUserAgent(raw) {
70
+ if (raw === void 0) return UNKNOWN_DEVICE;
71
+ const stripped = withoutControlCharacters(raw).replaceAll(/\s+/gu, " ").trim();
72
+ if (stripped === "") return UNKNOWN_DEVICE;
73
+ return stripped.slice(0, MAX_USER_AGENT);
74
+ }
75
+ /**
76
+ * The address Cloudflare's edge reported, reduced to a safe display and key value.
77
+ *
78
+ * It never authorizes a request. The tunnel route may use it only for abuse
79
+ * throttling when Cloudflare is the trusted proxy. A local process can forge it,
80
+ * but local processes are outside that public-internet boundary.
81
+ */
82
+ function sanitizeEdgeIp(raw) {
83
+ if (raw === void 0) return "unknown";
84
+ const candidate = raw.split(",")[0]?.trim() ?? "";
85
+ return /^[0-9a-f:.]{1,45}$/iu.test(candidate) ? candidate : "unknown";
86
+ }
87
+ const DEVICE_HINTS = [
88
+ {
89
+ pattern: /iphone/iu,
90
+ label: "iPhone"
91
+ },
92
+ {
93
+ pattern: /ipad/iu,
94
+ label: "iPad"
95
+ },
96
+ {
97
+ pattern: /android/iu,
98
+ label: "Android"
99
+ },
100
+ {
101
+ pattern: /macintosh|mac os x/iu,
102
+ label: "Mac"
103
+ },
104
+ {
105
+ pattern: /windows/iu,
106
+ label: "Windows"
107
+ },
108
+ {
109
+ pattern: /linux/iu,
110
+ label: "Linux"
111
+ }
112
+ ];
113
+ const BROWSER_HINTS = [
114
+ {
115
+ pattern: /edg\//iu,
116
+ label: "Edge"
117
+ },
118
+ {
119
+ pattern: /firefox\//iu,
120
+ label: "Firefox"
121
+ },
122
+ {
123
+ pattern: /chrome\/|crios\//iu,
124
+ label: "Chrome"
125
+ },
126
+ {
127
+ pattern: /safari\//iu,
128
+ label: "Safari"
129
+ }
130
+ ];
131
+ /** A human label for the device list, best effort; the full user agent is shown alongside. */
132
+ function deviceLabelFor(userAgent) {
133
+ const device = DEVICE_HINTS.find((hint) => hint.pattern.test(userAgent))?.label;
134
+ const browser = BROWSER_HINTS.find((hint) => hint.pattern.test(userAgent))?.label;
135
+ if (device !== void 0 && browser !== void 0) return `${device} · ${browser}`;
136
+ return device ?? browser ?? "paired device";
137
+ }
138
+ //#endregion
139
+ export { cookieMaxAgeSeconds, deviceExpiryAt, deviceLabelFor, evaluateDevice, sanitizeEdgeIp, sanitizeUserAgent, touchDevice };
140
+
141
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/deviceSessions/index.ts"],"sourcesContent":["/**\n * What makes a paired device's session still valid.\n *\n * Expiry is derived from the settings in force at the moment of the check,\n * never stamped onto the record when it was minted. That is what makes the\n * setting honest in both directions: switching expiry on has to invalidate a\n * session that is already idle, and switching it off has to bring it back. A\n * stored `expiresAt` would do neither.\n */\n\nimport type { RemoteAccessSettings } from '../../types/remote';\n\nconst MS_PER_MINUTE = 60_000;\nconst MS_PER_HOUR = 3_600_000;\nconst MS_PER_SECOND = 1000;\n/** Long enough to tell an iPhone from a laptop, short enough not to be a fingerprint in a log. */\nconst MAX_USER_AGENT = 200;\n/** Upper bound of the C0 block, and the bounds of C1. Codepoints rather than a character class:\n * a regex over control characters is unreadable, hard to review, and trips no-control-regex. */\nconst C0_END = 0x1f;\nconst C1_START = 0x7f;\nconst C1_END = 0x9f;\nconst UNKNOWN_DEVICE = 'unknown device';\n\nexport interface DeviceRecord {\n /** Opaque, safe to display and to name in a revoke call. Never the secret. */\n id: string;\n /** SHA-256 of the session token. The token itself is never retained. */\n tokenHash: string;\n label: string;\n userAgent: string;\n /** Epoch milliseconds. */\n createdAt: number;\n /** Epoch milliseconds, bumped on every authenticated request. */\n lastSeenAt: number;\n}\n\nexport type DeviceRejection = 'unknown' | 'idle' | 'absolute';\n\nexport type DeviceVerdict = { ok: true; record: DeviceRecord } | { ok: false; reason: DeviceRejection };\n\n/** Whether this record still authorizes a request, under the settings in force right now. */\nexport function evaluateDevice(\n record: DeviceRecord | undefined,\n now: number,\n settings: RemoteAccessSettings,\n): DeviceVerdict {\n if (record === undefined) return { ok: false, reason: 'unknown' };\n if (!settings.sessionExpiryEnabled) return { ok: true, record };\n if (now - record.lastSeenAt >= settings.idleMinutes * MS_PER_MINUTE) return { ok: false, reason: 'idle' };\n if (now - record.createdAt >= settings.absoluteHours * MS_PER_HOUR) return { ok: false, reason: 'absolute' };\n return { ok: true, record };\n}\n\n/** Exact deadline at which this device stops authorizing, or undefined while expiry is disabled. */\nexport function deviceExpiryAt(record: DeviceRecord, settings: RemoteAccessSettings): number | undefined {\n if (!settings.sessionExpiryEnabled) return undefined;\n return Math.min(\n record.lastSeenAt + settings.idleMinutes * MS_PER_MINUTE,\n record.createdAt + settings.absoluteHours * MS_PER_HOUR,\n );\n}\n\nexport function touchDevice(record: DeviceRecord, now: number): DeviceRecord {\n return { ...record, lastSeenAt: now };\n}\n\n/** How long the cookie should live, so the browser forgets roughly when the server does. */\nexport function cookieMaxAgeSeconds(settings: RemoteAccessSettings, ceilingSeconds: number): number {\n if (!settings.sessionExpiryEnabled) return ceilingSeconds;\n return Math.min(ceilingSeconds, Math.round((settings.absoluteHours * MS_PER_HOUR) / MS_PER_SECOND));\n}\n\n/** Replaces every C0 and C1 control character with a space; those are what could forge a log line. */\nfunction withoutControlCharacters(value: string): string {\n let out = '';\n for (const character of value) {\n const code = character.codePointAt(0) ?? 0;\n out += code <= C0_END || (code >= C1_START && code <= C1_END) ? ' ' : character;\n }\n return out;\n}\n\n/**\n * Strips anything that could forge a second line in a log or a second element\n * in the approval dialog, then truncates.\n *\n * The user agent is attacker-supplied and lands in both `notice()` output and\n * the host's approval prompt, so control characters are the concern rather than\n * length.\n */\nexport function sanitizeUserAgent(raw: string | undefined): string {\n if (raw === undefined) return UNKNOWN_DEVICE;\n const stripped = withoutControlCharacters(raw).replaceAll(/\\s+/gu, ' ').trim();\n if (stripped === '') return UNKNOWN_DEVICE;\n return stripped.slice(0, MAX_USER_AGENT);\n}\n\n/**\n * The address Cloudflare's edge reported, reduced to a safe display and key value.\n *\n * It never authorizes a request. The tunnel route may use it only for abuse\n * throttling when Cloudflare is the trusted proxy. A local process can forge it,\n * but local processes are outside that public-internet boundary.\n */\nexport function sanitizeEdgeIp(raw: string | undefined): string {\n if (raw === undefined) return 'unknown';\n const candidate = raw.split(',')[0]?.trim() ?? '';\n return /^[0-9a-f:.]{1,45}$/iu.test(candidate) ? candidate : 'unknown';\n}\n\nconst DEVICE_HINTS: readonly { pattern: RegExp; label: string }[] = [\n { pattern: /iphone/iu, label: 'iPhone' },\n { pattern: /ipad/iu, label: 'iPad' },\n { pattern: /android/iu, label: 'Android' },\n { pattern: /macintosh|mac os x/iu, label: 'Mac' },\n { pattern: /windows/iu, label: 'Windows' },\n { pattern: /linux/iu, label: 'Linux' },\n];\n\nconst BROWSER_HINTS: readonly { pattern: RegExp; label: string }[] = [\n // Order matters: every Chromium user agent also says Safari, and Edge says both.\n { pattern: /edg\\//iu, label: 'Edge' },\n { pattern: /firefox\\//iu, label: 'Firefox' },\n { pattern: /chrome\\/|crios\\//iu, label: 'Chrome' },\n { pattern: /safari\\//iu, label: 'Safari' },\n];\n\n/** A human label for the device list, best effort; the full user agent is shown alongside. */\nexport function deviceLabelFor(userAgent: string): string {\n const device = DEVICE_HINTS.find((hint) => hint.pattern.test(userAgent))?.label;\n const browser = BROWSER_HINTS.find((hint) => hint.pattern.test(userAgent))?.label;\n if (device !== undefined && browser !== undefined) return `${device} · ${browser}`;\n return device ?? browser ?? 'paired device';\n}\n"],"mappings":";AAYA,MAAM,gBAAgB;AACtB,MAAM,cAAc;AACpB,MAAM,gBAAgB;;AAEtB,MAAM,iBAAiB;;;AAGvB,MAAM,SAAS;AACf,MAAM,WAAW;AACjB,MAAM,SAAS;AACf,MAAM,iBAAiB;;AAoBvB,SAAgB,eACd,QACA,KACA,UACe;CACf,IAAI,WAAW,KAAA,GAAW,OAAO;EAAE,IAAI;EAAO,QAAQ;CAAU;CAChE,IAAI,CAAC,SAAS,sBAAsB,OAAO;EAAE,IAAI;EAAM;CAAO;CAC9D,IAAI,MAAM,OAAO,cAAc,SAAS,cAAc,eAAe,OAAO;EAAE,IAAI;EAAO,QAAQ;CAAO;CACxG,IAAI,MAAM,OAAO,aAAa,SAAS,gBAAgB,aAAa,OAAO;EAAE,IAAI;EAAO,QAAQ;CAAW;CAC3G,OAAO;EAAE,IAAI;EAAM;CAAO;AAC5B;;AAGA,SAAgB,eAAe,QAAsB,UAAoD;CACvG,IAAI,CAAC,SAAS,sBAAsB,OAAO,KAAA;CAC3C,OAAO,KAAK,IACV,OAAO,aAAa,SAAS,cAAc,eAC3C,OAAO,YAAY,SAAS,gBAAgB,WAC9C;AACF;AAEA,SAAgB,YAAY,QAAsB,KAA2B;CAC3E,OAAO;EAAE,GAAG;EAAQ,YAAY;CAAI;AACtC;;AAGA,SAAgB,oBAAoB,UAAgC,gBAAgC;CAClG,IAAI,CAAC,SAAS,sBAAsB,OAAO;CAC3C,OAAO,KAAK,IAAI,gBAAgB,KAAK,MAAO,SAAS,gBAAgB,cAAe,aAAa,CAAC;AACpG;;AAGA,SAAS,yBAAyB,OAAuB;CACvD,IAAI,MAAM;CACV,KAAK,MAAM,aAAa,OAAO;EAC7B,MAAM,OAAO,UAAU,YAAY,CAAC,KAAK;EACzC,OAAO,QAAQ,UAAW,QAAQ,YAAY,QAAQ,SAAU,MAAM;CACxE;CACA,OAAO;AACT;;;;;;;;;AAUA,SAAgB,kBAAkB,KAAiC;CACjE,IAAI,QAAQ,KAAA,GAAW,OAAO;CAC9B,MAAM,WAAW,yBAAyB,GAAG,CAAC,CAAC,WAAW,SAAS,GAAG,CAAC,CAAC,KAAK;CAC7E,IAAI,aAAa,IAAI,OAAO;CAC5B,OAAO,SAAS,MAAM,GAAG,cAAc;AACzC;;;;;;;;AASA,SAAgB,eAAe,KAAiC;CAC9D,IAAI,QAAQ,KAAA,GAAW,OAAO;CAC9B,MAAM,YAAY,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,KAAK;CAC/C,OAAO,uBAAuB,KAAK,SAAS,IAAI,YAAY;AAC9D;AAEA,MAAM,eAA8D;CAClE;EAAE,SAAS;EAAY,OAAO;CAAS;CACvC;EAAE,SAAS;EAAU,OAAO;CAAO;CACnC;EAAE,SAAS;EAAa,OAAO;CAAU;CACzC;EAAE,SAAS;EAAwB,OAAO;CAAM;CAChD;EAAE,SAAS;EAAa,OAAO;CAAU;CACzC;EAAE,SAAS;EAAW,OAAO;CAAQ;AACvC;AAEA,MAAM,gBAA+D;CAEnE;EAAE,SAAS;EAAW,OAAO;CAAO;CACpC;EAAE,SAAS;EAAe,OAAO;CAAU;CAC3C;EAAE,SAAS;EAAsB,OAAO;CAAS;CACjD;EAAE,SAAS;EAAc,OAAO;CAAS;AAC3C;;AAGA,SAAgB,eAAe,WAA2B;CACxD,MAAM,SAAS,aAAa,MAAM,SAAS,KAAK,QAAQ,KAAK,SAAS,CAAC,CAAC,EAAE;CAC1E,MAAM,UAAU,cAAc,MAAM,SAAS,KAAK,QAAQ,KAAK,SAAS,CAAC,CAAC,EAAE;CAC5E,IAAI,WAAW,KAAA,KAAa,YAAY,KAAA,GAAW,OAAO,GAAG,OAAO,KAAK;CACzE,OAAO,UAAU,WAAW;AAC9B"}
@@ -0,0 +1,125 @@
1
+ const require_notification = require("../../schemas/notification.cjs");
2
+ require("../../../notification.cjs");
3
+ let node_crypto = require("node:crypto");
4
+ //#region src/services/headlessClient/index.ts
5
+ /** Explicit client interactions over the existing browser dialog protocol. */
6
+ function createHeadlessClient(options) {
7
+ const pending = /* @__PURE__ */ new Map();
8
+ let disposed = false;
9
+ const advance = () => pending.values().next().value?.start();
10
+ return {
11
+ client: {
12
+ async notify(request) {
13
+ if (disposed) throw new Error("Headless client is closed");
14
+ const data = require_notification.createDoomNotificationEntryData(request);
15
+ if (!data) throw new Error("Invalid notification request");
16
+ try {
17
+ await options.appendCustomEntry(require_notification.DOOM_NOTIFICATION_ENTRY_TYPE, data);
18
+ } catch (error) {
19
+ options.emitFrame({
20
+ type: "error",
21
+ code: "notification_undelivered",
22
+ error: `${data.body} (not saved to history: ${error instanceof Error ? error.message : String(error)})`
23
+ });
24
+ }
25
+ },
26
+ setStatus(source, text) {
27
+ if (disposed) throw new Error("Headless client is closed");
28
+ options.emitFrame({
29
+ type: "extension_ui_request",
30
+ method: "setStatus",
31
+ statusKey: source,
32
+ statusText: text
33
+ });
34
+ },
35
+ appendComposerText(text) {
36
+ if (disposed) throw new Error("Headless client is closed");
37
+ options.emitFrame({
38
+ type: "extension_ui_request",
39
+ method: "append_composer_text",
40
+ id: (0, node_crypto.randomUUID)(),
41
+ text
42
+ });
43
+ },
44
+ request(request, signal) {
45
+ if (disposed) return Promise.reject(/* @__PURE__ */ new Error("Headless client is closed"));
46
+ if (signal?.aborted) return Promise.resolve(void 0);
47
+ if (![
48
+ "confirm",
49
+ "select",
50
+ "input"
51
+ ].includes(request.kind)) return Promise.reject(/* @__PURE__ */ new Error("Unsupported headless client request"));
52
+ const labels = request.options?.map((option) => option.label);
53
+ if (labels && new Set(labels).size !== labels.length) return Promise.reject(/* @__PURE__ */ new Error("Select option labels must be unique"));
54
+ const id = `headless-ui:${(0, node_crypto.randomUUID)()}`;
55
+ return new Promise((resolve, reject) => {
56
+ let started = false;
57
+ const finish = (outcome) => {
58
+ if (!pending.delete(id)) return;
59
+ signal?.removeEventListener("abort", abort);
60
+ try {
61
+ if (started) options.emitFrame({
62
+ type: "extension_ui_answered",
63
+ id
64
+ });
65
+ if ("error" in outcome) reject(outcome.error);
66
+ else resolve(outcome.value);
67
+ } catch (error) {
68
+ reject(error);
69
+ } finally {
70
+ advance();
71
+ }
72
+ };
73
+ const abort = () => finish({ value: void 0 });
74
+ pending.set(id, {
75
+ start() {
76
+ if (started || disposed) return;
77
+ started = true;
78
+ try {
79
+ options.emitFrame({
80
+ type: "extension_ui_request",
81
+ id,
82
+ method: request.kind === "input" && request.multiline ? "editor" : request.kind,
83
+ title: request.title,
84
+ message: request.message,
85
+ options: labels,
86
+ placeholder: request.message,
87
+ prefill: request.initialValue
88
+ });
89
+ } catch (error) {
90
+ finish({ error });
91
+ }
92
+ },
93
+ respond(frame) {
94
+ if (!started) return;
95
+ if (frame.cancelled === true) return finish({ value: void 0 });
96
+ if (request.kind === "confirm") {
97
+ if (typeof frame.confirmed === "boolean") finish({ value: frame.confirmed });
98
+ } else if (typeof frame.value === "string") {
99
+ const selected = request.options?.find((option) => option.label === frame.value);
100
+ finish({ value: selected?.value ?? frame.value });
101
+ }
102
+ },
103
+ close: () => finish({ error: /* @__PURE__ */ new Error("Headless client is closed") })
104
+ });
105
+ signal?.addEventListener("abort", abort, { once: true });
106
+ advance();
107
+ });
108
+ }
109
+ },
110
+ receive(frame) {
111
+ if (frame.type !== "extension_ui_response") return false;
112
+ if (typeof frame.id === "string") pending.get(frame.id)?.respond(frame);
113
+ return true;
114
+ },
115
+ dispose() {
116
+ if (disposed) return;
117
+ disposed = true;
118
+ for (const request of pending.values()) request.close();
119
+ }
120
+ };
121
+ }
122
+ //#endregion
123
+ exports.createHeadlessClient = createHeadlessClient;
124
+
125
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["createDoomNotificationEntryData","DOOM_NOTIFICATION_ENTRY_TYPE","randomUUID"],"sources":["../../../../src/services/headlessClient/index.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport { createDoomNotificationEntryData, DOOM_NOTIFICATION_ENTRY_TYPE } from '../../exports/notification';\nimport type {\n HeadlessClientBridge,\n HeadlessClientOptions,\n PendingClientRequest,\n} from '../../types/server/headlessClient';\n\n/** Explicit client interactions over the existing browser dialog protocol. */\nexport function createHeadlessClient(options: HeadlessClientOptions): HeadlessClientBridge {\n const pending = new Map<string, PendingClientRequest>();\n let disposed = false;\n const advance = (): void => pending.values().next().value?.start();\n\n return {\n client: {\n async notify(request) {\n if (disposed) throw new Error('Headless client is closed');\n const data = createDoomNotificationEntryData(request);\n if (!data) throw new Error('Invalid notification request');\n try {\n await options.appendCustomEntry(DOOM_NOTIFICATION_ENTRY_TYPE, data);\n } catch (error) {\n // Callers fire notify without awaiting, often to report a journal failure. A rejection here\n // would crash the session server, so a refused append still reaches the browser live.\n options.emitFrame({\n type: 'error',\n code: 'notification_undelivered',\n error: `${data.body} (not saved to history: ${error instanceof Error ? error.message : String(error)})`,\n });\n }\n },\n setStatus(source, text) {\n if (disposed) throw new Error('Headless client is closed');\n options.emitFrame({ type: 'extension_ui_request', method: 'setStatus', statusKey: source, statusText: text });\n },\n appendComposerText(text) {\n if (disposed) throw new Error('Headless client is closed');\n options.emitFrame({ type: 'extension_ui_request', method: 'append_composer_text', id: randomUUID(), text });\n },\n request(request, signal) {\n if (disposed) return Promise.reject(new Error('Headless client is closed'));\n if (signal?.aborted) return Promise.resolve(undefined);\n if (!['confirm', 'select', 'input'].includes(request.kind)) {\n return Promise.reject(new Error('Unsupported headless client request'));\n }\n const labels = request.options?.map((option) => option.label);\n if (labels && new Set(labels).size !== labels.length) {\n return Promise.reject(new Error('Select option labels must be unique'));\n }\n const id = `headless-ui:${randomUUID()}`;\n return new Promise((resolve, reject) => {\n let started = false;\n const finish = (outcome: { value: unknown } | { error: unknown }): void => {\n if (!pending.delete(id)) return;\n signal?.removeEventListener('abort', abort);\n try {\n if (started) options.emitFrame({ type: 'extension_ui_answered', id });\n if ('error' in outcome) reject(outcome.error);\n else resolve(outcome.value);\n } catch (error) {\n reject(error);\n } finally {\n advance();\n }\n };\n const abort = (): void => finish({ value: undefined });\n pending.set(id, {\n start() {\n if (started || disposed) return;\n started = true;\n try {\n options.emitFrame({\n type: 'extension_ui_request',\n id,\n method: request.kind === 'input' && request.multiline ? 'editor' : request.kind,\n title: request.title,\n message: request.message,\n options: labels,\n placeholder: request.message,\n prefill: request.initialValue,\n });\n } catch (error) {\n finish({ error });\n }\n },\n respond(frame) {\n if (!started) return;\n if (frame.cancelled === true) return finish({ value: undefined });\n if (request.kind === 'confirm') {\n if (typeof frame.confirmed === 'boolean') finish({ value: frame.confirmed });\n } else if (typeof frame.value === 'string') {\n // Rich questionnaire clients return an encoded whole-answer envelope here.\n const selected = request.options?.find((option) => option.label === frame.value);\n finish({ value: selected?.value ?? frame.value });\n }\n },\n close: () => finish({ error: new Error('Headless client is closed') }),\n });\n signal?.addEventListener('abort', abort, { once: true });\n advance();\n });\n },\n },\n receive(frame) {\n if (frame.type !== 'extension_ui_response') return false;\n if (typeof frame.id === 'string') pending.get(frame.id)?.respond(frame);\n return true;\n },\n dispose() {\n if (disposed) return;\n disposed = true;\n for (const request of pending.values()) request.close();\n },\n };\n}\n"],"mappings":"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"}