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.
Files changed (272) hide show
  1. package/README.md +49 -8
  2. package/dist/commands/add.js +11 -276
  3. package/dist/commands/add.js.map +1 -1
  4. package/dist/commands/init.js +73 -145
  5. package/dist/commands/init.js.map +1 -1
  6. package/dist/commands/install.js +26 -668
  7. package/dist/commands/install.js.map +1 -1
  8. package/dist/commands/pack.js +10 -137
  9. package/dist/commands/pack.js.map +1 -1
  10. package/dist/commands/push.js +14 -8
  11. package/dist/commands/push.js.map +1 -1
  12. package/dist/commands/save.js +12 -167
  13. package/dist/commands/save.js.map +1 -1
  14. package/dist/commands/status.js +2 -2
  15. package/dist/commands/status.js.map +1 -1
  16. package/dist/commands/uninstall.js +5 -5
  17. package/dist/commands/uninstall.js.map +1 -1
  18. package/dist/constants/index.js +18 -45
  19. package/dist/constants/index.js.map +1 -1
  20. package/dist/constants/workspace.js +9 -0
  21. package/dist/constants/workspace.js.map +1 -0
  22. package/dist/core/add/add-conflict-handler.js +68 -0
  23. package/dist/core/add/add-conflict-handler.js.map +1 -0
  24. package/dist/core/add/add-pipeline.js +137 -0
  25. package/dist/core/add/add-pipeline.js.map +1 -0
  26. package/dist/core/add/package-index-updater.js +62 -33
  27. package/dist/core/add/package-index-updater.js.map +1 -1
  28. package/dist/core/add/platform-path-transformer.js +47 -0
  29. package/dist/core/add/platform-path-transformer.js.map +1 -0
  30. package/dist/core/add/source-collector.js +57 -0
  31. package/dist/core/add/source-collector.js.map +1 -0
  32. package/dist/core/dependency-resolver.js +3 -1
  33. package/dist/core/dependency-resolver.js.map +1 -1
  34. package/dist/core/directory.js +2 -2
  35. package/dist/core/directory.js.map +1 -1
  36. package/dist/core/discovery/file-discovery.js +55 -54
  37. package/dist/core/discovery/file-discovery.js.map +1 -1
  38. package/dist/core/discovery/platform-files-discovery.js +32 -17
  39. package/dist/core/discovery/platform-files-discovery.js.map +1 -1
  40. package/dist/core/install/bulk-install-pipeline.js +199 -0
  41. package/dist/core/install/bulk-install-pipeline.js.map +1 -0
  42. package/dist/core/install/canonical-plan.js +123 -0
  43. package/dist/core/install/canonical-plan.js.map +1 -0
  44. package/dist/core/install/dry-run.js +2 -2
  45. package/dist/core/install/dry-run.js.map +1 -1
  46. package/dist/core/install/index.js +3 -0
  47. package/dist/core/install/index.js.map +1 -0
  48. package/dist/core/install/install-errors.js +41 -0
  49. package/dist/core/install/install-errors.js.map +1 -0
  50. package/dist/core/install/install-flow.js +2 -5
  51. package/dist/core/install/install-flow.js.map +1 -1
  52. package/dist/core/install/install-pipeline.js +228 -0
  53. package/dist/core/install/install-pipeline.js.map +1 -0
  54. package/dist/core/install/install-reporting.js +99 -0
  55. package/dist/core/install/install-reporting.js.map +1 -0
  56. package/dist/core/install/platform-resolution.js +6 -6
  57. package/dist/core/install/platform-resolution.js.map +1 -1
  58. package/dist/core/install/remote-flow.js +67 -1
  59. package/dist/core/install/remote-flow.js.map +1 -1
  60. package/dist/core/openpackage.js +16 -8
  61. package/dist/core/openpackage.js.map +1 -1
  62. package/dist/core/package-context.js +246 -0
  63. package/dist/core/package-context.js.map +1 -0
  64. package/dist/core/package.js +3 -2
  65. package/dist/core/package.js.map +1 -1
  66. package/dist/core/platforms.js +126 -217
  67. package/dist/core/platforms.js.map +1 -1
  68. package/dist/core/registry/registry-rename.js +2 -1
  69. package/dist/core/registry/registry-rename.js.map +1 -1
  70. package/dist/core/registry.js +10 -3
  71. package/dist/core/registry.js.map +1 -1
  72. package/dist/core/remote-pull.js +2 -1
  73. package/dist/core/remote-pull.js.map +1 -1
  74. package/dist/core/save/constants.js +4 -0
  75. package/dist/core/save/constants.js.map +1 -1
  76. package/dist/core/save/name-resolution.js +31 -0
  77. package/dist/core/save/name-resolution.js.map +1 -0
  78. package/dist/core/save/package-detection.js +147 -0
  79. package/dist/core/save/package-detection.js.map +1 -0
  80. package/dist/core/save/package-saver.js +46 -43
  81. package/dist/core/save/package-saver.js.map +1 -1
  82. package/dist/core/save/package-yml-generator.js +50 -71
  83. package/dist/core/save/package-yml-generator.js.map +1 -1
  84. package/dist/core/save/root-save-candidates.js.map +1 -1
  85. package/dist/core/save/save-candidate-loader.js +89 -0
  86. package/dist/core/save/save-candidate-loader.js.map +1 -0
  87. package/dist/core/save/save-conflict-resolution.js +72 -410
  88. package/dist/core/save/save-conflict-resolution.js.map +1 -1
  89. package/dist/core/save/save-conflict-resolver.js +277 -0
  90. package/dist/core/save/save-conflict-resolver.js.map +1 -0
  91. package/dist/core/save/save-pipeline.js +151 -0
  92. package/dist/core/save/save-pipeline.js.map +1 -0
  93. package/dist/core/save/save-types.js +2 -0
  94. package/dist/core/save/save-types.js.map +1 -0
  95. package/dist/core/save/save-yml-resolution.js +77 -39
  96. package/dist/core/save/save-yml-resolution.js.map +1 -1
  97. package/dist/core/save/workspace-rename.js +6 -6
  98. package/dist/core/save/workspace-rename.js.map +1 -1
  99. package/dist/core/scoping/package-scoping.js +13 -1
  100. package/dist/core/scoping/package-scoping.js.map +1 -1
  101. package/dist/core/status/status-file-discovery.js +12 -30
  102. package/dist/core/status/status-file-discovery.js.map +1 -1
  103. package/dist/core/sync/platform-sync.js +7 -4
  104. package/dist/core/sync/platform-sync.js.map +1 -1
  105. package/dist/core/sync/root-files-sync.js +59 -1
  106. package/dist/core/sync/root-files-sync.js.map +1 -1
  107. package/dist/core/uninstall/uninstall-file-discovery.js +1 -2
  108. package/dist/core/uninstall/uninstall-file-discovery.js.map +1 -1
  109. package/dist/types/index.js.map +1 -1
  110. package/dist/utils/file-processing.js +5 -58
  111. package/dist/utils/file-processing.js.map +1 -1
  112. package/dist/utils/index-based-installer.js +15 -33
  113. package/dist/utils/index-based-installer.js.map +1 -1
  114. package/dist/utils/install-file-discovery.js +3 -3
  115. package/dist/utils/install-file-discovery.js.map +1 -1
  116. package/dist/utils/install-orchestrator.js +21 -21
  117. package/dist/utils/install-orchestrator.js.map +1 -1
  118. package/dist/utils/jsonc.js +44 -0
  119. package/dist/utils/jsonc.js.map +1 -0
  120. package/dist/utils/package-copy.js +199 -0
  121. package/dist/utils/package-copy.js.map +1 -0
  122. package/dist/utils/package-filters.js +125 -0
  123. package/dist/utils/package-filters.js.map +1 -0
  124. package/dist/utils/package-index-yml.js +15 -10
  125. package/dist/utils/package-index-yml.js.map +1 -1
  126. package/dist/utils/package-installation.js +4 -113
  127. package/dist/utils/package-installation.js.map +1 -1
  128. package/dist/utils/package-local-files.js +2 -35
  129. package/dist/utils/package-local-files.js.map +1 -1
  130. package/dist/utils/package-management.js +59 -37
  131. package/dist/utils/package-management.js.map +1 -1
  132. package/dist/utils/package-yml.js +24 -0
  133. package/dist/utils/package-yml.js.map +1 -1
  134. package/dist/utils/path-normalization.js +8 -53
  135. package/dist/utils/path-normalization.js.map +1 -1
  136. package/dist/utils/paths.js +17 -9
  137. package/dist/utils/paths.js.map +1 -1
  138. package/dist/utils/platform-file.js +16 -59
  139. package/dist/utils/platform-file.js.map +1 -1
  140. package/dist/utils/platform-mapper.js +29 -41
  141. package/dist/utils/platform-mapper.js.map +1 -1
  142. package/dist/utils/platform-specific-paths.js.map +1 -1
  143. package/dist/utils/platform-utils.js +28 -139
  144. package/dist/utils/platform-utils.js.map +1 -1
  145. package/dist/utils/platform-yaml-merge.js +13 -6
  146. package/dist/utils/platform-yaml-merge.js.map +1 -1
  147. package/dist/utils/registry-entry-filter.js +38 -24
  148. package/dist/utils/registry-entry-filter.js.map +1 -1
  149. package/dist/utils/registry-paths.js +10 -0
  150. package/dist/utils/registry-paths.js.map +1 -0
  151. package/dist/utils/root-file-installer.js +19 -0
  152. package/dist/utils/root-file-installer.js.map +1 -1
  153. package/dist/utils/root-file-registry.js.map +1 -1
  154. package/package.json +3 -2
  155. package/platforms.jsonc +178 -0
  156. package/specs/package/README.md +60 -0
  157. package/specs/package/nested-packages-and-parent-packages.md +79 -0
  158. package/specs/package/package-index-yml.md +171 -0
  159. package/specs/package/package-root-layout.md +78 -0
  160. package/specs/package/registry-payload-and-copy.md +77 -0
  161. package/specs/package/universal-content.md +144 -0
  162. package/specs/platforms.md +193 -0
  163. package/specs/save/README.md +40 -0
  164. package/specs/save/save-conflict-resolution.md +146 -0
  165. package/specs/save/save-file-discovery.md +101 -0
  166. package/specs/save/save-frontmatter-overrides.md +81 -0
  167. package/specs/save/save-modes-inputs.md +53 -0
  168. package/specs/save/save-naming-scoping.md +93 -0
  169. package/specs/save/save-package-detection.md +60 -0
  170. package/specs/save/save-registry-sync.md +126 -0
  171. package/dist/commands/release.js +0 -33
  172. package/dist/commands/release.js.map +0 -1
  173. package/dist/commands/tag.js +0 -311
  174. package/dist/commands/tag.js.map +0 -1
  175. package/dist/commands/update.js +0 -30
  176. package/dist/commands/update.js.map +0 -1
  177. package/dist/core/add/formula-index-updater.js +0 -290
  178. package/dist/core/add/formula-index-updater.js.map +0 -1
  179. package/dist/core/discovery/ai-files-discovery.js +0 -2
  180. package/dist/core/discovery/ai-files-discovery.js.map +0 -1
  181. package/dist/core/discovery/formula-files-discovery.js +0 -14
  182. package/dist/core/discovery/formula-files-discovery.js.map +0 -1
  183. package/dist/core/discovery/index-files-discovery.js +0 -91
  184. package/dist/core/discovery/index-files-discovery.js.map +0 -1
  185. package/dist/core/discovery/md-files-discovery.js +0 -82
  186. package/dist/core/discovery/md-files-discovery.js.map +0 -1
  187. package/dist/core/discovery/package-files-discovery.js +0 -14
  188. package/dist/core/discovery/package-files-discovery.js.map +0 -1
  189. package/dist/core/discovery/platform-discovery.js +0 -84
  190. package/dist/core/discovery/platform-discovery.js.map +0 -1
  191. package/dist/core/discovery/root-files-discovery.js +0 -2
  192. package/dist/core/discovery/root-files-discovery.js.map +0 -1
  193. package/dist/core/formula.js +0 -170
  194. package/dist/core/formula.js.map +0 -1
  195. package/dist/core/git-registry.js +0 -46
  196. package/dist/core/git-registry.js.map +0 -1
  197. package/dist/core/groundzero.js +0 -277
  198. package/dist/core/groundzero.js.map +0 -1
  199. package/dist/core/install/scenario.js +0 -11
  200. package/dist/core/install/scenario.js.map +0 -1
  201. package/dist/core/package-sync.js +0 -219
  202. package/dist/core/package-sync.js.map +0 -1
  203. package/dist/core/save/formula-file-generator.js +0 -167
  204. package/dist/core/save/formula-file-generator.js.map +0 -1
  205. package/dist/core/save/formula-saver.js +0 -52
  206. package/dist/core/save/formula-saver.js.map +0 -1
  207. package/dist/core/save/formula-yml-generator.js +0 -89
  208. package/dist/core/save/formula-yml-generator.js.map +0 -1
  209. package/dist/core/save/formula-yml-versioning.js +0 -108
  210. package/dist/core/save/formula-yml-versioning.js.map +0 -1
  211. package/dist/core/save/generic-file-sync.js +0 -38
  212. package/dist/core/save/generic-file-sync.js.map +0 -1
  213. package/dist/core/save/md-files-sync.js +0 -33
  214. package/dist/core/save/md-files-sync.js.map +0 -1
  215. package/dist/core/save/package-yml-versioning.js +0 -108
  216. package/dist/core/save/package-yml-versioning.js.map +0 -1
  217. package/dist/core/save/platform-sync.js +0 -95
  218. package/dist/core/save/platform-sync.js.map +0 -1
  219. package/dist/core/save/root-files-sync.js +0 -140
  220. package/dist/core/save/root-files-sync.js.map +0 -1
  221. package/dist/core/save/save-candidate-types.js +0 -2
  222. package/dist/core/save/save-candidate-types.js.map +0 -1
  223. package/dist/core/save/save-conflict-types.js +0 -2
  224. package/dist/core/save/save-conflict-types.js.map +0 -1
  225. package/dist/core/save/save-file-discovery.js +0 -5
  226. package/dist/core/save/save-file-discovery.js.map +0 -1
  227. package/dist/core/status-file-discovery.js +0 -175
  228. package/dist/core/status-file-discovery.js.map +0 -1
  229. package/dist/utils/discovery/file-processing.js +0 -156
  230. package/dist/utils/discovery/file-processing.js.map +0 -1
  231. package/dist/utils/discovery/formula-discovery.js +0 -211
  232. package/dist/utils/discovery/formula-discovery.js.map +0 -1
  233. package/dist/utils/discovery/platform-discovery.js +0 -2
  234. package/dist/utils/discovery/platform-discovery.js.map +0 -1
  235. package/dist/utils/formula-discovery.js +0 -102
  236. package/dist/utils/formula-discovery.js.map +0 -1
  237. package/dist/utils/formula-index-yml.js +0 -122
  238. package/dist/utils/formula-index-yml.js.map +0 -1
  239. package/dist/utils/formula-installation.js +0 -110
  240. package/dist/utils/formula-installation.js.map +0 -1
  241. package/dist/utils/formula-local-files.js +0 -38
  242. package/dist/utils/formula-local-files.js.map +0 -1
  243. package/dist/utils/formula-management.js +0 -191
  244. package/dist/utils/formula-management.js.map +0 -1
  245. package/dist/utils/formula-name.js +0 -97
  246. package/dist/utils/formula-name.js.map +0 -1
  247. package/dist/utils/formula-versioning.js +0 -109
  248. package/dist/utils/formula-versioning.js.map +0 -1
  249. package/dist/utils/formula-yml.js +0 -82
  250. package/dist/utils/formula-yml.js.map +0 -1
  251. package/dist/utils/git.js +0 -54
  252. package/dist/utils/git.js.map +0 -1
  253. package/dist/utils/id-based-discovery.js +0 -126
  254. package/dist/utils/id-based-discovery.js.map +0 -1
  255. package/dist/utils/id-based-installer.js +0 -249
  256. package/dist/utils/id-based-installer.js.map +0 -1
  257. package/dist/utils/index-yml-based-installer.js +0 -375
  258. package/dist/utils/index-yml-based-installer.js.map +0 -1
  259. package/dist/utils/index-yml.js +0 -124
  260. package/dist/utils/index-yml.js.map +0 -1
  261. package/dist/utils/md-frontmatter.js +0 -3
  262. package/dist/utils/md-frontmatter.js.map +0 -1
  263. package/dist/utils/package-link-yml.js +0 -92
  264. package/dist/utils/package-link-yml.js.map +0 -1
  265. package/dist/utils/platform-discovery.js +0 -2
  266. package/dist/utils/platform-discovery.js.map +0 -1
  267. package/dist/utils/platform-frontmatter-split.js +0 -15
  268. package/dist/utils/platform-frontmatter-split.js.map +0 -1
  269. package/dist/utils/timestamp-encoder.js +0 -13
  270. package/dist/utils/timestamp-encoder.js.map +0 -1
  271. package/dist/utils/wip-versioning.js +0 -24
  272. package/dist/utils/wip-versioning.js.map +0 -1
