opkg 0.6.1 → 0.7.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 (487) hide show
  1. package/README.md +109 -186
  2. package/assets/openpackage_ascii_dark.png +0 -0
  3. package/assets/openpackage_ascii_light.png +0 -0
  4. package/dist/commands/add.js +34 -10
  5. package/dist/commands/add.js.map +1 -1
  6. package/dist/commands/apply.js +16 -0
  7. package/dist/commands/apply.js.map +1 -0
  8. package/dist/commands/delete.js +1 -1
  9. package/dist/commands/delete.js.map +1 -1
  10. package/dist/commands/install.js +177 -8
  11. package/dist/commands/install.js.map +1 -1
  12. package/dist/commands/list.js +2 -2
  13. package/dist/commands/list.js.map +1 -1
  14. package/dist/commands/login.js +1 -1
  15. package/dist/commands/login.js.map +1 -1
  16. package/dist/commands/logout.js +1 -1
  17. package/dist/commands/logout.js.map +1 -1
  18. package/dist/commands/new.js +125 -0
  19. package/dist/commands/new.js.map +1 -0
  20. package/dist/commands/pack.js +7 -13
  21. package/dist/commands/pack.js.map +1 -1
  22. package/dist/commands/pull.js +1 -1
  23. package/dist/commands/pull.js.map +1 -1
  24. package/dist/commands/push.js +1 -1
  25. package/dist/commands/push.js.map +1 -1
  26. package/dist/commands/remove.js +63 -0
  27. package/dist/commands/remove.js.map +1 -0
  28. package/dist/commands/save.js +11 -17
  29. package/dist/commands/save.js.map +1 -1
  30. package/dist/commands/set.js +33 -0
  31. package/dist/commands/set.js.map +1 -0
  32. package/dist/commands/show.js +16 -94
  33. package/dist/commands/show.js.map +1 -1
  34. package/dist/commands/status.js +26 -701
  35. package/dist/commands/status.js.map +1 -1
  36. package/dist/commands/uninstall.js +14 -427
  37. package/dist/commands/uninstall.js.map +1 -1
  38. package/dist/constants/index.js +72 -16
  39. package/dist/constants/index.js.map +1 -1
  40. package/dist/core/add/add-conflict-handler.js +1 -8
  41. package/dist/core/add/add-conflict-handler.js.map +1 -1
  42. package/dist/core/add/add-pipeline.js +12 -10
  43. package/dist/core/add/add-pipeline.js.map +1 -1
  44. package/dist/core/add/add-to-source-pipeline.js +123 -0
  45. package/dist/core/add/add-to-source-pipeline.js.map +1 -0
  46. package/dist/core/add/package-index-updater.js +77 -78
  47. package/dist/core/add/package-index-updater.js.map +1 -1
  48. package/dist/core/add/platform-path-transformer.js +6 -4
  49. package/dist/core/add/platform-path-transformer.js.map +1 -1
  50. package/dist/core/add/source-collector.js +2 -3
  51. package/dist/core/add/source-collector.js.map +1 -1
  52. package/dist/core/apply/apply-pipeline.js +110 -0
  53. package/dist/core/apply/apply-pipeline.js.map +1 -0
  54. package/dist/core/dependency-resolver.js +263 -21
  55. package/dist/core/dependency-resolver.js.map +1 -1
  56. package/dist/core/discovery/file-discovery.js +1 -2
  57. package/dist/core/discovery/file-discovery.js.map +1 -1
  58. package/dist/core/discovery/platform-files-discovery.js +33 -18
  59. package/dist/core/discovery/platform-files-discovery.js.map +1 -1
  60. package/dist/core/flows/flow-executor.js +974 -0
  61. package/dist/core/flows/flow-executor.js.map +1 -0
  62. package/dist/core/flows/flow-inverter.js +442 -0
  63. package/dist/core/flows/flow-inverter.js.map +1 -0
  64. package/dist/core/flows/flow-key-extractor.js +101 -0
  65. package/dist/core/flows/flow-key-extractor.js.map +1 -0
  66. package/dist/core/flows/flow-key-mapper.js +382 -0
  67. package/dist/core/flows/flow-key-mapper.js.map +1 -0
  68. package/dist/core/flows/flow-transforms.js +632 -0
  69. package/dist/core/flows/flow-transforms.js.map +1 -0
  70. package/dist/core/flows/map-pipeline/context.js +73 -0
  71. package/dist/core/flows/map-pipeline/context.js.map +1 -0
  72. package/dist/core/flows/map-pipeline/index.js +156 -0
  73. package/dist/core/flows/map-pipeline/index.js.map +1 -0
  74. package/dist/core/flows/map-pipeline/operations/copy.js +104 -0
  75. package/dist/core/flows/map-pipeline/operations/copy.js.map +1 -0
  76. package/dist/core/flows/map-pipeline/operations/pipe.js +70 -0
  77. package/dist/core/flows/map-pipeline/operations/pipe.js.map +1 -0
  78. package/dist/core/flows/map-pipeline/operations/rename.js +102 -0
  79. package/dist/core/flows/map-pipeline/operations/rename.js.map +1 -0
  80. package/dist/core/flows/map-pipeline/operations/set.js +50 -0
  81. package/dist/core/flows/map-pipeline/operations/set.js.map +1 -0
  82. package/dist/core/flows/map-pipeline/operations/switch.js +79 -0
  83. package/dist/core/flows/map-pipeline/operations/switch.js.map +1 -0
  84. package/dist/core/flows/map-pipeline/operations/transform.js +543 -0
  85. package/dist/core/flows/map-pipeline/operations/transform.js.map +1 -0
  86. package/dist/core/flows/map-pipeline/operations/unset.js +65 -0
  87. package/dist/core/flows/map-pipeline/operations/unset.js.map +1 -0
  88. package/dist/core/flows/map-pipeline/types.js +8 -0
  89. package/dist/core/flows/map-pipeline/types.js.map +1 -0
  90. package/dist/core/flows/map-pipeline/utils.js +278 -0
  91. package/dist/core/flows/map-pipeline/utils.js.map +1 -0
  92. package/dist/core/flows/platform-converter.js +328 -0
  93. package/dist/core/flows/platform-converter.js.map +1 -0
  94. package/dist/core/flows/source-resolver.js +192 -0
  95. package/dist/core/flows/source-resolver.js.map +1 -0
  96. package/dist/core/flows/toml-domain-transforms.js +23 -0
  97. package/dist/core/flows/toml-domain-transforms.js.map +1 -0
  98. package/dist/core/install/bulk-install-pipeline.js +68 -7
  99. package/dist/core/install/bulk-install-pipeline.js.map +1 -1
  100. package/dist/core/install/canonical-plan.js +3 -3
  101. package/dist/core/install/canonical-plan.js.map +1 -1
  102. package/dist/core/install/dry-run.js +3 -3
  103. package/dist/core/install/dry-run.js.map +1 -1
  104. package/dist/core/install/flow-based-installer.js +1158 -0
  105. package/dist/core/install/flow-based-installer.js.map +1 -0
  106. package/dist/core/install/flow-workspace-tracker.js +111 -0
  107. package/dist/core/install/flow-workspace-tracker.js.map +1 -0
  108. package/dist/core/install/format-detector.js +228 -0
  109. package/dist/core/install/format-detector.js.map +1 -0
  110. package/dist/core/install/git-package-loader.js +20 -0
  111. package/dist/core/install/git-package-loader.js.map +1 -0
  112. package/dist/core/install/install-errors.js +1 -1
  113. package/dist/core/install/install-errors.js.map +1 -1
  114. package/dist/core/install/install-flow.js +34 -14
  115. package/dist/core/install/install-flow.js.map +1 -1
  116. package/dist/core/install/install-pipeline.js +52 -17
  117. package/dist/core/install/install-pipeline.js.map +1 -1
  118. package/dist/core/install/install-reporting.js +26 -8
  119. package/dist/core/install/install-reporting.js.map +1 -1
  120. package/dist/core/install/local-source-resolution.js +103 -0
  121. package/dist/core/install/local-source-resolution.js.map +1 -0
  122. package/dist/core/install/marketplace-handler.js +221 -0
  123. package/dist/core/install/marketplace-handler.js.map +1 -0
  124. package/dist/core/install/path-install-pipeline.js +241 -0
  125. package/dist/core/install/path-install-pipeline.js.map +1 -0
  126. package/dist/core/install/path-package-loader.js +116 -0
  127. package/dist/core/install/path-package-loader.js.map +1 -0
  128. package/dist/core/install/plugin-detector.js +72 -0
  129. package/dist/core/install/plugin-detector.js.map +1 -0
  130. package/dist/core/install/plugin-to-universal-converter.js +218 -0
  131. package/dist/core/install/plugin-to-universal-converter.js.map +1 -0
  132. package/dist/core/install/plugin-transformer.js +191 -0
  133. package/dist/core/install/plugin-transformer.js.map +1 -0
  134. package/dist/core/install/version-selection.js +1 -1
  135. package/dist/core/install/version-selection.js.map +1 -1
  136. package/dist/core/openpackage.js +40 -22
  137. package/dist/core/openpackage.js.map +1 -1
  138. package/dist/core/pack/pack-output.js +62 -0
  139. package/dist/core/pack/pack-output.js.map +1 -0
  140. package/dist/core/pack/pack-pipeline.js +186 -0
  141. package/dist/core/pack/pack-pipeline.js.map +1 -0
  142. package/dist/core/package-context.js +45 -70
  143. package/dist/core/package-context.js.map +1 -1
  144. package/dist/core/package-creation.js +203 -0
  145. package/dist/core/package-creation.js.map +1 -0
  146. package/dist/core/package.js +20 -6
  147. package/dist/core/package.js.map +1 -1
  148. package/dist/core/platforms.js +665 -209
  149. package/dist/core/platforms.js.map +1 -1
  150. package/dist/core/push/push-context.js +1 -1
  151. package/dist/core/push/push-context.js.map +1 -1
  152. package/dist/core/push/push-upload.js +2 -2
  153. package/dist/core/push/push-upload.js.map +1 -1
  154. package/dist/core/registry.js +6 -6
  155. package/dist/core/registry.js.map +1 -1
  156. package/dist/core/remote-pull.js +2 -2
  157. package/dist/core/remote-pull.js.map +1 -1
  158. package/dist/core/remove/removal-collector.js +52 -0
  159. package/dist/core/remove/removal-collector.js.map +1 -0
  160. package/dist/core/remove/removal-confirmation.js +39 -0
  161. package/dist/core/remove/removal-confirmation.js.map +1 -0
  162. package/dist/core/remove/remove-from-source-pipeline.js +173 -0
  163. package/dist/core/remove/remove-from-source-pipeline.js.map +1 -0
  164. package/dist/core/save/constants.js +3 -3
  165. package/dist/core/save/constants.js.map +1 -1
  166. package/dist/core/save/flow-based-saver.js +270 -0
  167. package/dist/core/save/flow-based-saver.js.map +1 -0
  168. package/dist/core/save/name-resolution.js +1 -1
  169. package/dist/core/save/name-resolution.js.map +1 -1
  170. package/dist/core/save/package-yml-generator.js +4 -5
  171. package/dist/core/save/package-yml-generator.js.map +1 -1
  172. package/dist/core/save/save-candidate-builder.js +215 -0
  173. package/dist/core/save/save-candidate-builder.js.map +1 -0
  174. package/dist/core/save/save-candidate-loader.js +12 -11
  175. package/dist/core/save/save-candidate-loader.js.map +1 -1
  176. package/dist/core/save/save-conflict-analyzer.js +150 -0
  177. package/dist/core/save/save-conflict-analyzer.js.map +1 -0
  178. package/dist/core/save/save-conflict-resolution.js +28 -14
  179. package/dist/core/save/save-conflict-resolution.js.map +1 -1
  180. package/dist/core/save/save-conflict-resolver.js +31 -275
  181. package/dist/core/save/save-conflict-resolver.js.map +1 -1
  182. package/dist/core/save/save-group-builder.js +52 -0
  183. package/dist/core/save/save-group-builder.js.map +1 -0
  184. package/dist/core/save/save-interactive-resolver.js +190 -0
  185. package/dist/core/save/save-interactive-resolver.js.map +1 -0
  186. package/dist/core/save/save-pipeline.js +58 -34
  187. package/dist/core/save/save-pipeline.js.map +1 -1
  188. package/dist/core/save/save-platform-handler.js +53 -0
  189. package/dist/core/save/save-platform-handler.js.map +1 -0
  190. package/dist/core/save/save-resolution-executor.js +145 -0
  191. package/dist/core/save/save-resolution-executor.js.map +1 -0
  192. package/dist/core/save/save-result-reporter.js +167 -0
  193. package/dist/core/save/save-result-reporter.js.map +1 -0
  194. package/dist/core/save/save-to-source-pipeline.js +154 -0
  195. package/dist/core/save/save-to-source-pipeline.js.map +1 -0
  196. package/dist/core/save/save-versioning.js +4 -4
  197. package/dist/core/save/save-versioning.js.map +1 -1
  198. package/dist/core/save/save-write-coordinator.js +204 -0
  199. package/dist/core/save/save-write-coordinator.js.map +1 -0
  200. package/dist/core/save/save-yml-resolution.js +28 -216
  201. package/dist/core/save/save-yml-resolution.js.map +1 -1
  202. package/dist/core/save/workspace-rename.js +7 -8
  203. package/dist/core/save/workspace-rename.js.map +1 -1
  204. package/dist/core/set/set-output.js +72 -0
  205. package/dist/core/set/set-output.js.map +1 -0
  206. package/dist/core/set/set-pipeline.js +361 -0
  207. package/dist/core/set/set-pipeline.js.map +1 -0
  208. package/dist/core/set/set-types.js +5 -0
  209. package/dist/core/set/set-types.js.map +1 -0
  210. package/dist/core/show/package-resolver.js +257 -0
  211. package/dist/core/show/package-resolver.js.map +1 -0
  212. package/dist/core/show/scope-discovery.js +165 -0
  213. package/dist/core/show/scope-discovery.js.map +1 -0
  214. package/dist/core/show/show-output.js +168 -0
  215. package/dist/core/show/show-output.js.map +1 -0
  216. package/dist/core/show/show-pipeline.js +113 -0
  217. package/dist/core/show/show-pipeline.js.map +1 -0
  218. package/dist/core/show/show-types.js +5 -0
  219. package/dist/core/show/show-types.js.map +1 -0
  220. package/dist/core/source-resolution/dependency-graph.js +104 -0
  221. package/dist/core/source-resolution/dependency-graph.js.map +1 -0
  222. package/dist/core/source-resolution/resolve-mutable-source.js +109 -0
  223. package/dist/core/source-resolution/resolve-mutable-source.js.map +1 -0
  224. package/dist/core/source-resolution/resolve-package-source.js +29 -0
  225. package/dist/core/source-resolution/resolve-package-source.js.map +1 -0
  226. package/dist/core/source-resolution/resolve-registry-version.js +35 -0
  227. package/dist/core/source-resolution/resolve-registry-version.js.map +1 -0
  228. package/dist/core/source-resolution/types.js.map +1 -0
  229. package/dist/core/status/status-file-discovery.js +23 -12
  230. package/dist/core/status/status-file-discovery.js.map +1 -1
  231. package/dist/core/status/status-pipeline.js +134 -0
  232. package/dist/core/status/status-pipeline.js.map +1 -0
  233. package/dist/core/sync/platform-sync-summary.js +27 -0
  234. package/dist/core/sync/platform-sync-summary.js.map +1 -0
  235. package/dist/core/uninstall/flow-aware-uninstaller.js +189 -0
  236. package/dist/core/uninstall/flow-aware-uninstaller.js.map +1 -0
  237. package/dist/core/uninstall/uninstall-file-discovery.js +11 -6
  238. package/dist/core/uninstall/uninstall-file-discovery.js.map +1 -1
  239. package/dist/core/uninstall/uninstall-pipeline.js +141 -0
  240. package/dist/core/uninstall/uninstall-pipeline.js.map +1 -0
  241. package/dist/core/universal-patterns.js +64 -0
  242. package/dist/core/universal-patterns.js.map +1 -0
  243. package/dist/index.js +99 -6
  244. package/dist/index.js.map +1 -1
  245. package/dist/types/flows.js +8 -0
  246. package/dist/types/flows.js.map +1 -0
  247. package/dist/types/index.js +3 -0
  248. package/dist/types/index.js.map +1 -1
  249. package/dist/types/platform-flows.js +8 -0
  250. package/dist/types/platform-flows.js.map +1 -0
  251. package/dist/types/workspace-index.js +6 -0
  252. package/dist/types/workspace-index.js.map +1 -0
  253. package/dist/utils/custom-path-resolution.js +160 -0
  254. package/dist/utils/custom-path-resolution.js.map +1 -0
  255. package/dist/utils/dependency-coverage.js +1 -1
  256. package/dist/utils/dependency-coverage.js.map +1 -1
  257. package/dist/utils/file-processing.js +1 -1
  258. package/dist/utils/flow-index-installer.js +209 -0
  259. package/dist/utils/flow-index-installer.js.map +1 -0
  260. package/dist/utils/formatters.js +47 -1
  261. package/dist/utils/formatters.js.map +1 -1
  262. package/dist/utils/fs.js +17 -0
  263. package/dist/utils/fs.js.map +1 -1
  264. package/dist/utils/git-clone-registry.js +88 -0
  265. package/dist/utils/git-clone-registry.js.map +1 -0
  266. package/dist/utils/git-clone.js +69 -0
  267. package/dist/utils/git-clone.js.map +1 -0
  268. package/dist/utils/git-spec.js +96 -0
  269. package/dist/utils/git-spec.js.map +1 -0
  270. package/dist/utils/http-client.js +7 -0
  271. package/dist/utils/http-client.js.map +1 -1
  272. package/dist/utils/index-based-installer.js +356 -163
  273. package/dist/utils/index-based-installer.js.map +1 -1
  274. package/dist/utils/install-conflict-handler.js +2 -2
  275. package/dist/utils/install-conflict-handler.js.map +1 -1
  276. package/dist/utils/install-file-discovery.js +18 -13
  277. package/dist/utils/install-file-discovery.js.map +1 -1
  278. package/dist/utils/install-helpers.js +43 -20
  279. package/dist/utils/install-helpers.js.map +1 -1
  280. package/dist/utils/jsonc.js +23 -1
  281. package/dist/utils/jsonc.js.map +1 -1
  282. package/dist/utils/manifest-paths.js +1 -1
  283. package/dist/utils/manifest-paths.js.map +1 -1
  284. package/dist/utils/markdown-frontmatter.js +46 -0
  285. package/dist/utils/markdown-frontmatter.js.map +1 -1
  286. package/dist/utils/package-copy.js +5 -103
  287. package/dist/utils/package-copy.js.map +1 -1
  288. package/dist/utils/package-filters.js +9 -105
  289. package/dist/utils/package-filters.js.map +1 -1
  290. package/dist/utils/package-index-yml.js +27 -6
  291. package/dist/utils/package-index-yml.js.map +1 -1
  292. package/dist/utils/package-input.js +98 -0
  293. package/dist/utils/package-input.js.map +1 -0
  294. package/dist/utils/package-management.js +80 -28
  295. package/dist/utils/package-management.js.map +1 -1
  296. package/dist/utils/package-name-resolution.js +327 -0
  297. package/dist/utils/package-name-resolution.js.map +1 -0
  298. package/dist/utils/package-name.js +18 -16
  299. package/dist/utils/package-name.js.map +1 -1
  300. package/dist/utils/package-versioning.js +2 -33
  301. package/dist/utils/package-versioning.js.map +1 -1
  302. package/dist/utils/package-yml.js +19 -28
  303. package/dist/utils/package-yml.js.map +1 -1
  304. package/dist/utils/path-resolution.js +102 -0
  305. package/dist/utils/path-resolution.js.map +1 -0
  306. package/dist/utils/paths.js +6 -6
  307. package/dist/utils/paths.js.map +1 -1
  308. package/dist/utils/platform-file.js +36 -24
  309. package/dist/utils/platform-file.js.map +1 -1
  310. package/dist/utils/platform-mapper.js +222 -68
  311. package/dist/utils/platform-mapper.js.map +1 -1
  312. package/dist/utils/platform-root-files.js +44 -0
  313. package/dist/utils/platform-root-files.js.map +1 -0
  314. package/dist/utils/platform-utils.js +35 -54
  315. package/dist/utils/platform-utils.js.map +1 -1
  316. package/dist/utils/platform-yaml-merge.js +20 -140
  317. package/dist/utils/platform-yaml-merge.js.map +1 -1
  318. package/dist/utils/prompts.js +92 -7
  319. package/dist/utils/prompts.js.map +1 -1
  320. package/dist/utils/registry-entry-filter.js +50 -27
  321. package/dist/utils/registry-entry-filter.js.map +1 -1
  322. package/dist/utils/registry-paths.js +5 -4
  323. package/dist/utils/registry-paths.js.map +1 -1
  324. package/dist/utils/scope-resolution.js +156 -0
  325. package/dist/utils/scope-resolution.js.map +1 -0
  326. package/dist/utils/source-mutability.js +15 -0
  327. package/dist/utils/source-mutability.js.map +1 -0
  328. package/dist/utils/tarball.js +29 -4
  329. package/dist/utils/tarball.js.map +1 -1
  330. package/dist/utils/version-ranges.js +1 -32
  331. package/dist/utils/version-ranges.js.map +1 -1
  332. package/dist/utils/workspace-index-helpers.js +28 -0
  333. package/dist/utils/workspace-index-helpers.js.map +1 -0
  334. package/dist/utils/workspace-index-ownership.js +100 -0
  335. package/dist/utils/workspace-index-ownership.js.map +1 -0
  336. package/dist/utils/workspace-index-yml.js +173 -0
  337. package/dist/utils/workspace-index-yml.js.map +1 -0
  338. package/examples/custom-subdirs-platform.jsonc +157 -0
  339. package/package.json +7 -2
  340. package/platforms.jsonc +531 -84
  341. package/schemas/map-pipeline-v1.json +256 -0
  342. package/schemas/platforms-v1.json +400 -0
  343. package/specs/README.md +88 -0
  344. package/specs/add/README.md +166 -0
  345. package/specs/agents-claude.md +570 -0
  346. package/specs/agents-opencode.md +622 -0
  347. package/specs/apply/README.md +21 -0
  348. package/specs/apply/apply-behavior.md +58 -0
  349. package/specs/apply/apply-command.md +51 -0
  350. package/specs/apply/conflicts.md +41 -0
  351. package/specs/apply/index-effects.md +81 -0
  352. package/specs/architecture.md +107 -0
  353. package/specs/auth/README.md +17 -0
  354. package/specs/auth/auth-http-contract.md +25 -0
  355. package/specs/auth/cli/credentials.md +39 -0
  356. package/specs/auth/cli/login.md +32 -0
  357. package/specs/auth/cli/logout.md +16 -0
  358. package/specs/claude-mcp.md +1065 -0
  359. package/specs/claude-plugins-marketplace.md +363 -0
  360. package/specs/claude-plugins.md +413 -0
  361. package/specs/cli-options.md +52 -0
  362. package/specs/codex-mcp.md +114 -0
  363. package/specs/commands-overview.md +175 -0
  364. package/specs/directory-layout.md +95 -0
  365. package/specs/install/README.md +12 -4
  366. package/specs/install/git-sources.md +230 -0
  367. package/specs/install/install-behavior.md +483 -73
  368. package/specs/install/package-yml-canonical.md +67 -35
  369. package/specs/install/version-resolution.md +69 -115
  370. package/specs/new/README.md +769 -0
  371. package/specs/new/SUMMARY.md +310 -0
  372. package/specs/new/scope-behavior.md +793 -0
  373. package/specs/pack/README.md +77 -0
  374. package/specs/pack/package-name-resolution.md +330 -0
  375. package/specs/package/README.md +18 -17
  376. package/specs/package/nested-packages-and-parent-packages.md +32 -31
  377. package/specs/package/package-index-yml.md +95 -101
  378. package/specs/package/package-root-layout.md +64 -46
  379. package/specs/package/registry-payload-and-copy.md +50 -44
  380. package/specs/package/universal-content.md +33 -56
  381. package/specs/package-sources.md +248 -0
  382. package/specs/platforms/README.md +52 -0
  383. package/specs/platforms/configuration.md +571 -0
  384. package/specs/platforms/detection.md +552 -0
  385. package/specs/platforms/directory-layout.md +599 -0
  386. package/specs/platforms/examples.md +1146 -0
  387. package/specs/platforms/flow-reference.md +1240 -0
  388. package/specs/platforms/flows.md +1488 -0
  389. package/specs/platforms/map-pipeline.md +801 -0
  390. package/specs/platforms/overview.md +349 -0
  391. package/specs/platforms/specification.md +700 -0
  392. package/specs/platforms/troubleshooting.md +697 -0
  393. package/specs/platforms/universal-converter.md +520 -0
  394. package/specs/push/README.md +1 -0
  395. package/specs/push/push-behavior.md +11 -3
  396. package/specs/push/push-remote-upload.md +1 -1
  397. package/specs/push/push-scoping.md +1 -1
  398. package/specs/push/push-version-selection.md +1 -1
  399. package/specs/registry.md +111 -0
  400. package/specs/remove/README.md +257 -0
  401. package/specs/save/README.md +21 -17
  402. package/specs/save/save-conflict-resolution.md +205 -83
  403. package/specs/save/save-file-discovery.md +6 -4
  404. package/specs/save/save-frontmatter-overrides.md +11 -15
  405. package/specs/save/save-modes-inputs.md +9 -39
  406. package/specs/save/save-naming-scoping.md +4 -4
  407. package/specs/save/save-package-detection.md +13 -13
  408. package/specs/save/save-registry-sync.md +16 -106
  409. package/specs/save/save-versioning.md +80 -0
  410. package/specs/scope-management.md +92 -0
  411. package/specs/set/README.md +520 -0
  412. package/specs/set/set-behavior.md +563 -0
  413. package/specs/show/README.md +483 -0
  414. package/specs/show/show-remote.md +494 -0
  415. package/specs/status/README.md +38 -0
  416. package/specs/uninstall/README.md +231 -0
  417. package/dist/commands/duplicate.js +0 -69
  418. package/dist/commands/duplicate.js.map +0 -1
  419. package/dist/commands/init.js +0 -117
  420. package/dist/commands/init.js.map +0 -1
  421. package/dist/commands/prune.js +0 -357
  422. package/dist/commands/prune.js.map +0 -1
  423. package/dist/commands/tui.js +0 -61
  424. package/dist/commands/tui.js.map +0 -1
  425. package/dist/core/install/index.js +0 -3
  426. package/dist/core/install/index.js.map +0 -1
  427. package/dist/core/push/push-single-file.js +0 -56
  428. package/dist/core/push/push-single-file.js.map +0 -1
  429. package/dist/core/save/package-detection.js +0 -147
  430. package/dist/core/save/package-detection.js.map +0 -1
  431. package/dist/core/save/save-single-file.js +0 -124
  432. package/dist/core/save/save-single-file.js.map +0 -1
  433. package/dist/core/token-store.js +0 -73
  434. package/dist/core/token-store.js.map +0 -1
  435. package/dist/tui/app.js +0 -95
  436. package/dist/tui/app.js.map +0 -1
  437. package/dist/tui/components/package-list.js +0 -73
  438. package/dist/tui/components/package-list.js.map +0 -1
  439. package/dist/tui/controller.js +0 -365
  440. package/dist/tui/controller.js.map +0 -1
  441. package/dist/tui/index.js +0 -12
  442. package/dist/tui/index.js.map +0 -1
  443. package/dist/tui/services/file-index.js +0 -64
  444. package/dist/tui/services/file-index.js.map +0 -1
  445. package/dist/tui/services/packages.js +0 -18
  446. package/dist/tui/services/packages.js.map +0 -1
  447. package/dist/tui/services/save.js +0 -21
  448. package/dist/tui/services/save.js.map +0 -1
  449. package/dist/tui/state/app-state.js +0 -15
  450. package/dist/tui/state/app-state.js.map +0 -1
  451. package/dist/tui/state.js +0 -17
  452. package/dist/tui/state.js.map +0 -1
  453. package/dist/tui/types.js.map +0 -1
  454. package/dist/tui/views/add-file-modal.js +0 -129
  455. package/dist/tui/views/add-file-modal.js.map +0 -1
  456. package/dist/tui/views/file-preview.js +0 -44
  457. package/dist/tui/views/file-preview.js.map +0 -1
  458. package/dist/tui/views/list-packages.js +0 -73
  459. package/dist/tui/views/list-packages.js.map +0 -1
  460. package/dist/tui/views/main-menu.js +0 -29
  461. package/dist/tui/views/main-menu.js.map +0 -1
  462. package/dist/tui/views/manage-view.js +0 -81
  463. package/dist/tui/views/manage-view.js.map +0 -1
  464. package/dist/tui/views/package-hub.js +0 -120
  465. package/dist/tui/views/package-hub.js.map +0 -1
  466. package/dist/tui/views/placeholder.js +0 -24
  467. package/dist/tui/views/placeholder.js.map +0 -1
  468. package/dist/utils/bun-bootstrap.js +0 -72
  469. package/dist/utils/bun-bootstrap.js.map +0 -1
  470. package/dist/utils/entity-id.js +0 -19
  471. package/dist/utils/entity-id.js.map +0 -1
  472. package/dist/utils/package-local-files.js +0 -5
  473. package/dist/utils/package-local-files.js.map +0 -1
  474. package/dist/utils/path-matching.js +0 -74
  475. package/dist/utils/path-matching.js.map +0 -1
  476. package/dist/utils/root-file-operations.js +0 -39
  477. package/dist/utils/root-file-operations.js.map +0 -1
  478. package/dist/utils/root-file-transformer.js +0 -27
  479. package/dist/utils/root-file-transformer.js.map +0 -1
  480. package/dist/utils/yaml-frontmatter.js +0 -25
  481. package/dist/utils/yaml-frontmatter.js.map +0 -1
  482. package/specs/auth/auth-device-flow.md +0 -70
  483. package/specs/login/login-device-flow.md +0 -70
  484. package/specs/platforms.md +0 -193
  485. package/specs/save-pack-versioning.md +0 -224
  486. package/specs/save-pack.md +0 -68
  487. /package/dist/{tui → core/source-resolution}/types.js +0 -0
