opkg 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -8
- package/dist/commands/add.js +11 -276
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/init.js +73 -145
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.js +26 -668
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/pack.js +10 -137
- package/dist/commands/pack.js.map +1 -1
- package/dist/commands/push.js +14 -8
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/save.js +12 -167
- package/dist/commands/save.js.map +1 -1
- package/dist/commands/status.js +2 -2
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/uninstall.js +5 -5
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/constants/index.js +18 -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 +62 -33
- 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/dependency-resolver.js +3 -1
- package/dist/core/dependency-resolver.js.map +1 -1
- package/dist/core/directory.js +2 -2
- 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 +199 -0
- package/dist/core/install/bulk-install-pipeline.js.map +1 -0
- package/dist/core/install/canonical-plan.js +123 -0
- package/dist/core/install/canonical-plan.js.map +1 -0
- 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 +2 -5
- package/dist/core/install/install-flow.js.map +1 -1
- package/dist/core/install/install-pipeline.js +228 -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 +67 -1
- package/dist/core/install/remote-flow.js.map +1 -1
- package/dist/core/openpackage.js +16 -8
- 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 +3 -2
- 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/registry/registry-rename.js +2 -1
- package/dist/core/registry/registry-rename.js.map +1 -1
- package/dist/core/registry.js +10 -3
- package/dist/core/registry.js.map +1 -1
- package/dist/core/remote-pull.js +2 -1
- 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 +46 -43
- package/dist/core/save/package-saver.js.map +1 -1
- package/dist/core/save/package-yml-generator.js +50 -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 +151 -0
- package/dist/core/save/save-pipeline.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 +13 -1
- 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/uninstall/uninstall-file-discovery.js +1 -2
- package/dist/core/uninstall/uninstall-file-discovery.js.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/file-processing.js +5 -58
- package/dist/utils/file-processing.js.map +1 -1
- package/dist/utils/index-based-installer.js +15 -33
- package/dist/utils/index-based-installer.js.map +1 -1
- package/dist/utils/install-file-discovery.js +3 -3
- 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/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 +59 -37
- package/dist/utils/package-management.js.map +1 -1
- package/dist/utils/package-yml.js +24 -0
- 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/registry-entry-filter.js +38 -24
- package/dist/utils/registry-entry-filter.js.map +1 -1
- package/dist/utils/registry-paths.js +10 -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/package.json +3 -2
- package/platforms.jsonc +178 -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/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 +53 -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/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
package/dist/core/groundzero.js
DELETED
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
import { join } from 'path';
|
|
2
|
-
import { parseFormulaYml } from '../utils/formula-yml.js';
|
|
3
|
-
import { exists, isDirectory, listDirectories } from '../utils/fs.js';
|
|
4
|
-
import { logger } from '../utils/logger.js';
|
|
5
|
-
import { FILE_PATTERNS, PLATFORM_DIRS } from '../constants/index.js';
|
|
6
|
-
import { getLocalFormulaYmlPath, getLocalFormulasDir } from '../utils/paths.js';
|
|
7
|
-
import { findFilesByExtension, findDirectoriesContainingFile } from '../utils/file-processing.js';
|
|
8
|
-
import { getDetectedPlatforms, getPlatformDefinition } from './platforms.js';
|
|
9
|
-
import { areFormulaNamesEquivalent } from '../utils/formula-name.js';
|
|
10
|
-
/**
|
|
11
|
-
* Find formula config file (.groundzero/formula.yml or formula.yml) in a directory
|
|
12
|
-
*/
|
|
13
|
-
async function findFormulaConfigFile(directoryPath) {
|
|
14
|
-
const groundzeroFormulaYmlPath = getLocalFormulaYmlPath(directoryPath);
|
|
15
|
-
const formulaYmlPath = join(directoryPath, FILE_PATTERNS.FORMULA_YML);
|
|
16
|
-
if (await exists(groundzeroFormulaYmlPath)) {
|
|
17
|
-
return groundzeroFormulaYmlPath;
|
|
18
|
-
}
|
|
19
|
-
else if (await exists(formulaYmlPath)) {
|
|
20
|
-
return formulaYmlPath;
|
|
21
|
-
}
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Get the version of an installed formula by formula name
|
|
26
|
-
*/
|
|
27
|
-
export async function getInstalledFormulaVersion(formulaName, targetDir) {
|
|
28
|
-
const groundzeroPath = join(targetDir, PLATFORM_DIRS.AI);
|
|
29
|
-
const formulaGroundzeroPath = join(groundzeroPath, formulaName);
|
|
30
|
-
if (!(await exists(formulaGroundzeroPath))) {
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
const configPath = await findFormulaConfigFile(formulaGroundzeroPath);
|
|
34
|
-
if (!configPath) {
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
try {
|
|
38
|
-
const config = await parseFormulaYml(configPath);
|
|
39
|
-
return config.version;
|
|
40
|
-
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
logger.warn(`Failed to parse formula config for ${formulaName}: ${error}`);
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Find formula directory in ai by matching formula name
|
|
48
|
-
*/
|
|
49
|
-
export async function findFormulaDirectory(groundzeroPath, formulaName) {
|
|
50
|
-
if (!(await exists(groundzeroPath)) || !(await isDirectory(groundzeroPath))) {
|
|
51
|
-
return null;
|
|
52
|
-
}
|
|
53
|
-
try {
|
|
54
|
-
const subdirectories = await listDirectories(groundzeroPath);
|
|
55
|
-
for (const subdir of subdirectories) {
|
|
56
|
-
const subdirPath = join(groundzeroPath, subdir);
|
|
57
|
-
const configPath = await findFormulaConfigFile(subdirPath);
|
|
58
|
-
if (configPath) {
|
|
59
|
-
try {
|
|
60
|
-
const formulaConfig = await parseFormulaYml(configPath);
|
|
61
|
-
if (areFormulaNamesEquivalent(formulaConfig.name, formulaName)) {
|
|
62
|
-
return subdirPath;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
logger.warn(`Failed to parse formula file ${configPath}: ${error}`);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
catch (error) {
|
|
73
|
-
logger.error(`Failed to search ai directory: ${error}`);
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Scan groundzero directory for all available formulas
|
|
79
|
-
*/
|
|
80
|
-
export async function scanGroundzeroFormulas(groundzeroPath) {
|
|
81
|
-
const formulas = new Map();
|
|
82
|
-
if (!(await exists(groundzeroPath)) || !(await isDirectory(groundzeroPath))) {
|
|
83
|
-
logger.debug('AI directory not found or not a directory', { groundzeroPath });
|
|
84
|
-
return formulas;
|
|
85
|
-
}
|
|
86
|
-
try {
|
|
87
|
-
// Find all formula.yml files recursively under the formulas directory
|
|
88
|
-
const formulasDir = getLocalFormulasDir(groundzeroPath);
|
|
89
|
-
if (!(await exists(formulasDir))) {
|
|
90
|
-
return formulas;
|
|
91
|
-
}
|
|
92
|
-
const formulaDirs = await findDirectoriesContainingFile(formulasDir, FILE_PATTERNS.FORMULA_YML, async (filePath) => {
|
|
93
|
-
try {
|
|
94
|
-
return await parseFormulaYml(filePath);
|
|
95
|
-
}
|
|
96
|
-
catch (error) {
|
|
97
|
-
logger.warn(`Failed to parse formula file ${filePath}: ${error}`);
|
|
98
|
-
return null;
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
for (const { dirPath, parsedContent } of formulaDirs) {
|
|
102
|
-
if (parsedContent) {
|
|
103
|
-
const formulaConfig = parsedContent;
|
|
104
|
-
formulas.set(formulaConfig.name, {
|
|
105
|
-
name: formulaConfig.name,
|
|
106
|
-
version: formulaConfig.version,
|
|
107
|
-
description: formulaConfig.description,
|
|
108
|
-
formulas: formulaConfig.formulas || [],
|
|
109
|
-
'dev-formulas': formulaConfig['dev-formulas'] || [],
|
|
110
|
-
path: dirPath
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
catch (error) {
|
|
116
|
-
logger.error(`Failed to scan ai directory: ${error}`);
|
|
117
|
-
}
|
|
118
|
-
return formulas;
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Gather version constraints from the main and nested formula.yml files
|
|
122
|
-
*/
|
|
123
|
-
export async function gatherGlobalVersionConstraints(cwd, includeResolutions = true) {
|
|
124
|
-
const constraints = new Map();
|
|
125
|
-
const addConstraint = (name, range) => {
|
|
126
|
-
if (!name || !range) {
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
const trimmedName = name.trim();
|
|
130
|
-
const trimmedRange = range.trim();
|
|
131
|
-
if (!trimmedName || !trimmedRange) {
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
if (!constraints.has(trimmedName)) {
|
|
135
|
-
constraints.set(trimmedName, new Set());
|
|
136
|
-
}
|
|
137
|
-
constraints.get(trimmedName).add(trimmedRange);
|
|
138
|
-
};
|
|
139
|
-
const collectFromConfig = (config) => {
|
|
140
|
-
if (!config) {
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
config.formulas?.forEach(dep => addConstraint(dep.name, dep.version));
|
|
144
|
-
config['dev-formulas']?.forEach(dep => addConstraint(dep.name, dep.version));
|
|
145
|
-
};
|
|
146
|
-
// Collect from main .groundzero/formula.yml if present
|
|
147
|
-
const mainFormulaPath = getLocalFormulaYmlPath(cwd);
|
|
148
|
-
if (await exists(mainFormulaPath)) {
|
|
149
|
-
try {
|
|
150
|
-
const mainConfig = await parseFormulaYml(mainFormulaPath);
|
|
151
|
-
collectFromConfig(mainConfig);
|
|
152
|
-
}
|
|
153
|
-
catch (error) {
|
|
154
|
-
logger.debug(`Failed to parse main formula.yml for constraints: ${error}`);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
// Collect from each formula under .groundzero/formulas
|
|
158
|
-
const formulasDir = getLocalFormulasDir(cwd);
|
|
159
|
-
if (await exists(formulasDir) && await isDirectory(formulasDir)) {
|
|
160
|
-
try {
|
|
161
|
-
const formulaDirs = await findDirectoriesContainingFile(formulasDir, FILE_PATTERNS.FORMULA_YML, async (filePath) => {
|
|
162
|
-
try {
|
|
163
|
-
return await parseFormulaYml(filePath);
|
|
164
|
-
}
|
|
165
|
-
catch (error) {
|
|
166
|
-
logger.debug(`Failed to parse formula.yml at ${filePath}: ${error}`);
|
|
167
|
-
return null;
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
for (const { parsedContent } of formulaDirs) {
|
|
171
|
-
collectFromConfig(parsedContent);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
catch (error) {
|
|
175
|
-
logger.debug(`Failed to enumerate formulas directory for constraints: ${error}`);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
const result = new Map();
|
|
179
|
-
for (const [name, ranges] of constraints) {
|
|
180
|
-
result.set(name, Array.from(ranges));
|
|
181
|
-
}
|
|
182
|
-
return result;
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Gather version constraints only from the main .groundzero/formula.yml
|
|
186
|
-
* Used to treat root-declared versions as authoritative overrides
|
|
187
|
-
*/
|
|
188
|
-
export async function gatherRootVersionConstraints(cwd) {
|
|
189
|
-
const result = new Map();
|
|
190
|
-
const addConstraint = (name, range) => {
|
|
191
|
-
if (!name || !range)
|
|
192
|
-
return;
|
|
193
|
-
const trimmedName = name.trim();
|
|
194
|
-
const trimmedRange = range.trim();
|
|
195
|
-
if (!trimmedName || !trimmedRange)
|
|
196
|
-
return;
|
|
197
|
-
if (!result.has(trimmedName))
|
|
198
|
-
result.set(trimmedName, []);
|
|
199
|
-
const arr = result.get(trimmedName);
|
|
200
|
-
if (!arr.includes(trimmedRange))
|
|
201
|
-
arr.push(trimmedRange);
|
|
202
|
-
};
|
|
203
|
-
const mainFormulaPath = getLocalFormulaYmlPath(cwd);
|
|
204
|
-
if (await exists(mainFormulaPath)) {
|
|
205
|
-
try {
|
|
206
|
-
const mainConfig = await parseFormulaYml(mainFormulaPath);
|
|
207
|
-
mainConfig.formulas?.forEach(dep => addConstraint(dep.name, dep.version));
|
|
208
|
-
mainConfig['dev-formulas']?.forEach(dep => addConstraint(dep.name, dep.version));
|
|
209
|
-
}
|
|
210
|
-
catch (error) {
|
|
211
|
-
logger.debug(`Failed to parse main formula.yml for root constraints: ${error}`);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
return result;
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Get formula configuration
|
|
218
|
-
*/
|
|
219
|
-
export async function getGroundzeroFormulaConfig(groundzeroPath, formulaName) {
|
|
220
|
-
const formulaPath = await findFormulaDirectory(groundzeroPath, formulaName);
|
|
221
|
-
if (!formulaPath) {
|
|
222
|
-
return null;
|
|
223
|
-
}
|
|
224
|
-
const configPath = await findFormulaConfigFile(formulaPath);
|
|
225
|
-
if (!configPath) {
|
|
226
|
-
return null;
|
|
227
|
-
}
|
|
228
|
-
try {
|
|
229
|
-
return await parseFormulaYml(configPath);
|
|
230
|
-
}
|
|
231
|
-
catch (error) {
|
|
232
|
-
logger.warn(`Failed to parse formula config for ${formulaName}: ${error}`);
|
|
233
|
-
return null;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
/**
|
|
237
|
-
* Check for existing installed formula by searching markdown files in ai, .claude, and .cursor directories
|
|
238
|
-
*/
|
|
239
|
-
export async function checkExistingFormulaInMarkdownFiles(cwd, formulaName) {
|
|
240
|
-
// Build search targets: ai directory + all detected platform subdirectories
|
|
241
|
-
const targets = [];
|
|
242
|
-
// Always include AI directory
|
|
243
|
-
targets.push({
|
|
244
|
-
dir: join(cwd, PLATFORM_DIRS.AI),
|
|
245
|
-
exts: [FILE_PATTERNS.MD_FILES],
|
|
246
|
-
label: PLATFORM_DIRS.AI
|
|
247
|
-
});
|
|
248
|
-
// Add detected platforms' subdirectories (rules/commands/agents, etc.)
|
|
249
|
-
try {
|
|
250
|
-
const platforms = await getDetectedPlatforms(cwd);
|
|
251
|
-
for (const platform of platforms) {
|
|
252
|
-
const def = getPlatformDefinition(platform);
|
|
253
|
-
for (const [_, subdirDef] of Object.entries(def.subdirs)) {
|
|
254
|
-
const dirPath = join(cwd, def.rootDir, subdirDef.path);
|
|
255
|
-
targets.push({ dir: dirPath, exts: subdirDef.readExts, label: def.id });
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
catch (error) {
|
|
260
|
-
logger.debug(`Failed to build platform search targets: ${error}`);
|
|
261
|
-
}
|
|
262
|
-
logger.debug(`Checking for existing formula '${formulaName}' across ${targets.length} locations`);
|
|
263
|
-
// Search each target directory for files with supported extensions
|
|
264
|
-
for (const target of targets) {
|
|
265
|
-
try {
|
|
266
|
-
const files = await findFilesByExtension(target.dir, target.exts);
|
|
267
|
-
for (const file of files) {
|
|
268
|
-
// Frontmatter support removed - cannot determine formula ownership
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
catch (dirErr) {
|
|
272
|
-
logger.debug(`Failed to search directory ${target.dir}: ${dirErr}`);
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
return { found: false };
|
|
276
|
-
}
|
|
277
|
-
//# sourceMappingURL=groundzero.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"groundzero.js","sourceRoot":"","sources":["../../src/core/groundzero.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Determine the install scenario based on local availability and force remote flag
|
|
3
|
-
*/
|
|
4
|
-
export function determineInstallScenario(mainAvailable, forceRemote) {
|
|
5
|
-
return forceRemote
|
|
6
|
-
? 'force-remote'
|
|
7
|
-
: mainAvailable
|
|
8
|
-
? 'local-primary'
|
|
9
|
-
: 'remote-primary';
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=scenario.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scenario.js","sourceRoot":"","sources":["../../../src/core/install/scenario.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,aAAsB,EAAE,WAAoB;IACnF,OAAO,WAAW;QAChB,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,aAAa;YACb,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,gBAAgB,CAAC;AACzB,CAAC"}
|
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
import * as path from 'path';
|
|
2
|
-
import { exists, ensureDir } from '../utils/fs.js';
|
|
3
|
-
import { ensureRegistryRepo, ensureWorkspacePackagesRoot, getRegistryRepoPath, getWorkspaceBranchName, getWorkspacePackagePath } from './git-registry.js';
|
|
4
|
-
import { runGitCommand, GitCommandError } from '../utils/git.js';
|
|
5
|
-
import { logger } from '../utils/logger.js';
|
|
6
|
-
import { parsePackageYml } from '../utils/package-yml.js';
|
|
7
|
-
const PACKAGE_YML = 'package.yml';
|
|
8
|
-
export async function installPackage(options) {
|
|
9
|
-
const { cwd, packageName, version } = options;
|
|
10
|
-
const workspaceRoot = await ensureWorkspacePackagesRoot(cwd);
|
|
11
|
-
await ensureDir(workspaceRoot);
|
|
12
|
-
const registryRepoPath = await ensureRegistryRepo(packageName);
|
|
13
|
-
const workspacePath = getWorkspacePackagePath(cwd, packageName);
|
|
14
|
-
const workspaceBranch = getWorkspaceBranchName(cwd);
|
|
15
|
-
if (!(await exists(workspacePath))) {
|
|
16
|
-
await runGitCommand(['clone', registryRepoPath, workspacePath]);
|
|
17
|
-
}
|
|
18
|
-
await ensureCloneOrigin(workspacePath, registryRepoPath);
|
|
19
|
-
await runGitCommand(['fetch', 'origin', '--tags', '--prune'], { cwd: workspacePath });
|
|
20
|
-
const startPoint = version ? formatVersionTag(version) : 'origin/main';
|
|
21
|
-
const branchExists = await refExists(workspacePath, workspaceBranch);
|
|
22
|
-
if (!branchExists) {
|
|
23
|
-
await runGitCommand(['checkout', '-b', workspaceBranch, startPoint], { cwd: workspacePath });
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
await runGitCommand(['checkout', workspaceBranch], { cwd: workspacePath });
|
|
27
|
-
}
|
|
28
|
-
await runGitCommand(['branch', '--set-upstream-to', 'origin/main', workspaceBranch], { cwd: workspacePath });
|
|
29
|
-
logger.info(`Workspace ready for ${packageName}`, {
|
|
30
|
-
workspacePath,
|
|
31
|
-
branch: workspaceBranch,
|
|
32
|
-
version: version ?? 'main'
|
|
33
|
-
});
|
|
34
|
-
return { workspacePath, registryRepoPath, branch: workspaceBranch };
|
|
35
|
-
}
|
|
36
|
-
export async function updatePackage(options) {
|
|
37
|
-
const { cwd, packageName, ffOnly } = options;
|
|
38
|
-
const workspacePath = await ensureWorkspaceCloneExists(cwd, packageName);
|
|
39
|
-
const workspaceBranch = getWorkspaceBranchName(cwd);
|
|
40
|
-
const registryRepoPath = getRegistryRepoPath(packageName);
|
|
41
|
-
await runGitCommand(['checkout', workspaceBranch], { cwd: workspacePath });
|
|
42
|
-
await runGitCommand(['fetch', 'origin', '--tags', '--prune'], { cwd: workspacePath });
|
|
43
|
-
const hasRemoteMain = await refExists(workspacePath, 'origin/main');
|
|
44
|
-
if (hasRemoteMain) {
|
|
45
|
-
const mergeArgs = ['merge'];
|
|
46
|
-
if (ffOnly) {
|
|
47
|
-
mergeArgs.push('--ff-only');
|
|
48
|
-
}
|
|
49
|
-
mergeArgs.push('origin/main');
|
|
50
|
-
await runGitCommand(mergeArgs, { cwd: workspacePath });
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
logger.info('Registry main branch not found; skipping merge until first save.', { packageName });
|
|
54
|
-
}
|
|
55
|
-
return { workspacePath, registryRepoPath, branch: workspaceBranch };
|
|
56
|
-
}
|
|
57
|
-
export async function savePackage(options) {
|
|
58
|
-
const { cwd, packageName, message, allowMerge } = options;
|
|
59
|
-
const workspaceBranch = getWorkspaceBranchName(cwd);
|
|
60
|
-
const registryRepoPath = await ensureRegistryRepo(packageName);
|
|
61
|
-
const workspacePath = await ensureWorkspaceInitialized({
|
|
62
|
-
cwd,
|
|
63
|
-
packageName,
|
|
64
|
-
registryRepoPath,
|
|
65
|
-
workspaceBranch
|
|
66
|
-
});
|
|
67
|
-
await runGitCommand(['checkout', workspaceBranch], { cwd: workspacePath });
|
|
68
|
-
const status = await runGitCommand(['status', '--porcelain'], { cwd: workspacePath });
|
|
69
|
-
if (status.stdout) {
|
|
70
|
-
await runGitCommand(['add', '-A'], { cwd: workspacePath });
|
|
71
|
-
const commitMessage = message ?? `opkg save from ${path.basename(cwd)}`;
|
|
72
|
-
await runGitCommand(['commit', '-m', commitMessage], { cwd: workspacePath });
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
logger.info('No local changes to commit before save.', { packageName });
|
|
76
|
-
}
|
|
77
|
-
const hasCommits = await refExists(workspacePath, 'HEAD');
|
|
78
|
-
if (!hasCommits) {
|
|
79
|
-
logger.info('Workspace repository has no commits yet; skipping push.', { packageName });
|
|
80
|
-
return { workspacePath, registryRepoPath, branch: workspaceBranch };
|
|
81
|
-
}
|
|
82
|
-
await runGitCommand(['fetch', 'origin', '--tags', '--prune'], { cwd: workspacePath });
|
|
83
|
-
const hasRemoteMain = await refExists(workspacePath, 'origin/main');
|
|
84
|
-
if (hasRemoteMain) {
|
|
85
|
-
const mergeArgs = ['merge'];
|
|
86
|
-
if (!allowMerge) {
|
|
87
|
-
mergeArgs.push('--ff-only');
|
|
88
|
-
}
|
|
89
|
-
mergeArgs.push('origin/main');
|
|
90
|
-
await runGitCommand(mergeArgs, { cwd: workspacePath });
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
logger.info('Initializing registry main branch with first save.', { packageName });
|
|
94
|
-
}
|
|
95
|
-
await runGitCommand(['push', 'origin', `${workspaceBranch}:main`], { cwd: workspacePath });
|
|
96
|
-
return { workspacePath, registryRepoPath, branch: workspaceBranch };
|
|
97
|
-
}
|
|
98
|
-
export async function releasePackage(options) {
|
|
99
|
-
const { cwd, packageName, version, message, allowMerge } = options;
|
|
100
|
-
const saveResult = await savePackage({ cwd, packageName, message, allowMerge });
|
|
101
|
-
const { workspacePath } = saveResult;
|
|
102
|
-
const resolvedVersion = version ?? (await readWorkspacePackageVersion(workspacePath));
|
|
103
|
-
const tagName = formatVersionTag(resolvedVersion);
|
|
104
|
-
const remoteTagExists = await refExists(workspacePath, `refs/tags/${tagName}`);
|
|
105
|
-
if (remoteTagExists) {
|
|
106
|
-
throw new Error(`Tag ${tagName} already exists for ${packageName}`);
|
|
107
|
-
}
|
|
108
|
-
await runGitCommand(['tag', '-a', tagName, '-m', `Release ${tagName}`], { cwd: workspacePath });
|
|
109
|
-
await runGitCommand(['push', 'origin', tagName], { cwd: workspacePath });
|
|
110
|
-
return { ...saveResult, tag: tagName };
|
|
111
|
-
}
|
|
112
|
-
async function ensureWorkspaceInitialized(options) {
|
|
113
|
-
const { cwd, packageName, registryRepoPath, workspaceBranch } = options;
|
|
114
|
-
await ensureWorkspacePackagesRoot(cwd);
|
|
115
|
-
const workspacePath = getWorkspacePackagePath(cwd, packageName);
|
|
116
|
-
await ensureDir(workspacePath);
|
|
117
|
-
const repoExists = await isGitRepository(workspacePath);
|
|
118
|
-
if (!repoExists) {
|
|
119
|
-
await runGitCommand(['init'], { cwd: workspacePath });
|
|
120
|
-
}
|
|
121
|
-
await checkoutWorkspaceBranch(workspacePath, workspaceBranch);
|
|
122
|
-
await ensureCloneOrigin(workspacePath, registryRepoPath);
|
|
123
|
-
return workspacePath;
|
|
124
|
-
}
|
|
125
|
-
async function ensureCloneOrigin(workspacePath, registryRepoPath) {
|
|
126
|
-
const currentRemote = await getRemoteOrigin(workspacePath);
|
|
127
|
-
if (!currentRemote) {
|
|
128
|
-
await runGitCommand(['remote', 'add', 'origin', registryRepoPath], { cwd: workspacePath });
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
const normalizedCurrent = path.resolve(currentRemote);
|
|
132
|
-
const normalizedTarget = path.resolve(registryRepoPath);
|
|
133
|
-
if (normalizedCurrent !== normalizedTarget) {
|
|
134
|
-
throw new Error(`Workspace at ${workspacePath} is linked to a different registry repo (${currentRemote}). Remove it or update manually.`);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
async function ensureWorkspaceCloneExists(cwd, packageName) {
|
|
138
|
-
const workspacePath = getWorkspacePackagePath(cwd, packageName);
|
|
139
|
-
if (!(await exists(workspacePath))) {
|
|
140
|
-
throw new Error(`Package '${packageName}' is not installed in this workspace. Run 'opkg install ${packageName}' first.`);
|
|
141
|
-
}
|
|
142
|
-
await ensureGitRepository(workspacePath);
|
|
143
|
-
return workspacePath;
|
|
144
|
-
}
|
|
145
|
-
async function ensureGitRepository(repoPath) {
|
|
146
|
-
try {
|
|
147
|
-
await runGitCommand(['rev-parse', '--is-inside-work-tree'], { cwd: repoPath });
|
|
148
|
-
}
|
|
149
|
-
catch (error) {
|
|
150
|
-
throw new Error(`Directory ${repoPath} is not a Git repository. Reinstall the package or fix the workspace.`);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
async function isGitRepository(repoPath) {
|
|
154
|
-
try {
|
|
155
|
-
await runGitCommand(['rev-parse', '--is-inside-work-tree'], { cwd: repoPath });
|
|
156
|
-
return true;
|
|
157
|
-
}
|
|
158
|
-
catch (error) {
|
|
159
|
-
if (error instanceof GitCommandError) {
|
|
160
|
-
return false;
|
|
161
|
-
}
|
|
162
|
-
throw error;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
async function refExists(repoPath, ref) {
|
|
166
|
-
try {
|
|
167
|
-
await runGitCommand(['rev-parse', '--verify', ref], { cwd: repoPath });
|
|
168
|
-
return true;
|
|
169
|
-
}
|
|
170
|
-
catch (error) {
|
|
171
|
-
if (error instanceof GitCommandError) {
|
|
172
|
-
return false;
|
|
173
|
-
}
|
|
174
|
-
throw error;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
async function getRemoteOrigin(repoPath) {
|
|
178
|
-
try {
|
|
179
|
-
const result = await runGitCommand(['config', '--get', 'remote.origin.url'], {
|
|
180
|
-
cwd: repoPath,
|
|
181
|
-
allowExitCodes: [0, 1]
|
|
182
|
-
});
|
|
183
|
-
return result.exitCode === 0 ? result.stdout : null;
|
|
184
|
-
}
|
|
185
|
-
catch (error) {
|
|
186
|
-
if (error instanceof GitCommandError) {
|
|
187
|
-
return null;
|
|
188
|
-
}
|
|
189
|
-
throw error;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
async function checkoutWorkspaceBranch(repoPath, branch) {
|
|
193
|
-
const branchExists = await refExists(repoPath, branch);
|
|
194
|
-
if (branchExists) {
|
|
195
|
-
await runGitCommand(['checkout', branch], { cwd: repoPath });
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
const hasHead = await refExists(repoPath, 'HEAD');
|
|
199
|
-
if (!hasHead) {
|
|
200
|
-
await runGitCommand(['checkout', '--orphan', branch], { cwd: repoPath });
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
await runGitCommand(['checkout', '-b', branch], { cwd: repoPath });
|
|
204
|
-
}
|
|
205
|
-
function formatVersionTag(version) {
|
|
206
|
-
return version.startsWith('v') ? version : `v${version}`;
|
|
207
|
-
}
|
|
208
|
-
async function readWorkspacePackageVersion(workspacePath) {
|
|
209
|
-
const packageYmlPath = path.join(workspacePath, PACKAGE_YML);
|
|
210
|
-
if (!(await exists(packageYmlPath))) {
|
|
211
|
-
throw new Error(`package.yml not found in ${workspacePath}. Provide --version when running opkg release.`);
|
|
212
|
-
}
|
|
213
|
-
const pkg = await parsePackageYml(packageYmlPath);
|
|
214
|
-
if (!pkg.version) {
|
|
215
|
-
throw new Error(`package.yml at ${workspacePath} is missing a version field.`);
|
|
216
|
-
}
|
|
217
|
-
return pkg.version;
|
|
218
|
-
}
|
|
219
|
-
//# sourceMappingURL=package-sync.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"package-sync.js","sourceRoot":"","sources":["../../src/core/package-sync.ts"],"names":[],"mappings":"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"}
|