@agimon-ai/po 0.0.0-alpha.0

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 (560) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +755 -0
  3. package/assets/banner.png +0 -0
  4. package/assets/banner.svg +25 -0
  5. package/assets/favicon.svg +15 -0
  6. package/assets/logo-light.png +0 -0
  7. package/assets/logo-light.svg +25 -0
  8. package/assets/logo.png +0 -0
  9. package/assets/logo.svg +25 -0
  10. package/assets/mascot.png +0 -0
  11. package/assets/mascot.svg +25 -0
  12. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  13. package/dist/antigravity.cjs +5 -0
  14. package/dist/antigravity.d.mts +2 -0
  15. package/dist/antigravity.mjs +2 -0
  16. package/dist/apiContracts.cjs +11 -0
  17. package/dist/apiContracts.cjs.map +1 -0
  18. package/dist/apiContracts.d.mts +52 -0
  19. package/dist/apiContracts.d.mts.map +1 -0
  20. package/dist/apiContracts.mjs +7 -0
  21. package/dist/apiContracts.mjs.map +1 -0
  22. package/dist/baseCommand.cjs +3 -0
  23. package/dist/baseCommand.d.mts +2 -0
  24. package/dist/baseCommand.mjs +2 -0
  25. package/dist/bin/cli.cjs +24 -0
  26. package/dist/bin/cli.cjs.map +1 -0
  27. package/dist/bin/cli.d.mts +1 -0
  28. package/dist/bin/cli.mjs +25 -0
  29. package/dist/bin/cli.mjs.map +1 -0
  30. package/dist/bin/doomRunner.cjs +33 -0
  31. package/dist/bin/doomRunner.cjs.map +1 -0
  32. package/dist/bin/doomRunner.d.mts +4 -0
  33. package/dist/bin/doomRunner.d.mts.map +1 -0
  34. package/dist/bin/doomRunner.mjs +32 -0
  35. package/dist/bin/doomRunner.mjs.map +1 -0
  36. package/dist/bin/serve.cjs +30 -0
  37. package/dist/bin/serve.cjs.map +1 -0
  38. package/dist/bin/serve.d.mts +1 -0
  39. package/dist/bin/serve.mjs +31 -0
  40. package/dist/bin/serve.mjs.map +1 -0
  41. package/dist/builders/cli/extensionAssembler/index.cjs +342 -0
  42. package/dist/builders/cli/extensionAssembler/index.cjs.map +1 -0
  43. package/dist/builders/cli/extensionAssembler/index.d.mts +85 -0
  44. package/dist/builders/cli/extensionAssembler/index.d.mts.map +1 -0
  45. package/dist/builders/cli/extensionAssembler/index.mjs +335 -0
  46. package/dist/builders/cli/extensionAssembler/index.mjs.map +1 -0
  47. package/dist/catalog/index.json +430 -0
  48. package/dist/cli.cjs +28 -0
  49. package/dist/cli.d.mts +11 -0
  50. package/dist/cli.mjs +11 -0
  51. package/dist/cliApp.cjs +6 -0
  52. package/dist/cliApp.d.mts +2 -0
  53. package/dist/cliApp.mjs +2 -0
  54. package/dist/codex.cjs +8 -0
  55. package/dist/codex.d.mts +2 -0
  56. package/dist/codex.mjs +2 -0
  57. package/dist/commands.cjs +18 -0
  58. package/dist/commands.d.mts +9 -0
  59. package/dist/commands.mjs +9 -0
  60. package/dist/compatibility.cjs +27 -0
  61. package/dist/compatibility.d.mts +6 -0
  62. package/dist/compatibility.mjs +6 -0
  63. package/dist/compatibilityCommand.cjs +4 -0
  64. package/dist/compatibilityCommand.d.mts +2 -0
  65. package/dist/compatibilityCommand.mjs +2 -0
  66. package/dist/compatibilityContext.cjs +3 -0
  67. package/dist/compatibilityContext.d.mts +2 -0
  68. package/dist/compatibilityContext.mjs +2 -0
  69. package/dist/compatibilityOptions.cjs +5 -0
  70. package/dist/compatibilityOptions.d.mts +2 -0
  71. package/dist/compatibilityOptions.mjs +2 -0
  72. package/dist/config.cjs +163 -0
  73. package/dist/config.d.mts +7 -0
  74. package/dist/config.mjs +7 -0
  75. package/dist/doctorCommand.cjs +5 -0
  76. package/dist/doctorCommand.d.mts +2 -0
  77. package/dist/doctorCommand.mjs +2 -0
  78. package/dist/emitMcpCommand.cjs +4 -0
  79. package/dist/emitMcpCommand.d.mts +2 -0
  80. package/dist/emitMcpCommand.mjs +2 -0
  81. package/dist/explainCommand.cjs +5 -0
  82. package/dist/explainCommand.d.mts +2 -0
  83. package/dist/explainCommand.mjs +2 -0
  84. package/dist/extensions/server.cjs +39 -0
  85. package/dist/extensions/server.cjs.map +1 -0
  86. package/dist/extensions/server.d.mts +5 -0
  87. package/dist/extensions/server.d.mts.map +1 -0
  88. package/dist/extensions/server.mjs +34 -0
  89. package/dist/extensions/server.mjs.map +1 -0
  90. package/dist/harnessContext.cjs +5 -0
  91. package/dist/harnessContext.d.mts +2 -0
  92. package/dist/harnessContext.mjs +2 -0
  93. package/dist/harnessState.cjs +19 -0
  94. package/dist/harnessState.d.mts +2 -0
  95. package/dist/harnessState.mjs +2 -0
  96. package/dist/help.cjs +12 -0
  97. package/dist/help.d.mts +6 -0
  98. package/dist/help.mjs +6 -0
  99. package/dist/index.cjs +306 -0
  100. package/dist/index.d.mts +40 -0
  101. package/dist/index.mjs +37 -0
  102. package/dist/initCommand.cjs +4 -0
  103. package/dist/initCommand.d.mts +2 -0
  104. package/dist/initCommand.mjs +2 -0
  105. package/dist/matrixOptions.cjs +28 -0
  106. package/dist/matrixOptions.d.mts +2 -0
  107. package/dist/matrixOptions.mjs +2 -0
  108. package/dist/matrixSwitcher.cjs +11 -0
  109. package/dist/matrixSwitcher.d.mts +3 -0
  110. package/dist/matrixSwitcher.mjs +3 -0
  111. package/dist/mcpFilter.cjs +9 -0
  112. package/dist/mcpFilter.d.mts +1 -0
  113. package/dist/mcpFilter.mjs +2 -0
  114. package/dist/options.cjs +3 -0
  115. package/dist/options.d.mts +2 -0
  116. package/dist/options.mjs +2 -0
  117. package/dist/process.cjs +12 -0
  118. package/dist/process.d.mts +2 -0
  119. package/dist/process.mjs +2 -0
  120. package/dist/projectTrust.cjs +6 -0
  121. package/dist/projectTrust.d.mts +2 -0
  122. package/dist/projectTrust.mjs +2 -0
  123. package/dist/repository.cjs +5 -0
  124. package/dist/repository.d.mts +2 -0
  125. package/dist/repository.mjs +2 -0
  126. package/dist/resourceCollector.cjs +9 -0
  127. package/dist/resourceCollector.d.mts +1 -0
  128. package/dist/resourceCollector.mjs +2 -0
  129. package/dist/router.cjs +6 -0
  130. package/dist/router.d.mts +2 -0
  131. package/dist/router.mjs +2 -0
  132. package/dist/services.cjs +97 -0
  133. package/dist/services.d.mts +12 -0
  134. package/dist/services.mjs +12 -0
  135. package/dist/shared.cjs +18 -0
  136. package/dist/shared.d.mts +2 -0
  137. package/dist/shared.mjs +2 -0
  138. package/dist/src/bin/agentDirectory.cjs +27 -0
  139. package/dist/src/bin/agentDirectory.cjs.map +1 -0
  140. package/dist/src/bin/agentDirectory.mjs +26 -0
  141. package/dist/src/bin/agentDirectory.mjs.map +1 -0
  142. package/dist/src/builders/apiContractExport/index.cjs +126 -0
  143. package/dist/src/builders/apiContractExport/index.cjs.map +1 -0
  144. package/dist/src/builders/apiContractExport/index.mjs +123 -0
  145. package/dist/src/builders/apiContractExport/index.mjs.map +1 -0
  146. package/dist/src/builders/cli/entryResolution.cjs +39 -0
  147. package/dist/src/builders/cli/entryResolution.cjs.map +1 -0
  148. package/dist/src/builders/cli/entryResolution.mjs +35 -0
  149. package/dist/src/builders/cli/entryResolution.mjs.map +1 -0
  150. package/dist/src/builders/cli/harnessContext.cjs +175 -0
  151. package/dist/src/builders/cli/harnessContext.cjs.map +1 -0
  152. package/dist/src/builders/cli/harnessContext.d.mts +48 -0
  153. package/dist/src/builders/cli/harnessContext.d.mts.map +1 -0
  154. package/dist/src/builders/cli/harnessContext.mjs +167 -0
  155. package/dist/src/builders/cli/harnessContext.mjs.map +1 -0
  156. package/dist/src/builders/cli/sessionComposition.cjs +27 -0
  157. package/dist/src/builders/cli/sessionComposition.cjs.map +1 -0
  158. package/dist/src/builders/cli/sessionComposition.mjs +26 -0
  159. package/dist/src/builders/cli/sessionComposition.mjs.map +1 -0
  160. package/dist/src/builders/hooks/index.cjs +238 -0
  161. package/dist/src/builders/hooks/index.cjs.map +1 -0
  162. package/dist/src/builders/hooks/index.mjs +231 -0
  163. package/dist/src/builders/hooks/index.mjs.map +1 -0
  164. package/dist/src/builders/native/index.cjs +176 -0
  165. package/dist/src/builders/native/index.cjs.map +1 -0
  166. package/dist/src/builders/native/index.d.mts +36 -0
  167. package/dist/src/builders/native/index.d.mts.map +1 -0
  168. package/dist/src/builders/native/index.mjs +170 -0
  169. package/dist/src/builders/native/index.mjs.map +1 -0
  170. package/dist/src/builders/server/backgroundSync.cjs +333 -0
  171. package/dist/src/builders/server/backgroundSync.cjs.map +1 -0
  172. package/dist/src/builders/server/backgroundSync.mjs +320 -0
  173. package/dist/src/builders/server/backgroundSync.mjs.map +1 -0
  174. package/dist/src/builders/server/computerUseBinding.cjs +273 -0
  175. package/dist/src/builders/server/computerUseBinding.cjs.map +1 -0
  176. package/dist/src/builders/server/computerUseBinding.mjs +269 -0
  177. package/dist/src/builders/server/computerUseBinding.mjs.map +1 -0
  178. package/dist/src/builders/server/computerUseRecordings.cjs +188 -0
  179. package/dist/src/builders/server/computerUseRecordings.cjs.map +1 -0
  180. package/dist/src/builders/server/computerUseRecordings.mjs +184 -0
  181. package/dist/src/builders/server/computerUseRecordings.mjs.map +1 -0
  182. package/dist/src/builders/server/defaultWorkspace.cjs +38 -0
  183. package/dist/src/builders/server/defaultWorkspace.cjs.map +1 -0
  184. package/dist/src/builders/server/defaultWorkspace.mjs +35 -0
  185. package/dist/src/builders/server/defaultWorkspace.mjs.map +1 -0
  186. package/dist/src/builders/server/idleRestart.cjs +149 -0
  187. package/dist/src/builders/server/idleRestart.cjs.map +1 -0
  188. package/dist/src/builders/server/idleRestart.mjs +136 -0
  189. package/dist/src/builders/server/idleRestart.mjs.map +1 -0
  190. package/dist/src/builders/server/index.cjs +63 -0
  191. package/dist/src/builders/server/index.cjs.map +1 -0
  192. package/dist/src/builders/server/index.mjs +60 -0
  193. package/dist/src/builders/server/index.mjs.map +1 -0
  194. package/dist/src/builders/server/logSink.cjs +57 -0
  195. package/dist/src/builders/server/logSink.cjs.map +1 -0
  196. package/dist/src/builders/server/logSink.mjs +57 -0
  197. package/dist/src/builders/server/logSink.mjs.map +1 -0
  198. package/dist/src/builders/server/mcpApp.cjs +152 -0
  199. package/dist/src/builders/server/mcpApp.cjs.map +1 -0
  200. package/dist/src/builders/server/mcpApp.d.mts +18 -0
  201. package/dist/src/builders/server/mcpApp.d.mts.map +1 -0
  202. package/dist/src/builders/server/mcpApp.mjs +147 -0
  203. package/dist/src/builders/server/mcpApp.mjs.map +1 -0
  204. package/dist/src/builders/server/mcpAppBuild.cjs +111 -0
  205. package/dist/src/builders/server/mcpAppBuild.cjs.map +1 -0
  206. package/dist/src/builders/server/mcpAppBuild.d.mts +24 -0
  207. package/dist/src/builders/server/mcpAppBuild.d.mts.map +1 -0
  208. package/dist/src/builders/server/mcpAppBuild.mjs +105 -0
  209. package/dist/src/builders/server/mcpAppBuild.mjs.map +1 -0
  210. package/dist/src/builders/server/mcpBundle.cjs +87 -0
  211. package/dist/src/builders/server/mcpBundle.cjs.map +1 -0
  212. package/dist/src/builders/server/mcpBundle.d.mts +23 -0
  213. package/dist/src/builders/server/mcpBundle.d.mts.map +1 -0
  214. package/dist/src/builders/server/mcpBundle.mjs +84 -0
  215. package/dist/src/builders/server/mcpBundle.mjs.map +1 -0
  216. package/dist/src/builders/server/packageReloadCheck.cjs +62 -0
  217. package/dist/src/builders/server/packageReloadCheck.cjs.map +1 -0
  218. package/dist/src/builders/server/packageReloadCheck.mjs +61 -0
  219. package/dist/src/builders/server/packageReloadCheck.mjs.map +1 -0
  220. package/dist/src/builders/server/packageUrl.cjs +210 -0
  221. package/dist/src/builders/server/packageUrl.cjs.map +1 -0
  222. package/dist/src/builders/server/packageUrl.mjs +203 -0
  223. package/dist/src/builders/server/packageUrl.mjs.map +1 -0
  224. package/dist/src/builders/server/runtime.cjs +1428 -0
  225. package/dist/src/builders/server/runtime.cjs.map +1 -0
  226. package/dist/src/builders/server/runtime.mjs +1420 -0
  227. package/dist/src/builders/server/runtime.mjs.map +1 -0
  228. package/dist/src/builders/server/runtimeResources.cjs +72 -0
  229. package/dist/src/builders/server/runtimeResources.cjs.map +1 -0
  230. package/dist/src/builders/server/runtimeResources.mjs +71 -0
  231. package/dist/src/builders/server/runtimeResources.mjs.map +1 -0
  232. package/dist/src/builders/server/selectionStatus.cjs +12 -0
  233. package/dist/src/builders/server/selectionStatus.cjs.map +1 -0
  234. package/dist/src/builders/server/selectionStatus.mjs +12 -0
  235. package/dist/src/builders/server/selectionStatus.mjs.map +1 -0
  236. package/dist/src/builders/server/sessionArguments.cjs +63 -0
  237. package/dist/src/builders/server/sessionArguments.cjs.map +1 -0
  238. package/dist/src/builders/server/sessionArguments.mjs +62 -0
  239. package/dist/src/builders/server/sessionArguments.mjs.map +1 -0
  240. package/dist/src/builders/server/shutdown.cjs +16 -0
  241. package/dist/src/builders/server/shutdown.cjs.map +1 -0
  242. package/dist/src/builders/server/shutdown.mjs +16 -0
  243. package/dist/src/builders/server/shutdown.mjs.map +1 -0
  244. package/dist/src/builders/server/webTemplateDecision.cjs +34 -0
  245. package/dist/src/builders/server/webTemplateDecision.cjs.map +1 -0
  246. package/dist/src/builders/server/webTemplateDecision.mjs +32 -0
  247. package/dist/src/builders/server/webTemplateDecision.mjs.map +1 -0
  248. package/dist/src/builders/server/workspaceCheckout.cjs +31 -0
  249. package/dist/src/builders/server/workspaceCheckout.cjs.map +1 -0
  250. package/dist/src/builders/server/workspaceCheckout.mjs +29 -0
  251. package/dist/src/builders/server/workspaceCheckout.mjs.map +1 -0
  252. package/dist/src/builders/web/bundle.cjs +225 -0
  253. package/dist/src/builders/web/bundle.cjs.map +1 -0
  254. package/dist/src/builders/web/bundle.d.mts +65 -0
  255. package/dist/src/builders/web/bundle.d.mts.map +1 -0
  256. package/dist/src/builders/web/bundle.mjs +221 -0
  257. package/dist/src/builders/web/bundle.mjs.map +1 -0
  258. package/dist/src/builders/web/bundleAssetPolicy.cjs +96 -0
  259. package/dist/src/builders/web/bundleAssetPolicy.cjs.map +1 -0
  260. package/dist/src/builders/web/bundleAssetPolicy.d.mts +22 -0
  261. package/dist/src/builders/web/bundleAssetPolicy.d.mts.map +1 -0
  262. package/dist/src/builders/web/bundleAssetPolicy.mjs +95 -0
  263. package/dist/src/builders/web/bundleAssetPolicy.mjs.map +1 -0
  264. package/dist/src/builders/web/index.cjs +361 -0
  265. package/dist/src/builders/web/index.cjs.map +1 -0
  266. package/dist/src/builders/web/index.d.mts +109 -0
  267. package/dist/src/builders/web/index.d.mts.map +1 -0
  268. package/dist/src/builders/web/index.mjs +342 -0
  269. package/dist/src/builders/web/index.mjs.map +1 -0
  270. package/dist/src/builders/web/webDevRoots.cjs +27 -0
  271. package/dist/src/builders/web/webDevRoots.cjs.map +1 -0
  272. package/dist/src/builders/web/webDevRoots.d.mts +22 -0
  273. package/dist/src/builders/web/webDevRoots.d.mts.map +1 -0
  274. package/dist/src/builders/web/webDevRoots.mjs +25 -0
  275. package/dist/src/builders/web/webDevRoots.mjs.map +1 -0
  276. package/dist/src/builders/web/webPluginGenerate.cjs +188 -0
  277. package/dist/src/builders/web/webPluginGenerate.cjs.map +1 -0
  278. package/dist/src/builders/web/webPluginGenerate.d.mts +56 -0
  279. package/dist/src/builders/web/webPluginGenerate.d.mts.map +1 -0
  280. package/dist/src/builders/web/webPluginGenerate.mjs +178 -0
  281. package/dist/src/builders/web/webPluginGenerate.mjs.map +1 -0
  282. package/dist/src/builders/web/webPluginManifest.cjs +128 -0
  283. package/dist/src/builders/web/webPluginManifest.cjs.map +1 -0
  284. package/dist/src/builders/web/webPluginManifest.d.mts +64 -0
  285. package/dist/src/builders/web/webPluginManifest.d.mts.map +1 -0
  286. package/dist/src/builders/web/webPluginManifest.mjs +118 -0
  287. package/dist/src/builders/web/webPluginManifest.mjs.map +1 -0
  288. package/dist/src/builders/web/webPluginScan.cjs +57 -0
  289. package/dist/src/builders/web/webPluginScan.cjs.map +1 -0
  290. package/dist/src/builders/web/webPluginScan.d.mts +19 -0
  291. package/dist/src/builders/web/webPluginScan.d.mts.map +1 -0
  292. package/dist/src/builders/web/webPluginScan.mjs +54 -0
  293. package/dist/src/builders/web/webPluginScan.mjs.map +1 -0
  294. package/dist/src/builders/web/webPluginVite.cjs +255 -0
  295. package/dist/src/builders/web/webPluginVite.cjs.map +1 -0
  296. package/dist/src/builders/web/webPluginVite.d.mts +64 -0
  297. package/dist/src/builders/web/webPluginVite.d.mts.map +1 -0
  298. package/dist/src/builders/web/webPluginVite.mjs +242 -0
  299. package/dist/src/builders/web/webPluginVite.mjs.map +1 -0
  300. package/dist/src/cli/cliApp.cjs +187 -0
  301. package/dist/src/cli/cliApp.cjs.map +1 -0
  302. package/dist/src/cli/cliApp.d.mts +32 -0
  303. package/dist/src/cli/cliApp.d.mts.map +1 -0
  304. package/dist/src/cli/cliApp.mjs +184 -0
  305. package/dist/src/cli/cliApp.mjs.map +1 -0
  306. package/dist/src/cli/commands/api-export/index.cjs +66 -0
  307. package/dist/src/cli/commands/api-export/index.cjs.map +1 -0
  308. package/dist/src/cli/commands/api-export/index.mjs +62 -0
  309. package/dist/src/cli/commands/api-export/index.mjs.map +1 -0
  310. package/dist/src/cli/commands/baseCommand.cjs +16 -0
  311. package/dist/src/cli/commands/baseCommand.cjs.map +1 -0
  312. package/dist/src/cli/commands/baseCommand.d.mts +24 -0
  313. package/dist/src/cli/commands/baseCommand.d.mts.map +1 -0
  314. package/dist/src/cli/commands/baseCommand.mjs +16 -0
  315. package/dist/src/cli/commands/baseCommand.mjs.map +1 -0
  316. package/dist/src/cli/commands/compat/context.cjs +115 -0
  317. package/dist/src/cli/commands/compat/context.cjs.map +1 -0
  318. package/dist/src/cli/commands/compat/context.d.mts +22 -0
  319. package/dist/src/cli/commands/compat/context.d.mts.map +1 -0
  320. package/dist/src/cli/commands/compat/context.mjs +110 -0
  321. package/dist/src/cli/commands/compat/context.mjs.map +1 -0
  322. package/dist/src/cli/commands/compat/help.cjs +26 -0
  323. package/dist/src/cli/commands/compat/help.cjs.map +1 -0
  324. package/dist/src/cli/commands/compat/help.d.mts +4 -0
  325. package/dist/src/cli/commands/compat/help.d.mts.map +1 -0
  326. package/dist/src/cli/commands/compat/help.mjs +25 -0
  327. package/dist/src/cli/commands/compat/help.mjs.map +1 -0
  328. package/dist/src/cli/commands/compat/index.cjs +73 -0
  329. package/dist/src/cli/commands/compat/index.cjs.map +1 -0
  330. package/dist/src/cli/commands/compat/index.d.mts +14 -0
  331. package/dist/src/cli/commands/compat/index.d.mts.map +1 -0
  332. package/dist/src/cli/commands/compat/index.mjs +70 -0
  333. package/dist/src/cli/commands/compat/index.mjs.map +1 -0
  334. package/dist/src/cli/commands/compat/options.cjs +88 -0
  335. package/dist/src/cli/commands/compat/options.cjs.map +1 -0
  336. package/dist/src/cli/commands/compat/options.d.mts +15 -0
  337. package/dist/src/cli/commands/compat/options.d.mts.map +1 -0
  338. package/dist/src/cli/commands/compat/options.mjs +86 -0
  339. package/dist/src/cli/commands/compat/options.mjs.map +1 -0
  340. package/dist/src/cli/commands/compat/providers/antigravity.cjs +294 -0
  341. package/dist/src/cli/commands/compat/providers/antigravity.cjs.map +1 -0
  342. package/dist/src/cli/commands/compat/providers/antigravity.d.mts +9 -0
  343. package/dist/src/cli/commands/compat/providers/antigravity.d.mts.map +1 -0
  344. package/dist/src/cli/commands/compat/providers/antigravity.mjs +289 -0
  345. package/dist/src/cli/commands/compat/providers/antigravity.mjs.map +1 -0
  346. package/dist/src/cli/commands/compat/providers/codex.cjs +178 -0
  347. package/dist/src/cli/commands/compat/providers/codex.cjs.map +1 -0
  348. package/dist/src/cli/commands/compat/providers/codex.d.mts +17 -0
  349. package/dist/src/cli/commands/compat/providers/codex.d.mts.map +1 -0
  350. package/dist/src/cli/commands/compat/providers/codex.mjs +170 -0
  351. package/dist/src/cli/commands/compat/providers/codex.mjs.map +1 -0
  352. package/dist/src/cli/commands/compat/providers/index.cjs +65 -0
  353. package/dist/src/cli/commands/compat/providers/index.cjs.map +1 -0
  354. package/dist/src/cli/commands/compat/providers/index.d.mts +15 -0
  355. package/dist/src/cli/commands/compat/providers/index.d.mts.map +1 -0
  356. package/dist/src/cli/commands/compat/providers/index.mjs +45 -0
  357. package/dist/src/cli/commands/compat/providers/index.mjs.map +1 -0
  358. package/dist/src/cli/commands/compat/providers/process.cjs +172 -0
  359. package/dist/src/cli/commands/compat/providers/process.cjs.map +1 -0
  360. package/dist/src/cli/commands/compat/providers/process.d.mts +33 -0
  361. package/dist/src/cli/commands/compat/providers/process.d.mts.map +1 -0
  362. package/dist/src/cli/commands/compat/providers/process.mjs +159 -0
  363. package/dist/src/cli/commands/compat/providers/process.mjs.map +1 -0
  364. package/dist/src/cli/commands/compat/providers/shared.cjs +76 -0
  365. package/dist/src/cli/commands/compat/providers/shared.cjs.map +1 -0
  366. package/dist/src/cli/commands/compat/providers/shared.d.mts +40 -0
  367. package/dist/src/cli/commands/compat/providers/shared.d.mts.map +1 -0
  368. package/dist/src/cli/commands/compat/providers/shared.mjs +61 -0
  369. package/dist/src/cli/commands/compat/providers/shared.mjs.map +1 -0
  370. package/dist/src/cli/commands/compat/types.d.mts +31 -0
  371. package/dist/src/cli/commands/compat/types.d.mts.map +1 -0
  372. package/dist/src/cli/commands/doctor/help.cjs +19 -0
  373. package/dist/src/cli/commands/doctor/help.cjs.map +1 -0
  374. package/dist/src/cli/commands/doctor/help.d.mts +4 -0
  375. package/dist/src/cli/commands/doctor/help.d.mts.map +1 -0
  376. package/dist/src/cli/commands/doctor/help.mjs +19 -0
  377. package/dist/src/cli/commands/doctor/help.mjs.map +1 -0
  378. package/dist/src/cli/commands/doctor/index.cjs +118 -0
  379. package/dist/src/cli/commands/doctor/index.cjs.map +1 -0
  380. package/dist/src/cli/commands/doctor/index.d.mts +33 -0
  381. package/dist/src/cli/commands/doctor/index.d.mts.map +1 -0
  382. package/dist/src/cli/commands/doctor/index.mjs +113 -0
  383. package/dist/src/cli/commands/doctor/index.mjs.map +1 -0
  384. package/dist/src/cli/commands/emit-mcp/index.cjs +32 -0
  385. package/dist/src/cli/commands/emit-mcp/index.cjs.map +1 -0
  386. package/dist/src/cli/commands/emit-mcp/index.d.mts +19 -0
  387. package/dist/src/cli/commands/emit-mcp/index.d.mts.map +1 -0
  388. package/dist/src/cli/commands/emit-mcp/index.mjs +31 -0
  389. package/dist/src/cli/commands/emit-mcp/index.mjs.map +1 -0
  390. package/dist/src/cli/commands/explain/index.cjs +155 -0
  391. package/dist/src/cli/commands/explain/index.cjs.map +1 -0
  392. package/dist/src/cli/commands/explain/index.d.mts +57 -0
  393. package/dist/src/cli/commands/explain/index.d.mts.map +1 -0
  394. package/dist/src/cli/commands/explain/index.mjs +150 -0
  395. package/dist/src/cli/commands/explain/index.mjs.map +1 -0
  396. package/dist/src/cli/commands/init/constants.cjs +11 -0
  397. package/dist/src/cli/commands/init/constants.cjs.map +1 -0
  398. package/dist/src/cli/commands/init/constants.mjs +11 -0
  399. package/dist/src/cli/commands/init/constants.mjs.map +1 -0
  400. package/dist/src/cli/commands/init/help.cjs +17 -0
  401. package/dist/src/cli/commands/init/help.cjs.map +1 -0
  402. package/dist/src/cli/commands/init/help.d.mts +4 -0
  403. package/dist/src/cli/commands/init/help.d.mts.map +1 -0
  404. package/dist/src/cli/commands/init/help.mjs +17 -0
  405. package/dist/src/cli/commands/init/help.mjs.map +1 -0
  406. package/dist/src/cli/commands/init/index.cjs +67 -0
  407. package/dist/src/cli/commands/init/index.cjs.map +1 -0
  408. package/dist/src/cli/commands/init/index.d.mts +12 -0
  409. package/dist/src/cli/commands/init/index.d.mts.map +1 -0
  410. package/dist/src/cli/commands/init/index.mjs +63 -0
  411. package/dist/src/cli/commands/init/index.mjs.map +1 -0
  412. package/dist/src/cli/commands/init/presenter.cjs +140 -0
  413. package/dist/src/cli/commands/init/presenter.cjs.map +1 -0
  414. package/dist/src/cli/commands/init/presenter.d.mts +8 -0
  415. package/dist/src/cli/commands/init/presenter.d.mts.map +1 -0
  416. package/dist/src/cli/commands/init/presenter.mjs +140 -0
  417. package/dist/src/cli/commands/init/presenter.mjs.map +1 -0
  418. package/dist/src/cli/commands/sync/help.cjs +34 -0
  419. package/dist/src/cli/commands/sync/help.cjs.map +1 -0
  420. package/dist/src/cli/commands/sync/help.d.mts +4 -0
  421. package/dist/src/cli/commands/sync/help.d.mts.map +1 -0
  422. package/dist/src/cli/commands/sync/help.mjs +34 -0
  423. package/dist/src/cli/commands/sync/help.mjs.map +1 -0
  424. package/dist/src/cli/commands/sync/index.cjs +215 -0
  425. package/dist/src/cli/commands/sync/index.cjs.map +1 -0
  426. package/dist/src/cli/commands/sync/index.d.mts +20 -0
  427. package/dist/src/cli/commands/sync/index.d.mts.map +1 -0
  428. package/dist/src/cli/commands/sync/index.mjs +206 -0
  429. package/dist/src/cli/commands/sync/index.mjs.map +1 -0
  430. package/dist/src/cli/commands/sync/presenter.cjs +58 -0
  431. package/dist/src/cli/commands/sync/presenter.cjs.map +1 -0
  432. package/dist/src/cli/commands/sync/presenter.d.mts +16 -0
  433. package/dist/src/cli/commands/sync/presenter.d.mts.map +1 -0
  434. package/dist/src/cli/commands/sync/presenter.mjs +57 -0
  435. package/dist/src/cli/commands/sync/presenter.mjs.map +1 -0
  436. package/dist/src/cli/commands/sync/workflow.cjs +16 -0
  437. package/dist/src/cli/commands/sync/workflow.cjs.map +1 -0
  438. package/dist/src/cli/commands/sync/workflow.mjs +16 -0
  439. package/dist/src/cli/commands/sync/workflow.mjs.map +1 -0
  440. package/dist/src/cli/commands/web/index.cjs +88 -0
  441. package/dist/src/cli/commands/web/index.cjs.map +1 -0
  442. package/dist/src/cli/commands/web/index.mjs +85 -0
  443. package/dist/src/cli/commands/web/index.mjs.map +1 -0
  444. package/dist/src/cli/harnessOptions.cjs +70 -0
  445. package/dist/src/cli/harnessOptions.cjs.map +1 -0
  446. package/dist/src/cli/harnessOptions.d.mts +26 -0
  447. package/dist/src/cli/harnessOptions.d.mts.map +1 -0
  448. package/dist/src/cli/harnessOptions.mjs +66 -0
  449. package/dist/src/cli/harnessOptions.mjs.map +1 -0
  450. package/dist/src/cli/help.cjs +82 -0
  451. package/dist/src/cli/help.cjs.map +1 -0
  452. package/dist/src/cli/help.d.mts +10 -0
  453. package/dist/src/cli/help.d.mts.map +1 -0
  454. package/dist/src/cli/help.mjs +78 -0
  455. package/dist/src/cli/help.mjs.map +1 -0
  456. package/dist/src/cli/matrixOptions.cjs +178 -0
  457. package/dist/src/cli/matrixOptions.cjs.map +1 -0
  458. package/dist/src/cli/matrixOptions.d.mts +90 -0
  459. package/dist/src/cli/matrixOptions.d.mts.map +1 -0
  460. package/dist/src/cli/matrixOptions.mjs +151 -0
  461. package/dist/src/cli/matrixOptions.mjs.map +1 -0
  462. package/dist/src/cli/options.cjs +281 -0
  463. package/dist/src/cli/options.cjs.map +1 -0
  464. package/dist/src/cli/options.d.mts +5 -0
  465. package/dist/src/cli/options.d.mts.map +1 -0
  466. package/dist/src/cli/options.mjs +279 -0
  467. package/dist/src/cli/options.mjs.map +1 -0
  468. package/dist/src/cli/router.cjs +57 -0
  469. package/dist/src/cli/router.cjs.map +1 -0
  470. package/dist/src/cli/router.d.mts +32 -0
  471. package/dist/src/cli/router.d.mts.map +1 -0
  472. package/dist/src/cli/router.mjs +54 -0
  473. package/dist/src/cli/router.mjs.map +1 -0
  474. package/dist/src/cli/server/options.cjs +71 -0
  475. package/dist/src/cli/server/options.cjs.map +1 -0
  476. package/dist/src/cli/server/options.mjs +70 -0
  477. package/dist/src/cli/server/options.mjs.map +1 -0
  478. package/dist/src/cli/server/processGuards.cjs +83 -0
  479. package/dist/src/cli/server/processGuards.cjs.map +1 -0
  480. package/dist/src/cli/server/processGuards.mjs +79 -0
  481. package/dist/src/cli/server/processGuards.mjs.map +1 -0
  482. package/dist/src/cli/server/run.cjs +69 -0
  483. package/dist/src/cli/server/run.cjs.map +1 -0
  484. package/dist/src/cli/server/run.mjs +66 -0
  485. package/dist/src/cli/server/run.mjs.map +1 -0
  486. package/dist/src/composition/harnessState/index.cjs +48 -0
  487. package/dist/src/composition/harnessState/index.cjs.map +1 -0
  488. package/dist/src/composition/harnessState/index.d.mts +19 -0
  489. package/dist/src/composition/harnessState/index.d.mts.map +1 -0
  490. package/dist/src/composition/harnessState/index.mjs +34 -0
  491. package/dist/src/composition/harnessState/index.mjs.map +1 -0
  492. package/dist/src/composition/layerPackageInstaller/index.cjs +651 -0
  493. package/dist/src/composition/layerPackageInstaller/index.cjs.map +1 -0
  494. package/dist/src/composition/layerPackageInstaller/index.d.mts +74 -0
  495. package/dist/src/composition/layerPackageInstaller/index.d.mts.map +1 -0
  496. package/dist/src/composition/layerPackageInstaller/index.mjs +637 -0
  497. package/dist/src/composition/layerPackageInstaller/index.mjs.map +1 -0
  498. package/dist/src/composition/poHomeMigration/index.cjs +234 -0
  499. package/dist/src/composition/poHomeMigration/index.cjs.map +1 -0
  500. package/dist/src/composition/poHomeMigration/index.d.mts +12 -0
  501. package/dist/src/composition/poHomeMigration/index.d.mts.map +1 -0
  502. package/dist/src/composition/poHomeMigration/index.mjs +226 -0
  503. package/dist/src/composition/poHomeMigration/index.mjs.map +1 -0
  504. package/dist/src/composition/projectTrust/index.cjs +51 -0
  505. package/dist/src/composition/projectTrust/index.cjs.map +1 -0
  506. package/dist/src/composition/projectTrust/index.d.mts +22 -0
  507. package/dist/src/composition/projectTrust/index.d.mts.map +1 -0
  508. package/dist/src/composition/projectTrust/index.mjs +48 -0
  509. package/dist/src/composition/projectTrust/index.mjs.map +1 -0
  510. package/dist/src/composition/repository/index.cjs +68 -0
  511. package/dist/src/composition/repository/index.cjs.map +1 -0
  512. package/dist/src/composition/repository/index.d.mts +22 -0
  513. package/dist/src/composition/repository/index.d.mts.map +1 -0
  514. package/dist/src/composition/repository/index.mjs +63 -0
  515. package/dist/src/composition/repository/index.mjs.map +1 -0
  516. package/dist/src/composition/syncPrune/index.cjs +85 -0
  517. package/dist/src/composition/syncPrune/index.cjs.map +1 -0
  518. package/dist/src/composition/syncPrune/index.d.mts +33 -0
  519. package/dist/src/composition/syncPrune/index.d.mts.map +1 -0
  520. package/dist/src/composition/syncPrune/index.mjs +82 -0
  521. package/dist/src/composition/syncPrune/index.mjs.map +1 -0
  522. package/dist/src/composition/syncService/index.cjs +808 -0
  523. package/dist/src/composition/syncService/index.cjs.map +1 -0
  524. package/dist/src/composition/syncService/index.d.mts +65 -0
  525. package/dist/src/composition/syncService/index.d.mts.map +1 -0
  526. package/dist/src/composition/syncService/index.mjs +792 -0
  527. package/dist/src/composition/syncService/index.mjs.map +1 -0
  528. package/dist/src/composition/syncService/localBuilds.cjs +367 -0
  529. package/dist/src/composition/syncService/localBuilds.cjs.map +1 -0
  530. package/dist/src/composition/syncService/localBuilds.mjs +358 -0
  531. package/dist/src/composition/syncService/localBuilds.mjs.map +1 -0
  532. package/dist/src/composition/transitionLayers.cjs +17 -0
  533. package/dist/src/composition/transitionLayers.cjs.map +1 -0
  534. package/dist/src/composition/transitionLayers.d.mts +6 -0
  535. package/dist/src/composition/transitionLayers.d.mts.map +1 -0
  536. package/dist/src/composition/transitionLayers.mjs +16 -0
  537. package/dist/src/composition/transitionLayers.mjs.map +1 -0
  538. package/dist/src/composition/types/harness.d.mts +52 -0
  539. package/dist/src/composition/types/harness.d.mts.map +1 -0
  540. package/dist/src/extensions/setupDiagnostics.cjs +65 -0
  541. package/dist/src/extensions/setupDiagnostics.cjs.map +1 -0
  542. package/dist/src/extensions/setupDiagnostics.mjs +64 -0
  543. package/dist/src/extensions/setupDiagnostics.mjs.map +1 -0
  544. package/dist/utils.cjs +4 -0
  545. package/dist/utils.d.mts +2 -0
  546. package/dist/utils.mjs +2 -0
  547. package/dist/webBuilder.cjs +59 -0
  548. package/dist/webBuilder.d.mts +9 -0
  549. package/dist/webBuilder.mjs +9 -0
  550. package/docs/server/api-export.md +86 -0
  551. package/docs/server/api.md +144 -0
  552. package/docs/server/getting-started.md +114 -0
  553. package/docs/server/index.md +67 -0
  554. package/docs/server/ipc.md +97 -0
  555. package/docs/server/lifecycle.md +108 -0
  556. package/docs/server/security.md +101 -0
  557. package/llms.txt +12 -0
  558. package/package.json +295 -0
  559. package/src/prompts/po-author-extension/SKILL.md +35 -0
  560. package/src/prompts/po-author-extension/references/extension-contract.md +134 -0
