@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,141 @@
1
+ const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
2
+ const require_remote = require("../constants/remote.cjs");
3
+ const require_index = require("../services/loopbackAddress/index.cjs");
4
+ let node_http = require("node:http");
5
+ node_http = require_runtime.__toESM(node_http, 1);
6
+ let node_stream = require("node:stream");
7
+ //#region src/server/devProxyForward.ts
8
+ /**
9
+ * One HTTP request forwarded to a local dev server, the way nginx would.
10
+ *
11
+ * Three rewrites are not optional, and each one is a bug report waiting to
12
+ * happen if it is skipped:
13
+ *
14
+ * - `Host` becomes the upstream's own address. Vite's `server.allowedHosts`
15
+ * and Next's dev-origin check refuse a request whose Host they do not
16
+ * recognize, so forwarding the cockpit's public hostname makes the dev
17
+ * server answer with a block page rather than the app.
18
+ * - A root-relative `Location` gains the prefix, or the first redirect walks
19
+ * the browser out of the proxy and into the cockpit.
20
+ * - `Set-Cookie` with `Path=/` is narrowed to the prefix, or the dev app's
21
+ * session cookie is sent on every cockpit request for the rest of the day.
22
+ *
23
+ * The cockpit's own cookies are removed on the way out. nginx would forward
24
+ * them, but `__Host-doompi_device` is a bearer credential for the cockpit and
25
+ * the dev server has no use for it. Handing it to an unaudited dev dependency,
26
+ * or into its request log, is a leak with no upside.
27
+ */
28
+ /** Headers that describe one hop and must not be copied onto the next. */
29
+ const HOP_BY_HOP = /* @__PURE__ */ new Set([
30
+ "connection",
31
+ "keep-alive",
32
+ "transfer-encoding",
33
+ "upgrade"
34
+ ]);
35
+ /** Set from the target rather than copied, so the browser's value never reaches the upstream. */
36
+ const REPLACED = /* @__PURE__ */ new Set(["host"]);
37
+ /** Cookies belonging to the cockpit rather than to the proxied application. */
38
+ const COCKPIT_COOKIE_MARKER = "doompi";
39
+ const BAD_GATEWAY = 502;
40
+ const NO_BODY_STATUSES = /* @__PURE__ */ new Set([204, 304]);
41
+ /** An IPv6 literal needs brackets before it can be a Host header value. */
42
+ function hostHeader(host, port) {
43
+ return host.includes(":") ? `[${host}]:${String(port)}` : `${host}:${String(port)}`;
44
+ }
45
+ /** Drops the cockpit's cookies and keeps the application's own. */
46
+ function filterCookies(raw) {
47
+ const kept = raw.split(";").map((pair) => pair.trim()).filter((pair) => pair !== "" && !pair.slice(0, pair.indexOf("=")).toLowerCase().includes(COCKPIT_COOKIE_MARKER));
48
+ return kept.length === 0 ? void 0 : kept.join("; ");
49
+ }
50
+ function outgoingHeaders(input, host) {
51
+ const out = {};
52
+ input.headers.forEach((value, key) => {
53
+ const normalized = key.toLowerCase();
54
+ if (HOP_BY_HOP.has(normalized) || REPLACED.has(normalized)) return;
55
+ if (normalized === "cookie") {
56
+ const kept = filterCookies(value);
57
+ if (kept !== void 0) out.cookie = kept;
58
+ return;
59
+ }
60
+ out[key] = value;
61
+ });
62
+ out.host = hostHeader(host, input.port);
63
+ out["x-forwarded-proto"] = input.forwardedProto;
64
+ if (input.forwardedHost !== void 0) out["x-forwarded-host"] = input.forwardedHost;
65
+ out["x-forwarded-prefix"] = `${require_remote.DEV_PROXY_PREFIX}${input.name}`;
66
+ return out;
67
+ }
68
+ /** Prefixes a root-relative redirect so it stays inside the proxied target. */
69
+ function rewriteLocation(value, name) {
70
+ const mount = `${require_remote.DEV_PROXY_PREFIX}${name}`;
71
+ if (!value.startsWith("/") || value.startsWith("//") || value.startsWith(`${mount}/`)) return value;
72
+ return `${mount}${value}`;
73
+ }
74
+ /**
75
+ * Narrows a cookie's Path to the proxied mount.
76
+ *
77
+ * A dev app setting `Path=/` means it on its own origin, where it is the only
78
+ * tenant. Here it is not, so the attribute is rewritten rather than honoured.
79
+ * A cookie with no Path at all already defaults to the request's directory,
80
+ * which is inside the mount, so it is left alone.
81
+ */
82
+ function rewriteSetCookie(value, name) {
83
+ const mount = `${require_remote.DEV_PROXY_PREFIX}${name}/`;
84
+ return value.replaceAll(/;\s*path=([^;]*)/giu, (_match, current) => {
85
+ const trimmed = current.trim();
86
+ if (trimmed.startsWith(mount)) return `; Path=${trimmed}`;
87
+ const suffix = trimmed === "/" || trimmed === "" ? "" : trimmed.replace(/^\//u, "");
88
+ return `; Path=${mount}${suffix}`;
89
+ });
90
+ }
91
+ function responseHeaders(incoming, name) {
92
+ const headers = new Headers();
93
+ for (const [key, value] of Object.entries(incoming.headers)) {
94
+ const normalized = key.toLowerCase();
95
+ if (value === void 0 || HOP_BY_HOP.has(normalized)) continue;
96
+ if (normalized === "set-cookie") {
97
+ for (const cookie of Array.isArray(value) ? value : [value]) headers.append("set-cookie", rewriteSetCookie(cookie, name));
98
+ continue;
99
+ }
100
+ const single = Array.isArray(value) ? value.join(", ") : value;
101
+ headers.set(key, normalized === "location" ? rewriteLocation(single, name) : single);
102
+ }
103
+ return headers;
104
+ }
105
+ /**
106
+ * Forwards one request and returns the upstream's answer.
107
+ *
108
+ * Both bodies stream. A dev server sends multi-megabyte source maps and
109
+ * receives file uploads, and buffering either would hold the whole thing in
110
+ * memory for no benefit.
111
+ */
112
+ async function forwardToDevServer(input) {
113
+ const host = await require_index.loopbackFor(input.port);
114
+ return new Promise((resolve, reject) => {
115
+ const request = node_http.default.request({
116
+ host,
117
+ port: input.port,
118
+ path: input.upstreamPath,
119
+ method: input.method,
120
+ headers: outgoingHeaders(input, host),
121
+ signal: input.signal
122
+ }, (incoming) => {
123
+ const status = incoming.statusCode ?? BAD_GATEWAY;
124
+ const body = NO_BODY_STATUSES.has(status) ? null : node_stream.Readable.toWeb(incoming);
125
+ resolve(new Response(body, {
126
+ status,
127
+ headers: responseHeaders(incoming, input.name)
128
+ }));
129
+ });
130
+ request.once("error", reject);
131
+ if (input.body === null) {
132
+ request.end();
133
+ return;
134
+ }
135
+ node_stream.Readable.fromWeb(input.body).on("error", reject).pipe(request);
136
+ });
137
+ }
138
+ //#endregion
139
+ exports.forwardToDevServer = forwardToDevServer;
140
+
141
+ //# sourceMappingURL=devProxyForward.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devProxyForward.cjs","names":["DEV_PROXY_PREFIX","loopbackFor","http","Readable"],"sources":["../../../src/server/devProxyForward.ts"],"sourcesContent":["import http from 'node:http';\nimport { Readable } from 'node:stream';\n\nimport { DEV_PROXY_PREFIX } from '../constants/remote';\nimport { loopbackFor, type LoopbackAddress } from '../services/loopbackAddress';\n\n/**\n * One HTTP request forwarded to a local dev server, the way nginx would.\n *\n * Three rewrites are not optional, and each one is a bug report waiting to\n * happen if it is skipped:\n *\n * - `Host` becomes the upstream's own address. Vite's `server.allowedHosts`\n * and Next's dev-origin check refuse a request whose Host they do not\n * recognize, so forwarding the cockpit's public hostname makes the dev\n * server answer with a block page rather than the app.\n * - A root-relative `Location` gains the prefix, or the first redirect walks\n * the browser out of the proxy and into the cockpit.\n * - `Set-Cookie` with `Path=/` is narrowed to the prefix, or the dev app's\n * session cookie is sent on every cockpit request for the rest of the day.\n *\n * The cockpit's own cookies are removed on the way out. nginx would forward\n * them, but `__Host-doompi_device` is a bearer credential for the cockpit and\n * the dev server has no use for it. Handing it to an unaudited dev dependency,\n * or into its request log, is a leak with no upside.\n */\n\n/** Headers that describe one hop and must not be copied onto the next. */\nconst HOP_BY_HOP = new Set(['connection', 'keep-alive', 'transfer-encoding', 'upgrade']);\n/** Set from the target rather than copied, so the browser's value never reaches the upstream. */\nconst REPLACED = new Set(['host']);\n/** Cookies belonging to the cockpit rather than to the proxied application. */\nconst COCKPIT_COOKIE_MARKER = 'doompi';\nconst BAD_GATEWAY = 502;\nconst NO_BODY_STATUSES = new Set([204, 304]);\n\nexport interface ForwardInput {\n /** The registered target's name, which is also its path segment. */\n name: string;\n port: number;\n /** Path and query exactly as the browser sent them, prefix included. */\n upstreamPath: string;\n method: string;\n headers: Headers;\n body: ReadableStream<Uint8Array> | null;\n /** The scheme the browser used, which is https whenever a tunnel is in front. */\n forwardedProto: string;\n /** The Host the browser addressed, for an app that builds absolute URLs. */\n forwardedHost: string | undefined;\n signal?: AbortSignal;\n}\n\n/** An IPv6 literal needs brackets before it can be a Host header value. */\nfunction hostHeader(host: LoopbackAddress, port: number): string {\n return host.includes(':') ? `[${host}]:${String(port)}` : `${host}:${String(port)}`;\n}\n\n/** Drops the cockpit's cookies and keeps the application's own. */\nfunction filterCookies(raw: string): string | undefined {\n const kept = raw\n .split(';')\n .map((pair) => pair.trim())\n .filter((pair) => pair !== '' && !pair.slice(0, pair.indexOf('=')).toLowerCase().includes(COCKPIT_COOKIE_MARKER));\n return kept.length === 0 ? undefined : kept.join('; ');\n}\n\nfunction outgoingHeaders(input: ForwardInput, host: LoopbackAddress): Record<string, string> {\n const out: Record<string, string> = {};\n input.headers.forEach((value, key) => {\n const normalized = key.toLowerCase();\n if (HOP_BY_HOP.has(normalized) || REPLACED.has(normalized)) return;\n if (normalized === 'cookie') {\n const kept = filterCookies(value);\n if (kept !== undefined) out.cookie = kept;\n return;\n }\n out[key] = value;\n });\n out.host = hostHeader(host, input.port);\n out['x-forwarded-proto'] = input.forwardedProto;\n if (input.forwardedHost !== undefined) out['x-forwarded-host'] = input.forwardedHost;\n // Read by frameworks that can self-configure their base path. Vite and Next\n // ignore it and need their own `base`/`basePath`, which is documented.\n out['x-forwarded-prefix'] = `${DEV_PROXY_PREFIX}${input.name}`;\n return out;\n}\n\n/** Prefixes a root-relative redirect so it stays inside the proxied target. */\nfunction rewriteLocation(value: string, name: string): string {\n const mount = `${DEV_PROXY_PREFIX}${name}`;\n if (!value.startsWith('/') || value.startsWith('//') || value.startsWith(`${mount}/`)) return value;\n return `${mount}${value}`;\n}\n\n/**\n * Narrows a cookie's Path to the proxied mount.\n *\n * A dev app setting `Path=/` means it on its own origin, where it is the only\n * tenant. Here it is not, so the attribute is rewritten rather than honoured.\n * A cookie with no Path at all already defaults to the request's directory,\n * which is inside the mount, so it is left alone.\n */\nfunction rewriteSetCookie(value: string, name: string): string {\n const mount = `${DEV_PROXY_PREFIX}${name}/`;\n return value.replaceAll(/;\\s*path=([^;]*)/giu, (_match, current: string) => {\n const trimmed = current.trim();\n if (trimmed.startsWith(mount)) return `; Path=${trimmed}`;\n const suffix = trimmed === '/' || trimmed === '' ? '' : trimmed.replace(/^\\//u, '');\n return `; Path=${mount}${suffix}`;\n });\n}\n\nfunction responseHeaders(incoming: http.IncomingMessage, name: string): Headers {\n const headers = new Headers();\n for (const [key, value] of Object.entries(incoming.headers)) {\n const normalized = key.toLowerCase();\n if (value === undefined || HOP_BY_HOP.has(normalized)) continue;\n if (normalized === 'set-cookie') {\n // The only header that legitimately repeats, so it is appended rather\n // than set; joining several cookies into one value discards all but one.\n for (const cookie of Array.isArray(value) ? value : [value]) {\n headers.append('set-cookie', rewriteSetCookie(cookie, name));\n }\n continue;\n }\n const single = Array.isArray(value) ? value.join(', ') : value;\n headers.set(key, normalized === 'location' ? rewriteLocation(single, name) : single);\n }\n return headers;\n}\n\n/**\n * Forwards one request and returns the upstream's answer.\n *\n * Both bodies stream. A dev server sends multi-megabyte source maps and\n * receives file uploads, and buffering either would hold the whole thing in\n * memory for no benefit.\n */\nexport async function forwardToDevServer(input: ForwardInput): Promise<Response> {\n const host = await loopbackFor(input.port);\n return new Promise<Response>((resolve, reject) => {\n const request = http.request(\n {\n host,\n port: input.port,\n path: input.upstreamPath,\n method: input.method,\n headers: outgoingHeaders(input, host),\n signal: input.signal,\n },\n (incoming) => {\n const status = incoming.statusCode ?? BAD_GATEWAY;\n // 204 and 304 carry no body, and constructing one with a stream throws.\n const body = NO_BODY_STATUSES.has(status) ? null : (Readable.toWeb(incoming) as ReadableStream);\n resolve(new Response(body, { status, headers: responseHeaders(incoming, input.name) }));\n },\n );\n request.once('error', reject);\n if (input.body === null) {\n request.end();\n return;\n }\n Readable.fromWeb(input.body as Parameters<typeof Readable.fromWeb>[0])\n .on('error', reject)\n .pipe(request);\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ import { DEV_PROXY_PREFIX } from "../constants/remote.mjs";
2
+ import { loopbackFor } from "../services/loopbackAddress/index.mjs";
3
+ import http from "node:http";
4
+ import { Readable } from "node:stream";
5
+ //#region src/server/devProxyForward.ts
6
+ /**
7
+ * One HTTP request forwarded to a local dev server, the way nginx would.
8
+ *
9
+ * Three rewrites are not optional, and each one is a bug report waiting to
10
+ * happen if it is skipped:
11
+ *
12
+ * - `Host` becomes the upstream's own address. Vite's `server.allowedHosts`
13
+ * and Next's dev-origin check refuse a request whose Host they do not
14
+ * recognize, so forwarding the cockpit's public hostname makes the dev
15
+ * server answer with a block page rather than the app.
16
+ * - A root-relative `Location` gains the prefix, or the first redirect walks
17
+ * the browser out of the proxy and into the cockpit.
18
+ * - `Set-Cookie` with `Path=/` is narrowed to the prefix, or the dev app's
19
+ * session cookie is sent on every cockpit request for the rest of the day.
20
+ *
21
+ * The cockpit's own cookies are removed on the way out. nginx would forward
22
+ * them, but `__Host-doompi_device` is a bearer credential for the cockpit and
23
+ * the dev server has no use for it. Handing it to an unaudited dev dependency,
24
+ * or into its request log, is a leak with no upside.
25
+ */
26
+ /** Headers that describe one hop and must not be copied onto the next. */
27
+ const HOP_BY_HOP = /* @__PURE__ */ new Set([
28
+ "connection",
29
+ "keep-alive",
30
+ "transfer-encoding",
31
+ "upgrade"
32
+ ]);
33
+ /** Set from the target rather than copied, so the browser's value never reaches the upstream. */
34
+ const REPLACED = /* @__PURE__ */ new Set(["host"]);
35
+ /** Cookies belonging to the cockpit rather than to the proxied application. */
36
+ const COCKPIT_COOKIE_MARKER = "doompi";
37
+ const BAD_GATEWAY = 502;
38
+ const NO_BODY_STATUSES = /* @__PURE__ */ new Set([204, 304]);
39
+ /** An IPv6 literal needs brackets before it can be a Host header value. */
40
+ function hostHeader(host, port) {
41
+ return host.includes(":") ? `[${host}]:${String(port)}` : `${host}:${String(port)}`;
42
+ }
43
+ /** Drops the cockpit's cookies and keeps the application's own. */
44
+ function filterCookies(raw) {
45
+ const kept = raw.split(";").map((pair) => pair.trim()).filter((pair) => pair !== "" && !pair.slice(0, pair.indexOf("=")).toLowerCase().includes(COCKPIT_COOKIE_MARKER));
46
+ return kept.length === 0 ? void 0 : kept.join("; ");
47
+ }
48
+ function outgoingHeaders(input, host) {
49
+ const out = {};
50
+ input.headers.forEach((value, key) => {
51
+ const normalized = key.toLowerCase();
52
+ if (HOP_BY_HOP.has(normalized) || REPLACED.has(normalized)) return;
53
+ if (normalized === "cookie") {
54
+ const kept = filterCookies(value);
55
+ if (kept !== void 0) out.cookie = kept;
56
+ return;
57
+ }
58
+ out[key] = value;
59
+ });
60
+ out.host = hostHeader(host, input.port);
61
+ out["x-forwarded-proto"] = input.forwardedProto;
62
+ if (input.forwardedHost !== void 0) out["x-forwarded-host"] = input.forwardedHost;
63
+ out["x-forwarded-prefix"] = `${DEV_PROXY_PREFIX}${input.name}`;
64
+ return out;
65
+ }
66
+ /** Prefixes a root-relative redirect so it stays inside the proxied target. */
67
+ function rewriteLocation(value, name) {
68
+ const mount = `${DEV_PROXY_PREFIX}${name}`;
69
+ if (!value.startsWith("/") || value.startsWith("//") || value.startsWith(`${mount}/`)) return value;
70
+ return `${mount}${value}`;
71
+ }
72
+ /**
73
+ * Narrows a cookie's Path to the proxied mount.
74
+ *
75
+ * A dev app setting `Path=/` means it on its own origin, where it is the only
76
+ * tenant. Here it is not, so the attribute is rewritten rather than honoured.
77
+ * A cookie with no Path at all already defaults to the request's directory,
78
+ * which is inside the mount, so it is left alone.
79
+ */
80
+ function rewriteSetCookie(value, name) {
81
+ const mount = `${DEV_PROXY_PREFIX}${name}/`;
82
+ return value.replaceAll(/;\s*path=([^;]*)/giu, (_match, current) => {
83
+ const trimmed = current.trim();
84
+ if (trimmed.startsWith(mount)) return `; Path=${trimmed}`;
85
+ const suffix = trimmed === "/" || trimmed === "" ? "" : trimmed.replace(/^\//u, "");
86
+ return `; Path=${mount}${suffix}`;
87
+ });
88
+ }
89
+ function responseHeaders(incoming, name) {
90
+ const headers = new Headers();
91
+ for (const [key, value] of Object.entries(incoming.headers)) {
92
+ const normalized = key.toLowerCase();
93
+ if (value === void 0 || HOP_BY_HOP.has(normalized)) continue;
94
+ if (normalized === "set-cookie") {
95
+ for (const cookie of Array.isArray(value) ? value : [value]) headers.append("set-cookie", rewriteSetCookie(cookie, name));
96
+ continue;
97
+ }
98
+ const single = Array.isArray(value) ? value.join(", ") : value;
99
+ headers.set(key, normalized === "location" ? rewriteLocation(single, name) : single);
100
+ }
101
+ return headers;
102
+ }
103
+ /**
104
+ * Forwards one request and returns the upstream's answer.
105
+ *
106
+ * Both bodies stream. A dev server sends multi-megabyte source maps and
107
+ * receives file uploads, and buffering either would hold the whole thing in
108
+ * memory for no benefit.
109
+ */
110
+ async function forwardToDevServer(input) {
111
+ const host = await loopbackFor(input.port);
112
+ return new Promise((resolve, reject) => {
113
+ const request = http.request({
114
+ host,
115
+ port: input.port,
116
+ path: input.upstreamPath,
117
+ method: input.method,
118
+ headers: outgoingHeaders(input, host),
119
+ signal: input.signal
120
+ }, (incoming) => {
121
+ const status = incoming.statusCode ?? BAD_GATEWAY;
122
+ const body = NO_BODY_STATUSES.has(status) ? null : Readable.toWeb(incoming);
123
+ resolve(new Response(body, {
124
+ status,
125
+ headers: responseHeaders(incoming, input.name)
126
+ }));
127
+ });
128
+ request.once("error", reject);
129
+ if (input.body === null) {
130
+ request.end();
131
+ return;
132
+ }
133
+ Readable.fromWeb(input.body).on("error", reject).pipe(request);
134
+ });
135
+ }
136
+ //#endregion
137
+ export { forwardToDevServer };
138
+
139
+ //# sourceMappingURL=devProxyForward.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devProxyForward.mjs","names":[],"sources":["../../../src/server/devProxyForward.ts"],"sourcesContent":["import http from 'node:http';\nimport { Readable } from 'node:stream';\n\nimport { DEV_PROXY_PREFIX } from '../constants/remote';\nimport { loopbackFor, type LoopbackAddress } from '../services/loopbackAddress';\n\n/**\n * One HTTP request forwarded to a local dev server, the way nginx would.\n *\n * Three rewrites are not optional, and each one is a bug report waiting to\n * happen if it is skipped:\n *\n * - `Host` becomes the upstream's own address. Vite's `server.allowedHosts`\n * and Next's dev-origin check refuse a request whose Host they do not\n * recognize, so forwarding the cockpit's public hostname makes the dev\n * server answer with a block page rather than the app.\n * - A root-relative `Location` gains the prefix, or the first redirect walks\n * the browser out of the proxy and into the cockpit.\n * - `Set-Cookie` with `Path=/` is narrowed to the prefix, or the dev app's\n * session cookie is sent on every cockpit request for the rest of the day.\n *\n * The cockpit's own cookies are removed on the way out. nginx would forward\n * them, but `__Host-doompi_device` is a bearer credential for the cockpit and\n * the dev server has no use for it. Handing it to an unaudited dev dependency,\n * or into its request log, is a leak with no upside.\n */\n\n/** Headers that describe one hop and must not be copied onto the next. */\nconst HOP_BY_HOP = new Set(['connection', 'keep-alive', 'transfer-encoding', 'upgrade']);\n/** Set from the target rather than copied, so the browser's value never reaches the upstream. */\nconst REPLACED = new Set(['host']);\n/** Cookies belonging to the cockpit rather than to the proxied application. */\nconst COCKPIT_COOKIE_MARKER = 'doompi';\nconst BAD_GATEWAY = 502;\nconst NO_BODY_STATUSES = new Set([204, 304]);\n\nexport interface ForwardInput {\n /** The registered target's name, which is also its path segment. */\n name: string;\n port: number;\n /** Path and query exactly as the browser sent them, prefix included. */\n upstreamPath: string;\n method: string;\n headers: Headers;\n body: ReadableStream<Uint8Array> | null;\n /** The scheme the browser used, which is https whenever a tunnel is in front. */\n forwardedProto: string;\n /** The Host the browser addressed, for an app that builds absolute URLs. */\n forwardedHost: string | undefined;\n signal?: AbortSignal;\n}\n\n/** An IPv6 literal needs brackets before it can be a Host header value. */\nfunction hostHeader(host: LoopbackAddress, port: number): string {\n return host.includes(':') ? `[${host}]:${String(port)}` : `${host}:${String(port)}`;\n}\n\n/** Drops the cockpit's cookies and keeps the application's own. */\nfunction filterCookies(raw: string): string | undefined {\n const kept = raw\n .split(';')\n .map((pair) => pair.trim())\n .filter((pair) => pair !== '' && !pair.slice(0, pair.indexOf('=')).toLowerCase().includes(COCKPIT_COOKIE_MARKER));\n return kept.length === 0 ? undefined : kept.join('; ');\n}\n\nfunction outgoingHeaders(input: ForwardInput, host: LoopbackAddress): Record<string, string> {\n const out: Record<string, string> = {};\n input.headers.forEach((value, key) => {\n const normalized = key.toLowerCase();\n if (HOP_BY_HOP.has(normalized) || REPLACED.has(normalized)) return;\n if (normalized === 'cookie') {\n const kept = filterCookies(value);\n if (kept !== undefined) out.cookie = kept;\n return;\n }\n out[key] = value;\n });\n out.host = hostHeader(host, input.port);\n out['x-forwarded-proto'] = input.forwardedProto;\n if (input.forwardedHost !== undefined) out['x-forwarded-host'] = input.forwardedHost;\n // Read by frameworks that can self-configure their base path. Vite and Next\n // ignore it and need their own `base`/`basePath`, which is documented.\n out['x-forwarded-prefix'] = `${DEV_PROXY_PREFIX}${input.name}`;\n return out;\n}\n\n/** Prefixes a root-relative redirect so it stays inside the proxied target. */\nfunction rewriteLocation(value: string, name: string): string {\n const mount = `${DEV_PROXY_PREFIX}${name}`;\n if (!value.startsWith('/') || value.startsWith('//') || value.startsWith(`${mount}/`)) return value;\n return `${mount}${value}`;\n}\n\n/**\n * Narrows a cookie's Path to the proxied mount.\n *\n * A dev app setting `Path=/` means it on its own origin, where it is the only\n * tenant. Here it is not, so the attribute is rewritten rather than honoured.\n * A cookie with no Path at all already defaults to the request's directory,\n * which is inside the mount, so it is left alone.\n */\nfunction rewriteSetCookie(value: string, name: string): string {\n const mount = `${DEV_PROXY_PREFIX}${name}/`;\n return value.replaceAll(/;\\s*path=([^;]*)/giu, (_match, current: string) => {\n const trimmed = current.trim();\n if (trimmed.startsWith(mount)) return `; Path=${trimmed}`;\n const suffix = trimmed === '/' || trimmed === '' ? '' : trimmed.replace(/^\\//u, '');\n return `; Path=${mount}${suffix}`;\n });\n}\n\nfunction responseHeaders(incoming: http.IncomingMessage, name: string): Headers {\n const headers = new Headers();\n for (const [key, value] of Object.entries(incoming.headers)) {\n const normalized = key.toLowerCase();\n if (value === undefined || HOP_BY_HOP.has(normalized)) continue;\n if (normalized === 'set-cookie') {\n // The only header that legitimately repeats, so it is appended rather\n // than set; joining several cookies into one value discards all but one.\n for (const cookie of Array.isArray(value) ? value : [value]) {\n headers.append('set-cookie', rewriteSetCookie(cookie, name));\n }\n continue;\n }\n const single = Array.isArray(value) ? value.join(', ') : value;\n headers.set(key, normalized === 'location' ? rewriteLocation(single, name) : single);\n }\n return headers;\n}\n\n/**\n * Forwards one request and returns the upstream's answer.\n *\n * Both bodies stream. A dev server sends multi-megabyte source maps and\n * receives file uploads, and buffering either would hold the whole thing in\n * memory for no benefit.\n */\nexport async function forwardToDevServer(input: ForwardInput): Promise<Response> {\n const host = await loopbackFor(input.port);\n return new Promise<Response>((resolve, reject) => {\n const request = http.request(\n {\n host,\n port: input.port,\n path: input.upstreamPath,\n method: input.method,\n headers: outgoingHeaders(input, host),\n signal: input.signal,\n },\n (incoming) => {\n const status = incoming.statusCode ?? BAD_GATEWAY;\n // 204 and 304 carry no body, and constructing one with a stream throws.\n const body = NO_BODY_STATUSES.has(status) ? null : (Readable.toWeb(incoming) as ReadableStream);\n resolve(new Response(body, { status, headers: responseHeaders(incoming, input.name) }));\n },\n );\n request.once('error', reject);\n if (input.body === null) {\n request.end();\n return;\n }\n Readable.fromWeb(input.body as Parameters<typeof Readable.fromWeb>[0])\n .on('error', reject)\n .pipe(request);\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ const require_remote = require("../constants/remote.cjs");
2
+ const require_index = require("../services/devProxyPolicy/index.cjs");
3
+ const require_devProxyForward = require("./devProxyForward.cjs");
4
+ //#region src/server/devProxyRoutes.ts
5
+ /**
6
+ * The dev proxy's control plane and its HTTP forwarding route.
7
+ *
8
+ * Registering a target is refused anywhere but the host, and that refusal is the entire consent
9
+ * model: putting a local port on the public internet is decided by someone sitting at the machine.
10
+ * A passkey gesture cannot carry it, because a quick tunnel's rotating hostname has no relying party.
11
+ * Using a registered target is then open to any paired device, which is what makes the feature
12
+ * usable away from the desk; a stolen phone reaches only the ports its owner chose to name.
13
+ */
14
+ const BAD_REQUEST = 400;
15
+ const FORBIDDEN = 403;
16
+ const NOT_FOUND = 404;
17
+ const CREATED = 201;
18
+ const NO_CONTENT = 204;
19
+ const MOVED_PERMANENTLY = 301;
20
+ const BAD_GATEWAY = 502;
21
+ const CONNECTION_REFUSED = "ECONNREFUSED";
22
+ /** The scheme the browser used, trusting the edge's header only for its own hop. */
23
+ function forwardedProto(context, listener) {
24
+ const declared = context.req.header("x-forwarded-proto");
25
+ if (declared === "https" || declared === "http") return declared;
26
+ return listener === "local" ? "http" : "https";
27
+ }
28
+ function describeUpstreamFailure(error, target) {
29
+ if (error?.code === CONNECTION_REFUSED) return `Nothing is answering on port ${String(target.port)}. Is "${target.name}" running?`;
30
+ return `The dev server for "${target.name}" did not answer: ${error instanceof Error ? error.message : String(error)}`;
31
+ }
32
+ function registerDevProxyRoutes(app, options) {
33
+ const { store } = options;
34
+ const isLocal = (context) => options.listenerOf(context) === "local";
35
+ app.get(require_remote.DEV_PROXY_TARGETS_ROUTE, (context) => context.json({
36
+ targets: store.targets(),
37
+ canRegister: isLocal(context)
38
+ }));
39
+ app.post(require_remote.DEV_PROXY_TARGETS_ROUTE, async (context) => {
40
+ if (!isLocal(context)) return context.json({ error: "A dev proxy target can only be added on the host, not through the tunnel." }, FORBIDDEN);
41
+ let body;
42
+ try {
43
+ body = await context.req.json();
44
+ } catch {
45
+ return context.json({ error: "Expected a JSON body with a name and a port." }, BAD_REQUEST);
46
+ }
47
+ const name = require_index.validateTargetName(body.name);
48
+ if (!name.ok) return context.json({ error: name.reason }, BAD_REQUEST);
49
+ const port = require_index.validateTargetPort(body.port, options.reservedPorts());
50
+ if (!port.ok) return context.json({ error: port.reason }, BAD_REQUEST);
51
+ const target = {
52
+ name: name.name,
53
+ port: port.port,
54
+ createdAt: Date.now()
55
+ };
56
+ store.save(target);
57
+ options.onNotice(`dev proxy target "${target.name}" now serves port ${String(target.port)}`);
58
+ return context.json({ target }, CREATED);
59
+ });
60
+ app.delete(`${require_remote.DEV_PROXY_TARGETS_ROUTE}/:name`, (context) => {
61
+ if (!isLocal(context)) return context.json({ error: "A dev proxy target can only be removed on the host." }, FORBIDDEN);
62
+ const name = require_index.validateTargetName(context.req.param("name"));
63
+ if (!name.ok) return context.json({ error: name.reason }, BAD_REQUEST);
64
+ if (!store.remove(name.name)) return context.json({ error: "No such dev proxy target." }, NOT_FOUND);
65
+ options.onNotice(`dev proxy target "${name.name}" removed`);
66
+ return context.body(null, NO_CONTENT);
67
+ });
68
+ app.all(`${require_remote.DEV_PROXY_PREFIX}*`, async (context) => {
69
+ const url = new URL(context.req.url);
70
+ const parsed = require_index.parseProxyPath(url.pathname);
71
+ if (parsed.kind === "reject") return context.text(parsed.reason, BAD_REQUEST);
72
+ if (parsed.kind === "redirect") return context.redirect(parsed.location, MOVED_PERMANENTLY);
73
+ const target = store.find(parsed.name);
74
+ if (target === void 0) return context.text(`No dev proxy target named "${parsed.name}".`, NOT_FOUND);
75
+ try {
76
+ return await require_devProxyForward.forwardToDevServer({
77
+ name: target.name,
78
+ port: target.port,
79
+ upstreamPath: `${parsed.upstreamPath}${url.search}`,
80
+ method: context.req.method,
81
+ headers: context.req.raw.headers,
82
+ body: context.req.raw.body,
83
+ forwardedProto: forwardedProto(context, options.listenerOf(context)),
84
+ forwardedHost: context.req.header("host"),
85
+ signal: context.req.raw.signal
86
+ });
87
+ } catch (error) {
88
+ const message = describeUpstreamFailure(error, target);
89
+ options.onNotice(message);
90
+ return context.text(message, BAD_GATEWAY);
91
+ }
92
+ });
93
+ }
94
+ //#endregion
95
+ exports.registerDevProxyRoutes = registerDevProxyRoutes;
96
+
97
+ //# sourceMappingURL=devProxyRoutes.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devProxyRoutes.cjs","names":["DEV_PROXY_TARGETS_ROUTE","validateTargetName","validateTargetPort","DEV_PROXY_PREFIX","parseProxyPath","forwardToDevServer"],"sources":["../../../src/server/devProxyRoutes.ts"],"sourcesContent":["import type { Context, Hono } from 'hono';\n\nimport { DEV_PROXY_PREFIX, DEV_PROXY_TARGETS_ROUTE } from '../constants/remote';\nimport { parseProxyPath, validateTargetName, validateTargetPort } from '../services/devProxyPolicy';\nimport type { DevProxyStore } from '../services/devProxyStore';\nimport type { GuardListener } from '../services/remoteGuardPolicy';\nimport type { DevProxyTarget } from '../types/remote';\nimport { forwardToDevServer } from './devProxyForward';\n\n/**\n * The dev proxy's control plane and its HTTP forwarding route.\n *\n * Registering a target is refused anywhere but the host, and that refusal is the entire consent\n * model: putting a local port on the public internet is decided by someone sitting at the machine.\n * A passkey gesture cannot carry it, because a quick tunnel's rotating hostname has no relying party.\n * Using a registered target is then open to any paired device, which is what makes the feature\n * usable away from the desk; a stolen phone reaches only the ports its owner chose to name.\n */\n\nconst BAD_REQUEST = 400;\nconst FORBIDDEN = 403;\nconst NOT_FOUND = 404;\nconst CREATED = 201;\nconst NO_CONTENT = 204;\nconst MOVED_PERMANENTLY = 301;\nconst BAD_GATEWAY = 502;\nconst CONNECTION_REFUSED = 'ECONNREFUSED';\n\nexport interface DevProxyRoutesOptions {\n store: DevProxyStore;\n listenerOf: (context: Context) => GuardListener;\n /** Ports the cockpit itself holds, read per call so a toggled tunnel is never stale. */\n reservedPorts: () => readonly (number | undefined)[];\n onNotice: (message: string) => void;\n}\n\ninterface TargetRequestBody {\n name?: unknown;\n port?: unknown;\n}\n\n/** The scheme the browser used, trusting the edge's header only for its own hop. */\nfunction forwardedProto(context: Context, listener: GuardListener): string {\n const declared = context.req.header('x-forwarded-proto');\n if (declared === 'https' || declared === 'http') return declared;\n return listener === 'local' ? 'http' : 'https';\n}\n\nfunction describeUpstreamFailure(error: unknown, target: DevProxyTarget): string {\n const code = (error as { code?: string } | undefined)?.code;\n if (code === CONNECTION_REFUSED) {\n return `Nothing is answering on port ${String(target.port)}. Is \"${target.name}\" running?`;\n }\n return `The dev server for \"${target.name}\" did not answer: ${error instanceof Error ? error.message : String(error)}`;\n}\n\nexport function registerDevProxyRoutes(app: Hono, options: DevProxyRoutesOptions): void {\n const { store } = options;\n const isLocal = (context: Context): boolean => options.listenerOf(context) === 'local';\n\n app.get(DEV_PROXY_TARGETS_ROUTE, (context) =>\n context.json({ targets: store.targets(), canRegister: isLocal(context) }),\n );\n\n app.post(DEV_PROXY_TARGETS_ROUTE, async (context) => {\n if (!isLocal(context)) {\n return context.json(\n { error: 'A dev proxy target can only be added on the host, not through the tunnel.' },\n FORBIDDEN,\n );\n }\n let body: TargetRequestBody;\n try {\n body = (await context.req.json()) as TargetRequestBody;\n } catch {\n return context.json({ error: 'Expected a JSON body with a name and a port.' }, BAD_REQUEST);\n }\n const name = validateTargetName(body.name);\n if (!name.ok) return context.json({ error: name.reason }, BAD_REQUEST);\n const port = validateTargetPort(body.port, options.reservedPorts());\n if (!port.ok) return context.json({ error: port.reason }, BAD_REQUEST);\n\n const target: DevProxyTarget = { name: name.name, port: port.port, createdAt: Date.now() };\n store.save(target);\n options.onNotice(`dev proxy target \"${target.name}\" now serves port ${String(target.port)}`);\n return context.json({ target }, CREATED);\n });\n\n app.delete(`${DEV_PROXY_TARGETS_ROUTE}/:name`, (context) => {\n if (!isLocal(context)) {\n return context.json({ error: 'A dev proxy target can only be removed on the host.' }, FORBIDDEN);\n }\n const name = validateTargetName(context.req.param('name'));\n if (!name.ok) return context.json({ error: name.reason }, BAD_REQUEST);\n if (!store.remove(name.name)) return context.json({ error: 'No such dev proxy target.' }, NOT_FOUND);\n options.onNotice(`dev proxy target \"${name.name}\" removed`);\n return context.body(null, NO_CONTENT);\n });\n\n app.all(`${DEV_PROXY_PREFIX}*`, async (context) => {\n const url = new URL(context.req.url);\n const parsed = parseProxyPath(url.pathname);\n if (parsed.kind === 'reject') return context.text(parsed.reason, BAD_REQUEST);\n if (parsed.kind === 'redirect') return context.redirect(parsed.location, MOVED_PERMANENTLY);\n\n const target = store.find(parsed.name);\n if (target === undefined) return context.text(`No dev proxy target named \"${parsed.name}\".`, NOT_FOUND);\n\n try {\n return await forwardToDevServer({\n name: target.name,\n port: target.port,\n upstreamPath: `${parsed.upstreamPath}${url.search}`,\n method: context.req.method,\n headers: context.req.raw.headers,\n body: context.req.raw.body,\n forwardedProto: forwardedProto(context, options.listenerOf(context)),\n forwardedHost: context.req.header('host'),\n signal: context.req.raw.signal,\n });\n } catch (error) {\n const message = describeUpstreamFailure(error, target);\n options.onNotice(message);\n return context.text(message, BAD_GATEWAY);\n }\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import { DEV_PROXY_PREFIX, DEV_PROXY_TARGETS_ROUTE } from "../constants/remote.mjs";
2
+ import { parseProxyPath, validateTargetName, validateTargetPort } from "../services/devProxyPolicy/index.mjs";
3
+ import { forwardToDevServer } from "./devProxyForward.mjs";
4
+ //#region src/server/devProxyRoutes.ts
5
+ /**
6
+ * The dev proxy's control plane and its HTTP forwarding route.
7
+ *
8
+ * Registering a target is refused anywhere but the host, and that refusal is the entire consent
9
+ * model: putting a local port on the public internet is decided by someone sitting at the machine.
10
+ * A passkey gesture cannot carry it, because a quick tunnel's rotating hostname has no relying party.
11
+ * Using a registered target is then open to any paired device, which is what makes the feature
12
+ * usable away from the desk; a stolen phone reaches only the ports its owner chose to name.
13
+ */
14
+ const BAD_REQUEST = 400;
15
+ const FORBIDDEN = 403;
16
+ const NOT_FOUND = 404;
17
+ const CREATED = 201;
18
+ const NO_CONTENT = 204;
19
+ const MOVED_PERMANENTLY = 301;
20
+ const BAD_GATEWAY = 502;
21
+ const CONNECTION_REFUSED = "ECONNREFUSED";
22
+ /** The scheme the browser used, trusting the edge's header only for its own hop. */
23
+ function forwardedProto(context, listener) {
24
+ const declared = context.req.header("x-forwarded-proto");
25
+ if (declared === "https" || declared === "http") return declared;
26
+ return listener === "local" ? "http" : "https";
27
+ }
28
+ function describeUpstreamFailure(error, target) {
29
+ if (error?.code === CONNECTION_REFUSED) return `Nothing is answering on port ${String(target.port)}. Is "${target.name}" running?`;
30
+ return `The dev server for "${target.name}" did not answer: ${error instanceof Error ? error.message : String(error)}`;
31
+ }
32
+ function registerDevProxyRoutes(app, options) {
33
+ const { store } = options;
34
+ const isLocal = (context) => options.listenerOf(context) === "local";
35
+ app.get(DEV_PROXY_TARGETS_ROUTE, (context) => context.json({
36
+ targets: store.targets(),
37
+ canRegister: isLocal(context)
38
+ }));
39
+ app.post(DEV_PROXY_TARGETS_ROUTE, async (context) => {
40
+ if (!isLocal(context)) return context.json({ error: "A dev proxy target can only be added on the host, not through the tunnel." }, FORBIDDEN);
41
+ let body;
42
+ try {
43
+ body = await context.req.json();
44
+ } catch {
45
+ return context.json({ error: "Expected a JSON body with a name and a port." }, BAD_REQUEST);
46
+ }
47
+ const name = validateTargetName(body.name);
48
+ if (!name.ok) return context.json({ error: name.reason }, BAD_REQUEST);
49
+ const port = validateTargetPort(body.port, options.reservedPorts());
50
+ if (!port.ok) return context.json({ error: port.reason }, BAD_REQUEST);
51
+ const target = {
52
+ name: name.name,
53
+ port: port.port,
54
+ createdAt: Date.now()
55
+ };
56
+ store.save(target);
57
+ options.onNotice(`dev proxy target "${target.name}" now serves port ${String(target.port)}`);
58
+ return context.json({ target }, CREATED);
59
+ });
60
+ app.delete(`${DEV_PROXY_TARGETS_ROUTE}/:name`, (context) => {
61
+ if (!isLocal(context)) return context.json({ error: "A dev proxy target can only be removed on the host." }, FORBIDDEN);
62
+ const name = validateTargetName(context.req.param("name"));
63
+ if (!name.ok) return context.json({ error: name.reason }, BAD_REQUEST);
64
+ if (!store.remove(name.name)) return context.json({ error: "No such dev proxy target." }, NOT_FOUND);
65
+ options.onNotice(`dev proxy target "${name.name}" removed`);
66
+ return context.body(null, NO_CONTENT);
67
+ });
68
+ app.all(`${DEV_PROXY_PREFIX}*`, async (context) => {
69
+ const url = new URL(context.req.url);
70
+ const parsed = parseProxyPath(url.pathname);
71
+ if (parsed.kind === "reject") return context.text(parsed.reason, BAD_REQUEST);
72
+ if (parsed.kind === "redirect") return context.redirect(parsed.location, MOVED_PERMANENTLY);
73
+ const target = store.find(parsed.name);
74
+ if (target === void 0) return context.text(`No dev proxy target named "${parsed.name}".`, NOT_FOUND);
75
+ try {
76
+ return await forwardToDevServer({
77
+ name: target.name,
78
+ port: target.port,
79
+ upstreamPath: `${parsed.upstreamPath}${url.search}`,
80
+ method: context.req.method,
81
+ headers: context.req.raw.headers,
82
+ body: context.req.raw.body,
83
+ forwardedProto: forwardedProto(context, options.listenerOf(context)),
84
+ forwardedHost: context.req.header("host"),
85
+ signal: context.req.raw.signal
86
+ });
87
+ } catch (error) {
88
+ const message = describeUpstreamFailure(error, target);
89
+ options.onNotice(message);
90
+ return context.text(message, BAD_GATEWAY);
91
+ }
92
+ });
93
+ }
94
+ //#endregion
95
+ export { registerDevProxyRoutes };
96
+
97
+ //# sourceMappingURL=devProxyRoutes.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devProxyRoutes.mjs","names":[],"sources":["../../../src/server/devProxyRoutes.ts"],"sourcesContent":["import type { Context, Hono } from 'hono';\n\nimport { DEV_PROXY_PREFIX, DEV_PROXY_TARGETS_ROUTE } from '../constants/remote';\nimport { parseProxyPath, validateTargetName, validateTargetPort } from '../services/devProxyPolicy';\nimport type { DevProxyStore } from '../services/devProxyStore';\nimport type { GuardListener } from '../services/remoteGuardPolicy';\nimport type { DevProxyTarget } from '../types/remote';\nimport { forwardToDevServer } from './devProxyForward';\n\n/**\n * The dev proxy's control plane and its HTTP forwarding route.\n *\n * Registering a target is refused anywhere but the host, and that refusal is the entire consent\n * model: putting a local port on the public internet is decided by someone sitting at the machine.\n * A passkey gesture cannot carry it, because a quick tunnel's rotating hostname has no relying party.\n * Using a registered target is then open to any paired device, which is what makes the feature\n * usable away from the desk; a stolen phone reaches only the ports its owner chose to name.\n */\n\nconst BAD_REQUEST = 400;\nconst FORBIDDEN = 403;\nconst NOT_FOUND = 404;\nconst CREATED = 201;\nconst NO_CONTENT = 204;\nconst MOVED_PERMANENTLY = 301;\nconst BAD_GATEWAY = 502;\nconst CONNECTION_REFUSED = 'ECONNREFUSED';\n\nexport interface DevProxyRoutesOptions {\n store: DevProxyStore;\n listenerOf: (context: Context) => GuardListener;\n /** Ports the cockpit itself holds, read per call so a toggled tunnel is never stale. */\n reservedPorts: () => readonly (number | undefined)[];\n onNotice: (message: string) => void;\n}\n\ninterface TargetRequestBody {\n name?: unknown;\n port?: unknown;\n}\n\n/** The scheme the browser used, trusting the edge's header only for its own hop. */\nfunction forwardedProto(context: Context, listener: GuardListener): string {\n const declared = context.req.header('x-forwarded-proto');\n if (declared === 'https' || declared === 'http') return declared;\n return listener === 'local' ? 'http' : 'https';\n}\n\nfunction describeUpstreamFailure(error: unknown, target: DevProxyTarget): string {\n const code = (error as { code?: string } | undefined)?.code;\n if (code === CONNECTION_REFUSED) {\n return `Nothing is answering on port ${String(target.port)}. Is \"${target.name}\" running?`;\n }\n return `The dev server for \"${target.name}\" did not answer: ${error instanceof Error ? error.message : String(error)}`;\n}\n\nexport function registerDevProxyRoutes(app: Hono, options: DevProxyRoutesOptions): void {\n const { store } = options;\n const isLocal = (context: Context): boolean => options.listenerOf(context) === 'local';\n\n app.get(DEV_PROXY_TARGETS_ROUTE, (context) =>\n context.json({ targets: store.targets(), canRegister: isLocal(context) }),\n );\n\n app.post(DEV_PROXY_TARGETS_ROUTE, async (context) => {\n if (!isLocal(context)) {\n return context.json(\n { error: 'A dev proxy target can only be added on the host, not through the tunnel.' },\n FORBIDDEN,\n );\n }\n let body: TargetRequestBody;\n try {\n body = (await context.req.json()) as TargetRequestBody;\n } catch {\n return context.json({ error: 'Expected a JSON body with a name and a port.' }, BAD_REQUEST);\n }\n const name = validateTargetName(body.name);\n if (!name.ok) return context.json({ error: name.reason }, BAD_REQUEST);\n const port = validateTargetPort(body.port, options.reservedPorts());\n if (!port.ok) return context.json({ error: port.reason }, BAD_REQUEST);\n\n const target: DevProxyTarget = { name: name.name, port: port.port, createdAt: Date.now() };\n store.save(target);\n options.onNotice(`dev proxy target \"${target.name}\" now serves port ${String(target.port)}`);\n return context.json({ target }, CREATED);\n });\n\n app.delete(`${DEV_PROXY_TARGETS_ROUTE}/:name`, (context) => {\n if (!isLocal(context)) {\n return context.json({ error: 'A dev proxy target can only be removed on the host.' }, FORBIDDEN);\n }\n const name = validateTargetName(context.req.param('name'));\n if (!name.ok) return context.json({ error: name.reason }, BAD_REQUEST);\n if (!store.remove(name.name)) return context.json({ error: 'No such dev proxy target.' }, NOT_FOUND);\n options.onNotice(`dev proxy target \"${name.name}\" removed`);\n return context.body(null, NO_CONTENT);\n });\n\n app.all(`${DEV_PROXY_PREFIX}*`, async (context) => {\n const url = new URL(context.req.url);\n const parsed = parseProxyPath(url.pathname);\n if (parsed.kind === 'reject') return context.text(parsed.reason, BAD_REQUEST);\n if (parsed.kind === 'redirect') return context.redirect(parsed.location, MOVED_PERMANENTLY);\n\n const target = store.find(parsed.name);\n if (target === undefined) return context.text(`No dev proxy target named \"${parsed.name}\".`, NOT_FOUND);\n\n try {\n return await forwardToDevServer({\n name: target.name,\n port: target.port,\n upstreamPath: `${parsed.upstreamPath}${url.search}`,\n method: context.req.method,\n headers: context.req.raw.headers,\n body: context.req.raw.body,\n forwardedProto: forwardedProto(context, options.listenerOf(context)),\n forwardedHost: context.req.header('host'),\n signal: context.req.raw.signal,\n });\n } catch (error) {\n const message = describeUpstreamFailure(error, target);\n options.onNotice(message);\n return context.text(message, BAD_GATEWAY);\n }\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ const require_index = require("../services/loopbackAddress/index.cjs");
2
+ let ws = require("ws");
3
+ //#region src/server/devProxySocket.ts
4
+ /**
5
+ * A WebSocket carried between a paired device and a local dev server.
6
+ *
7
+ * This is what carries hot module reload. Vite negotiates the `vite-hmr` subprotocol, so the
8
+ * handshake's protocol list is forwarded rather than dropped; without it the dev client connects
9
+ * and then gives up. The tunnel listener has already authorized the handshake, so this only
10
+ * relays frames.
11
+ */
12
+ /** Sent when the upstream never came up, or died in a way with no code to relay. */
13
+ const INTERNAL_ERROR = 1011;
14
+ const NORMAL_CLOSURE = 1e3;
15
+ /** Reserved codes a peer may observe but no endpoint may transmit. */
16
+ const UNSENDABLE_CLOSE_CODES = /* @__PURE__ */ new Set([
17
+ 1005,
18
+ 1006,
19
+ 1015
20
+ ]);
21
+ const MAX_CLOSE_REASON = 120;
22
+ /** Frames held while the upstream connects; a dev client that speaks first must not lose them. */
23
+ const MAX_PENDING_BYTES = 1048576;
24
+ /** A code the upstream reported that this endpoint is actually allowed to send on. */
25
+ function sendableCode(code) {
26
+ return code === 0 || UNSENDABLE_CLOSE_CODES.has(code) ? NORMAL_CLOSURE : code;
27
+ }
28
+ function frameBytes(data) {
29
+ if (Array.isArray(data)) return Buffer.concat(data);
30
+ return Buffer.isBuffer(data) ? data : Buffer.from(new Uint8Array(data));
31
+ }
32
+ /** Relays one accepted browser socket to the dev server on the target's port until either side closes. */
33
+ function relayDevProxySocket(client, input) {
34
+ let upstream;
35
+ let pending = [];
36
+ let pendingBytes = 0;
37
+ let closed = false;
38
+ const closeBoth = (code, reason) => {
39
+ if (closed) return;
40
+ closed = true;
41
+ pending = [];
42
+ if (client.readyState === ws.WebSocket.OPEN) client.close(code, reason.slice(0, MAX_CLOSE_REASON));
43
+ upstream?.close();
44
+ };
45
+ client.on("message", (data, binary) => {
46
+ if (closed) return;
47
+ const bytes = frameBytes(data);
48
+ if (upstream?.readyState === ws.WebSocket.OPEN) {
49
+ upstream.send(binary ? bytes : bytes.toString("utf8"));
50
+ return;
51
+ }
52
+ pendingBytes += bytes.byteLength;
53
+ if (pendingBytes > MAX_PENDING_BYTES) closeBoth(INTERNAL_ERROR, "dev server socket did not open");
54
+ else pending.push({
55
+ data: bytes,
56
+ binary
57
+ });
58
+ });
59
+ client.on("close", () => closeBoth(NORMAL_CLOSURE, ""));
60
+ client.on("error", () => closeBoth(INTERNAL_ERROR, "browser socket failed"));
61
+ const protocols = input.protocols?.split(",").map((entry) => entry.trim()).filter((entry) => entry !== "");
62
+ require_index.loopbackFor(input.port).then((host) => {
63
+ if (closed) return;
64
+ const target = `ws://${host.includes(":") ? `[${host}]` : host}:${String(input.port)}${input.upstreamPath}`;
65
+ const socket = protocols === void 0 || protocols.length === 0 ? new ws.WebSocket(target) : new ws.WebSocket(target, protocols);
66
+ upstream = socket;
67
+ socket.on("open", () => {
68
+ for (const frame of pending) socket.send(frame.binary ? frame.data : frame.data.toString("utf8"));
69
+ pending = [];
70
+ pendingBytes = 0;
71
+ });
72
+ socket.on("message", (data, binary) => {
73
+ if (closed || client.readyState !== ws.WebSocket.OPEN) return;
74
+ const bytes = frameBytes(data);
75
+ client.send(binary ? bytes : bytes.toString("utf8"));
76
+ });
77
+ socket.on("close", (code, reason) => closeBoth(sendableCode(code), reason.toString()));
78
+ socket.on("error", (error) => {
79
+ input.onNotice?.(`dev proxy socket to port ${String(input.port)} failed: ${error.message}`);
80
+ closeBoth(INTERNAL_ERROR, "dev server socket failed");
81
+ });
82
+ });
83
+ }
84
+ //#endregion
85
+ exports.relayDevProxySocket = relayDevProxySocket;
86
+
87
+ //# sourceMappingURL=devProxySocket.cjs.map