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,62 +1,63 @@
1
- import { exists, isDirectory } from "../../utils/fs.js";
2
- import { discoverMdFiles } from "./md-files-discovery.js";
3
- import { PLATFORM_AI, PLATFORM_DIRS } from "../../constants/index.js";
4
- import { getPlatformDefinition } from "../platforms.js";
5
- import { mapPlatformFileToUniversal } from "../../utils/platform-mapper.js";
6
- import { join } from "path";
7
- export async function obtainSourceDirAndRegistryPath(file, platform, registryPathPrefix) {
8
- const sourceDir = platform === PLATFORM_AI ? PLATFORM_DIRS.AI : getPlatformDefinition(platform).rootDir;
9
- let registryPath;
10
- if (platform !== "ai") {
11
- // Universal file from platform directory - use the mapper to get universal path
1
+ import { join } from 'path';
2
+ import { getPlatformDefinition } from '../platforms.js';
3
+ import { mapPlatformFileToUniversal } from '../../utils/platform-mapper.js';
4
+ import { exists, isDirectory, readTextFile } from '../../utils/fs.js';
5
+ import { getFileMtime, findFilesByExtension } from '../../utils/file-processing.js';
6
+ import { calculateFileHash } from '../../utils/hash-utils.js';
7
+ import { logger } from '../../utils/logger.js';
8
+ import { DIR_PATTERNS } from '../../constants/index.js';
9
+ export async function obtainSourceDirAndRegistryPath(file, context = {}) {
10
+ const fallbackPath = context.registryPathPrefix
11
+ ? join(context.registryPathPrefix, file.relativePath)
12
+ : file.relativePath;
13
+ if (context.platform) {
12
14
  const mapping = mapPlatformFileToUniversal(file.fullPath);
13
- if (mapping) {
14
- registryPath = join(mapping.subdir, mapping.relPath);
15
- }
16
- else {
17
- // Fallback to old logic
18
- registryPath = registryPathPrefix
19
- ? join(registryPathPrefix, file.relativePath)
20
- : file.relativePath;
21
- }
15
+ const registryPath = mapping
16
+ ? join(DIR_PATTERNS.OPENPACKAGE, mapping.subdir, mapping.relPath)
17
+ : fallbackPath;
18
+ const sourceDir = context.sourceDirLabel ?? getPlatformDefinition(context.platform).rootDir;
19
+ return { sourceDir, registryPath };
22
20
  }
23
- else {
24
- // Platform-specific file or directory mode - use normal registry path logic
25
- registryPath = registryPathPrefix
26
- ? join(registryPathPrefix, file.relativePath)
27
- : file.relativePath;
28
- }
29
- return { sourceDir, registryPath };
21
+ return {
22
+ sourceDir: context.sourceDirLabel ?? (context.registryPathPrefix || 'workspace'),
23
+ registryPath: fallbackPath
24
+ };
30
25
  }
31
- export async function discoverFiles(rootDir, packageName, platform, registryPathPrefix) {
26
+ export async function discoverFiles(rootDir, packageName, context) {
32
27
  if (!(await exists(rootDir)) || !(await isDirectory(rootDir))) {
33
28
  return [];
34
29
  }
35
- const mdFiles = await discoverMdFiles(rootDir, packageName, platform, registryPathPrefix);
36
- return mdFiles;
30
+ const fileExtensions = context.fileExtensions ?? [];
31
+ const files = await findFilesByExtension(rootDir, fileExtensions, rootDir, {
32
+ excludeDirs: context.excludeDirs
33
+ });
34
+ const processPromises = files.map(async (file) => processFileForDiscovery(file, packageName, context));
35
+ const results = await Promise.all(processPromises);
36
+ return results.filter((result) => result !== null);
37
+ }
38
+ async function processFileForDiscovery(file, packageName, context) {
39
+ try {
40
+ const content = await readTextFile(file.fullPath);
41
+ try {
42
+ const mtime = await getFileMtime(file.fullPath);
43
+ const contentHash = await calculateFileHash(content);
44
+ const { sourceDir, registryPath } = await obtainSourceDirAndRegistryPath(file, context);
45
+ return {
46
+ fullPath: file.fullPath,
47
+ relativePath: file.relativePath,
48
+ sourceDir,
49
+ registryPath,
50
+ mtime,
51
+ contentHash
52
+ };
53
+ }
54
+ catch (error) {
55
+ logger.warn(`Failed to process file metadata for ${file.relativePath}: ${error}`);
56
+ }
57
+ }
58
+ catch (error) {
59
+ logger.warn(`Failed to read ${file.relativePath}: ${error}`);
60
+ }
61
+ return null;
37
62
  }
38
- /**
39
- * Discover markdown files in a directory with specified patterns and inclusion rules
40
- */
41
- // export async function discoverFiles(
42
- // directoryPath: string,
43
- // packageName: string,
44
- // platform: Platformish,
45
- // registryPathPrefix: string = '',
46
- // ): Promise<DiscoveredFile[]> {
47
- // if (!(await exists(directoryPath)) || !(await isDirectory(directoryPath))) {
48
- // return [];
49
- // }
50
- // // Find files with the specified patterns
51
- // const allFiles: Array<{ fullPath: string; relativePath: string }> = [];
52
- // // Recursive search using findFilesByExtension
53
- // const files = await findFilesByExtension(directoryPath, filePatterns);
54
- // allFiles.push(...files);
55
- // // Process files in parallel using the extracted helper
56
- // const processPromises = allFiles.map(async (file) =>
57
- // processMdFileForDiscovery(file, packageName, platform, registryPathPrefix)
58
- // );
59
- // const results = await Promise.all(processPromises);
60
- // return results.filter((result): result is DiscoveredFile => result !== null);
61
- // }
62
63
  //# sourceMappingURL=file-discovery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-discovery.js","sourceRoot":"","sources":["../../../src/core/discovery/file-discovery.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAA;AAC3E,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,IAAgD,EAChD,QAAqB,EACrB,kBAA0B;IAG1B,MAAM,SAAS,GAAG,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;IAGxG,IAAI,YAAoB,CAAA;IACxB,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,gFAAgF;QAChF,MAAM,OAAO,GAAG,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACzD,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QACtD,CAAC;aAAM,CAAC;YACN,wBAAwB;YACxB,YAAY,GAAG,kBAAkB;gBAC/B,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,CAAC;gBAC7C,CAAC,CAAC,IAAI,CAAC,YAAY,CAAA;QACvB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,4EAA4E;QAC5E,YAAY,GAAG,kBAAkB;YAC/B,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,CAAC;YAC7C,CAAC,CAAC,IAAI,CAAC,YAAY,CAAA;IACvB,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAA;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,WAAmB,EACnB,QAAqB,EACrB,kBAA0B;IAE1B,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAC9D,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,eAAe,CACnC,OAAO,EACP,WAAW,EACX,QAAQ,EACR,kBAAkB,CACnB,CAAA;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,uCAAuC;AACvC,2BAA2B;AAC3B,yBAAyB;AACzB,2BAA2B;AAC3B,qCAAqC;AACrC,iCAAiC;AAEjC,iFAAiF;AACjF,iBAAiB;AACjB,MAAM;AAEN,8CAA8C;AAC9C,4EAA4E;AAE5E,mDAAmD;AACnD,2EAA2E;AAC3E,6BAA6B;AAE7B,4DAA4D;AAC5D,yDAAyD;AACzD,iFAAiF;AACjF,OAAO;AAEP,wDAAwD;AACxD,kFAAkF;AAClF,IAAI"}
1
+ {"version":3,"file":"file-discovery.js","sourceRoot":"","sources":["../../../src/core/discovery/file-discovery.ts"],"names":[],"mappings":"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"}
@@ -1,27 +1,34 @@
1
1
  import { join } from 'path';
2
- import { PLATFORM_AI, PLATFORM_DIRS } from '../../constants/index.js';
3
2
  import { exists, isDirectory } from '../../utils/fs.js';
4
- import { getPlatformDefinition, isUniversalSubdirPath } from '../../core/platforms.js';
5
- // Import the shared type
6
- import { buildPlatformSearchConfig } from './platform-discovery.js';
3
+ import { getPlatformDefinition, getDetectedPlatforms, isUniversalSubdirPath } from '../../core/platforms.js';
7
4
  import { discoverFiles } from './file-discovery.js';
8
5
  import { normalizePathForProcessing } from '../../utils/path-normalization.js';
6
+ import { WORKSPACE_DISCOVERY_EXCLUDES } from '../../constants/workspace.js';
7
+ import { DIR_PATTERNS } from '../../constants/index.js';
9
8
  /**
10
9
  * Process platform subdirectories (rules/commands/agents) within a base directory
11
10
  * Common logic shared between different discovery methods
12
11
  */
13
- async function discoverPlatformFiles(config, packageName) {
14
- // Handle AI directory separately - does not contain platform subdirectory structure
15
- if (config.platform === PLATFORM_AI) {
16
- return discoverFiles(PLATFORM_DIRS.AI, packageName, config.platform, PLATFORM_DIRS.AI);
17
- }
18
- const definition = getPlatformDefinition(config.platform);
12
+ async function discoverPlatformFiles(cwd, platform, packageName) {
13
+ const definition = getPlatformDefinition(platform);
19
14
  const allFiles = [];
20
15
  // Process each universal subdir that this platform supports
21
16
  for (const [subdirName, subdirDef] of Object.entries(definition.subdirs)) {
22
- const subdirPath = join(config.rootDir, subdirDef.path);
17
+ if (!subdirDef) {
18
+ continue;
19
+ }
20
+ const subdirPath = join(cwd, definition.rootDir, subdirDef.path);
21
+ const allowedExts = subdirDef.exts;
22
+ if (allowedExts && allowedExts.length === 0) {
23
+ continue;
24
+ }
23
25
  if (await exists(subdirPath) && await isDirectory(subdirPath)) {
24
- const files = await discoverFiles(subdirPath, packageName, config.platform, subdirName);
26
+ const files = await discoverFiles(subdirPath, packageName, {
27
+ platform,
28
+ registryPathPrefix: `${DIR_PATTERNS.OPENPACKAGE}/${subdirName}`,
29
+ sourceDirLabel: platform,
30
+ fileExtensions: allowedExts
31
+ });
25
32
  allFiles.push(...files);
26
33
  }
27
34
  }
@@ -35,8 +42,6 @@ function dedupeDiscoveredFilesPreferUniversal(files) {
35
42
  // Normalize registry path to use forward slashes for consistent comparison
36
43
  const normalizedPath = normalizePathForProcessing(file.registryPath);
37
44
  if (isUniversalSubdirPath(normalizedPath))
38
- return 3;
39
- if (normalizedPath.startsWith(`${PLATFORM_DIRS.AI}/`) || normalizedPath === PLATFORM_DIRS.AI)
40
45
  return 2;
41
46
  return 1;
42
47
  };
@@ -56,15 +61,25 @@ function dedupeDiscoveredFilesPreferUniversal(files) {
56
61
  /**
57
62
  * Unified file discovery function that searches platform-specific directories
58
63
  */
64
+ async function discoverWorkspaceFiles(cwd, packageName) {
65
+ return await discoverFiles(cwd, packageName, {
66
+ registryPathPrefix: '',
67
+ sourceDirLabel: 'workspace',
68
+ excludeDirs: WORKSPACE_DISCOVERY_EXCLUDES,
69
+ fileExtensions: []
70
+ });
71
+ }
59
72
  export async function discoverPlatformFilesUnified(cwd, packageName) {
60
- const platformConfigs = await buildPlatformSearchConfig(cwd);
73
+ const detectedPlatforms = await getDetectedPlatforms(cwd);
61
74
  const allDiscoveredFiles = [];
62
75
  // Process all platform configurations in parallel
63
- const discoveryPromises = platformConfigs.map(async (config) => {
64
- return discoverPlatformFiles(config, packageName);
76
+ const discoveryPromises = detectedPlatforms.map(async (platform) => {
77
+ return discoverPlatformFiles(cwd, platform, packageName);
65
78
  });
66
79
  const discoveredFiles = await Promise.all(discoveryPromises);
67
80
  allDiscoveredFiles.push(...discoveredFiles.flat());
81
+ const workspaceDiscovered = await discoverWorkspaceFiles(cwd, packageName);
82
+ allDiscoveredFiles.push(...workspaceDiscovered);
68
83
  return dedupeDiscoveredFilesPreferUniversal(allDiscoveredFiles);
69
84
  }
70
85
  //# sourceMappingURL=platform-files-discovery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform-files-discovery.js","sourceRoot":"","sources":["../../../src/core/discovery/platform-files-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,yBAAyB,CAAC;AAGjC,yBAAyB;AACzB,OAAO,EAAE,yBAAyB,EAAwB,MAAM,yBAAyB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAE/E;;;GAGG;AACH,KAAK,UAAU,qBAAqB,CAClC,MAA4B,EAC5B,WAAmB;IAGnB,oFAAoF;IACpF,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO,aAAa,CAClB,aAAa,CAAC,EAAE,EAChB,WAAW,EACX,MAAM,CAAC,QAAQ,EACf,aAAa,CAAC,EAAE,CACjB,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAqB,EAAE,CAAC;IAEtC,4DAA4D;IAC5D,KAAK,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QAExD,IAAI,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9D,MAAM,KAAK,GAAG,MAAM,aAAa,CAC/B,UAAU,EACV,WAAW,EACX,MAAM,CAAC,QAAQ,EACf,UAAU,CACX,CAAC;YACF,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,oCAAoC,CAAC,KAAuB;IACnE,MAAM,UAAU,GAAG,CAAC,IAAoB,EAAU,EAAE;QAClD,2EAA2E;QAC3E,MAAM,cAAc,GAAG,0BAA0B,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAErE,IAAI,qBAAqB,CAAC,cAAc,CAAC;YAAE,OAAO,CAAC,CAAC;QACpD,IAAI,cAAc,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,EAAE,GAAG,CAAC,IAAI,cAAc,KAAK,aAAa,CAAC,EAAE;YAAE,OAAO,CAAC,CAAC;QACvG,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC7B,SAAS;QACX,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,GAAW,EAAE,WAAmB;IACjF,MAAM,eAAe,GAAG,MAAM,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAC7D,MAAM,kBAAkB,GAAqB,EAAE,CAAC;IAEhD,kDAAkD;IAClD,MAAM,iBAAiB,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAC7D,OAAO,qBAAqB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC7D,kBAAkB,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;IAEnD,OAAO,oCAAoC,CAAC,kBAAkB,CAAC,CAAC;AAClE,CAAC"}
1
+ {"version":3,"file":"platform-files-discovery.js","sourceRoot":"","sources":["../../../src/core/discovery/platform-files-discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,199 @@
1
+ import { ensureRegistryDirectories, listPackageVersions } from '../directory.js';
2
+ import { createWorkspacePackageYml } from '../../utils/package-management.js';
3
+ import { getLocalPackageYmlPath } from '../../utils/paths.js';
4
+ import { parsePackageYml } from '../../utils/package-yml.js';
5
+ import { withOperationErrorHandling } from '../../utils/error-handling.js';
6
+ import { UserCancellationError } from '../../utils/errors.js';
7
+ import { extractPackagesFromConfig } from '../../utils/install-helpers.js';
8
+ import { isRootPackage } from '../../utils/paths.js';
9
+ import { logger } from '../../utils/logger.js';
10
+ import { normalizePlatforms } from '../../utils/platform-mapper.js';
11
+ import { resolvePlatforms } from './platform-resolution.js';
12
+ import { runInstallPipeline } from './install-pipeline.js';
13
+ import { displayInstallationSummary } from './install-reporting.js';
14
+ import { planConflictsForPackage } from '../../utils/index-based-installer.js';
15
+ import { safePrompts } from '../../utils/prompts.js';
16
+ import { resolveVersionRange, isExactVersion } from '../../utils/version-ranges.js';
17
+ export async function runBulkInstallPipeline(targetDir, options) {
18
+ const cwd = process.cwd();
19
+ await ensureRegistryDirectories();
20
+ await createWorkspacePackageYml(cwd);
21
+ const packageYmlPath = getLocalPackageYmlPath(cwd);
22
+ const cwdConfig = await withOperationErrorHandling(() => parsePackageYml(packageYmlPath), 'parse package.yml', packageYmlPath);
23
+ const allPackages = extractPackagesFromConfig(cwdConfig);
24
+ const packagesToInstall = [];
25
+ const skippedRootPackages = [];
26
+ for (const pkg of allPackages) {
27
+ if (await isRootPackage(cwd, pkg.name)) {
28
+ skippedRootPackages.push(pkg);
29
+ console.log(`⚠️ Skipping ${pkg.name} - it matches your project's root package name`);
30
+ }
31
+ else {
32
+ packagesToInstall.push(pkg);
33
+ }
34
+ }
35
+ if (packagesToInstall.length === 0) {
36
+ if (skippedRootPackages.length > 0) {
37
+ console.log('✓ All packages in package.yml were skipped (matched root package)');
38
+ console.log('\nTips:');
39
+ console.log('• Root packages cannot be installed as dependencies');
40
+ console.log('• Use "opkg install <package-name>" to install external packages');
41
+ console.log('• Use "opkg save" to create a WIP copy of your root package in the registry');
42
+ }
43
+ else {
44
+ console.log('⚠️ No packages found in package.yml');
45
+ console.log('\nTips:');
46
+ console.log('• Add packages to the "packages" array in package.yml');
47
+ console.log('• Add development packages to the "dev-packages" array in package.yml');
48
+ console.log('• Use "opkg install <package-name>" to install a specific package');
49
+ }
50
+ return { success: true, data: { installed: 0, skipped: skippedRootPackages.length } };
51
+ }
52
+ console.log(`✓ Installing ${packagesToInstall.length} packages from package.yml:`);
53
+ packagesToInstall.forEach(pkg => {
54
+ const prefix = pkg.isDev ? '[dev] ' : '';
55
+ const label = pkg.version ? `${pkg.name}@${pkg.version}` : pkg.name;
56
+ console.log(` • ${prefix}${label}`);
57
+ });
58
+ if (skippedRootPackages.length > 0) {
59
+ console.log(` • ${skippedRootPackages.length} packages skipped (matched root package)`);
60
+ }
61
+ console.log('');
62
+ const interactive = Boolean(process.stdin.isTTY && process.stdout.isTTY);
63
+ const normalizedPlatforms = normalizePlatforms(options.platforms);
64
+ const resolvedPlatforms = await resolvePlatforms(cwd, normalizedPlatforms, { interactive });
65
+ let totalInstalled = 0;
66
+ let totalSkipped = 0;
67
+ const results = [];
68
+ const aggregateWarnings = new Set();
69
+ for (const pkg of packagesToInstall) {
70
+ try {
71
+ const label = pkg.version ? `${pkg.name}@${pkg.version}` : pkg.name;
72
+ const baseConflictDecisions = options.conflictDecisions
73
+ ? { ...options.conflictDecisions }
74
+ : undefined;
75
+ const installOptions = {
76
+ ...options,
77
+ dev: pkg.isDev,
78
+ resolvedPlatforms,
79
+ conflictDecisions: baseConflictDecisions
80
+ };
81
+ let conflictPlanningVersion = pkg.version;
82
+ if (pkg.version && !isExactVersion(pkg.version)) {
83
+ try {
84
+ const localVersions = await listPackageVersions(pkg.name);
85
+ conflictPlanningVersion = resolveVersionRange(pkg.version, localVersions) ?? undefined;
86
+ }
87
+ catch {
88
+ conflictPlanningVersion = undefined;
89
+ }
90
+ }
91
+ if (conflictPlanningVersion) {
92
+ try {
93
+ const conflicts = await planConflictsForPackage(cwd, pkg.name, conflictPlanningVersion, resolvedPlatforms);
94
+ if (conflicts.length > 0) {
95
+ const shouldPrompt = interactive &&
96
+ (!installOptions.conflictStrategy || installOptions.conflictStrategy === 'ask');
97
+ if (shouldPrompt) {
98
+ console.log(`\n⚠️ Detected ${conflicts.length} potential file conflict${conflicts.length === 1 ? '' : 's'} for ${label}.`);
99
+ const preview = conflicts.slice(0, 5);
100
+ for (const conflict of preview) {
101
+ const ownerInfo = conflict.ownerPackage ? `owned by ${conflict.ownerPackage}` : 'already exists locally';
102
+ console.log(` • ${conflict.relPath} (${ownerInfo})`);
103
+ }
104
+ if (conflicts.length > preview.length) {
105
+ console.log(` • ... and ${conflicts.length - preview.length} more`);
106
+ }
107
+ const selection = await safePrompts({
108
+ type: 'select',
109
+ name: 'strategy',
110
+ message: `Choose conflict handling for ${label}:`,
111
+ choices: [
112
+ { title: 'Keep both (rename existing files)', value: 'keep-both' },
113
+ { title: 'Overwrite existing files', value: 'overwrite' },
114
+ { title: 'Skip conflicting files', value: 'skip' },
115
+ { title: 'Review individually', value: 'ask' }
116
+ ],
117
+ initial: installOptions.conflictStrategy === 'ask' ? 3 : 0
118
+ });
119
+ const chosenStrategy = selection.strategy;
120
+ installOptions.conflictStrategy = chosenStrategy;
121
+ if (chosenStrategy === 'ask') {
122
+ const decisions = {};
123
+ for (const conflict of conflicts) {
124
+ const detail = await safePrompts({
125
+ type: 'select',
126
+ name: 'decision',
127
+ message: `${conflict.relPath}${conflict.ownerPackage ? ` (owned by ${conflict.ownerPackage})` : ''}:`,
128
+ choices: [
129
+ { title: 'Keep both (rename existing)', value: 'keep-both' },
130
+ { title: 'Overwrite existing', value: 'overwrite' },
131
+ { title: 'Skip (keep existing)', value: 'skip' }
132
+ ],
133
+ initial: 0
134
+ });
135
+ const decisionValue = detail.decision;
136
+ decisions[conflict.relPath] = decisionValue;
137
+ }
138
+ installOptions.conflictDecisions = decisions;
139
+ }
140
+ }
141
+ else if (!interactive && (!installOptions.conflictStrategy || installOptions.conflictStrategy === 'ask')) {
142
+ logger.warn(`Detected ${conflicts.length} potential conflict${conflicts.length === 1 ? '' : 's'} for ${label}, but running in non-interactive mode. Conflicting files will be skipped unless '--conflicts' is provided.`);
143
+ }
144
+ }
145
+ }
146
+ catch (planError) {
147
+ logger.warn(`Failed to evaluate conflicts for ${label}: ${planError}`);
148
+ }
149
+ }
150
+ console.log(`\n🔧 Installing ${pkg.isDev ? '[dev] ' : ''}${label}...`);
151
+ const result = await runInstallPipeline({
152
+ ...installOptions,
153
+ packageName: pkg.name,
154
+ version: pkg.version,
155
+ targetDir
156
+ });
157
+ if (result.success) {
158
+ totalInstalled++;
159
+ results.push({ name: pkg.name, success: true });
160
+ console.log(`✓ Successfully installed ${pkg.name}`);
161
+ if (result.warnings && result.warnings.length > 0) {
162
+ result.warnings.forEach(warning => aggregateWarnings.add(warning));
163
+ }
164
+ }
165
+ else {
166
+ totalSkipped++;
167
+ results.push({ name: pkg.name, success: false, error: result.error });
168
+ console.log(`❌ Failed to install ${pkg.name}: ${result.error}`);
169
+ }
170
+ }
171
+ catch (error) {
172
+ if (error instanceof UserCancellationError) {
173
+ throw error;
174
+ }
175
+ totalSkipped++;
176
+ results.push({ name: pkg.name, success: false, error: String(error) });
177
+ console.log(`❌ Failed to install ${pkg.name}: ${error}`);
178
+ }
179
+ }
180
+ displayInstallationSummary(totalInstalled, totalSkipped, packagesToInstall.length, results);
181
+ if (aggregateWarnings.size > 0) {
182
+ console.log('\n⚠️ Warnings during installation:');
183
+ aggregateWarnings.forEach(warning => {
184
+ console.log(` • ${warning}`);
185
+ });
186
+ }
187
+ const allSuccessful = totalSkipped === 0;
188
+ return {
189
+ success: allSuccessful,
190
+ data: {
191
+ installed: totalInstalled,
192
+ skipped: totalSkipped,
193
+ results
194
+ },
195
+ error: allSuccessful ? undefined : `${totalSkipped} packages failed to install`,
196
+ warnings: totalSkipped > 0 ? [`${totalSkipped} packages failed to install`] : undefined
197
+ };
198
+ }
199
+ //# sourceMappingURL=bulk-install-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk-install-pipeline.js","sourceRoot":"","sources":["../../../src/core/install/bulk-install-pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ import * as semver from 'semver';
2
+ import { exists } from '../../utils/fs.js';
3
+ import { getLocalPackageYmlPath } from '../../utils/paths.js';
4
+ import { parsePackageYml } from '../../utils/package-yml.js';
5
+ import { createCaretRange, parseVersionRange } from '../../utils/version-ranges.js';
6
+ import { arePackageNamesEquivalent } from '../../utils/package-name.js';
7
+ export async function determineCanonicalInstallPlan(args) {
8
+ const normalizedCliSpec = args.cliSpec?.trim() || undefined;
9
+ const existing = await findCanonicalDependency(args.cwd, args.packageName);
10
+ const target = args.devFlag ? 'dev-packages' : 'packages';
11
+ if (existing) {
12
+ const canonicalConstraint = parseConstraintOrThrow('package', existing.range, args.packageName);
13
+ if (normalizedCliSpec) {
14
+ const cliConstraint = parseConstraintOrThrow('cli', normalizedCliSpec, args.packageName);
15
+ if (!isRangeSubset(cliConstraint.resolverRange, canonicalConstraint.resolverRange)) {
16
+ throw buildCanonicalConflictError(args.packageName, cliConstraint.displayRange, existing.range);
17
+ }
18
+ return {
19
+ effectiveRange: canonicalConstraint.resolverRange,
20
+ dependencyState: 'existing',
21
+ canonicalRange: existing.range,
22
+ canonicalTarget: existing.target,
23
+ persistDecision: { type: 'none' },
24
+ compatibilityMessage: `Using version range from package.yml (${existing.range}); CLI spec '${cliConstraint.displayRange}' is compatible.`
25
+ };
26
+ }
27
+ return {
28
+ effectiveRange: canonicalConstraint.resolverRange,
29
+ dependencyState: 'existing',
30
+ canonicalRange: existing.range,
31
+ canonicalTarget: existing.target,
32
+ persistDecision: { type: 'none' }
33
+ };
34
+ }
35
+ if (normalizedCliSpec) {
36
+ const cliConstraint = parseConstraintOrThrow('cli', normalizedCliSpec, args.packageName);
37
+ return {
38
+ effectiveRange: cliConstraint.resolverRange,
39
+ dependencyState: 'fresh',
40
+ persistDecision: {
41
+ type: 'explicit',
42
+ target,
43
+ range: cliConstraint.displayRange
44
+ }
45
+ };
46
+ }
47
+ return {
48
+ effectiveRange: '*',
49
+ dependencyState: 'fresh',
50
+ persistDecision: {
51
+ type: 'derive',
52
+ target,
53
+ mode: 'caret-or-exact'
54
+ }
55
+ };
56
+ }
57
+ export async function findCanonicalDependency(cwd, packageName) {
58
+ const packageYmlPath = getLocalPackageYmlPath(cwd);
59
+ if (!(await exists(packageYmlPath))) {
60
+ return null;
61
+ }
62
+ try {
63
+ const config = await parsePackageYml(packageYmlPath);
64
+ const match = locateDependencyInArray(config.packages, packageName, 'packages') ||
65
+ locateDependencyInArray(config['dev-packages'], packageName, 'dev-packages');
66
+ return match;
67
+ }
68
+ catch (error) {
69
+ const detail = error instanceof Error ? error.message : String(error);
70
+ throw new Error(`Failed to parse ${packageYmlPath}: ${detail}`);
71
+ }
72
+ }
73
+ function locateDependencyInArray(deps, packageName, target) {
74
+ if (!deps) {
75
+ return null;
76
+ }
77
+ const entry = deps.find(dep => arePackageNamesEquivalent(dep.name, packageName));
78
+ if (!entry) {
79
+ return null;
80
+ }
81
+ if (!entry.version || !entry.version.trim()) {
82
+ throw new Error(`Dependency '${packageName}' in .openpackage/package.yml must declare a version range. Edit the file and try again.`);
83
+ }
84
+ return {
85
+ range: entry.version.trim(),
86
+ target
87
+ };
88
+ }
89
+ function parseConstraintOrThrow(source, raw, packageName) {
90
+ try {
91
+ const parsed = parseVersionRange(raw);
92
+ return { resolverRange: parsed.range, displayRange: parsed.original };
93
+ }
94
+ catch (error) {
95
+ const message = error instanceof Error ? error.message : String(error);
96
+ if (source === 'cli') {
97
+ throw new Error(`Invalid version spec '${raw}' provided via CLI for '${packageName}'. ${message}. Adjust the CLI input and try again.`);
98
+ }
99
+ throw new Error(`Dependency '${packageName}' in .openpackage/package.yml has invalid version '${raw}'. ${message}. Edit the file and try again.`);
100
+ }
101
+ }
102
+ function isRangeSubset(candidate, canonical) {
103
+ try {
104
+ return semver.subset(candidate, canonical, { includePrerelease: true });
105
+ }
106
+ catch {
107
+ return false;
108
+ }
109
+ }
110
+ function buildCanonicalConflictError(packageName, cliSpec, canonicalRange) {
111
+ return new Error(`Requested '${packageName}@${cliSpec}', but .openpackage/package.yml declares '${packageName}' with range '${canonicalRange}'. Edit package.yml to change the dependency line, then re-run opkg install.`);
112
+ }
113
+ export function resolvePersistRange(decision, selectedVersion) {
114
+ if (decision.type === 'none') {
115
+ return null;
116
+ }
117
+ if (decision.type === 'explicit') {
118
+ return { range: decision.range, target: decision.target };
119
+ }
120
+ const derivedRange = createCaretRange(selectedVersion);
121
+ return { range: derivedRange, target: decision.target };
122
+ }
123
+ //# sourceMappingURL=canonical-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-plan.js","sourceRoot":"","sources":["../../../src/core/install/canonical-plan.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { CONFLICT_RESOLUTION } from '../../constants/index.js';
2
- import { installAiFiles } from '../../utils/install-orchestrator.js';
2
+ import { installWorkspaceFiles } from '../../utils/install-orchestrator.js';
3
3
  /**
4
4
  * Handle dry run mode for package installation
5
5
  */
@@ -23,7 +23,7 @@ export async function handleDryRunMode(resolvedPackages, packageName, targetDir,
23
23
  console.log(`✓ Would skip ${resolved.name}@${resolved.version} (same or newer version already installed)`);
24
24
  continue;
25
25
  }
26
- const dryRunResult = await installAiFiles(resolved.name, targetDir, options, resolved.version, true);
26
+ const dryRunResult = await installWorkspaceFiles(resolved.name, targetDir, options, resolved.version, true);
27
27
  if (dryRunResult.skipped) {
28
28
  console.log(`✓ Would skip ${resolved.name}@${resolved.version} (same or newer version already installed)`);
29
29
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"dry-run.js","sourceRoot":"","sources":["../../../src/core/install/dry-run.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAErE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,gBAAmC,EACnC,WAAmB,EACnB,SAAiB,EACjB,OAAuB,EACvB,gBAAyB;IAEzB,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAE9D,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,qCAAqC;IACrC,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;QACxC,IAAI,QAAQ,CAAC,kBAAkB,KAAK,mBAAmB,CAAC,OAAO,EAAE,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,iCAAiC,CAAC,CAAC;YAChG,SAAS;QACX,CAAC;QAED,IAAI,QAAQ,CAAC,kBAAkB,KAAK,mBAAmB,CAAC,IAAI,EAAE,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,4CAA4C,CAAC,CAAC;YAC3G,SAAS;QACX,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAErG,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,4CAA4C,CAAC,CAAC;YAC3G,SAAS;QACX,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,cAAc,QAAQ,CAAC,CAAC;QAEtH,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,8CAA8C,WAAW,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5H,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IACpF,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,IAAI,EAAE;YACJ,MAAM,EAAE,IAAI;YACZ,gBAAgB;YAChB,aAAa,EAAE,gBAAgB,CAAC,MAAM;SACvC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"dry-run.js","sourceRoot":"","sources":["../../../src/core/install/dry-run.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAE5E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,gBAAmC,EACnC,WAAmB,EACnB,SAAiB,EACjB,OAAuB,EACvB,gBAAyB;IAEzB,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAE9D,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,qCAAqC;IACrC,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;QACxC,IAAI,QAAQ,CAAC,kBAAkB,KAAK,mBAAmB,CAAC,OAAO,EAAE,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,iCAAiC,CAAC,CAAC;YAChG,SAAS;QACX,CAAC;QAED,IAAI,QAAQ,CAAC,kBAAkB,KAAK,mBAAmB,CAAC,IAAI,EAAE,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,4CAA4C,CAAC,CAAC;YAC3G,SAAS;QACX,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,qBAAqB,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAE5G,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,4CAA4C,CAAC,CAAC;YAC3G,SAAS;QACX,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,cAAc,QAAQ,CAAC,CAAC;QAEtH,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,8CAA8C,WAAW,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5H,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IACpF,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,IAAI,EAAE;YACJ,MAAM,EAAE,IAAI;YACZ,gBAAgB;YAChB,aAAa,EAAE,gBAAgB,CAAC,MAAM;SACvC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { runInstallPipeline } from './install-pipeline.js';
2
+ export { runBulkInstallPipeline } from './bulk-install-pipeline.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/install/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC"}