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
package/README.md CHANGED
@@ -90,23 +90,38 @@ opkg install mongodb
90
90
  ## Usage
91
91
 
92
92
  > [!TIP]
93
- > Formulas are essential to how OpenPackage works. We highly recommend reading [What are Formulas?](https://openpackage.dev/docs/what-are-packages) to understand how packages work.
93
+ > We highly recommend reading [the packages doc](https://openpackage.dev/docs/packages) to understand how packages work.
94
94
 
95
- ### Add files/dirs to package
95
+ ### Create a package
96
+
97
+ #### In a project/workspace
98
+ ```bash title="Terminal"
99
+ opkg init <package>
100
+ ```
101
+ Initializes a package at `.openpackage/packages/<package>/` and generates the package's `package.yml` manifest file. This method is ideal for creating/managing multiple packages within existing projects.
96
102
  ```bash title="Terminal"
97
103
  opkg add <package> <path-to-dir-or-file>
98
104
  ```
99
- Adds dirs or files to the package.
105
+ Use the `add` command to add files from the workspace to a package. You can also directly create/update the package files in `.openpackage/packages/<package>/` (see Package Structure below for details).
106
+
107
+
108
+ #### In a dedicated codebase for the package
109
+ ```bash title="Terminal"
110
+ opkg init
111
+ ```
112
+ Initializes a package at cwd and generates the package's `package.yml` manifest file. Use this to dedicate the codebase to the package itself (see Package Structure below for details on structuring a package).
113
+
100
114
 
101
115
  ### Save a package
102
116
  ```bash title="Terminal"
103
- opkg save <package>
117
+ opkg save [package]
104
118
  ```
105
- Save the set of dirs and files as a package for reuse and cross-platform sync (prerelease).
119
+ Save the set of dirs and files as a package for reuse and cross-platform sync (prerelease).
120
+ Also performs sync of universal subdir content across detected AI coding platform dirs.
106
121
 
107
122
  ### Finalize/pack a package
108
123
  ```bash title="Terminal"
109
- opkg pack <package>
124
+ opkg pack [package]
110
125
  ```
111
126
  Save the package as a stable non-prerelease version ready for push (upload).
112
127
 
@@ -149,13 +164,39 @@ Use the `pull` command to download a package from the [official OpenPackage regi
149
164
  > [!TIP]
150
165
  > Learn more by heading over to the [official docs](https://openpackage.dev/docs).
151
166
 
167
+ ## Package Structure
168
+
169
+ Packages are composed using the following directory structure:
170
+
171
+ ```txt title="Structure"
172
+ <package>
173
+ ├── .openpackage
174
+ │ ├── package.yml # The OpenPackage manifest, required
175
+ │ ├── rules/
176
+ │ │ └── # Rule files
177
+ │ ├── commands/
178
+ │ │ └── # Command files (slash commands)
179
+ │ ├── agents/
180
+ │ │ └── # Agent files (subagents)
181
+ │ └── skills/
182
+ │ └── # Skill files (Claude Code skills)
183
+ ├── <dirs-or-files>
184
+ │ └── # Any other root dirs or files (Ex: specs/, docs/, tests/, etc.)
185
+ ├── README.md # Metadata files (LICENSE.md, CONTRIBUTING.md, etc.)
186
+ └── AGENTS.md # Platform root file
187
+ ```
188
+
189
+ There are two ways to compose packages:
190
+ - In a project workspace: `opkg init <package>` will create a package in `.openpackage/packages/<packages>/`
191
+ - In a dedicated package codebase: `opkg init` will create a package at cwd (similar to npm, pypi, etc.)
192
+
152
193
  ## Supported Platforms
153
194
 
154
195
  OpenPackage performs installation and platform sync of files for supported AI coding platforms outlined by the table below.
155
- Files and paths will be automatically converted to platform specific designations during `save` and `install`.
196
+ Files and paths will be automatically converted to platform specific designations during `save` and `install`. The `platforms.jsonc` file includes the specifications for all supported platforms.
156
197
 
157
198
  > [!NOTE]
158
- > OpenPackage only searches and includes markdown files under supported platform directories and the root `ai/` directory.
199
+ > OpenPackage searches and includes markdown files under supported platform directories as well as any other workspace directories.
159
200
 
160
201
  | Platform | Directory | Root file | Rules | Commands | Agents | Skills |
161
202
  | --- | --- | --- | --- | --- | --- | --- |
@@ -1,286 +1,21 @@
1
- import { dirname, isAbsolute, join, relative, resolve } from 'path';
2
- import { FILE_PATTERNS, PLATFORM_DIRS } from '../constants/index.js';
3
- import { getAllPlatforms, getDetectedPlatforms, getPlatformDefinition } from '../core/platforms.js';
4
- import { withErrorHandling, UserCancellationError } from '../utils/errors.js';
5
- import { ensureDir, exists, isDirectory, isFile, readTextFile, writeTextFile, walkFiles } from '../utils/fs.js';
6
- import { getLocalPackageDir, getLocalOpenPackageDir } from '../utils/paths.js';
7
- import { parsePackageYml, writePackageYml } from '../utils/package-yml.js';
8
- import { normalizePackageName, validatePackageName } from '../utils/package-name.js';
9
- import { promptPackageDetailsForNamed, safePrompts } from '../utils/prompts.js';
10
- import { mapPlatformFileToUniversal } from '../utils/platform-mapper.js';
11
- import { normalizePathForProcessing } from '../utils/path-normalization.js';
12
- import { suffixFileBasename, suffixFirstContentDir } from '../utils/platform-specific-paths.js';
13
- import { logger } from '../utils/logger.js';
14
- import { buildMappingAndWriteIndex } from '../core/add/package-index-updater.js';
15
- import { readLocalPackageFilesForIndex } from '../utils/package-local-files.js';
16
- const PLATFORM_ROOT_FILES = buildPlatformRootFiles();
1
+ import { withErrorHandling } from '../utils/errors.js';
2
+ import { runAddPipeline } from '../core/add/add-pipeline.js';
17
3
  export function setupAddCommand(program) {
18
4
  program
19
5
  .command('add')
20
- .argument('<package-name>', 'package to add workspace files into')
21
- .argument('<path>', 'file or directory to add (relative to current directory)')
6
+ .argument('[package-or-path]', 'package name, or path when omitting package name')
7
+ .argument('[path]', 'file or directory to add (when first arg is a package name)')
22
8
  .description('Copy supported workspace files or directories into a local package directory.\n' +
23
9
  'Usage examples:\n' +
24
10
  ' opkg add my-package .cursor/rules/example.md\n' +
25
- ' opkg add my-package ai/helpers/\n')
11
+ ' opkg add my-package ai/helpers/\n' +
12
+ ' opkg add ai/helpers/\n')
26
13
  .option('--platform-specific', 'Save platform-specific variants for platform subdir inputs')
27
- .action(withErrorHandling(async (packageName, inputPath, options) => {
28
- await runAddCommand(packageName, inputPath, options);
29
- }));
30
- }
31
- async function runAddCommand(packageName, inputPath, options = {}) {
32
- const cwd = process.cwd();
33
- // Validate and inspect the input path first
34
- const resolvedInputPath = resolve(cwd, inputPath);
35
- await validateSourcePath(resolvedInputPath, cwd);
36
- const inputIsDirectory = await isDirectory(resolvedInputPath);
37
- const inputIsFile = !inputIsDirectory && await isFile(resolvedInputPath);
38
- let entries = await collectSourceEntries(resolvedInputPath, cwd);
39
- if (entries.length === 0) {
40
- throw new Error(`No supported files found in ${inputPath}`);
41
- }
42
- if (options.platformSpecific) {
43
- entries = applyPlatformSpecificPaths(cwd, entries, resolvedInputPath, {
44
- inputIsDirectory,
45
- inputIsFile
46
- });
47
- }
48
- // Only now ensure/create the package & package.yml
49
- const ensuredPackage = await ensurePackageExists(cwd, packageName);
50
- const changedFiles = await copyWithConflictResolution(ensuredPackage, entries);
51
- // Always update index using all candidate entries (even if nothing changed on disk)
52
- // Directory collapsing is now universally applied
53
- await updatePackageIndex(cwd, ensuredPackage);
54
- if (changedFiles.length > 0) {
55
- logger.info(`Added ${changedFiles.length} file(s) to package '${ensuredPackage.normalizedName}'.`);
56
- }
57
- else {
58
- logger.info('No files were added or modified.');
59
- }
60
- return { success: true };
61
- }
62
- async function ensurePackageExists(cwd, packageName) {
63
- validatePackageName(packageName);
64
- const normalizedName = normalizePackageName(packageName);
65
- const packageDir = getLocalPackageDir(cwd, normalizedName);
66
- const packageYmlPath = join(packageDir, FILE_PATTERNS.PACKAGE_YML);
67
- await ensureDir(packageDir);
68
- let packageConfig;
69
- if (await exists(packageYmlPath)) {
70
- packageConfig = await parsePackageYml(packageYmlPath);
71
- }
72
- else {
73
- packageConfig = await promptPackageDetailsForNamed(normalizedName);
74
- await writePackageYml(packageYmlPath, packageConfig);
75
- logger.info(`Created new package '${packageConfig.name}@${packageConfig.version}' at ${relative(cwd, packageDir)}`);
76
- }
77
- return {
78
- normalizedName,
79
- packageDir,
80
- packageConfig
81
- };
82
- }
83
- async function validateSourcePath(resolvedPath, cwd) {
84
- if (!(await exists(resolvedPath))) {
85
- throw new Error(`Path not found: ${relative(cwd, resolvedPath) || resolvedPath}`);
86
- }
87
- if (!isWithinDirectory(cwd, resolvedPath)) {
88
- throw new Error('Path must be within the current working directory.');
89
- }
90
- const openpackageDir = getLocalOpenPackageDir(cwd);
91
- if (isWithinDirectory(openpackageDir, resolvedPath)) {
92
- throw new Error('Cannot add files from the .openpackage directory.');
93
- }
94
- }
95
- async function collectSourceEntries(resolvedPath, cwd) {
96
- const entries = [];
97
- if (await isDirectory(resolvedPath)) {
98
- for await (const filePath of walkFiles(resolvedPath)) {
99
- const entry = deriveSourceEntry(filePath, cwd);
100
- if (!entry) {
101
- throw new Error(`Unsupported file inside directory: ${relative(cwd, filePath)}`);
102
- }
103
- entries.push(entry);
104
- }
105
- }
106
- else if (await isFile(resolvedPath)) {
107
- const entry = deriveSourceEntry(resolvedPath, cwd);
108
- if (!entry) {
109
- throw new Error(`Unsupported file: ${relative(cwd, resolvedPath)}`);
110
- }
111
- entries.push(entry);
112
- }
113
- else {
114
- throw new Error(`Unsupported path type: ${resolvedPath}`);
115
- }
116
- return entries;
117
- }
118
- function deriveSourceEntry(absFilePath, cwd) {
119
- const relativePath = relative(cwd, absFilePath);
120
- const normalizedRelPath = normalizePathForProcessing(relativePath);
121
- if (normalizedRelPath.startsWith(`${PLATFORM_DIRS.AI}/`)) {
122
- return {
123
- sourcePath: absFilePath,
124
- registryPath: normalizedRelPath
125
- };
126
- }
127
- const mapping = mapPlatformFileToUniversal(absFilePath);
128
- if (mapping) {
129
- return {
130
- sourcePath: absFilePath,
131
- registryPath: joinPathSegments(mapping.subdir, mapping.relPath)
132
- };
133
- }
134
- const fileName = normalizedRelPath.split('/').pop();
135
- if (fileName && isPlatformRootFile(fileName) && !normalizedRelPath.includes('/')) {
136
- return {
137
- sourcePath: absFilePath,
138
- registryPath: fileName
139
- };
140
- }
141
- return null;
142
- }
143
- function joinPathSegments(...parts) {
144
- return parts
145
- .filter(Boolean)
146
- .join('/')
147
- .replace(/\/{2,}/g, '/');
148
- }
149
- function applyPlatformSpecificPaths(cwd, entries, resolvedInputPath, options) {
150
- const normalizedInput = resolve(resolvedInputPath);
151
- for (const entry of entries) {
152
- const { registryPath, sourcePath } = entry;
153
- if (isAiRegistryPath(registryPath)) {
154
- continue;
155
- }
156
- const fileName = registryPath.split('/').pop();
157
- if (fileName && isPlatformRootFile(fileName)) {
158
- continue;
159
- }
160
- const mapping = mapPlatformFileToUniversal(sourcePath);
161
- if (!mapping) {
162
- continue;
163
- }
164
- const definition = getPlatformDefinition(mapping.platform);
165
- const subdirDef = definition.subdirs[mapping.subdir];
166
- if (!subdirDef?.path) {
167
- continue;
168
- }
169
- const subdirAbs = resolve(join(cwd, definition.rootDir, subdirDef.path));
170
- const sourceAbs = resolve(sourcePath);
171
- const withinSubdir = sourceAbs === subdirAbs || isWithinDirectory(subdirAbs, sourceAbs);
172
- if (!withinSubdir) {
173
- continue;
14
+ .action(withErrorHandling(async (packageOrPath, pathArg, options) => {
15
+ const result = await runAddPipeline(packageOrPath, pathArg, options);
16
+ if (!result.success) {
17
+ throw new Error(result.error || 'Add operation failed');
174
18
  }
175
- if (options.inputIsFile && sourceAbs === normalizedInput) {
176
- entry.registryPath = suffixFileBasename(registryPath, mapping.platform);
177
- continue;
178
- }
179
- if (!options.inputIsDirectory) {
180
- continue;
181
- }
182
- if (normalizedInput === subdirAbs) {
183
- entry.registryPath = suffixFileBasename(registryPath, mapping.platform);
184
- continue;
185
- }
186
- if (isWithinDirectory(normalizedInput, sourceAbs)) {
187
- entry.registryPath = suffixFirstContentDir(registryPath, mapping.platform);
188
- }
189
- }
190
- return entries;
191
- }
192
- function isAiRegistryPath(registryPath) {
193
- return registryPath === PLATFORM_DIRS.AI || registryPath.startsWith(`${PLATFORM_DIRS.AI}/`);
194
- }
195
- // computeDirKeyFromRegistryPath and directory collapsing moved to core/add/package-index-updater.ts
196
- function buildPlatformRootFiles() {
197
- const rootFiles = new Set();
198
- for (const platform of getAllPlatforms()) {
199
- const def = getPlatformDefinition(platform);
200
- if (def.rootFile) {
201
- rootFiles.add(def.rootFile);
202
- }
203
- }
204
- rootFiles.add(FILE_PATTERNS.AGENTS_MD);
205
- return rootFiles;
206
- }
207
- function isPlatformRootFile(fileName) {
208
- return PLATFORM_ROOT_FILES.has(fileName);
209
- }
210
- function isWithinDirectory(parentDir, targetPath) {
211
- const resolvedParent = resolve(parentDir);
212
- const resolvedTarget = resolve(targetPath);
213
- if (resolvedParent === resolvedTarget) {
214
- return true;
215
- }
216
- const rel = relative(resolvedParent, resolvedTarget);
217
- return !!rel && !rel.startsWith('..') && !isAbsolute(rel);
218
- }
219
- async function copyWithConflictResolution(ensuredPackage, entries) {
220
- const changedFiles = [];
221
- const { packageDir, normalizedName } = ensuredPackage;
222
- for (const entry of entries) {
223
- const registryPath = entry.registryPath;
224
- const destination = join(packageDir, ...registryPath.split('/'));
225
- const sourceContent = await readTextFile(entry.sourcePath);
226
- const destExists = await exists(destination);
227
- if (destExists) {
228
- let existingContent = '';
229
- try {
230
- existingContent = await readTextFile(destination);
231
- }
232
- catch {
233
- existingContent = '';
234
- }
235
- if (existingContent === sourceContent) {
236
- logger.debug(`Skipping unchanged file: ${registryPath}`);
237
- continue;
238
- }
239
- const decision = await promptConflictDecision(normalizedName, registryPath);
240
- if (decision === 'keep-existing') {
241
- logger.debug(`Kept existing file for ${registryPath}`);
242
- continue;
243
- }
244
- }
245
- await ensureDir(dirname(destination));
246
- await writeTextFile(destination, sourceContent);
247
- changedFiles.push({
248
- path: registryPath,
249
- content: sourceContent,
250
- encoding: 'utf8'
251
- });
252
- }
253
- return changedFiles;
254
- }
255
- async function promptConflictDecision(packageName, registryPath) {
256
- const response = await safePrompts({
257
- type: 'select',
258
- name: 'decision',
259
- message: `File '${registryPath}' already exists in package '${packageName}'. Choose how to proceed:`,
260
- choices: [
261
- {
262
- title: 'Keep existing file (skip)',
263
- value: 'keep-existing'
264
- },
265
- {
266
- title: 'Replace with workspace file',
267
- value: 'overwrite'
268
- },
269
- {
270
- title: 'Cancel operation',
271
- value: 'cancel'
272
- }
273
- ]
274
- });
275
- if (response.decision === 'cancel') {
276
- throw new UserCancellationError();
277
- }
278
- return response.decision;
279
- }
280
- async function updatePackageIndex(cwd, ensuredPackage) {
281
- const { normalizedName, packageDir } = ensuredPackage;
282
- const packageFiles = await readLocalPackageFilesForIndex(packageDir);
283
- const detectedPlatforms = await getDetectedPlatforms(cwd);
284
- await buildMappingAndWriteIndex(cwd, normalizedName, packageFiles, detectedPlatforms, { preserveExactPaths: true });
19
+ }));
285
20
  }
286
21
  //# sourceMappingURL=add.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,cAAc,EAA2B,MAAM,6BAA6B,CAAC;AAEtF,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,mBAAmB,EAAE,kDAAkD,CAAC;SACjF,QAAQ,CAAC,QAAQ,EAAE,6DAA6D,CAAC;SACjF,WAAW,CACV,iFAAiF;QACjF,mBAAmB;QACnB,kDAAkD;QAClD,qCAAqC;QACrC,0BAA0B,CAC3B;SACA,MAAM,CAAC,qBAAqB,EAAE,4DAA4D,CAAC;SAC3F,MAAM,CACL,iBAAiB,CAAC,KAAK,EAAE,aAAiC,EAAE,OAA2B,EAAE,OAA2B,EAAE,EAAE;QACtH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,sBAAsB,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}