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,520 @@
|
|
|
1
|
+
# Set Command Specification
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The `opkg set` command updates manifest fields in `openpackage.yml` for mutable package sources. It provides both interactive and batch modes for modifying package metadata.
|
|
6
|
+
|
|
7
|
+
## Command Signature
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
opkg set [package] [options]
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Arguments
|
|
14
|
+
|
|
15
|
+
- `[package]` (optional) - Package name or path
|
|
16
|
+
- If omitted, operates on the package in the current directory
|
|
17
|
+
- Can be a package name (searches workspace/global) or a path
|
|
18
|
+
|
|
19
|
+
## Options
|
|
20
|
+
|
|
21
|
+
### Field Options
|
|
22
|
+
|
|
23
|
+
- `--ver <version>` - Set package version (must be valid semver)
|
|
24
|
+
- `--name <name>` - Set package name
|
|
25
|
+
- `--description <desc>` - Set package description
|
|
26
|
+
- `--keywords <keywords>` - Set keywords (space-separated)
|
|
27
|
+
- `--author <author>` - Set package author
|
|
28
|
+
- `--license <license>` - Set license identifier
|
|
29
|
+
- `--homepage <url>` - Set homepage URL
|
|
30
|
+
- `--private` - Mark package as private
|
|
31
|
+
|
|
32
|
+
### Behavior Options
|
|
33
|
+
|
|
34
|
+
- `-f, --force` - Skip confirmation prompts
|
|
35
|
+
- `--non-interactive` - Require flags, no prompting (for CI/CD)
|
|
36
|
+
- `-h, --help` - Display help for command
|
|
37
|
+
|
|
38
|
+
## Modes of Operation
|
|
39
|
+
|
|
40
|
+
### Interactive Mode
|
|
41
|
+
|
|
42
|
+
Triggered when no field options are provided. Prompts user for each field, showing current values as defaults.
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# Interactive update of CWD package
|
|
46
|
+
opkg set
|
|
47
|
+
|
|
48
|
+
# Interactive update of named package
|
|
49
|
+
opkg set my-package
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Behavior:**
|
|
53
|
+
1. Displays current package information
|
|
54
|
+
2. Prompts for each field with current value as default
|
|
55
|
+
3. Shows change diff before applying
|
|
56
|
+
4. Requires confirmation (unless `--force`)
|
|
57
|
+
5. Only updates fields that changed
|
|
58
|
+
|
|
59
|
+
### Batch Mode
|
|
60
|
+
|
|
61
|
+
Triggered when one or more field options are provided. Updates only specified fields.
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# Update version
|
|
65
|
+
opkg set my-package --ver 1.2.0
|
|
66
|
+
|
|
67
|
+
# Update multiple fields
|
|
68
|
+
opkg set my-package --ver 2.0.0 --description "New description"
|
|
69
|
+
|
|
70
|
+
# Update CWD package
|
|
71
|
+
opkg set --ver 0.5.0
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Behavior:**
|
|
75
|
+
1. Validates all provided field values
|
|
76
|
+
2. Shows change diff
|
|
77
|
+
3. Applies changes immediately (no confirmation unless interactive mode)
|
|
78
|
+
|
|
79
|
+
### Non-Interactive Mode
|
|
80
|
+
|
|
81
|
+
Used for CI/CD pipelines. Requires at least one field flag.
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
opkg set my-package --ver 1.0.0 --non-interactive
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Behavior:**
|
|
88
|
+
- Errors if no field flags provided
|
|
89
|
+
- No prompts or confirmations
|
|
90
|
+
- Fails fast on validation errors
|
|
91
|
+
|
|
92
|
+
## Package Resolution
|
|
93
|
+
|
|
94
|
+
The command searches for packages in the following order:
|
|
95
|
+
|
|
96
|
+
1. **Current directory** (if no package argument)
|
|
97
|
+
- Looks for `openpackage.yml` in CWD
|
|
98
|
+
|
|
99
|
+
2. **Workspace packages** (if package name provided)
|
|
100
|
+
- `.openpackage/packages/<package-name>/`
|
|
101
|
+
|
|
102
|
+
3. **Global packages** (if package name provided)
|
|
103
|
+
- `~/.openpackage/packages/<package-name>/`
|
|
104
|
+
|
|
105
|
+
**Registry packages are excluded** - they are immutable and cannot be modified.
|
|
106
|
+
|
|
107
|
+
## Field Specifications
|
|
108
|
+
|
|
109
|
+
### Version Field (`--ver`)
|
|
110
|
+
|
|
111
|
+
**Format:** Valid semantic version
|
|
112
|
+
|
|
113
|
+
**Validation:**
|
|
114
|
+
- Must be valid semver (e.g., `1.0.0`, `2.1.3-beta.1`)
|
|
115
|
+
- Validated using semver library
|
|
116
|
+
|
|
117
|
+
**Examples:**
|
|
118
|
+
```bash
|
|
119
|
+
opkg set --ver 1.2.3
|
|
120
|
+
opkg set --ver 2.0.0-alpha.1
|
|
121
|
+
opkg set --ver 0.1.0
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Name Field (`--name`)
|
|
125
|
+
|
|
126
|
+
**Format:** Package name string
|
|
127
|
+
|
|
128
|
+
**Validation:**
|
|
129
|
+
- Must contain only: `a-z`, `0-9`, `.`, `_`, `-`
|
|
130
|
+
- Automatically normalized to lowercase
|
|
131
|
+
- No spaces allowed
|
|
132
|
+
- Supports scoped names: `@scope/package-name`
|
|
133
|
+
|
|
134
|
+
**Examples:**
|
|
135
|
+
```bash
|
|
136
|
+
opkg set --name my-package
|
|
137
|
+
opkg set --name @myorg/my-package
|
|
138
|
+
opkg set --name package.name
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Description Field (`--description`)
|
|
142
|
+
|
|
143
|
+
**Format:** Plain text string
|
|
144
|
+
|
|
145
|
+
**Validation:** None (any string allowed)
|
|
146
|
+
|
|
147
|
+
**Examples:**
|
|
148
|
+
```bash
|
|
149
|
+
opkg set --description "My awesome package"
|
|
150
|
+
opkg set --description "" # Clear description
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Keywords Field (`--keywords`)
|
|
154
|
+
|
|
155
|
+
**Format:** Space-separated string
|
|
156
|
+
|
|
157
|
+
**Processing:**
|
|
158
|
+
- Split by whitespace
|
|
159
|
+
- Empty strings filtered out
|
|
160
|
+
- Stored as array in YAML
|
|
161
|
+
|
|
162
|
+
**Examples:**
|
|
163
|
+
```bash
|
|
164
|
+
opkg set --keywords "ai coding assistant"
|
|
165
|
+
# Results in: keywords: [ai, coding, assistant]
|
|
166
|
+
|
|
167
|
+
opkg set --keywords "test"
|
|
168
|
+
# Results in: keywords: [test]
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Author Field (`--author`)
|
|
172
|
+
|
|
173
|
+
**Format:** Plain text string
|
|
174
|
+
|
|
175
|
+
**Validation:** None (any string allowed)
|
|
176
|
+
|
|
177
|
+
**Examples:**
|
|
178
|
+
```bash
|
|
179
|
+
opkg set --author "John Doe"
|
|
180
|
+
opkg set --author "Jane Smith <jane@example.com>"
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### License Field (`--license`)
|
|
184
|
+
|
|
185
|
+
**Format:** License identifier string
|
|
186
|
+
|
|
187
|
+
**Validation:** None (any string allowed, but should be valid SPDX identifier)
|
|
188
|
+
|
|
189
|
+
**Examples:**
|
|
190
|
+
```bash
|
|
191
|
+
opkg set --license MIT
|
|
192
|
+
opkg set --license "Apache-2.0"
|
|
193
|
+
opkg set --license ISC
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Homepage Field (`--homepage`)
|
|
197
|
+
|
|
198
|
+
**Format:** URL string
|
|
199
|
+
|
|
200
|
+
**Validation:**
|
|
201
|
+
- Must be valid URL format
|
|
202
|
+
- Typically starts with `http://` or `https://`
|
|
203
|
+
|
|
204
|
+
**Examples:**
|
|
205
|
+
```bash
|
|
206
|
+
opkg set --homepage https://example.com
|
|
207
|
+
opkg set --homepage https://github.com/user/repo
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Private Field (`--private`)
|
|
211
|
+
|
|
212
|
+
**Format:** Boolean flag
|
|
213
|
+
|
|
214
|
+
**Behavior:**
|
|
215
|
+
- Flag present = `true`
|
|
216
|
+
- Flag absent = no change (or `false` in interactive mode)
|
|
217
|
+
|
|
218
|
+
**Examples:**
|
|
219
|
+
```bash
|
|
220
|
+
opkg set --private
|
|
221
|
+
# Results in: private: true
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## Output and Feedback
|
|
225
|
+
|
|
226
|
+
### Change Diff Display
|
|
227
|
+
|
|
228
|
+
Before applying changes, displays a diff of what will change:
|
|
229
|
+
|
|
230
|
+
```
|
|
231
|
+
📝 Changes to apply:
|
|
232
|
+
version: 1.0.0 → 1.1.0
|
|
233
|
+
description: Old description → New description
|
|
234
|
+
keywords: [test, demo] → [test, demo, updated]
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### Success Output
|
|
238
|
+
|
|
239
|
+
After successful update:
|
|
240
|
+
|
|
241
|
+
```
|
|
242
|
+
✓ Updated my-package manifest
|
|
243
|
+
Path: .openpackage/packages/my-package
|
|
244
|
+
Type: workspace package
|
|
245
|
+
Updated: version, description
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### No Changes Detected
|
|
249
|
+
|
|
250
|
+
When no fields changed:
|
|
251
|
+
|
|
252
|
+
```
|
|
253
|
+
✓ No changes made to my-package
|
|
254
|
+
Manifest unchanged
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
## Error Handling
|
|
258
|
+
|
|
259
|
+
### Missing Package
|
|
260
|
+
|
|
261
|
+
**Error:** No openpackage.yml in CWD and no package specified
|
|
262
|
+
|
|
263
|
+
```
|
|
264
|
+
Error: No openpackage.yml found in current directory.
|
|
265
|
+
Either specify a package name or run from a package root:
|
|
266
|
+
opkg set <package-name> [options]
|
|
267
|
+
opkg set [options] # When in package root
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### Package Not Found
|
|
271
|
+
|
|
272
|
+
**Error:** Named package doesn't exist in workspace or global
|
|
273
|
+
|
|
274
|
+
```
|
|
275
|
+
Error: Package 'nonexistent' not found in workspace or global packages.
|
|
276
|
+
Available locations:
|
|
277
|
+
- Workspace packages: ./.openpackage/packages/
|
|
278
|
+
- Global packages: ~/.openpackage/packages/
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### Immutable Package
|
|
282
|
+
|
|
283
|
+
**Error:** Attempting to modify registry package
|
|
284
|
+
|
|
285
|
+
```
|
|
286
|
+
Error: Package 'my-package' not found in workspace or global packages.
|
|
287
|
+
|
|
288
|
+
Registry packages are immutable and cannot be modified directly.
|
|
289
|
+
To edit a registry package:
|
|
290
|
+
1. Install it with a mutable source: opkg install my-package --path <local-path>
|
|
291
|
+
2. Or copy it to workspace: opkg pull my-package
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Invalid Version
|
|
295
|
+
|
|
296
|
+
**Error:** Version doesn't follow semver
|
|
297
|
+
|
|
298
|
+
```
|
|
299
|
+
Error: Invalid version format: "not-a-version"
|
|
300
|
+
Version must be valid semver (e.g., 1.0.0, 2.1.3-beta.1)
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### Invalid Name
|
|
304
|
+
|
|
305
|
+
**Error:** Name contains invalid characters
|
|
306
|
+
|
|
307
|
+
```
|
|
308
|
+
Error: Package name 'invalid name' contains invalid characters (use only: a-z, 0-9, ., _, -)
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### Invalid URL
|
|
312
|
+
|
|
313
|
+
**Error:** Homepage is not a valid URL
|
|
314
|
+
|
|
315
|
+
```
|
|
316
|
+
Error: Invalid homepage URL: "not-a-url"
|
|
317
|
+
Must be a valid URL (e.g., https://example.com)
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### Non-Interactive Without Flags
|
|
321
|
+
|
|
322
|
+
**Error:** Non-interactive mode requires field flags
|
|
323
|
+
|
|
324
|
+
```
|
|
325
|
+
Error: Non-interactive mode requires at least one field flag.
|
|
326
|
+
Available flags: --ver, --name, --description, --keywords, --author, --license, --homepage, --private
|
|
327
|
+
Example: opkg set my-package --ver 1.0.0 --non-interactive
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
## Mutability and Immutability
|
|
331
|
+
|
|
332
|
+
### Mutable Sources (Allowed)
|
|
333
|
+
|
|
334
|
+
- ✅ Workspace packages (`.openpackage/packages/`)
|
|
335
|
+
- ✅ Global packages (`~/.openpackage/packages/`)
|
|
336
|
+
- ✅ Current directory packages (with `openpackage.yml`)
|
|
337
|
+
|
|
338
|
+
### Immutable Sources (Rejected)
|
|
339
|
+
|
|
340
|
+
- ❌ Registry packages (`~/.openpackage/registry/`)
|
|
341
|
+
- Packed versions are snapshots and cannot be modified
|
|
342
|
+
- Must be pulled/copied to mutable location first
|
|
343
|
+
|
|
344
|
+
## Use Cases
|
|
345
|
+
|
|
346
|
+
### Version Bump for Release
|
|
347
|
+
|
|
348
|
+
```bash
|
|
349
|
+
# Update version before packing
|
|
350
|
+
opkg set my-package --ver 1.2.0
|
|
351
|
+
opkg pack my-package
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
### Add Metadata to Existing Package
|
|
355
|
+
|
|
356
|
+
```bash
|
|
357
|
+
# Add complete metadata
|
|
358
|
+
opkg set my-package \
|
|
359
|
+
--description "My awesome package" \
|
|
360
|
+
--keywords "ai coding assistant" \
|
|
361
|
+
--author "John Doe" \
|
|
362
|
+
--license "MIT" \
|
|
363
|
+
--homepage "https://example.com"
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
### Rename Package
|
|
367
|
+
|
|
368
|
+
```bash
|
|
369
|
+
# Update the name
|
|
370
|
+
opkg set old-name --name new-name
|
|
371
|
+
|
|
372
|
+
# Note: Package directory remains the same
|
|
373
|
+
# Consider updating workspace index references if needed
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
### Mark as Private
|
|
377
|
+
|
|
378
|
+
```bash
|
|
379
|
+
# Prevent accidental public push
|
|
380
|
+
opkg set my-package --private
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### Interactive Metadata Update
|
|
384
|
+
|
|
385
|
+
```bash
|
|
386
|
+
# Review and update all fields interactively
|
|
387
|
+
opkg set my-package
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### CI/CD Version Update
|
|
391
|
+
|
|
392
|
+
```bash
|
|
393
|
+
# Automated version bump in pipeline
|
|
394
|
+
opkg set my-package --ver $NEW_VERSION --non-interactive
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
## Integration with Other Commands
|
|
398
|
+
|
|
399
|
+
### With `pack`
|
|
400
|
+
|
|
401
|
+
```bash
|
|
402
|
+
# Set version, then pack to registry
|
|
403
|
+
opkg set my-package --ver 1.0.0
|
|
404
|
+
opkg pack my-package
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### With `push`
|
|
408
|
+
|
|
409
|
+
```bash
|
|
410
|
+
# Update metadata before pushing to remote
|
|
411
|
+
opkg set my-package --description "Production ready"
|
|
412
|
+
opkg pack my-package
|
|
413
|
+
opkg push my-package
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
### With `new`
|
|
417
|
+
|
|
418
|
+
```bash
|
|
419
|
+
# Create package, then add metadata later
|
|
420
|
+
opkg new my-package --scope local --non-interactive
|
|
421
|
+
opkg set my-package --ver 1.0.0 --description "Initial version"
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
## Comparison with Related Commands
|
|
425
|
+
|
|
426
|
+
| Command | Purpose | Creates Files | Modifies Metadata | Supports Interactive |
|
|
427
|
+
|---------|---------|---------------|-------------------|---------------------|
|
|
428
|
+
| `opkg new` | Create new package | ✅ Yes | ✅ Initial | ✅ Yes |
|
|
429
|
+
| `opkg set` | Update existing package | ❌ No | ✅ Update | ✅ Yes |
|
|
430
|
+
| `opkg pack` | Snapshot to registry | ✅ Registry copy | ❌ No | ❌ No |
|
|
431
|
+
| `opkg save` | Sync workspace edits | ❌ No | ❌ No | ❌ No |
|
|
432
|
+
|
|
433
|
+
## Technical Implementation
|
|
434
|
+
|
|
435
|
+
See [set-behavior.md](./set-behavior.md) for detailed implementation behavior.
|
|
436
|
+
|
|
437
|
+
## Examples
|
|
438
|
+
|
|
439
|
+
### Basic Usage
|
|
440
|
+
|
|
441
|
+
```bash
|
|
442
|
+
# Update version of CWD package
|
|
443
|
+
cd my-package/
|
|
444
|
+
opkg set --ver 1.1.0
|
|
445
|
+
|
|
446
|
+
# Update named workspace package
|
|
447
|
+
opkg set my-package --ver 2.0.0
|
|
448
|
+
|
|
449
|
+
# Update multiple fields
|
|
450
|
+
opkg set my-package --ver 1.5.0 --author "Jane Doe" --license "Apache-2.0"
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
### Interactive Usage
|
|
454
|
+
|
|
455
|
+
```bash
|
|
456
|
+
# Prompt for all fields
|
|
457
|
+
opkg set my-package
|
|
458
|
+
|
|
459
|
+
# Example session:
|
|
460
|
+
# Current package: my-package (v1.0.0)
|
|
461
|
+
# Leave blank to keep current value
|
|
462
|
+
#
|
|
463
|
+
# Name [my-package]:
|
|
464
|
+
# Version [1.0.0]: 1.1.0
|
|
465
|
+
# Description [My package]: Updated description
|
|
466
|
+
# Keywords [test demo]: test demo updated
|
|
467
|
+
# Author [John Doe]:
|
|
468
|
+
# License [MIT]:
|
|
469
|
+
# Homepage []: https://example.com
|
|
470
|
+
# Private [false]:
|
|
471
|
+
#
|
|
472
|
+
# 📝 Changes to apply:
|
|
473
|
+
# version: 1.0.0 → 1.1.0
|
|
474
|
+
# description: My package → Updated description
|
|
475
|
+
# keywords: [test, demo] → [test, demo, updated]
|
|
476
|
+
# homepage: (not set) → https://example.com
|
|
477
|
+
#
|
|
478
|
+
# Apply these changes? (y/n): y
|
|
479
|
+
#
|
|
480
|
+
# ✓ Updated my-package manifest
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
### Automated Usage
|
|
484
|
+
|
|
485
|
+
```bash
|
|
486
|
+
#!/bin/bash
|
|
487
|
+
# CI/CD script for version bumping
|
|
488
|
+
|
|
489
|
+
NEW_VERSION=$(node -p "require('./package.json').version")
|
|
490
|
+
|
|
491
|
+
opkg set my-package \
|
|
492
|
+
--ver "$NEW_VERSION" \
|
|
493
|
+
--non-interactive
|
|
494
|
+
|
|
495
|
+
opkg pack my-package
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
## Design Rationale
|
|
499
|
+
|
|
500
|
+
### Option Names
|
|
501
|
+
|
|
502
|
+
- **`--ver`** instead of `--version`: Avoids conflict with Commander.js's global `--version` flag
|
|
503
|
+
- **`--name`**: Not reserved by Commander in subcommands, provides clear intent
|
|
504
|
+
- Other options use full descriptive names for clarity
|
|
505
|
+
|
|
506
|
+
### Mutability Enforcement
|
|
507
|
+
|
|
508
|
+
Only mutable sources are allowed to prevent accidental modification of registry snapshots, which serve as immutable history.
|
|
509
|
+
|
|
510
|
+
### Change Detection
|
|
511
|
+
|
|
512
|
+
Shows diffs before applying to prevent accidental modifications and provide transparency.
|
|
513
|
+
|
|
514
|
+
### Interactive Mode
|
|
515
|
+
|
|
516
|
+
Default to interactive when no flags provided to encourage thoughtful metadata updates.
|
|
517
|
+
|
|
518
|
+
### Validation Before Write
|
|
519
|
+
|
|
520
|
+
All fields validated before any file modifications to prevent partial updates on error.
|