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
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
###
|
|
1
|
+
### Workspace Index File (`.openpackage/openpackage.index.yml`)
|
|
2
2
|
|
|
3
|
-
The `
|
|
3
|
+
The `openpackage.index.yml` file is the **unified workspace index**. It tracks:
|
|
4
|
+
|
|
5
|
+
- Installed packages (by name)
|
|
6
|
+
- Each package’s resolved **source path**
|
|
7
|
+
- Optional resolved **version**
|
|
8
|
+
- The file/directory mapping from **package-relative paths** to **workspace paths that were actually written**
|
|
4
9
|
|
|
5
10
|
---
|
|
6
11
|
|
|
7
12
|
#### Location
|
|
8
13
|
|
|
9
|
-
- **
|
|
10
|
-
- **Nested package**: `cwd/.openpackage/packages/<name>/.openpackage/package.index.yml`
|
|
14
|
+
- **Workspace-local metadata**: `cwd/.openpackage/openpackage.index.yml`
|
|
11
15
|
|
|
12
|
-
> **Note**: `
|
|
16
|
+
> **Note**: `openpackage.index.yml` is **never** included in the registry payload. It's workspace-local metadata.
|
|
13
17
|
|
|
14
18
|
---
|
|
15
19
|
|
|
@@ -19,9 +23,8 @@ The following files are **never** included in the index, even though they may ex
|
|
|
19
23
|
|
|
20
24
|
| File | Reason |
|
|
21
25
|
|------|--------|
|
|
22
|
-
| `
|
|
23
|
-
|
|
|
24
|
-
| `package.index.yml` | Index file itself; workspace-local metadata |
|
|
26
|
+
| `openpackage.yml` | Package manifest; not synced as a regular content file |
|
|
27
|
+
| `openpackage.index.yml` | Index file itself; workspace-local metadata |
|
|
25
28
|
|
|
26
29
|
The index only contains entries for content that is **actually synced** to workspace locations.
|
|
27
30
|
|
|
@@ -32,17 +35,42 @@ The index only contains entries for content that is **actually synced** to works
|
|
|
32
35
|
```yaml
|
|
33
36
|
# This file is managed by OpenPackage. Do not edit manually.
|
|
34
37
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
packages:
|
|
39
|
+
<package-name>:
|
|
40
|
+
path: <declared-path> # string from openpackage.yml (relative or ~) or inferred registry path
|
|
41
|
+
version: <installed-version> # optional semver string
|
|
42
|
+
dependencies: # optional cached direct deps (names)
|
|
43
|
+
- <dep-name>
|
|
44
|
+
files:
|
|
45
|
+
<registry-key>:
|
|
46
|
+
- <installed-path> # Simple mapping (string)
|
|
47
|
+
- target: <installed-path> # Complex mapping (object)
|
|
48
|
+
merge: deep # Merge strategy (if applicable)
|
|
49
|
+
keys: # Tracked keys (if applicable)
|
|
50
|
+
- key.path.1
|
|
51
|
+
- key.path.2
|
|
44
52
|
```
|
|
45
53
|
|
|
54
|
+
**File mapping formats:**
|
|
55
|
+
|
|
56
|
+
1. **Simple mapping** (string): For files owned entirely by one package
|
|
57
|
+
```yaml
|
|
58
|
+
rules/typescript.md:
|
|
59
|
+
- .cursor/rules/typescript.md
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
2. **Complex mapping** (object): For merged files with key-level tracking
|
|
63
|
+
```yaml
|
|
64
|
+
mcp.jsonc:
|
|
65
|
+
- target: .opencode/opencode.json
|
|
66
|
+
merge: deep
|
|
67
|
+
keys:
|
|
68
|
+
- mcp.server1
|
|
69
|
+
- mcp.server2
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
The index can contain both formats mixed, depending on how each file was installed.
|
|
73
|
+
|
|
46
74
|
---
|
|
47
75
|
|
|
48
76
|
#### Registry Keys
|
|
@@ -51,9 +79,10 @@ Registry keys are **relative to the package root**:
|
|
|
51
79
|
|
|
52
80
|
| Content Type | Key Format | Example |
|
|
53
81
|
|--------------|------------|---------|
|
|
54
|
-
| Universal content |
|
|
55
|
-
| Root-level content | `<path>` | `<dir>/helper.md` |
|
|
82
|
+
| Universal content | `<subdir>/<file>` | `commands/test.md` |
|
|
56
83
|
| Root files | `<filename>` | `AGENTS.md` |
|
|
84
|
+
| `root/` directory (direct copy) | `root/<path>` | `root/tools/helper.sh` |
|
|
85
|
+
| Directory mapping | `<dir>/` (trailing slash) | `rules/` |
|
|
57
86
|
|
|
58
87
|
---
|
|
59
88
|
|
|
@@ -64,108 +93,73 @@ Values are **relative to the workspace root (`cwd`)** and represent **paths that
|
|
|
64
93
|
| Content Type | Value Format | Example |
|
|
65
94
|
|--------------|--------------|---------|
|
|
66
95
|
| Universal content | Platform-specific paths | `.cursor/commands/test.md`, `.opencode/commands/test.md` |
|
|
67
|
-
| Root
|
|
96
|
+
| Root files | Same as key | `AGENTS.md` |
|
|
97
|
+
| `root/` directory (direct copy) | Strip `root/` prefix | `tools/helper.sh` |
|
|
98
|
+
| Directory mapping | Workspace directory paths (end with `/`) | `.claude/rules/`, `.cursor/rules/` |
|
|
68
99
|
|
|
69
100
|
> **Important**: The index only records paths where files **actually exist**. If a file is only installed to one platform (e.g., `.cursor/`), only that path appears in the index—not hypothetical paths for other platforms.
|
|
70
101
|
|
|
71
102
|
---
|
|
72
103
|
|
|
73
|
-
####
|
|
74
|
-
|
|
75
|
-
The index is updated differently depending on the operation:
|
|
76
|
-
|
|
77
|
-
| Operation | Behavior |
|
|
78
|
-
|-----------|----------|
|
|
79
|
-
| **Add** | Records only the source path that was used to add the file. If you add `.cursor/commands/test.md`, only that path is recorded. |
|
|
80
|
-
| **Save/Sync** | Expands the index to include all platform paths where files were actually created during sync. |
|
|
81
|
-
| **Install** | Populates the index with all platform paths where files were installed. |
|
|
82
|
-
|
|
83
|
-
This ensures the index reflects the **current state** of the workspace, not hypothetical future states.
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
#### Root Package Skip Logic
|
|
88
|
-
|
|
89
|
-
For **root packages only**, when a registry key maps to the exact same value, the mapping is **skipped** because:
|
|
90
|
-
- The file is already at the correct location
|
|
91
|
-
- No installation/syncing needed
|
|
92
|
-
- Avoids redundant mappings
|
|
93
|
-
|
|
94
|
-
**Example**: For a root package, `<dir>/helper.md` → `<dir>/helper.md` is skipped.
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
|
|
98
|
-
#### Nested Package Full Mapping
|
|
104
|
+
#### Key Tracking for Merged Files
|
|
99
105
|
|
|
100
|
-
|
|
101
|
-
- Files live inside the nested package directory
|
|
102
|
-
- Need to be mapped OUT to workspace root during install
|
|
106
|
+
When packages use flow-based transformations with merge strategies, the index tracks the specific keys each package contributes:
|
|
103
107
|
|
|
104
|
-
**
|
|
105
|
-
-
|
|
106
|
-
-
|
|
107
|
-
- Value: `<dir>/helper.md` (installed at workspace root)
|
|
108
|
+
**When keys are tracked:**
|
|
109
|
+
- Flow uses `merge: 'deep'` or `merge: 'shallow'`
|
|
110
|
+
- Target file will be shared by multiple packages
|
|
108
111
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
+
**When keys are NOT tracked:**
|
|
113
|
+
- `merge: 'replace'` - whole file owned by one package (simple string mapping)
|
|
114
|
+
- `merge: 'composite'` - delimiter-based tracking used instead
|
|
115
|
+
- Simple file copy - no merge (simple string mapping)
|
|
112
116
|
|
|
113
|
-
**
|
|
117
|
+
**Example with key tracking:**
|
|
114
118
|
|
|
115
119
|
```yaml
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
120
|
+
packages:
|
|
121
|
+
my-mcp-package:
|
|
122
|
+
path: ~/.openpackage/packages/my-mcp-package/1.0.0/
|
|
123
|
+
version: 1.0.0
|
|
124
|
+
files:
|
|
125
|
+
# Simple file mapping (no merge)
|
|
126
|
+
rules/typescript.md:
|
|
127
|
+
- .cursor/rules/typescript.md
|
|
128
|
+
|
|
129
|
+
# Complex mapping with key tracking
|
|
130
|
+
mcp.jsonc:
|
|
131
|
+
- target: .opencode/opencode.json
|
|
132
|
+
merge: deep
|
|
133
|
+
keys:
|
|
134
|
+
- mcp.server1
|
|
135
|
+
- mcp.server2
|
|
122
136
|
```
|
|
123
137
|
|
|
124
|
-
**
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
hash: abc123
|
|
129
|
-
version: 1.0.0-abc123.xyz
|
|
130
|
-
files:
|
|
131
|
-
.openpackage/commands/test.md:
|
|
132
|
-
- .cursor/commands/test.md # Original source
|
|
133
|
-
- .opencode/command/test.md # Synced by save
|
|
134
|
-
.openpackage/rules/auth.md:
|
|
135
|
-
- .cursor/rules/auth.mdc
|
|
136
|
-
# Note: package.yml is NOT included (it's the manifest, not synced content)
|
|
137
|
-
# Note: <dir>/helper.md is SKIPPED for root packages (maps to itself)
|
|
138
|
-
```
|
|
138
|
+
**Key notation:** Dot-notation represents nested object paths:
|
|
139
|
+
- `mcp.server1` → `{ mcp: { server1: {...} } }`
|
|
140
|
+
- `editor.fontSize` → `{ editor: { fontSize: 14 } }`
|
|
141
|
+
- `servers.db.host` → `{ servers: { db: { host: "..." } } }`
|
|
139
142
|
|
|
140
|
-
**
|
|
143
|
+
**Purpose:** Enables precise removal during uninstall. Only the tracked keys are removed from the target file, preserving content from other packages.
|
|
141
144
|
|
|
142
|
-
|
|
143
|
-
workspace:
|
|
144
|
-
hash: abc123
|
|
145
|
-
version: 1.0.0
|
|
146
|
-
files:
|
|
147
|
-
.openpackage/commands/test.md:
|
|
148
|
-
- .cursor/commands/test.md
|
|
149
|
-
- .opencode/command/test.md
|
|
150
|
-
<dir>/helper.md:
|
|
151
|
-
- <dir>/helper.md
|
|
152
|
-
AGENTS.md:
|
|
153
|
-
- AGENTS.md
|
|
154
|
-
```
|
|
145
|
+
See [Uninstall](../uninstall/README.md) for details on key-based removal.
|
|
155
146
|
|
|
156
147
|
---
|
|
157
148
|
|
|
158
|
-
####
|
|
149
|
+
#### Index Update Behavior
|
|
150
|
+
|
|
151
|
+
The unified workspace index is updated differently depending on the operation:
|
|
159
152
|
|
|
160
|
-
|
|
153
|
+
| Operation | Behavior |
|
|
154
|
+
|-----------|----------|
|
|
155
|
+
| **Add** | Does **not** update the index. Add operates on package sources independently of workspace installation state. To sync added files to workspace and update the index, run `install` + `apply` or use `add --apply`. |
|
|
156
|
+
| **Apply** | Writes/updates `packages[<name>].files` based on what was actually written during apply. |
|
|
157
|
+
| **Install** | Writes/updates `packages[<name>].files` based on what was installed. |
|
|
158
|
+
| **Save** | Uses `packages[<name>].files` as the authoritative mapping when syncing workspace edits back to the package source. Requires package to be installed (reads from index). |
|
|
161
159
|
|
|
162
|
-
|
|
163
|
-
|---------|---------|-----------|--------------|-------------------|
|
|
164
|
-
| `opkg add foo <dir>/foo.md` | Nested `foo` | `.openpackage/packages/foo/<dir>/foo.md` | `<dir>/foo.md` | `<dir>/foo.md` |
|
|
165
|
-
| `opkg add foo .cursor/test/foo.md` | Nested `foo` | `.openpackage/packages/foo/.openpackage/test/foo.md` | `.openpackage/test/foo.md` | `.cursor/test/foo.md` (only source) |
|
|
166
|
-
| `opkg add <dir>/foo.md` | Root | `.openpackage/<dir>/foo.md` | `<dir>/foo.md` | SKIPPED |
|
|
167
|
-
| `opkg add .cursor/test/foo.md` | Root | `.openpackage/test/foo.md` | `.openpackage/test/foo.md` | `.cursor/test/foo.md` (only source) |
|
|
160
|
+
This ensures the index reflects the **current state** of the workspace, not hypothetical future states.
|
|
168
161
|
|
|
169
|
-
|
|
162
|
+
**Key principle**: The index is a record of what exists in the workspace, not what exists in package sources. Commands that materialize content to the workspace (`install`, `apply`) update the index. Commands that only modify sources (`add`) do not.
|
|
170
163
|
|
|
164
|
+
See `../apply/index-effects.md` for concrete before/after examples.
|
|
171
165
|
|
|
@@ -1,78 +1,96 @@
|
|
|
1
1
|
### Package Root Layout
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This document describes the **package payload layout** and how it relates to
|
|
4
|
+
workspace-local metadata.
|
|
4
5
|
|
|
5
6
|
```text
|
|
6
7
|
<package-root>/
|
|
7
|
-
.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
8
|
+
openpackage.yml # REQUIRED – package manifest (marks this as a package)
|
|
9
|
+
|
|
10
|
+
# Universal content (platform-mapped)
|
|
11
|
+
commands/ # standard + custom universal subdirs (from platforms.jsonc)
|
|
12
|
+
rules/
|
|
13
|
+
agents/
|
|
14
|
+
skills/
|
|
15
|
+
<custom-subdirs>/
|
|
16
|
+
|
|
17
|
+
# Root files (installed/processed)
|
|
16
18
|
AGENTS.md # OPTIONAL – universal root file
|
|
17
|
-
<
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
<platform-root-files> # OPTIONAL – platform-specific root files (e.g. CLAUDE.md)
|
|
20
|
+
|
|
21
|
+
# Direct copy to workspace root
|
|
22
|
+
root/ # OPTIONAL – files copied 1:1 into the workspace root
|
|
23
|
+
<any-files-or-dirs>/
|
|
24
|
+
|
|
25
|
+
# Other root-level files/dirs (not installed by default)
|
|
26
|
+
README.md # OPTIONAL – documentation (not installed)
|
|
27
|
+
LICENSE.md # OPTIONAL – license (not installed)
|
|
20
28
|
```
|
|
21
29
|
|
|
22
30
|
---
|
|
23
31
|
|
|
24
|
-
####
|
|
32
|
+
#### Installation Semantics
|
|
33
|
+
|
|
34
|
+
1. **Universal subdirs at package root** (`commands/`, `rules/`, `agents/`, `skills/`, plus any platform-defined custom subdirs):
|
|
35
|
+
- Stored in a platform-normalized “universal” format.
|
|
36
|
+
- Mapped to platform-specific locations during install (e.g., `.cursor/commands/`, `.opencode/commands/`).
|
|
25
37
|
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
- Stored and mapped without transformation
|
|
38
|
+
2. **Root files at package root**:
|
|
39
|
+
- `AGENTS.md` is universal and can be used to populate platform root files during install.
|
|
40
|
+
- Platform-specific root files at package root (e.g., `CLAUDE.md`) act as **overrides** when present.
|
|
30
41
|
|
|
31
|
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
- Mapped to platform-specific locations during install (e.g., `.cursor/commands/`, `.opencode/commands/`)
|
|
42
|
+
3. **`root/` directory**:
|
|
43
|
+
- Files under `root/**` are copied **1:1 to the workspace root**, stripping the `root/` prefix.
|
|
44
|
+
- Example: `root/tools/helper.sh` → `<workspace>/tools/helper.sh`.
|
|
35
45
|
|
|
36
46
|
---
|
|
37
47
|
|
|
38
48
|
#### Key Invariants
|
|
39
49
|
|
|
40
|
-
-
|
|
41
|
-
- **Universal content**
|
|
42
|
-
- **
|
|
43
|
-
-
|
|
44
|
-
-
|
|
50
|
+
- **`openpackage.yml`** marks a directory as a package root.
|
|
51
|
+
- **Universal content** lives at the **package root** under universal subdirs (no `.openpackage/<subdir>/` container in package payloads).
|
|
52
|
+
- **Install mapping**:
|
|
53
|
+
- Universal-subdir paths are platform-mapped.
|
|
54
|
+
- `root/` is the only prefix that uses a **strip-prefix** rule (copy-to-root).
|
|
55
|
+
- Other root-level files/dirs are **not installed** by default.
|
|
56
|
+
- **Reserved directory**:
|
|
57
|
+
- `packages/` is reserved and **never included** in the package payload.
|
|
58
|
+
- **Nested workspace packages** live under `cwd/.openpackage/packages/<name>/` and are **canonical package roots** (same internal layout as any package root).
|
|
59
|
+
- **Global registry copies** (under `~/.openpackage/registry/...`) store the package payload layout and **never include** workspace index files.
|
|
45
60
|
|
|
46
61
|
---
|
|
47
62
|
|
|
48
63
|
#### Concrete Examples
|
|
49
64
|
|
|
50
|
-
**
|
|
65
|
+
**Package repo on disk** (payload shape; same shape used in registry copies):
|
|
51
66
|
|
|
52
67
|
```text
|
|
53
|
-
|
|
54
|
-
.
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
rules/
|
|
60
|
-
auth.md
|
|
61
|
-
<root-dir>/ # any root-level directory
|
|
62
|
-
helper.md
|
|
68
|
+
<package-root>/
|
|
69
|
+
openpackage.yml
|
|
70
|
+
commands/
|
|
71
|
+
test.md
|
|
72
|
+
rules/
|
|
73
|
+
auth.md
|
|
63
74
|
AGENTS.md
|
|
75
|
+
root/
|
|
76
|
+
tools/
|
|
77
|
+
helper.sh
|
|
78
|
+
README.md
|
|
64
79
|
```
|
|
65
80
|
|
|
66
|
-
**
|
|
81
|
+
**Workspace metadata + nested workspace package** (package root = `cwd/.openpackage/packages/foo/`):
|
|
67
82
|
|
|
68
83
|
```text
|
|
69
|
-
cwd
|
|
84
|
+
cwd/
|
|
70
85
|
.openpackage/
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
86
|
+
openpackage.yml # workspace manifest (dependency intent)
|
|
87
|
+
openpackage.index.yml # workspace index (never in registry payload)
|
|
88
|
+
packages/
|
|
89
|
+
foo/
|
|
90
|
+
openpackage.yml # nested package manifest (package root)
|
|
91
|
+
commands/
|
|
92
|
+
test.md
|
|
93
|
+
root/
|
|
94
|
+
tools/helper.sh
|
|
77
95
|
```
|
|
78
96
|
|
|
@@ -1,77 +1,83 @@
|
|
|
1
1
|
### Registry Payload and 1:1 Copy
|
|
2
2
|
|
|
3
|
-
The **registry payload** for a given version is defined
|
|
3
|
+
The **registry payload** for a given version is defined structurally. There is
|
|
4
|
+
no manifest-level include/exclude filtering.
|
|
4
5
|
|
|
5
6
|
---
|
|
6
7
|
|
|
7
|
-
#### 1.
|
|
8
|
+
#### 1. Payload membership
|
|
8
9
|
|
|
9
|
-
**
|
|
10
|
-
-
|
|
11
|
-
-
|
|
10
|
+
**Never include (always excluded):**
|
|
11
|
+
- `.openpackage/**` (workspace-local metadata directory; never part of payload)
|
|
12
|
+
- `openpackage.index.yml` (workspace-local index; never part of payload)
|
|
13
|
+
- `packages/**` (reserved; never part of payload)
|
|
12
14
|
|
|
13
|
-
**Always include
|
|
14
|
-
-
|
|
15
|
+
**Always include:**
|
|
16
|
+
- `openpackage.yml` (package manifest; marks the package root)
|
|
15
17
|
|
|
16
|
-
**Included
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
18
|
+
**Included in the payload when present at the package root:**
|
|
19
|
+
- Universal subdirs (standard: `commands/`, `rules/`, `agents/`, `skills/`, plus custom from `platforms.jsonc`)
|
|
20
|
+
- Root files (e.g., `AGENTS.md`, and platform root files like `CLAUDE.md`)
|
|
21
|
+
- `root/**` (direct copy; copied 1:1 to workspace root with `root/` stripped on install)
|
|
22
|
+
- Other root-level files/dirs (e.g., `README.md`, `LICENSE.md`, arbitrary folders)
|
|
20
23
|
|
|
21
|
-
**
|
|
24
|
+
> **Note**: Some root-level content is not installed by default, but it can still be
|
|
25
|
+
> part of the payload (e.g., docs or license files).
|
|
22
26
|
|
|
23
27
|
---
|
|
24
28
|
|
|
25
|
-
####
|
|
29
|
+
#### Save, Pack, and Install Operations
|
|
26
30
|
|
|
27
|
-
|
|
31
|
+
**Pack (Source → Registry)**:
|
|
32
|
+
- From mutable source, creates immutable snapshot in `~/.openpackage/registry/<name>/<version>/`.
|
|
33
|
+
- Copies full package root (per payload rules); idempotent overwrite.
|
|
34
|
+
- Example: `opkg pack my-pkg` → dir copy, no extraction.
|
|
28
35
|
|
|
29
|
-
|
|
30
|
-
-
|
|
36
|
+
**Save (Workspace → Source, then optional pack)**:
|
|
37
|
+
- Syncs edits to mutable source root.
|
|
38
|
+
- Files written unchanged; can pack after to registry.
|
|
39
|
+
- Does not directly write to registry (pack does that).
|
|
31
40
|
|
|
32
|
-
|
|
41
|
+
**Install/Apply (Registry/Source → Workspace)**:
|
|
42
|
+
- Reads from registry version dir or source path.
|
|
43
|
+
- Maps payload to workspace (universal → platforms, root/ → root, root files → root).
|
|
44
|
+
- Updates index with mappings; yml with intent (no path for registry).
|
|
45
|
+
- Example: `opkg install my-pkg@1.0.0` → copies from registry dir.
|
|
33
46
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
#### Save and Install Operations
|
|
37
|
-
|
|
38
|
-
**When saving:**
|
|
39
|
-
|
|
40
|
-
1. The save pipeline reads files from the package root using the rules above
|
|
41
|
-
2. Files are written **unchanged** to: `~/.openpackage/registry/<name>/<version>/...`
|
|
42
|
-
|
|
43
|
-
**When installing:**
|
|
44
|
-
|
|
45
|
-
1. The install pipeline loads `pkg.files` from the registry
|
|
46
|
-
2. Files are written 1:1 to: `cwd/.openpackage/packages/<name>/...` for local cache
|
|
47
|
-
3. Universal content is mapped to platform-specific locations in the workspace
|
|
47
|
+
> **Note**: `cwd/.openpackage/packages/` reserved for nested workspace packages. See [Pack](pack/), [Install](install/), [Save](save/) for flows; [Registry](registry.md) for storage.
|
|
48
48
|
|
|
49
49
|
---
|
|
50
50
|
|
|
51
|
-
####
|
|
51
|
+
#### Example Registry Version Directory
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
Each version directory in the registry is a complete, self-contained copy of the package root (per payload rules above):
|
|
54
54
|
|
|
55
55
|
```text
|
|
56
|
-
~/.openpackage/registry
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
56
|
+
~/.openpackage/registry/my-rules/1.0.0/
|
|
57
|
+
├── openpackage.yml # Package manifest (name, version, deps)
|
|
58
|
+
├── commands/ # Universal subdirs (from platforms.jsonc)
|
|
59
|
+
│ └── *.md
|
|
60
|
+
├── rules/
|
|
61
|
+
│ └── *.md
|
|
62
|
+
├── agents/ # Example universal subdir
|
|
63
|
+
│ └── *.md
|
|
64
|
+
├── root/ # Copy-to-root content (prefix stripped on install)
|
|
65
|
+
│ └── utils/
|
|
66
|
+
│ └── helper.md
|
|
67
|
+
├── AGENTS.md # Root files (universal or platform-specific)
|
|
68
|
+
└── README.md # Other root files (docs, etc.)
|
|
66
69
|
```
|
|
67
70
|
|
|
71
|
+
- Matches [Package Root Layout](package-root-layout.md).
|
|
72
|
+
- Installed via [Install Flow](install/install-behavior.md).
|
|
73
|
+
|
|
68
74
|
---
|
|
69
75
|
|
|
70
76
|
#### Guarantees
|
|
71
77
|
|
|
72
78
|
This system guarantees that:
|
|
73
79
|
|
|
74
|
-
- The **workspace package
|
|
80
|
+
- The **workspace package root** (root or nested) and the **registry version directory** share the **same tree shape**
|
|
75
81
|
- Save and install operations are **pure copies** at the package boundary, without structural rewrites
|
|
76
82
|
- Packages can be moved between locations (workspace root ↔ nested ↔ registry) without modification
|
|
77
83
|
|