opkg 0.5.0 → 0.6.1
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 +82 -21
- package/dist/commands/add.js +11 -276
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/duplicate.js +5 -2
- package/dist/commands/duplicate.js.map +1 -1
- package/dist/commands/init.js +76 -145
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.js +30 -671
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/list.js +9 -3
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/login.js +58 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.js +28 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/pack.js +10 -137
- package/dist/commands/pack.js.map +1 -1
- package/dist/commands/pull.js +5 -299
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.js +5 -239
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/save.js +29 -168
- package/dist/commands/save.js.map +1 -1
- package/dist/commands/show.js +18 -5
- package/dist/commands/show.js.map +1 -1
- package/dist/commands/status.js +21 -8
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/tui.js +61 -0
- package/dist/commands/tui.js.map +1 -0
- package/dist/commands/uninstall.js +5 -5
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/constants/index.js +19 -45
- package/dist/constants/index.js.map +1 -1
- package/dist/constants/workspace.js +9 -0
- package/dist/constants/workspace.js.map +1 -0
- package/dist/core/add/add-conflict-handler.js +68 -0
- package/dist/core/add/add-conflict-handler.js.map +1 -0
- package/dist/core/add/add-pipeline.js +137 -0
- package/dist/core/add/add-pipeline.js.map +1 -0
- package/dist/core/add/package-index-updater.js +66 -36
- package/dist/core/add/package-index-updater.js.map +1 -1
- package/dist/core/add/platform-path-transformer.js +47 -0
- package/dist/core/add/platform-path-transformer.js.map +1 -0
- package/dist/core/add/source-collector.js +57 -0
- package/dist/core/add/source-collector.js.map +1 -0
- package/dist/core/api-keys.js +6 -2
- package/dist/core/api-keys.js.map +1 -1
- package/dist/core/auth.js +25 -40
- package/dist/core/auth.js.map +1 -1
- package/dist/core/config.js +11 -3
- package/dist/core/config.js.map +1 -1
- package/dist/core/dependency-resolver.js +24 -11
- package/dist/core/dependency-resolver.js.map +1 -1
- package/dist/core/device-auth.js +81 -0
- package/dist/core/device-auth.js.map +1 -0
- package/dist/core/directory.js +15 -9
- package/dist/core/directory.js.map +1 -1
- package/dist/core/discovery/file-discovery.js +55 -54
- package/dist/core/discovery/file-discovery.js.map +1 -1
- package/dist/core/discovery/platform-files-discovery.js +32 -17
- package/dist/core/discovery/platform-files-discovery.js.map +1 -1
- package/dist/core/install/bulk-install-pipeline.js +200 -0
- package/dist/core/install/bulk-install-pipeline.js.map +1 -0
- package/dist/core/install/canonical-plan.js +129 -0
- package/dist/core/install/canonical-plan.js.map +1 -0
- package/dist/core/install/download-keys.js +2 -2
- package/dist/core/install/download-keys.js.map +1 -1
- package/dist/core/install/dry-run.js +2 -2
- package/dist/core/install/dry-run.js.map +1 -1
- package/dist/core/install/index.js +3 -0
- package/dist/core/install/index.js.map +1 -0
- package/dist/core/install/install-errors.js +41 -0
- package/dist/core/install/install-errors.js.map +1 -0
- package/dist/core/install/install-flow.js +8 -9
- package/dist/core/install/install-flow.js.map +1 -1
- package/dist/core/install/install-pipeline.js +296 -0
- package/dist/core/install/install-pipeline.js.map +1 -0
- package/dist/core/install/install-reporting.js +99 -0
- package/dist/core/install/install-reporting.js.map +1 -0
- package/dist/core/install/platform-resolution.js +6 -6
- package/dist/core/install/platform-resolution.js.map +1 -1
- package/dist/core/install/remote-flow.js +84 -7
- package/dist/core/install/remote-flow.js.map +1 -1
- package/dist/core/install/version-selection.js +25 -8
- package/dist/core/install/version-selection.js.map +1 -1
- package/dist/core/openpackage.js +22 -14
- package/dist/core/openpackage.js.map +1 -1
- package/dist/core/package-context.js +246 -0
- package/dist/core/package-context.js.map +1 -0
- package/dist/core/package.js +73 -9
- package/dist/core/package.js.map +1 -1
- package/dist/core/platforms.js +126 -217
- package/dist/core/platforms.js.map +1 -1
- package/dist/core/profiles.js +60 -3
- package/dist/core/profiles.js.map +1 -1
- package/dist/core/pull/pull-errors.js +62 -0
- package/dist/core/pull/pull-errors.js.map +1 -0
- package/dist/core/pull/pull-options.js +2 -0
- package/dist/core/pull/pull-options.js.map +1 -0
- package/dist/core/pull/pull-output.js +50 -0
- package/dist/core/pull/pull-output.js.map +1 -0
- package/dist/core/pull/pull-pipeline.js +141 -0
- package/dist/core/pull/pull-pipeline.js.map +1 -0
- package/dist/core/pull/pull-strategies.js +103 -0
- package/dist/core/pull/pull-strategies.js.map +1 -0
- package/dist/core/pull/pull-types.js +2 -0
- package/dist/core/pull/pull-types.js.map +1 -0
- package/dist/core/push/push-context.js +95 -0
- package/dist/core/push/push-context.js.map +1 -0
- package/dist/core/push/push-errors.js +133 -0
- package/dist/core/push/push-errors.js.map +1 -0
- package/dist/core/push/push-output.js +44 -0
- package/dist/core/push/push-output.js.map +1 -0
- package/dist/core/push/push-pipeline.js +74 -0
- package/dist/core/push/push-pipeline.js.map +1 -0
- package/dist/core/push/push-single-file.js +56 -0
- package/dist/core/push/push-single-file.js.map +1 -0
- package/dist/core/push/push-types.js +2 -0
- package/dist/core/push/push-types.js.map +1 -0
- package/dist/core/push/push-upload.js +68 -0
- package/dist/core/push/push-upload.js.map +1 -0
- package/dist/core/registry/registry-rename.js +2 -1
- package/dist/core/registry/registry-rename.js.map +1 -1
- package/dist/core/registry.js +14 -5
- package/dist/core/registry.js.map +1 -1
- package/dist/core/remote-pull.js +165 -36
- package/dist/core/remote-pull.js.map +1 -1
- package/dist/core/save/constants.js +4 -0
- package/dist/core/save/constants.js.map +1 -1
- package/dist/core/save/name-resolution.js +31 -0
- package/dist/core/save/name-resolution.js.map +1 -0
- package/dist/core/save/package-detection.js +147 -0
- package/dist/core/save/package-detection.js.map +1 -0
- package/dist/core/save/package-saver.js +82 -43
- package/dist/core/save/package-saver.js.map +1 -1
- package/dist/core/save/package-yml-generator.js +51 -71
- package/dist/core/save/package-yml-generator.js.map +1 -1
- package/dist/core/save/root-save-candidates.js.map +1 -1
- package/dist/core/save/save-candidate-loader.js +89 -0
- package/dist/core/save/save-candidate-loader.js.map +1 -0
- package/dist/core/save/save-conflict-resolution.js +72 -410
- package/dist/core/save/save-conflict-resolution.js.map +1 -1
- package/dist/core/save/save-conflict-resolver.js +277 -0
- package/dist/core/save/save-conflict-resolver.js.map +1 -0
- package/dist/core/save/save-pipeline.js +162 -0
- package/dist/core/save/save-pipeline.js.map +1 -0
- package/dist/core/save/save-single-file.js +124 -0
- package/dist/core/save/save-single-file.js.map +1 -0
- package/dist/core/save/save-types.js +2 -0
- package/dist/core/save/save-types.js.map +1 -0
- package/dist/core/save/save-yml-resolution.js +77 -39
- package/dist/core/save/save-yml-resolution.js.map +1 -1
- package/dist/core/save/workspace-rename.js +6 -6
- package/dist/core/save/workspace-rename.js.map +1 -1
- package/dist/core/scoping/package-scoping.js +14 -2
- package/dist/core/scoping/package-scoping.js.map +1 -1
- package/dist/core/status/status-file-discovery.js +12 -30
- package/dist/core/status/status-file-discovery.js.map +1 -1
- package/dist/core/sync/platform-sync.js +7 -4
- package/dist/core/sync/platform-sync.js.map +1 -1
- package/dist/core/sync/root-files-sync.js +59 -1
- package/dist/core/sync/root-files-sync.js.map +1 -1
- package/dist/core/token-store.js +73 -0
- package/dist/core/token-store.js.map +1 -0
- package/dist/core/uninstall/uninstall-file-discovery.js +1 -2
- package/dist/core/uninstall/uninstall-file-discovery.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/tui/app.js +95 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/components/package-list.js +73 -0
- package/dist/tui/components/package-list.js.map +1 -0
- package/dist/tui/controller.js +365 -0
- package/dist/tui/controller.js.map +1 -0
- package/dist/tui/index.js +12 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/services/file-index.js +64 -0
- package/dist/tui/services/file-index.js.map +1 -0
- package/dist/tui/services/packages.js +18 -0
- package/dist/tui/services/packages.js.map +1 -0
- package/dist/tui/services/save.js +21 -0
- package/dist/tui/services/save.js.map +1 -0
- package/dist/tui/state/app-state.js +15 -0
- package/dist/tui/state/app-state.js.map +1 -0
- package/dist/tui/state.js +17 -0
- package/dist/tui/state.js.map +1 -0
- package/dist/tui/types.js +2 -0
- package/dist/tui/types.js.map +1 -0
- package/dist/tui/views/add-file-modal.js +129 -0
- package/dist/tui/views/add-file-modal.js.map +1 -0
- package/dist/tui/views/file-preview.js +44 -0
- package/dist/tui/views/file-preview.js.map +1 -0
- package/dist/tui/views/list-packages.js +73 -0
- package/dist/tui/views/list-packages.js.map +1 -0
- package/dist/tui/views/main-menu.js +29 -0
- package/dist/tui/views/main-menu.js.map +1 -0
- package/dist/tui/views/manage-view.js +81 -0
- package/dist/tui/views/manage-view.js.map +1 -0
- package/dist/tui/views/package-hub.js +120 -0
- package/dist/tui/views/package-hub.js.map +1 -0
- package/dist/tui/views/placeholder.js +24 -0
- package/dist/tui/views/placeholder.js.map +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/utils/bun-bootstrap.js +72 -0
- package/dist/utils/bun-bootstrap.js.map +1 -0
- package/dist/utils/file-processing.js +5 -58
- package/dist/utils/file-processing.js.map +1 -1
- package/dist/utils/formatters.js +3 -1
- package/dist/utils/formatters.js.map +1 -1
- package/dist/utils/http-client.js +27 -5
- package/dist/utils/http-client.js.map +1 -1
- package/dist/utils/index-based-installer.js +40 -35
- package/dist/utils/index-based-installer.js.map +1 -1
- package/dist/utils/install-file-discovery.js +18 -24
- package/dist/utils/install-file-discovery.js.map +1 -1
- package/dist/utils/install-orchestrator.js +21 -21
- package/dist/utils/install-orchestrator.js.map +1 -1
- package/dist/utils/jsonc.js +44 -0
- package/dist/utils/jsonc.js.map +1 -0
- package/dist/utils/manifest-paths.js +27 -0
- package/dist/utils/manifest-paths.js.map +1 -0
- package/dist/utils/package-copy.js +199 -0
- package/dist/utils/package-copy.js.map +1 -0
- package/dist/utils/package-filters.js +125 -0
- package/dist/utils/package-filters.js.map +1 -0
- package/dist/utils/package-index-yml.js +15 -10
- package/dist/utils/package-index-yml.js.map +1 -1
- package/dist/utils/package-installation.js +4 -113
- package/dist/utils/package-installation.js.map +1 -1
- package/dist/utils/package-local-files.js +2 -35
- package/dist/utils/package-local-files.js.map +1 -1
- package/dist/utils/package-management.js +191 -75
- package/dist/utils/package-management.js.map +1 -1
- package/dist/utils/package-merge.js +48 -0
- package/dist/utils/package-merge.js.map +1 -0
- package/dist/utils/package-name.js +29 -0
- package/dist/utils/package-name.js.map +1 -1
- package/dist/utils/package-versioning.js +16 -4
- package/dist/utils/package-versioning.js.map +1 -1
- package/dist/utils/package-yml.js +41 -12
- package/dist/utils/package-yml.js.map +1 -1
- package/dist/utils/path-normalization.js +8 -53
- package/dist/utils/path-normalization.js.map +1 -1
- package/dist/utils/paths.js +17 -9
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/platform-file.js +16 -59
- package/dist/utils/platform-file.js.map +1 -1
- package/dist/utils/platform-mapper.js +29 -41
- package/dist/utils/platform-mapper.js.map +1 -1
- package/dist/utils/platform-specific-paths.js.map +1 -1
- package/dist/utils/platform-utils.js +28 -139
- package/dist/utils/platform-utils.js.map +1 -1
- package/dist/utils/platform-yaml-merge.js +13 -6
- package/dist/utils/platform-yaml-merge.js.map +1 -1
- package/dist/utils/prompts.js +0 -31
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/registry-entry-filter.js +38 -24
- package/dist/utils/registry-entry-filter.js.map +1 -1
- package/dist/utils/registry-paths.js +48 -0
- package/dist/utils/registry-paths.js.map +1 -0
- package/dist/utils/root-file-installer.js +19 -0
- package/dist/utils/root-file-installer.js.map +1 -1
- package/dist/utils/root-file-registry.js.map +1 -1
- package/dist/utils/tarball.js +6 -2
- package/dist/utils/tarball.js.map +1 -1
- package/dist/utils/version-ranges.js +11 -8
- package/dist/utils/version-ranges.js.map +1 -1
- package/package.json +3 -2
- package/platforms.jsonc +178 -0
- package/specs/auth/auth-device-flow.md +70 -0
- package/specs/install/install-behavior.md +30 -0
- package/specs/install/package-yml-canonical.md +21 -1
- package/specs/install/version-resolution.md +9 -7
- package/specs/login/login-device-flow.md +70 -0
- package/specs/package/README.md +60 -0
- package/specs/package/nested-packages-and-parent-packages.md +79 -0
- package/specs/package/package-index-yml.md +171 -0
- package/specs/package/package-root-layout.md +78 -0
- package/specs/package/registry-payload-and-copy.md +77 -0
- package/specs/package/universal-content.md +144 -0
- package/specs/platforms.md +193 -0
- package/specs/push/push-behavior.md +38 -10
- package/specs/push/push-errors-and-hints.md +19 -6
- package/specs/push/push-remote-upload.md +3 -0
- package/specs/push/push-scoping.md +14 -22
- package/specs/push/push-version-selection.md +18 -16
- package/specs/save/README.md +40 -0
- package/specs/save/save-conflict-resolution.md +146 -0
- package/specs/save/save-file-discovery.md +101 -0
- package/specs/save/save-frontmatter-overrides.md +81 -0
- package/specs/save/save-modes-inputs.md +55 -0
- package/specs/save/save-naming-scoping.md +93 -0
- package/specs/save/save-package-detection.md +60 -0
- package/specs/save/save-registry-sync.md +126 -0
- package/specs/save-pack.md +1 -0
- package/dist/commands/release.js +0 -33
- package/dist/commands/release.js.map +0 -1
- package/dist/commands/tag.js +0 -311
- package/dist/commands/tag.js.map +0 -1
- package/dist/commands/update.js +0 -30
- package/dist/commands/update.js.map +0 -1
- package/dist/core/add/formula-index-updater.js +0 -290
- package/dist/core/add/formula-index-updater.js.map +0 -1
- package/dist/core/discovery/ai-files-discovery.js +0 -2
- package/dist/core/discovery/ai-files-discovery.js.map +0 -1
- package/dist/core/discovery/formula-files-discovery.js +0 -14
- package/dist/core/discovery/formula-files-discovery.js.map +0 -1
- package/dist/core/discovery/index-files-discovery.js +0 -91
- package/dist/core/discovery/index-files-discovery.js.map +0 -1
- package/dist/core/discovery/md-files-discovery.js +0 -82
- package/dist/core/discovery/md-files-discovery.js.map +0 -1
- package/dist/core/discovery/package-files-discovery.js +0 -14
- package/dist/core/discovery/package-files-discovery.js.map +0 -1
- package/dist/core/discovery/platform-discovery.js +0 -84
- package/dist/core/discovery/platform-discovery.js.map +0 -1
- package/dist/core/discovery/root-files-discovery.js +0 -2
- package/dist/core/discovery/root-files-discovery.js.map +0 -1
- package/dist/core/formula.js +0 -170
- package/dist/core/formula.js.map +0 -1
- package/dist/core/git-registry.js +0 -46
- package/dist/core/git-registry.js.map +0 -1
- package/dist/core/groundzero.js +0 -277
- package/dist/core/groundzero.js.map +0 -1
- package/dist/core/install/scenario.js +0 -11
- package/dist/core/install/scenario.js.map +0 -1
- package/dist/core/package-sync.js +0 -219
- package/dist/core/package-sync.js.map +0 -1
- package/dist/core/save/formula-file-generator.js +0 -167
- package/dist/core/save/formula-file-generator.js.map +0 -1
- package/dist/core/save/formula-saver.js +0 -52
- package/dist/core/save/formula-saver.js.map +0 -1
- package/dist/core/save/formula-yml-generator.js +0 -89
- package/dist/core/save/formula-yml-generator.js.map +0 -1
- package/dist/core/save/formula-yml-versioning.js +0 -108
- package/dist/core/save/formula-yml-versioning.js.map +0 -1
- package/dist/core/save/generic-file-sync.js +0 -38
- package/dist/core/save/generic-file-sync.js.map +0 -1
- package/dist/core/save/md-files-sync.js +0 -33
- package/dist/core/save/md-files-sync.js.map +0 -1
- package/dist/core/save/package-yml-versioning.js +0 -108
- package/dist/core/save/package-yml-versioning.js.map +0 -1
- package/dist/core/save/platform-sync.js +0 -95
- package/dist/core/save/platform-sync.js.map +0 -1
- package/dist/core/save/root-files-sync.js +0 -140
- package/dist/core/save/root-files-sync.js.map +0 -1
- package/dist/core/save/save-candidate-types.js +0 -2
- package/dist/core/save/save-candidate-types.js.map +0 -1
- package/dist/core/save/save-conflict-types.js +0 -2
- package/dist/core/save/save-conflict-types.js.map +0 -1
- package/dist/core/save/save-file-discovery.js +0 -5
- package/dist/core/save/save-file-discovery.js.map +0 -1
- package/dist/core/status-file-discovery.js +0 -175
- package/dist/core/status-file-discovery.js.map +0 -1
- package/dist/utils/discovery/file-processing.js +0 -156
- package/dist/utils/discovery/file-processing.js.map +0 -1
- package/dist/utils/discovery/formula-discovery.js +0 -211
- package/dist/utils/discovery/formula-discovery.js.map +0 -1
- package/dist/utils/discovery/platform-discovery.js +0 -2
- package/dist/utils/discovery/platform-discovery.js.map +0 -1
- package/dist/utils/formula-discovery.js +0 -102
- package/dist/utils/formula-discovery.js.map +0 -1
- package/dist/utils/formula-index-yml.js +0 -122
- package/dist/utils/formula-index-yml.js.map +0 -1
- package/dist/utils/formula-installation.js +0 -110
- package/dist/utils/formula-installation.js.map +0 -1
- package/dist/utils/formula-local-files.js +0 -38
- package/dist/utils/formula-local-files.js.map +0 -1
- package/dist/utils/formula-management.js +0 -191
- package/dist/utils/formula-management.js.map +0 -1
- package/dist/utils/formula-name.js +0 -97
- package/dist/utils/formula-name.js.map +0 -1
- package/dist/utils/formula-versioning.js +0 -109
- package/dist/utils/formula-versioning.js.map +0 -1
- package/dist/utils/formula-yml.js +0 -82
- package/dist/utils/formula-yml.js.map +0 -1
- package/dist/utils/git.js +0 -54
- package/dist/utils/git.js.map +0 -1
- package/dist/utils/id-based-discovery.js +0 -126
- package/dist/utils/id-based-discovery.js.map +0 -1
- package/dist/utils/id-based-installer.js +0 -249
- package/dist/utils/id-based-installer.js.map +0 -1
- package/dist/utils/index-yml-based-installer.js +0 -375
- package/dist/utils/index-yml-based-installer.js.map +0 -1
- package/dist/utils/index-yml.js +0 -124
- package/dist/utils/index-yml.js.map +0 -1
- package/dist/utils/md-frontmatter.js +0 -3
- package/dist/utils/md-frontmatter.js.map +0 -1
- package/dist/utils/package-link-yml.js +0 -92
- package/dist/utils/package-link-yml.js.map +0 -1
- package/dist/utils/platform-discovery.js +0 -2
- package/dist/utils/platform-discovery.js.map +0 -1
- package/dist/utils/platform-frontmatter-split.js +0 -15
- package/dist/utils/platform-frontmatter-split.js.map +0 -1
- package/dist/utils/timestamp-encoder.js +0 -13
- package/dist/utils/timestamp-encoder.js.map +0 -1
- package/dist/utils/wip-versioning.js +0 -24
- package/dist/utils/wip-versioning.js.map +0 -1
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { BoxRenderable, InputRenderable, InputRenderableEvents, SelectRenderable, SelectRenderableEvents, TextRenderable, } from '@opentui/core';
|
|
2
|
+
export function createAddFileModalView(renderer) {
|
|
3
|
+
const container = new BoxRenderable(renderer, {
|
|
4
|
+
id: 'opkg-add-file-modal',
|
|
5
|
+
width: '100%',
|
|
6
|
+
height: '100%',
|
|
7
|
+
flexDirection: 'column',
|
|
8
|
+
gap: 1,
|
|
9
|
+
visible: false,
|
|
10
|
+
});
|
|
11
|
+
const title = new TextRenderable(renderer, {
|
|
12
|
+
id: 'opkg-add-file-title',
|
|
13
|
+
content: 'Add file to package',
|
|
14
|
+
fg: '#bbbbbb',
|
|
15
|
+
});
|
|
16
|
+
const status = new TextRenderable(renderer, {
|
|
17
|
+
id: 'opkg-add-file-status',
|
|
18
|
+
content: 'Type to search. Enter to add. Esc/b to cancel.',
|
|
19
|
+
fg: '#888888',
|
|
20
|
+
});
|
|
21
|
+
const input = new InputRenderable(renderer, {
|
|
22
|
+
id: 'opkg-add-file-input',
|
|
23
|
+
width: '100%',
|
|
24
|
+
placeholder: 'Search file path...',
|
|
25
|
+
});
|
|
26
|
+
const results = new SelectRenderable(renderer, {
|
|
27
|
+
id: 'opkg-add-file-results',
|
|
28
|
+
width: '100%',
|
|
29
|
+
height: 12,
|
|
30
|
+
showScrollIndicator: true,
|
|
31
|
+
showDescription: false,
|
|
32
|
+
wrapSelection: false,
|
|
33
|
+
options: [],
|
|
34
|
+
});
|
|
35
|
+
container.add(title);
|
|
36
|
+
container.add(status);
|
|
37
|
+
container.add(input);
|
|
38
|
+
container.add(results);
|
|
39
|
+
container.add(new TextRenderable(renderer, {
|
|
40
|
+
id: 'opkg-add-file-hint',
|
|
41
|
+
content: 'Enter=add, Esc/b=cancel, ↑/↓ to navigate matches.',
|
|
42
|
+
fg: '#888888',
|
|
43
|
+
}));
|
|
44
|
+
let onQueryChangeCb = null;
|
|
45
|
+
let onSelectionChangeCb = null;
|
|
46
|
+
let onConfirmCb = null;
|
|
47
|
+
let suppressSelectionNotify = false;
|
|
48
|
+
const getSelectedPath = () => {
|
|
49
|
+
const opt = results.getSelectedOption();
|
|
50
|
+
return opt?.value ?? null;
|
|
51
|
+
};
|
|
52
|
+
input.on(InputRenderableEvents.INPUT, (value) => {
|
|
53
|
+
onQueryChangeCb?.(value ?? '');
|
|
54
|
+
});
|
|
55
|
+
input.on(InputRenderableEvents.ENTER, () => {
|
|
56
|
+
onConfirmCb?.(getSelectedPath());
|
|
57
|
+
});
|
|
58
|
+
results.on(SelectRenderableEvents.SELECTION_CHANGED, () => {
|
|
59
|
+
if (suppressSelectionNotify)
|
|
60
|
+
return;
|
|
61
|
+
onSelectionChangeCb?.(getSelectedPath());
|
|
62
|
+
});
|
|
63
|
+
results.on(SelectRenderableEvents.ITEM_SELECTED, () => {
|
|
64
|
+
onConfirmCb?.(getSelectedPath());
|
|
65
|
+
});
|
|
66
|
+
const setResults = (items) => {
|
|
67
|
+
if (!items.length) {
|
|
68
|
+
results.options = [];
|
|
69
|
+
status.content = 'No matches.';
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
results.options = items.map((item) => ({
|
|
73
|
+
name: item.display,
|
|
74
|
+
description: '',
|
|
75
|
+
value: item.value,
|
|
76
|
+
}));
|
|
77
|
+
suppressSelectionNotify = true;
|
|
78
|
+
results.setSelectedIndex(0);
|
|
79
|
+
suppressSelectionNotify = false;
|
|
80
|
+
onSelectionChangeCb?.(getSelectedPath());
|
|
81
|
+
status.content = `Matches: ${items.length}. Enter=add, Esc/b=cancel.`;
|
|
82
|
+
};
|
|
83
|
+
return {
|
|
84
|
+
container,
|
|
85
|
+
setLoading: (message = 'Indexing files...') => {
|
|
86
|
+
status.content = message;
|
|
87
|
+
},
|
|
88
|
+
setStatus: (message) => {
|
|
89
|
+
status.content = message;
|
|
90
|
+
},
|
|
91
|
+
setResults,
|
|
92
|
+
setPreview: () => {
|
|
93
|
+
// no-op (preview removed)
|
|
94
|
+
},
|
|
95
|
+
setQuery: (value) => {
|
|
96
|
+
input.value = value;
|
|
97
|
+
},
|
|
98
|
+
getQuery: () => input.value ?? '',
|
|
99
|
+
getSelectedPath,
|
|
100
|
+
focusSearch: () => {
|
|
101
|
+
input.focus();
|
|
102
|
+
},
|
|
103
|
+
moveSelection: (delta) => {
|
|
104
|
+
if (delta < 0) {
|
|
105
|
+
results.moveUp(Math.abs(delta));
|
|
106
|
+
}
|
|
107
|
+
else if (delta > 0) {
|
|
108
|
+
results.moveDown(delta);
|
|
109
|
+
}
|
|
110
|
+
onSelectionChangeCb?.(getSelectedPath());
|
|
111
|
+
},
|
|
112
|
+
onQueryChange: (cb) => {
|
|
113
|
+
onQueryChangeCb = cb;
|
|
114
|
+
},
|
|
115
|
+
onSelectionChange: (cb) => {
|
|
116
|
+
onSelectionChangeCb = cb;
|
|
117
|
+
},
|
|
118
|
+
onConfirm: (cb) => {
|
|
119
|
+
onConfirmCb = cb;
|
|
120
|
+
},
|
|
121
|
+
show: () => {
|
|
122
|
+
container.visible = true;
|
|
123
|
+
},
|
|
124
|
+
hide: () => {
|
|
125
|
+
container.visible = false;
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=add-file-modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-file-modal.js","sourceRoot":"","sources":["../../../src/tui/views/add-file-modal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { BoxRenderable, TextRenderable } from '@opentui/core';
|
|
2
|
+
export function createFilePreviewView(renderer) {
|
|
3
|
+
const container = new BoxRenderable(renderer, {
|
|
4
|
+
id: 'opkg-file-preview',
|
|
5
|
+
width: '100%',
|
|
6
|
+
height: '100%',
|
|
7
|
+
flexDirection: 'column',
|
|
8
|
+
gap: 1,
|
|
9
|
+
visible: false,
|
|
10
|
+
});
|
|
11
|
+
const title = new TextRenderable(renderer, {
|
|
12
|
+
id: 'opkg-file-preview-title',
|
|
13
|
+
content: 'Preview',
|
|
14
|
+
fg: '#bbbbbb',
|
|
15
|
+
});
|
|
16
|
+
const body = new TextRenderable(renderer, {
|
|
17
|
+
id: 'opkg-file-preview-body',
|
|
18
|
+
content: '',
|
|
19
|
+
fg: '#aaaaaa',
|
|
20
|
+
});
|
|
21
|
+
const hint = new TextRenderable(renderer, {
|
|
22
|
+
id: 'opkg-file-preview-hint',
|
|
23
|
+
content: 'b/Esc to go back.',
|
|
24
|
+
fg: '#888888',
|
|
25
|
+
});
|
|
26
|
+
container.add(title);
|
|
27
|
+
container.add(body);
|
|
28
|
+
container.add(hint);
|
|
29
|
+
return {
|
|
30
|
+
container,
|
|
31
|
+
setContent: (newTitle, newBody) => {
|
|
32
|
+
title.content = newTitle;
|
|
33
|
+
body.content = newBody;
|
|
34
|
+
},
|
|
35
|
+
show: () => {
|
|
36
|
+
container.visible = true;
|
|
37
|
+
},
|
|
38
|
+
hide: () => {
|
|
39
|
+
container.visible = false;
|
|
40
|
+
},
|
|
41
|
+
isVisible: () => container.visible ?? false,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=file-preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-preview.js","sourceRoot":"","sources":["../../../src/tui/views/file-preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG9D,MAAM,UAAU,qBAAqB,CAAC,QAAa;IAClD,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,QAAQ,EAAE;QAC7C,EAAE,EAAE,mBAAmB;QACvB,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,aAAa,EAAE,QAAQ;QACvB,GAAG,EAAE,CAAC;QACN,OAAO,EAAE,KAAK;KACd,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,QAAQ,EAAE;QAC1C,EAAE,EAAE,yBAAyB;QAC7B,OAAO,EAAE,SAAS;QAClB,EAAE,EAAE,SAAS;KACb,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,IAAI,cAAc,CAAC,QAAQ,EAAE;QACzC,EAAE,EAAE,wBAAwB;QAC5B,OAAO,EAAE,EAAE;QACX,EAAE,EAAE,SAAS;KACb,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,IAAI,cAAc,CAAC,QAAQ,EAAE;QACzC,EAAE,EAAE,wBAAwB;QAC5B,OAAO,EAAE,mBAAmB;QAC5B,EAAE,EAAE,SAAS;KACb,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrB,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAEpB,OAAO;QACN,SAAS;QACT,UAAU,EAAE,CAAC,QAAgB,EAAE,OAAe,EAAE,EAAE;YACjD,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACxB,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YACV,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YACV,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;QAC3B,CAAC;QACD,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,IAAI,KAAK;KAC3C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { BoxRenderable, SelectRenderable, SelectRenderableEvents, TextRenderable, } from '@opentui/core';
|
|
2
|
+
export function createListPackagesView(renderer) {
|
|
3
|
+
const container = new BoxRenderable(renderer, {
|
|
4
|
+
id: 'opkg-list-packages',
|
|
5
|
+
width: '100%',
|
|
6
|
+
height: '100%',
|
|
7
|
+
flexDirection: 'column',
|
|
8
|
+
gap: 1,
|
|
9
|
+
});
|
|
10
|
+
const title = new TextRenderable(renderer, {
|
|
11
|
+
id: 'opkg-list-title',
|
|
12
|
+
content: 'List Local Packages',
|
|
13
|
+
fg: '#bbbbbb',
|
|
14
|
+
});
|
|
15
|
+
const status = new TextRenderable(renderer, {
|
|
16
|
+
id: 'opkg-list-status',
|
|
17
|
+
content: 'Loading packages...',
|
|
18
|
+
fg: '#888888',
|
|
19
|
+
});
|
|
20
|
+
const select = new SelectRenderable(renderer, {
|
|
21
|
+
id: 'opkg-list-select',
|
|
22
|
+
width: '100%',
|
|
23
|
+
height: 12,
|
|
24
|
+
options: [],
|
|
25
|
+
showDescription: true,
|
|
26
|
+
showScrollIndicator: true,
|
|
27
|
+
});
|
|
28
|
+
let onSelect = null;
|
|
29
|
+
select.on(SelectRenderableEvents.ITEM_SELECTED, (_idx, option) => {
|
|
30
|
+
if (option?.value && onSelect) {
|
|
31
|
+
onSelect(option.value);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
container.add(title);
|
|
35
|
+
container.add(status);
|
|
36
|
+
container.add(select);
|
|
37
|
+
const setPackages = (pkgs) => {
|
|
38
|
+
if (!pkgs.length) {
|
|
39
|
+
select.options = [];
|
|
40
|
+
status.content = 'No packages found. Use "opkg init" or save/pack first.';
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
select.options = pkgs.map((pkg) => ({
|
|
44
|
+
name: `${pkg.name}@${pkg.version}`,
|
|
45
|
+
description: pkg.description ?? '',
|
|
46
|
+
value: pkg,
|
|
47
|
+
}));
|
|
48
|
+
status.content = 'Select a package (Enter). Press b/Esc to return.';
|
|
49
|
+
};
|
|
50
|
+
const setLoading = (message = 'Loading packages...') => {
|
|
51
|
+
status.content = message;
|
|
52
|
+
};
|
|
53
|
+
const setError = (message) => {
|
|
54
|
+
status.content = message;
|
|
55
|
+
select.options = [];
|
|
56
|
+
};
|
|
57
|
+
const setOnSelect = (cb) => {
|
|
58
|
+
onSelect = cb;
|
|
59
|
+
};
|
|
60
|
+
const focus = () => {
|
|
61
|
+
select.focus();
|
|
62
|
+
};
|
|
63
|
+
return {
|
|
64
|
+
container,
|
|
65
|
+
select,
|
|
66
|
+
setPackages,
|
|
67
|
+
setLoading,
|
|
68
|
+
setError,
|
|
69
|
+
setOnSelect,
|
|
70
|
+
focus,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=list-packages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-packages.js","sourceRoot":"","sources":["../../../src/tui/views/list-packages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { BoxRenderable, SelectRenderable, TextRenderable } from '@opentui/core';
|
|
2
|
+
export function createMainMenu(renderer) {
|
|
3
|
+
const mainMenuContainer = new BoxRenderable(renderer, {
|
|
4
|
+
id: 'opkg-main-menu',
|
|
5
|
+
width: '100%',
|
|
6
|
+
height: '100%',
|
|
7
|
+
flexDirection: 'column',
|
|
8
|
+
gap: 1,
|
|
9
|
+
});
|
|
10
|
+
const title = new TextRenderable(renderer, {
|
|
11
|
+
id: 'opkg-main-menu-title',
|
|
12
|
+
content: 'Select an action',
|
|
13
|
+
fg: '#bbbbbb',
|
|
14
|
+
});
|
|
15
|
+
const mainMenuSelect = new SelectRenderable(renderer, {
|
|
16
|
+
id: 'opkg-main-menu-select',
|
|
17
|
+
width: '100%',
|
|
18
|
+
height: 8,
|
|
19
|
+
options: [
|
|
20
|
+
{ name: 'Add / Update Package', description: 'Create package, add files, save/pack', value: 'add-update' },
|
|
21
|
+
{ name: 'List Local Packages', description: 'View packages in local registry', value: 'list' },
|
|
22
|
+
{ name: 'Exit', description: 'Quit the TUI', value: 'exit' },
|
|
23
|
+
],
|
|
24
|
+
});
|
|
25
|
+
mainMenuContainer.add(title);
|
|
26
|
+
mainMenuContainer.add(mainMenuSelect);
|
|
27
|
+
return { mainMenuContainer, mainMenuSelect };
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=main-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main-menu.js","sourceRoot":"","sources":["../../../src/tui/views/main-menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEhF,MAAM,UAAU,cAAc,CAAC,QAAa;IAC3C,MAAM,iBAAiB,GAAG,IAAI,aAAa,CAAC,QAAQ,EAAE;QACrD,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,aAAa,EAAE,QAAQ;QACvB,GAAG,EAAE,CAAC;KACN,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,QAAQ,EAAE;QAC1C,EAAE,EAAE,sBAAsB;QAC1B,OAAO,EAAE,kBAAkB;QAC3B,EAAE,EAAE,SAAS;KACb,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,IAAI,gBAAgB,CAAC,QAAQ,EAAE;QACrD,EAAE,EAAE,uBAAuB;QAC3B,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,CAAC;QACT,OAAO,EAAE;YACR,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,sCAAsC,EAAE,KAAK,EAAE,YAAY,EAAE;YAC1G,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,iCAAiC,EAAE,KAAK,EAAE,MAAM,EAAE;YAC9F,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE;SAC5D;KACD,CAAC,CAAC;IAEH,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7B,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACtC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import blessed from 'blessed';
|
|
2
|
+
export function createManageView(state, screen, pkg, // RegistryEntry or Package
|
|
3
|
+
onBack, onAddFile, onSave) {
|
|
4
|
+
const manageBox = blessed.box({
|
|
5
|
+
label: ` Manage Package: ${pkg.name || 'New'}@${pkg.version || 'wip'} `,
|
|
6
|
+
border: 'line',
|
|
7
|
+
style: {
|
|
8
|
+
bg: 'black',
|
|
9
|
+
fg: 'white',
|
|
10
|
+
border: {
|
|
11
|
+
fg: 'yellow'
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
width: 80,
|
|
15
|
+
height: '80%',
|
|
16
|
+
top: 2,
|
|
17
|
+
left: 'center',
|
|
18
|
+
scrollable: true,
|
|
19
|
+
mouse: true,
|
|
20
|
+
keys: true
|
|
21
|
+
});
|
|
22
|
+
screen.append(manageBox);
|
|
23
|
+
// Stub package info
|
|
24
|
+
const infoText = blessed.text({
|
|
25
|
+
content: `Description: ${pkg.description || 'No desc'}\nPlatform: ${pkg.platform || 'universal'}\nStatus: ${state.dirty ? 'Unsaved changes' : 'Saved'}`,
|
|
26
|
+
tags: true,
|
|
27
|
+
style: { fg: 'gray' }
|
|
28
|
+
});
|
|
29
|
+
manageBox.append(infoText);
|
|
30
|
+
// Stub file list (Phase 3: Use discoverPackageFiles())
|
|
31
|
+
const fileList = blessed.list({
|
|
32
|
+
label: ' Files (Phase 3: Real list from discoverPackageFiles) ',
|
|
33
|
+
border: 'line',
|
|
34
|
+
items: ['example-file1.ts', 'package.yml', '➕ Add File (Phase 3)', '← Back'],
|
|
35
|
+
top: 5,
|
|
36
|
+
width: '100%',
|
|
37
|
+
height: 10,
|
|
38
|
+
style: { selected: { bg: 'magenta' } },
|
|
39
|
+
keys: true,
|
|
40
|
+
mouse: true,
|
|
41
|
+
vi: true
|
|
42
|
+
});
|
|
43
|
+
manageBox.append(fileList);
|
|
44
|
+
fileList.on('select', (item, idx) => {
|
|
45
|
+
const selected = fileList.getItem(idx).getText();
|
|
46
|
+
if (selected === '← Back') {
|
|
47
|
+
onBack();
|
|
48
|
+
manageBox.detach();
|
|
49
|
+
screen.render();
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
else if (selected === '➕ Add File (Phase 3)') {
|
|
53
|
+
onAddFile();
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
screen.log(`Phase 3 TODO: View file content for ${selected}`);
|
|
57
|
+
});
|
|
58
|
+
// Bottom actions
|
|
59
|
+
const actionsBox = blessed.box({
|
|
60
|
+
label: ' Actions ',
|
|
61
|
+
border: 'line',
|
|
62
|
+
bottom: 0,
|
|
63
|
+
width: '100%',
|
|
64
|
+
height: 3,
|
|
65
|
+
style: { bg: 'black', fg: 'green' },
|
|
66
|
+
content: '{green-fg}💾 Save (calls save-pipeline) 📦 Pack (calls pack logic) Esc: Back{/}'
|
|
67
|
+
});
|
|
68
|
+
manageBox.append(actionsBox);
|
|
69
|
+
// Stub action keys
|
|
70
|
+
manageBox.key(['s'], () => {
|
|
71
|
+
onSave();
|
|
72
|
+
screen.log('Phase 3 TODO: Run save-pipeline for upsert');
|
|
73
|
+
});
|
|
74
|
+
manageBox.key(['p'], () => {
|
|
75
|
+
screen.log('Phase 3 TODO: Run pack for tarball');
|
|
76
|
+
});
|
|
77
|
+
fileList.focus();
|
|
78
|
+
screen.render();
|
|
79
|
+
return manageBox;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=manage-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manage-view.js","sourceRoot":"","sources":["../../../src/tui/views/manage-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { BoxRenderable, SelectRenderable, SelectRenderableEvents, TextRenderable } from '@opentui/core';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
export function createPackageHubView(renderer) {
|
|
4
|
+
const container = new BoxRenderable(renderer, {
|
|
5
|
+
id: 'opkg-package-hub',
|
|
6
|
+
width: '100%',
|
|
7
|
+
height: '100%',
|
|
8
|
+
flexDirection: 'column',
|
|
9
|
+
gap: 1,
|
|
10
|
+
});
|
|
11
|
+
const title = new TextRenderable(renderer, {
|
|
12
|
+
id: 'opkg-package-hub-title',
|
|
13
|
+
content: 'Add/Update Package',
|
|
14
|
+
fg: '#bbbbbb',
|
|
15
|
+
});
|
|
16
|
+
const packageName = new TextRenderable(renderer, {
|
|
17
|
+
id: 'opkg-package-hub-package',
|
|
18
|
+
content: 'Package: (none selected)',
|
|
19
|
+
fg: '#cccccc',
|
|
20
|
+
});
|
|
21
|
+
const status = new TextRenderable(renderer, {
|
|
22
|
+
id: 'opkg-package-hub-status',
|
|
23
|
+
content: 'No package selected. Choose one from list or create new.',
|
|
24
|
+
fg: '#888888',
|
|
25
|
+
});
|
|
26
|
+
const filesSelect = new SelectRenderable(renderer, {
|
|
27
|
+
id: 'opkg-package-hub-files-select',
|
|
28
|
+
width: '100%',
|
|
29
|
+
height: 12,
|
|
30
|
+
showScrollIndicator: true,
|
|
31
|
+
showDescription: false,
|
|
32
|
+
wrapSelection: false,
|
|
33
|
+
options: [],
|
|
34
|
+
});
|
|
35
|
+
container.add(title);
|
|
36
|
+
container.add(packageName);
|
|
37
|
+
container.add(status);
|
|
38
|
+
container.add(filesSelect);
|
|
39
|
+
let infoLines = [
|
|
40
|
+
'a=add file (planned), Enter=preview, Del=remove, s=save, k=pack, b/Esc=back.',
|
|
41
|
+
];
|
|
42
|
+
const infoRenderables = [];
|
|
43
|
+
const renderInfo = () => {
|
|
44
|
+
// ensure we have renderables for each line
|
|
45
|
+
for (let i = infoRenderables.length; i < infoLines.length; i += 1) {
|
|
46
|
+
const r = new TextRenderable(renderer, {
|
|
47
|
+
id: `opkg-package-hub-line-${i}`,
|
|
48
|
+
content: '',
|
|
49
|
+
fg: '#888888',
|
|
50
|
+
});
|
|
51
|
+
infoRenderables.push(r);
|
|
52
|
+
container.add(r);
|
|
53
|
+
}
|
|
54
|
+
infoRenderables.forEach((r, idx) => {
|
|
55
|
+
if (idx < infoLines.length) {
|
|
56
|
+
r.content = infoLines[idx];
|
|
57
|
+
r.visible = true;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
r.visible = false;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
renderInfo();
|
|
65
|
+
let onEnter = null;
|
|
66
|
+
filesSelect.on(SelectRenderableEvents.ITEM_SELECTED, () => {
|
|
67
|
+
onEnter?.();
|
|
68
|
+
});
|
|
69
|
+
return {
|
|
70
|
+
container,
|
|
71
|
+
setPackageName: (name) => {
|
|
72
|
+
packageName.content = name ? `Package: ${name}` : 'Package: (none selected)';
|
|
73
|
+
},
|
|
74
|
+
setFiles: (paths) => {
|
|
75
|
+
if (!paths.length) {
|
|
76
|
+
filesSelect.options = [];
|
|
77
|
+
status.content = 'No files found in package.';
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const cwd = process.cwd();
|
|
81
|
+
filesSelect.options = paths.map((p) => {
|
|
82
|
+
const display = p.startsWith('/') || p.match(/^[A-Za-z]:[\\/]/)
|
|
83
|
+
? relativeSafe(cwd, p)
|
|
84
|
+
: p;
|
|
85
|
+
return {
|
|
86
|
+
name: display,
|
|
87
|
+
description: '',
|
|
88
|
+
value: p,
|
|
89
|
+
};
|
|
90
|
+
});
|
|
91
|
+
status.content = `Files (${paths.length}). Enter=preview, Del=remove.`;
|
|
92
|
+
},
|
|
93
|
+
setStatus: (message) => {
|
|
94
|
+
status.content = message;
|
|
95
|
+
},
|
|
96
|
+
getSelectedFile: () => {
|
|
97
|
+
const opt = filesSelect.getSelectedOption();
|
|
98
|
+
return opt?.value ?? null;
|
|
99
|
+
},
|
|
100
|
+
focusFiles: () => {
|
|
101
|
+
filesSelect.focus();
|
|
102
|
+
},
|
|
103
|
+
setEmptyState: (message) => {
|
|
104
|
+
status.content = message;
|
|
105
|
+
filesSelect.options = [];
|
|
106
|
+
},
|
|
107
|
+
setInfoLines: (lines) => {
|
|
108
|
+
infoLines = lines;
|
|
109
|
+
renderInfo();
|
|
110
|
+
},
|
|
111
|
+
onFileEnter: (cb) => {
|
|
112
|
+
onEnter = cb;
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function relativeSafe(cwd, target) {
|
|
117
|
+
const rel = path.relative(cwd, target);
|
|
118
|
+
return rel === '' ? '.' : rel;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=package-hub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-hub.js","sourceRoot":"","sources":["../../../src/tui/views/package-hub.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { BoxRenderable, TextRenderable } from '@opentui/core';
|
|
2
|
+
export function createPlaceholderView(renderer, opts) {
|
|
3
|
+
const container = new BoxRenderable(renderer, {
|
|
4
|
+
id: opts.id,
|
|
5
|
+
width: '100%',
|
|
6
|
+
height: '100%',
|
|
7
|
+
flexDirection: 'column',
|
|
8
|
+
gap: 1,
|
|
9
|
+
});
|
|
10
|
+
container.add(new TextRenderable(renderer, {
|
|
11
|
+
id: `${opts.id}-title`,
|
|
12
|
+
content: opts.title,
|
|
13
|
+
fg: '#bbbbbb',
|
|
14
|
+
}));
|
|
15
|
+
opts.lines.forEach((line, idx) => {
|
|
16
|
+
container.add(new TextRenderable(renderer, {
|
|
17
|
+
id: `${opts.id}-line-${idx}`,
|
|
18
|
+
content: line,
|
|
19
|
+
fg: '#888888',
|
|
20
|
+
}));
|
|
21
|
+
});
|
|
22
|
+
return container;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=placeholder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placeholder.js","sourceRoot":"","sources":["../../../src/tui/views/placeholder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,UAAU,qBAAqB,CACpC,QAAa,EACb,IAAoD;IAEpD,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,QAAQ,EAAE;QAC7C,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,aAAa,EAAE,QAAQ;QACvB,GAAG,EAAE,CAAC;KACN,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,QAAQ,EAAE;QAC1C,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,QAAQ;QACtB,OAAO,EAAE,IAAI,CAAC,KAAK;QACnB,EAAE,EAAE,SAAS;KACb,CAAC,CAAC,CAAC;IAEJ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAChC,SAAS,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,QAAQ,EAAE;YAC1C,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,SAAS,GAAG,EAAE;YAC5B,OAAO,EAAE,IAAI;YACb,EAAE,EAAE,SAAS;SACb,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AAClB,CAAC"}
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwNH,cAAc;AACd,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAIzC,YAAY,OAAe,EAAE,IAAY,EAAE,OAAa;QACtD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,CAAN,IAAY,UAUX;AAVD,WAAY,UAAU;IACpB,qDAAuC,CAAA;IACvC,+DAAiD,CAAA;IACjD,iDAAmC,CAAA;IACnC,+CAAiC,CAAA;IACjC,6CAA+B,CAAA;IAC/B,qDAAuC,CAAA;IACvC,mDAAqC,CAAA;IACrC,mDAAqC,CAAA;IACrC,2CAA6B,CAAA;AAC/B,CAAC,EAVW,UAAU,KAAV,UAAU,QAUrB;AAED,eAAe;AACf,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,2BAAe,CAAA;IACf,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,2BAAe,CAAA;AACjB,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { existsSync, mkdirSync } from 'node:fs';
|
|
3
|
+
import { chmod } from 'node:fs/promises';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import os from 'node:os';
|
|
6
|
+
import { logger } from './logger.js';
|
|
7
|
+
const DEFAULT_INSTALL_DIR = join(os.homedir(), '.opkg', 'bun');
|
|
8
|
+
const DEFAULT_BUN_HOME = join(os.homedir(), '.bun'); // bun installer fallback
|
|
9
|
+
const BUN_BIN_NAME = process.platform === 'win32' ? 'bun.exe' : 'bun';
|
|
10
|
+
/**
|
|
11
|
+
* Ensures a Bun binary is available. If Bun is not present on the system,
|
|
12
|
+
* downloads it into a cached directory (DEFAULT_INSTALL_DIR) using the
|
|
13
|
+
* official install script. Returns the path to the Bun executable.
|
|
14
|
+
*/
|
|
15
|
+
export async function ensureBunBinary() {
|
|
16
|
+
// 1) Respect explicit override
|
|
17
|
+
const envOverride = process.env.BUN_BIN;
|
|
18
|
+
if (envOverride) {
|
|
19
|
+
return envOverride;
|
|
20
|
+
}
|
|
21
|
+
// 2) If Bun already on PATH and running under Bun, just use it
|
|
22
|
+
if (process?.versions?.bun) {
|
|
23
|
+
return process.execPath;
|
|
24
|
+
}
|
|
25
|
+
// 3) Check cached installation
|
|
26
|
+
const cachedBin = join(DEFAULT_INSTALL_DIR, 'bin', BUN_BIN_NAME);
|
|
27
|
+
if (existsSync(cachedBin)) {
|
|
28
|
+
return cachedBin;
|
|
29
|
+
}
|
|
30
|
+
// 4) Download via official install script into cache dir
|
|
31
|
+
if (process.platform === 'win32') {
|
|
32
|
+
throw new Error('Automatic Bun bootstrap is not implemented for Windows. Please install Bun manually.');
|
|
33
|
+
}
|
|
34
|
+
logger.info('Bun not found; downloading to cache', { installDir: DEFAULT_INSTALL_DIR });
|
|
35
|
+
mkdirSync(DEFAULT_INSTALL_DIR, { recursive: true });
|
|
36
|
+
await runShellCommand(`curl -fsSL https://bun.sh/install | bash`, { BUN_INSTALL: DEFAULT_INSTALL_DIR });
|
|
37
|
+
if (!existsSync(cachedBin)) {
|
|
38
|
+
const defaultInstalled = join(DEFAULT_BUN_HOME, 'bin', BUN_BIN_NAME);
|
|
39
|
+
if (existsSync(defaultInstalled)) {
|
|
40
|
+
logger.warn('Bun installed to default ~/.bun; using that path instead', { defaultInstalled });
|
|
41
|
+
return defaultInstalled;
|
|
42
|
+
}
|
|
43
|
+
throw new Error(`Failed to install Bun to ${cachedBin}`);
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
await chmod(cachedBin, 0o755);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// non-fatal
|
|
50
|
+
}
|
|
51
|
+
return cachedBin;
|
|
52
|
+
}
|
|
53
|
+
async function runShellCommand(cmd, envAdd = {}) {
|
|
54
|
+
return new Promise((resolve, reject) => {
|
|
55
|
+
const child = spawn(cmd, {
|
|
56
|
+
stdio: 'inherit',
|
|
57
|
+
shell: true,
|
|
58
|
+
env: { ...process.env, ...envAdd },
|
|
59
|
+
});
|
|
60
|
+
child.on('error', reject);
|
|
61
|
+
child.on('exit', (code, signal) => {
|
|
62
|
+
if (signal) {
|
|
63
|
+
return reject(new Error(`Command terminated by signal ${signal}`));
|
|
64
|
+
}
|
|
65
|
+
if (code && code !== 0) {
|
|
66
|
+
return reject(new Error(`Command exited with code ${code}`));
|
|
67
|
+
}
|
|
68
|
+
resolve();
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=bun-bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bun-bootstrap.js","sourceRoot":"","sources":["../../src/utils/bun-bootstrap.ts"],"names":[],"mappings":"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"}
|