opkg 0.6.1 → 0.7.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.
- package/README.md +109 -186
- package/assets/openpackage_ascii_dark.png +0 -0
- package/assets/openpackage_ascii_light.png +0 -0
- package/dist/commands/add.js +34 -10
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/apply.js +16 -0
- package/dist/commands/apply.js.map +1 -0
- package/dist/commands/delete.js +1 -1
- package/dist/commands/delete.js.map +1 -1
- package/dist/commands/install.js +177 -8
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/list.js +2 -2
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/login.js +1 -1
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js +1 -1
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/new.js +125 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/pack.js +7 -13
- package/dist/commands/pack.js.map +1 -1
- package/dist/commands/pull.js +1 -1
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.js +1 -1
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/remove.js +63 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/save.js +11 -17
- package/dist/commands/save.js.map +1 -1
- package/dist/commands/set.js +33 -0
- package/dist/commands/set.js.map +1 -0
- package/dist/commands/show.js +16 -94
- package/dist/commands/show.js.map +1 -1
- package/dist/commands/status.js +26 -701
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/uninstall.js +14 -427
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/constants/index.js +72 -16
- package/dist/constants/index.js.map +1 -1
- package/dist/core/add/add-conflict-handler.js +1 -8
- package/dist/core/add/add-conflict-handler.js.map +1 -1
- package/dist/core/add/add-pipeline.js +12 -10
- package/dist/core/add/add-pipeline.js.map +1 -1
- package/dist/core/add/add-to-source-pipeline.js +123 -0
- package/dist/core/add/add-to-source-pipeline.js.map +1 -0
- package/dist/core/add/package-index-updater.js +77 -78
- package/dist/core/add/package-index-updater.js.map +1 -1
- package/dist/core/add/platform-path-transformer.js +6 -4
- package/dist/core/add/platform-path-transformer.js.map +1 -1
- package/dist/core/add/source-collector.js +2 -3
- package/dist/core/add/source-collector.js.map +1 -1
- package/dist/core/apply/apply-pipeline.js +110 -0
- package/dist/core/apply/apply-pipeline.js.map +1 -0
- package/dist/core/dependency-resolver.js +263 -21
- package/dist/core/dependency-resolver.js.map +1 -1
- package/dist/core/discovery/file-discovery.js +1 -2
- package/dist/core/discovery/file-discovery.js.map +1 -1
- package/dist/core/discovery/platform-files-discovery.js +33 -18
- package/dist/core/discovery/platform-files-discovery.js.map +1 -1
- package/dist/core/flows/flow-executor.js +974 -0
- package/dist/core/flows/flow-executor.js.map +1 -0
- package/dist/core/flows/flow-inverter.js +442 -0
- package/dist/core/flows/flow-inverter.js.map +1 -0
- package/dist/core/flows/flow-key-extractor.js +101 -0
- package/dist/core/flows/flow-key-extractor.js.map +1 -0
- package/dist/core/flows/flow-key-mapper.js +382 -0
- package/dist/core/flows/flow-key-mapper.js.map +1 -0
- package/dist/core/flows/flow-transforms.js +632 -0
- package/dist/core/flows/flow-transforms.js.map +1 -0
- package/dist/core/flows/map-pipeline/context.js +73 -0
- package/dist/core/flows/map-pipeline/context.js.map +1 -0
- package/dist/core/flows/map-pipeline/index.js +156 -0
- package/dist/core/flows/map-pipeline/index.js.map +1 -0
- package/dist/core/flows/map-pipeline/operations/copy.js +104 -0
- package/dist/core/flows/map-pipeline/operations/copy.js.map +1 -0
- package/dist/core/flows/map-pipeline/operations/pipe.js +70 -0
- package/dist/core/flows/map-pipeline/operations/pipe.js.map +1 -0
- package/dist/core/flows/map-pipeline/operations/rename.js +102 -0
- package/dist/core/flows/map-pipeline/operations/rename.js.map +1 -0
- package/dist/core/flows/map-pipeline/operations/set.js +50 -0
- package/dist/core/flows/map-pipeline/operations/set.js.map +1 -0
- package/dist/core/flows/map-pipeline/operations/switch.js +79 -0
- package/dist/core/flows/map-pipeline/operations/switch.js.map +1 -0
- package/dist/core/flows/map-pipeline/operations/transform.js +543 -0
- package/dist/core/flows/map-pipeline/operations/transform.js.map +1 -0
- package/dist/core/flows/map-pipeline/operations/unset.js +65 -0
- package/dist/core/flows/map-pipeline/operations/unset.js.map +1 -0
- package/dist/core/flows/map-pipeline/types.js +8 -0
- package/dist/core/flows/map-pipeline/types.js.map +1 -0
- package/dist/core/flows/map-pipeline/utils.js +278 -0
- package/dist/core/flows/map-pipeline/utils.js.map +1 -0
- package/dist/core/flows/platform-converter.js +328 -0
- package/dist/core/flows/platform-converter.js.map +1 -0
- package/dist/core/flows/source-resolver.js +192 -0
- package/dist/core/flows/source-resolver.js.map +1 -0
- package/dist/core/flows/toml-domain-transforms.js +23 -0
- package/dist/core/flows/toml-domain-transforms.js.map +1 -0
- package/dist/core/install/bulk-install-pipeline.js +68 -7
- package/dist/core/install/bulk-install-pipeline.js.map +1 -1
- package/dist/core/install/canonical-plan.js +3 -3
- package/dist/core/install/canonical-plan.js.map +1 -1
- package/dist/core/install/dry-run.js +3 -3
- package/dist/core/install/dry-run.js.map +1 -1
- package/dist/core/install/flow-based-installer.js +1158 -0
- package/dist/core/install/flow-based-installer.js.map +1 -0
- package/dist/core/install/flow-workspace-tracker.js +111 -0
- package/dist/core/install/flow-workspace-tracker.js.map +1 -0
- package/dist/core/install/format-detector.js +228 -0
- package/dist/core/install/format-detector.js.map +1 -0
- package/dist/core/install/git-package-loader.js +20 -0
- package/dist/core/install/git-package-loader.js.map +1 -0
- package/dist/core/install/install-errors.js +1 -1
- package/dist/core/install/install-errors.js.map +1 -1
- package/dist/core/install/install-flow.js +34 -14
- package/dist/core/install/install-flow.js.map +1 -1
- package/dist/core/install/install-pipeline.js +52 -17
- package/dist/core/install/install-pipeline.js.map +1 -1
- package/dist/core/install/install-reporting.js +26 -8
- package/dist/core/install/install-reporting.js.map +1 -1
- package/dist/core/install/local-source-resolution.js +103 -0
- package/dist/core/install/local-source-resolution.js.map +1 -0
- package/dist/core/install/marketplace-handler.js +221 -0
- package/dist/core/install/marketplace-handler.js.map +1 -0
- package/dist/core/install/path-install-pipeline.js +241 -0
- package/dist/core/install/path-install-pipeline.js.map +1 -0
- package/dist/core/install/path-package-loader.js +116 -0
- package/dist/core/install/path-package-loader.js.map +1 -0
- package/dist/core/install/plugin-detector.js +72 -0
- package/dist/core/install/plugin-detector.js.map +1 -0
- package/dist/core/install/plugin-to-universal-converter.js +218 -0
- package/dist/core/install/plugin-to-universal-converter.js.map +1 -0
- package/dist/core/install/plugin-transformer.js +191 -0
- package/dist/core/install/plugin-transformer.js.map +1 -0
- package/dist/core/install/version-selection.js +1 -1
- package/dist/core/install/version-selection.js.map +1 -1
- package/dist/core/openpackage.js +40 -22
- package/dist/core/openpackage.js.map +1 -1
- package/dist/core/pack/pack-output.js +62 -0
- package/dist/core/pack/pack-output.js.map +1 -0
- package/dist/core/pack/pack-pipeline.js +186 -0
- package/dist/core/pack/pack-pipeline.js.map +1 -0
- package/dist/core/package-context.js +45 -70
- package/dist/core/package-context.js.map +1 -1
- package/dist/core/package-creation.js +203 -0
- package/dist/core/package-creation.js.map +1 -0
- package/dist/core/package.js +20 -6
- package/dist/core/package.js.map +1 -1
- package/dist/core/platforms.js +665 -209
- package/dist/core/platforms.js.map +1 -1
- package/dist/core/push/push-context.js +1 -1
- package/dist/core/push/push-context.js.map +1 -1
- package/dist/core/push/push-upload.js +2 -2
- package/dist/core/push/push-upload.js.map +1 -1
- package/dist/core/registry.js +6 -6
- package/dist/core/registry.js.map +1 -1
- package/dist/core/remote-pull.js +2 -2
- package/dist/core/remote-pull.js.map +1 -1
- package/dist/core/remove/removal-collector.js +52 -0
- package/dist/core/remove/removal-collector.js.map +1 -0
- package/dist/core/remove/removal-confirmation.js +39 -0
- package/dist/core/remove/removal-confirmation.js.map +1 -0
- package/dist/core/remove/remove-from-source-pipeline.js +173 -0
- package/dist/core/remove/remove-from-source-pipeline.js.map +1 -0
- package/dist/core/save/constants.js +3 -3
- package/dist/core/save/constants.js.map +1 -1
- package/dist/core/save/flow-based-saver.js +270 -0
- package/dist/core/save/flow-based-saver.js.map +1 -0
- package/dist/core/save/name-resolution.js +1 -1
- package/dist/core/save/name-resolution.js.map +1 -1
- package/dist/core/save/package-yml-generator.js +4 -5
- package/dist/core/save/package-yml-generator.js.map +1 -1
- package/dist/core/save/save-candidate-builder.js +215 -0
- package/dist/core/save/save-candidate-builder.js.map +1 -0
- package/dist/core/save/save-candidate-loader.js +12 -11
- package/dist/core/save/save-candidate-loader.js.map +1 -1
- package/dist/core/save/save-conflict-analyzer.js +150 -0
- package/dist/core/save/save-conflict-analyzer.js.map +1 -0
- package/dist/core/save/save-conflict-resolution.js +28 -14
- package/dist/core/save/save-conflict-resolution.js.map +1 -1
- package/dist/core/save/save-conflict-resolver.js +31 -275
- package/dist/core/save/save-conflict-resolver.js.map +1 -1
- package/dist/core/save/save-group-builder.js +52 -0
- package/dist/core/save/save-group-builder.js.map +1 -0
- package/dist/core/save/save-interactive-resolver.js +190 -0
- package/dist/core/save/save-interactive-resolver.js.map +1 -0
- package/dist/core/save/save-pipeline.js +58 -34
- package/dist/core/save/save-pipeline.js.map +1 -1
- package/dist/core/save/save-platform-handler.js +53 -0
- package/dist/core/save/save-platform-handler.js.map +1 -0
- package/dist/core/save/save-resolution-executor.js +145 -0
- package/dist/core/save/save-resolution-executor.js.map +1 -0
- package/dist/core/save/save-result-reporter.js +167 -0
- package/dist/core/save/save-result-reporter.js.map +1 -0
- package/dist/core/save/save-to-source-pipeline.js +154 -0
- package/dist/core/save/save-to-source-pipeline.js.map +1 -0
- package/dist/core/save/save-versioning.js +4 -4
- package/dist/core/save/save-versioning.js.map +1 -1
- package/dist/core/save/save-write-coordinator.js +204 -0
- package/dist/core/save/save-write-coordinator.js.map +1 -0
- package/dist/core/save/save-yml-resolution.js +28 -216
- package/dist/core/save/save-yml-resolution.js.map +1 -1
- package/dist/core/save/workspace-rename.js +7 -8
- package/dist/core/save/workspace-rename.js.map +1 -1
- package/dist/core/set/set-output.js +72 -0
- package/dist/core/set/set-output.js.map +1 -0
- package/dist/core/set/set-pipeline.js +361 -0
- package/dist/core/set/set-pipeline.js.map +1 -0
- package/dist/core/set/set-types.js +5 -0
- package/dist/core/set/set-types.js.map +1 -0
- package/dist/core/show/package-resolver.js +257 -0
- package/dist/core/show/package-resolver.js.map +1 -0
- package/dist/core/show/scope-discovery.js +165 -0
- package/dist/core/show/scope-discovery.js.map +1 -0
- package/dist/core/show/show-output.js +168 -0
- package/dist/core/show/show-output.js.map +1 -0
- package/dist/core/show/show-pipeline.js +113 -0
- package/dist/core/show/show-pipeline.js.map +1 -0
- package/dist/core/show/show-types.js +5 -0
- package/dist/core/show/show-types.js.map +1 -0
- package/dist/core/source-resolution/dependency-graph.js +104 -0
- package/dist/core/source-resolution/dependency-graph.js.map +1 -0
- package/dist/core/source-resolution/resolve-mutable-source.js +109 -0
- package/dist/core/source-resolution/resolve-mutable-source.js.map +1 -0
- package/dist/core/source-resolution/resolve-package-source.js +29 -0
- package/dist/core/source-resolution/resolve-package-source.js.map +1 -0
- package/dist/core/source-resolution/resolve-registry-version.js +35 -0
- package/dist/core/source-resolution/resolve-registry-version.js.map +1 -0
- package/dist/core/source-resolution/types.js.map +1 -0
- package/dist/core/status/status-file-discovery.js +23 -12
- package/dist/core/status/status-file-discovery.js.map +1 -1
- package/dist/core/status/status-pipeline.js +134 -0
- package/dist/core/status/status-pipeline.js.map +1 -0
- package/dist/core/sync/platform-sync-summary.js +27 -0
- package/dist/core/sync/platform-sync-summary.js.map +1 -0
- package/dist/core/uninstall/flow-aware-uninstaller.js +189 -0
- package/dist/core/uninstall/flow-aware-uninstaller.js.map +1 -0
- package/dist/core/uninstall/uninstall-file-discovery.js +11 -6
- package/dist/core/uninstall/uninstall-file-discovery.js.map +1 -1
- package/dist/core/uninstall/uninstall-pipeline.js +141 -0
- package/dist/core/uninstall/uninstall-pipeline.js.map +1 -0
- package/dist/core/universal-patterns.js +64 -0
- package/dist/core/universal-patterns.js.map +1 -0
- package/dist/index.js +99 -6
- package/dist/index.js.map +1 -1
- package/dist/types/flows.js +8 -0
- package/dist/types/flows.js.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/platform-flows.js +8 -0
- package/dist/types/platform-flows.js.map +1 -0
- package/dist/types/workspace-index.js +6 -0
- package/dist/types/workspace-index.js.map +1 -0
- package/dist/utils/custom-path-resolution.js +160 -0
- package/dist/utils/custom-path-resolution.js.map +1 -0
- package/dist/utils/dependency-coverage.js +1 -1
- package/dist/utils/dependency-coverage.js.map +1 -1
- package/dist/utils/file-processing.js +1 -1
- package/dist/utils/flow-index-installer.js +209 -0
- package/dist/utils/flow-index-installer.js.map +1 -0
- package/dist/utils/formatters.js +47 -1
- package/dist/utils/formatters.js.map +1 -1
- package/dist/utils/fs.js +17 -0
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/git-clone-registry.js +88 -0
- package/dist/utils/git-clone-registry.js.map +1 -0
- package/dist/utils/git-clone.js +69 -0
- package/dist/utils/git-clone.js.map +1 -0
- package/dist/utils/git-spec.js +96 -0
- package/dist/utils/git-spec.js.map +1 -0
- package/dist/utils/http-client.js +7 -0
- package/dist/utils/http-client.js.map +1 -1
- package/dist/utils/index-based-installer.js +356 -163
- package/dist/utils/index-based-installer.js.map +1 -1
- package/dist/utils/install-conflict-handler.js +2 -2
- package/dist/utils/install-conflict-handler.js.map +1 -1
- package/dist/utils/install-file-discovery.js +18 -13
- package/dist/utils/install-file-discovery.js.map +1 -1
- package/dist/utils/install-helpers.js +43 -20
- package/dist/utils/install-helpers.js.map +1 -1
- package/dist/utils/jsonc.js +23 -1
- package/dist/utils/jsonc.js.map +1 -1
- package/dist/utils/manifest-paths.js +1 -1
- package/dist/utils/manifest-paths.js.map +1 -1
- package/dist/utils/markdown-frontmatter.js +46 -0
- package/dist/utils/markdown-frontmatter.js.map +1 -1
- package/dist/utils/package-copy.js +5 -103
- package/dist/utils/package-copy.js.map +1 -1
- package/dist/utils/package-filters.js +9 -105
- package/dist/utils/package-filters.js.map +1 -1
- package/dist/utils/package-index-yml.js +27 -6
- package/dist/utils/package-index-yml.js.map +1 -1
- package/dist/utils/package-input.js +98 -0
- package/dist/utils/package-input.js.map +1 -0
- package/dist/utils/package-management.js +80 -28
- package/dist/utils/package-management.js.map +1 -1
- package/dist/utils/package-name-resolution.js +327 -0
- package/dist/utils/package-name-resolution.js.map +1 -0
- package/dist/utils/package-name.js +18 -16
- package/dist/utils/package-name.js.map +1 -1
- package/dist/utils/package-versioning.js +2 -33
- package/dist/utils/package-versioning.js.map +1 -1
- package/dist/utils/package-yml.js +19 -28
- package/dist/utils/package-yml.js.map +1 -1
- package/dist/utils/path-resolution.js +102 -0
- package/dist/utils/path-resolution.js.map +1 -0
- package/dist/utils/paths.js +6 -6
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/platform-file.js +36 -24
- package/dist/utils/platform-file.js.map +1 -1
- package/dist/utils/platform-mapper.js +222 -68
- package/dist/utils/platform-mapper.js.map +1 -1
- package/dist/utils/platform-root-files.js +44 -0
- package/dist/utils/platform-root-files.js.map +1 -0
- package/dist/utils/platform-utils.js +35 -54
- package/dist/utils/platform-utils.js.map +1 -1
- package/dist/utils/platform-yaml-merge.js +20 -140
- package/dist/utils/platform-yaml-merge.js.map +1 -1
- package/dist/utils/prompts.js +92 -7
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/registry-entry-filter.js +50 -27
- package/dist/utils/registry-entry-filter.js.map +1 -1
- package/dist/utils/registry-paths.js +5 -4
- package/dist/utils/registry-paths.js.map +1 -1
- package/dist/utils/scope-resolution.js +156 -0
- package/dist/utils/scope-resolution.js.map +1 -0
- package/dist/utils/source-mutability.js +15 -0
- package/dist/utils/source-mutability.js.map +1 -0
- package/dist/utils/tarball.js +29 -4
- package/dist/utils/tarball.js.map +1 -1
- package/dist/utils/version-ranges.js +1 -32
- package/dist/utils/version-ranges.js.map +1 -1
- package/dist/utils/workspace-index-helpers.js +28 -0
- package/dist/utils/workspace-index-helpers.js.map +1 -0
- package/dist/utils/workspace-index-ownership.js +100 -0
- package/dist/utils/workspace-index-ownership.js.map +1 -0
- package/dist/utils/workspace-index-yml.js +173 -0
- package/dist/utils/workspace-index-yml.js.map +1 -0
- package/examples/custom-subdirs-platform.jsonc +157 -0
- package/package.json +7 -2
- package/platforms.jsonc +531 -84
- package/schemas/map-pipeline-v1.json +256 -0
- package/schemas/platforms-v1.json +400 -0
- package/specs/README.md +88 -0
- package/specs/add/README.md +166 -0
- package/specs/agents-claude.md +570 -0
- package/specs/agents-opencode.md +622 -0
- package/specs/apply/README.md +21 -0
- package/specs/apply/apply-behavior.md +58 -0
- package/specs/apply/apply-command.md +51 -0
- package/specs/apply/conflicts.md +41 -0
- package/specs/apply/index-effects.md +81 -0
- package/specs/architecture.md +107 -0
- package/specs/auth/README.md +17 -0
- package/specs/auth/auth-http-contract.md +25 -0
- package/specs/auth/cli/credentials.md +39 -0
- package/specs/auth/cli/login.md +32 -0
- package/specs/auth/cli/logout.md +16 -0
- package/specs/claude-mcp.md +1065 -0
- package/specs/claude-plugins-marketplace.md +363 -0
- package/specs/claude-plugins.md +413 -0
- package/specs/cli-options.md +52 -0
- package/specs/codex-mcp.md +114 -0
- package/specs/commands-overview.md +175 -0
- package/specs/directory-layout.md +95 -0
- package/specs/install/README.md +12 -4
- package/specs/install/git-sources.md +230 -0
- package/specs/install/install-behavior.md +483 -73
- package/specs/install/package-yml-canonical.md +67 -35
- package/specs/install/version-resolution.md +69 -115
- package/specs/new/README.md +769 -0
- package/specs/new/SUMMARY.md +310 -0
- package/specs/new/scope-behavior.md +793 -0
- package/specs/pack/README.md +77 -0
- package/specs/pack/package-name-resolution.md +330 -0
- package/specs/package/README.md +18 -17
- package/specs/package/nested-packages-and-parent-packages.md +32 -31
- package/specs/package/package-index-yml.md +95 -101
- package/specs/package/package-root-layout.md +64 -46
- package/specs/package/registry-payload-and-copy.md +50 -44
- package/specs/package/universal-content.md +33 -56
- package/specs/package-sources.md +248 -0
- package/specs/platforms/README.md +52 -0
- package/specs/platforms/configuration.md +571 -0
- package/specs/platforms/detection.md +552 -0
- package/specs/platforms/directory-layout.md +599 -0
- package/specs/platforms/examples.md +1146 -0
- package/specs/platforms/flow-reference.md +1240 -0
- package/specs/platforms/flows.md +1488 -0
- package/specs/platforms/map-pipeline.md +801 -0
- package/specs/platforms/overview.md +349 -0
- package/specs/platforms/specification.md +700 -0
- package/specs/platforms/troubleshooting.md +697 -0
- package/specs/platforms/universal-converter.md +520 -0
- package/specs/push/README.md +1 -0
- package/specs/push/push-behavior.md +11 -3
- package/specs/push/push-remote-upload.md +1 -1
- package/specs/push/push-scoping.md +1 -1
- package/specs/push/push-version-selection.md +1 -1
- package/specs/registry.md +111 -0
- package/specs/remove/README.md +257 -0
- package/specs/save/README.md +21 -17
- package/specs/save/save-conflict-resolution.md +205 -83
- package/specs/save/save-file-discovery.md +6 -4
- package/specs/save/save-frontmatter-overrides.md +11 -15
- package/specs/save/save-modes-inputs.md +9 -39
- package/specs/save/save-naming-scoping.md +4 -4
- package/specs/save/save-package-detection.md +13 -13
- package/specs/save/save-registry-sync.md +16 -106
- package/specs/save/save-versioning.md +80 -0
- package/specs/scope-management.md +92 -0
- package/specs/set/README.md +520 -0
- package/specs/set/set-behavior.md +563 -0
- package/specs/show/README.md +483 -0
- package/specs/show/show-remote.md +494 -0
- package/specs/status/README.md +38 -0
- package/specs/uninstall/README.md +231 -0
- package/dist/commands/duplicate.js +0 -69
- package/dist/commands/duplicate.js.map +0 -1
- package/dist/commands/init.js +0 -117
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/prune.js +0 -357
- package/dist/commands/prune.js.map +0 -1
- package/dist/commands/tui.js +0 -61
- package/dist/commands/tui.js.map +0 -1
- package/dist/core/install/index.js +0 -3
- package/dist/core/install/index.js.map +0 -1
- package/dist/core/push/push-single-file.js +0 -56
- package/dist/core/push/push-single-file.js.map +0 -1
- package/dist/core/save/package-detection.js +0 -147
- package/dist/core/save/package-detection.js.map +0 -1
- package/dist/core/save/save-single-file.js +0 -124
- package/dist/core/save/save-single-file.js.map +0 -1
- package/dist/core/token-store.js +0 -73
- package/dist/core/token-store.js.map +0 -1
- package/dist/tui/app.js +0 -95
- package/dist/tui/app.js.map +0 -1
- package/dist/tui/components/package-list.js +0 -73
- package/dist/tui/components/package-list.js.map +0 -1
- package/dist/tui/controller.js +0 -365
- package/dist/tui/controller.js.map +0 -1
- package/dist/tui/index.js +0 -12
- package/dist/tui/index.js.map +0 -1
- package/dist/tui/services/file-index.js +0 -64
- package/dist/tui/services/file-index.js.map +0 -1
- package/dist/tui/services/packages.js +0 -18
- package/dist/tui/services/packages.js.map +0 -1
- package/dist/tui/services/save.js +0 -21
- package/dist/tui/services/save.js.map +0 -1
- package/dist/tui/state/app-state.js +0 -15
- package/dist/tui/state/app-state.js.map +0 -1
- package/dist/tui/state.js +0 -17
- package/dist/tui/state.js.map +0 -1
- package/dist/tui/types.js.map +0 -1
- package/dist/tui/views/add-file-modal.js +0 -129
- package/dist/tui/views/add-file-modal.js.map +0 -1
- package/dist/tui/views/file-preview.js +0 -44
- package/dist/tui/views/file-preview.js.map +0 -1
- package/dist/tui/views/list-packages.js +0 -73
- package/dist/tui/views/list-packages.js.map +0 -1
- package/dist/tui/views/main-menu.js +0 -29
- package/dist/tui/views/main-menu.js.map +0 -1
- package/dist/tui/views/manage-view.js +0 -81
- package/dist/tui/views/manage-view.js.map +0 -1
- package/dist/tui/views/package-hub.js +0 -120
- package/dist/tui/views/package-hub.js.map +0 -1
- package/dist/tui/views/placeholder.js +0 -24
- package/dist/tui/views/placeholder.js.map +0 -1
- package/dist/utils/bun-bootstrap.js +0 -72
- package/dist/utils/bun-bootstrap.js.map +0 -1
- package/dist/utils/entity-id.js +0 -19
- package/dist/utils/entity-id.js.map +0 -1
- package/dist/utils/package-local-files.js +0 -5
- package/dist/utils/package-local-files.js.map +0 -1
- package/dist/utils/path-matching.js +0 -74
- package/dist/utils/path-matching.js.map +0 -1
- package/dist/utils/root-file-operations.js +0 -39
- package/dist/utils/root-file-operations.js.map +0 -1
- package/dist/utils/root-file-transformer.js +0 -27
- package/dist/utils/root-file-transformer.js.map +0 -1
- package/dist/utils/yaml-frontmatter.js +0 -25
- package/dist/utils/yaml-frontmatter.js.map +0 -1
- package/specs/auth/auth-device-flow.md +0 -70
- package/specs/login/login-device-flow.md +0 -70
- package/specs/platforms.md +0 -193
- package/specs/save-pack-versioning.md +0 -224
- package/specs/save-pack.md +0 -68
- /package/dist/{tui → core/source-resolution}/types.js +0 -0
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { join } from 'path';
|
|
2
|
+
import { readTextFile, exists } from '../../utils/fs.js';
|
|
3
|
+
import { logger } from '../../utils/logger.js';
|
|
4
|
+
import { ValidationError } from '../../utils/errors.js';
|
|
5
|
+
import { runPathInstallPipeline } from './path-install-pipeline.js';
|
|
6
|
+
import { detectPluginType, validatePluginManifest } from './plugin-detector.js';
|
|
7
|
+
import prompts from 'prompts';
|
|
8
|
+
/**
|
|
9
|
+
* Parse and validate a marketplace manifest.
|
|
10
|
+
*
|
|
11
|
+
* @param manifestPath - Path to marketplace.json file
|
|
12
|
+
* @returns Parsed marketplace manifest
|
|
13
|
+
*/
|
|
14
|
+
export async function parseMarketplace(manifestPath) {
|
|
15
|
+
logger.debug('Parsing marketplace manifest', { manifestPath });
|
|
16
|
+
try {
|
|
17
|
+
const content = await readTextFile(manifestPath);
|
|
18
|
+
const manifest = JSON.parse(content);
|
|
19
|
+
// Validate required fields
|
|
20
|
+
if (!manifest.name) {
|
|
21
|
+
throw new ValidationError('Marketplace manifest missing required field: name');
|
|
22
|
+
}
|
|
23
|
+
if (!manifest.plugins || !Array.isArray(manifest.plugins)) {
|
|
24
|
+
throw new ValidationError('Marketplace manifest missing or invalid plugins array');
|
|
25
|
+
}
|
|
26
|
+
if (manifest.plugins.length === 0) {
|
|
27
|
+
throw new ValidationError('Marketplace contains no plugins');
|
|
28
|
+
}
|
|
29
|
+
// Validate each plugin entry
|
|
30
|
+
for (const plugin of manifest.plugins) {
|
|
31
|
+
if (!plugin.name) {
|
|
32
|
+
throw new ValidationError('Marketplace plugin entry missing required field: name');
|
|
33
|
+
}
|
|
34
|
+
// Accept either subdirectory (opkg) or source (Claude Code) field
|
|
35
|
+
if (!plugin.subdirectory && !plugin.source) {
|
|
36
|
+
throw new ValidationError(`Plugin '${plugin.name}' missing required field: subdirectory or source`);
|
|
37
|
+
}
|
|
38
|
+
// Normalize: if source is provided but not subdirectory, use source as subdirectory
|
|
39
|
+
if (!plugin.subdirectory && plugin.source) {
|
|
40
|
+
plugin.subdirectory = plugin.source;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
logger.info('Parsed marketplace manifest', {
|
|
44
|
+
name: manifest.name,
|
|
45
|
+
pluginCount: manifest.plugins.length
|
|
46
|
+
});
|
|
47
|
+
return manifest;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (error instanceof ValidationError) {
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
throw new ValidationError(`Failed to parse marketplace manifest at ${manifestPath}: ${error}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Display interactive plugin selection prompt.
|
|
58
|
+
*
|
|
59
|
+
* @param marketplace - Parsed marketplace manifest
|
|
60
|
+
* @returns Array of selected plugin names (empty if user cancelled)
|
|
61
|
+
*/
|
|
62
|
+
export async function promptPluginSelection(marketplace) {
|
|
63
|
+
console.log(`\n📦 Marketplace: ${marketplace.name}`);
|
|
64
|
+
if (marketplace.description) {
|
|
65
|
+
console.log(` ${marketplace.description}`);
|
|
66
|
+
}
|
|
67
|
+
console.log(`\n${marketplace.plugins.length} plugin${marketplace.plugins.length === 1 ? '' : 's'} available:\n`);
|
|
68
|
+
const choices = marketplace.plugins.map(plugin => ({
|
|
69
|
+
title: plugin.name,
|
|
70
|
+
value: plugin.name,
|
|
71
|
+
description: plugin.description || '',
|
|
72
|
+
selected: false
|
|
73
|
+
}));
|
|
74
|
+
const response = await prompts({
|
|
75
|
+
type: 'multiselect',
|
|
76
|
+
name: 'plugins',
|
|
77
|
+
message: 'Select plugins to install (space to select, enter to confirm):',
|
|
78
|
+
choices,
|
|
79
|
+
min: 1,
|
|
80
|
+
hint: '- Use arrow keys to navigate, space to select/deselect, enter to confirm'
|
|
81
|
+
});
|
|
82
|
+
if (!response.plugins || response.plugins.length === 0) {
|
|
83
|
+
logger.info('User cancelled plugin selection');
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
logger.info('User selected plugins', { selected: response.plugins });
|
|
87
|
+
return response.plugins;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Install selected plugins from a marketplace.
|
|
91
|
+
*
|
|
92
|
+
* @param marketplaceDir - Absolute path to cloned marketplace repository root
|
|
93
|
+
* @param marketplace - Parsed marketplace manifest
|
|
94
|
+
* @param selectedNames - Names of plugins to install
|
|
95
|
+
* @param gitUrl - Git URL of the marketplace repository
|
|
96
|
+
* @param gitRef - Git ref (branch/tag/sha) if specified
|
|
97
|
+
* @param options - Install options
|
|
98
|
+
*/
|
|
99
|
+
export async function installMarketplacePlugins(marketplaceDir, marketplace, selectedNames, gitUrl, gitRef, options) {
|
|
100
|
+
logger.info('Installing marketplace plugins', {
|
|
101
|
+
marketplace: marketplace.name,
|
|
102
|
+
plugins: selectedNames
|
|
103
|
+
});
|
|
104
|
+
const results = [];
|
|
105
|
+
for (const pluginName of selectedNames) {
|
|
106
|
+
const pluginEntry = marketplace.plugins.find(p => p.name === pluginName);
|
|
107
|
+
if (!pluginEntry) {
|
|
108
|
+
logger.error(`Plugin '${pluginName}' not found in marketplace`, { marketplace: marketplace.name });
|
|
109
|
+
results.push({
|
|
110
|
+
name: pluginName,
|
|
111
|
+
success: false,
|
|
112
|
+
error: `Plugin not found in marketplace`
|
|
113
|
+
});
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
const pluginSubdir = pluginEntry.subdirectory || pluginEntry.source;
|
|
117
|
+
if (!pluginSubdir) {
|
|
118
|
+
logger.error(`Plugin entry missing both subdirectory and source fields`, { plugin: pluginName });
|
|
119
|
+
results.push({
|
|
120
|
+
name: pluginName,
|
|
121
|
+
success: false,
|
|
122
|
+
error: `Plugin entry missing subdirectory/source field`
|
|
123
|
+
});
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
const pluginDir = join(marketplaceDir, pluginSubdir);
|
|
127
|
+
// Validate plugin subdirectory exists
|
|
128
|
+
if (!(await exists(pluginDir))) {
|
|
129
|
+
logger.error(`Plugin subdirectory does not exist`, {
|
|
130
|
+
plugin: pluginName,
|
|
131
|
+
subdirectory: pluginSubdir,
|
|
132
|
+
fullPath: pluginDir
|
|
133
|
+
});
|
|
134
|
+
results.push({
|
|
135
|
+
name: pluginName,
|
|
136
|
+
success: false,
|
|
137
|
+
error: `Subdirectory '${pluginSubdir}' does not exist`
|
|
138
|
+
});
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
// Validate plugin structure
|
|
142
|
+
const detection = await detectPluginType(pluginDir);
|
|
143
|
+
if (!detection.isPlugin || detection.type !== 'individual') {
|
|
144
|
+
logger.error(`Subdirectory is not a valid plugin`, {
|
|
145
|
+
plugin: pluginName,
|
|
146
|
+
subdirectory: pluginSubdir
|
|
147
|
+
});
|
|
148
|
+
results.push({
|
|
149
|
+
name: pluginName,
|
|
150
|
+
success: false,
|
|
151
|
+
error: `Subdirectory does not contain a valid plugin (missing .claude-plugin/plugin.json)`
|
|
152
|
+
});
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
// Validate plugin manifest is parseable
|
|
156
|
+
if (!(await validatePluginManifest(detection.manifestPath))) {
|
|
157
|
+
results.push({
|
|
158
|
+
name: pluginName,
|
|
159
|
+
success: false,
|
|
160
|
+
error: `Invalid plugin manifest (cannot parse JSON)`
|
|
161
|
+
});
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
// Install the plugin
|
|
165
|
+
console.log(`\n📦 Installing plugin: ${pluginName}...`);
|
|
166
|
+
try {
|
|
167
|
+
await runPathInstallPipeline({
|
|
168
|
+
...options,
|
|
169
|
+
sourcePath: pluginDir,
|
|
170
|
+
sourceType: 'directory',
|
|
171
|
+
targetDir: '.',
|
|
172
|
+
gitUrl,
|
|
173
|
+
gitRef,
|
|
174
|
+
gitSubdirectory: pluginSubdir
|
|
175
|
+
});
|
|
176
|
+
results.push({ name: pluginName, success: true });
|
|
177
|
+
console.log(`✓ Successfully installed ${pluginName}`);
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
logger.error(`Failed to install plugin`, { plugin: pluginName, error });
|
|
181
|
+
results.push({
|
|
182
|
+
name: pluginName,
|
|
183
|
+
success: false,
|
|
184
|
+
error: error instanceof Error ? error.message : String(error)
|
|
185
|
+
});
|
|
186
|
+
console.error(`✗ Failed to install ${pluginName}: ${error}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Display summary
|
|
190
|
+
console.log('\n' + '='.repeat(60));
|
|
191
|
+
console.log('Installation Summary:');
|
|
192
|
+
console.log('='.repeat(60));
|
|
193
|
+
const successful = results.filter(r => r.success);
|
|
194
|
+
const failed = results.filter(r => !r.success);
|
|
195
|
+
if (successful.length > 0) {
|
|
196
|
+
console.log(`\n✓ Successfully installed (${successful.length}):`);
|
|
197
|
+
for (const result of successful) {
|
|
198
|
+
console.log(` • ${result.name}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (failed.length > 0) {
|
|
202
|
+
console.log(`\n✗ Failed to install (${failed.length}):`);
|
|
203
|
+
for (const result of failed) {
|
|
204
|
+
console.log(` • ${result.name}: ${result.error}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
console.log('');
|
|
208
|
+
// Return success if at least one plugin was installed
|
|
209
|
+
if (successful.length > 0) {
|
|
210
|
+
return {
|
|
211
|
+
success: true
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
return {
|
|
216
|
+
success: false,
|
|
217
|
+
error: 'Failed to install any plugins from marketplace'
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=marketplace-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplace-handler.js","sourceRoot":"","sources":["../../../src/core/install/marketplace-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { displayDependencyTree } from '../dependency-resolver.js';
|
|
2
|
+
import { ensureRegistryDirectories } from '../directory.js';
|
|
3
|
+
import { prepareInstallEnvironment, processConflictResolution, performIndexBasedInstallationPhases, VersionResolutionAbortError } from './install-flow.js';
|
|
4
|
+
import { handleDryRunMode } from './dry-run.js';
|
|
5
|
+
import { displayInstallationResults, formatSelectionSummary } from './install-reporting.js';
|
|
6
|
+
import { resolvePlatforms } from './platform-resolution.js';
|
|
7
|
+
import { getLocalPackageYmlPath, getInstallRootDir, isRootPackage } from '../../utils/paths.js';
|
|
8
|
+
import { exists } from '../../utils/fs.js';
|
|
9
|
+
import { logger } from '../../utils/logger.js';
|
|
10
|
+
import { PackageNotFoundError } from '../../utils/errors.js';
|
|
11
|
+
import { normalizePathForProcessing } from '../../utils/path-normalization.js';
|
|
12
|
+
import { loadPackageFromPath } from './path-package-loader.js';
|
|
13
|
+
import { createWorkspacePackageYml, addPackageToYml, } from '../../utils/package-management.js';
|
|
14
|
+
import { determineResolutionMode } from './install-pipeline.js';
|
|
15
|
+
/**
|
|
16
|
+
* Install a package from a local directory or tarball path.
|
|
17
|
+
*
|
|
18
|
+
* Flow:
|
|
19
|
+
* 1. Load package from path
|
|
20
|
+
* 2. Resolve dependencies recursively (handles path-based deps)
|
|
21
|
+
* 3. Copy to workspace .openpackage/packages/ for consistency
|
|
22
|
+
* 4. Install to workspace platforms
|
|
23
|
+
* 5. Update workspace openpackage.yml with path field
|
|
24
|
+
*/
|
|
25
|
+
export async function runPathInstallPipeline(options) {
|
|
26
|
+
const cwd = process.cwd();
|
|
27
|
+
const resolutionMode = determineResolutionMode(options);
|
|
28
|
+
const dryRun = Boolean(options.dryRun);
|
|
29
|
+
const warnings = [];
|
|
30
|
+
const warnedPackages = new Set();
|
|
31
|
+
// Load package from path
|
|
32
|
+
logger.debug(`Loading package from ${options.sourceType}: ${options.sourcePath}`);
|
|
33
|
+
let sourcePackage;
|
|
34
|
+
let isPlugin = false;
|
|
35
|
+
try {
|
|
36
|
+
// Check if this is a Claude Code plugin
|
|
37
|
+
const { detectPluginType } = await import('./plugin-detector.js');
|
|
38
|
+
const pluginDetection = await detectPluginType(options.sourcePath);
|
|
39
|
+
if (pluginDetection.isPlugin && pluginDetection.type === 'individual') {
|
|
40
|
+
isPlugin = true;
|
|
41
|
+
console.log(`\n🔌 Detected Claude Code plugin`);
|
|
42
|
+
}
|
|
43
|
+
sourcePackage = await loadPackageFromPath(options.sourcePath);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
return {
|
|
47
|
+
success: false,
|
|
48
|
+
error: `Failed to load package from ${options.sourceType} '${options.sourcePath}': ${error}`
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const packageName = sourcePackage.metadata.name;
|
|
52
|
+
const packageVersion = sourcePackage.metadata.version || '0.0.0';
|
|
53
|
+
if (isPlugin) {
|
|
54
|
+
console.log(`📦 Installing plugin: ${packageName}@${packageVersion}`);
|
|
55
|
+
}
|
|
56
|
+
// Check for root package conflict
|
|
57
|
+
if (await isRootPackage(cwd, packageName)) {
|
|
58
|
+
console.log(`⚠️ Cannot install ${packageName} - it matches your project's root package name`);
|
|
59
|
+
console.log(` This would create a circular dependency.`);
|
|
60
|
+
return {
|
|
61
|
+
success: true,
|
|
62
|
+
data: {
|
|
63
|
+
packageName,
|
|
64
|
+
targetDir: getInstallRootDir(cwd),
|
|
65
|
+
resolvedPackages: [],
|
|
66
|
+
totalPackages: 0,
|
|
67
|
+
installed: 0,
|
|
68
|
+
skipped: 1,
|
|
69
|
+
totalOpenPackageFiles: 0,
|
|
70
|
+
sourcePath: options.sourcePath,
|
|
71
|
+
sourceType: options.sourceType
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
await ensureRegistryDirectories();
|
|
76
|
+
await createWorkspacePackageYml(cwd);
|
|
77
|
+
// Resolve dependencies (this will handle path-based dependencies recursively)
|
|
78
|
+
const resolveDependenciesOutcome = async () => {
|
|
79
|
+
try {
|
|
80
|
+
// First, add the source package to resolved packages
|
|
81
|
+
const resolvedPackages = new Map();
|
|
82
|
+
resolvedPackages.set(packageName, {
|
|
83
|
+
name: packageName,
|
|
84
|
+
version: packageVersion,
|
|
85
|
+
pkg: sourcePackage,
|
|
86
|
+
isRoot: true,
|
|
87
|
+
source: 'path',
|
|
88
|
+
contentRoot: options.sourcePath // Store the source path for installation phase
|
|
89
|
+
});
|
|
90
|
+
// Resolve dependencies from the source package
|
|
91
|
+
// We need to manually resolve dependencies since resolveDependenciesForInstall expects a registry package
|
|
92
|
+
const { resolveDependencies } = await import('../dependency-resolver.js');
|
|
93
|
+
const { gatherGlobalVersionConstraints, gatherRootVersionConstraints } = await import('../openpackage.js');
|
|
94
|
+
const globalConstraints = await gatherGlobalVersionConstraints(cwd);
|
|
95
|
+
const rootConstraints = await gatherRootVersionConstraints(cwd);
|
|
96
|
+
const rootOverrides = new Map(rootConstraints);
|
|
97
|
+
const resolverOptions = {
|
|
98
|
+
mode: resolutionMode,
|
|
99
|
+
profile: options.profile,
|
|
100
|
+
apiKey: options.apiKey,
|
|
101
|
+
onWarning: (message) => {
|
|
102
|
+
warnings.push(message);
|
|
103
|
+
console.log(`⚠️ ${message}`);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
// Resolve dependencies, passing the source path for relative resolution
|
|
107
|
+
const depResult = await resolveDependencies(packageName, cwd, true, new Set(), // Empty visitedStack - resolveDependencies manages this internally
|
|
108
|
+
resolvedPackages, packageVersion, new Map(), globalConstraints, rootOverrides, resolverOptions, new Map(), options.sourcePath // Pass source path for relative dependency resolution
|
|
109
|
+
);
|
|
110
|
+
return {
|
|
111
|
+
success: true,
|
|
112
|
+
data: {
|
|
113
|
+
resolvedPackages: Array.from(resolvedPackages.values()),
|
|
114
|
+
missingPackages: Array.from(depResult.missingPackages),
|
|
115
|
+
remoteOutcomes: depResult.remoteOutcomes,
|
|
116
|
+
warnings: warnings.length > 0 ? warnings : undefined
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
if (error instanceof VersionResolutionAbortError) {
|
|
122
|
+
return {
|
|
123
|
+
success: false,
|
|
124
|
+
commandResult: { success: false, error: error.message }
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
if (error instanceof PackageNotFoundError ||
|
|
128
|
+
(error instanceof Error &&
|
|
129
|
+
(error.message.includes('not available in local registry') ||
|
|
130
|
+
(error.message.includes('Package') && error.message.includes('not found'))))) {
|
|
131
|
+
console.log('❌ Package not found');
|
|
132
|
+
return { success: false, commandResult: { success: false, error: 'Package not found' } };
|
|
133
|
+
}
|
|
134
|
+
throw error;
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
const initialResolution = await resolveDependenciesOutcome();
|
|
138
|
+
if (!initialResolution.success) {
|
|
139
|
+
return initialResolution.commandResult;
|
|
140
|
+
}
|
|
141
|
+
let resolvedPackages = initialResolution.data.resolvedPackages;
|
|
142
|
+
let missingPackages = initialResolution.data.missingPackages;
|
|
143
|
+
const remoteOutcomes = initialResolution.data.remoteOutcomes || {};
|
|
144
|
+
if (missingPackages.length > 0) {
|
|
145
|
+
const missingSummary = `Missing packages: ${Array.from(new Set(missingPackages)).join(', ')}`;
|
|
146
|
+
console.log(`⚠️ ${missingSummary}`);
|
|
147
|
+
warnings.push(missingSummary);
|
|
148
|
+
}
|
|
149
|
+
// Display selection summary
|
|
150
|
+
console.log(formatSelectionSummary('path', packageName, packageVersion));
|
|
151
|
+
const { specifiedPlatforms } = await prepareInstallEnvironment(cwd, options);
|
|
152
|
+
const conflictProcessing = await processConflictResolution(resolvedPackages, options);
|
|
153
|
+
if ('cancelled' in conflictProcessing) {
|
|
154
|
+
console.log(`Installation cancelled by user`);
|
|
155
|
+
return {
|
|
156
|
+
success: true,
|
|
157
|
+
data: {
|
|
158
|
+
packageName,
|
|
159
|
+
targetDir: getInstallRootDir(cwd),
|
|
160
|
+
resolvedPackages: [],
|
|
161
|
+
totalPackages: 0,
|
|
162
|
+
installed: 0,
|
|
163
|
+
skipped: 1,
|
|
164
|
+
totalOpenPackageFiles: 0,
|
|
165
|
+
sourcePath: options.sourcePath,
|
|
166
|
+
sourceType: options.sourceType
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
const { finalResolvedPackages, conflictResult } = conflictProcessing;
|
|
171
|
+
displayDependencyTree(finalResolvedPackages, true);
|
|
172
|
+
const packageYmlPath = getLocalPackageYmlPath(cwd);
|
|
173
|
+
const packageYmlExists = await exists(packageYmlPath);
|
|
174
|
+
if (dryRun) {
|
|
175
|
+
// For dry run, we still need to write the package to workspace for consistency
|
|
176
|
+
// but we'll use the standard dry run handler
|
|
177
|
+
return await handleDryRunMode(finalResolvedPackages, packageName, options.targetDir, options, packageYmlExists);
|
|
178
|
+
}
|
|
179
|
+
const canPromptForPlatforms = Boolean(process.stdin.isTTY && process.stdout.isTTY);
|
|
180
|
+
const finalPlatforms = options.resolvedPlatforms && options.resolvedPlatforms.length > 0
|
|
181
|
+
? options.resolvedPlatforms
|
|
182
|
+
: await resolvePlatforms(cwd, specifiedPlatforms, { interactive: canPromptForPlatforms });
|
|
183
|
+
// TODO: Removed manual source copy to .openpackage/packages/ as redundant with index-based install
|
|
184
|
+
// Source files handled via installPackageByIndex; index tracks mappings
|
|
185
|
+
// If local cache needed for path sources, register to registry minimally instead
|
|
186
|
+
const { getLocalPackageDir } = await import('../../utils/paths.js'); // Keep import if needed elsewhere
|
|
187
|
+
logger.debug('Skipped manual source package copy to local packages dir', { packageName, sourcePath: options.sourcePath });
|
|
188
|
+
// Install to workspace platforms
|
|
189
|
+
const installationOutcome = await performIndexBasedInstallationPhases({
|
|
190
|
+
cwd,
|
|
191
|
+
packages: finalResolvedPackages,
|
|
192
|
+
platforms: finalPlatforms,
|
|
193
|
+
conflictResult,
|
|
194
|
+
options,
|
|
195
|
+
targetDir: options.targetDir,
|
|
196
|
+
fileFilters: undefined // Full install for path-based packages
|
|
197
|
+
});
|
|
198
|
+
// Update workspace openpackage.yml with path-based dependency
|
|
199
|
+
const mainPackage = finalResolvedPackages.find(pkg => pkg.isRoot);
|
|
200
|
+
if (packageYmlExists && mainPackage) {
|
|
201
|
+
// Store relative path if possible, otherwise absolute
|
|
202
|
+
const relativePath = normalizePathForProcessing(options.sourcePath);
|
|
203
|
+
const pathToStore = relativePath.startsWith('..') || relativePath.startsWith('/')
|
|
204
|
+
? relativePath
|
|
205
|
+
: `./${relativePath}`;
|
|
206
|
+
await addPackageToYml(cwd, packageName, packageVersion, options.dev ?? false, undefined, // No range for path-based packages
|
|
207
|
+
true, undefined, // No include filter
|
|
208
|
+
options.gitUrl ? undefined : pathToStore, // Store the path when not git
|
|
209
|
+
options.gitUrl, options.gitRef, options.gitSubdirectory);
|
|
210
|
+
}
|
|
211
|
+
displayInstallationResults(packageName, finalResolvedPackages, { platforms: finalPlatforms, created: [] }, options, mainPackage, installationOutcome.allAddedFiles, installationOutcome.allUpdatedFiles, installationOutcome.rootFileResults, missingPackages, remoteOutcomes, installationOutcome.errorCount, installationOutcome.errors);
|
|
212
|
+
// Check if installation actually failed
|
|
213
|
+
const hadErrors = installationOutcome.errorCount > 0;
|
|
214
|
+
const installedAnyFiles = installationOutcome.allAddedFiles.length > 0 ||
|
|
215
|
+
installationOutcome.allUpdatedFiles.length > 0 ||
|
|
216
|
+
installationOutcome.rootFileResults.installed.length > 0 ||
|
|
217
|
+
installationOutcome.rootFileResults.updated.length > 0;
|
|
218
|
+
if (hadErrors && !installedAnyFiles) {
|
|
219
|
+
// Complete failure - return error
|
|
220
|
+
return {
|
|
221
|
+
success: false,
|
|
222
|
+
error: `Failed to install ${packageName}: ${installationOutcome.errors?.join('; ')}`,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
return {
|
|
226
|
+
success: true,
|
|
227
|
+
data: {
|
|
228
|
+
packageName,
|
|
229
|
+
targetDir: getInstallRootDir(cwd),
|
|
230
|
+
resolvedPackages: finalResolvedPackages,
|
|
231
|
+
totalPackages: finalResolvedPackages.length,
|
|
232
|
+
installed: installationOutcome.installedCount,
|
|
233
|
+
skipped: installationOutcome.skippedCount,
|
|
234
|
+
totalOpenPackageFiles: installationOutcome.totalOpenPackageFiles,
|
|
235
|
+
sourcePath: options.sourcePath,
|
|
236
|
+
sourceType: options.sourceType
|
|
237
|
+
},
|
|
238
|
+
warnings: warnings.length > 0 ? Array.from(new Set(warnings)) : undefined
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=path-install-pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-install-pipeline.js","sourceRoot":"","sources":["../../../src/core/install/path-install-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { relative, basename } from 'path';
|
|
2
|
+
import { readFile } from 'fs/promises';
|
|
3
|
+
import { loadPackageConfig } from '../package-context.js';
|
|
4
|
+
import { extractPackageFromTarball } from '../../utils/tarball.js';
|
|
5
|
+
import { walkFiles, readTextFile } from '../../utils/fs.js';
|
|
6
|
+
import { isJunk } from 'junk';
|
|
7
|
+
import { logger } from '../../utils/logger.js';
|
|
8
|
+
import { ValidationError } from '../../utils/errors.js';
|
|
9
|
+
import { FILE_PATTERNS, PACKAGE_PATHS } from '../../constants/index.js';
|
|
10
|
+
import { detectPluginType } from './plugin-detector.js';
|
|
11
|
+
import { transformPluginToPackage } from './plugin-transformer.js';
|
|
12
|
+
/**
|
|
13
|
+
* Infer the source type from a path string.
|
|
14
|
+
*/
|
|
15
|
+
export function inferSourceType(path) {
|
|
16
|
+
return path.endsWith('.tgz') || path.endsWith('.tar.gz') ? 'tarball' : 'directory';
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Load a package from a local directory.
|
|
20
|
+
* Reads all files from the directory and loads openpackage.yml.
|
|
21
|
+
*
|
|
22
|
+
* If the directory is a Claude Code plugin, transforms it to OpenPackage format.
|
|
23
|
+
*/
|
|
24
|
+
export async function loadPackageFromDirectory(dirPath) {
|
|
25
|
+
logger.debug(`Loading package from directory: ${dirPath}`);
|
|
26
|
+
// Check if this is a Claude Code plugin
|
|
27
|
+
const pluginDetection = await detectPluginType(dirPath);
|
|
28
|
+
if (pluginDetection.isPlugin && pluginDetection.type === 'individual') {
|
|
29
|
+
logger.info('Detected Claude Code plugin, transforming to OpenPackage format', { dirPath });
|
|
30
|
+
return await transformPluginToPackage(dirPath);
|
|
31
|
+
}
|
|
32
|
+
// If it's a marketplace, we need to handle plugin selection (done upstream in install command)
|
|
33
|
+
if (pluginDetection.isPlugin && pluginDetection.type === 'marketplace') {
|
|
34
|
+
throw new ValidationError(`Directory '${dirPath}' is a Claude Code plugin marketplace. ` +
|
|
35
|
+
`Marketplace installation requires plugin selection and should be handled by the install command.`);
|
|
36
|
+
}
|
|
37
|
+
// Load openpackage.yml for regular packages
|
|
38
|
+
const config = await loadPackageConfig(dirPath);
|
|
39
|
+
if (!config) {
|
|
40
|
+
throw new ValidationError(`Directory '${dirPath}' is not a valid OpenPackage directory or Claude Code plugin. ` +
|
|
41
|
+
`Missing ${FILE_PATTERNS.OPENPACKAGE_YML} or .claude-plugin/plugin.json`);
|
|
42
|
+
}
|
|
43
|
+
// Discover all files in the directory
|
|
44
|
+
const files = [];
|
|
45
|
+
try {
|
|
46
|
+
for await (const fullPath of walkFiles(dirPath)) {
|
|
47
|
+
const relativePath = relative(dirPath, fullPath);
|
|
48
|
+
// Filter out junk files
|
|
49
|
+
if (isJunk(basename(relativePath))) {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
const content = await readTextFile(fullPath);
|
|
53
|
+
files.push({
|
|
54
|
+
path: relativePath,
|
|
55
|
+
content,
|
|
56
|
+
encoding: 'utf8'
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
logger.debug(`Loaded ${files.length} files from directory: ${dirPath}`);
|
|
60
|
+
return {
|
|
61
|
+
metadata: config,
|
|
62
|
+
files
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
logger.error(`Failed to load package from directory: ${dirPath}`, { error });
|
|
67
|
+
throw new ValidationError(`Failed to load package from directory: ${error}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Load a package from a tarball file.
|
|
72
|
+
* Extracts to a temporary location, reads files, then cleans up.
|
|
73
|
+
*/
|
|
74
|
+
export async function loadPackageFromTarball(tarballPath) {
|
|
75
|
+
logger.debug(`Loading package from tarball: ${tarballPath}`);
|
|
76
|
+
// Read tarball file
|
|
77
|
+
let tarballBuffer;
|
|
78
|
+
try {
|
|
79
|
+
tarballBuffer = await readFile(tarballPath);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
throw new ValidationError(`Failed to read tarball file '${tarballPath}': ${error}`);
|
|
83
|
+
}
|
|
84
|
+
// Extract tarball
|
|
85
|
+
const extracted = await extractPackageFromTarball(tarballBuffer);
|
|
86
|
+
// Find openpackage.yml in extracted files
|
|
87
|
+
const packageYmlFile = extracted.files.find(f => f.path === PACKAGE_PATHS.MANIFEST_RELATIVE || f.path === 'openpackage.yml');
|
|
88
|
+
if (!packageYmlFile) {
|
|
89
|
+
throw new ValidationError(`Tarball '${tarballPath}' does not contain a valid ${FILE_PATTERNS.OPENPACKAGE_YML} file`);
|
|
90
|
+
}
|
|
91
|
+
// Parse openpackage.yml content
|
|
92
|
+
const yaml = await import('js-yaml');
|
|
93
|
+
const config = yaml.load(packageYmlFile.content);
|
|
94
|
+
if (!config.name) {
|
|
95
|
+
throw new ValidationError(`Tarball '${tarballPath}' contains invalid ${FILE_PATTERNS.OPENPACKAGE_YML}: missing name field`);
|
|
96
|
+
}
|
|
97
|
+
logger.debug(`Loaded package ${config.name}@${config.version} from tarball: ${tarballPath}`);
|
|
98
|
+
return {
|
|
99
|
+
metadata: config,
|
|
100
|
+
files: extracted.files
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Load a package from either a directory or tarball path.
|
|
105
|
+
* Automatically detects the source type.
|
|
106
|
+
*/
|
|
107
|
+
export async function loadPackageFromPath(path) {
|
|
108
|
+
const sourceType = inferSourceType(path);
|
|
109
|
+
if (sourceType === 'tarball') {
|
|
110
|
+
return await loadPackageFromTarball(path);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
return await loadPackageFromDirectory(path);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=path-package-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-package-loader.js","sourceRoot":"","sources":["../../../src/core/install/path-package-loader.ts"],"names":[],"mappings":"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"}
|