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,77 @@
|
|
|
1
|
+
# Pack Command
|
|
2
|
+
|
|
3
|
+
`opkg pack` creates an immutable versioned snapshot from a mutable package source, copying to the local registry. It promotes dev work to distributable form, tying into save's WIP versioning.
|
|
4
|
+
|
|
5
|
+
## Purpose & Direction
|
|
6
|
+
- **Source → Registry**: Full dir copy to `~/.openpackage/registry/<name>/<version>/`.
|
|
7
|
+
- Preconditions: Mutable source (packages/ dir).
|
|
8
|
+
- Key: Makes package immutable; enables install/apply from registry path.
|
|
9
|
+
|
|
10
|
+
## Flow
|
|
11
|
+
1. Resolve package source path (from context or arg):
|
|
12
|
+
- **Input Types**: Package name, absolute path, relative path
|
|
13
|
+
- **Path Detection**: Inputs starting with `/`, `./`, `../`, or `~` are treated as paths
|
|
14
|
+
- **Package Name Resolution** (for non-path inputs):
|
|
15
|
+
- Priority: CWD → Workspace packages → Global packages
|
|
16
|
+
- Skips registry (already immutable) and remote (not relevant)
|
|
17
|
+
- See [Package Name Resolution](./package-name-resolution.md) for details
|
|
18
|
+
2. Read `openpackage.yml.version` → Target stable `S` (no bump).
|
|
19
|
+
3. Copy entire package root (payload rules) to registry/<name>/<S>/ (overwrite if exists).
|
|
20
|
+
4. Update workspace index `workspace.version = S`; refresh file mappings.
|
|
21
|
+
5. Clean this workspace's WIP versions for the package.
|
|
22
|
+
6. Idempotent: Re-pack same → same content.
|
|
23
|
+
|
|
24
|
+
## Versioning
|
|
25
|
+
- Uses exact `openpackage.yml.version` as stable.
|
|
26
|
+
- After pack, next `save` bumps to patch line for new WIP.
|
|
27
|
+
- See [Save Versioning](save/save-versioning.md).
|
|
28
|
+
|
|
29
|
+
## Options
|
|
30
|
+
- `--output <path>`: Copy directly to `<path>` (bypasses registry structure; `<path>` becomes root).
|
|
31
|
+
- `--dry-run`: Simulate without write.
|
|
32
|
+
- Global: `--cwd`, etc. (see [CLI Options](../cli-options.md)).
|
|
33
|
+
|
|
34
|
+
## Examples
|
|
35
|
+
|
|
36
|
+
### Pack from Current Directory
|
|
37
|
+
```bash
|
|
38
|
+
cd ~/projects/my-package
|
|
39
|
+
opkg pack # Packs CWD (no name needed)
|
|
40
|
+
opkg pack my-package # Also packs CWD (name matches)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Pack from Workspace or Global Packages
|
|
44
|
+
```bash
|
|
45
|
+
cd ~/my-workspace
|
|
46
|
+
opkg pack shared-component # Finds in .openpackage/packages/ or ~/.openpackage/packages/
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Pack from Absolute Path
|
|
50
|
+
```bash
|
|
51
|
+
opkg pack /Users/user/projects/my-package # Pack from absolute path
|
|
52
|
+
opkg pack ~/projects/my-package # Pack from home directory path
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Pack from Relative Path
|
|
56
|
+
```bash
|
|
57
|
+
cd ~/workspace
|
|
58
|
+
opkg pack ./packages/shared-component # Pack from relative path
|
|
59
|
+
opkg pack ../sibling-project # Pack from parent directory
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Output: Shows created path, version, and source location.
|
|
63
|
+
|
|
64
|
+
## Errors
|
|
65
|
+
- **Package not found**: "Package 'X' not found. Searched: current directory, workspace packages, and global packages."
|
|
66
|
+
- **Invalid version**: Semver checks require valid semver in openpackage.yml
|
|
67
|
+
- **Missing manifest**: "openpackage.yml not found at [path]"
|
|
68
|
+
- **Invalid path**: "Path 'X' exists but is not a valid OpenPackage directory. Valid packages must contain openpackage.yml"
|
|
69
|
+
- **Tarball input**: "Pack command does not support tarball inputs. To pack from a tarball, first extract it to a directory."
|
|
70
|
+
- **Git input**: "Pack command does not support git inputs. To pack from a git repository, first clone it to a directory."
|
|
71
|
+
|
|
72
|
+
## Integration
|
|
73
|
+
- Called after iterative `save` (WIP → stable promotion).
|
|
74
|
+
- Payload excludes metadata (see [Registry Payload](../package/registry-payload-and-copy.md)).
|
|
75
|
+
- Enables `install <name>@<ver>` from new snapshot.
|
|
76
|
+
|
|
77
|
+
For impl: [Pack Pipeline](../core/pack/pack-pipeline.ts). Related: [Registry](registry.md), [Commands Overview](commands-overview.md).
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
# Package Name Resolution Architecture
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This document describes the unified package name resolution architecture used by the `pack` and `install` commands.
|
|
6
|
+
|
|
7
|
+
## Architecture Diagram
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
11
|
+
│ Package Name Resolution │
|
|
12
|
+
│ (package-name-resolution.ts) │
|
|
13
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
14
|
+
▲
|
|
15
|
+
│
|
|
16
|
+
┌──────────┴───────────┐
|
|
17
|
+
│ │
|
|
18
|
+
┌───────────▼──────────┐ ┌───────▼──────────┐
|
|
19
|
+
│ Pack Command │ │ Install Command │
|
|
20
|
+
│ (pack-pipeline.ts) │ │ (package-input.ts)│
|
|
21
|
+
└──────────────────────┘ └───────────────────┘
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Before: Separate Resolution Logic
|
|
25
|
+
|
|
26
|
+
### Pack Command (Old)
|
|
27
|
+
```
|
|
28
|
+
pack-pipeline.ts
|
|
29
|
+
↓
|
|
30
|
+
resolvePackageSource()
|
|
31
|
+
↓
|
|
32
|
+
readWorkspaceIndex()
|
|
33
|
+
↓
|
|
34
|
+
Looks up in .openpackage/index.yml only
|
|
35
|
+
↓
|
|
36
|
+
❌ Requires package to be installed first
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Install Command (Old)
|
|
40
|
+
```
|
|
41
|
+
package-input.ts
|
|
42
|
+
↓
|
|
43
|
+
findPackageInMutableDirectories()
|
|
44
|
+
↓
|
|
45
|
+
Searches: workspace → global → registry
|
|
46
|
+
↓
|
|
47
|
+
✅ Version comparison logic
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Problem**: Code duplication, inconsistent behavior
|
|
51
|
+
|
|
52
|
+
## After: Unified Resolution Logic
|
|
53
|
+
|
|
54
|
+
### Shared Resolution Module
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
package-name-resolution.ts
|
|
58
|
+
├── resolvePackageByName() # Main entry point
|
|
59
|
+
│ ├── checkCwdPackage() # Check current directory
|
|
60
|
+
│ ├── checkWorkspacePackage() # Check .openpackage/packages/
|
|
61
|
+
│ ├── checkGlobalPackage() # Check ~/.openpackage/packages/
|
|
62
|
+
│ ├── checkRegistryPackage() # Check ~/.openpackage/registry/
|
|
63
|
+
│ ├── selectBestCandidate() # Version-aware selection
|
|
64
|
+
│ └── determineSelectionReason() # Explain selection
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Pack Command (New)
|
|
68
|
+
```
|
|
69
|
+
pack-pipeline.ts
|
|
70
|
+
↓
|
|
71
|
+
resolvePackageByName({
|
|
72
|
+
checkCwd: true, ← CWD priority
|
|
73
|
+
searchWorkspace: true,
|
|
74
|
+
searchGlobal: true,
|
|
75
|
+
searchRegistry: false ← Skip immutable
|
|
76
|
+
})
|
|
77
|
+
↓
|
|
78
|
+
✅ Can pack without installing
|
|
79
|
+
✅ Version-aware selection
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Install Command (New)
|
|
83
|
+
```
|
|
84
|
+
package-input.ts
|
|
85
|
+
↓
|
|
86
|
+
resolvePackageByName({
|
|
87
|
+
checkCwd: false, ← No CWD priority
|
|
88
|
+
searchWorkspace: true,
|
|
89
|
+
searchGlobal: true,
|
|
90
|
+
searchRegistry: true ← Include registry
|
|
91
|
+
})
|
|
92
|
+
↓
|
|
93
|
+
✅ Same resolution logic
|
|
94
|
+
✅ Different configuration
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Resolution Flow
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
101
|
+
│ resolvePackageByName({ cwd, packageName, options }) │
|
|
102
|
+
└─────────────────────────────────────────────────────────────┘
|
|
103
|
+
│
|
|
104
|
+
▼
|
|
105
|
+
┌────────────────────────┐
|
|
106
|
+
│ Check CWD (optional) │ ← if checkCwd=true
|
|
107
|
+
└────────────────────────┘
|
|
108
|
+
│
|
|
109
|
+
▼
|
|
110
|
+
┌────────────────────────┐
|
|
111
|
+
│ Check Workspace │ ← if searchWorkspace=true
|
|
112
|
+
│ .openpackage/packages │
|
|
113
|
+
└────────────────────────┘
|
|
114
|
+
│
|
|
115
|
+
▼
|
|
116
|
+
┌────────────────────────┐
|
|
117
|
+
│ Check Global │ ← if searchGlobal=true
|
|
118
|
+
│ ~/.openpackage/packages│
|
|
119
|
+
└────────────────────────┘
|
|
120
|
+
│
|
|
121
|
+
▼
|
|
122
|
+
┌────────────────────────┐
|
|
123
|
+
│ Check Registry │ ← if searchRegistry=true
|
|
124
|
+
│ ~/.openpackage/registry│
|
|
125
|
+
└────────────────────────┘
|
|
126
|
+
│
|
|
127
|
+
▼
|
|
128
|
+
┌────────────────────────┐
|
|
129
|
+
│ Collect Candidates │
|
|
130
|
+
└────────────────────────┘
|
|
131
|
+
│
|
|
132
|
+
▼
|
|
133
|
+
┌────────────────────────┐
|
|
134
|
+
│ Select Best │
|
|
135
|
+
│ (version-aware) │
|
|
136
|
+
└────────────────────────┘
|
|
137
|
+
│
|
|
138
|
+
▼
|
|
139
|
+
┌────────────────────────┐
|
|
140
|
+
│ Return Result │
|
|
141
|
+
│ { path, version, ... }│
|
|
142
|
+
└────────────────────────┘
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Selection Logic
|
|
146
|
+
|
|
147
|
+
When multiple candidates are found:
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
Priority Rules:
|
|
151
|
+
1. CWD (if checked and name matches) ← Pack only
|
|
152
|
+
└─ ALWAYS WINS if present
|
|
153
|
+
|
|
154
|
+
2. Workspace (.openpackage/packages/) ← Both commands
|
|
155
|
+
└─ ALWAYS WINS among remaining
|
|
156
|
+
|
|
157
|
+
3. Version Comparison (global vs registry)
|
|
158
|
+
├─ Higher version WINS
|
|
159
|
+
└─ Same version → prefer Global (mutable)
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Example Resolution Scenarios
|
|
163
|
+
|
|
164
|
+
### Scenario 1: Pack from CWD
|
|
165
|
+
```
|
|
166
|
+
Input:
|
|
167
|
+
cwd: /projects/my-package
|
|
168
|
+
packageName: my-package
|
|
169
|
+
checkCwd: true
|
|
170
|
+
|
|
171
|
+
Resolution:
|
|
172
|
+
✓ CWD: my-package@3.0.0 (match!)
|
|
173
|
+
✓ Workspace: my-package@2.0.0
|
|
174
|
+
|
|
175
|
+
Selection: CWD@3.0.0 (CWD priority)
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Scenario 2: Install (no CWD priority)
|
|
179
|
+
```
|
|
180
|
+
Input:
|
|
181
|
+
cwd: /projects/workspace
|
|
182
|
+
packageName: some-lib
|
|
183
|
+
checkCwd: false
|
|
184
|
+
|
|
185
|
+
Resolution:
|
|
186
|
+
✓ Workspace: some-lib@2.0.0
|
|
187
|
+
✓ Global: some-lib@3.0.0
|
|
188
|
+
✓ Registry: some-lib@2.5.0
|
|
189
|
+
|
|
190
|
+
Selection: Workspace@2.0.0 (workspace priority)
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Scenario 3: Version Comparison
|
|
194
|
+
```
|
|
195
|
+
Input:
|
|
196
|
+
cwd: /projects/workspace
|
|
197
|
+
packageName: tool
|
|
198
|
+
checkCwd: false
|
|
199
|
+
|
|
200
|
+
Resolution:
|
|
201
|
+
✗ Workspace: not found
|
|
202
|
+
✓ Global: tool@5.0.0
|
|
203
|
+
✓ Registry: tool@4.0.0
|
|
204
|
+
|
|
205
|
+
Selection: Global@5.0.0 (higher version)
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Scenario 4: Same Version Tie-breaker
|
|
209
|
+
```
|
|
210
|
+
Input:
|
|
211
|
+
cwd: /projects/workspace
|
|
212
|
+
packageName: util
|
|
213
|
+
checkCwd: false
|
|
214
|
+
|
|
215
|
+
Resolution:
|
|
216
|
+
✗ Workspace: not found
|
|
217
|
+
✓ Global: util@1.2.3
|
|
218
|
+
✓ Registry: util@1.2.3
|
|
219
|
+
|
|
220
|
+
Selection: Global@1.2.3 (prefer mutable)
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## Configuration Matrix
|
|
224
|
+
|
|
225
|
+
| Option | Pack | Install | Purpose |
|
|
226
|
+
|--------|------|---------|---------|
|
|
227
|
+
| `checkCwd` | ✅ true | ❌ false | Pack prioritizes current work |
|
|
228
|
+
| `searchWorkspace` | ✅ true | ✅ true | Both check workspace |
|
|
229
|
+
| `searchGlobal` | ✅ true | ✅ true | Both check global |
|
|
230
|
+
| `searchRegistry` | ❌ false | ✅ true | Pack skips immutable |
|
|
231
|
+
|
|
232
|
+
## Benefits of Unified Architecture
|
|
233
|
+
|
|
234
|
+
### Code Quality
|
|
235
|
+
- **DRY**: Single implementation
|
|
236
|
+
- **Testable**: Pure functions
|
|
237
|
+
- **Maintainable**: One place to update
|
|
238
|
+
- **Extensible**: Easy to add locations
|
|
239
|
+
|
|
240
|
+
### User Experience
|
|
241
|
+
- **Consistent**: Similar behavior across commands
|
|
242
|
+
- **Predictable**: Clear priority rules
|
|
243
|
+
- **Flexible**: Works in more scenarios
|
|
244
|
+
- **Transparent**: Clear resolution messages
|
|
245
|
+
|
|
246
|
+
### Developer Experience
|
|
247
|
+
- **Simple API**: One function, multiple configs
|
|
248
|
+
- **Type-safe**: Full TypeScript support
|
|
249
|
+
- **Well-documented**: Inline and external docs
|
|
250
|
+
- **Easy to use**: Import and configure
|
|
251
|
+
|
|
252
|
+
## API Reference
|
|
253
|
+
|
|
254
|
+
### Main Function
|
|
255
|
+
|
|
256
|
+
```typescript
|
|
257
|
+
resolvePackageByName(options: PackageNameResolutionOptions):
|
|
258
|
+
Promise<PackageNameResolutionResult>
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### Input Type
|
|
262
|
+
|
|
263
|
+
```typescript
|
|
264
|
+
interface PackageNameResolutionOptions {
|
|
265
|
+
cwd: string; // Current working directory
|
|
266
|
+
packageName: string; // Package to resolve
|
|
267
|
+
checkCwd?: boolean; // Check CWD first (pack=true)
|
|
268
|
+
searchWorkspace?: boolean; // Check workspace packages
|
|
269
|
+
searchGlobal?: boolean; // Check global packages
|
|
270
|
+
searchRegistry?: boolean; // Check local registry
|
|
271
|
+
}
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Output Type
|
|
275
|
+
|
|
276
|
+
```typescript
|
|
277
|
+
interface PackageNameResolutionResult {
|
|
278
|
+
found: boolean; // Whether package was found
|
|
279
|
+
path?: string; // Absolute path to package
|
|
280
|
+
version?: string; // Package version
|
|
281
|
+
sourceType?: PackageSourceType; // Where it was found
|
|
282
|
+
resolutionInfo?: SourceResolutionInfo; // Details
|
|
283
|
+
}
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
## Testing Strategy
|
|
287
|
+
|
|
288
|
+
### Unit Tests
|
|
289
|
+
Individual functions tested in isolation:
|
|
290
|
+
- `checkCwdPackage()`
|
|
291
|
+
- `checkWorkspacePackage()`
|
|
292
|
+
- `checkGlobalPackage()`
|
|
293
|
+
- `checkRegistryPackage()`
|
|
294
|
+
- `selectBestCandidate()`
|
|
295
|
+
|
|
296
|
+
### Integration Tests
|
|
297
|
+
End-to-end scenarios:
|
|
298
|
+
- Pack from CWD
|
|
299
|
+
- Pack from workspace
|
|
300
|
+
- Pack from global
|
|
301
|
+
- CWD priority
|
|
302
|
+
- Version comparison
|
|
303
|
+
|
|
304
|
+
### Regression Tests
|
|
305
|
+
Ensure no breaking changes:
|
|
306
|
+
- Existing pack tests
|
|
307
|
+
- Existing install tests
|
|
308
|
+
- Install selection tests
|
|
309
|
+
|
|
310
|
+
## Future Enhancements
|
|
311
|
+
|
|
312
|
+
### Potential Features
|
|
313
|
+
1. **Custom search paths** via config
|
|
314
|
+
2. **Resolution caching** for performance
|
|
315
|
+
3. **Parallel searches** across locations
|
|
316
|
+
4. **Resolution plugins** for extensibility
|
|
317
|
+
5. **Verbose tracing** for debugging
|
|
318
|
+
|
|
319
|
+
### Potential Optimizations
|
|
320
|
+
1. **Early exit** on first match (configurable)
|
|
321
|
+
2. **Lazy evaluation** of candidates
|
|
322
|
+
3. **Memoization** of results
|
|
323
|
+
4. **Index-based lookup** for speed
|
|
324
|
+
|
|
325
|
+
## Related Files
|
|
326
|
+
|
|
327
|
+
- **Implementation**: `src/utils/package-name-resolution.ts`
|
|
328
|
+
- **Pack Usage**: `src/core/pack/pack-pipeline.ts`
|
|
329
|
+
- **Install Usage**: `src/utils/package-input.ts`
|
|
330
|
+
- **Tests**: `tests/pack-name-resolution.test.ts`
|
package/specs/package/README.md
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
This directory contains the canonical on-disk structure spec for OpenPackage packages, split into focused documents:
|
|
4
4
|
|
|
5
5
|
- **Root layout**: `package-root-layout.md` – Package directory structure and content types
|
|
6
|
-
- **Universal content**: `universal-content.md` – Platform-normalized content
|
|
7
|
-
- **Package index**: `package-index-yml.md` – File mapping and `
|
|
6
|
+
- **Universal content**: `universal-content.md` – Platform-normalized content at package root
|
|
7
|
+
- **Package index**: `package-index-yml.md` – File mapping and `openpackage.index.yml` structure
|
|
8
8
|
- **Registry payload and 1:1 copy rules**: `registry-payload-and-copy.md` – What gets included in packages
|
|
9
9
|
- **Nested packages and parent packages**: `nested-packages-and-parent-packages.md` – Multi-package workspaces
|
|
10
10
|
|
|
@@ -12,7 +12,7 @@ This directory contains the canonical on-disk structure spec for OpenPackage pac
|
|
|
12
12
|
|
|
13
13
|
#### Core Concept: Package Root
|
|
14
14
|
|
|
15
|
-
A **package root** is any directory containing
|
|
15
|
+
A **package root** is any directory containing `openpackage.yml` at its root. This applies to:
|
|
16
16
|
|
|
17
17
|
- **Workspace root package**: `cwd/` is the package root
|
|
18
18
|
- **Nested packages**: `cwd/.openpackage/packages/<name>/` is the package root
|
|
@@ -22,16 +22,14 @@ All package roots have **identical internal structure**:
|
|
|
22
22
|
|
|
23
23
|
```text
|
|
24
24
|
<package-root>/
|
|
25
|
-
.
|
|
26
|
-
|
|
27
|
-
package.index.yml # install index (not in registry)
|
|
28
|
-
commands/ # universal content
|
|
29
|
-
rules/
|
|
30
|
-
agents/
|
|
31
|
-
skills/
|
|
32
|
-
<root-dir>/ # root-level content (outside .openpackage/)
|
|
25
|
+
openpackage.yml # package manifest (marks this as a package)
|
|
26
|
+
<universal-subdirs>/ # universal content (standard: commands/, rules/, agents/, skills/; custom from platforms.jsonc)
|
|
33
27
|
AGENTS.md # root files
|
|
34
|
-
|
|
28
|
+
<platform-root-files> # optional platform root file overrides (e.g. CLAUDE.md)
|
|
29
|
+
root/ # OPTIONAL – copied 1:1 to workspace root (strip `root/` prefix)
|
|
30
|
+
<root-dir>/ # other root-level content (not installed by default)
|
|
31
|
+
README.md # docs (not installed by default)
|
|
32
|
+
LICENSE.md # docs (not installed by default)
|
|
35
33
|
```
|
|
36
34
|
|
|
37
35
|
---
|
|
@@ -40,11 +38,14 @@ All package roots have **identical internal structure**:
|
|
|
40
38
|
|
|
41
39
|
| Type | Location | Example |
|
|
42
40
|
|------|----------|---------|
|
|
43
|
-
| **Universal content** |
|
|
44
|
-
| **Root-level content** |
|
|
41
|
+
| **Universal content** | `<package-root>/<subdir>/` | `commands/test.md` |
|
|
42
|
+
| **Root-level content** | `<package-root>/<path>` | `AGENTS.md`, `root/tools/helper.sh`, `README.md` (not installed by default) |
|
|
45
43
|
|
|
46
44
|
**Universal content** is mapped to platform-specific paths during install.
|
|
47
|
-
**Root-level content** is
|
|
45
|
+
**Root-level content** is only installed when it is a root file (e.g., `AGENTS.md`) or under `root/**` (strip-prefix copy).
|
|
46
|
+
|
|
47
|
+
> **Workspace-local metadata** (like `.openpackage/openpackage.yml` and `openpackage.index.yml`) lives under `.openpackage/`
|
|
48
|
+
> in the workspace and is **not part of the package payload**.
|
|
48
49
|
|
|
49
50
|
---
|
|
50
51
|
|
|
@@ -52,8 +53,8 @@ All package roots have **identical internal structure**:
|
|
|
52
53
|
|
|
53
54
|
A package directory can be **moved or copied 1:1** between:
|
|
54
55
|
|
|
55
|
-
- Workspace root packages (`cwd/`)
|
|
56
|
-
- Nested workspace packages (`cwd/.openpackage/packages/<name>/`)
|
|
56
|
+
- Workspace root packages (effective `cwd/` via shell or `--cwd`; see [../../cli-options.md])
|
|
57
|
+
- Nested workspace packages (effective `cwd/.openpackage/packages/<name>/`)
|
|
57
58
|
- Local registry copies (`~/.openpackage/registry/<name>/<version>/`)
|
|
58
59
|
|
|
59
60
|
…while preserving the same internal layout and invariants.
|
|
@@ -4,29 +4,32 @@
|
|
|
4
4
|
|
|
5
5
|
```text
|
|
6
6
|
<workspace-root>/ # root package (package root = cwd/)
|
|
7
|
-
.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
7
|
+
openpackage.yml # root package manifest (payload)
|
|
8
|
+
commands/ # root package universal content (payload)
|
|
9
|
+
shared-command.md
|
|
10
|
+
rules/
|
|
11
|
+
shared-rule.md
|
|
12
|
+
AGENTS.md # root package root file (payload)
|
|
13
|
+
root/ # direct copy: copied 1:1 to workspace root (payload)
|
|
14
|
+
tools/
|
|
15
|
+
helper.sh # → installs to <workspace>/tools/helper.sh
|
|
16
|
+
docs/ # other root-level content (NOT installed)
|
|
17
|
+
README.md
|
|
18
|
+
.openpackage/ # workspace-local metadata (not payload)
|
|
19
|
+
openpackage.yml # workspace manifest (dependency intent)
|
|
20
|
+
openpackage.index.yml # workspace index (never in registry payload)
|
|
21
|
+
packages/ # nested packages directory
|
|
22
|
+
alpha/ # nested package (package root = .openpackage/packages/alpha/)
|
|
23
|
+
openpackage.yml # nested package manifest (package root)
|
|
22
24
|
commands/
|
|
23
25
|
alpha-command.md
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
root/ # direct copy for nested package
|
|
27
|
+
scripts/
|
|
28
|
+
setup.sh # → installs to <workspace>/scripts/setup.sh
|
|
29
|
+
docs/ # NOT installed
|
|
30
|
+
notes.md
|
|
31
|
+
beta/ # nested package (package root = .openpackage/packages/beta/)
|
|
32
|
+
openpackage.yml # nested package manifest (package root)
|
|
30
33
|
rules/
|
|
31
34
|
beta-rule.md
|
|
32
35
|
```
|
|
@@ -35,16 +38,16 @@
|
|
|
35
38
|
|
|
36
39
|
#### Key Rules
|
|
37
40
|
|
|
38
|
-
- Each
|
|
39
|
-
- Its own
|
|
40
|
-
- Its own
|
|
41
|
-
- Its own root-level content (
|
|
41
|
+
- Each `.openpackage/packages/<name>/` directory is its **own canonical package root**, with:
|
|
42
|
+
- Its own `openpackage.yml` at the package root (marks it as a package)
|
|
43
|
+
- Its own universal subdirs at the package root (e.g., `commands/`, `rules/`)
|
|
44
|
+
- Its own root-level content (root files, `root/` directory, etc.)
|
|
42
45
|
|
|
43
|
-
- The **parent root package never inlines**
|
|
46
|
+
- The **parent root package never inlines** `.openpackage/packages/<name>/` into its own payload.
|
|
44
47
|
|
|
45
48
|
- Registry entries for `alpha` and `beta` are created **independently** from their respective package roots.
|
|
46
49
|
|
|
47
|
-
- **Only the workspace root package** can have a
|
|
50
|
+
- **Only the workspace root package** can have a `.openpackage/packages/` directory. Nested packages cannot have further nested packages.
|
|
48
51
|
|
|
49
52
|
---
|
|
50
53
|
|
|
@@ -64,10 +67,8 @@ Both root and nested packages have **identical internal structure**:
|
|
|
64
67
|
|
|
65
68
|
```text
|
|
66
69
|
<package-root>/
|
|
67
|
-
.
|
|
68
|
-
|
|
69
|
-
package.index.yml
|
|
70
|
-
<universal-subdirs>/
|
|
70
|
+
openpackage.yml
|
|
71
|
+
<universal-subdirs>/
|
|
71
72
|
<root-level-content>/
|
|
72
73
|
<root-files>
|
|
73
74
|
```
|