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
|
@@ -3,31 +3,23 @@
|
|
|
3
3
|
*
|
|
4
4
|
* This module provides two main operations:
|
|
5
5
|
* - readPackageFilesForRegistry: Collect files from a package directory into a
|
|
6
|
-
* registry-ready payload, applying static exclusions
|
|
6
|
+
* registry-ready payload, applying static exclusions (no manifest filters).
|
|
7
7
|
* - writePackageFilesToDirectory: Write a set of PackageFile entries to disk,
|
|
8
8
|
* syncing the directory contents (removing stale files).
|
|
9
9
|
*/
|
|
10
10
|
import { join, relative, dirname } from 'path';
|
|
11
|
-
import {
|
|
12
|
-
import { getAllPlatforms, getPlatformDefinition } from '../core/platforms.js';
|
|
11
|
+
import { FILE_PATTERNS } from '../constants/index.js';
|
|
13
12
|
import { exists, ensureDir, readTextFile, writeTextFile, walkFiles, remove } from './fs.js';
|
|
14
13
|
import { logger } from './logger.js';
|
|
15
14
|
import { normalizePathForProcessing } from './path-normalization.js';
|
|
16
|
-
import {
|
|
17
|
-
import { createPackageFileFilter, isExcludedFromPackage } from './package-filters.js';
|
|
18
|
-
const MANIFEST_RELATIVE_PATHS = Object.freeze([
|
|
19
|
-
FILE_PATTERNS.PACKAGE_YML,
|
|
20
|
-
PACKAGE_PATHS.MANIFEST_RELATIVE
|
|
21
|
-
]);
|
|
15
|
+
import { isExcludedFromPackage } from './package-filters.js';
|
|
22
16
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
23
17
|
// Reading package files
|
|
24
18
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
25
19
|
/**
|
|
26
20
|
* Read package files from disk and return a registry-ready payload.
|
|
27
21
|
*
|
|
28
|
-
* Applies
|
|
29
|
-
* 1. Static exclusions (package index file, packages/** nested dirs).
|
|
30
|
-
* 2. Manifest-based include/exclude patterns from package.yml.
|
|
22
|
+
* Applies static exclusions (package index file, packages/** nested dirs).
|
|
31
23
|
*
|
|
32
24
|
* @param packageDir - Absolute path to the package root directory.
|
|
33
25
|
* @returns Array of PackageFile entries representing the canonical payload.
|
|
@@ -36,7 +28,6 @@ export async function readPackageFilesForRegistry(packageDir) {
|
|
|
36
28
|
if (!(await exists(packageDir))) {
|
|
37
29
|
return [];
|
|
38
30
|
}
|
|
39
|
-
const manifestFilter = await loadManifestFilter(packageDir);
|
|
40
31
|
const files = [];
|
|
41
32
|
for await (const fullPath of walkFiles(packageDir)) {
|
|
42
33
|
const relativePath = normalizePathForProcessing(relative(packageDir, fullPath));
|
|
@@ -45,100 +36,11 @@ export async function readPackageFilesForRegistry(packageDir) {
|
|
|
45
36
|
logger.debug(`Skipping static-excluded path: ${relativePath}`);
|
|
46
37
|
continue;
|
|
47
38
|
}
|
|
48
|
-
// Layer 2: manifest-based include/exclude
|
|
49
|
-
if (!manifestFilter(relativePath)) {
|
|
50
|
-
logger.debug(`Skipping path by manifest filter: ${relativePath}`);
|
|
51
|
-
continue;
|
|
52
|
-
}
|
|
53
39
|
const content = await readTextFile(fullPath);
|
|
54
40
|
files.push({ path: relativePath, content, encoding: 'utf8' });
|
|
55
41
|
}
|
|
56
42
|
return files;
|
|
57
43
|
}
|
|
58
|
-
/**
|
|
59
|
-
* Build a filter function from the package.yml include/exclude fields.
|
|
60
|
-
* Returns a pass-all filter if no manifest or no patterns are defined.
|
|
61
|
-
*/
|
|
62
|
-
async function loadManifestFilter(packageDir) {
|
|
63
|
-
const manifestInfo = await findPackageManifest(packageDir);
|
|
64
|
-
let manifestConfigInclude;
|
|
65
|
-
let manifestConfigExclude;
|
|
66
|
-
if (manifestInfo) {
|
|
67
|
-
try {
|
|
68
|
-
const config = await parsePackageYml(manifestInfo.fullPath);
|
|
69
|
-
manifestConfigInclude = config.include;
|
|
70
|
-
manifestConfigExclude = config.exclude;
|
|
71
|
-
}
|
|
72
|
-
catch (error) {
|
|
73
|
-
logger.warn(`Failed to load manifest filters from ${manifestInfo.fullPath}: ${String(error)}`);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
const defaults = await buildDefaultIncludeConfig(packageDir, manifestInfo);
|
|
77
|
-
const includePatterns = [
|
|
78
|
-
...defaults.includePatterns,
|
|
79
|
-
...(manifestConfigInclude ?? [])
|
|
80
|
-
];
|
|
81
|
-
const excludePatterns = manifestConfigExclude ?? [];
|
|
82
|
-
const baseFilter = createPackageFileFilter({
|
|
83
|
-
include: includePatterns,
|
|
84
|
-
exclude: excludePatterns
|
|
85
|
-
});
|
|
86
|
-
return (relativePath) => {
|
|
87
|
-
const normalized = normalizePathForProcessing(relativePath);
|
|
88
|
-
if (!normalized) {
|
|
89
|
-
return false;
|
|
90
|
-
}
|
|
91
|
-
if (defaults.hardIncludeFiles.has(normalized)) {
|
|
92
|
-
return true;
|
|
93
|
-
}
|
|
94
|
-
return baseFilter(relativePath);
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
async function findPackageManifest(packageDir) {
|
|
98
|
-
for (const relativePath of MANIFEST_RELATIVE_PATHS) {
|
|
99
|
-
const fullPath = join(packageDir, relativePath);
|
|
100
|
-
if (await exists(fullPath)) {
|
|
101
|
-
return { fullPath, relativePath };
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
return null;
|
|
105
|
-
}
|
|
106
|
-
async function buildDefaultIncludeConfig(packageDir, manifestInfo) {
|
|
107
|
-
const includePatterns = new Set();
|
|
108
|
-
const hardIncludeFiles = new Set();
|
|
109
|
-
// Include package.yml (at .openpackage/package.yml relative to package root)
|
|
110
|
-
includePatterns.add(PACKAGE_PATHS.MANIFEST_RELATIVE);
|
|
111
|
-
hardIncludeFiles.add(normalizePathForProcessing(PACKAGE_PATHS.MANIFEST_RELATIVE));
|
|
112
|
-
if (manifestInfo) {
|
|
113
|
-
includePatterns.add(manifestInfo.relativePath);
|
|
114
|
-
hardIncludeFiles.add(normalizePathForProcessing(manifestInfo.relativePath));
|
|
115
|
-
}
|
|
116
|
-
const rootFiles = new Set([FILE_PATTERNS.AGENTS_MD]);
|
|
117
|
-
const universalSubdirs = new Set();
|
|
118
|
-
for (const platform of getAllPlatforms({ includeDisabled: true })) {
|
|
119
|
-
const definition = getPlatformDefinition(platform);
|
|
120
|
-
if (definition.rootFile) {
|
|
121
|
-
rootFiles.add(definition.rootFile);
|
|
122
|
-
}
|
|
123
|
-
for (const subdirKey of Object.keys(definition.subdirs ?? {})) {
|
|
124
|
-
universalSubdirs.add(subdirKey);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
for (const rootFile of rootFiles) {
|
|
128
|
-
includePatterns.add(rootFile);
|
|
129
|
-
}
|
|
130
|
-
// packageDir is the package root, so look for subdirs at packageDir/.openpackage/<subdir>/
|
|
131
|
-
await Promise.all(Array.from(universalSubdirs).map(async (subdirName) => {
|
|
132
|
-
const absoluteDir = join(packageDir, DIR_PATTERNS.OPENPACKAGE, subdirName);
|
|
133
|
-
if (await exists(absoluteDir)) {
|
|
134
|
-
includePatterns.add(`${DIR_PATTERNS.OPENPACKAGE}/${subdirName}/**`);
|
|
135
|
-
}
|
|
136
|
-
}));
|
|
137
|
-
return {
|
|
138
|
-
includePatterns: Array.from(includePatterns),
|
|
139
|
-
hardIncludeFiles
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
44
|
/**
|
|
143
45
|
* Write package files to a directory, syncing its contents.
|
|
144
46
|
*
|
|
@@ -155,7 +57,7 @@ export async function writePackageFilesToDirectory(targetDir, files, options = {
|
|
|
155
57
|
// Build the set of paths that should remain after the write
|
|
156
58
|
const pathsToKeep = new Set(files.map(f => normalizePathForProcessing(f.path)));
|
|
157
59
|
if (options.preserveIndexFile) {
|
|
158
|
-
pathsToKeep.add(FILE_PATTERNS.
|
|
60
|
+
pathsToKeep.add(FILE_PATTERNS.OPENPACKAGE_INDEX_YML);
|
|
159
61
|
}
|
|
160
62
|
// Remove stale files (but never touch protected paths like packages/**)
|
|
161
63
|
await removeStaleFiles(targetDir, pathsToKeep);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-copy.js","sourceRoot":"","sources":["../../src/utils/package-copy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG/C,OAAO,
|
|
1
|
+
{"version":3,"file":"package-copy.js","sourceRoot":"","sources":["../../src/utils/package-copy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,93 +1,21 @@
|
|
|
1
1
|
import { normalizePathForProcessing } from './path-normalization.js';
|
|
2
2
|
import { DIR_PATTERNS, FILE_PATTERNS, OPENPACKAGE_DIRS } from '../constants/index.js';
|
|
3
3
|
const EXCLUDED_DIR_PREFIXES = [
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
OPENPACKAGE_DIRS.PACKAGES, // Nested packages are independent units; never copy inline
|
|
5
|
+
// Note: .openpackage/ is excluded separately in the function below (entire directory is workspace-local metadata)
|
|
6
|
+
`${DIR_PATTERNS.OPENPACKAGE}/${OPENPACKAGE_DIRS.PACKAGES}` // Legacy: kept for completeness, but covered by .openpackage/ exclusion in function
|
|
6
7
|
];
|
|
7
|
-
const EXCLUDED_FILES = new Set([FILE_PATTERNS.
|
|
8
|
-
const MATCH_ALL = () => true;
|
|
9
|
-
const SPECIAL_REGEX_CHARS = /[\\^$+?.()|[\]{}]/g;
|
|
10
|
-
function escapeRegexCharacter(segment) {
|
|
11
|
-
return segment.replace(SPECIAL_REGEX_CHARS, '\\$&');
|
|
12
|
-
}
|
|
13
|
-
function normalizePattern(rawPattern) {
|
|
14
|
-
if (typeof rawPattern !== 'string') {
|
|
15
|
-
return null;
|
|
16
|
-
}
|
|
17
|
-
let pattern = rawPattern.trim();
|
|
18
|
-
if (pattern.length === 0) {
|
|
19
|
-
return null;
|
|
20
|
-
}
|
|
21
|
-
pattern = pattern.replace(/\\/g, '/');
|
|
22
|
-
pattern = pattern.replace(/^\.\/+/, '');
|
|
23
|
-
pattern = pattern.replace(/^\/+/, '');
|
|
24
|
-
pattern = pattern.replace(/\/+/g, '/');
|
|
25
|
-
if (pattern.length === 0) {
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
if (pattern.endsWith('/')) {
|
|
29
|
-
pattern = `${pattern}**`;
|
|
30
|
-
}
|
|
31
|
-
return pattern;
|
|
32
|
-
}
|
|
33
|
-
function globToRegExp(pattern) {
|
|
34
|
-
let regex = '^';
|
|
35
|
-
for (let i = 0; i < pattern.length; i++) {
|
|
36
|
-
const char = pattern[i];
|
|
37
|
-
if (char === '*') {
|
|
38
|
-
const nextChar = pattern[i + 1];
|
|
39
|
-
if (nextChar === '*') {
|
|
40
|
-
const slashChar = pattern[i + 2];
|
|
41
|
-
if (slashChar === '/') {
|
|
42
|
-
regex += '(?:.*/)?';
|
|
43
|
-
i += 2;
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
regex += '.*';
|
|
47
|
-
i += 1;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
regex += '[^/]*';
|
|
52
|
-
}
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
if (char === '?') {
|
|
56
|
-
regex += '[^/]';
|
|
57
|
-
continue;
|
|
58
|
-
}
|
|
59
|
-
regex += escapeRegexCharacter(char);
|
|
60
|
-
}
|
|
61
|
-
regex += '$';
|
|
62
|
-
return new RegExp(regex);
|
|
63
|
-
}
|
|
64
|
-
function compilePatterns(patterns) {
|
|
65
|
-
if (!patterns) {
|
|
66
|
-
return [];
|
|
67
|
-
}
|
|
68
|
-
const compiled = [];
|
|
69
|
-
for (const rawPattern of patterns) {
|
|
70
|
-
const normalized = normalizePattern(rawPattern);
|
|
71
|
-
if (!normalized) {
|
|
72
|
-
continue;
|
|
73
|
-
}
|
|
74
|
-
try {
|
|
75
|
-
compiled.push(globToRegExp(normalized));
|
|
76
|
-
}
|
|
77
|
-
catch {
|
|
78
|
-
// Skip invalid patterns to avoid blocking save/pack flows.
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return compiled;
|
|
82
|
-
}
|
|
83
|
-
function matches(path, patterns) {
|
|
84
|
-
return patterns.some(pattern => pattern.test(path));
|
|
85
|
-
}
|
|
8
|
+
const EXCLUDED_FILES = new Set([FILE_PATTERNS.OPENPACKAGE_INDEX_YML]);
|
|
86
9
|
export function isExcludedFromPackage(relativePath) {
|
|
87
10
|
const normalized = normalizePathForProcessing(relativePath);
|
|
88
11
|
if (!normalized) {
|
|
89
12
|
return true;
|
|
90
13
|
}
|
|
14
|
+
// Exclude entire .openpackage/ directory (workspace-local metadata; never part of payload)
|
|
15
|
+
if (normalized === DIR_PATTERNS.OPENPACKAGE ||
|
|
16
|
+
normalized.startsWith(`${DIR_PATTERNS.OPENPACKAGE}/`)) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
91
19
|
const baseName = normalized.split('/').pop();
|
|
92
20
|
if (baseName && EXCLUDED_FILES.has(baseName)) {
|
|
93
21
|
return true;
|
|
@@ -98,28 +26,4 @@ export function isExcludedFromPackage(relativePath) {
|
|
|
98
26
|
normalized.startsWith(`${normalizedPrefix}/`));
|
|
99
27
|
});
|
|
100
28
|
}
|
|
101
|
-
export function createPackageFileFilter(config) {
|
|
102
|
-
if (!config) {
|
|
103
|
-
return MATCH_ALL;
|
|
104
|
-
}
|
|
105
|
-
const includePatterns = compilePatterns(config.include);
|
|
106
|
-
const excludePatterns = compilePatterns(config.exclude);
|
|
107
|
-
const hasInclude = includePatterns.length > 0;
|
|
108
|
-
if (!hasInclude && excludePatterns.length === 0) {
|
|
109
|
-
return MATCH_ALL;
|
|
110
|
-
}
|
|
111
|
-
return (relativePath) => {
|
|
112
|
-
const normalized = normalizePathForProcessing(relativePath);
|
|
113
|
-
if (!normalized) {
|
|
114
|
-
return false;
|
|
115
|
-
}
|
|
116
|
-
if (hasInclude && !matches(normalized, includePatterns)) {
|
|
117
|
-
return false;
|
|
118
|
-
}
|
|
119
|
-
if (excludePatterns.length > 0 && matches(normalized, excludePatterns)) {
|
|
120
|
-
return false;
|
|
121
|
-
}
|
|
122
|
-
return true;
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
29
|
//# sourceMappingURL=package-filters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-filters.js","sourceRoot":"","sources":["../../src/utils/package-filters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEtF,MAAM,qBAAqB,GAAG;IAC5B,
|
|
1
|
+
{"version":3,"file":"package-filters.js","sourceRoot":"","sources":["../../src/utils/package-filters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEtF,MAAM,qBAAqB,GAAG;IAC5B,gBAAgB,CAAC,QAAQ,EAAE,2DAA2D;IACtF,kHAAkH;IAClH,GAAG,YAAY,CAAC,WAAW,IAAI,gBAAgB,CAAC,QAAQ,EAAE,CAAC,oFAAoF;CAChJ,CAAC;AAEF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAE9E,MAAM,UAAU,qBAAqB,CAAC,YAAoB;IACxD,MAAM,UAAU,GAAG,0BAA0B,CAAC,YAAY,CAAC,CAAC;IAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2FAA2F;IAC3F,IAAI,UAAU,KAAK,YAAY,CAAC,WAAW;QACvC,UAAU,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAC7C,IAAI,QAAQ,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QACzC,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAC5D,OAAO,CACL,UAAU,KAAK,gBAAgB;YAC/B,UAAU,CAAC,UAAU,CAAC,GAAG,gBAAgB,GAAG,CAAC,CAC9C,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -8,11 +8,11 @@ import { logger } from './logger.js';
|
|
|
8
8
|
const HEADER_COMMENT = '# This file is managed by OpenPackage. Do not edit manually.';
|
|
9
9
|
export function getPackageIndexPath(cwd, packageName, location = 'nested') {
|
|
10
10
|
if (location === 'root') {
|
|
11
|
-
return join(getLocalOpenPackageDir(cwd), FILE_PATTERNS.
|
|
11
|
+
return join(getLocalOpenPackageDir(cwd), FILE_PATTERNS.OPENPACKAGE_INDEX_YML);
|
|
12
12
|
}
|
|
13
|
-
// Nested:
|
|
13
|
+
// Nested: cached package root (cwd/.openpackage/packages/<name>/)
|
|
14
14
|
const contentDir = getLocalPackageContentDir(cwd, packageName);
|
|
15
|
-
return join(contentDir, FILE_PATTERNS.
|
|
15
|
+
return join(contentDir, FILE_PATTERNS.OPENPACKAGE_INDEX_YML);
|
|
16
16
|
}
|
|
17
17
|
export function ensureTrailingSlash(value) {
|
|
18
18
|
return value.endsWith('/') ? value : `${value}/`;
|
|
@@ -22,8 +22,29 @@ export function sortMapping(record) {
|
|
|
22
22
|
const normalized = {};
|
|
23
23
|
for (const key of sortedKeys) {
|
|
24
24
|
const values = record[key] || [];
|
|
25
|
-
const
|
|
26
|
-
|
|
25
|
+
const hasComplex = values.some(v => typeof v === 'object' && v !== null);
|
|
26
|
+
if (hasComplex) {
|
|
27
|
+
// Complex mappings - sort by target path
|
|
28
|
+
const sorted = [...values].sort((a, b) => {
|
|
29
|
+
const targetA = typeof a === 'string' ? a : a.target;
|
|
30
|
+
const targetB = typeof b === 'string' ? b : b.target;
|
|
31
|
+
return targetA.localeCompare(targetB);
|
|
32
|
+
});
|
|
33
|
+
// Dedupe by target
|
|
34
|
+
const seen = new Set();
|
|
35
|
+
normalized[key] = sorted.filter(item => {
|
|
36
|
+
const target = typeof item === 'string' ? item : item.target;
|
|
37
|
+
if (seen.has(target))
|
|
38
|
+
return false;
|
|
39
|
+
seen.add(target);
|
|
40
|
+
return true;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
// Simple string array
|
|
45
|
+
const sortedValues = [...new Set(values)].sort();
|
|
46
|
+
normalized[key] = sortedValues;
|
|
47
|
+
}
|
|
27
48
|
}
|
|
28
49
|
return normalized;
|
|
29
50
|
}
|
|
@@ -107,7 +128,7 @@ export async function writePackageIndex(record) {
|
|
|
107
128
|
const { path: indexPath, files } = record;
|
|
108
129
|
const workspaceVer = record.workspace?.version;
|
|
109
130
|
if (!workspaceVer) {
|
|
110
|
-
throw new Error(`workspace.version is required when writing ${FILE_PATTERNS.
|
|
131
|
+
throw new Error(`workspace.version is required when writing ${FILE_PATTERNS.OPENPACKAGE_INDEX_YML}`);
|
|
111
132
|
}
|
|
112
133
|
const workspace = {
|
|
113
134
|
hash: record.workspace?.hash,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-index-yml.js","sourceRoot":"","sources":["../../src/utils/package-index-yml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,cAAc,GAAG,8DAA8D,CAAC;AAmBtF,MAAM,UAAU,mBAAmB,CACjC,GAAW,EACX,WAAmB,EACnB,WAAiC,QAAQ;IAEzC,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"package-index-yml.js","sourceRoot":"","sources":["../../src/utils/package-index-yml.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { resolve, isAbsolute } from 'path';
|
|
2
|
+
import { exists } from './fs.js';
|
|
3
|
+
import { isValidPackageDirectory } from '../core/package-context.js';
|
|
4
|
+
import { parsePackageInstallSpec } from './package-name.js';
|
|
5
|
+
import { ValidationError } from './errors.js';
|
|
6
|
+
import { parseGitSpec } from './git-spec.js';
|
|
7
|
+
import { logger } from './logger.js';
|
|
8
|
+
import { resolvePackageByName } from './package-name-resolution.js';
|
|
9
|
+
/**
|
|
10
|
+
* Classify whether input is a registry package name, local directory, or tarball.
|
|
11
|
+
*
|
|
12
|
+
* Detection order:
|
|
13
|
+
* 1. Ends with .tgz or .tar.gz AND file exists → 'tarball'
|
|
14
|
+
* 2. Starts with /, ./, ../, or is . AND isValidPackageDirectory → 'directory'
|
|
15
|
+
* 3. Otherwise → parse as registry name via parsePackageInstallSpec
|
|
16
|
+
*
|
|
17
|
+
* @param raw - The raw input string from the user
|
|
18
|
+
* @param cwd - Current working directory for resolving relative paths
|
|
19
|
+
* @returns Classification of the input type and relevant information
|
|
20
|
+
*/
|
|
21
|
+
export async function classifyPackageInput(raw, cwd = process.cwd()) {
|
|
22
|
+
// Check for git/github specs first
|
|
23
|
+
const gitSpec = parseGitSpec(raw);
|
|
24
|
+
if (gitSpec) {
|
|
25
|
+
return {
|
|
26
|
+
type: 'git',
|
|
27
|
+
gitUrl: gitSpec.url,
|
|
28
|
+
gitRef: gitSpec.ref,
|
|
29
|
+
gitSubdirectory: gitSpec.subdirectory
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
// Check for tarball file extension
|
|
33
|
+
const isTarballPath = raw.endsWith('.tgz') || raw.endsWith('.tar.gz');
|
|
34
|
+
// Check if input looks like a path
|
|
35
|
+
const looksLikePath = raw.startsWith('/') ||
|
|
36
|
+
raw.startsWith('./') ||
|
|
37
|
+
raw.startsWith('../') ||
|
|
38
|
+
raw === '.' ||
|
|
39
|
+
raw.startsWith('~/') ||
|
|
40
|
+
raw.startsWith('.openpackage/') || // Include .openpackage paths
|
|
41
|
+
(isAbsolute(raw) && !raw.includes('@'));
|
|
42
|
+
if (isTarballPath || looksLikePath) {
|
|
43
|
+
const resolvedPath = isAbsolute(raw) ? raw : resolve(cwd, raw);
|
|
44
|
+
if (isTarballPath) {
|
|
45
|
+
if (await exists(resolvedPath)) {
|
|
46
|
+
return { type: 'tarball', resolvedPath };
|
|
47
|
+
}
|
|
48
|
+
// File doesn't exist - fall through to treat as registry name
|
|
49
|
+
// (will error later with "file not found" or "package not found")
|
|
50
|
+
}
|
|
51
|
+
// Check if it's a valid package directory OR a plugin
|
|
52
|
+
const isValid = await isValidPackageDirectory(resolvedPath);
|
|
53
|
+
const { detectPluginType } = await import('../core/install/plugin-detector.js');
|
|
54
|
+
const pluginDetection = await detectPluginType(resolvedPath);
|
|
55
|
+
if (isValid || pluginDetection.isPlugin) {
|
|
56
|
+
return { type: 'directory', resolvedPath };
|
|
57
|
+
}
|
|
58
|
+
// Path exists but isn't a valid package? Error
|
|
59
|
+
if (await exists(resolvedPath)) {
|
|
60
|
+
throw new ValidationError(`Path '${raw}' exists but is not a valid OpenPackage directory or Claude Code plugin. ` +
|
|
61
|
+
`Valid packages must contain openpackage.yml or .claude-plugin/plugin.json`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Check if this looks like a simple package name (not an explicit path)
|
|
65
|
+
// Search in workspace/global/registry packages using shared resolution
|
|
66
|
+
if (!looksLikePath && !isTarballPath) {
|
|
67
|
+
const resolution = await resolvePackageByName({
|
|
68
|
+
cwd,
|
|
69
|
+
packageName: raw,
|
|
70
|
+
checkCwd: false, // Install doesn't prioritize CWD
|
|
71
|
+
searchWorkspace: true, // Search workspace packages
|
|
72
|
+
searchGlobal: true, // Search global packages
|
|
73
|
+
searchRegistry: true // Search registry (install needs this)
|
|
74
|
+
});
|
|
75
|
+
if (resolution.found && resolution.path) {
|
|
76
|
+
logger.info('Resolved package name to path for install', {
|
|
77
|
+
packageName: raw,
|
|
78
|
+
path: resolution.path,
|
|
79
|
+
sourceType: resolution.sourceType
|
|
80
|
+
});
|
|
81
|
+
return {
|
|
82
|
+
type: 'directory',
|
|
83
|
+
resolvedPath: resolution.path,
|
|
84
|
+
sourceComparisonInfo: resolution.resolutionInfo
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Treat as registry package name
|
|
89
|
+
try {
|
|
90
|
+
const { name, version, registryPath } = parsePackageInstallSpec(raw);
|
|
91
|
+
return { type: 'registry', name, version, registryPath };
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
// If parsing fails, still return registry type - let downstream handle the error
|
|
95
|
+
return { type: 'registry', name: raw };
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=package-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-input.js","sourceRoot":"","sources":["../../src/utils/package-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EACL,oBAAoB,EAGrB,MAAM,8BAA8B,CAAC;AA2BtC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAAW,EACX,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,mCAAmC;IACnC,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO;YACL,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,OAAO,CAAC,GAAG;YACnB,MAAM,EAAE,OAAO,CAAC,GAAG;YACnB,eAAe,EAAE,OAAO,CAAC,YAAY;SACtC,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,MAAM,aAAa,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAEtE,mCAAmC;IACnC,MAAM,aAAa,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;QACnB,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;QACpB,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;QACrB,GAAG,KAAK,GAAG;QACX,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;QACpB,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,6BAA6B;QAChE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAE9D,IAAI,aAAa,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAE/D,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC/B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;YAC3C,CAAC;YACD,8DAA8D;YAC9D,kEAAkE;QACpE,CAAC;QAED,sDAAsD;QACtD,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,YAAY,CAAC,CAAC;QAC5D,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;QAChF,MAAM,eAAe,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAE7D,IAAI,OAAO,IAAI,eAAe,CAAC,QAAQ,EAAE,CAAC;YACxC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;QAC7C,CAAC;QAED,+CAA+C;QAC/C,IAAI,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,eAAe,CACvB,SAAS,GAAG,2EAA2E;gBACvF,2EAA2E,CAC5E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,uEAAuE;IACvE,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC;YAC5C,GAAG;YACH,WAAW,EAAE,GAAG;YAChB,QAAQ,EAAE,KAAK,EAAW,iCAAiC;YAC3D,eAAe,EAAE,IAAI,EAAK,4BAA4B;YACtD,YAAY,EAAE,IAAI,EAAQ,2BAA2B;YACrD,cAAc,EAAE,IAAI,CAAM,uCAAuC;SAClE,CAAC,CAAC;QAEH,IAAI,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,2CAA2C,EAAE;gBACvD,WAAW,EAAE,GAAG;gBAChB,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,UAAU,EAAE,UAAU,CAAC,UAAU;aAClC,CAAC,CAAC;YAEH,OAAO;gBACL,IAAI,EAAE,WAAW;gBACjB,YAAY,EAAE,UAAU,CAAC,IAAI;gBAC7B,oBAAoB,EAAE,UAAU,CAAC,cAAc;aAChD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;QACrE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAC3D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,iFAAiF;QACjF,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACzC,CAAC;AACH,CAAC"}
|