opkg 0.9.2 → 0.9.4
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.
- package/.claude/agents/code-reviewer.md +171 -0
- package/.claude/commands/commit-push-pr.md +20 -0
- package/.claude/commands/{specs/read.md → read-specs.md} +1 -1
- package/.claude/commands/{specs/update.md → update-specs.md} +4 -0
- package/.claude/skills/code-review-excellence/SKILL.md +538 -0
- package/README.md +2 -2
- package/package.json +3 -1
- package/packages/cli/dist/add-IJAPFHIX.js +624 -0
- package/packages/cli/dist/add-IJAPFHIX.js.map +7 -0
- package/packages/cli/dist/add-LLUNFLJI.js +624 -0
- package/packages/cli/dist/add-LLUNFLJI.js.map +7 -0
- package/packages/cli/dist/add-U44SL3OR.js +624 -0
- package/packages/cli/dist/add-U44SL3OR.js.map +7 -0
- package/packages/cli/dist/chunk-23VBP5L6.js +371 -0
- package/packages/cli/dist/chunk-23VBP5L6.js.map +7 -0
- package/packages/cli/dist/chunk-2SVHLF5C.js +1419 -0
- package/packages/cli/dist/chunk-2SVHLF5C.js.map +7 -0
- package/packages/cli/dist/chunk-37256POU.js +99 -0
- package/packages/cli/dist/chunk-37256POU.js.map +7 -0
- package/packages/cli/dist/chunk-3PZRVA6O.js +196 -0
- package/packages/cli/dist/chunk-3PZRVA6O.js.map +7 -0
- package/packages/cli/dist/chunk-427DCURL.js +155 -0
- package/packages/cli/dist/chunk-427DCURL.js.map +7 -0
- package/packages/cli/dist/chunk-4B5HJLP2.js +48 -0
- package/packages/cli/dist/chunk-4B5HJLP2.js.map +7 -0
- package/packages/cli/dist/chunk-4OWT3YEG.js +413 -0
- package/packages/cli/dist/chunk-4OWT3YEG.js.map +7 -0
- package/packages/cli/dist/chunk-4RIBTBXI.js +568 -0
- package/packages/cli/dist/chunk-4RIBTBXI.js.map +7 -0
- package/packages/cli/dist/chunk-4X2EJHJN.js +63 -0
- package/packages/cli/dist/chunk-4X2EJHJN.js.map +7 -0
- package/packages/cli/dist/chunk-6CYW66HD.js +1136 -0
- package/packages/cli/dist/chunk-6CYW66HD.js.map +7 -0
- package/packages/cli/dist/chunk-6DITYAFA.js +172 -0
- package/packages/cli/dist/chunk-6DITYAFA.js.map +7 -0
- package/packages/cli/dist/chunk-7KEAKEVZ.js +568 -0
- package/packages/cli/dist/chunk-7KEAKEVZ.js.map +7 -0
- package/packages/cli/dist/chunk-ABFUD25D.js +61 -0
- package/packages/cli/dist/chunk-ABFUD25D.js.map +7 -0
- package/packages/cli/dist/chunk-AR7GJCG6.js +274 -0
- package/packages/cli/dist/chunk-AR7GJCG6.js.map +7 -0
- package/packages/cli/dist/chunk-AYTGQCXH.js +86 -0
- package/packages/cli/dist/chunk-AYTGQCXH.js.map +7 -0
- package/packages/cli/dist/chunk-BROJ6OUT.js +631 -0
- package/packages/cli/dist/chunk-BROJ6OUT.js.map +7 -0
- package/packages/cli/dist/chunk-BVVSU7QD.js +23 -0
- package/packages/cli/dist/chunk-BVVSU7QD.js.map +7 -0
- package/packages/cli/dist/chunk-C6FY55UP.js +108 -0
- package/packages/cli/dist/chunk-C6FY55UP.js.map +7 -0
- package/packages/cli/dist/chunk-CVA64SXK.js +1136 -0
- package/packages/cli/dist/chunk-CVA64SXK.js.map +7 -0
- package/packages/cli/dist/chunk-D3O7LY2Q.js +1151 -0
- package/packages/cli/dist/chunk-D3O7LY2Q.js.map +7 -0
- package/packages/cli/dist/chunk-D6LEPODL.js +413 -0
- package/packages/cli/dist/chunk-D6LEPODL.js.map +7 -0
- package/packages/cli/dist/chunk-DEC24S7E.js +186 -0
- package/packages/cli/dist/chunk-DEC24S7E.js.map +7 -0
- package/packages/cli/dist/chunk-FMVVJH5M.js +371 -0
- package/packages/cli/dist/chunk-FMVVJH5M.js.map +7 -0
- package/packages/cli/dist/chunk-GDVFS3YP.js +130 -0
- package/packages/cli/dist/chunk-GDVFS3YP.js.map +7 -0
- package/packages/cli/dist/chunk-GEP2G5HF.js +31 -0
- package/packages/cli/dist/chunk-GEP2G5HF.js.map +7 -0
- package/packages/cli/dist/chunk-GSWHZBT2.js +62 -0
- package/packages/cli/dist/chunk-GSWHZBT2.js.map +7 -0
- package/packages/cli/dist/chunk-HTYHJA3B.js +61 -0
- package/packages/cli/dist/chunk-HTYHJA3B.js.map +7 -0
- package/packages/cli/dist/chunk-HYKYECAE.js +222 -0
- package/packages/cli/dist/chunk-HYKYECAE.js.map +7 -0
- package/packages/cli/dist/chunk-I7FEAHB4.js +100 -0
- package/packages/cli/dist/chunk-I7FEAHB4.js.map +7 -0
- package/packages/cli/dist/chunk-IHVZ5AUJ.js +107 -0
- package/packages/cli/dist/chunk-IHVZ5AUJ.js.map +7 -0
- package/packages/cli/dist/chunk-KI7FDU3H.js +99 -0
- package/packages/cli/dist/chunk-KI7FDU3H.js.map +7 -0
- package/packages/cli/dist/chunk-L5GRJQBS.js +32 -0
- package/packages/cli/dist/chunk-L5GRJQBS.js.map +7 -0
- package/packages/cli/dist/chunk-LHEAUDJL.js +302 -0
- package/packages/cli/dist/chunk-LHEAUDJL.js.map +7 -0
- package/packages/cli/dist/chunk-MIURCESJ.js +48 -0
- package/packages/cli/dist/chunk-MIURCESJ.js.map +7 -0
- package/packages/cli/dist/chunk-N43IXOND.js +732 -0
- package/packages/cli/dist/chunk-N43IXOND.js.map +7 -0
- package/packages/cli/dist/chunk-OUZRMGPV.js +274 -0
- package/packages/cli/dist/chunk-OUZRMGPV.js.map +7 -0
- package/packages/cli/dist/chunk-PSQXKAL4.js +371 -0
- package/packages/cli/dist/chunk-PSQXKAL4.js.map +7 -0
- package/packages/cli/dist/chunk-PUDRKDVZ.js +1419 -0
- package/packages/cli/dist/chunk-PUDRKDVZ.js.map +7 -0
- package/packages/cli/dist/chunk-RAKMX654.js +631 -0
- package/packages/cli/dist/chunk-RAKMX654.js.map +7 -0
- package/packages/cli/dist/chunk-RSFLK2TP.js +195 -0
- package/packages/cli/dist/chunk-RSFLK2TP.js.map +7 -0
- package/packages/cli/dist/chunk-S26PR2BS.js +99 -0
- package/packages/cli/dist/chunk-S26PR2BS.js.map +7 -0
- package/packages/cli/dist/chunk-U7FW7SXX.js +568 -0
- package/packages/cli/dist/chunk-U7FW7SXX.js.map +7 -0
- package/packages/cli/dist/chunk-VKM6K5TN.js +413 -0
- package/packages/cli/dist/chunk-VKM6K5TN.js.map +7 -0
- package/packages/cli/dist/chunk-VKNJG4JN.js +253 -0
- package/packages/cli/dist/chunk-VKNJG4JN.js.map +7 -0
- package/packages/cli/dist/chunk-VQ2KY6CK.js +113 -0
- package/packages/cli/dist/chunk-VQ2KY6CK.js.map +7 -0
- package/packages/cli/dist/chunk-VQDTXLOX.js +1312 -0
- package/packages/cli/dist/chunk-VQDTXLOX.js.map +7 -0
- package/packages/cli/dist/chunk-VXNS3X5O.js +60 -0
- package/packages/cli/dist/chunk-VXNS3X5O.js.map +7 -0
- package/packages/cli/dist/chunk-WF7H2YDU.js +376 -0
- package/packages/cli/dist/chunk-WF7H2YDU.js.map +7 -0
- package/packages/cli/dist/chunk-WNRXZLWW.js +266 -0
- package/packages/cli/dist/chunk-WNRXZLWW.js.map +7 -0
- package/packages/cli/dist/chunk-WT4VVCXM.js +1121 -0
- package/packages/cli/dist/chunk-WT4VVCXM.js.map +7 -0
- package/packages/cli/dist/configure-3AZUMDJZ.js +107 -0
- package/packages/cli/dist/configure-3AZUMDJZ.js.map +7 -0
- package/packages/cli/dist/configure-D722JQOD.js +107 -0
- package/packages/cli/dist/configure-D722JQOD.js.map +7 -0
- package/packages/cli/dist/configure-IU5H7XD6.js +107 -0
- package/packages/cli/dist/configure-IU5H7XD6.js.map +7 -0
- package/packages/cli/dist/file-format-detector-PXCIAKTK.js +22 -0
- package/packages/cli/dist/file-format-detector-PXCIAKTK.js.map +7 -0
- package/packages/cli/dist/index.js +17 -17
- package/packages/cli/dist/install-EZNWMLJR.js +7581 -0
- package/packages/cli/dist/install-EZNWMLJR.js.map +7 -0
- package/packages/cli/dist/install-F5ANFUBX.js +7577 -0
- package/packages/cli/dist/install-F5ANFUBX.js.map +7 -0
- package/packages/cli/dist/install-JSXEPPC2.js +7104 -0
- package/packages/cli/dist/install-JSXEPPC2.js.map +7 -0
- package/packages/cli/dist/install-QHEBX7JH.js +7101 -0
- package/packages/cli/dist/install-QHEBX7JH.js.map +7 -0
- package/packages/cli/dist/list-DMOUATYI.js +327 -0
- package/packages/cli/dist/list-DMOUATYI.js.map +7 -0
- package/packages/cli/dist/list-UESSCB7Y.js +327 -0
- package/packages/cli/dist/list-UESSCB7Y.js.map +7 -0
- package/packages/cli/dist/list-XR7RSJFS.js +327 -0
- package/packages/cli/dist/list-XR7RSJFS.js.map +7 -0
- package/packages/cli/dist/login-EYZ2SOYZ.js +150 -0
- package/packages/cli/dist/login-EYZ2SOYZ.js.map +7 -0
- package/packages/cli/dist/login-JWCSTAEU.js +150 -0
- package/packages/cli/dist/login-JWCSTAEU.js.map +7 -0
- package/packages/cli/dist/login-NRKHXZKM.js +150 -0
- package/packages/cli/dist/login-NRKHXZKM.js.map +7 -0
- package/packages/cli/dist/logout-HDMYRXIE.js +40 -0
- package/packages/cli/dist/logout-HDMYRXIE.js.map +7 -0
- package/packages/cli/dist/logout-SYHXCVCQ.js +40 -0
- package/packages/cli/dist/logout-SYHXCVCQ.js.map +7 -0
- package/packages/cli/dist/logout-X3XUUOH5.js +40 -0
- package/packages/cli/dist/logout-X3XUUOH5.js.map +7 -0
- package/packages/cli/dist/new-3LTFKDTQ.js +277 -0
- package/packages/cli/dist/new-3LTFKDTQ.js.map +7 -0
- package/packages/cli/dist/new-F46OSD72.js +277 -0
- package/packages/cli/dist/new-F46OSD72.js.map +7 -0
- package/packages/cli/dist/new-OPCCLNL2.js +277 -0
- package/packages/cli/dist/new-OPCCLNL2.js.map +7 -0
- package/packages/cli/dist/package-marker-detector-T5O5YD2E.js +80 -0
- package/packages/cli/dist/package-marker-detector-T5O5YD2E.js.map +7 -0
- package/packages/cli/dist/package-yml-QWZIJDYU.js +16 -0
- package/packages/cli/dist/package-yml-QWZIJDYU.js.map +7 -0
- package/packages/cli/dist/plugin-naming-YP2I4NPA.js +29 -0
- package/packages/cli/dist/plugin-naming-YP2I4NPA.js.map +7 -0
- package/packages/cli/dist/publish-4H43PCSG.js +619 -0
- package/packages/cli/dist/publish-4H43PCSG.js.map +7 -0
- package/packages/cli/dist/publish-RULKLNUX.js +619 -0
- package/packages/cli/dist/publish-RULKLNUX.js.map +7 -0
- package/packages/cli/dist/publish-URWY2P3E.js +619 -0
- package/packages/cli/dist/publish-URWY2P3E.js.map +7 -0
- package/packages/cli/dist/remove-BD52BHR2.js +542 -0
- package/packages/cli/dist/remove-BD52BHR2.js.map +7 -0
- package/packages/cli/dist/remove-G5NRC7LD.js +542 -0
- package/packages/cli/dist/remove-G5NRC7LD.js.map +7 -0
- package/packages/cli/dist/remove-TC3FQUYQ.js +542 -0
- package/packages/cli/dist/remove-TC3FQUYQ.js.map +7 -0
- package/packages/cli/dist/resource-discoverer-4X4RY43E.js +17 -0
- package/packages/cli/dist/resource-discoverer-4X4RY43E.js.map +7 -0
- package/packages/cli/dist/save-24TESYKI.js +1728 -0
- package/packages/cli/dist/save-24TESYKI.js.map +7 -0
- package/packages/cli/dist/save-N3QWF2WN.js +1728 -0
- package/packages/cli/dist/save-N3QWF2WN.js.map +7 -0
- package/packages/cli/dist/save-P2U67DTV.js +1728 -0
- package/packages/cli/dist/save-P2U67DTV.js.map +7 -0
- package/packages/cli/dist/search-ABROK3UO.js +157 -0
- package/packages/cli/dist/search-ABROK3UO.js.map +7 -0
- package/packages/cli/dist/search-WVFXFNAV.js +157 -0
- package/packages/cli/dist/search-WVFXFNAV.js.map +7 -0
- package/packages/cli/dist/search-YQN2Q2SO.js +157 -0
- package/packages/cli/dist/search-YQN2Q2SO.js.map +7 -0
- package/packages/cli/dist/set-DCWF73F6.js +251 -0
- package/packages/cli/dist/set-DCWF73F6.js.map +7 -0
- package/packages/cli/dist/set-GJEG2F6Y.js +251 -0
- package/packages/cli/dist/set-GJEG2F6Y.js.map +7 -0
- package/packages/cli/dist/set-NGM2FIKF.js +251 -0
- package/packages/cli/dist/set-NGM2FIKF.js.map +7 -0
- package/packages/cli/dist/uninstall-3CJQMTYH.js +539 -0
- package/packages/cli/dist/uninstall-3CJQMTYH.js.map +7 -0
- package/packages/cli/dist/uninstall-Q3CP4UN5.js +539 -0
- package/packages/cli/dist/uninstall-Q3CP4UN5.js.map +7 -0
- package/packages/cli/dist/uninstall-QU5OMEEC.js +539 -0
- package/packages/cli/dist/uninstall-QU5OMEEC.js.map +7 -0
- package/packages/cli/dist/unpublish-GHJQYC4S.js +245 -0
- package/packages/cli/dist/unpublish-GHJQYC4S.js.map +7 -0
- package/packages/cli/dist/unpublish-L2CYMK4B.js +245 -0
- package/packages/cli/dist/unpublish-L2CYMK4B.js.map +7 -0
- package/packages/cli/dist/unpublish-VBTNTMS5.js +245 -0
- package/packages/cli/dist/unpublish-VBTNTMS5.js.map +7 -0
- package/packages/cli/dist/view-MXRBMXOG.js +488 -0
- package/packages/cli/dist/view-MXRBMXOG.js.map +7 -0
- package/packages/cli/dist/view-NMND7SAW.js +488 -0
- package/packages/cli/dist/view-NMND7SAW.js.map +7 -0
- package/packages/cli/dist/view-RPQRDSYB.js +488 -0
- package/packages/cli/dist/view-RPQRDSYB.js.map +7 -0
- package/packages/cli/package.json +2 -0
- package/packages/core/dist/constants/index.d.ts +9 -0
- package/packages/core/dist/constants/index.d.ts.map +1 -1
- package/packages/core/dist/constants/index.js +12 -0
- package/packages/core/dist/constants/index.js.map +1 -1
- package/packages/core/dist/core/dependency-resolver/index.d.ts +2 -10
- package/packages/core/dist/core/dependency-resolver/index.d.ts.map +1 -1
- package/packages/core/dist/core/dependency-resolver/index.js +3 -14
- package/packages/core/dist/core/dependency-resolver/index.js.map +1 -1
- package/packages/core/dist/core/install/base-detector.d.ts +2 -1
- package/packages/core/dist/core/install/base-detector.d.ts.map +1 -1
- package/packages/core/dist/core/install/base-detector.js +54 -1
- package/packages/core/dist/core/install/base-detector.js.map +1 -1
- package/packages/core/dist/core/install/conflicts/file-conflict-resolver.d.ts +7 -5
- package/packages/core/dist/core/install/conflicts/file-conflict-resolver.d.ts.map +1 -1
- package/packages/core/dist/core/install/conflicts/file-conflict-resolver.js +25 -9
- package/packages/core/dist/core/install/conflicts/file-conflict-resolver.js.map +1 -1
- package/packages/core/dist/core/install/flow-index-installer.d.ts +2 -1
- package/packages/core/dist/core/install/flow-index-installer.d.ts.map +1 -1
- package/packages/core/dist/core/install/flow-index-installer.js +19 -4
- package/packages/core/dist/core/install/flow-index-installer.js.map +1 -1
- package/packages/core/dist/core/install/input-classifier-base.js +3 -3
- package/packages/core/dist/core/install/input-classifier-base.js.map +1 -1
- package/packages/core/dist/core/install/install-reporting.d.ts.map +1 -1
- package/packages/core/dist/core/install/install-reporting.js +7 -9
- package/packages/core/dist/core/install/install-reporting.js.map +1 -1
- package/packages/core/dist/core/install/list-handler.d.ts.map +1 -1
- package/packages/core/dist/core/install/list-handler.js +3 -0
- package/packages/core/dist/core/install/list-handler.js.map +1 -1
- package/packages/core/dist/core/install/marketplace-handler.d.ts.map +1 -1
- package/packages/core/dist/core/install/marketplace-handler.js.map +1 -1
- package/packages/core/dist/core/install/operations/conflict-handler.d.ts +2 -1
- package/packages/core/dist/core/install/operations/conflict-handler.d.ts.map +1 -1
- package/packages/core/dist/core/install/operations/conflict-handler.js +2 -2
- package/packages/core/dist/core/install/operations/conflict-handler.js.map +1 -1
- package/packages/core/dist/core/install/operations/installation-executor.d.ts +3 -0
- package/packages/core/dist/core/install/operations/installation-executor.d.ts.map +1 -1
- package/packages/core/dist/core/install/operations/installation-executor.js +39 -22
- package/packages/core/dist/core/install/operations/installation-executor.js.map +1 -1
- package/packages/core/dist/core/install/orchestrator/orchestrator.d.ts +7 -3
- package/packages/core/dist/core/install/orchestrator/orchestrator.d.ts.map +1 -1
- package/packages/core/dist/core/install/orchestrator/orchestrator.js +193 -93
- package/packages/core/dist/core/install/orchestrator/orchestrator.js.map +1 -1
- package/packages/core/dist/core/install/orchestrator/strategies/git-strategy.d.ts +1 -0
- package/packages/core/dist/core/install/orchestrator/strategies/git-strategy.d.ts.map +1 -1
- package/packages/core/dist/core/install/orchestrator/strategies/git-strategy.js +11 -24
- package/packages/core/dist/core/install/orchestrator/strategies/git-strategy.js.map +1 -1
- package/packages/core/dist/core/install/orchestrator/strategies/path-strategy.d.ts +2 -0
- package/packages/core/dist/core/install/orchestrator/strategies/path-strategy.d.ts.map +1 -1
- package/packages/core/dist/core/install/orchestrator/strategies/path-strategy.js +14 -14
- package/packages/core/dist/core/install/orchestrator/strategies/path-strategy.js.map +1 -1
- package/packages/core/dist/core/install/orchestrator/strategies/registry-strategy.d.ts +7 -0
- package/packages/core/dist/core/install/orchestrator/strategies/registry-strategy.d.ts.map +1 -1
- package/packages/core/dist/core/install/orchestrator/strategies/registry-strategy.js +28 -0
- package/packages/core/dist/core/install/orchestrator/strategies/registry-strategy.js.map +1 -1
- package/packages/core/dist/core/install/orchestrator/types.d.ts +2 -0
- package/packages/core/dist/core/install/orchestrator/types.d.ts.map +1 -1
- package/packages/core/dist/core/install/path-package-loader.d.ts.map +1 -1
- package/packages/core/dist/core/install/path-package-loader.js +20 -1
- package/packages/core/dist/core/install/path-package-loader.js.map +1 -1
- package/packages/core/dist/core/install/platform-resolution.d.ts +3 -0
- package/packages/core/dist/core/install/platform-resolution.d.ts.map +1 -1
- package/packages/core/dist/core/install/platform-resolution.js +5 -2
- package/packages/core/dist/core/install/platform-resolution.js.map +1 -1
- package/packages/core/dist/core/install/preprocessing/context-population.d.ts +18 -0
- package/packages/core/dist/core/install/preprocessing/context-population.d.ts.map +1 -0
- package/packages/core/dist/core/install/preprocessing/context-population.js +36 -0
- package/packages/core/dist/core/install/preprocessing/context-population.js.map +1 -0
- package/packages/core/dist/core/install/preprocessing/convenience-preprocessor.d.ts +23 -0
- package/packages/core/dist/core/install/preprocessing/convenience-preprocessor.d.ts.map +1 -1
- package/packages/core/dist/core/install/preprocessing/convenience-preprocessor.js +44 -0
- package/packages/core/dist/core/install/preprocessing/convenience-preprocessor.js.map +1 -1
- package/packages/core/dist/core/install/sources/git-source.d.ts.map +1 -1
- package/packages/core/dist/core/install/sources/git-source.js +67 -4
- package/packages/core/dist/core/install/sources/git-source.js.map +1 -1
- package/packages/core/dist/core/install/sources/path-source.d.ts.map +1 -1
- package/packages/core/dist/core/install/sources/path-source.js +8 -0
- package/packages/core/dist/core/install/sources/path-source.js.map +1 -1
- package/packages/core/dist/core/install/strategies/flow-based-strategy.d.ts.map +1 -1
- package/packages/core/dist/core/install/strategies/flow-based-strategy.js +12 -5
- package/packages/core/dist/core/install/strategies/flow-based-strategy.js.map +1 -1
- package/packages/core/dist/core/install/strategies/types.d.ts +11 -1
- package/packages/core/dist/core/install/strategies/types.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/context-builders.d.ts +5 -0
- package/packages/core/dist/core/install/unified/context-builders.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/context-builders.js +12 -0
- package/packages/core/dist/core/install/unified/context-builders.js.map +1 -1
- package/packages/core/dist/core/install/unified/context-helpers.d.ts +0 -4
- package/packages/core/dist/core/install/unified/context-helpers.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/context-helpers.js +0 -24
- package/packages/core/dist/core/install/unified/context-helpers.js.map +1 -1
- package/packages/core/dist/core/install/unified/index.d.ts +1 -1
- package/packages/core/dist/core/install/unified/index.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/index.js +1 -1
- package/packages/core/dist/core/install/unified/index.js.map +1 -1
- package/packages/core/dist/core/install/unified/multi-context-pipeline.d.ts +6 -0
- package/packages/core/dist/core/install/unified/multi-context-pipeline.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/multi-context-pipeline.js +11 -4
- package/packages/core/dist/core/install/unified/multi-context-pipeline.js.map +1 -1
- package/packages/core/dist/core/install/unified/phases/conflicts.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/phases/conflicts.js +1 -1
- package/packages/core/dist/core/install/unified/phases/conflicts.js.map +1 -1
- package/packages/core/dist/core/install/unified/phases/execute.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/phases/execute.js +5 -5
- package/packages/core/dist/core/install/unified/phases/execute.js.map +1 -1
- package/packages/core/dist/core/install/unified/phases/load-package.js +3 -3
- package/packages/core/dist/core/install/unified/phases/load-package.js.map +1 -1
- package/packages/core/dist/core/install/unified/phases/report.js +1 -1
- package/packages/core/dist/core/install/unified/phases/report.js.map +1 -1
- package/packages/core/dist/core/install/unified/pipeline.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/pipeline.js +7 -10
- package/packages/core/dist/core/install/unified/pipeline.js.map +1 -1
- package/packages/core/dist/core/install/wave-resolver/content-root-cache.d.ts +24 -0
- package/packages/core/dist/core/install/wave-resolver/content-root-cache.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/content-root-cache.js +71 -0
- package/packages/core/dist/core/install/wave-resolver/content-root-cache.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/context-builder.d.ts +39 -0
- package/packages/core/dist/core/install/wave-resolver/context-builder.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/context-builder.js +148 -0
- package/packages/core/dist/core/install/wave-resolver/context-builder.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/fetcher.d.ts +49 -0
- package/packages/core/dist/core/install/wave-resolver/fetcher.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/fetcher.js +221 -0
- package/packages/core/dist/core/install/wave-resolver/fetcher.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/index-updater.d.ts +23 -0
- package/packages/core/dist/core/install/wave-resolver/index-updater.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/index-updater.js +87 -0
- package/packages/core/dist/core/install/wave-resolver/index-updater.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/index-write-collector.d.ts +101 -0
- package/packages/core/dist/core/install/wave-resolver/index-write-collector.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/index-write-collector.js +194 -0
- package/packages/core/dist/core/install/wave-resolver/index-write-collector.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/index.d.ts +17 -0
- package/packages/core/dist/core/install/wave-resolver/index.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/index.js +16 -0
- package/packages/core/dist/core/install/wave-resolver/index.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/manifest-reader.d.ts +34 -0
- package/packages/core/dist/core/install/wave-resolver/manifest-reader.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/manifest-reader.js +112 -0
- package/packages/core/dist/core/install/wave-resolver/manifest-reader.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/types.d.ts +210 -0
- package/packages/core/dist/core/install/wave-resolver/types.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/types.js +6 -0
- package/packages/core/dist/core/install/wave-resolver/types.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/version-solver.d.ts +65 -0
- package/packages/core/dist/core/install/wave-resolver/version-solver.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/version-solver.js +166 -0
- package/packages/core/dist/core/install/wave-resolver/version-solver.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/wave-engine.d.ts +16 -0
- package/packages/core/dist/core/install/wave-resolver/wave-engine.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/wave-engine.js +337 -0
- package/packages/core/dist/core/install/wave-resolver/wave-engine.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/wave-installer.d.ts +50 -0
- package/packages/core/dist/core/install/wave-resolver/wave-installer.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/wave-installer.js +246 -0
- package/packages/core/dist/core/install/wave-resolver/wave-installer.js.map +1 -0
- package/packages/core/dist/core/ports/buffered-output.d.ts +36 -0
- package/packages/core/dist/core/ports/buffered-output.d.ts.map +1 -0
- package/packages/core/dist/core/ports/buffered-output.js +89 -0
- package/packages/core/dist/core/ports/buffered-output.js.map +1 -0
- package/packages/core/dist/core/ports/resolve.d.ts +0 -13
- package/packages/core/dist/core/ports/resolve.d.ts.map +1 -1
- package/packages/core/dist/core/ports/resolve.js +0 -28
- package/packages/core/dist/core/ports/resolve.js.map +1 -1
- package/packages/core/dist/core/remove/removal-confirmation.d.ts +4 -1
- package/packages/core/dist/core/remove/removal-confirmation.d.ts.map +1 -1
- package/packages/core/dist/core/remove/removal-confirmation.js +5 -4
- package/packages/core/dist/core/remove/removal-confirmation.js.map +1 -1
- package/packages/core/dist/core/remove/remove-from-source-pipeline.d.ts.map +1 -1
- package/packages/core/dist/core/remove/remove-from-source-pipeline.js +1 -10
- package/packages/core/dist/core/remove/remove-from-source-pipeline.js.map +1 -1
- package/packages/core/dist/core/uninstall/uninstall-executor.js +1 -1
- package/packages/core/dist/core/uninstall/uninstall-executor.js.map +1 -1
- package/packages/core/dist/core/uninstall/uninstall-reporter.d.ts +2 -2
- package/packages/core/dist/core/uninstall/uninstall-reporter.d.ts.map +1 -1
- package/packages/core/dist/core/uninstall/uninstall-reporter.js +4 -4
- package/packages/core/dist/core/uninstall/uninstall-reporter.js.map +1 -1
- package/packages/core/dist/index.d.ts +1 -1
- package/packages/core/dist/index.d.ts.map +1 -1
- package/packages/core/dist/types/execution-context.d.ts +40 -10
- package/packages/core/dist/types/execution-context.d.ts.map +1 -1
- package/packages/core/dist/utils/concurrency-pool.d.ts +34 -0
- package/packages/core/dist/utils/concurrency-pool.d.ts.map +1 -0
- package/packages/core/dist/utils/concurrency-pool.js +58 -0
- package/packages/core/dist/utils/concurrency-pool.js.map +1 -0
- package/packages/core/dist/utils/plugin-naming.d.ts +11 -3
- package/packages/core/dist/utils/plugin-naming.d.ts.map +1 -1
- package/packages/core/dist/utils/plugin-naming.js +27 -7
- package/packages/core/dist/utils/plugin-naming.js.map +1 -1
- package/plans/wave-resolver.md +254 -0
- package/.claude/agents/essentials/code-simplifier.md +0 -52
- package/.claude/commands/essentials/cleanup.md +0 -1
- package/.claude/commands/essentials/review.md +0 -8
- package/.claude/commands/git/commit.md +0 -5
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-source-type metadata fetchers for the wave resolver.
|
|
3
|
+
* Routes dependency declarations to the appropriate loader (registry, git, path)
|
|
4
|
+
* and returns standardized FetchResults including child dependencies.
|
|
5
|
+
*/
|
|
6
|
+
import { selectInstallVersionUnified } from '../version-selection.js';
|
|
7
|
+
import { resolvePackageContentRoot } from '../local-source-resolution.js';
|
|
8
|
+
import { ensureContentRoot } from './content-root-cache.js';
|
|
9
|
+
import { normalizeGitUrl } from '../../../utils/git-url-parser.js';
|
|
10
|
+
import { resolveDeclaredPath } from '../../../utils/path-resolution.js';
|
|
11
|
+
import { readManifestAtPath, extractDependencies } from './manifest-reader.js';
|
|
12
|
+
/**
|
|
13
|
+
* Compute a canonical dependency ID for wave-resolver deduplication.
|
|
14
|
+
*
|
|
15
|
+
* Registry deps use name-only keys (`registry:<name>`) so that the same
|
|
16
|
+
* package referenced from multiple parents with different version constraints
|
|
17
|
+
* merges into a single node for version solving.
|
|
18
|
+
*/
|
|
19
|
+
export function computeWaveId(declaration, declaredInDir) {
|
|
20
|
+
const depName = String(declaration.name ?? '').trim();
|
|
21
|
+
if (declaration.url) {
|
|
22
|
+
const [gitUrlRaw, embeddedRef] = declaration.url.includes('#')
|
|
23
|
+
? declaration.url.split('#', 2)
|
|
24
|
+
: [declaration.url, undefined];
|
|
25
|
+
const ref = embeddedRef || declaration.ref || 'default';
|
|
26
|
+
const normalizedUrl = normalizeGitUrl(gitUrlRaw);
|
|
27
|
+
let resourcePath = declaration.path ?? '';
|
|
28
|
+
if (depName.startsWith('gh@')) {
|
|
29
|
+
const tail = depName.slice(3);
|
|
30
|
+
const parts = tail.split('/').filter(Boolean);
|
|
31
|
+
if (parts.length > 2 && !resourcePath) {
|
|
32
|
+
resourcePath = parts.slice(2).join('/');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const id = `git:${normalizedUrl}#${ref}:${resourcePath}`;
|
|
36
|
+
const displayName = depName || (resourcePath ? `git@${normalizedUrl}/${resourcePath}` : `git@${normalizedUrl}`);
|
|
37
|
+
return { id, displayName, sourceType: 'git' };
|
|
38
|
+
}
|
|
39
|
+
if (declaration.path) {
|
|
40
|
+
const { absolute } = resolveDeclaredPath(declaration.path, declaredInDir);
|
|
41
|
+
const id = `path:${absolute}`;
|
|
42
|
+
const displayName = depName || declaration.path;
|
|
43
|
+
return { id, displayName, sourceType: 'path' };
|
|
44
|
+
}
|
|
45
|
+
// Registry: name-only key for constraint merging
|
|
46
|
+
const id = `registry:${depName}`;
|
|
47
|
+
return { id, displayName: depName, sourceType: 'registry' };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Build a ResolvedSource from a dependency declaration.
|
|
51
|
+
* Mirrors the logic in graph-builder's resolveSourceFromDeclaration.
|
|
52
|
+
*/
|
|
53
|
+
export function resolveSourceFromDeclaration(declaration, pathResolutionDir) {
|
|
54
|
+
if (declaration.url) {
|
|
55
|
+
const [gitUrl, embeddedRef] = declaration.url.includes('#')
|
|
56
|
+
? declaration.url.split('#', 2)
|
|
57
|
+
: [declaration.url, undefined];
|
|
58
|
+
const ref = embeddedRef || declaration.ref;
|
|
59
|
+
const depName = String(declaration.name ?? '');
|
|
60
|
+
let resourcePath = declaration.path ?? '';
|
|
61
|
+
if (depName.startsWith('gh@')) {
|
|
62
|
+
const tail = depName.slice(3);
|
|
63
|
+
const parts = tail.split('/').filter(Boolean);
|
|
64
|
+
if (parts.length > 2 && !resourcePath) {
|
|
65
|
+
resourcePath = parts.slice(2).join('/');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
type: 'git',
|
|
70
|
+
gitUrl,
|
|
71
|
+
gitRef: ref,
|
|
72
|
+
resourcePath: resourcePath || undefined,
|
|
73
|
+
contentRoot: undefined
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (declaration.path) {
|
|
77
|
+
const { absolute } = resolveDeclaredPath(declaration.path, pathResolutionDir);
|
|
78
|
+
return { type: 'path', absolutePath: absolute, contentRoot: absolute };
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
type: 'registry',
|
|
82
|
+
packageName: declaration.name,
|
|
83
|
+
resolvedVersion: declaration.version,
|
|
84
|
+
contentRoot: undefined
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
// Fetcher implementations
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
/**
|
|
91
|
+
* Fetches registry package metadata using local-first-with-remote-fallback
|
|
92
|
+
* version resolution.
|
|
93
|
+
*/
|
|
94
|
+
export class RegistryFetcher {
|
|
95
|
+
async fetch(declaration, declaredInDir, options) {
|
|
96
|
+
const { id, displayName, sourceType } = computeWaveId(declaration, declaredInDir);
|
|
97
|
+
const source = resolveSourceFromDeclaration(declaration, declaredInDir);
|
|
98
|
+
const packageName = declaration.name;
|
|
99
|
+
const constraint = declaration.version ?? '*';
|
|
100
|
+
// Use unified version selection (local-first with remote fallback)
|
|
101
|
+
const selectionResult = await selectInstallVersionUnified({
|
|
102
|
+
packageName,
|
|
103
|
+
constraint,
|
|
104
|
+
mode: options.resolutionMode ?? 'default',
|
|
105
|
+
explicitPrereleaseIntent: false,
|
|
106
|
+
profile: options.profile,
|
|
107
|
+
apiKey: options.apiKey
|
|
108
|
+
});
|
|
109
|
+
const version = selectionResult.selectedVersion;
|
|
110
|
+
if (!version) {
|
|
111
|
+
// No version found - return minimal result without children
|
|
112
|
+
return {
|
|
113
|
+
id, displayName, name: packageName, sourceType, source,
|
|
114
|
+
childDependencies: []
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
source.resolvedVersion = version;
|
|
118
|
+
// Resolve content root for reading child manifest
|
|
119
|
+
let contentRoot;
|
|
120
|
+
try {
|
|
121
|
+
contentRoot = await resolvePackageContentRoot({
|
|
122
|
+
cwd: options.workspaceRoot,
|
|
123
|
+
packageName,
|
|
124
|
+
version
|
|
125
|
+
});
|
|
126
|
+
source.contentRoot = contentRoot;
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// Content root not available locally -- pipeline will load it later
|
|
130
|
+
}
|
|
131
|
+
// Read child manifest to discover transitive dependencies
|
|
132
|
+
let childDeps = [];
|
|
133
|
+
let metadata;
|
|
134
|
+
if (contentRoot) {
|
|
135
|
+
const manifest = await readManifestAtPath(contentRoot);
|
|
136
|
+
if (manifest) {
|
|
137
|
+
metadata = manifest;
|
|
138
|
+
childDeps = extractDependencies(manifest, contentRoot + '/openpackage.yml', options.depth + 1, false // dev deps only at root
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
id, displayName, name: packageName, version, contentRoot,
|
|
144
|
+
sourceType, source, metadata, childDependencies: childDeps
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Fetches git-sourced packages using the shared content root cache.
|
|
150
|
+
* Handles marketplace detection (returns isMarketplace with no children).
|
|
151
|
+
*/
|
|
152
|
+
export class GitFetcher {
|
|
153
|
+
async fetch(declaration, declaredInDir, options) {
|
|
154
|
+
const { id, displayName, sourceType } = computeWaveId(declaration, declaredInDir);
|
|
155
|
+
const source = resolveSourceFromDeclaration(declaration, declaredInDir);
|
|
156
|
+
// Use content root cache (handles cloning + caching)
|
|
157
|
+
const result = await ensureContentRoot(source, { skipCache: options.skipCache });
|
|
158
|
+
if (result.isMarketplace) {
|
|
159
|
+
return {
|
|
160
|
+
id, displayName, name: declaration.name, sourceType, source,
|
|
161
|
+
isMarketplace: true, childDependencies: [],
|
|
162
|
+
repoRoot: result.repoPath
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
const contentRoot = result.contentRoot;
|
|
166
|
+
source.contentRoot = contentRoot;
|
|
167
|
+
let childDeps = [];
|
|
168
|
+
let metadata;
|
|
169
|
+
if (contentRoot) {
|
|
170
|
+
const manifest = await readManifestAtPath(contentRoot);
|
|
171
|
+
if (manifest) {
|
|
172
|
+
metadata = manifest;
|
|
173
|
+
childDeps = extractDependencies(manifest, contentRoot + '/openpackage.yml', options.depth + 1, false);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
id, displayName, name: declaration.name,
|
|
178
|
+
version: metadata?.version,
|
|
179
|
+
contentRoot, repoRoot: result.repoPath,
|
|
180
|
+
sourceType, source, metadata,
|
|
181
|
+
childDependencies: childDeps
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Fetches path-sourced packages by resolving the absolute path
|
|
187
|
+
* and reading the manifest directly from the filesystem.
|
|
188
|
+
*/
|
|
189
|
+
export class PathFetcher {
|
|
190
|
+
async fetch(declaration, declaredInDir, options) {
|
|
191
|
+
const { id, displayName, sourceType } = computeWaveId(declaration, declaredInDir);
|
|
192
|
+
const source = resolveSourceFromDeclaration(declaration, declaredInDir);
|
|
193
|
+
const contentRoot = source.absolutePath ?? source.contentRoot;
|
|
194
|
+
let childDeps = [];
|
|
195
|
+
let metadata;
|
|
196
|
+
if (contentRoot) {
|
|
197
|
+
const manifest = await readManifestAtPath(contentRoot);
|
|
198
|
+
if (manifest) {
|
|
199
|
+
metadata = manifest;
|
|
200
|
+
childDeps = extractDependencies(manifest, contentRoot + '/openpackage.yml', options.depth + 1, false);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return {
|
|
204
|
+
id, displayName, name: declaration.name,
|
|
205
|
+
version: metadata?.version,
|
|
206
|
+
contentRoot, sourceType, source, metadata,
|
|
207
|
+
childDependencies: childDeps
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Create the appropriate fetcher for a dependency declaration.
|
|
213
|
+
*/
|
|
214
|
+
export function createFetcher(declaration) {
|
|
215
|
+
if (declaration.url)
|
|
216
|
+
return new GitFetcher();
|
|
217
|
+
if (declaration.path)
|
|
218
|
+
return new PathFetcher();
|
|
219
|
+
return new RegistryFetcher();
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=fetcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../../../src/core/install/wave-resolver/fetcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Updates openpackage.index.yml with resolved dependency information.
|
|
3
|
+
* Called after successful installation to record resolved versions,
|
|
4
|
+
* source paths, and dependency relationships.
|
|
5
|
+
*
|
|
6
|
+
* This runs after the installation pipeline (not during resolution),
|
|
7
|
+
* ensuring the index reflects actually-installed packages.
|
|
8
|
+
*/
|
|
9
|
+
import type { WaveGraph } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Update openpackage.index.yml with dependency data from the wave graph.
|
|
12
|
+
*
|
|
13
|
+
* For each resolved node, updates or creates an entry recording the
|
|
14
|
+
* version and dependency list. File mappings are left untouched since
|
|
15
|
+
* those are managed by the install pipeline itself.
|
|
16
|
+
*
|
|
17
|
+
* This is a best-effort operation -- failures are logged but not thrown.
|
|
18
|
+
*
|
|
19
|
+
* @param targetDir - Workspace directory containing the index file
|
|
20
|
+
* @param graph - The resolved wave graph
|
|
21
|
+
*/
|
|
22
|
+
export declare function updateWorkspaceIndex(targetDir: string, graph: WaveGraph): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=index-updater.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-updater.d.ts","sourceRoot":"","sources":["../../../../src/core/install/wave-resolver/index-updater.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,IAAI,CAAC,CAiEf"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Updates openpackage.index.yml with resolved dependency information.
|
|
3
|
+
* Called after successful installation to record resolved versions,
|
|
4
|
+
* source paths, and dependency relationships.
|
|
5
|
+
*
|
|
6
|
+
* This runs after the installation pipeline (not during resolution),
|
|
7
|
+
* ensuring the index reflects actually-installed packages.
|
|
8
|
+
*/
|
|
9
|
+
import { readWorkspaceIndex, writeWorkspaceIndex } from '../../../utils/workspace-index-yml.js';
|
|
10
|
+
import { logger } from '../../../utils/logger.js';
|
|
11
|
+
/**
|
|
12
|
+
* Update openpackage.index.yml with dependency data from the wave graph.
|
|
13
|
+
*
|
|
14
|
+
* For each resolved node, updates or creates an entry recording the
|
|
15
|
+
* version and dependency list. File mappings are left untouched since
|
|
16
|
+
* those are managed by the install pipeline itself.
|
|
17
|
+
*
|
|
18
|
+
* This is a best-effort operation -- failures are logged but not thrown.
|
|
19
|
+
*
|
|
20
|
+
* @param targetDir - Workspace directory containing the index file
|
|
21
|
+
* @param graph - The resolved wave graph
|
|
22
|
+
*/
|
|
23
|
+
export async function updateWorkspaceIndex(targetDir, graph) {
|
|
24
|
+
let record;
|
|
25
|
+
try {
|
|
26
|
+
record = await readWorkspaceIndex(targetDir);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
logger.warn('Could not read workspace index; skipping index update');
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const index = record.index;
|
|
33
|
+
let updatedCount = 0;
|
|
34
|
+
for (const node of graph.nodes.values()) {
|
|
35
|
+
// Skip marketplace nodes and nodes without a name
|
|
36
|
+
if (node.isMarketplace)
|
|
37
|
+
continue;
|
|
38
|
+
const packageName = node.source.packageName ?? node.metadata?.name ?? node.displayName;
|
|
39
|
+
if (!packageName)
|
|
40
|
+
continue;
|
|
41
|
+
const existing = index.packages[packageName];
|
|
42
|
+
// Only update if we have meaningful info to add
|
|
43
|
+
const version = node.resolvedVersion ?? node.metadata?.version;
|
|
44
|
+
const contentRoot = node.contentRoot ?? node.source.contentRoot ?? node.source.absolutePath;
|
|
45
|
+
if (!existing && !contentRoot)
|
|
46
|
+
continue;
|
|
47
|
+
// Build dependency list from children
|
|
48
|
+
const dependencies = [];
|
|
49
|
+
for (const childId of node.children) {
|
|
50
|
+
const childNode = graph.nodes.get(childId);
|
|
51
|
+
if (childNode) {
|
|
52
|
+
const childName = childNode.source.packageName ?? childNode.metadata?.name ?? childNode.displayName;
|
|
53
|
+
if (childName) {
|
|
54
|
+
dependencies.push(childName);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (existing) {
|
|
59
|
+
// Update existing entry -- preserve file mappings
|
|
60
|
+
if (version)
|
|
61
|
+
existing.version = version;
|
|
62
|
+
if (dependencies.length > 0)
|
|
63
|
+
existing.dependencies = dependencies;
|
|
64
|
+
updatedCount++;
|
|
65
|
+
}
|
|
66
|
+
else if (contentRoot) {
|
|
67
|
+
// Create new entry -- minimal; the install pipeline adds file mappings
|
|
68
|
+
index.packages[packageName] = {
|
|
69
|
+
path: contentRoot,
|
|
70
|
+
version,
|
|
71
|
+
dependencies: dependencies.length > 0 ? dependencies : undefined,
|
|
72
|
+
files: {}
|
|
73
|
+
};
|
|
74
|
+
updatedCount++;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (updatedCount > 0) {
|
|
78
|
+
try {
|
|
79
|
+
await writeWorkspaceIndex(record);
|
|
80
|
+
logger.info(`Updated workspace index: ${updatedCount} packages`);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
logger.warn(`Failed to write workspace index: ${error}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=index-updater.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-updater.js","sourceRoot":"","sources":["../../../../src/core/install/wave-resolver/index-updater.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Index Write Collector
|
|
3
|
+
*
|
|
4
|
+
* Collects workspace index mutations during parallel package installations
|
|
5
|
+
* and flushes them in a single atomic read-modify-write cycle.
|
|
6
|
+
*
|
|
7
|
+
* During parallel installs within a wave, each package records its index
|
|
8
|
+
* updates to the collector instead of writing to disk immediately. After
|
|
9
|
+
* all packages in the wave complete, `flush()` applies all mutations at once.
|
|
10
|
+
*
|
|
11
|
+
* This eliminates read-modify-write race conditions on openpackage.index.yml.
|
|
12
|
+
*/
|
|
13
|
+
import type { WorkspaceIndexFileMapping } from '../../../types/workspace-index.js';
|
|
14
|
+
/**
|
|
15
|
+
* A complete package entry update (replaces or creates the package in the index).
|
|
16
|
+
*/
|
|
17
|
+
export interface PackageEntryUpdate {
|
|
18
|
+
type: 'upsert';
|
|
19
|
+
packageName: string;
|
|
20
|
+
path: string;
|
|
21
|
+
version?: string;
|
|
22
|
+
files: Record<string, (string | WorkspaceIndexFileMapping)[]>;
|
|
23
|
+
dependencies?: string[];
|
|
24
|
+
marketplace?: {
|
|
25
|
+
url: string;
|
|
26
|
+
commitSha: string;
|
|
27
|
+
pluginName: string;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* An additive file augmentation (merges file entries into an existing package).
|
|
32
|
+
* Used by the root-file augmentation in installation-executor.ts.
|
|
33
|
+
*/
|
|
34
|
+
export interface FileAugmentation {
|
|
35
|
+
type: 'augment-files';
|
|
36
|
+
packageName: string;
|
|
37
|
+
files: Record<string, (string | WorkspaceIndexFileMapping)[]>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* A file mapping rename within a package's index entry.
|
|
41
|
+
* Used by executeNamespace() when physically relocating another package's file.
|
|
42
|
+
*/
|
|
43
|
+
export interface FileMappingRename {
|
|
44
|
+
type: 'rename';
|
|
45
|
+
packageName: string;
|
|
46
|
+
/** The index key (source) that contains the mapping */
|
|
47
|
+
indexKey: string;
|
|
48
|
+
/** The old target path */
|
|
49
|
+
oldTargetPath: string;
|
|
50
|
+
/** The new target path (after rename) */
|
|
51
|
+
newTargetPath: string;
|
|
52
|
+
/** Full package entry snapshot (for path/version recovery if entry is missing) */
|
|
53
|
+
entrySnapshot?: {
|
|
54
|
+
path: string;
|
|
55
|
+
version?: string;
|
|
56
|
+
files: Record<string, (string | WorkspaceIndexFileMapping)[]>;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* A dependency-graph update for a package.
|
|
61
|
+
* Used by index-updater.ts after wave resolution.
|
|
62
|
+
*/
|
|
63
|
+
export interface DependencyUpdate {
|
|
64
|
+
type: 'dependency-update';
|
|
65
|
+
packageName: string;
|
|
66
|
+
version?: string;
|
|
67
|
+
contentRoot?: string;
|
|
68
|
+
dependencies?: string[];
|
|
69
|
+
}
|
|
70
|
+
export type IndexMutation = PackageEntryUpdate | FileAugmentation | FileMappingRename | DependencyUpdate;
|
|
71
|
+
export declare class IndexWriteCollector {
|
|
72
|
+
private mutations;
|
|
73
|
+
/**
|
|
74
|
+
* Record a full package entry upsert (creates or replaces the entry).
|
|
75
|
+
*/
|
|
76
|
+
recordPackageUpdate(update: Omit<PackageEntryUpdate, 'type'>): void;
|
|
77
|
+
/**
|
|
78
|
+
* Record additive file entries for an existing package (root files, etc.).
|
|
79
|
+
*/
|
|
80
|
+
recordFileAugmentation(augmentation: Omit<FileAugmentation, 'type'>): void;
|
|
81
|
+
/**
|
|
82
|
+
* Record a file mapping rename (namespace relocation).
|
|
83
|
+
*/
|
|
84
|
+
recordFileMappingRename(rename: Omit<FileMappingRename, 'type'>): void;
|
|
85
|
+
/**
|
|
86
|
+
* Record a dependency graph update for a package.
|
|
87
|
+
*/
|
|
88
|
+
recordDependencyUpdate(update: Omit<DependencyUpdate, 'type'>): void;
|
|
89
|
+
/**
|
|
90
|
+
* Returns true if any mutations have been recorded.
|
|
91
|
+
*/
|
|
92
|
+
get hasMutations(): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Apply all collected mutations to the workspace index in a single
|
|
95
|
+
* read-modify-write cycle, then clear the mutation buffer.
|
|
96
|
+
*
|
|
97
|
+
* @param targetDir - Workspace directory containing the index file
|
|
98
|
+
*/
|
|
99
|
+
flush(targetDir: string): Promise<void>;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=index-write-collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-write-collector.d.ts","sourceRoot":"","sources":["../../../../src/core/install/wave-resolver/index-write-collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,yBAAyB,EAAyB,MAAM,mCAAmC,CAAC;AAY1G;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,yBAAyB,CAAC,EAAE,CAAC,CAAC;IAC9D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CACtE;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,eAAe,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,yBAAyB,CAAC,EAAE,CAAC,CAAC;CAC/D;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,kFAAkF;IAClF,aAAa,CAAC,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,yBAAyB,CAAC,EAAE,CAAC,CAAC;KAC/D,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,aAAa,GACrB,kBAAkB,GAClB,gBAAgB,GAChB,iBAAiB,GACjB,gBAAgB,CAAC;AAMrB,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,SAAS,CAAuB;IAExC;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,GAAG,IAAI;IAInE;;OAEG;IACH,sBAAsB,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,IAAI;IAI1E;;OAEG;IACH,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG,IAAI;IAItE;;OAEG;IACH,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,IAAI;IAIpE;;OAEG;IACH,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED;;;;;OAKG;IACG,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgC9C"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Index Write Collector
|
|
3
|
+
*
|
|
4
|
+
* Collects workspace index mutations during parallel package installations
|
|
5
|
+
* and flushes them in a single atomic read-modify-write cycle.
|
|
6
|
+
*
|
|
7
|
+
* During parallel installs within a wave, each package records its index
|
|
8
|
+
* updates to the collector instead of writing to disk immediately. After
|
|
9
|
+
* all packages in the wave complete, `flush()` applies all mutations at once.
|
|
10
|
+
*
|
|
11
|
+
* This eliminates read-modify-write race conditions on openpackage.index.yml.
|
|
12
|
+
*/
|
|
13
|
+
import { readWorkspaceIndex, writeWorkspaceIndex } from '../../../utils/workspace-index-yml.js';
|
|
14
|
+
import { sortMapping } from '../../../utils/package-index-yml.js';
|
|
15
|
+
import { formatPathForYaml } from '../../../utils/path-resolution.js';
|
|
16
|
+
import { getTargetPath } from '../../../utils/workspace-index-helpers.js';
|
|
17
|
+
import { normalizePathForProcessing } from '../../../utils/path-normalization.js';
|
|
18
|
+
import { logger } from '../../../utils/logger.js';
|
|
19
|
+
// ============================================================================
|
|
20
|
+
// Collector
|
|
21
|
+
// ============================================================================
|
|
22
|
+
export class IndexWriteCollector {
|
|
23
|
+
constructor() {
|
|
24
|
+
this.mutations = [];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Record a full package entry upsert (creates or replaces the entry).
|
|
28
|
+
*/
|
|
29
|
+
recordPackageUpdate(update) {
|
|
30
|
+
this.mutations.push({ type: 'upsert', ...update });
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Record additive file entries for an existing package (root files, etc.).
|
|
34
|
+
*/
|
|
35
|
+
recordFileAugmentation(augmentation) {
|
|
36
|
+
this.mutations.push({ type: 'augment-files', ...augmentation });
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Record a file mapping rename (namespace relocation).
|
|
40
|
+
*/
|
|
41
|
+
recordFileMappingRename(rename) {
|
|
42
|
+
this.mutations.push({ type: 'rename', ...rename });
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Record a dependency graph update for a package.
|
|
46
|
+
*/
|
|
47
|
+
recordDependencyUpdate(update) {
|
|
48
|
+
this.mutations.push({ type: 'dependency-update', ...update });
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Returns true if any mutations have been recorded.
|
|
52
|
+
*/
|
|
53
|
+
get hasMutations() {
|
|
54
|
+
return this.mutations.length > 0;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Apply all collected mutations to the workspace index in a single
|
|
58
|
+
* read-modify-write cycle, then clear the mutation buffer.
|
|
59
|
+
*
|
|
60
|
+
* @param targetDir - Workspace directory containing the index file
|
|
61
|
+
*/
|
|
62
|
+
async flush(targetDir) {
|
|
63
|
+
if (this.mutations.length === 0)
|
|
64
|
+
return;
|
|
65
|
+
let record;
|
|
66
|
+
try {
|
|
67
|
+
record = await readWorkspaceIndex(targetDir);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
logger.warn('IndexWriteCollector: could not read workspace index; skipping flush');
|
|
71
|
+
this.mutations = [];
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const index = record.index;
|
|
75
|
+
index.packages = index.packages ?? {};
|
|
76
|
+
for (const mutation of this.mutations) {
|
|
77
|
+
try {
|
|
78
|
+
applyMutation(index, mutation, targetDir);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
logger.warn(`IndexWriteCollector: failed to apply mutation (${mutation.type}): ${error}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
await writeWorkspaceIndex(record);
|
|
86
|
+
logger.debug(`IndexWriteCollector: flushed ${this.mutations.length} mutations`);
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
logger.warn(`IndexWriteCollector: failed to write workspace index: ${error}`);
|
|
90
|
+
}
|
|
91
|
+
this.mutations = [];
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// ============================================================================
|
|
95
|
+
// Mutation application
|
|
96
|
+
// ============================================================================
|
|
97
|
+
function applyMutation(index, mutation, targetDir) {
|
|
98
|
+
switch (mutation.type) {
|
|
99
|
+
case 'upsert': {
|
|
100
|
+
const formattedPath = formatPathForYaml(mutation.path, targetDir);
|
|
101
|
+
const entry = {
|
|
102
|
+
...(index.packages[mutation.packageName] ?? {}),
|
|
103
|
+
path: formattedPath,
|
|
104
|
+
files: sortMapping(mutation.files),
|
|
105
|
+
};
|
|
106
|
+
if (mutation.version)
|
|
107
|
+
entry.version = mutation.version;
|
|
108
|
+
if (mutation.dependencies && mutation.dependencies.length > 0) {
|
|
109
|
+
entry.dependencies = mutation.dependencies;
|
|
110
|
+
}
|
|
111
|
+
if (mutation.marketplace)
|
|
112
|
+
entry.marketplace = mutation.marketplace;
|
|
113
|
+
index.packages[mutation.packageName] = entry;
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
case 'augment-files': {
|
|
117
|
+
const existing = index.packages[mutation.packageName];
|
|
118
|
+
if (!existing)
|
|
119
|
+
break;
|
|
120
|
+
const files = { ...(existing.files ?? {}) };
|
|
121
|
+
for (const [key, values] of Object.entries(mutation.files)) {
|
|
122
|
+
const current = files[key] ?? [];
|
|
123
|
+
// Deduplicate by target path
|
|
124
|
+
const byTarget = new Map();
|
|
125
|
+
for (const m of current) {
|
|
126
|
+
byTarget.set(getTargetPath(m), m);
|
|
127
|
+
}
|
|
128
|
+
for (const m of values) {
|
|
129
|
+
const tp = getTargetPath(m);
|
|
130
|
+
if (!byTarget.has(tp)) {
|
|
131
|
+
byTarget.set(tp, m);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
files[key] = Array.from(byTarget.values());
|
|
135
|
+
}
|
|
136
|
+
existing.files = files;
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
case 'rename': {
|
|
140
|
+
const entry = index.packages[mutation.packageName];
|
|
141
|
+
if (!entry) {
|
|
142
|
+
// Entry might not exist yet if the collector is used during a fresh install.
|
|
143
|
+
// Use the snapshot to create it.
|
|
144
|
+
if (mutation.entrySnapshot) {
|
|
145
|
+
const formattedPath = formatPathForYaml(mutation.entrySnapshot.path, targetDir);
|
|
146
|
+
index.packages[mutation.packageName] = {
|
|
147
|
+
path: formattedPath,
|
|
148
|
+
version: mutation.entrySnapshot.version,
|
|
149
|
+
files: sortMapping(mutation.entrySnapshot.files),
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
const normalizedOld = normalizePathForProcessing(mutation.oldTargetPath);
|
|
155
|
+
const normalizedNew = normalizePathForProcessing(mutation.newTargetPath);
|
|
156
|
+
const values = entry.files[mutation.indexKey];
|
|
157
|
+
if (!values)
|
|
158
|
+
break;
|
|
159
|
+
const idx = values.findIndex(mapping => {
|
|
160
|
+
const target = getTargetPath(mapping);
|
|
161
|
+
return normalizePathForProcessing(target) === normalizedOld;
|
|
162
|
+
});
|
|
163
|
+
if (idx === -1)
|
|
164
|
+
break;
|
|
165
|
+
const oldMapping = values[idx];
|
|
166
|
+
values[idx] = typeof oldMapping === 'string'
|
|
167
|
+
? normalizedNew
|
|
168
|
+
: { ...oldMapping, target: normalizedNew };
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
case 'dependency-update': {
|
|
172
|
+
const existing = index.packages[mutation.packageName];
|
|
173
|
+
if (existing) {
|
|
174
|
+
if (mutation.version)
|
|
175
|
+
existing.version = mutation.version;
|
|
176
|
+
if (mutation.dependencies && mutation.dependencies.length > 0) {
|
|
177
|
+
existing.dependencies = mutation.dependencies;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else if (mutation.contentRoot) {
|
|
181
|
+
const formattedPath = formatPathForYaml(mutation.contentRoot, targetDir);
|
|
182
|
+
index.packages[mutation.packageName] = {
|
|
183
|
+
path: formattedPath,
|
|
184
|
+
version: mutation.version,
|
|
185
|
+
dependencies: mutation.dependencies && mutation.dependencies.length > 0
|
|
186
|
+
? mutation.dependencies : undefined,
|
|
187
|
+
files: {},
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=index-write-collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-write-collector.js","sourceRoot":"","sources":["../../../../src/core/install/wave-resolver/index-write-collector.ts"],"names":[],"mappings":"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"}
|