@@ -0,0 +1,221 @@
1
+ import { scanWebPlugins } from "./webPluginScan.mjs";
2
+ import { bundleAssetPolicyPlugin } from "./bundleAssetPolicy.mjs";
3
+ import { PLUGIN_ROOTS_FILE } from "./webDevRoots.mjs";
4
+ import { BASE_STYLE_ENTRY, pluginStyleEntryName, writeSyncWebPluginModules, writeWebPluginStyleEntries } from "./webPluginGenerate.mjs";
5
+ import { WEB_PLUGIN_FACADE_CHUNK, isWebPluginFacade, webPluginCssAlias, webPluginOverridePlugin, webPluginRuntimeAliases, webPluginRuntimeFacadePlugin } from "./webPluginVite.mjs";
6
+ import fs from "node:fs";
7
+ import path from "node:path";
8
+ //#region src/builders/web/bundle.ts
9
+ /** Shared runtime packages every plugin's client code must resolve to the host copies. */
10
+ const DEDUPED_RUNTIMES = [
11
+ "react",
12
+ "react-dom",
13
+ "@tanstack/store",
14
+ "@tanstack/react-store",
15
+ "@tanstack/react-router",
16
+ "@agimon-ai/po-core",
17
+ "@agimon-ai/po-web-dashboard",
18
+ "@agimon-ai/po-web-components",
19
+ "@agimon-ai/po-web-security",
20
+ "@codemirror/state",
21
+ "@codemirror/view"
22
+ ];
23
+ /**
24
+ * The files one manifest entry reaches: `files` follows static and dynamic imports and holds
25
+ * every chunk, asset, and stylesheet on the way; `css` follows static imports only.
26
+ */
27
+ function manifestClosure(manifest, entryKey) {
28
+ const chunkOf = (key) => {
29
+ const chunk = manifest[key];
30
+ if (chunk === void 0) throw new Error(`The composition manifest has no chunk '${key}'.`);
31
+ return chunk;
32
+ };
33
+ const files = /* @__PURE__ */ new Set();
34
+ const visited = /* @__PURE__ */ new Set();
35
+ const walk = (key) => {
36
+ if (visited.has(key)) return;
37
+ visited.add(key);
38
+ const chunk = chunkOf(key);
39
+ files.add(chunk.file);
40
+ for (const file of [...chunk.css ?? [], ...chunk.assets ?? []]) files.add(file);
41
+ for (const next of [...chunk.imports ?? [], ...chunk.dynamicImports ?? []]) walk(next);
42
+ };
43
+ walk(entryKey);
44
+ const css = /* @__PURE__ */ new Set();
45
+ const staticVisited = /* @__PURE__ */ new Set();
46
+ const walkStatic = (key) => {
47
+ if (staticVisited.has(key)) return;
48
+ staticVisited.add(key);
49
+ const chunk = chunkOf(key);
50
+ for (const file of chunk.css ?? []) css.add(file);
51
+ for (const next of chunk.imports ?? []) walkStatic(next);
52
+ };
53
+ walkStatic(entryKey);
54
+ return {
55
+ entry: chunkOf(entryKey).file,
56
+ files: [...files],
57
+ css: [...css]
58
+ };
59
+ }
60
+ /**
61
+ * Builds the cockpit SPA against the installed plugin set.
62
+ *
63
+ * This is what `po sync` calls: manifests come from the given package
64
+ * roots (no hardcoded plugin dependencies anywhere), the generated entry
65
+ * modules are aliased over the committed builtin registry, and Vite compiles
66
+ * the host shell and, separately, each plugin's shipped web source into one
67
+ * ES-module composition with an entry per slot, so each plugin and its assets ship once.
68
+ * The roots file beside
69
+ * the bundle lets the dev server serve the same composition with hot reload.
70
+ */
71
+ async function bundleCockpitWeb(options) {
72
+ const notice = options.onNotice ?? (() => {});
73
+ const hostRoot = options.hostRoot;
74
+ const plugins = scanWebPlugins(hostRoot, options.pluginRoots, notice);
75
+ notice(`bundling the cockpit with ${String(plugins.length)} web plugin(s): ${plugins.map((p) => p.pluginId).join(", ")}`);
76
+ const generatedDir = path.join(options.outDir, "generated");
77
+ const assetsDir = path.join(options.outDir, "web");
78
+ const pluginsDir = path.join(options.outDir, "plugins");
79
+ const generated = writeSyncWebPluginModules(plugins, generatedDir, hostRoot);
80
+ const roots = [...new Set(options.pluginRoots.map((root) => path.resolve(root)))];
81
+ fs.writeFileSync(path.join(options.outDir, PLUGIN_ROOTS_FILE), `${JSON.stringify(roots, null, 2)}\n`);
82
+ const { build } = await import("vite");
83
+ const { default: react } = await import("@vitejs/plugin-react");
84
+ const { default: tailwindcss } = await import("@tailwindcss/vite");
85
+ const clientRoot = path.join(hostRoot, "src", "web");
86
+ await build({
87
+ configFile: false,
88
+ envDir: false,
89
+ logLevel: "warn",
90
+ root: clientRoot,
91
+ plugins: [
92
+ webPluginOverridePlugin(clientRoot, generated.shell),
93
+ react(),
94
+ tailwindcss(),
95
+ bundleAssetPolicyPlugin()
96
+ ],
97
+ resolve: {
98
+ dedupe: [...DEDUPED_RUNTIMES],
99
+ alias: [...webPluginRuntimeAliases(clientRoot), webPluginCssAlias(generated.shell)]
100
+ },
101
+ build: {
102
+ outDir: assetsDir,
103
+ emptyOutDir: true,
104
+ sourcemap: false
105
+ }
106
+ });
107
+ await build({
108
+ configFile: false,
109
+ envDir: false,
110
+ logLevel: "warn",
111
+ base: "./",
112
+ plugins: [
113
+ webPluginRuntimeFacadePlugin(hostRoot),
114
+ react(),
115
+ tailwindcss()
116
+ ],
117
+ resolve: {
118
+ dedupe: [...DEDUPED_RUNTIMES],
119
+ alias: [webPluginCssAlias(generated)]
120
+ },
121
+ build: {
122
+ cssCodeSplit: true,
123
+ modulePreload: false,
124
+ outDir: pluginsDir,
125
+ emptyOutDir: true,
126
+ sourcemap: false,
127
+ assetsInlineLimit: 0,
128
+ manifest: "manifest.json",
129
+ rollupOptions: {
130
+ input: generated.slotEntryPaths,
131
+ preserveEntrySignatures: "exports-only",
132
+ output: {
133
+ format: "es",
134
+ entryFileNames: "slots/[name]-[hash].js",
135
+ chunkFileNames: "chunks/[name]-[hash].js",
136
+ assetFileNames: "assets/[name]-[hash][extname]",
137
+ manualChunks: (id) => isWebPluginFacade(id) ? WEB_PLUGIN_FACADE_CHUNK : void 0
138
+ }
139
+ }
140
+ }
141
+ });
142
+ const manifest = JSON.parse(fs.readFileSync(path.join(pluginsDir, "manifest.json"), "utf8"));
143
+ const manifestRoot = fs.realpathSync(process.cwd());
144
+ const closures = new Map(plugins.map((plugin) => {
145
+ const entryPath = fs.realpathSync(generated.slotEntryPaths[plugin.slot]);
146
+ return [plugin.slot, manifestClosure(manifest, path.relative(manifestRoot, entryPath).split(path.sep).join("/"))];
147
+ }));
148
+ const styles = writeWebPluginStyleEntries(plugins, generatedDir, hostRoot);
149
+ const stylesRoot = path.dirname(styles.baseEntryPath);
150
+ await build({
151
+ configFile: false,
152
+ envDir: false,
153
+ logLevel: "warn",
154
+ root: stylesRoot,
155
+ base: "./",
156
+ plugins: [tailwindcss()],
157
+ resolve: { alias: [{
158
+ find: /^\.\/webPluginSources\.generated\.css$/,
159
+ replacement: styles.baseSourcesPath
160
+ }] },
161
+ build: {
162
+ cssCodeSplit: true,
163
+ outDir: pluginsDir,
164
+ emptyOutDir: false,
165
+ sourcemap: false,
166
+ assetsInlineLimit: 0,
167
+ manifest: "styles.manifest.json",
168
+ rollupOptions: {
169
+ input: Object.fromEntries([[BASE_STYLE_ENTRY, styles.baseEntryPath], ...[...styles.pluginEntryPaths].map(([slot, entry]) => [pluginStyleEntryName(slot), entry])]),
170
+ output: { assetFileNames: "assets/[name]-[hash][extname]" }
171
+ }
172
+ }
173
+ });
174
+ const styleManifest = JSON.parse(fs.readFileSync(path.join(pluginsDir, "styles.manifest.json"), "utf8"));
175
+ fs.rmSync(path.join(pluginsDir, "styles.manifest.json"));
176
+ const emitted = (entry) => {
177
+ const record = styleManifest[path.relative(stylesRoot, entry).split(path.sep).join("/")];
178
+ const file = record?.file?.endsWith(".css") ? record.file : record?.css?.[0];
179
+ if (file === void 0) throw new Error(`The stylesheet entry '${entry}' emitted no CSS file.`);
180
+ return {
181
+ file,
182
+ assets: record?.assets ?? []
183
+ };
184
+ };
185
+ const base = emitted(styles.baseEntryPath);
186
+ const slotStyles = new Map(plugins.map((plugin) => {
187
+ const entry = styles.pluginEntryPaths.get(plugin.slot);
188
+ return [plugin.slot, entry === void 0 ? base : emitted(entry)];
189
+ }));
190
+ const pluginStyles = Object.fromEntries([...slotStyles].map(([slot, style]) => [slot, style.file]));
191
+ fs.writeFileSync(path.join(pluginsDir, "index.html"), "<!doctype html>\n<title>Po plugin composition</title>\n");
192
+ return {
193
+ assetsDir,
194
+ pluginsDir,
195
+ pluginIds: plugins.map((plugin) => plugin.pluginId),
196
+ plugins: plugins.map((plugin) => {
197
+ const closure = closures.get(plugin.slot);
198
+ const style = slotStyles.get(plugin.slot);
199
+ if (closure === void 0 || style === void 0) throw new Error(`The slot '${plugin.slot}' emitted no entry.`);
200
+ return {
201
+ pluginId: plugin.pluginId,
202
+ slot: plugin.slot,
203
+ packageDir: plugin.packageDir,
204
+ isHost: plugin.isHost,
205
+ entry: closure.entry,
206
+ files: [.../* @__PURE__ */ new Set([
207
+ ...closure.files,
208
+ style.file,
209
+ ...style.assets
210
+ ])],
211
+ css: closure.css
212
+ };
213
+ }),
214
+ pluginStyles,
215
+ baseStyle: base.file
216
+ };
217
+ }
218
+ //#endregion
219
+ export { bundleCockpitWeb, manifestClosure };
220
+
221
+ //# sourceMappingURL=bundle.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.mjs","names":[],"sources":["../../../../src/builders/web/bundle.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { bundleAssetPolicyPlugin } from './bundleAssetPolicy';\nimport { PLUGIN_ROOTS_FILE } from './webDevRoots';\nimport {\n BASE_STYLE_ENTRY,\n pluginStyleEntryName,\n writeSyncWebPluginModules,\n writeWebPluginStyleEntries,\n} from './webPluginGenerate';\nimport { scanWebPlugins } from './webPluginScan';\nimport {\n isWebPluginFacade,\n WEB_PLUGIN_FACADE_CHUNK,\n webPluginCssAlias,\n webPluginOverridePlugin,\n webPluginRuntimeAliases,\n webPluginRuntimeFacadePlugin,\n} from './webPluginVite';\n\n/** Shared runtime packages every plugin's client code must resolve to the host copies. */\nconst DEDUPED_RUNTIMES = [\n 'react',\n 'react-dom',\n '@tanstack/store',\n '@tanstack/react-store',\n '@tanstack/react-router',\n '@agimon-ai/po-core',\n '@agimon-ai/po-web-dashboard',\n '@agimon-ai/po-web-components',\n // The sealed transport is a module singleton whose nonce counters every\n // plugin shares; a second copy would start counting at zero.\n '@agimon-ai/po-web-security',\n // CodeMirror's state and view are singletons in all but name: a document\n // built against one copy is rejected by an editor from the other, and a\n // grammar chunk resolved separately from the editor is exactly how a second\n // copy appears.\n '@codemirror/state',\n '@codemirror/view',\n];\n\nexport interface BundleCockpitWebOptions {\n hostRoot: string;\n /** Package roots to scan for poWeb manifests, usually the installed composition. */\n pluginRoots: readonly string[];\n /** Output directory; receives web/, plugins/, generated/, and pluginRoots.json. */\n outDir: string;\n onNotice?: (message: string) => void;\n}\n\nexport interface BundleCockpitWebResult {\n /** The cockpit shell with the host's own plugins; every other plugin ships in pluginsDir. */\n assetsDir: string;\n /** Standalone session plugin composition artifacts. */\n pluginsDir: string;\n pluginIds: string[];\n /** Every declared plugin copy with its slot and the files its slot entry reaches. */\n plugins: WebPluginBuildRecord[];\n /** One content-hashed stylesheet per slot below pluginsDir; host plugins share the base. */\n pluginStyles: Record<string, string>;\n /** The shell-only stylesheet below pluginsDir. */\n baseStyle: string;\n}\n\n/** One plugin copy in a build: its slot entry and the emitted files that entry can load. */\nexport interface WebPluginBuildRecord {\n pluginId: string;\n slot: string;\n packageDir: string;\n isHost: boolean;\n /** The slot entry module below pluginsDir. */\n entry: string;\n /** Every file the entry reaches through static and dynamic imports, plus the slot stylesheet and its assets. */\n files: string[];\n /** The stylesheets of the entry's static import closure, which a mount loads up front. */\n css: string[];\n}\n\ninterface ManifestChunk {\n file: string;\n imports?: string[];\n dynamicImports?: string[];\n css?: string[];\n assets?: string[];\n}\n\n/**\n * The files one manifest entry reaches: `files` follows static and dynamic imports and holds\n * every chunk, asset, and stylesheet on the way; `css` follows static imports only.\n */\nexport function manifestClosure(\n manifest: Readonly<Record<string, ManifestChunk>>,\n entryKey: string,\n): { entry: string; files: string[]; css: string[] } {\n const chunkOf = (key: string): ManifestChunk => {\n const chunk = manifest[key];\n if (chunk === undefined) throw new Error(`The composition manifest has no chunk '${key}'.`);\n return chunk;\n };\n const files = new Set<string>();\n const visited = new Set<string>();\n const walk = (key: string): void => {\n if (visited.has(key)) return;\n visited.add(key);\n const chunk = chunkOf(key);\n files.add(chunk.file);\n for (const file of [...(chunk.css ?? []), ...(chunk.assets ?? [])]) files.add(file);\n for (const next of [...(chunk.imports ?? []), ...(chunk.dynamicImports ?? [])]) walk(next);\n };\n walk(entryKey);\n const css = new Set<string>();\n const staticVisited = new Set<string>();\n const walkStatic = (key: string): void => {\n if (staticVisited.has(key)) return;\n staticVisited.add(key);\n const chunk = chunkOf(key);\n for (const file of chunk.css ?? []) css.add(file);\n for (const next of chunk.imports ?? []) walkStatic(next);\n };\n walkStatic(entryKey);\n return { entry: chunkOf(entryKey).file, files: [...files], css: [...css] };\n}\n\n/**\n * Builds the cockpit SPA against the installed plugin set.\n *\n * This is what `po sync` calls: manifests come from the given package\n * roots (no hardcoded plugin dependencies anywhere), the generated entry\n * modules are aliased over the committed builtin registry, and Vite compiles\n * the host shell and, separately, each plugin's shipped web source into one\n * ES-module composition with an entry per slot, so each plugin and its assets ship once.\n * The roots file beside\n * the bundle lets the dev server serve the same composition with hot reload.\n */\nexport async function bundleCockpitWeb(options: BundleCockpitWebOptions): Promise<BundleCockpitWebResult> {\n const notice = options.onNotice ?? ((): void => {});\n const hostRoot = options.hostRoot;\n const plugins = scanWebPlugins(hostRoot, options.pluginRoots, notice);\n notice(\n `bundling the cockpit with ${String(plugins.length)} web plugin(s): ${plugins.map((p) => p.pluginId).join(', ')}`,\n );\n\n const generatedDir = path.join(options.outDir, 'generated');\n const assetsDir = path.join(options.outDir, 'web');\n const pluginsDir = path.join(options.outDir, 'plugins');\n const generated = writeSyncWebPluginModules(plugins, generatedDir, hostRoot);\n const roots = [...new Set(options.pluginRoots.map((root) => path.resolve(root)))];\n fs.writeFileSync(path.join(options.outDir, PLUGIN_ROOTS_FILE), `${JSON.stringify(roots, null, 2)}\\n`);\n\n // Vite and its plugins are regular dependencies so this works from an\n // installed package, not only the workspace.\n const { build } = await import('vite');\n const { default: react } = await import('@vitejs/plugin-react');\n const { default: tailwindcss } = await import('@tailwindcss/vite');\n\n const clientRoot = path.join(hostRoot, 'src', 'web');\n\n // The shell carries only the host's own plugins; the rest load from the composition below.\n await build({\n configFile: false,\n envDir: false,\n logLevel: 'warn',\n root: clientRoot,\n plugins: [webPluginOverridePlugin(clientRoot, generated.shell), react(), tailwindcss(), bundleAssetPolicyPlugin()],\n resolve: {\n dedupe: [...DEDUPED_RUNTIMES],\n alias: [...webPluginRuntimeAliases(clientRoot), webPluginCssAlias(generated.shell)],\n },\n build: {\n outDir: assetsDir,\n emptyOutDir: true,\n sourcemap: false,\n },\n });\n\n // One ES-module composition: an entry per slot exporting its webPlugin, shared chunks\n // between them, and the shared runtime modules read from the page through facades.\n await build({\n configFile: false,\n envDir: false,\n logLevel: 'warn',\n base: './',\n plugins: [webPluginRuntimeFacadePlugin(hostRoot), react(), tailwindcss()],\n resolve: {\n dedupe: [...DEDUPED_RUNTIMES],\n alias: [webPluginCssAlias(generated)],\n },\n build: {\n cssCodeSplit: true,\n modulePreload: false,\n outDir: pluginsDir,\n emptyOutDir: true,\n sourcemap: false,\n assetsInlineLimit: 0,\n manifest: 'manifest.json',\n rollupOptions: {\n input: generated.slotEntryPaths,\n // Each slot entry is loaded for its webPlugin export, so it must keep it.\n preserveEntrySignatures: 'exports-only',\n output: {\n format: 'es',\n entryFileNames: 'slots/[name]-[hash].js',\n chunkFileNames: 'chunks/[name]-[hash].js',\n assetFileNames: 'assets/[name]-[hash][extname]',\n manualChunks: (id) => (isWebPluginFacade(id) ? WEB_PLUGIN_FACADE_CHUNK : undefined),\n },\n },\n },\n });\n const manifest = JSON.parse(fs.readFileSync(path.join(pluginsDir, 'manifest.json'), 'utf8')) as Record<\n string,\n ManifestChunk\n >;\n // Manifest keys are the entry sources relative to the build root, which is the working directory.\n const manifestRoot = fs.realpathSync(process.cwd());\n const closures = new Map(\n plugins.map((plugin) => {\n const entryPath = fs.realpathSync(generated.slotEntryPaths[plugin.slot]);\n return [plugin.slot, manifestClosure(manifest, path.relative(manifestRoot, entryPath).split(path.sep).join('/'))];\n }),\n );\n\n // One content-hashed stylesheet per plugin, compiled from its own sources over the shell's.\n const styles = writeWebPluginStyleEntries(plugins, generatedDir, hostRoot);\n const stylesRoot = path.dirname(styles.baseEntryPath);\n await build({\n configFile: false,\n envDir: false,\n logLevel: 'warn',\n root: stylesRoot,\n base: './',\n plugins: [tailwindcss()],\n resolve: {\n alias: [{ find: /^\\.\\/webPluginSources\\.generated\\.css$/, replacement: styles.baseSourcesPath }],\n },\n build: {\n cssCodeSplit: true,\n outDir: pluginsDir,\n emptyOutDir: false,\n sourcemap: false,\n assetsInlineLimit: 0,\n manifest: 'styles.manifest.json',\n rollupOptions: {\n input: Object.fromEntries([\n [BASE_STYLE_ENTRY, styles.baseEntryPath],\n ...[...styles.pluginEntryPaths].map(([slot, entry]) => [pluginStyleEntryName(slot), entry]),\n ]),\n output: { assetFileNames: 'assets/[name]-[hash][extname]' },\n },\n },\n });\n const styleManifest = JSON.parse(fs.readFileSync(path.join(pluginsDir, 'styles.manifest.json'), 'utf8')) as Record<\n string,\n { file?: string; css?: string[]; assets?: string[] }\n >;\n fs.rmSync(path.join(pluginsDir, 'styles.manifest.json'));\n const emitted = (entry: string): { file: string; assets: string[] } => {\n const record = styleManifest[path.relative(stylesRoot, entry).split(path.sep).join('/')];\n const file = record?.file?.endsWith('.css') ? record.file : record?.css?.[0];\n if (file === undefined) throw new Error(`The stylesheet entry '${entry}' emitted no CSS file.`);\n return { file, assets: record?.assets ?? [] };\n };\n const base = emitted(styles.baseEntryPath);\n const slotStyles = new Map(\n plugins.map((plugin) => {\n const entry = styles.pluginEntryPaths.get(plugin.slot);\n return [plugin.slot, entry === undefined ? base : emitted(entry)];\n }),\n );\n const pluginStyles = Object.fromEntries([...slotStyles].map(([slot, style]) => [slot, style.file]));\n fs.writeFileSync(path.join(pluginsDir, 'index.html'), '<!doctype html>\\n<title>Po plugin composition</title>\\n');\n\n return {\n assetsDir,\n pluginsDir,\n pluginIds: plugins.map((plugin) => plugin.pluginId),\n plugins: plugins.map((plugin) => {\n const closure = closures.get(plugin.slot);\n const style = slotStyles.get(plugin.slot);\n if (closure === undefined || style === undefined) throw new Error(`The slot '${plugin.slot}' emitted no entry.`);\n return {\n pluginId: plugin.pluginId,\n slot: plugin.slot,\n packageDir: plugin.packageDir,\n isHost: plugin.isHost,\n entry: closure.entry,\n // The slot's own stylesheet and the fonts it references load with it.\n files: [...new Set([...closure.files, style.file, ...style.assets])],\n css: closure.css,\n };\n }),\n pluginStyles,\n baseStyle: base.file,\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ let _agimon_ai_po_core_bundleAssetPolicy = require("@agimon-ai/po-core/bundleAssetPolicy");
2
+ //#region src/builders/web/bundleAssetPolicy.ts
3
+ const OPTIONAL_PACKAGES = ["/node_modules/mermaid/", "/node_modules/pdfjs-dist/"];
4
+ function packageOwner(output, owned) {
5
+ const ids = Object.keys(output.modules ?? {});
6
+ return OPTIONAL_PACKAGES.find((dependency) => ids.some((id) => id.replaceAll("\\", "/").includes(dependency)) && ids.every((id) => owned.get(dependency)?.has(id)));
7
+ }
8
+ function references(output) {
9
+ if (output.type === "asset") return [];
10
+ return [
11
+ ...output.imports ?? [],
12
+ ...output.dynamicImports ?? [],
13
+ ...output.referencedFiles ?? [],
14
+ ...output.viteMetadata?.importedAssets ?? []
15
+ ];
16
+ }
17
+ /** Classifies only output owned exclusively by a known optional dependency graph. */
18
+ function classifyOptionalBundleAssets(bundle, moduleDependencies) {
19
+ const outputs = new Map(Object.entries(bundle));
20
+ const owned = /* @__PURE__ */ new Map();
21
+ for (const dependency of OPTIONAL_PACKAGES) {
22
+ const modules = /* @__PURE__ */ new Set();
23
+ const visit = (id) => {
24
+ if (modules.has(id) || !id.replaceAll("\\", "/").includes("/node_modules/")) return;
25
+ modules.add(id);
26
+ for (const imported of moduleDependencies?.(id) ?? []) visit(imported);
27
+ };
28
+ for (const output of outputs.values()) for (const id of Object.keys(output.modules ?? {})) if (id.replaceAll("\\", "/").includes(dependency)) visit(id);
29
+ owned.set(dependency, modules);
30
+ }
31
+ const graphReferences = (output) => {
32
+ const source = output.code ?? (typeof output.source === "string" ? output.source : output.source === void 0 ? "" : new TextDecoder().decode(output.source));
33
+ return [...references(output), ...[...outputs].filter(([fileName, candidate]) => candidate.type === "asset" && source.includes(fileName)).map(([fileName]) => fileName)];
34
+ };
35
+ const optionalRoots = /* @__PURE__ */ new Map();
36
+ for (const [fileName, output] of outputs) {
37
+ if (output.type !== "chunk") continue;
38
+ const owner = packageOwner(output, owned);
39
+ const facade = output.facadeModuleId?.replaceAll("\\", "/");
40
+ if (owner !== void 0 && (!output.isEntry || OPTIONAL_PACKAGES.some((dependency) => facade?.includes(dependency)))) optionalRoots.set(fileName, owner);
41
+ }
42
+ const eager = /* @__PURE__ */ new Set();
43
+ const visitEager = (fileName) => {
44
+ if (eager.has(fileName)) return;
45
+ eager.add(fileName);
46
+ const output = outputs.get(fileName);
47
+ if (output === void 0) return;
48
+ for (const reference of graphReferences(output)) if (!(optionalRoots.has(reference) && output.dynamicImports?.includes(reference))) visitEager(reference);
49
+ };
50
+ for (const [fileName, output] of outputs) if (fileName === "index.html" || output.type === "chunk" && output.isEntry && !optionalRoots.has(fileName)) visitEager(fileName);
51
+ const optional = /* @__PURE__ */ new Set();
52
+ const visitOptional = (fileName, owner) => {
53
+ if (eager.has(fileName) || optional.has(fileName)) return;
54
+ const output = outputs.get(fileName);
55
+ if (output === void 0) return;
56
+ if (output.type === "chunk") {
57
+ const ids = Object.keys(output.modules ?? {});
58
+ if (ids.length === 0 || !ids.every((id) => owned.get(owner)?.has(id))) {
59
+ visitEager(fileName);
60
+ return;
61
+ }
62
+ }
63
+ optional.add(fileName);
64
+ for (const reference of graphReferences(output)) {
65
+ const referencedRootOwner = optionalRoots.get(reference);
66
+ if (referencedRootOwner === void 0 || referencedRootOwner === owner) visitOptional(reference, owner);
67
+ }
68
+ };
69
+ for (const [fileName, owner] of optionalRoots) visitOptional(fileName, owner);
70
+ return [...optional].filter((fileName) => !eager.has(fileName) && !fileName.endsWith(".map")).map((fileName) => `/${fileName}`).sort();
71
+ }
72
+ /** Emits an authenticated v1 policy derived from Rollup's module and resource graph. */
73
+ function bundleAssetPolicyPlugin() {
74
+ return {
75
+ name: "po-bundle-asset-policy",
76
+ generateBundle(_options, bundle) {
77
+ const policy = {
78
+ version: _agimon_ai_po_core_bundleAssetPolicy.BUNDLE_ASSET_POLICY_VERSION,
79
+ optional: classifyOptionalBundleAssets(bundle, (id) => {
80
+ const info = this.getModuleInfo(id);
81
+ return info === null ? void 0 : [...info.importedIds, ...info.dynamicallyImportedIds];
82
+ })
83
+ };
84
+ this.emitFile({
85
+ type: "asset",
86
+ fileName: _agimon_ai_po_core_bundleAssetPolicy.BUNDLE_ASSET_POLICY_PATH.slice(1),
87
+ source: `${JSON.stringify(policy)}\n`
88
+ });
89
+ }
90
+ };
91
+ }
92
+ //#endregion
93
+ exports.bundleAssetPolicyPlugin = bundleAssetPolicyPlugin;
94
+ exports.classifyOptionalBundleAssets = classifyOptionalBundleAssets;
95
+
96
+ //# sourceMappingURL=bundleAssetPolicy.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundleAssetPolicy.cjs","names":["BUNDLE_ASSET_POLICY_VERSION","BUNDLE_ASSET_POLICY_PATH"],"sources":["../../../../src/builders/web/bundleAssetPolicy.ts"],"sourcesContent":["import {\n BUNDLE_ASSET_POLICY_PATH,\n BUNDLE_ASSET_POLICY_VERSION,\n type BundleAssetPolicy,\n} from '@agimon-ai/po-core/bundleAssetPolicy';\nimport type { Plugin } from 'vite';\n\nconst OPTIONAL_PACKAGES = ['/node_modules/mermaid/', '/node_modules/pdfjs-dist/'] as const;\n\ninterface PolicyOutput {\n type: 'asset' | 'chunk';\n isEntry?: boolean;\n facadeModuleId?: string | null;\n modules?: Record<string, unknown>;\n imports?: string[];\n dynamicImports?: string[];\n referencedFiles?: string[];\n code?: string;\n source?: string | Uint8Array;\n viteMetadata?: { importedAssets?: Set<string> };\n}\n\nfunction packageOwner(output: PolicyOutput, owned: ReadonlyMap<string, ReadonlySet<string>>): string | undefined {\n const ids = Object.keys(output.modules ?? {});\n return OPTIONAL_PACKAGES.find(\n (dependency) =>\n ids.some((id) => id.replaceAll('\\\\', '/').includes(dependency)) &&\n ids.every((id) => owned.get(dependency)?.has(id)),\n );\n}\n\nfunction references(output: PolicyOutput): string[] {\n if (output.type === 'asset') return [];\n return [\n ...(output.imports ?? []),\n ...(output.dynamicImports ?? []),\n ...(output.referencedFiles ?? []),\n ...(output.viteMetadata?.importedAssets ?? []),\n ];\n}\n\n/** Classifies only output owned exclusively by a known optional dependency graph. */\nexport function classifyOptionalBundleAssets(\n bundle: Readonly<Record<string, PolicyOutput>>,\n moduleDependencies?: (id: string) => readonly string[] | undefined,\n): string[] {\n const outputs = new Map(Object.entries(bundle));\n const owned = new Map<string, Set<string>>();\n for (const dependency of OPTIONAL_PACKAGES) {\n const modules = new Set<string>();\n const visit = (id: string): void => {\n // Application and unresolved virtual modules never inherit optional ownership.\n if (modules.has(id) || !id.replaceAll('\\\\', '/').includes('/node_modules/')) return;\n modules.add(id);\n for (const imported of moduleDependencies?.(id) ?? []) visit(imported);\n };\n for (const output of outputs.values()) {\n for (const id of Object.keys(output.modules ?? {})) {\n if (id.replaceAll('\\\\', '/').includes(dependency)) visit(id);\n }\n }\n owned.set(dependency, modules);\n }\n const graphReferences = (output: PolicyOutput): string[] => {\n const source =\n output.code ??\n (typeof output.source === 'string'\n ? output.source\n : output.source === undefined\n ? ''\n : new TextDecoder().decode(output.source));\n return [\n ...references(output),\n ...[...outputs]\n .filter(([fileName, candidate]) => candidate.type === 'asset' && source.includes(fileName))\n .map(([fileName]) => fileName),\n ];\n };\n const optionalRoots = new Map<string, string>();\n for (const [fileName, output] of outputs) {\n if (output.type !== 'chunk') continue;\n const owner = packageOwner(output, owned);\n const facade = output.facadeModuleId?.replaceAll('\\\\', '/');\n if (\n owner !== undefined &&\n (!output.isEntry || OPTIONAL_PACKAGES.some((dependency) => facade?.includes(dependency)))\n ) {\n optionalRoots.set(fileName, owner);\n }\n }\n\n const eager = new Set<string>();\n const visitEager = (fileName: string): void => {\n if (eager.has(fileName)) return;\n eager.add(fileName);\n const output = outputs.get(fileName);\n if (output === undefined) return;\n for (const reference of graphReferences(output)) {\n const deferredRoot = optionalRoots.has(reference) && output.dynamicImports?.includes(reference);\n if (!deferredRoot) visitEager(reference);\n }\n };\n for (const [fileName, output] of outputs) {\n if (fileName === 'index.html' || (output.type === 'chunk' && output.isEntry && !optionalRoots.has(fileName)))\n visitEager(fileName);\n }\n\n const optional = new Set<string>();\n const visitOptional = (fileName: string, owner: string): void => {\n if (eager.has(fileName) || optional.has(fileName)) return;\n const output = outputs.get(fileName);\n if (output === undefined) return;\n if (output.type === 'chunk') {\n const ids = Object.keys(output.modules ?? {});\n if (ids.length === 0 || !ids.every((id) => owned.get(owner)?.has(id))) {\n visitEager(fileName);\n return;\n }\n }\n optional.add(fileName);\n for (const reference of graphReferences(output)) {\n const referencedRootOwner = optionalRoots.get(reference);\n if (referencedRootOwner === undefined || referencedRootOwner === owner) visitOptional(reference, owner);\n }\n };\n for (const [fileName, owner] of optionalRoots) visitOptional(fileName, owner);\n return [...optional]\n .filter((fileName) => !eager.has(fileName) && !fileName.endsWith('.map'))\n .map((fileName) => `/${fileName}`)\n .sort();\n}\n\n/** Emits an authenticated v1 policy derived from Rollup's module and resource graph. */\nexport function bundleAssetPolicyPlugin(): Plugin {\n return {\n name: 'po-bundle-asset-policy',\n generateBundle(_options, bundle) {\n const policy: BundleAssetPolicy = {\n version: BUNDLE_ASSET_POLICY_VERSION,\n optional: classifyOptionalBundleAssets(bundle, (id) => {\n const info = this.getModuleInfo(id);\n return info === null ? undefined : [...info.importedIds, ...info.dynamicallyImportedIds];\n }),\n };\n this.emitFile({\n type: 'asset',\n fileName: BUNDLE_ASSET_POLICY_PATH.slice(1),\n source: `${JSON.stringify(policy)}\\n`,\n });\n },\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { Plugin } from "vite";
2
+ //#region src/builders/web/bundleAssetPolicy.d.ts
3
+ interface PolicyOutput {
4
+ type: 'asset' | 'chunk';
5
+ isEntry?: boolean;
6
+ facadeModuleId?: string | null;
7
+ modules?: Record<string, unknown>;
8
+ imports?: string[];
9
+ dynamicImports?: string[];
10
+ referencedFiles?: string[];
11
+ code?: string;
12
+ source?: string | Uint8Array;
13
+ viteMetadata?: {
14
+ importedAssets?: Set<string>;
15
+ };
16
+ }
17
+ /** Classifies only output owned exclusively by a known optional dependency graph. */
18
+ export declare function classifyOptionalBundleAssets(bundle: Readonly<Record<string, PolicyOutput>>, moduleDependencies?: (id: string) => readonly string[] | undefined): string[];
19
+ /** Emits an authenticated v1 policy derived from Rollup's module and resource graph. */
20
+ export declare function bundleAssetPolicyPlugin(): Plugin;
21
+ //#endregion
22
+ //# sourceMappingURL=bundleAssetPolicy.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundleAssetPolicy.d.mts","names":[],"sources":["../../../../src/builders/web/bundleAssetPolicy.ts"],"mappings":";;UASU;EACR;EACA;EACA;EACA,UAAU;EACV;EACA;EACA;EACA;EACA,kBAAkB;EAClB;IAAiB,iBAAiB;;;;wBAuBpB,6BACd,QAAQ,SAAS,eAAe,gBAChC,sBAAsB;;wBAyFR,2BAA2B"}
@@ -0,0 +1,95 @@
1
+ import { BUNDLE_ASSET_POLICY_PATH, BUNDLE_ASSET_POLICY_VERSION } from "@agimon-ai/po-core/bundleAssetPolicy";
2
+ //#region src/builders/web/bundleAssetPolicy.ts
3
+ const OPTIONAL_PACKAGES = ["/node_modules/mermaid/", "/node_modules/pdfjs-dist/"];
4
+ function packageOwner(output, owned) {
5
+ const ids = Object.keys(output.modules ?? {});
6
+ return OPTIONAL_PACKAGES.find((dependency) => ids.some((id) => id.replaceAll("\\", "/").includes(dependency)) && ids.every((id) => owned.get(dependency)?.has(id)));
7
+ }
8
+ function references(output) {
9
+ if (output.type === "asset") return [];
10
+ return [
11
+ ...output.imports ?? [],
12
+ ...output.dynamicImports ?? [],
13
+ ...output.referencedFiles ?? [],
14
+ ...output.viteMetadata?.importedAssets ?? []
15
+ ];
16
+ }
17
+ /** Classifies only output owned exclusively by a known optional dependency graph. */
18
+ function classifyOptionalBundleAssets(bundle, moduleDependencies) {
19
+ const outputs = new Map(Object.entries(bundle));
20
+ const owned = /* @__PURE__ */ new Map();
21
+ for (const dependency of OPTIONAL_PACKAGES) {
22
+ const modules = /* @__PURE__ */ new Set();
23
+ const visit = (id) => {
24
+ if (modules.has(id) || !id.replaceAll("\\", "/").includes("/node_modules/")) return;
25
+ modules.add(id);
26
+ for (const imported of moduleDependencies?.(id) ?? []) visit(imported);
27
+ };
28
+ for (const output of outputs.values()) for (const id of Object.keys(output.modules ?? {})) if (id.replaceAll("\\", "/").includes(dependency)) visit(id);
29
+ owned.set(dependency, modules);
30
+ }
31
+ const graphReferences = (output) => {
32
+ const source = output.code ?? (typeof output.source === "string" ? output.source : output.source === void 0 ? "" : new TextDecoder().decode(output.source));
33
+ return [...references(output), ...[...outputs].filter(([fileName, candidate]) => candidate.type === "asset" && source.includes(fileName)).map(([fileName]) => fileName)];
34
+ };
35
+ const optionalRoots = /* @__PURE__ */ new Map();
36
+ for (const [fileName, output] of outputs) {
37
+ if (output.type !== "chunk") continue;
38
+ const owner = packageOwner(output, owned);
39
+ const facade = output.facadeModuleId?.replaceAll("\\", "/");
40
+ if (owner !== void 0 && (!output.isEntry || OPTIONAL_PACKAGES.some((dependency) => facade?.includes(dependency)))) optionalRoots.set(fileName, owner);
41
+ }
42
+ const eager = /* @__PURE__ */ new Set();
43
+ const visitEager = (fileName) => {
44
+ if (eager.has(fileName)) return;
45
+ eager.add(fileName);
46
+ const output = outputs.get(fileName);
47
+ if (output === void 0) return;
48
+ for (const reference of graphReferences(output)) if (!(optionalRoots.has(reference) && output.dynamicImports?.includes(reference))) visitEager(reference);
49
+ };
50
+ for (const [fileName, output] of outputs) if (fileName === "index.html" || output.type === "chunk" && output.isEntry && !optionalRoots.has(fileName)) visitEager(fileName);
51
+ const optional = /* @__PURE__ */ new Set();
52
+ const visitOptional = (fileName, owner) => {
53
+ if (eager.has(fileName) || optional.has(fileName)) return;
54
+ const output = outputs.get(fileName);
55
+ if (output === void 0) return;
56
+ if (output.type === "chunk") {
57
+ const ids = Object.keys(output.modules ?? {});
58
+ if (ids.length === 0 || !ids.every((id) => owned.get(owner)?.has(id))) {
59
+ visitEager(fileName);
60
+ return;
61
+ }
62
+ }
63
+ optional.add(fileName);
64
+ for (const reference of graphReferences(output)) {
65
+ const referencedRootOwner = optionalRoots.get(reference);
66
+ if (referencedRootOwner === void 0 || referencedRootOwner === owner) visitOptional(reference, owner);
67
+ }
68
+ };
69
+ for (const [fileName, owner] of optionalRoots) visitOptional(fileName, owner);
70
+ return [...optional].filter((fileName) => !eager.has(fileName) && !fileName.endsWith(".map")).map((fileName) => `/${fileName}`).sort();
71
+ }
72
+ /** Emits an authenticated v1 policy derived from Rollup's module and resource graph. */
73
+ function bundleAssetPolicyPlugin() {
74
+ return {
75
+ name: "po-bundle-asset-policy",
76
+ generateBundle(_options, bundle) {
77
+ const policy = {
78
+ version: BUNDLE_ASSET_POLICY_VERSION,
79
+ optional: classifyOptionalBundleAssets(bundle, (id) => {
80
+ const info = this.getModuleInfo(id);
81
+ return info === null ? void 0 : [...info.importedIds, ...info.dynamicallyImportedIds];
82
+ })
83
+ };
84
+ this.emitFile({
85
+ type: "asset",
86
+ fileName: BUNDLE_ASSET_POLICY_PATH.slice(1),
87
+ source: `${JSON.stringify(policy)}\n`
88
+ });
89
+ }
90
+ };
91
+ }
92
+ //#endregion
93
+ export { bundleAssetPolicyPlugin, classifyOptionalBundleAssets };
94
+
95
+ //# sourceMappingURL=bundleAssetPolicy.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundleAssetPolicy.mjs","names":[],"sources":["../../../../src/builders/web/bundleAssetPolicy.ts"],"sourcesContent":["import {\n BUNDLE_ASSET_POLICY_PATH,\n BUNDLE_ASSET_POLICY_VERSION,\n type BundleAssetPolicy,\n} from '@agimon-ai/po-core/bundleAssetPolicy';\nimport type { Plugin } from 'vite';\n\nconst OPTIONAL_PACKAGES = ['/node_modules/mermaid/', '/node_modules/pdfjs-dist/'] as const;\n\ninterface PolicyOutput {\n type: 'asset' | 'chunk';\n isEntry?: boolean;\n facadeModuleId?: string | null;\n modules?: Record<string, unknown>;\n imports?: string[];\n dynamicImports?: string[];\n referencedFiles?: string[];\n code?: string;\n source?: string | Uint8Array;\n viteMetadata?: { importedAssets?: Set<string> };\n}\n\nfunction packageOwner(output: PolicyOutput, owned: ReadonlyMap<string, ReadonlySet<string>>): string | undefined {\n const ids = Object.keys(output.modules ?? {});\n return OPTIONAL_PACKAGES.find(\n (dependency) =>\n ids.some((id) => id.replaceAll('\\\\', '/').includes(dependency)) &&\n ids.every((id) => owned.get(dependency)?.has(id)),\n );\n}\n\nfunction references(output: PolicyOutput): string[] {\n if (output.type === 'asset') return [];\n return [\n ...(output.imports ?? []),\n ...(output.dynamicImports ?? []),\n ...(output.referencedFiles ?? []),\n ...(output.viteMetadata?.importedAssets ?? []),\n ];\n}\n\n/** Classifies only output owned exclusively by a known optional dependency graph. */\nexport function classifyOptionalBundleAssets(\n bundle: Readonly<Record<string, PolicyOutput>>,\n moduleDependencies?: (id: string) => readonly string[] | undefined,\n): string[] {\n const outputs = new Map(Object.entries(bundle));\n const owned = new Map<string, Set<string>>();\n for (const dependency of OPTIONAL_PACKAGES) {\n const modules = new Set<string>();\n const visit = (id: string): void => {\n // Application and unresolved virtual modules never inherit optional ownership.\n if (modules.has(id) || !id.replaceAll('\\\\', '/').includes('/node_modules/')) return;\n modules.add(id);\n for (const imported of moduleDependencies?.(id) ?? []) visit(imported);\n };\n for (const output of outputs.values()) {\n for (const id of Object.keys(output.modules ?? {})) {\n if (id.replaceAll('\\\\', '/').includes(dependency)) visit(id);\n }\n }\n owned.set(dependency, modules);\n }\n const graphReferences = (output: PolicyOutput): string[] => {\n const source =\n output.code ??\n (typeof output.source === 'string'\n ? output.source\n : output.source === undefined\n ? ''\n : new TextDecoder().decode(output.source));\n return [\n ...references(output),\n ...[...outputs]\n .filter(([fileName, candidate]) => candidate.type === 'asset' && source.includes(fileName))\n .map(([fileName]) => fileName),\n ];\n };\n const optionalRoots = new Map<string, string>();\n for (const [fileName, output] of outputs) {\n if (output.type !== 'chunk') continue;\n const owner = packageOwner(output, owned);\n const facade = output.facadeModuleId?.replaceAll('\\\\', '/');\n if (\n owner !== undefined &&\n (!output.isEntry || OPTIONAL_PACKAGES.some((dependency) => facade?.includes(dependency)))\n ) {\n optionalRoots.set(fileName, owner);\n }\n }\n\n const eager = new Set<string>();\n const visitEager = (fileName: string): void => {\n if (eager.has(fileName)) return;\n eager.add(fileName);\n const output = outputs.get(fileName);\n if (output === undefined) return;\n for (const reference of graphReferences(output)) {\n const deferredRoot = optionalRoots.has(reference) && output.dynamicImports?.includes(reference);\n if (!deferredRoot) visitEager(reference);\n }\n };\n for (const [fileName, output] of outputs) {\n if (fileName === 'index.html' || (output.type === 'chunk' && output.isEntry && !optionalRoots.has(fileName)))\n visitEager(fileName);\n }\n\n const optional = new Set<string>();\n const visitOptional = (fileName: string, owner: string): void => {\n if (eager.has(fileName) || optional.has(fileName)) return;\n const output = outputs.get(fileName);\n if (output === undefined) return;\n if (output.type === 'chunk') {\n const ids = Object.keys(output.modules ?? {});\n if (ids.length === 0 || !ids.every((id) => owned.get(owner)?.has(id))) {\n visitEager(fileName);\n return;\n }\n }\n optional.add(fileName);\n for (const reference of graphReferences(output)) {\n const referencedRootOwner = optionalRoots.get(reference);\n if (referencedRootOwner === undefined || referencedRootOwner === owner) visitOptional(reference, owner);\n }\n };\n for (const [fileName, owner] of optionalRoots) visitOptional(fileName, owner);\n return [...optional]\n .filter((fileName) => !eager.has(fileName) && !fileName.endsWith('.map'))\n .map((fileName) => `/${fileName}`)\n .sort();\n}\n\n/** Emits an authenticated v1 policy derived from Rollup's module and resource graph. */\nexport function bundleAssetPolicyPlugin(): Plugin {\n return {\n name: 'po-bundle-asset-policy',\n generateBundle(_options, bundle) {\n const policy: BundleAssetPolicy = {\n version: BUNDLE_ASSET_POLICY_VERSION,\n optional: classifyOptionalBundleAssets(bundle, (id) => {\n const info = this.getModuleInfo(id);\n return info === null ? undefined : [...info.importedIds, ...info.dynamicallyImportedIds];\n }),\n };\n this.emitFile({\n type: 'asset',\n fileName: BUNDLE_ASSET_POLICY_PATH.slice(1),\n source: `${JSON.stringify(policy)}\\n`,\n });\n },\n };\n}\n"],"mappings":"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"}