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
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
import { join } from 'path';
|
|
2
|
-
import { FILE_PATTERNS } from '../../constants/index.js';
|
|
3
|
-
import { logger } from '../logger.js';
|
|
4
|
-
import { exists, readTextFile } from '../fs.js';
|
|
5
|
-
import { calculateFileHash } from '../hash-utils.js';
|
|
6
|
-
import { getAllPlatforms, getPlatformDefinition } from '../../core/platforms.js';
|
|
7
|
-
import { extractFormulaContentFromRootFile } from '../root-file-extractor.js';
|
|
8
|
-
import { getFileMtime } from './file-processing.js';
|
|
9
|
-
/**
|
|
10
|
-
* Discover root-level AGENTS.md content designated for a specific formula.
|
|
11
|
-
* Only includes content between markers: <!-- formula: <name> --><content><!-- -->
|
|
12
|
-
*/
|
|
13
|
-
export async function discoverAgentsMdFile(cwd, formulaName) {
|
|
14
|
-
const agentsPath = join(cwd, FILE_PATTERNS.AGENTS_MD);
|
|
15
|
-
if (!(await exists(agentsPath))) {
|
|
16
|
-
return null;
|
|
17
|
-
}
|
|
18
|
-
try {
|
|
19
|
-
const content = await readTextFile(agentsPath);
|
|
20
|
-
const extracted = extractFormulaContentFromRootFile(content, formulaName);
|
|
21
|
-
if (!extracted) {
|
|
22
|
-
return null; // No matching section; treat as non-existent
|
|
23
|
-
}
|
|
24
|
-
const mtime = await getFileMtime(agentsPath);
|
|
25
|
-
const contentHash = await calculateFileHash(extracted);
|
|
26
|
-
const discovered = {
|
|
27
|
-
fullPath: agentsPath,
|
|
28
|
-
relativePath: FILE_PATTERNS.AGENTS_MD,
|
|
29
|
-
sourceDir: 'root',
|
|
30
|
-
registryPath: FILE_PATTERNS.AGENTS_MD,
|
|
31
|
-
mtime,
|
|
32
|
-
contentHash
|
|
33
|
-
};
|
|
34
|
-
return discovered;
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
logger.warn(`Failed to process root ${FILE_PATTERNS.AGENTS_MD}: ${error}`);
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Discover all platform root files at project root and extract formula-specific content.
|
|
43
|
-
* Merges CLAUDE.md, GEMINI.md, QWEN.md, WARP.md, and platform AGENTS.md into a single
|
|
44
|
-
* universal AGENTS.md registry path via conflict resolution.
|
|
45
|
-
*/
|
|
46
|
-
export async function discoverAllRootFiles(cwd, formulaName) {
|
|
47
|
-
const results = [];
|
|
48
|
-
// Collect unique root filenames from platform definitions
|
|
49
|
-
const uniqueRootFiles = new Set();
|
|
50
|
-
for (const platform of getAllPlatforms()) {
|
|
51
|
-
const def = getPlatformDefinition(platform);
|
|
52
|
-
if (def.rootFile) {
|
|
53
|
-
uniqueRootFiles.add(def.rootFile);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
// Iterate unique root files and extract content
|
|
57
|
-
for (const rootFile of uniqueRootFiles) {
|
|
58
|
-
const absPath = join(cwd, rootFile);
|
|
59
|
-
if (!(await exists(absPath))) {
|
|
60
|
-
continue;
|
|
61
|
-
}
|
|
62
|
-
try {
|
|
63
|
-
const content = await readTextFile(absPath);
|
|
64
|
-
const extracted = extractFormulaContentFromRootFile(content, formulaName);
|
|
65
|
-
if (!extracted) {
|
|
66
|
-
continue; // No matching section in this root file
|
|
67
|
-
}
|
|
68
|
-
const mtime = await getFileMtime(absPath);
|
|
69
|
-
const contentHash = await calculateFileHash(extracted);
|
|
70
|
-
// Derive a representative platform for this root file (e.g., 'claude' for CLAUDE.md)
|
|
71
|
-
const representativePlatform = (() => {
|
|
72
|
-
for (const p of getAllPlatforms()) {
|
|
73
|
-
const def = getPlatformDefinition(p);
|
|
74
|
-
if (def.rootFile === rootFile)
|
|
75
|
-
return p;
|
|
76
|
-
}
|
|
77
|
-
return 'root';
|
|
78
|
-
})();
|
|
79
|
-
results.push({
|
|
80
|
-
fullPath: absPath,
|
|
81
|
-
relativePath: rootFile,
|
|
82
|
-
// Use representative platform id so conflict resolution can map to native root filenames
|
|
83
|
-
sourceDir: representativePlatform,
|
|
84
|
-
// Map all root files to universal AGENTS.md target for conflict resolution
|
|
85
|
-
registryPath: FILE_PATTERNS.AGENTS_MD,
|
|
86
|
-
mtime,
|
|
87
|
-
contentHash,
|
|
88
|
-
isRootFile: true // Mark as root file for special conflict resolution
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
catch (error) {
|
|
92
|
-
logger.warn(`Failed to process root file ${rootFile}: ${error}`);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
return results;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Find formulas by name, searching both explicit formula.yml files and frontmatter-based formulas
|
|
99
|
-
*/
|
|
100
|
-
/**
|
|
101
|
-
export async function findFormulas(formulaName: string): Promise<Array<{ fullPath: string; relativePath: string; config: any }>> {
|
|
102
|
-
const cwd = process.cwd();
|
|
103
|
-
const matchingFormulas: Array<{ fullPath: string; relativePath: string; config: any }> = [];
|
|
104
|
-
|
|
105
|
-
// Helper function to process markdown files in a directory
|
|
106
|
-
const processMarkdownFiles = async (
|
|
107
|
-
dirPath: string,
|
|
108
|
-
registryPath: string,
|
|
109
|
-
sourceName: string
|
|
110
|
-
): Promise<void> => {
|
|
111
|
-
if (!(await exists(dirPath)) || !(await isDirectory(dirPath))) {
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
const allMdFiles = await findFilesByExtension(dirPath, FILE_PATTERNS.MD_FILES);
|
|
116
|
-
|
|
117
|
-
// Process markdown files in parallel
|
|
118
|
-
const filePromises = allMdFiles.map(async (mdFile) => {
|
|
119
|
-
try {
|
|
120
|
-
const content = await readTextFile(mdFile.fullPath);
|
|
121
|
-
const frontmatter = parseMarkdownFrontmatter(content);
|
|
122
|
-
|
|
123
|
-
if (frontmatter?.formula?.name && areFormulaNamesEquivalent(frontmatter.formula.name, formulaName)) {
|
|
124
|
-
// Create a virtual formula.yml config based on frontmatter
|
|
125
|
-
const config = {
|
|
126
|
-
name: formulaName,
|
|
127
|
-
version: '0.1.0' // Default version for frontmatter-based formulas
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
return {
|
|
131
|
-
fullPath: mdFile.fullPath, // Use the markdown file as the "formula" location
|
|
132
|
-
relativePath: registryPath ? join(registryPath, mdFile.relativePath) : mdFile.relativePath,
|
|
133
|
-
config
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
} catch (error) {
|
|
137
|
-
logger.warn(`Failed to read or parse ${mdFile.relativePath} from ${sourceName}: ${error}`);
|
|
138
|
-
}
|
|
139
|
-
return null;
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
const fileResults = await Promise.all(filePromises);
|
|
143
|
-
matchingFormulas.push(...fileResults.filter((result): result is { fullPath: string; relativePath: string; config: any } => result !== null));
|
|
144
|
-
};
|
|
145
|
-
|
|
146
|
-
// Search in .groundzero/formulas directory for explicit formula.yml files
|
|
147
|
-
const formulasDir = getLocalFormulasDir(cwd);
|
|
148
|
-
if (await exists(formulasDir) && await isDirectory(formulasDir)) {
|
|
149
|
-
const formulaDirs = await listDirectories(formulasDir);
|
|
150
|
-
|
|
151
|
-
// Process formula directories in parallel
|
|
152
|
-
const formulaPromises = formulaDirs.map(async (formulaDir) => {
|
|
153
|
-
const formulaYmlPath = join(formulasDir, formulaDir, FILE_PATTERNS.FORMULA_YML);
|
|
154
|
-
if (await exists(formulaYmlPath)) {
|
|
155
|
-
try {
|
|
156
|
-
const { parseFormulaYml } = await import('../formula-yml.js');
|
|
157
|
-
const config = await parseFormulaYml(formulaYmlPath);
|
|
158
|
-
if (areFormulaNamesEquivalent(config.name, formulaName)) {
|
|
159
|
-
return {
|
|
160
|
-
fullPath: formulaYmlPath,
|
|
161
|
-
relativePath: join(PLATFORM_DIRS.GROUNDZERO, FORMULA_DIRS.FORMULAS, formulaDir, FILE_PATTERNS.FORMULA_YML),
|
|
162
|
-
config
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
} catch (error) {
|
|
166
|
-
logger.warn(`Failed to parse formula.yml at ${formulaYmlPath}: ${error}`);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
return null;
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
const formulaResults = await Promise.all(formulaPromises);
|
|
173
|
-
matchingFormulas.push(...formulaResults.filter((result): result is { fullPath: string; relativePath: string; config: any } => result !== null));
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
// Search in AI directory for markdown files with matching frontmatter
|
|
177
|
-
const aiDir = join(cwd, PLATFORM_DIRS.AI);
|
|
178
|
-
await processMarkdownFiles(aiDir, '', PLATFORM_DIRS.AI);
|
|
179
|
-
|
|
180
|
-
// Search in platform-specific directories (rules, commands, agents)
|
|
181
|
-
const platformConfigs = await buildPlatformSearchConfig(cwd);
|
|
182
|
-
|
|
183
|
-
for (const config of platformConfigs) {
|
|
184
|
-
// Skip AI directory since it's handled above
|
|
185
|
-
if (config.name === PLATFORM_DIRS.AI) {
|
|
186
|
-
continue;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// Process all subdirs for this platform
|
|
190
|
-
const definition = getPlatformDefinition(config.platform as any);
|
|
191
|
-
for (const [subdirName, subdirDef] of Object.entries(definition.subdirs)) {
|
|
192
|
-
const subdirPath = join(config.rootDir, subdirDef.path);
|
|
193
|
-
const registryPath = join(config.registryPath, subdirName);
|
|
194
|
-
|
|
195
|
-
await processMarkdownFiles(subdirPath, registryPath, config.name);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
// Deduplicate results based on fullPath to avoid duplicates
|
|
200
|
-
const uniqueFormulas = new Map<string, { fullPath: string; relativePath: string; config: any }>();
|
|
201
|
-
|
|
202
|
-
for (const formula of matchingFormulas) {
|
|
203
|
-
if (!uniqueFormulas.has(formula.fullPath)) {
|
|
204
|
-
uniqueFormulas.set(formula.fullPath, formula);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
return Array.from(uniqueFormulas.values());
|
|
209
|
-
}
|
|
210
|
-
*/
|
|
211
|
-
//# sourceMappingURL=formula-discovery.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"formula-discovery.js","sourceRoot":"","sources":["../../../src/utils/discovery/formula-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"platform-discovery.js","sourceRoot":"","sources":["../../../src/utils/discovery/platform-discovery.ts"],"names":[],"mappings":""}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { join } from 'path';
|
|
2
|
-
import { isJunk } from 'junk';
|
|
3
|
-
import { FILE_PATTERNS } from '../constants/index.js';
|
|
4
|
-
import { logger } from './logger.js';
|
|
5
|
-
import { exists, readTextFile } from './fs.js';
|
|
6
|
-
import { calculateFileHash } from './hash-utils.js';
|
|
7
|
-
import { getAllPlatforms, getPlatformDefinition } from '../core/platforms.js';
|
|
8
|
-
import { extractFormulaContentFromRootFile } from './root-file-extractor.js';
|
|
9
|
-
import { getFileMtime } from '../utils/file-processing.js';
|
|
10
|
-
/**
|
|
11
|
-
* Discover root-level AGENTS.md content designated for a specific formula.
|
|
12
|
-
* Only includes content between markers: <!-- formula: <name> --><content><!-- -->
|
|
13
|
-
*/
|
|
14
|
-
export async function discoverAgentsMdFile(cwd, formulaName) {
|
|
15
|
-
const agentsPath = join(cwd, FILE_PATTERNS.AGENTS_MD);
|
|
16
|
-
if (!(await exists(agentsPath))) {
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
19
|
-
try {
|
|
20
|
-
const content = await readTextFile(agentsPath);
|
|
21
|
-
const extracted = extractFormulaContentFromRootFile(content, formulaName);
|
|
22
|
-
if (!extracted) {
|
|
23
|
-
return null; // No matching section; treat as non-existent
|
|
24
|
-
}
|
|
25
|
-
const mtime = await getFileMtime(agentsPath);
|
|
26
|
-
const contentHash = await calculateFileHash(extracted);
|
|
27
|
-
const discovered = {
|
|
28
|
-
fullPath: agentsPath,
|
|
29
|
-
relativePath: FILE_PATTERNS.AGENTS_MD,
|
|
30
|
-
sourceDir: 'root',
|
|
31
|
-
registryPath: FILE_PATTERNS.AGENTS_MD,
|
|
32
|
-
mtime,
|
|
33
|
-
contentHash
|
|
34
|
-
};
|
|
35
|
-
return discovered;
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
logger.warn(`Failed to process root ${FILE_PATTERNS.AGENTS_MD}: ${error}`);
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Discover all platform root files at project root and extract formula-specific content.
|
|
44
|
-
* Merges CLAUDE.md, GEMINI.md, QWEN.md, WARP.md, and platform AGENTS.md into a single
|
|
45
|
-
* universal AGENTS.md registry path via conflict resolution.
|
|
46
|
-
*/
|
|
47
|
-
export async function discoverAllRootFiles(cwd, formulaName) {
|
|
48
|
-
const results = [];
|
|
49
|
-
// Collect unique root filenames from platform definitions
|
|
50
|
-
const uniqueRootFiles = new Set();
|
|
51
|
-
for (const platform of getAllPlatforms()) {
|
|
52
|
-
const def = getPlatformDefinition(platform);
|
|
53
|
-
if (def.rootFile) {
|
|
54
|
-
uniqueRootFiles.add(def.rootFile);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
// Iterate unique root files and extract content
|
|
58
|
-
for (const rootFile of uniqueRootFiles) {
|
|
59
|
-
// Skip junk files
|
|
60
|
-
if (isJunk(rootFile)) {
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
|
-
const absPath = join(cwd, rootFile);
|
|
64
|
-
if (!(await exists(absPath))) {
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
try {
|
|
68
|
-
const content = await readTextFile(absPath);
|
|
69
|
-
const extracted = extractFormulaContentFromRootFile(content, formulaName);
|
|
70
|
-
if (!extracted) {
|
|
71
|
-
continue; // No matching section in this root file
|
|
72
|
-
}
|
|
73
|
-
const mtime = await getFileMtime(absPath);
|
|
74
|
-
const contentHash = await calculateFileHash(extracted);
|
|
75
|
-
// Derive a representative platform for this root file (e.g., 'claude' for CLAUDE.md)
|
|
76
|
-
const representativePlatform = (() => {
|
|
77
|
-
for (const p of getAllPlatforms()) {
|
|
78
|
-
const def = getPlatformDefinition(p);
|
|
79
|
-
if (def.rootFile === rootFile)
|
|
80
|
-
return p;
|
|
81
|
-
}
|
|
82
|
-
return 'root';
|
|
83
|
-
})();
|
|
84
|
-
results.push({
|
|
85
|
-
fullPath: absPath,
|
|
86
|
-
relativePath: rootFile,
|
|
87
|
-
// Use representative platform id so conflict resolution can map to native root filenames
|
|
88
|
-
sourceDir: representativePlatform,
|
|
89
|
-
// Map all root files to universal AGENTS.md target for conflict resolution
|
|
90
|
-
registryPath: FILE_PATTERNS.AGENTS_MD,
|
|
91
|
-
mtime,
|
|
92
|
-
contentHash,
|
|
93
|
-
isRootFile: true // Mark as root file for special conflict resolution
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
catch (error) {
|
|
97
|
-
logger.warn(`Failed to process root file ${rootFile}: ${error}`);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return results;
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=formula-discovery.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"formula-discovery.js","sourceRoot":"","sources":["../../src/utils/formula-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { join, dirname } from 'path';
|
|
2
|
-
import * as yaml from 'js-yaml';
|
|
3
|
-
import { exists, readTextFile, writeTextFile, ensureDir } from './fs.js';
|
|
4
|
-
import { getLocalFormulaDir } from './paths.js';
|
|
5
|
-
import { normalizePathForProcessing } from './path-normalization.js';
|
|
6
|
-
import { logger } from './logger.js';
|
|
7
|
-
export const FORMULA_INDEX_FILENAME = 'formula.index.yml';
|
|
8
|
-
const HEADER_COMMENT = '# This file is managed by OpenPackage. Do not edit manually.';
|
|
9
|
-
export function getFormulaIndexPath(cwd, formulaName) {
|
|
10
|
-
const formulaDir = getLocalFormulaDir(cwd, formulaName);
|
|
11
|
-
return join(formulaDir, FORMULA_INDEX_FILENAME);
|
|
12
|
-
}
|
|
13
|
-
export function ensureTrailingSlash(value) {
|
|
14
|
-
return value.endsWith('/') ? value : `${value}/`;
|
|
15
|
-
}
|
|
16
|
-
export function sortMapping(record) {
|
|
17
|
-
const sortedKeys = Object.keys(record).sort();
|
|
18
|
-
const normalized = {};
|
|
19
|
-
for (const key of sortedKeys) {
|
|
20
|
-
const values = record[key] || [];
|
|
21
|
-
const sortedValues = [...new Set(values)].sort();
|
|
22
|
-
normalized[key] = sortedValues;
|
|
23
|
-
}
|
|
24
|
-
return normalized;
|
|
25
|
-
}
|
|
26
|
-
export function sanitizeIndexData(data) {
|
|
27
|
-
if (!data || typeof data !== 'object')
|
|
28
|
-
return null;
|
|
29
|
-
const { version, files } = data;
|
|
30
|
-
if (typeof version !== 'string')
|
|
31
|
-
return null;
|
|
32
|
-
if (!files || typeof files !== 'object')
|
|
33
|
-
return null;
|
|
34
|
-
const entries = {};
|
|
35
|
-
for (const [rawKey, rawValue] of Object.entries(files)) {
|
|
36
|
-
if (typeof rawKey !== 'string')
|
|
37
|
-
continue;
|
|
38
|
-
if (!Array.isArray(rawValue))
|
|
39
|
-
continue;
|
|
40
|
-
const cleanedValues = rawValue
|
|
41
|
-
.filter((entry) => typeof entry === 'string' && entry.trim().length > 0)
|
|
42
|
-
.map(value => normalizePathForProcessing(value));
|
|
43
|
-
entries[normalizePathForProcessing(rawKey)] = cleanedValues;
|
|
44
|
-
}
|
|
45
|
-
return {
|
|
46
|
-
version,
|
|
47
|
-
files: sortMapping(entries)
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
export async function readFormulaIndex(cwd, formulaName) {
|
|
51
|
-
const indexPath = getFormulaIndexPath(cwd, formulaName);
|
|
52
|
-
if (!(await exists(indexPath))) {
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
55
|
-
try {
|
|
56
|
-
const content = await readTextFile(indexPath);
|
|
57
|
-
const parsed = yaml.load(content);
|
|
58
|
-
const sanitized = sanitizeIndexData(parsed);
|
|
59
|
-
if (!sanitized) {
|
|
60
|
-
logger.warn(`Invalid formula index detected at ${indexPath}, will repair on write.`);
|
|
61
|
-
return {
|
|
62
|
-
path: indexPath,
|
|
63
|
-
formulaName,
|
|
64
|
-
version: '',
|
|
65
|
-
files: {}
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
return {
|
|
69
|
-
path: indexPath,
|
|
70
|
-
formulaName,
|
|
71
|
-
version: sanitized.version,
|
|
72
|
-
files: sanitized.files
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
catch (error) {
|
|
76
|
-
logger.warn(`Failed to read formula index at ${indexPath}: ${error}`);
|
|
77
|
-
return {
|
|
78
|
-
path: indexPath,
|
|
79
|
-
formulaName,
|
|
80
|
-
version: '',
|
|
81
|
-
files: {}
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
export async function writeFormulaIndex(record) {
|
|
86
|
-
const { path: indexPath, version, files } = record;
|
|
87
|
-
await ensureDir(dirname(indexPath));
|
|
88
|
-
const normalizedFiles = sortMapping(files);
|
|
89
|
-
const body = yaml.dump({
|
|
90
|
-
version,
|
|
91
|
-
files: normalizedFiles
|
|
92
|
-
}, {
|
|
93
|
-
lineWidth: 120,
|
|
94
|
-
sortKeys: true
|
|
95
|
-
});
|
|
96
|
-
const serialized = `${HEADER_COMMENT}\n\n${body}`;
|
|
97
|
-
await writeTextFile(indexPath, serialized);
|
|
98
|
-
}
|
|
99
|
-
export function isDirKey(key) {
|
|
100
|
-
return key.endsWith('/');
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Prune nested child directories if their parent directory is already present.
|
|
104
|
-
* Example: keep "skills/nestjs/" and drop "skills/nestjs/examples/".
|
|
105
|
-
*/
|
|
106
|
-
export function pruneNestedDirectories(dirs) {
|
|
107
|
-
const sorted = [...dirs].sort((a, b) => {
|
|
108
|
-
if (a.length === b.length) {
|
|
109
|
-
return a.localeCompare(b);
|
|
110
|
-
}
|
|
111
|
-
return a.length - b.length;
|
|
112
|
-
});
|
|
113
|
-
const pruned = [];
|
|
114
|
-
for (const dir of sorted) {
|
|
115
|
-
const hasParent = pruned.some(parent => dir !== parent && dir.startsWith(parent));
|
|
116
|
-
if (!hasParent) {
|
|
117
|
-
pruned.push(dir);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
return pruned;
|
|
121
|
-
}
|
|
122
|
-
//# sourceMappingURL=formula-index-yml.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"formula-index-yml.js","sourceRoot":"","sources":["../../src/utils/formula-index-yml.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { logger } from './logger.js';
|
|
2
|
-
import { promptPlatformSelection } from './prompts.js';
|
|
3
|
-
import { detectAllPlatforms } from '../core/platforms.js';
|
|
4
|
-
/**
|
|
5
|
-
* Detect existing platforms in the project
|
|
6
|
-
*/
|
|
7
|
-
export async function detectPlatforms(targetDir) {
|
|
8
|
-
const platformDetectionResults = await detectAllPlatforms(targetDir);
|
|
9
|
-
const detectedPlatforms = platformDetectionResults
|
|
10
|
-
.filter(result => result.detected)
|
|
11
|
-
.map(result => result.name);
|
|
12
|
-
if (detectedPlatforms.length > 0) {
|
|
13
|
-
logger.debug(`Auto-detected platforms: ${detectedPlatforms.join(', ')}`);
|
|
14
|
-
}
|
|
15
|
-
return detectedPlatforms;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Prompt user for platform selection when no platforms are detected
|
|
19
|
-
*/
|
|
20
|
-
export async function promptForPlatformSelection() {
|
|
21
|
-
console.log('\n🤖 Platform Detection');
|
|
22
|
-
console.log('No AI development platform detected in this project.');
|
|
23
|
-
return await promptPlatformSelection();
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Display installation summary
|
|
27
|
-
*/
|
|
28
|
-
export function displayInstallationSummary(totalInstalled, totalSkipped, totalFormulas, results) {
|
|
29
|
-
console.log(`\n✓ Installation Summary:`);
|
|
30
|
-
console.log(`✓ Successfully installed: ${totalInstalled}/${totalFormulas} formulas`);
|
|
31
|
-
if (totalSkipped > 0) {
|
|
32
|
-
console.log(`❌ Failed to install: ${totalSkipped} formulas`);
|
|
33
|
-
console.log('\nFailed formulas:');
|
|
34
|
-
results.filter(r => !r.success).forEach(result => {
|
|
35
|
-
console.log(` • ${result.name}: ${result.error}`);
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Display installation results
|
|
41
|
-
*/
|
|
42
|
-
export function displayInstallationResults(formulaName, resolvedFormulas, platformResult, options, mainFormula, allAddedFiles, allUpdatedFiles, rootFileResults, missingFormulas) {
|
|
43
|
-
// Build installation summary
|
|
44
|
-
let summaryText = `✓ Installed ${formulaName}`;
|
|
45
|
-
if (mainFormula) {
|
|
46
|
-
summaryText += `@${mainFormula.version}`;
|
|
47
|
-
}
|
|
48
|
-
console.log(`${summaryText}`);
|
|
49
|
-
const dependencyFormulas = resolvedFormulas.filter(f => !f.isRoot);
|
|
50
|
-
if (dependencyFormulas.length > 0) {
|
|
51
|
-
console.log(`✓ Installed dependencies: ${dependencyFormulas.length}`);
|
|
52
|
-
for (const dep of dependencyFormulas) {
|
|
53
|
-
console.log(` ├── ${dep.name}@${dep.version}`);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
console.log(`✓ Total formulas processed: ${resolvedFormulas.length}`);
|
|
57
|
-
// Show detailed file list
|
|
58
|
-
if (allAddedFiles && allAddedFiles.length > 0) {
|
|
59
|
-
console.log(`✓ Added files: ${allAddedFiles.length}`);
|
|
60
|
-
const sortedFiles = [...allAddedFiles].sort((a, b) => a.localeCompare(b));
|
|
61
|
-
for (const file of sortedFiles) {
|
|
62
|
-
console.log(` ├── ${file}`);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
if (allUpdatedFiles && allUpdatedFiles.length > 0) {
|
|
66
|
-
console.log(`✓ Updated files: ${allUpdatedFiles.length}`);
|
|
67
|
-
const sortedFiles = [...allUpdatedFiles].sort((a, b) => a.localeCompare(b));
|
|
68
|
-
for (const file of sortedFiles) {
|
|
69
|
-
console.log(` ├── ${file}`);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
// Root file installation results
|
|
73
|
-
if (rootFileResults) {
|
|
74
|
-
const totalRootFiles = rootFileResults.installed.length + rootFileResults.updated.length;
|
|
75
|
-
if (totalRootFiles > 0) {
|
|
76
|
-
console.log(`✓ Root files: ${totalRootFiles} file(s)`);
|
|
77
|
-
// Show newly created root files
|
|
78
|
-
if (rootFileResults.installed.length > 0) {
|
|
79
|
-
const sortedInstalled = [...rootFileResults.installed].sort((a, b) => a.localeCompare(b));
|
|
80
|
-
for (const file of sortedInstalled) {
|
|
81
|
-
console.log(` ├── ${file} (created)`);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
// Show updated root files
|
|
85
|
-
if (rootFileResults.updated.length > 0) {
|
|
86
|
-
const sortedUpdated = [...rootFileResults.updated].sort((a, b) => a.localeCompare(b));
|
|
87
|
-
for (const file of sortedUpdated) {
|
|
88
|
-
console.log(` ├── ${file} (updated)`);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
// Platform and IDE template output
|
|
94
|
-
if (platformResult.created.length > 0) {
|
|
95
|
-
console.log(`✓ Created platform directories: ${platformResult.created.join(', ')}`);
|
|
96
|
-
}
|
|
97
|
-
// Report missing formulas (displayed last)
|
|
98
|
-
if (missingFormulas && missingFormulas.length > 0) {
|
|
99
|
-
console.log(`\n⚠️ Missing dependencies detected:`);
|
|
100
|
-
for (const missing of missingFormulas) {
|
|
101
|
-
console.log(` • ${missing} (not found in registry)`);
|
|
102
|
-
}
|
|
103
|
-
console.log(`\n💡 To resolve missing dependencies:`);
|
|
104
|
-
console.log(` • Create locally: opn init && opn save`);
|
|
105
|
-
console.log(` • Pull from remote: opn pull ${missingFormulas.join(' ')}`);
|
|
106
|
-
console.log(` • Remove from formula.yml`);
|
|
107
|
-
console.log('');
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
//# sourceMappingURL=formula-installation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"formula-installation.js","sourceRoot":"","sources":["../../src/utils/formula-installation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { FILE_PATTERNS } from '../constants/index.js';
|
|
2
|
-
import { exists, isDirectory, readTextFile } from './fs.js';
|
|
3
|
-
import { findFilesByExtension } from './file-processing.js';
|
|
4
|
-
import { FORMULA_INDEX_FILENAME } from './formula-index-yml.js';
|
|
5
|
-
import { isAllowedRegistryPath, isRootRegistryPath, isSkippableRegistryPath, normalizeRegistryPath } from './registry-entry-filter.js';
|
|
6
|
-
const UTF8_ENCODING = 'utf8';
|
|
7
|
-
export async function readLocalFormulaFilesForIndex(formulaDir) {
|
|
8
|
-
if (!(await exists(formulaDir)) || !(await isDirectory(formulaDir))) {
|
|
9
|
-
return [];
|
|
10
|
-
}
|
|
11
|
-
const entries = await findFilesByExtension(formulaDir, [], formulaDir);
|
|
12
|
-
const files = [];
|
|
13
|
-
for (const entry of entries) {
|
|
14
|
-
const normalizedPath = normalizeRegistryPath(entry.relativePath);
|
|
15
|
-
if (normalizedPath === FORMULA_INDEX_FILENAME) {
|
|
16
|
-
continue;
|
|
17
|
-
}
|
|
18
|
-
const isAllowed = isAllowedRegistryPath(normalizedPath);
|
|
19
|
-
const isRoot = isRootRegistryPath(normalizedPath);
|
|
20
|
-
const isYamlOverride = isYamlOverrideFile(normalizedPath);
|
|
21
|
-
const isFormulaYml = normalizedPath === FILE_PATTERNS.FORMULA_YML;
|
|
22
|
-
const isRootLevelFile = !normalizedPath.includes('/');
|
|
23
|
-
if (!isAllowed && !isRoot && !isYamlOverride && !isFormulaYml && !isRootLevelFile) {
|
|
24
|
-
continue;
|
|
25
|
-
}
|
|
26
|
-
const content = await readTextFile(entry.fullPath, UTF8_ENCODING);
|
|
27
|
-
files.push({
|
|
28
|
-
path: normalizedPath,
|
|
29
|
-
content,
|
|
30
|
-
encoding: UTF8_ENCODING
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
return files;
|
|
34
|
-
}
|
|
35
|
-
function isYamlOverrideFile(normalizedPath) {
|
|
36
|
-
return normalizedPath !== FILE_PATTERNS.FORMULA_YML && isSkippableRegistryPath(normalizedPath);
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=formula-local-files.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"formula-local-files.js","sourceRoot":"","sources":["../../src/utils/formula-local-files.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EACL,MAAM,EACN,WAAW,EACX,YAAY,EACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,aAAa,GAAG,MAAM,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,UAAkB;IACpE,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACpE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,UAAU,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;IACvE,MAAM,KAAK,GAAkB,EAAE,CAAC;IAEhC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,cAAc,GAAG,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAEjE,IAAI,cAAc,KAAK,sBAAsB,EAAE,CAAC;YAC9C,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;QAClD,MAAM,cAAc,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,cAAc,KAAK,aAAa,CAAC,WAAW,CAAC;QAClE,MAAM,eAAe,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEtD,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,IAAI,CAAC,eAAe,EAAE,CAAC;YAClF,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,cAAc;YACpB,OAAO;YACP,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,cAAsB;IAChD,OAAO,cAAc,KAAK,aAAa,CAAC,WAAW,IAAI,uBAAuB,CAAC,cAAc,CAAC,CAAC;AACjG,CAAC"}
|