@@ -1,375 +0,0 @@
1
- import { join, relative, dirname } from 'path';
2
- import { listDirectories, listFiles, exists, ensureDir, remove } from './fs.js';
3
- import { logger } from './logger.js';
4
- import { getFormulaVersionPath } from '../core/directory.js';
5
- import { readIndexYml } from '../core/discovery/index-files-discovery.js';
6
- import { writeIfChanged } from '../core/install/file-updater.js';
7
- import { getPlatformDefinition, getDetectedPlatforms } from '../core/platforms.js';
8
- import { FILE_PATTERNS, UNIVERSAL_SUBDIRS, PLATFORM_DIRS } from '../constants/index.js';
9
- import { readFile as fsReadFile, writeFile as fsWriteFile } from 'fs/promises';
10
- import * as fs from 'fs/promises';
11
- import * as readline from 'readline';
12
- import { areFormulaNamesEquivalent } from './formula-name.js';
13
- async function writeIfChangedBinary(absFile, content) {
14
- await ensureDir(dirname(absFile));
15
- const fileExists = await exists(absFile);
16
- if (!fileExists) {
17
- await fsWriteFile(absFile, content);
18
- return 'created';
19
- }
20
- let existing = null;
21
- try {
22
- existing = await fsReadFile(absFile);
23
- }
24
- catch {
25
- existing = null;
26
- }
27
- if (!existing || !content.equals(existing)) {
28
- await fsWriteFile(absFile, content);
29
- return 'updated';
30
- }
31
- return 'unchanged';
32
- }
33
- function splitDirRel(dirRel) {
34
- const parts = dirRel.split('/');
35
- const first = parts[0];
36
- const rest = parts.slice(1).join('/');
37
- const isAi = first === PLATFORM_DIRS.AI;
38
- const universalSubdir = isAi ? null : (first === '.' ? '' : first);
39
- return { first, rest, isAi, universalSubdir };
40
- }
41
- function computeTargetFileName(relPath, writeExt) {
42
- const lower = relPath.toLowerCase();
43
- if (writeExt && lower.endsWith(FILE_PATTERNS.MD_FILES)) {
44
- const withoutExt = relPath.replace(/\.[^.]+$/, '');
45
- return withoutExt + writeExt;
46
- }
47
- return relPath;
48
- }
49
- function isTextLike(pathLower) {
50
- return pathLower.endsWith(FILE_PATTERNS.INDEX_YML) || pathLower.endsWith(FILE_PATTERNS.MD_FILES);
51
- }
52
- function recordResult(result, relPath, outcome) {
53
- result.files.push(relPath);
54
- if (outcome === 'created') {
55
- result.installed++;
56
- result.installedFiles.push(relPath);
57
- }
58
- else if (outcome === 'updated') {
59
- result.updated++;
60
- result.updatedFiles.push(relPath);
61
- }
62
- }
63
- async function writeFilesToTarget(cwd, baseDir, targetRelDir, files, writeExt, result) {
64
- for (const file of files) {
65
- try {
66
- const targetFileName = computeTargetFileName(file.relativePath, writeExt);
67
- const absDir = join(baseDir, targetRelDir);
68
- const absFile = join(absDir, targetFileName);
69
- await ensureDir(dirname(absFile));
70
- const isText = isTextLike(targetFileName.toLowerCase());
71
- const outcome = isText
72
- ? await writeIfChanged(absFile, file.content.toString('utf8'))
73
- : await writeIfChangedBinary(absFile, file.content);
74
- const relPath = relative(cwd, absFile);
75
- recordResult(result, relPath, outcome);
76
- }
77
- catch (error) {
78
- logger.warn(`Failed to install file ${file.relativePath}: ${error}`);
79
- result.skipped++;
80
- }
81
- }
82
- }
83
- function createPrefixTracker() {
84
- const map = new Map();
85
- const get = (k) => {
86
- let s = map.get(k);
87
- if (!s) {
88
- s = new Set();
89
- map.set(k, s);
90
- }
91
- return s;
92
- };
93
- return {
94
- isCovered(key, dirRel) {
95
- const set = map.get(key);
96
- if (!set)
97
- return false;
98
- for (const prefix of set) {
99
- if (dirRel === prefix || dirRel.startsWith(prefix + '/'))
100
- return true;
101
- }
102
- return false;
103
- },
104
- mark(key, dirRel) {
105
- get(key).add(dirRel);
106
- }
107
- };
108
- }
109
- async function shouldProceedWithOverwrite(targetBaseDir, expectedId, options) {
110
- const targetExists = await exists(targetBaseDir);
111
- if (!targetExists)
112
- return true;
113
- const targetId = await getIndexIdFromCwdDir(targetBaseDir);
114
- // Same ID → safe overwrite
115
- if (expectedId && targetId === expectedId)
116
- return true;
117
- // Forced
118
- if (options.force)
119
- return true;
120
- // Non-interactive defaults to skip (retain current behavior)
121
- const relPromptBase = relative(process.cwd(), targetBaseDir) || targetBaseDir;
122
- if (!targetId && !expectedId) {
123
- return await promptUserForOverwrite(`Directory ${relPromptBase} exists without index.yml. Overwrite`);
124
- }
125
- return await promptUserForOverwrite(`Directory ${relPromptBase} exists with no or different index.yml id. Overwrite`);
126
- }
127
- /**
128
- * Recursively find directories in registry that contain an index.yml with matching formula.name
129
- * Returns paths relative to the formula version root (e.g., "rules/subdir", "commands/tools")
130
- */
131
- export async function discoverRegistryIndexYmlDirs(formulaName, version) {
132
- const root = getFormulaVersionPath(formulaName, version);
133
- async function recurse(dir, rel, acc) {
134
- const files = await listFiles(dir);
135
- if (files.includes(FILE_PATTERNS.INDEX_YML)) {
136
- try {
137
- const marker = await readIndexYml(join(dir, FILE_PATTERNS.INDEX_YML));
138
- if (marker && marker.formula?.name && areFormulaNamesEquivalent(marker.formula.name, formulaName)) {
139
- acc.push(rel === '' ? '.' : rel);
140
- }
141
- }
142
- catch (err) {
143
- logger.warn(`Failed to read index.yml at ${join(dir, FILE_PATTERNS.INDEX_YML)}: ${err}`);
144
- }
145
- }
146
- const subdirs = await listDirectories(dir);
147
- for (const sub of subdirs) {
148
- const subdir = join(dir, sub);
149
- const subrel = rel === '' ? sub : join(rel, sub);
150
- await recurse(subdir, subrel, acc);
151
- }
152
- }
153
- const matches = [];
154
- await recurse(root, '', matches);
155
- return matches;
156
- }
157
- /**
158
- * Read an index.yml directory from registry recursively, returning file entries.
159
- * Skips the index.yml itself from returned list.
160
- */
161
- export async function readRegistryDirectoryRecursive(formulaName, version, dirRelToRoot) {
162
- const base = getFormulaVersionPath(formulaName, version);
163
- const absBaseDir = join(base, dirRelToRoot);
164
- async function walk(absDir, relToIndexDir, acc) {
165
- const files = await listFiles(absDir);
166
- for (const f of files) {
167
- const absFile = join(absDir, f);
168
- const relFile = relToIndexDir === '' ? f : join(relToIndexDir, f);
169
- const content = await fsReadFile(absFile);
170
- acc.push({ fullPath: absFile, relativePath: relFile, content });
171
- }
172
- const subdirs = await listDirectories(absDir);
173
- for (const sub of subdirs) {
174
- const nextAbs = join(absDir, sub);
175
- const nextRel = relToIndexDir === '' ? sub : join(relToIndexDir, sub);
176
- await walk(nextAbs, nextRel, acc);
177
- }
178
- }
179
- const results = [];
180
- await walk(absBaseDir, '', results);
181
- return results;
182
- }
183
- export async function readRegistryIndexId(formulaName, version, dirRelToRoot) {
184
- const base = getFormulaVersionPath(formulaName, version);
185
- const indexPath = join(base, dirRelToRoot, FILE_PATTERNS.INDEX_YML);
186
- try {
187
- const marker = await readIndexYml(indexPath);
188
- const id = marker?.formula?.id;
189
- return id ?? null;
190
- }
191
- catch (err) {
192
- logger.warn(`Failed to read registry index.yml at ${indexPath}: ${err}`);
193
- return null;
194
- }
195
- }
196
- async function getIndexIdFromCwdDir(dirAbsPath) {
197
- const indexPath = join(dirAbsPath, FILE_PATTERNS.INDEX_YML);
198
- if (!(await exists(indexPath)))
199
- return null;
200
- try {
201
- const marker = await readIndexYml(indexPath);
202
- const id = marker?.formula?.id;
203
- return id ?? null;
204
- }
205
- catch (err) {
206
- logger.warn(`Failed to parse index.yml at ${indexPath}: ${err}`);
207
- return null;
208
- }
209
- }
210
- async function buildCwdIndexYmlIdMap(cwd, platforms) {
211
- const map = new Map();
212
- async function recurseDirs(baseDir, platform, universalSubdir) {
213
- // If index.yml exists here, record it
214
- const files = await listFiles(baseDir).catch(() => []);
215
- if (files.includes(FILE_PATTERNS.INDEX_YML)) {
216
- const id = await getIndexIdFromCwdDir(baseDir);
217
- if (id) {
218
- const entry = { id, platform, universalSubdir, dirAbsPath: baseDir };
219
- if (!map.has(id))
220
- map.set(id, []);
221
- map.get(id).push(entry);
222
- }
223
- }
224
- // Recurse subdirectories
225
- const subdirs = await listDirectories(baseDir).catch(() => []);
226
- for (const sub of subdirs) {
227
- await recurseDirs(join(baseDir, sub), platform, universalSubdir);
228
- }
229
- }
230
- for (const platform of platforms) {
231
- const def = getPlatformDefinition(platform);
232
- for (const universalSubdir of Object.values(UNIVERSAL_SUBDIRS)) {
233
- const subdirDef = def.subdirs[universalSubdir];
234
- if (!subdirDef)
235
- continue;
236
- const root = join(cwd, def.rootDir, subdirDef.path);
237
- if (await exists(root)) {
238
- await recurseDirs(root, platform, universalSubdir);
239
- }
240
- }
241
- }
242
- return map;
243
- }
244
- async function buildCwdAiIndexYmlIdMap(cwd) {
245
- const map = new Map();
246
- async function recurse(baseDir) {
247
- const files = await listFiles(baseDir).catch(() => []);
248
- if (files.includes(FILE_PATTERNS.INDEX_YML)) {
249
- const id = await getIndexIdFromCwdDir(baseDir);
250
- if (id) {
251
- if (!map.has(id))
252
- map.set(id, []);
253
- map.get(id).push(baseDir);
254
- }
255
- }
256
- const subdirs = await listDirectories(baseDir).catch(() => []);
257
- for (const sub of subdirs) {
258
- await recurse(join(baseDir, sub));
259
- }
260
- }
261
- const aiRoot = join(cwd, PLATFORM_DIRS.AI);
262
- if (await exists(aiRoot)) {
263
- await recurse(aiRoot);
264
- }
265
- return map;
266
- }
267
- async function clearDirectory(dirAbsPath) {
268
- try {
269
- const entries = await fs.readdir(dirAbsPath, { withFileTypes: true });
270
- await Promise.all(entries.map(async (entry) => {
271
- const full = join(dirAbsPath, entry.name);
272
- await remove(full);
273
- }));
274
- }
275
- catch (err) {
276
- // If directory doesn't exist, nothing to clear
277
- return;
278
- }
279
- }
280
- async function promptUserForOverwrite(promptText) {
281
- // If not an interactive TTY, default to skip
282
- if (!process.stdin.isTTY || !process.stdout.isTTY) {
283
- logger.warn(`${promptText} [non-interactive: skipping]`);
284
- return false;
285
- }
286
- const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
287
- return new Promise((resolve) => {
288
- rl.question(`${promptText} (y/N) `, (answer) => {
289
- rl.close();
290
- const normalized = (answer || '').trim().toLowerCase();
291
- resolve(normalized === 'y' || normalized === 'yes');
292
- });
293
- });
294
- }
295
- /**
296
- * Install pre-discovered index.yml directories (no discovery step here)
297
- */
298
- export async function installIndexYmlDirectories(cwd, directories, platforms, options) {
299
- const allResults = {
300
- installed: 0,
301
- updated: 0,
302
- skipped: 0,
303
- files: [],
304
- installedFiles: [],
305
- updatedFiles: []
306
- };
307
- const detected = await getDetectedPlatforms(cwd);
308
- const mergedPlatforms = Array.from(new Set([...(platforms || []), ...detected]));
309
- const cwdIdMap = await buildCwdIndexYmlIdMap(cwd, mergedPlatforms);
310
- const cwdAiIdMap = await buildCwdAiIndexYmlIdMap(cwd);
311
- const aiTracker = createPrefixTracker();
312
- const platformTracker = createPrefixTracker();
313
- for (const entry of directories) {
314
- const { isAi, universalSubdir, rest } = splitDirRel(entry.dirRelToRoot);
315
- const registryId = entry.registryId;
316
- if (isAi) {
317
- if (aiTracker.isCovered('AI', entry.dirRelToRoot))
318
- continue;
319
- const aiRoot = join(cwd, PLATFORM_DIRS.AI);
320
- let targetAbs = null;
321
- if (registryId) {
322
- const matches = cwdAiIdMap.get(registryId) || [];
323
- if (matches.length > 0) {
324
- targetAbs = matches[0]; // id-based
325
- }
326
- }
327
- if (!targetAbs)
328
- targetAbs = join(aiRoot, rest);
329
- const proceed = await shouldProceedWithOverwrite(targetAbs, registryId, options);
330
- if (!proceed)
331
- continue;
332
- if (!options.dryRun && await exists(targetAbs)) {
333
- await clearDirectory(targetAbs);
334
- }
335
- const targetRel = relative(aiRoot, targetAbs);
336
- await writeFilesToTarget(cwd, aiRoot, targetRel, entry.files, undefined, allResults);
337
- aiTracker.mark('AI', entry.dirRelToRoot);
338
- continue;
339
- }
340
- // Non-AI: universal subdir
341
- if (!universalSubdir || !Object.values(UNIVERSAL_SUBDIRS).includes(universalSubdir)) {
342
- logger.debug(`Skipping index.yml directory not under a universal subdir: ${entry.dirRelToRoot}`);
343
- continue;
344
- }
345
- for (const platform of mergedPlatforms) {
346
- if (platformTracker.isCovered(platform, entry.dirRelToRoot))
347
- continue;
348
- const def = getPlatformDefinition(platform);
349
- const subdirDef = def.subdirs[universalSubdir];
350
- if (!subdirDef)
351
- continue;
352
- const baseDir = join(cwd, def.rootDir, subdirDef.path);
353
- let targetAbs = null;
354
- if (registryId) {
355
- const matches = (cwdIdMap.get(registryId) || []).filter(e => e.platform === platform && e.universalSubdir === universalSubdir);
356
- if (matches.length > 0) {
357
- targetAbs = matches[0].dirAbsPath; // id-based
358
- }
359
- }
360
- if (!targetAbs)
361
- targetAbs = join(baseDir, rest);
362
- const proceed = await shouldProceedWithOverwrite(targetAbs, registryId, options);
363
- if (!proceed)
364
- continue;
365
- if (!options.dryRun && await exists(targetAbs)) {
366
- await clearDirectory(targetAbs);
367
- }
368
- const targetRel = relative(baseDir, targetAbs);
369
- await writeFilesToTarget(cwd, baseDir, targetRel, entry.files, subdirDef.writeExt, allResults);
370
- platformTracker.mark(platform, entry.dirRelToRoot);
371
- }
372
- }
373
- return allResults;
374
- }
375
- //# sourceMappingURL=index-yml-based-installer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-yml-based-installer.js","sourceRoot":"","sources":["../../src/utils/index-yml-based-installer.ts"],"names":[],"mappings":"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"}
@@ -1,124 +0,0 @@
1
- import { generateEntityId, isValidEntityId } from './entity-id.js';
2
- import { generateYamlKeyValue } from './yaml-frontmatter.js';
3
- export const GROUNDZERO_FORMULA_COMMENT = '# GroundZero formula';
4
- function detectNewline(text) {
5
- return text.includes('\r\n') ? '\r\n' : '\n';
6
- }
7
- /**
8
- * Update index.yml content to ensure GroundZero comment, formula name, and a valid formula.id.
9
- * Preserves all other lines and ordering.
10
- */
11
- export function updateIndexYml(content, opts = {}) {
12
- const nl = detectNewline(content);
13
- const lines = content.split(nl);
14
- // Find the first line that exactly contains 'formula:' (ignoring surrounding whitespace)
15
- let formulaIndex = -1;
16
- let formulaIndent = '';
17
- for (let i = 0; i < lines.length; i++) {
18
- const line = lines[i];
19
- const trimmed = line.trim();
20
- if (trimmed === 'formula:') {
21
- formulaIndex = i;
22
- formulaIndent = line.slice(0, line.indexOf('f'));
23
- break;
24
- }
25
- }
26
- if (formulaIndex === -1) {
27
- // No formula block; nothing to enforce for id without creating new structure
28
- return { updated: false, content };
29
- }
30
- const childIndent = formulaIndent + ' ';
31
- // Ensure comment directly above formula
32
- let updated = false;
33
- if (!(formulaIndex > 0 && lines[formulaIndex - 1].trim() === GROUNDZERO_FORMULA_COMMENT)) {
34
- lines.splice(formulaIndex, 0, GROUNDZERO_FORMULA_COMMENT);
35
- formulaIndex++;
36
- updated = true;
37
- }
38
- // Identify block bounds: contiguous childIndent lines after 'formula:'
39
- let blockStart = formulaIndex + 1;
40
- let blockEnd = blockStart;
41
- while (blockEnd < lines.length && lines[blockEnd].startsWith(childIndent)) {
42
- blockEnd++;
43
- }
44
- // Handle name update if provided
45
- if (opts.name !== undefined) {
46
- // Search for name line within the block
47
- let nameFoundAt = -1;
48
- for (let i = blockStart; i < blockEnd; i++) {
49
- const trimmed = lines[i].trim();
50
- if (trimmed.startsWith('name:')) {
51
- nameFoundAt = i;
52
- break;
53
- }
54
- }
55
- if (nameFoundAt !== -1) {
56
- const newLine = generateYamlKeyValue('name', opts.name, childIndent);
57
- if (lines[nameFoundAt] !== newLine) {
58
- lines[nameFoundAt] = newLine;
59
- updated = true;
60
- }
61
- }
62
- else {
63
- // Insert name line at the beginning of the block
64
- lines.splice(blockStart, 0, generateYamlKeyValue('name', opts.name, childIndent));
65
- blockEnd++; // Adjust block end since we added a line
66
- updated = true;
67
- }
68
- }
69
- // Search for id line within the block
70
- let idFoundAt = -1;
71
- let existingId = null;
72
- for (let i = blockStart; i < blockEnd; i++) {
73
- const trimmed = lines[i].trim();
74
- if (trimmed.startsWith('id:')) {
75
- idFoundAt = i;
76
- const after = trimmed.slice('id:'.length).trim();
77
- existingId = after.length ? after : null;
78
- break;
79
- }
80
- }
81
- const needReset = opts.resetId === true;
82
- const needEnsure = opts.ensureId === true;
83
- if (needReset || needEnsure) {
84
- let effectiveId = null;
85
- if (needReset) {
86
- effectiveId = generateEntityId();
87
- }
88
- else {
89
- effectiveId = existingId && isValidEntityId(existingId) ? existingId : generateEntityId();
90
- }
91
- if (idFoundAt !== -1) {
92
- const newLine = generateYamlKeyValue('id', effectiveId, childIndent);
93
- if (lines[idFoundAt] !== newLine) {
94
- lines[idFoundAt] = newLine;
95
- updated = true;
96
- }
97
- }
98
- else {
99
- lines.splice(blockEnd, 0, generateYamlKeyValue('id', effectiveId, childIndent));
100
- updated = true;
101
- }
102
- }
103
- if (!updated)
104
- return { updated: false, content };
105
- return { updated: true, content: lines.join(nl) };
106
- }
107
- /**
108
- * Generate complete index.yml content with GroundZero comment and formula block
109
- */
110
- export function buildIndexYmlContent(marker) {
111
- const lines = [GROUNDZERO_FORMULA_COMMENT];
112
- if (marker.formula?.name) {
113
- lines.push('formula:');
114
- lines.push(generateYamlKeyValue('name', marker.formula.name, ' '));
115
- if (marker.formula.id) {
116
- lines.push(generateYamlKeyValue('id', marker.formula.id, ' '));
117
- }
118
- if (marker.formula.platformSpecific) {
119
- lines.push(' platformSpecific: true');
120
- }
121
- }
122
- return lines.join('\n');
123
- }
124
- //# sourceMappingURL=index-yml.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-yml.js","sourceRoot":"","sources":["../../src/utils/index-yml.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- // Legacy frontmatter utilities have been removed
3
- //# sourceMappingURL=md-frontmatter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"md-frontmatter.js","sourceRoot":"","sources":["../../src/utils/md-frontmatter.ts"],"names":[],"mappings":";AAAA,iDAAiD"}
@@ -1,92 +0,0 @@
1
- import { join } from 'path';
2
- import yaml from 'js-yaml';
3
- import { ensureDir, exists, readTextFile, writeTextFile, remove, listDirectories } from './fs.js';
4
- import { getPackagePath, getPackageVersionPath } from '../core/directory.js';
5
- import { logger } from './logger.js';
6
- import { extractWorkspaceHashFromVersion } from './version-generator.js';
7
- export const PACKAGE_LINK_FILENAME = 'package.link.yml';
8
- export function getPackageLinkPath(packageName, version) {
9
- return join(getPackageVersionPath(packageName, version), PACKAGE_LINK_FILENAME);
10
- }
11
- export async function writePackageLink(packageName, version, metadata) {
12
- const versionPath = getPackageVersionPath(packageName, version);
13
- await ensureDir(versionPath);
14
- const linkPath = getPackageLinkPath(packageName, version);
15
- const serialized = yaml.dump({
16
- sourcePath: metadata.sourcePath
17
- }, {
18
- lineWidth: 120,
19
- sortKeys: true
20
- });
21
- await writeTextFile(linkPath, serialized);
22
- logger.debug(`Updated package link metadata`, { packageName, version, linkPath });
23
- }
24
- export async function readPackageLink(packageName, version) {
25
- const linkPath = getPackageLinkPath(packageName, version);
26
- if (!(await exists(linkPath))) {
27
- return null;
28
- }
29
- try {
30
- const content = await readTextFile(linkPath);
31
- const parsed = yaml.load(content);
32
- const metadata = sanitizeLinkMetadata(parsed, version);
33
- return metadata;
34
- }
35
- catch (error) {
36
- logger.warn(`Failed to read package link for ${packageName}@${version}: ${error}`);
37
- return null;
38
- }
39
- }
40
- export async function listPackageLinks(packageName) {
41
- const packagePath = getPackagePath(packageName);
42
- if (!(await exists(packagePath))) {
43
- return [];
44
- }
45
- const versions = await listDirectories(packagePath).catch(() => []);
46
- const entries = [];
47
- for (const version of versions) {
48
- const metadata = await readPackageLink(packageName, version);
49
- if (!metadata) {
50
- continue;
51
- }
52
- const linkPath = getPackageLinkPath(packageName, version);
53
- entries.push({ version, path: linkPath, metadata });
54
- }
55
- return entries.sort((a, b) => a.version.localeCompare(b.version));
56
- }
57
- export async function deletePackageLink(packageName, version) {
58
- const versionPath = getPackageVersionPath(packageName, version);
59
- try {
60
- await remove(versionPath);
61
- }
62
- catch (error) {
63
- logger.warn(`Failed to delete package link directory ${versionPath}: ${error}`);
64
- }
65
- }
66
- export async function deleteWorkspaceLinks(packageName, workspaceHash, options = {}) {
67
- const normalizedHash = workspaceHash.toLowerCase();
68
- const links = await listPackageLinks(packageName);
69
- for (const entry of links) {
70
- if (options.keepVersion && entry.version === options.keepVersion) {
71
- continue;
72
- }
73
- const entryWorkspaceHash = extractWorkspaceHashFromVersion(entry.version);
74
- if (!entryWorkspaceHash || entryWorkspaceHash.toLowerCase() !== normalizedHash) {
75
- continue;
76
- }
77
- await deletePackageLink(packageName, entry.version);
78
- }
79
- }
80
- function sanitizeLinkMetadata(raw, fallbackVersion) {
81
- if (!raw || typeof raw !== 'object') {
82
- return null;
83
- }
84
- const sourcePath = typeof raw.sourcePath === 'string' ? raw.sourcePath : '';
85
- if (!sourcePath) {
86
- return null;
87
- }
88
- return {
89
- sourcePath
90
- };
91
- }
92
- //# sourceMappingURL=package-link-yml.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-link-yml.js","sourceRoot":"","sources":["../../src/utils/package-link-yml.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";
2
- //# sourceMappingURL=platform-discovery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"platform-discovery.js","sourceRoot":"","sources":["../../src/utils/platform-discovery.ts"],"names":[],"mappings":""}