@@ -0,0 +1,599 @@
1
+ # Platform Directory Layout
2
+
3
+ ## Overview
4
+
5
+ Each platform defines how files are organized on disk through its **root directory**, optional **root file**, and transformation **flows**. This document explains the physical file organization for platforms.
6
+
7
+ ## Root Directories
8
+
9
+ Every platform has a **root directory** where platform-specific files live.
10
+
11
+ ### Built-in Root Directories
12
+
13
+ | Platform | Root Directory | Description |
14
+ |----------|----------------|-------------|
15
+ | Cursor | `.cursor` | Cursor editor configuration |
16
+ | Claude | `.claude` | Claude Code configuration |
17
+ | Windsurf | `.windsurf` | Windsurf IDE configuration |
18
+ | Gemini | `.gemini` | Google Gemini Code configuration |
19
+ | Kilo | `.kilo` | Kilo Code configuration |
20
+ | Cline | `.cline` | Cline configuration |
21
+ | Roo-Code | `.roo` | Roo-Code configuration |
22
+ | Void | `.void` | Void configuration |
23
+ | Aide | `.aide` | Aide configuration |
24
+ | Zed | `.zed` | Zed editor configuration |
25
+ | Codex | `.codex` | Codex configuration |
26
+ | OpenCode | `.opencode` | OpenCode configuration |
27
+ | Factory | `.factory` | Factory configuration |
28
+
29
+ ### Custom Root Directories
30
+
31
+ Override in configuration:
32
+
33
+ ```jsonc
34
+ {
35
+ "cursor": {
36
+ "rootDir": ".cursor-custom"
37
+ }
38
+ }
39
+ ```
40
+
41
+ **Use cases:**
42
+ - Monorepo with multiple workspaces
43
+ - Testing different configurations
44
+ - Legacy directory structures
45
+
46
+ ## Root Files
47
+
48
+ Some platforms define a **root file** at the project root (not inside platform directory).
49
+
50
+ ### Built-in Root Files
51
+
52
+ | Platform | Root File | Purpose |
53
+ |----------|-----------|---------|
54
+ | Claude | `CLAUDE.md` | Claude instructions/context |
55
+ | Gemini | `GEMINI.md` | Gemini configuration |
56
+ | Qwen | `QWEN.md` | Qwen instructions |
57
+ | Warp | `WARP.md` | Warp configuration |
58
+
59
+ ### Universal Root File
60
+
61
+ **`AGENTS.md`** is universal (not platform-specific):
62
+
63
+ ```bash
64
+ project/
65
+ ├── AGENTS.md # Universal, all platforms
66
+ ├── CLAUDE.md # Claude-specific
67
+ └── .cursor/
68
+ ```
69
+
70
+ **Typically defined in global flows:**
71
+ ```jsonc
72
+ {
73
+ "global": {
74
+ "flows": [
75
+ { "from": "AGENTS.md", "to": "AGENTS.md" }
76
+ ]
77
+ }
78
+ }
79
+ ```
80
+
81
+ ## Directory Structure Examples
82
+
83
+ ### Cursor
84
+
85
+ ```
86
+ workspace/
87
+ └── .cursor/
88
+ ├── rules/ # Steering rules (.mdc files)
89
+ ├── commands/ # Command prompts (.md files)
90
+ └── mcp.json # MCP server configuration
91
+ ```
92
+
93
+ **Flows:**
94
+ ```jsonc
95
+ {
96
+ "cursor": {
97
+ "rootDir": ".cursor",
98
+ "flows": [
99
+ { "from": "rules/**/*.md", "to": ".cursor/rules/**/*.mdc" },
100
+ { "from": "commands/**/*.md", "to": ".cursor/commands/**/*.md" },
101
+ { "from": "mcp.jsonc", "to": ".cursor/mcp.json", "merge": "deep" }
102
+ ]
103
+ }
104
+ }
105
+ ```
106
+
107
+ ### Claude
108
+
109
+ ```
110
+ workspace/
111
+ ├── CLAUDE.md # Root instruction file
112
+ └── .claude/
113
+ ├── agents/ # Agent definitions
114
+ ├── skills/ # Skill definitions
115
+ └── commands/ # Command prompts
116
+ ```
117
+
118
+ **Flows:**
119
+ ```jsonc
120
+ {
121
+ "claude": {
122
+ "rootDir": ".claude",
123
+ "rootFile": "CLAUDE.md",
124
+ "flows": [
125
+ { "from": "agents/**/*.md", "to": ".claude/agents/**/*.md" },
126
+ { "from": "skills/**/*.md", "to": ".claude/skills/**/*.md" },
127
+ { "from": "commands/**/*.md", "to": ".claude/commands/**/*.md" }
128
+ ]
129
+ }
130
+ }
131
+ ```
132
+
133
+ ### Windsurf
134
+
135
+ ```
136
+ workspace/
137
+ └── .windsurf/
138
+ ├── rules/ # Cascade rules
139
+ ├── commands/ # Command definitions
140
+ └── config.json # Configuration
141
+ ```
142
+
143
+ ### Multi-Platform Setup
144
+
145
+ ```
146
+ workspace/
147
+ ├── AGENTS.md # Universal
148
+ ├── CLAUDE.md # Claude-specific
149
+ ├── .cursor/
150
+ │ ├── rules/
151
+ │ └── mcp.json
152
+ ├── .claude/
153
+ │ ├── agents/
154
+ │ └── skills/
155
+ └── .windsurf/
156
+ └── rules/
157
+ ```
158
+
159
+ **All platforms coexist** with independent directories.
160
+
161
+ ## Flow-Based Organization
162
+
163
+ Unlike older systems with static subdirectory mappings, the platform system uses **declarative flows** to define how content is organized.
164
+
165
+ ### Traditional (Old) Approach
166
+
167
+ ```jsonc
168
+ // ❌ Old: static subdirs mapping
169
+ {
170
+ "cursor": {
171
+ "subdirs": [
172
+ {
173
+ "universalDir": "rules",
174
+ "platformDir": "rules",
175
+ "exts": [".mdc", ".md"]
176
+ }
177
+ ]
178
+ }
179
+ }
180
+ ```
181
+
182
+ **Limitations:**
183
+ - Static file copying only
184
+ - No format conversion
185
+ - No key remapping
186
+ - No multi-package composition
187
+
188
+ ### Flow-Based (Current) Approach
189
+
190
+ ```jsonc
191
+ // ✅ New: declarative flows
192
+ {
193
+ "cursor": {
194
+ "flows": [
195
+ {
196
+ "from": "rules/**/*.md",
197
+ "to": ".cursor/rules/**/*.mdc"
198
+ }
199
+ ]
200
+ }
201
+ }
202
+ ```
203
+
204
+ **Advantages:**
205
+ - Format conversion (YAML → JSON)
206
+ - Key remapping
207
+ - Multi-target flows
208
+ - Conditional execution
209
+ - Merge strategies
210
+
211
+ ## File Extensions
212
+
213
+ Extensions are handled by **flow patterns**, not static lists.
214
+
215
+ ### Extension Transformation
216
+
217
+ **Example: Cursor rules**
218
+ ```jsonc
219
+ {
220
+ "from": "rules/**/*.md",
221
+ "to": ".cursor/rules/**/*.mdc"
222
+ }
223
+ ```
224
+
225
+ **Transformation:**
226
+ ```
227
+ rules/typescript.md → .cursor/rules/typescript.mdc
228
+ rules/python.md → .cursor/rules/python.mdc
229
+ ```
230
+
231
+ ### Format Conversion
232
+
233
+ **Example: YAML to JSON**
234
+ ```jsonc
235
+ {
236
+ "from": "settings.yaml",
237
+ "to": ".cursor/settings.json"
238
+ }
239
+ ```
240
+
241
+ **Transformation:**
242
+ ```yaml
243
+ # settings.yaml
244
+ theme: dark
245
+ fontSize: 14
246
+ ```
247
+
248
+ ```json
249
+ // .cursor/settings.json
250
+ {
251
+ "theme": "dark",
252
+ "fontSize": 14
253
+ }
254
+ ```
255
+
256
+ ### No Extension Restriction
257
+
258
+ Flows can target **any extension**:
259
+
260
+ ```jsonc
261
+ {
262
+ "from": "config.yaml",
263
+ "to": ".cursor/config.toml" // YAML → TOML
264
+ }
265
+ ```
266
+
267
+ ## Universal Package Structure
268
+
269
+ Packages use a **platform-agnostic structure** defined by their content:
270
+
271
+ ```
272
+ @user/package/
273
+ ├── rules/ # Universal rules directory
274
+ │ ├── typescript.md
275
+ │ └── python.md
276
+ ├── commands/ # Universal commands directory
277
+ │ └── code-review.md
278
+ ├── agents/ # Universal agents directory
279
+ │ └── reviewer.md
280
+ ├── mcp.jsonc # Universal MCP config
281
+ ├── settings.jsonc # Universal settings
282
+ └── package.yml # Package metadata
283
+ ```
284
+
285
+ **No platform-specific content in packages.** Flows handle transformation.
286
+
287
+ ## Path Resolution
288
+
289
+ ### Source Paths (in Package)
290
+
291
+ Relative to **package root**:
292
+
293
+ ```jsonc
294
+ {
295
+ "from": "rules/typescript.md" // package/rules/typescript.md
296
+ }
297
+ ```
298
+
299
+ ### Target Paths (in Workspace)
300
+
301
+ Relative to **workspace root**:
302
+
303
+ ```jsonc
304
+ {
305
+ "to": ".cursor/rules/typescript.mdc" // workspace/.cursor/rules/typescript.mdc
306
+ }
307
+ ```
308
+
309
+ ### Pattern Placeholders
310
+
311
+ Captured from source pattern:
312
+
313
+ ```jsonc
314
+ {
315
+ "from": "rules/**/*.md", // Captures 'name'
316
+ "to": ".cursor/rules/**/*.mdc" // Reuses 'name'
317
+ }
318
+ ```
319
+
320
+ **Example:**
321
+ ```
322
+ rules/typescript.md → .cursor/rules/typescript.mdc
323
+ rules/advanced/generics.md → .cursor/rules/advanced/generics.mdc
324
+ ```
325
+
326
+ ## Directory Creation
327
+
328
+ Directories are **created automatically** when flows execute.
329
+
330
+ ### Automatic Creation
331
+
332
+ ```jsonc
333
+ {
334
+ "from": "rules/typescript.md",
335
+ "to": ".cursor/rules/typescript.mdc"
336
+ }
337
+ ```
338
+
339
+ **Behavior:**
340
+ 1. Check if `.cursor/rules/` exists
341
+ 2. If not, create directory (and parents)
342
+ 3. Write file
343
+
344
+ ### Nested Directories
345
+
346
+ ```jsonc
347
+ {
348
+ "from": "agents/reviewer.md",
349
+ "to": ".cursor/custom/agents/reviewer.md"
350
+ }
351
+ ```
352
+
353
+ **Creates:**
354
+ ```
355
+ .cursor/
356
+ └── custom/
357
+ └── agents/
358
+ └── reviewer.md
359
+ ```
360
+
361
+ ### Atomic Operations
362
+
363
+ - Uses temporary files
364
+ - Atomic rename
365
+ - Rollback on error
366
+
367
+ ## Multi-Package Directory Handling
368
+
369
+ When multiple packages install to same platform:
370
+
371
+ ### Separate Subdirectories
372
+
373
+ ```
374
+ Package A:
375
+ rules/typescript.md → .cursor/rules/typescript.mdc
376
+
377
+ Package B:
378
+ rules/python.md → .cursor/rules/python.mdc
379
+
380
+ Result:
381
+ .cursor/rules/
382
+ ├── typescript.mdc (from A)
383
+ └── python.mdc (from B)
384
+ ```
385
+
386
+ **No conflicts** - different filenames.
387
+
388
+ ### Same File with Merge
389
+
390
+ ```
391
+ Package A:
392
+ mcp.jsonc → .cursor/mcp.json (merge: deep)
393
+
394
+ Package B:
395
+ mcp.jsonc → .cursor/mcp.json (merge: deep)
396
+
397
+ Result:
398
+ .cursor/mcp.json (merged content from A + B)
399
+ ```
400
+
401
+ **Merge strategy** handles composition.
402
+
403
+ ### Same File with Namespacing
404
+
405
+ ```
406
+ Package A:
407
+ mcp.jsonc → .cursor/mcp.json (namespace: true, merge: deep)
408
+
409
+ Package B:
410
+ mcp.jsonc → .cursor/mcp.json (namespace: true, merge: deep)
411
+
412
+ Result:
413
+ .cursor/mcp.json
414
+ {
415
+ "packages": {
416
+ "@user/package-a": { /* A's content */ },
417
+ "@user/package-b": { /* B's content */ }
418
+ }
419
+ }
420
+ ```
421
+
422
+ **Namespace isolation** prevents conflicts.
423
+
424
+ ## Workspace vs Package Paths
425
+
426
+ ### Package Paths (Universal)
427
+
428
+ ```
429
+ @user/package/
430
+ ├── rules/ # Standard name
431
+ ├── agents/ # Standard name
432
+ └── mcp.jsonc # Standard name
433
+ ```
434
+
435
+ ### Workspace Paths (Platform-Specific)
436
+
437
+ ```
438
+ workspace/
439
+ ├── .cursor/
440
+ │ ├── rules/ # Cursor convention
441
+ │ └── mcp.json # Cursor format
442
+ └── .claude/
443
+ ├── agents/ # Claude convention
444
+ └── config.json # Claude format
445
+ ```
446
+
447
+ **Flows bridge the gap** between universal and platform-specific.
448
+
449
+ ## Custom Directory Structures
450
+
451
+ ### Custom Subdirectories
452
+
453
+ Define any directory structure via flows:
454
+
455
+ ```jsonc
456
+ {
457
+ "my-platform": {
458
+ "rootDir": ".myplatform",
459
+ "flows": [
460
+ { "from": "rules/**/*.md", "to": ".myplatform/prompts/**/*.txt" },
461
+ { "from": "agents/**/*.md", "to": ".myplatform/bots/**/*.yaml" }
462
+ ]
463
+ }
464
+ }
465
+ ```
466
+
467
+ **Result:**
468
+ ```
469
+ .myplatform/
470
+ ├── prompts/ # Custom location for rules
471
+ └── bots/ # Custom location for agents
472
+ ```
473
+
474
+ ### Deep Nesting
475
+
476
+ ```jsonc
477
+ {
478
+ "from": "config.yaml",
479
+ "to": ".platform/configs/user/settings.json"
480
+ }
481
+ ```
482
+
483
+ **Creates:**
484
+ ```
485
+ .platform/
486
+ └── configs/
487
+ └── user/
488
+ └── settings.json
489
+ ```
490
+
491
+ ## Best Practices
492
+
493
+ ### 1. Use Standard Directories
494
+
495
+ Follow built-in conventions when possible:
496
+ ```
497
+ .cursor/rules/
498
+ .claude/agents/
499
+ .windsurf/rules/
500
+ ```
501
+
502
+ ### 2. Organize by Content Type
503
+
504
+ Group related content:
505
+ ```
506
+ .cursor/
507
+ ├── rules/ # Steering rules
508
+ ├── commands/ # Commands/workflows
509
+ └── mcp.json # Configuration
510
+ ```
511
+
512
+ ### 3. Keep Root Clean
513
+
514
+ Minimize files at project root:
515
+ ```
516
+ project/
517
+ ├── AGENTS.md # Universal only
518
+ ├── CLAUDE.md # Platform-specific only
519
+ └── .cursor/ # Platform directories
520
+ ```
521
+
522
+ ### 4. Document Custom Layouts
523
+
524
+ If using custom structure, document:
525
+ ```jsonc
526
+ {
527
+ "my-platform": {
528
+ // Custom layout for XYZ reason
529
+ "rootDir": ".custom",
530
+ "flows": [ /* ... */ ]
531
+ }
532
+ }
533
+ ```
534
+
535
+ ### 5. Test Directory Creation
536
+
537
+ Verify directories created correctly:
538
+ ```bash
539
+ opkg install @user/package --dry-run
540
+ ls -R .cursor/
541
+ ```
542
+
543
+ ## Troubleshooting
544
+
545
+ ### Files in Wrong Directory
546
+
547
+ **Check flow targets:**
548
+ ```jsonc
549
+ {
550
+ "to": ".cursor/rules/**/*.mdc" // Verify path
551
+ }
552
+ ```
553
+
554
+ **Check placeholder usage:**
555
+ ```jsonc
556
+ {
557
+ "from": "rules/**/*.md",
558
+ "to": ".cursor/rules/**/*.mdc" // Pattern must match
559
+ }
560
+ ```
561
+
562
+ ### Directories Not Created
563
+
564
+ **Check permissions:**
565
+ ```bash
566
+ ls -la .cursor/
567
+ ```
568
+
569
+ **Check flow execution:**
570
+ ```bash
571
+ opkg install @user/package --dry-run
572
+ ```
573
+
574
+ ### Wrong File Extension
575
+
576
+ **Check extension in flow:**
577
+ ```jsonc
578
+ {
579
+ "to": ".cursor/rules/**/*.mdc" // Extension matters
580
+ }
581
+ ```
582
+
583
+ ### Platform Not Detected
584
+
585
+ **Check root directory:**
586
+ ```bash
587
+ ls -la .cursor
588
+ ```
589
+
590
+ **Check detection:**
591
+ ```bash
592
+ opkg status
593
+ ```
594
+
595
+ ## Next Steps
596
+
597
+ - **Learn detection:** [Detection](./detection.md)
598
+ - **Configure flows:** [Flows](./flows.md)
599
+ - **See examples:** [Examples](./examples.md)