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
package/dist/commands/prune.js
DELETED
|
@@ -1,357 +0,0 @@
|
|
|
1
|
-
import * as semver from 'semver';
|
|
2
|
-
import { ensureRegistryDirectories, listPackageVersions, getPackageVersionPath } from '../core/directory.js';
|
|
3
|
-
import { registryManager } from '../core/registry.js';
|
|
4
|
-
import { packageManager } from '../core/package.js';
|
|
5
|
-
import { logger } from '../utils/logger.js';
|
|
6
|
-
import { withErrorHandling, UserCancellationError } from '../utils/errors.js';
|
|
7
|
-
import { promptConfirmation } from '../utils/prompts.js';
|
|
8
|
-
import { isPrereleaseVersion } from '../utils/version-ranges.js';
|
|
9
|
-
import { extractBaseVersion } from '../utils/version-generator.js';
|
|
10
|
-
import { exists, getDirectorySize } from '../utils/fs.js';
|
|
11
|
-
/**
|
|
12
|
-
* Extract timestamp from a prerelease version
|
|
13
|
-
*/
|
|
14
|
-
function extractTimestamp(version) {
|
|
15
|
-
if (!isPrereleaseVersion(version)) {
|
|
16
|
-
return 0;
|
|
17
|
-
}
|
|
18
|
-
// WIP versions are treated as the latest
|
|
19
|
-
return Number.MAX_SAFE_INTEGER;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Find all prerelease versions in the registry
|
|
23
|
-
*/
|
|
24
|
-
async function findPrereleaseVersions(packageFilter) {
|
|
25
|
-
logger.debug('Finding prerelease versions', { packageFilter });
|
|
26
|
-
const packages = await registryManager.listPackages(undefined, true); // Get all versions, no filter yet
|
|
27
|
-
const prereleaseVersions = [];
|
|
28
|
-
for (const pkg of packages) {
|
|
29
|
-
// Apply exact package name filtering if provided
|
|
30
|
-
if (packageFilter && pkg.name !== packageFilter) {
|
|
31
|
-
continue;
|
|
32
|
-
}
|
|
33
|
-
if (isPrereleaseVersion(pkg.version)) {
|
|
34
|
-
const baseVersion = extractBaseVersion(pkg.version);
|
|
35
|
-
const timestamp = extractTimestamp(pkg.version);
|
|
36
|
-
const packagePath = getPackageVersionPath(pkg.name, pkg.version);
|
|
37
|
-
prereleaseVersions.push({
|
|
38
|
-
packageName: pkg.name,
|
|
39
|
-
version: pkg.version,
|
|
40
|
-
baseVersion,
|
|
41
|
-
timestamp,
|
|
42
|
-
path: packagePath
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
logger.debug(`Found ${prereleaseVersions.length} prerelease versions`);
|
|
47
|
-
return prereleaseVersions;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Get the latest base version for a package (highest semver)
|
|
51
|
-
* Considers both stable versions and base versions from prereleases
|
|
52
|
-
*/
|
|
53
|
-
async function getLatestBaseVersion(packageName) {
|
|
54
|
-
const allVersions = await listPackageVersions(packageName);
|
|
55
|
-
const baseVersions = new Set();
|
|
56
|
-
for (const version of allVersions) {
|
|
57
|
-
if (isPrereleaseVersion(version)) {
|
|
58
|
-
// Extract base version from prerelease version
|
|
59
|
-
const baseVersion = extractBaseVersion(version);
|
|
60
|
-
baseVersions.add(baseVersion);
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
// Add stable version directly
|
|
64
|
-
baseVersions.add(version);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
if (baseVersions.size === 0) {
|
|
68
|
-
return null;
|
|
69
|
-
}
|
|
70
|
-
return [...baseVersions].sort(semver.compare).pop();
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Group prerelease versions by package
|
|
74
|
-
*/
|
|
75
|
-
function groupByPackage(versions) {
|
|
76
|
-
const groups = new Map();
|
|
77
|
-
for (const version of versions) {
|
|
78
|
-
if (!groups.has(version.packageName)) {
|
|
79
|
-
groups.set(version.packageName, []);
|
|
80
|
-
}
|
|
81
|
-
groups.get(version.packageName).push(version);
|
|
82
|
-
}
|
|
83
|
-
return groups;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Compare prerelease versions by timestamp (ascending order)
|
|
87
|
-
*/
|
|
88
|
-
function compareByTimestamp(a, b) {
|
|
89
|
-
return a.timestamp - b.timestamp;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Analyze which versions to delete and preserve based on preservation rules
|
|
93
|
-
*/
|
|
94
|
-
async function analyzeDeletionSafety(versions, options) {
|
|
95
|
-
if (options.all) {
|
|
96
|
-
return { toDelete: versions, toPreserve: [] };
|
|
97
|
-
}
|
|
98
|
-
const packageGroups = groupByPackage(versions);
|
|
99
|
-
const toDelete = [];
|
|
100
|
-
const toPreserve = [];
|
|
101
|
-
for (const [packageName, packageVersions] of packageGroups) {
|
|
102
|
-
// 1. Find the latest base version (highest semver)
|
|
103
|
-
const latestBaseVersion = await getLatestBaseVersion(packageName);
|
|
104
|
-
if (!latestBaseVersion) {
|
|
105
|
-
// No stable versions exist, delete all prereleases
|
|
106
|
-
toDelete.push(...packageVersions);
|
|
107
|
-
continue;
|
|
108
|
-
}
|
|
109
|
-
// 2. Get prerelease versions ONLY for the latest base version
|
|
110
|
-
const latestBasePrereleases = packageVersions.filter(v => v.baseVersion === latestBaseVersion);
|
|
111
|
-
if (latestBasePrereleases.length > 0) {
|
|
112
|
-
// 3. Preserve only the latest prerelease of the latest base version
|
|
113
|
-
const sortedPrereleases = latestBasePrereleases.sort(compareByTimestamp);
|
|
114
|
-
const latestPrerelease = sortedPrereleases[sortedPrereleases.length - 1]; // Get the last (latest) one
|
|
115
|
-
toPreserve.push(latestPrerelease);
|
|
116
|
-
// 4. Delete all other prereleases of the latest base version
|
|
117
|
-
toDelete.push(...sortedPrereleases.slice(0, -1)); // All except the last one
|
|
118
|
-
}
|
|
119
|
-
// 5. Delete ALL prerelease versions of older base versions
|
|
120
|
-
const olderBasePrereleases = packageVersions.filter(v => v.baseVersion !== latestBaseVersion);
|
|
121
|
-
toDelete.push(...olderBasePrereleases);
|
|
122
|
-
}
|
|
123
|
-
return { toDelete, toPreserve };
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Calculate approximate size of directories to be deleted
|
|
127
|
-
*/
|
|
128
|
-
async function calculateFreedSpace(versions) {
|
|
129
|
-
let totalSize = 0;
|
|
130
|
-
for (const version of versions) {
|
|
131
|
-
try {
|
|
132
|
-
if (await exists(version.path)) {
|
|
133
|
-
const size = await getDirectorySize(version.path);
|
|
134
|
-
totalSize += size;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
catch (error) {
|
|
138
|
-
logger.debug(`Failed to calculate size for ${version.path}`, { error });
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
return totalSize;
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Format bytes to human readable string
|
|
145
|
-
*/
|
|
146
|
-
function formatBytes(bytes) {
|
|
147
|
-
if (bytes === 0)
|
|
148
|
-
return '0 B';
|
|
149
|
-
const k = 1024;
|
|
150
|
-
const sizes = ['B', 'KB', 'MB', 'GB'];
|
|
151
|
-
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
152
|
-
return `${(bytes / Math.pow(k, i)).toFixed(1)} ${sizes[i]}`;
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Confirm prune operation with detailed breakdown
|
|
156
|
-
*/
|
|
157
|
-
async function confirmPruneOperation(toDelete, toPreserve) {
|
|
158
|
-
console.log('🔍 Prerelease Version Analysis:\n');
|
|
159
|
-
// Show what will be preserved
|
|
160
|
-
if (toPreserve.length > 0) {
|
|
161
|
-
console.log('✅ Versions to PRESERVE (latest prerelease of latest base version):');
|
|
162
|
-
const preserveGroups = groupByPackage(toPreserve);
|
|
163
|
-
for (const [packageName, versions] of preserveGroups) {
|
|
164
|
-
for (const version of versions) {
|
|
165
|
-
console.log(` 📦 ${packageName}@${version.version} (latest prerelease of v${version.baseVersion})`);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
console.log();
|
|
169
|
-
}
|
|
170
|
-
// Show packages with no prereleases for latest base version
|
|
171
|
-
const deleteGroups = groupByPackage(toDelete);
|
|
172
|
-
const preserveGroups = groupByPackage(toPreserve);
|
|
173
|
-
const packagesWithoutLatestPrereleases = [...deleteGroups.keys()].filter(name => !preserveGroups.has(name));
|
|
174
|
-
if (packagesWithoutLatestPrereleases.length > 0) {
|
|
175
|
-
console.log('ℹ️ No prerelease versions found for latest base versions:');
|
|
176
|
-
for (const packageName of packagesWithoutLatestPrereleases) {
|
|
177
|
-
const latestBase = await getLatestBaseVersion(packageName);
|
|
178
|
-
console.log(` 📦 ${packageName} (latest: v${latestBase} - no prereleases)`);
|
|
179
|
-
}
|
|
180
|
-
console.log();
|
|
181
|
-
}
|
|
182
|
-
// Show what will be deleted
|
|
183
|
-
if (toDelete.length > 0) {
|
|
184
|
-
console.log('🗑️ Versions to DELETE:');
|
|
185
|
-
for (const [packageName, versions] of deleteGroups) {
|
|
186
|
-
console.log(` 📦 ${packageName} (${versions.length} versions):`);
|
|
187
|
-
// Group by base version for better display
|
|
188
|
-
const versionsByBase = new Map();
|
|
189
|
-
for (const version of versions) {
|
|
190
|
-
if (!versionsByBase.has(version.baseVersion)) {
|
|
191
|
-
versionsByBase.set(version.baseVersion, []);
|
|
192
|
-
}
|
|
193
|
-
versionsByBase.get(version.baseVersion).push(version);
|
|
194
|
-
}
|
|
195
|
-
// Sort base versions
|
|
196
|
-
const sortedBases = [...versionsByBase.keys()].sort(semver.compare);
|
|
197
|
-
for (const baseVersion of sortedBases) {
|
|
198
|
-
const baseVersions = versionsByBase.get(baseVersion);
|
|
199
|
-
const latestBase = await getLatestBaseVersion(packageName);
|
|
200
|
-
const isOlderBase = baseVersion !== latestBase;
|
|
201
|
-
for (const version of baseVersions) {
|
|
202
|
-
const reason = isOlderBase
|
|
203
|
-
? `(older base: v${baseVersion})`
|
|
204
|
-
: `(older prerelease of v${baseVersion})`;
|
|
205
|
-
console.log(` └─ ${version.version} ${reason}`);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
console.log();
|
|
210
|
-
// Calculate and show freed space
|
|
211
|
-
const freedSpace = await calculateFreedSpace(toDelete);
|
|
212
|
-
if (freedSpace > 0) {
|
|
213
|
-
console.log(`💾 Estimated space to be freed: ~${formatBytes(freedSpace)}\n`);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
// Confirmation prompt
|
|
217
|
-
const shouldProceed = await promptConfirmation(`Delete ${toDelete.length} prerelease version(s)?`, false // Default to 'no' for safety
|
|
218
|
-
);
|
|
219
|
-
if (!shouldProceed) {
|
|
220
|
-
throw new UserCancellationError();
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Execute the prune operation
|
|
225
|
-
*/
|
|
226
|
-
async function executePruneOperation(versions) {
|
|
227
|
-
const errors = [];
|
|
228
|
-
const deletedVersions = [];
|
|
229
|
-
const freedSpace = await calculateFreedSpace(versions);
|
|
230
|
-
console.log('🧹 Cleaning up prerelease versions...\n');
|
|
231
|
-
for (const version of versions) {
|
|
232
|
-
try {
|
|
233
|
-
await packageManager.deletePackageVersion(version.packageName, version.version);
|
|
234
|
-
deletedVersions.push(version);
|
|
235
|
-
console.log(`✓ Deleted ${version.packageName}@${version.version}`);
|
|
236
|
-
}
|
|
237
|
-
catch (error) {
|
|
238
|
-
const errorMsg = `Failed to delete ${version.packageName}@${version.version}: ${error}`;
|
|
239
|
-
errors.push(errorMsg);
|
|
240
|
-
logger.error(errorMsg, { error, version });
|
|
241
|
-
console.log(`✗ ${errorMsg}`);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
return {
|
|
245
|
-
totalFound: versions.length,
|
|
246
|
-
totalDeleted: deletedVersions.length,
|
|
247
|
-
totalPreserved: 0, // Will be set by caller
|
|
248
|
-
deletedVersions,
|
|
249
|
-
preservedVersions: [], // Will be set by caller
|
|
250
|
-
freedSpace,
|
|
251
|
-
errors
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
/**
|
|
255
|
-
* Main prune command implementation
|
|
256
|
-
*/
|
|
257
|
-
async function pruneCommand(packageName, options = {}) {
|
|
258
|
-
logger.info(`Pruning prerelease versions${packageName ? ` for package: ${packageName}` : ''}`);
|
|
259
|
-
// Ensure registry directories exist
|
|
260
|
-
await ensureRegistryDirectories();
|
|
261
|
-
try {
|
|
262
|
-
// 1. Discovery phase
|
|
263
|
-
const allPrereleaseVersions = await findPrereleaseVersions(packageName);
|
|
264
|
-
if (allPrereleaseVersions.length === 0) {
|
|
265
|
-
const scope = packageName ? `for package '${packageName}'` : 'in local registry';
|
|
266
|
-
console.log(`No prerelease versions found ${scope}.`);
|
|
267
|
-
const emptyResult = {
|
|
268
|
-
totalFound: 0,
|
|
269
|
-
totalDeleted: 0,
|
|
270
|
-
totalPreserved: 0,
|
|
271
|
-
deletedVersions: [],
|
|
272
|
-
preservedVersions: [],
|
|
273
|
-
freedSpace: 0,
|
|
274
|
-
errors: []
|
|
275
|
-
};
|
|
276
|
-
return { success: true, data: emptyResult };
|
|
277
|
-
}
|
|
278
|
-
// 2. Safety analysis
|
|
279
|
-
const { toDelete, toPreserve } = await analyzeDeletionSafety(allPrereleaseVersions, options);
|
|
280
|
-
// 3. Dry run mode
|
|
281
|
-
if (options.dryRun) {
|
|
282
|
-
await confirmPruneOperation(toDelete, toPreserve);
|
|
283
|
-
console.log('\n🔍 Dry run complete. Use \'opkg prune\' without --dry-run to perform the cleanup.');
|
|
284
|
-
const dryRunResult = {
|
|
285
|
-
totalFound: allPrereleaseVersions.length,
|
|
286
|
-
totalDeleted: 0,
|
|
287
|
-
totalPreserved: toPreserve.length,
|
|
288
|
-
deletedVersions: [],
|
|
289
|
-
preservedVersions: toPreserve,
|
|
290
|
-
freedSpace: await calculateFreedSpace(toDelete),
|
|
291
|
-
errors: []
|
|
292
|
-
};
|
|
293
|
-
return { success: true, data: dryRunResult };
|
|
294
|
-
}
|
|
295
|
-
// 4. Confirmation (unless --force)
|
|
296
|
-
if (!options.force && toDelete.length > 0) {
|
|
297
|
-
await confirmPruneOperation(toDelete, toPreserve);
|
|
298
|
-
}
|
|
299
|
-
// 5. Execution
|
|
300
|
-
if (toDelete.length === 0) {
|
|
301
|
-
console.log('✨ No prerelease versions need to be pruned.');
|
|
302
|
-
const noOpResult = {
|
|
303
|
-
totalFound: allPrereleaseVersions.length,
|
|
304
|
-
totalDeleted: 0,
|
|
305
|
-
totalPreserved: toPreserve.length,
|
|
306
|
-
deletedVersions: [],
|
|
307
|
-
preservedVersions: toPreserve,
|
|
308
|
-
freedSpace: 0,
|
|
309
|
-
errors: []
|
|
310
|
-
};
|
|
311
|
-
return { success: true, data: noOpResult };
|
|
312
|
-
}
|
|
313
|
-
const result = await executePruneOperation(toDelete);
|
|
314
|
-
result.totalPreserved = toPreserve.length;
|
|
315
|
-
result.preservedVersions = toPreserve;
|
|
316
|
-
// 6. Summary
|
|
317
|
-
console.log('\n🎉 Cleanup complete!');
|
|
318
|
-
console.log(` 📊 ${result.totalDeleted} prerelease version(s) deleted`);
|
|
319
|
-
if (result.totalPreserved > 0) {
|
|
320
|
-
console.log(` ✅ ${result.totalPreserved} version(s) preserved`);
|
|
321
|
-
}
|
|
322
|
-
if (result.freedSpace > 0) {
|
|
323
|
-
console.log(` 💾 ${formatBytes(result.freedSpace)} freed`);
|
|
324
|
-
}
|
|
325
|
-
if (result.errors.length > 0) {
|
|
326
|
-
console.log(` ⚠️ ${result.errors.length} error(s) occurred`);
|
|
327
|
-
}
|
|
328
|
-
return { success: true, data: result };
|
|
329
|
-
}
|
|
330
|
-
catch (error) {
|
|
331
|
-
if (error instanceof UserCancellationError) {
|
|
332
|
-
throw error; // Re-throw to be handled by withErrorHandling
|
|
333
|
-
}
|
|
334
|
-
logger.error('Failed to prune prerelease versions', { error, packageName, options });
|
|
335
|
-
throw error instanceof Error ? error : new Error(`Prune operation failed: ${error}`);
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
/**
|
|
339
|
-
* Setup the prune command
|
|
340
|
-
*/
|
|
341
|
-
export function setupPruneCommand(program) {
|
|
342
|
-
program
|
|
343
|
-
.command('prune')
|
|
344
|
-
.description('Remove old prerelease versions from local registry. Preserves latest prerelease of latest version unless --all is specified.')
|
|
345
|
-
.argument('[package-name]', 'specific package to prune (optional)')
|
|
346
|
-
.option('--all', 'delete ALL prerelease versions including latest ones')
|
|
347
|
-
.option('--dry-run', 'show what would be deleted without doing it')
|
|
348
|
-
.option('-f, --force', 'skip confirmation prompts')
|
|
349
|
-
.option('-i, --interactive', 'interactively select versions to delete')
|
|
350
|
-
.action(withErrorHandling(async (packageName, options) => {
|
|
351
|
-
const result = await pruneCommand(packageName, options);
|
|
352
|
-
if (!result.success) {
|
|
353
|
-
throw new Error(result.error || 'Prune operation failed');
|
|
354
|
-
}
|
|
355
|
-
}));
|
|
356
|
-
}
|
|
357
|
-
//# sourceMappingURL=prune.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prune.js","sourceRoot":"","sources":["../../src/commands/prune.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/tui.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
|
-
import { resolve, dirname } from 'node:path';
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
4
|
-
import { existsSync } from 'node:fs';
|
|
5
|
-
import { logger } from '../utils/logger.js';
|
|
6
|
-
import { withErrorHandling } from '../utils/errors.js';
|
|
7
|
-
import { ensureBunBinary } from '../utils/bun-bootstrap.js';
|
|
8
|
-
/**
|
|
9
|
-
* Dynamically loads and starts the OpenPackage TUI to avoid loading TUI dependencies
|
|
10
|
-
* when running non-TUI commands.
|
|
11
|
-
*/
|
|
12
|
-
export async function launchTui() {
|
|
13
|
-
logger.info('Starting OpenPackage TUI');
|
|
14
|
-
if (!process?.versions?.bun) {
|
|
15
|
-
const bunCommand = await ensureBunBinary();
|
|
16
|
-
const distCommandsDir = dirname(fileURLToPath(import.meta.url)); // dist/commands
|
|
17
|
-
const projectRoot = resolve(distCommandsDir, '../..'); // go up to repo root for node_modules
|
|
18
|
-
const distPath = resolve(distCommandsDir, '../tui/index.js');
|
|
19
|
-
logger.info('Re-invoking under Bun for TUI rendering', { bunCommand, distPath });
|
|
20
|
-
if (!existsSync(distPath)) {
|
|
21
|
-
console.error(`TUI entrypoint not found at ${distPath}. Did you run "npm run build"?`);
|
|
22
|
-
process.exit(1);
|
|
23
|
-
}
|
|
24
|
-
// Use "bun <file>" (not "bun run <file>", which expects a package.json script)
|
|
25
|
-
const child = spawn(bunCommand, [distPath], {
|
|
26
|
-
stdio: 'inherit',
|
|
27
|
-
env: { ...process.env },
|
|
28
|
-
cwd: projectRoot,
|
|
29
|
-
});
|
|
30
|
-
child.on('error', (error) => {
|
|
31
|
-
console.error('OpenPackage TUI requires the Bun runtime. Install Bun (https://bun.sh) and rerun with `bunx openpackage` or set BUN_BIN to your bun path.');
|
|
32
|
-
logger.debug('Failed to spawn bun for TUI', { error });
|
|
33
|
-
process.exit(1);
|
|
34
|
-
});
|
|
35
|
-
child.on('exit', (code, signal) => {
|
|
36
|
-
if (signal) {
|
|
37
|
-
process.kill(process.pid, signal);
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
if (code && code !== 0) {
|
|
41
|
-
console.error(`Bun exited with code ${code}. Ensure Bun is installed and runnable (set BUN_BIN if needed).`);
|
|
42
|
-
}
|
|
43
|
-
process.exit(code ?? 0);
|
|
44
|
-
});
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
const { startOpenPackageTui } = await import('../tui/index.js');
|
|
48
|
-
await startOpenPackageTui();
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Registers the `tui` command for explicit launches.
|
|
52
|
-
*/
|
|
53
|
-
export function setupTuiCommand(program) {
|
|
54
|
-
program
|
|
55
|
-
.command('tui')
|
|
56
|
-
.description('Launch the OpenPackage TUI')
|
|
57
|
-
.action(withErrorHandling(async () => {
|
|
58
|
-
await launchTui();
|
|
59
|
-
}));
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=tui.js.map
|
package/dist/commands/tui.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/commands/tui.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/install/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { resolve, relative } from 'path';
|
|
2
|
-
import { DIR_PATTERNS } from '../../constants/index.js';
|
|
3
|
-
import { exists, isFile } from '../../utils/fs.js';
|
|
4
|
-
import { listAllPackages } from '../directory.js';
|
|
5
|
-
import { normalizePathForProcessing } from '../../utils/path-normalization.js';
|
|
6
|
-
import { mapPlatformFileToUniversal } from '../../utils/platform-mapper.js';
|
|
7
|
-
import { safePrompts } from '../../utils/prompts.js';
|
|
8
|
-
import { UserCancellationError } from '../../utils/errors.js';
|
|
9
|
-
export const SINGLE_FILE_PACKAGE = 'f';
|
|
10
|
-
export async function resolveSingleFileInput(cwd, rawInput) {
|
|
11
|
-
const absolutePath = resolve(cwd, rawInput);
|
|
12
|
-
const looksLikePath = rawInput.includes('/') || rawInput.includes('\\') || rawInput.startsWith('.');
|
|
13
|
-
let registryPath = null;
|
|
14
|
-
if (await exists(absolutePath)) {
|
|
15
|
-
if (await isFile(absolutePath)) {
|
|
16
|
-
registryPath = computeRegistryPath(cwd, absolutePath);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
if (!registryPath && looksLikePath) {
|
|
20
|
-
registryPath = normalizePathForProcessing(rawInput);
|
|
21
|
-
}
|
|
22
|
-
if (!registryPath) {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
const allPackages = await listAllPackages();
|
|
26
|
-
const singleFilePackages = allPackages.filter(name => name === SINGLE_FILE_PACKAGE || name.endsWith(`/${SINGLE_FILE_PACKAGE}`));
|
|
27
|
-
if (singleFilePackages.length === 0) {
|
|
28
|
-
console.error("❌ Single-file package 'f' not found in local registry. Run 'opkg save <file>' first.");
|
|
29
|
-
return { kind: 'missing', registryPath };
|
|
30
|
-
}
|
|
31
|
-
let selectedPackage = singleFilePackages[0];
|
|
32
|
-
if (singleFilePackages.length > 1) {
|
|
33
|
-
const response = await safePrompts({
|
|
34
|
-
type: 'select',
|
|
35
|
-
name: 'pkg',
|
|
36
|
-
message: 'Select single-file package to push',
|
|
37
|
-
choices: singleFilePackages.map(pkg => ({ title: pkg, value: pkg })),
|
|
38
|
-
hint: 'Use arrow keys to navigate, Enter to select'
|
|
39
|
-
});
|
|
40
|
-
selectedPackage = response.pkg;
|
|
41
|
-
}
|
|
42
|
-
if (!selectedPackage) {
|
|
43
|
-
throw new UserCancellationError('Operation cancelled by user');
|
|
44
|
-
}
|
|
45
|
-
return { kind: 'ok', packageName: selectedPackage, registryPath };
|
|
46
|
-
}
|
|
47
|
-
function computeRegistryPath(cwd, absolutePath) {
|
|
48
|
-
const platformMapping = mapPlatformFileToUniversal(absolutePath);
|
|
49
|
-
if (platformMapping) {
|
|
50
|
-
const { subdir, relPath } = platformMapping;
|
|
51
|
-
return normalizePathForProcessing([DIR_PATTERNS.OPENPACKAGE, subdir, relPath].filter(Boolean).join('/'));
|
|
52
|
-
}
|
|
53
|
-
const rel = relative(cwd, absolutePath);
|
|
54
|
-
return normalizePathForProcessing(rel);
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=push-single-file.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"push-single-file.js","sourceRoot":"","sources":["../../../src/core/push/push-single-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
import { join } from 'path';
|
|
2
|
-
import { DIR_PATTERNS, FILE_PATTERNS, OPENPACKAGE_DIRS } from '../../constants/index.js';
|
|
3
|
-
import { exists, isDirectory } from '../../utils/fs.js';
|
|
4
|
-
import { parsePackageYml } from '../../utils/package-yml.js';
|
|
5
|
-
import { arePackageNamesEquivalent } from '../../utils/package-name.js';
|
|
6
|
-
import { getLocalPackageDir } from '../../utils/paths.js';
|
|
7
|
-
import { findDirectoriesContainingFile } from '../../utils/file-processing.js';
|
|
8
|
-
import { logger } from '../../utils/logger.js';
|
|
9
|
-
/**
|
|
10
|
-
* Core rule: any directory that contains `.openpackage/package.yml` is a valid package.
|
|
11
|
-
*/
|
|
12
|
-
export async function isValidPackageDirectory(dir) {
|
|
13
|
-
const packageYmlPath = join(dir, DIR_PATTERNS.OPENPACKAGE, FILE_PATTERNS.PACKAGE_YML);
|
|
14
|
-
return exists(packageYmlPath);
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Load package config from a directory that satisfies the core rule.
|
|
18
|
-
*/
|
|
19
|
-
export async function loadPackageConfig(dir) {
|
|
20
|
-
const packageYmlPath = join(dir, DIR_PATTERNS.OPENPACKAGE, FILE_PATTERNS.PACKAGE_YML);
|
|
21
|
-
if (!(await exists(packageYmlPath))) {
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
try {
|
|
25
|
-
return await parsePackageYml(packageYmlPath);
|
|
26
|
-
}
|
|
27
|
-
catch (error) {
|
|
28
|
-
logger.debug(`Failed to parse package.yml at ${packageYmlPath}: ${error}`);
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Detect package context for save/pack commands.
|
|
34
|
-
*
|
|
35
|
-
* Scope:
|
|
36
|
-
* - Root package at `cwd/.openpackage/package.yml`
|
|
37
|
-
* - Nested packages at `cwd/.openpackage/packages/<name>/package.yml`
|
|
38
|
-
*/
|
|
39
|
-
export async function detectPackageContext(cwd, packageName) {
|
|
40
|
-
const rootPackageYmlPath = join(cwd, DIR_PATTERNS.OPENPACKAGE, FILE_PATTERNS.PACKAGE_YML);
|
|
41
|
-
const hasRootPackage = await exists(rootPackageYmlPath);
|
|
42
|
-
// No package name provided: target cwd as the package itself.
|
|
43
|
-
if (!packageName) {
|
|
44
|
-
if (!hasRootPackage) {
|
|
45
|
-
return null;
|
|
46
|
-
}
|
|
47
|
-
try {
|
|
48
|
-
const config = await parsePackageYml(rootPackageYmlPath);
|
|
49
|
-
return {
|
|
50
|
-
packageDir: cwd,
|
|
51
|
-
packageYmlPath: rootPackageYmlPath,
|
|
52
|
-
config,
|
|
53
|
-
location: 'root',
|
|
54
|
-
isCwdPackage: true
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
logger.warn(`Failed to parse root package.yml: ${error}`);
|
|
59
|
-
return null;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
// Package name provided: check root first.
|
|
63
|
-
if (hasRootPackage) {
|
|
64
|
-
try {
|
|
65
|
-
const rootConfig = await parsePackageYml(rootPackageYmlPath);
|
|
66
|
-
if (arePackageNamesEquivalent(rootConfig.name, packageName)) {
|
|
67
|
-
return {
|
|
68
|
-
packageDir: cwd,
|
|
69
|
-
packageYmlPath: rootPackageYmlPath,
|
|
70
|
-
config: rootConfig,
|
|
71
|
-
location: 'root',
|
|
72
|
-
isCwdPackage: true
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
catch (error) {
|
|
77
|
-
logger.debug(`Failed to parse root package.yml: ${error}`);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
// Check nested packages directory for direct match.
|
|
81
|
-
const nestedPackageDir = getLocalPackageDir(cwd, packageName);
|
|
82
|
-
const nestedPackageYmlPath = join(nestedPackageDir, FILE_PATTERNS.PACKAGE_YML);
|
|
83
|
-
if (await exists(nestedPackageYmlPath)) {
|
|
84
|
-
try {
|
|
85
|
-
const nestedConfig = await parsePackageYml(nestedPackageYmlPath);
|
|
86
|
-
if (arePackageNamesEquivalent(nestedConfig.name, packageName)) {
|
|
87
|
-
return {
|
|
88
|
-
packageDir: nestedPackageDir,
|
|
89
|
-
packageYmlPath: nestedPackageYmlPath,
|
|
90
|
-
config: nestedConfig,
|
|
91
|
-
location: 'nested',
|
|
92
|
-
isCwdPackage: false
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
catch (error) {
|
|
97
|
-
logger.debug(`Failed to parse nested package.yml at ${nestedPackageYmlPath}: ${error}`);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
// Scan nested packages for cases where directory name differs from package name.
|
|
101
|
-
const packagesDir = join(cwd, DIR_PATTERNS.OPENPACKAGE, OPENPACKAGE_DIRS.PACKAGES);
|
|
102
|
-
if (await exists(packagesDir) && (await isDirectory(packagesDir))) {
|
|
103
|
-
try {
|
|
104
|
-
const packageDirs = await findDirectoriesContainingFile(packagesDir, FILE_PATTERNS.PACKAGE_YML, async (filePath) => {
|
|
105
|
-
try {
|
|
106
|
-
return await parsePackageYml(filePath);
|
|
107
|
-
}
|
|
108
|
-
catch {
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
for (const { dirPath, parsedContent } of packageDirs) {
|
|
113
|
-
if (!parsedContent)
|
|
114
|
-
continue;
|
|
115
|
-
const packageRoot = dirPath;
|
|
116
|
-
if (arePackageNamesEquivalent(parsedContent.name, packageName)) {
|
|
117
|
-
return {
|
|
118
|
-
packageDir: packageRoot,
|
|
119
|
-
packageYmlPath: join(packageRoot, FILE_PATTERNS.PACKAGE_YML),
|
|
120
|
-
config: parsedContent,
|
|
121
|
-
location: 'nested',
|
|
122
|
-
isCwdPackage: false
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
catch (error) {
|
|
128
|
-
logger.debug(`Failed to scan packages directory: ${error}`);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
return null;
|
|
132
|
-
}
|
|
133
|
-
export function getNoPackageDetectedMessage(packageName) {
|
|
134
|
-
if (packageName) {
|
|
135
|
-
return (`Package '${packageName}' not found.\n\n` +
|
|
136
|
-
`Checked locations:\n` +
|
|
137
|
-
` • Root package: .openpackage/package.yml\n` +
|
|
138
|
-
` • Nested packages: .openpackage/packages/${packageName}/\n\n` +
|
|
139
|
-
`💡 To create a new package, run: opkg save ${packageName}`);
|
|
140
|
-
}
|
|
141
|
-
return (`No package detected at current directory.\n\n` +
|
|
142
|
-
`A valid package requires .openpackage/package.yml to exist.\n\n` +
|
|
143
|
-
`💡 To initialize a package:\n` +
|
|
144
|
-
` • Run 'opkg init' to create a new package\n` +
|
|
145
|
-
` • Or specify a package name: 'opkg save <package-name>'`);
|
|
146
|
-
}
|
|
147
|
-
//# sourceMappingURL=package-detection.js.map
|