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,349 @@
|
|
|
1
|
+
# Platform System Overview
|
|
2
|
+
|
|
3
|
+
## What is the Platform System?
|
|
4
|
+
|
|
5
|
+
The **Platform System** is OpenPackage's solution to the fragmentation problem in AI coding platforms. Each platform (Cursor, Claude, Windsurf, etc.) has its own file formats, directory structures, and configuration schemas. The Platform System provides a **declarative transformation engine** that automatically maps universal package content to platform-specific formats.
|
|
6
|
+
|
|
7
|
+
### The Problem
|
|
8
|
+
|
|
9
|
+
Without a platform system:
|
|
10
|
+
- Package authors must create separate versions for each platform
|
|
11
|
+
- Users manually copy and adapt content between platforms
|
|
12
|
+
- Switching platforms means losing your configuration and tools
|
|
13
|
+
- Multi-platform workflows require duplicate maintenance
|
|
14
|
+
|
|
15
|
+
### The Solution
|
|
16
|
+
|
|
17
|
+
The Platform System provides:
|
|
18
|
+
- **Universal package format** - Authors write once, works everywhere
|
|
19
|
+
- **Declarative transformations** - JSON configuration handles all mapping
|
|
20
|
+
- **Automatic adaptation** - CLI transforms content during install
|
|
21
|
+
- **Multi-platform composition** - Merge content from multiple packages safely
|
|
22
|
+
- **Zero configuration** - Built-in flows work out of the box
|
|
23
|
+
|
|
24
|
+
## Core Concepts
|
|
25
|
+
|
|
26
|
+
### 1. Platforms
|
|
27
|
+
|
|
28
|
+
A **platform** represents an AI coding assistant with its own file organization:
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
{
|
|
32
|
+
"cursor": {
|
|
33
|
+
"name": "Cursor",
|
|
34
|
+
"rootDir": ".cursor", // Where files live
|
|
35
|
+
"aliases": ["cursorcli"], // CLI shortcuts
|
|
36
|
+
"flows": [ /* transforms */ ]
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Key characteristics:**
|
|
42
|
+
- Unique identifier (e.g., `cursor`, `claude`)
|
|
43
|
+
- Root directory (e.g., `.cursor`, `.claude`)
|
|
44
|
+
- Optional root file (e.g., `CLAUDE.md`)
|
|
45
|
+
- Set of transformation flows
|
|
46
|
+
|
|
47
|
+
### 2. Flows
|
|
48
|
+
|
|
49
|
+
A **flow** is a declarative transformation rule that maps source content to target format:
|
|
50
|
+
|
|
51
|
+
```jsonc
|
|
52
|
+
{
|
|
53
|
+
"from": "rules/**/*.md", // Universal source
|
|
54
|
+
"to": ".cursor/rules/**/*.mdc", // Platform target
|
|
55
|
+
"map": { "theme": "workbench.theme" }, // Key remapping
|
|
56
|
+
"merge": "deep" // Merge strategy
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Flow pipeline:**
|
|
61
|
+
```
|
|
62
|
+
Source File → Parse → Transform → Merge → Write → Target File
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 3. Universal Package Format
|
|
66
|
+
|
|
67
|
+
Packages use a **platform-agnostic structure**:
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
my-package/
|
|
71
|
+
├── rules/
|
|
72
|
+
│ ├── code-quality.md
|
|
73
|
+
│ └── security.md
|
|
74
|
+
├── agents/
|
|
75
|
+
│ └── reviewer.md
|
|
76
|
+
├── mcp.jsonc
|
|
77
|
+
└── settings.jsonc
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
The CLI transforms this into platform-specific layouts during installation.
|
|
81
|
+
|
|
82
|
+
### 4. Configuration Hierarchy
|
|
83
|
+
|
|
84
|
+
Three levels of configuration with merge priority:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
Built-in (ships with CLI)
|
|
88
|
+
↓ merged with
|
|
89
|
+
~/.openpackage/platforms.jsonc (global overrides)
|
|
90
|
+
↓ merged with
|
|
91
|
+
<workspace>/.openpackage/platforms.jsonc (project overrides)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Priority:** workspace > global > built-in (last writer wins)
|
|
95
|
+
|
|
96
|
+
## How It Works
|
|
97
|
+
|
|
98
|
+
### Installation Flow
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
1. User: opkg install @user/cursor-rules
|
|
102
|
+
2. CLI loads package (universal format)
|
|
103
|
+
3. CLI detects platforms (.cursor directory exists)
|
|
104
|
+
4. CLI loads platform configuration (built-in + overrides)
|
|
105
|
+
5. CLI executes flows for detected platforms
|
|
106
|
+
6. Transformed files written to workspace
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Example Transformation
|
|
110
|
+
|
|
111
|
+
**Package content:**
|
|
112
|
+
```yaml
|
|
113
|
+
# rules/typescript-best-practices.md
|
|
114
|
+
---
|
|
115
|
+
severity: error
|
|
116
|
+
tags: [typescript, quality]
|
|
117
|
+
---
|
|
118
|
+
Always use strict type checking...
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**Flow definition:**
|
|
122
|
+
```jsonc
|
|
123
|
+
{
|
|
124
|
+
"from": "rules/**/*.md",
|
|
125
|
+
"to": ".cursor/rules/**/*.mdc",
|
|
126
|
+
"map": {
|
|
127
|
+
"severity": "level",
|
|
128
|
+
"tags": "categories"
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Result in workspace:**
|
|
134
|
+
```yaml
|
|
135
|
+
# .cursor/rules/typescript-best-practices.mdc
|
|
136
|
+
---
|
|
137
|
+
level: error
|
|
138
|
+
categories: [typescript, quality]
|
|
139
|
+
---
|
|
140
|
+
Always use strict type checking...
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Platform Detection
|
|
144
|
+
|
|
145
|
+
Platforms are detected using two signals:
|
|
146
|
+
|
|
147
|
+
1. **Root directory exists** - `.cursor`, `.claude`, etc.
|
|
148
|
+
2. **Root file exists** - `CLAUDE.md`, `GEMINI.md`, etc.
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
# Check detected platforms
|
|
152
|
+
opkg status
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**Detection result:**
|
|
156
|
+
- Flows execute only for detected platforms
|
|
157
|
+
- Conditional flows can check platform presence
|
|
158
|
+
- Disabled platforms are skipped
|
|
159
|
+
|
|
160
|
+
## Multi-Package Composition
|
|
161
|
+
|
|
162
|
+
When multiple packages target the same file, the system uses **priority-based merging**:
|
|
163
|
+
|
|
164
|
+
**Priority order:**
|
|
165
|
+
1. Workspace content (highest)
|
|
166
|
+
2. Direct dependencies
|
|
167
|
+
3. Nested dependencies (shallower = higher priority)
|
|
168
|
+
|
|
169
|
+
**Example:**
|
|
170
|
+
```jsonc
|
|
171
|
+
// Package A: mcp.jsonc
|
|
172
|
+
{ "servers": { "database": { /* config */ } } }
|
|
173
|
+
|
|
174
|
+
// Package B: mcp.jsonc
|
|
175
|
+
{ "servers": { "api": { /* config */ } } }
|
|
176
|
+
|
|
177
|
+
// Result: .cursor/mcp.json (with merge: "deep")
|
|
178
|
+
{
|
|
179
|
+
"servers": {
|
|
180
|
+
"database": { /* from A */ },
|
|
181
|
+
"api": { /* from B */ }
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Conflicts:** Last writer wins (by priority), with warnings logged.
|
|
187
|
+
|
|
188
|
+
## Format Conversion
|
|
189
|
+
|
|
190
|
+
Automatic bidirectional conversion between formats:
|
|
191
|
+
|
|
192
|
+
| Source | Target | Conversion |
|
|
193
|
+
|--------|--------|------------|
|
|
194
|
+
| YAML | JSON | Parse YAML → serialize JSON |
|
|
195
|
+
| JSONC | JSON | Strip comments |
|
|
196
|
+
| JSON | TOML | Object → TOML sections |
|
|
197
|
+
| Markdown | Markdown | Transform frontmatter, preserve body |
|
|
198
|
+
|
|
199
|
+
**Auto-detection:** Format inferred from file extension or content analysis.
|
|
200
|
+
|
|
201
|
+
## Key Features
|
|
202
|
+
|
|
203
|
+
### Declarative Configuration
|
|
204
|
+
|
|
205
|
+
Everything defined in JSON, no code required:
|
|
206
|
+
|
|
207
|
+
```jsonc
|
|
208
|
+
{
|
|
209
|
+
"cursor": {
|
|
210
|
+
"flows": [
|
|
211
|
+
{ "from": "rules/**/*.md", "to": ".cursor/rules/**/*.mdc" },
|
|
212
|
+
{ "from": "mcp.jsonc", "to": ".cursor/mcp.json", "merge": "deep" }
|
|
213
|
+
]
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Powerful Transformations
|
|
219
|
+
|
|
220
|
+
- **Key remapping** - Dot notation, wildcards, nested paths
|
|
221
|
+
- **Value transforms** - Type conversion, string manipulation
|
|
222
|
+
- **Content embedding** - Wrap under keys or TOML sections
|
|
223
|
+
- **Conditional execution** - Platform checks, file existence
|
|
224
|
+
- **Multi-target flows** - One source → multiple destinations
|
|
225
|
+
|
|
226
|
+
### Namespace Isolation
|
|
227
|
+
|
|
228
|
+
Prevent package collisions with automatic namespacing:
|
|
229
|
+
|
|
230
|
+
```jsonc
|
|
231
|
+
{
|
|
232
|
+
"from": "mcp.jsonc",
|
|
233
|
+
"to": ".cursor/mcp.json",
|
|
234
|
+
"namespace": true, // Wraps under packages.{packageName}
|
|
235
|
+
"merge": "deep"
|
|
236
|
+
}
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Type Safety
|
|
240
|
+
|
|
241
|
+
- **JSON Schema validation** - IDE autocomplete and error checking
|
|
242
|
+
- **Load-time validation** - Clear error messages for invalid configs
|
|
243
|
+
- **Strict mode** - Comprehensive validation with `opkg validate platforms`
|
|
244
|
+
|
|
245
|
+
## Architecture
|
|
246
|
+
|
|
247
|
+
### Components
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
┌─────────────────────────────────────┐
|
|
251
|
+
│ Platform Configuration │
|
|
252
|
+
│ (built-in + global + workspace) │
|
|
253
|
+
└──────────────┬──────────────────────┘
|
|
254
|
+
│
|
|
255
|
+
↓
|
|
256
|
+
┌─────────────────────────────────────┐
|
|
257
|
+
│ Platform Detection │
|
|
258
|
+
│ (check rootDir/rootFile exist) │
|
|
259
|
+
└──────────────┬──────────────────────┘
|
|
260
|
+
│
|
|
261
|
+
↓
|
|
262
|
+
┌─────────────────────────────────────┐
|
|
263
|
+
│ Flow Executor │
|
|
264
|
+
│ (load → transform → merge → write) │
|
|
265
|
+
└──────────────┬──────────────────────┘
|
|
266
|
+
│
|
|
267
|
+
↓
|
|
268
|
+
┌─────────────────────────────────────┐
|
|
269
|
+
│ Workspace Files │
|
|
270
|
+
│ (platform-specific formats) │
|
|
271
|
+
└─────────────────────────────────────┘
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Key Files
|
|
275
|
+
|
|
276
|
+
- **`src/core/platforms.ts`** - Configuration loading and merging
|
|
277
|
+
- **`src/core/flows/flow-executor.ts`** - Flow execution engine
|
|
278
|
+
- **`src/core/flows/flow-transforms.ts`** - Transform implementations
|
|
279
|
+
- **`src/core/flows/flow-key-mapper.ts`** - Key mapping logic
|
|
280
|
+
- **`src/core/flows/flow-inverter.ts`** - Flow inversion for cross-platform conversion
|
|
281
|
+
- **`src/core/flows/platform-converter.ts`** - Universal converter orchestration
|
|
282
|
+
- **`src/core/install/format-detector.ts`** - Package format detection
|
|
283
|
+
- **`schemas/platforms-v1.json`** - JSON Schema definition
|
|
284
|
+
|
|
285
|
+
## Universal Platform Converter
|
|
286
|
+
|
|
287
|
+
**New in:** Commit `a3fdb9f2a846fa8c183bca851812c491aaf5b8e9`
|
|
288
|
+
|
|
289
|
+
The **Universal Platform Converter** extends the platform system to support **cross-platform package conversion**. This enables installing platform-specific packages (like Claude Code plugins) to any platform.
|
|
290
|
+
|
|
291
|
+
### Key Capabilities
|
|
292
|
+
|
|
293
|
+
**1. Format Detection**
|
|
294
|
+
- Automatically identifies universal vs platform-specific packages
|
|
295
|
+
- Analyzes file paths to determine source format
|
|
296
|
+
- Calculates confidence scores based on file distribution
|
|
297
|
+
|
|
298
|
+
**2. Direct Installation (AS-IS)**
|
|
299
|
+
- When source platform = target platform (e.g., Claude plugin → Claude)
|
|
300
|
+
- Files copied without transformation for maximum compatibility
|
|
301
|
+
- Fastest installation path
|
|
302
|
+
|
|
303
|
+
**3. Cross-Platform Conversion**
|
|
304
|
+
- When source platform ≠ target platform (e.g., Claude plugin → Cursor)
|
|
305
|
+
- Automatically inverts source platform flows (platform → universal)
|
|
306
|
+
- Then applies target platform flows (universal → platform)
|
|
307
|
+
- Enables full interoperability
|
|
308
|
+
|
|
309
|
+
### Example: Install Claude Plugin to Cursor
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
opkg install github:user/claude-plugin --platforms cursor
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
**What happens:**
|
|
316
|
+
1. **Detect format:** Plugin has `.claude/` directories → Claude format
|
|
317
|
+
2. **Invert Claude flows:** `.claude/commands/*.md` → `commands/*.md`
|
|
318
|
+
3. **Apply Cursor flows:** `commands/*.md` → `.cursor/commands/*.md`
|
|
319
|
+
4. **Result:** Plugin works in Cursor with proper directory structure
|
|
320
|
+
|
|
321
|
+
**See:** [Universal Converter](./universal-converter.md) for complete technical documentation.
|
|
322
|
+
|
|
323
|
+
## Use Cases
|
|
324
|
+
|
|
325
|
+
### 1. Simple File Mapping
|
|
326
|
+
Install rules that work across platforms with different extensions.
|
|
327
|
+
|
|
328
|
+
### 2. Configuration Translation
|
|
329
|
+
Convert universal config format to platform-specific schemas.
|
|
330
|
+
|
|
331
|
+
### 3. Multi-Package MCP Servers
|
|
332
|
+
Compose MCP server configurations from multiple packages without conflicts.
|
|
333
|
+
|
|
334
|
+
### 4. Agent Definition Conversion
|
|
335
|
+
Map universal agent schemas to platform-specific formats.
|
|
336
|
+
|
|
337
|
+
### 5. Cross-Platform Plugin Installation
|
|
338
|
+
Install Claude plugins to Cursor, OpenCode, or any other platform.
|
|
339
|
+
|
|
340
|
+
### 6. Custom Platform Support
|
|
341
|
+
Add flows for new/proprietary platforms via workspace overrides.
|
|
342
|
+
|
|
343
|
+
## Next Steps
|
|
344
|
+
|
|
345
|
+
- **Learn flow syntax:** See [Flows](./flows.md)
|
|
346
|
+
- **Cross-platform conversion:** See [Universal Converter](./universal-converter.md)
|
|
347
|
+
- **View examples:** See [Examples](./examples.md)
|
|
348
|
+
- **Configure platforms:** See [Configuration](./configuration.md)
|
|
349
|
+
- **Debug issues:** See [Troubleshooting](./troubleshooting.md)
|