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
@@ -6,87 +6,69 @@ Packages contain two types of content:
6
6
 
7
7
  | Type | Location | Description | Install Behavior |
8
8
  |------|----------|-------------|------------------|
9
- | **Universal content** | `<package-root>/.openpackage/<subdir>/` | Platform-normalized files | Mapped to platform-specific paths |
10
- | **Root-level content** | `<package-root>/<path>` (outside `.openpackage/`) | Any files/dirs at package root | Copied 1:1 to same relative path |
9
+ | **Universal content** | `<package-root>/<subdir>/` | Platform-normalized files | Mapped to platform-specific paths |
10
+ | **Root-level content** | `<package-root>/<path>` | Any files/dirs at package root | Not installed unless under `root/` (copy-to-root) or a root file |
11
11
 
12
12
  ---
13
13
 
14
- #### Universal Content Layout under `.openpackage/`
14
+ #### Universal Content Layout
15
15
 
16
- Inside `.openpackage/`, each universal subdir is canonical:
16
+ Universal subdirs (standard: `agents/`, `rules/`, `commands/`, `skills/`; plus any custom defined in `platforms.jsonc`) are canonical at the **package root**. The full set is dynamically discovered from platform configs.
17
17
 
18
18
  ```text
19
19
  <package-root>/
20
- .openpackage/
21
- package.yml # package manifest
22
- agents/
23
- <name>.md # universal markdown
24
- <name>.<platform>.md # platform-suffixed markdown (optional)
25
- <name>.<platform>.yml # YAML override for frontmatter (optional)
26
- rules/
27
- ...
28
- commands/
29
- ...
30
- skills/
31
- ...
32
- <custom-subdirs>/ # any additional subdirs
33
- ...
20
+ openpackage.yml # package manifest
21
+ <universal-subdir>/ # e.g., agents/, rules/, commands/, skills/, or custom (from platforms.jsonc)
22
+ <name>.md # universal markdown
23
+ <name>.<platform>.md # platform-suffixed markdown (optional)
24
+ ... # other standard/custom subdirs
34
25
  ```
35
26
 
36
27
  **Definitions:**
37
28
 
38
29
  - **Universal markdown**:
39
- - Paths like `.openpackage/agents/foo.md`
30
+ - Paths like `agents/foo.md`
40
31
  - Contains shared body and (after save) shared frontmatter
41
32
 
42
33
  - **Platform-suffixed markdown**:
43
- - Paths like `.openpackage/agents/foo.<platform>.md`
34
+ - Paths like `agents/foo.<platform>.md`
44
35
  - Represents platform-specific variants of a universal file
45
36
 
46
- - **YAML override files**:
47
- - Paths like `.openpackage/agents/foo.<platform>.yml`
48
- - Contains only the **per-platform difference** in frontmatter
49
-
50
37
  ---
51
38
 
52
- #### Root-Level Content (Outside `.openpackage/`)
39
+ #### Root-Level Content
53
40
 
54
41
  Root-level content lives at the package root, **not** under `.openpackage/`:
55
42
 
56
43
  ```text
57
44
  <package-root>/
58
- .openpackage/
59
- ... # universal content inside
60
- <root-dir>/ # any root-level directory
61
- helper.md
62
- prompts/
63
- system.md
45
+ <root-dir>/ # any root-level directory (not installed by default)
64
46
  AGENTS.md # root files
65
47
  CLAUDE.md
66
48
  README.md
67
49
  ```
68
50
 
69
51
  Root-level content:
70
- - Is stored and copied **without transformation**
71
- - Maps to the **same relative path** in the workspace
72
- - Includes any directories at the package root, platform root files (`AGENTS.md`, `CLAUDE.md`), etc.
52
+ - Is **not installed** unless it is:
53
+ - A root file (`AGENTS.md` or platform root files), or
54
+ - Under `root/**` (copied to workspace root with prefix stripped).
73
55
 
74
56
  ---
75
57
 
76
- #### Registry Paths (Keys in `package.index.yml`)
58
+ #### Registry Paths (Keys in `openpackage.index.yml`)
77
59
 
78
60
  Registry paths are **relative to the package root**:
79
61
 
80
62
  | Content Type | Example Registry Path |
81
63
  |--------------|----------------------|
82
- | Universal content | `.openpackage/commands/test.md` |
83
- | Root-level content | `<dir>/helper.md` |
64
+ | Universal content | `commands/test.md` |
84
65
  | Root files | `AGENTS.md` |
66
+ | `root/` directory (direct copy) | `root/tools/helper.sh` |
85
67
 
86
68
  **Rules:**
87
69
 
88
- - Universal subdir content **always** has `.openpackage/` prefix
89
- - Root-level content uses its natural path (no prefix)
70
+ - Universal subdir content lives under the universal subdir name at package root
71
+ - Root-level content uses its natural path (no prefix) but is not installed by default
90
72
  - Root files use their filename directly
91
73
 
92
74
  ---
@@ -97,15 +79,15 @@ Registry paths are **relative to the package root**:
97
79
 
98
80
  | Registry Path | Installed Paths |
99
81
  |---------------|-----------------|
100
- | `.openpackage/commands/test.md` | `.cursor/commands/test.md`, `.opencode/commands/test.md`, etc. |
101
- | `.openpackage/rules/auth.md` | `.cursor/rules/auth.mdc`, etc. |
82
+ | `commands/test.md` | `.cursor/commands/test.md`, `.opencode/commands/test.md`, etc. |
83
+ | `rules/auth.md` | `.cursor/rules/auth.mdc`, etc. |
102
84
 
103
- **Root-level content** (1:1 mapping):
85
+ **Root-level content**:
104
86
 
105
87
  | Registry Path | Installed Path |
106
88
  |---------------|----------------|
107
- | `<dir>/helper.md` | `<dir>/helper.md` |
108
89
  | `AGENTS.md` | `AGENTS.md` |
90
+ | `root/tools/helper.sh` | `tools/helper.sh` (strip `root/` prefix) |
109
91
 
110
92
  ---
111
93
 
@@ -113,9 +95,9 @@ Registry paths are **relative to the package root**:
113
95
 
114
96
  These layouts apply identically whether the package lives at:
115
97
 
116
- - **Workspace root**: `cwd/` (content at `cwd/.openpackage/...`)
117
- - **Nested package**: `cwd/.openpackage/packages/<name>/` (content at `cwd/.openpackage/packages/<name>/.openpackage/...`)
118
- - **Registry**: `~/.openpackage/registry/<name>/<version>/` (content at `.../.openpackage/...`)
98
+ - **Workspace root**: `cwd/` (content at `cwd/<subdir>/...`)
99
+ - **Nested package**: `cwd/.openpackage/packages/<name>/` (content at `cwd/.openpackage/packages/<name>/<subdir>/...`)
100
+ - **Registry**: `~/.openpackage/registry/<name>/<version>/` (content at `.../<subdir>/...`)
119
101
 
120
102
  ---
121
103
 
@@ -123,22 +105,17 @@ These layouts apply identically whether the package lives at:
123
105
 
124
106
  In the canonical structure:
125
107
 
126
- - Each universal markdown file (`.openpackage/<subdir>/<name>.md`) is the **single source of truth** for:
108
+ - Each universal markdown file (`<subdir>/<name>.md`) is the **single source of truth** for:
127
109
  - Markdown body
128
110
  - Shared frontmatter keys/common metadata
111
+ - Platform overrides embedded inline under `openpackage.<platform>` (ids/aliases, only diffs)
129
112
 
130
- - Platform overrides live alongside their universal file:
131
-
132
- ```text
133
- .openpackage/agents/foo.md # universal body + shared frontmatter
134
- .openpackage/agents/foo.claude.yml # CLAUDE-specific frontmatter diff
135
- .openpackage/agents/foo.claude.md # optional CLAUDE-specific markdown body
136
- ```
113
+ - Platform-specific content files (`<name>.<platform>.md`) remain optional body overrides.
137
114
 
138
115
  The save pipeline:
139
116
 
140
117
  1. Normalizes workspace markdown and computes:
141
118
  - Universal frontmatter to keep in `foo.md`
142
- - Per-platform differences to write as `foo.<platform>.yml`
143
- 2. Writes override files into the `.openpackage/<subdir>/` tree
119
+ - Per-platform differences to store as inline blocks under `openpackage.<platform>` inside `foo.md`
120
+ 2. Writes only the universal file (plus any platform-specific markdown files)
144
121
 
@@ -0,0 +1,248 @@
1
+ # Package Sources
2
+
3
+ All packages resolve to a filesystem **path** as the source of truth. Dependency declarations in `openpackage.yml` determine the type, with mutability enforced based on the resolved location.
4
+
5
+ ## Source Types
6
+
7
+ ### 1. Workspace Path (Mutable)
8
+
9
+ Local project-specific source.
10
+
11
+ ```yaml
12
+ packages:
13
+ - name: project-tools
14
+ path: ./.openpackage/packages/project-tools/
15
+ ```
16
+
17
+ - Relative to workspace `openpackage.yml`.
18
+ - Full dev support: `save`, `add`, `pack`, `apply`.
19
+ - See [Directory Layout](directory-layout.md).
20
+
21
+ ### 2. Global Path (Mutable)
22
+
23
+ Shared across workspaces.
24
+
25
+ ```yaml
26
+ packages:
27
+ - name: shared-rules
28
+ path: ~/.openpackage/packages/shared-rules/
29
+ ```
30
+
31
+ - Tilde-expanded to user home.
32
+ - Same ops as workspace path.
33
+
34
+ ### 3. Registry Version (Immutable)
35
+
36
+ From local registry; path inferred at runtime.
37
+
38
+ ```yaml
39
+ packages:
40
+ - name: community-pkg
41
+ version: ^1.2.0 # Range or exact; resolves to latest satisfying
42
+ ```
43
+
44
+ - No `path:` written to yml (inferred from index post-install).
45
+ - Resolved dir: `~/.openpackage/registry/<name>/<resolved-version>/`.
46
+ - `apply`/`install` ok; `save`/`add` error (immutable).
47
+
48
+ ### 4. Git Source (Typically Immutable)
49
+
50
+ Cloned to local path; mutability by location.
51
+
52
+ ```yaml
53
+ packages:
54
+ - name: git-pkg
55
+ git: https://github.com/user/repo.git
56
+ ref: main # Branch/tag/commit optional
57
+ subdirectory: packages/my-package # Optional (for monorepos/plugins)
58
+ ```
59
+
60
+ - Cloned to `~/.openpackage/registry/...` (current impl; thus immutable).
61
+ - Ops: `apply`/`install` ok; `save`/`add` fail if in registry.
62
+ - Future: Could clone to mutable dir for editability.
63
+ - **Subdirectory support**: Allows installing from monorepo subdirectories or Claude Code plugin marketplaces.
64
+ - **Claude Code plugins**: Automatically detected via `.claude-plugin/plugin.json` or `.claude-plugin/marketplace.json`.
65
+ - See [Git Sources](install/git-sources.md) for install details including subdirectory syntax and plugin support.
66
+
67
+ Other: Absolute/custom paths treated by resolved location.
68
+
69
+ ## Source Resolution Flow
70
+
71
+ ```text
72
+ 1. Parse dep from openpackage.yml OR classify CLI input
73
+ 2. Determine type:
74
+ - `path:` → Resolve (tilde/rel/abs); validate exists
75
+ - `version:` → Query registry for matching version → Infer path
76
+ - `git:` → Clone/fetch to local dir → Use resolved path
77
+ - Simple name → Search: workspace packages → global packages → registry
78
+ 3. Classify mutability: registry/ → immutable; packages/ or custom → mutable
79
+ 4. Ops proceed or error (e.g., save requires mutable)
80
+ ```
81
+
82
+ Details in [Dependency Resolver](../core/dependency-resolver.ts); errors in [Install Errors](../core/install/install-errors.ts).
83
+
84
+ ## Source Resolution Priority for Name-Based Install
85
+
86
+ When installing by package name (e.g., `opkg install my-package`):
87
+
88
+ 1. **Existing dependency** (if in openpackage.yml)
89
+ - Respects declared `path:`, `git:`, or `version:`
90
+
91
+ 2. **Workspace-local package**
92
+ - `./.openpackage/packages/my-package/`
93
+ - Mutable development source
94
+ - Always takes priority (override behavior)
95
+
96
+ 3. **Global package vs Registry** (version-aware comparison)
97
+ - `~/.openpackage/packages/my-package/` vs `~/.openpackage/registry/my-package/<version>/`
98
+ - Compares versions, selects higher version
99
+ - Tie-breaker: prefer global (mutable)
100
+
101
+ 4. **Single source fallback**
102
+ - If only global or only registry exists, use it
103
+
104
+ 5. **Remote resolution**
105
+ - If no local sources, fetch from remote registry
106
+
107
+ This hierarchy supports:
108
+ - Local development takes precedence
109
+ - Global utilities available without paths
110
+ - Automatic version-aware resolution
111
+ - Published packages as stable fallback
112
+ - Explicit declarations always honored
113
+
114
+ **Example workflows**:
115
+
116
+ ```bash
117
+ # Create global package
118
+ $ opkg new my-utils --scope global
119
+ ✓ Created ~/.openpackage/packages/my-utils/
120
+
121
+ # Install by name in any workspace
122
+ $ cd ~/project-a
123
+ $ opkg install my-utils
124
+ ✓ Found my-utils in global packages
125
+ ✓ Installed my-utils@0.1.0 from global packages
126
+
127
+ # Pack to registry
128
+ $ cd ~/.openpackage/packages/my-utils
129
+ $ opkg pack
130
+ ✓ Packed my-utils@0.2.0 to registry
131
+
132
+ # Next install gets newer version
133
+ $ cd ~/project-b
134
+ $ opkg install my-utils
135
+ Resolving my-utils...
136
+ • Global packages: 0.1.0 (mutable)
137
+ • Registry: 0.2.0 (stable)
138
+ ✓ Using my-utils@0.2.0 from registry (newer version)
139
+ ```
140
+
141
+ ### Source Persistence on Install
142
+
143
+ When installing packages, the **source type declared in `openpackage.yml` is always respected**:
144
+
145
+ - **First install**: `opkg install /path/to/package` or `opkg install git:<url>` persists `path:` or `git:` in `openpackage.yml`
146
+ - **Subsequent installs**: `opkg install <package-name>` **always uses the declared source** (path/git/version) from the manifest
147
+ - **Consistency**: Both `opkg install` (no args) and `opkg install <name>` behave identically for existing dependencies
148
+
149
+ This ensures:
150
+ - Local development packages stay in sync with their source
151
+ - Git-based dependencies always pull from the declared repository
152
+ - The manifest is the single source of truth for dependency intent
153
+
154
+ **Example workflow**:
155
+
156
+ ```bash
157
+ # First install from local path
158
+ $ opkg install /path/to/my-package
159
+ # → Stores: path: /path/to/my-package in openpackage.yml
160
+
161
+ # Later, install by name - uses the path
162
+ $ opkg install my-package
163
+ # → Output: ✓ Using path source from openpackage.yml: /path/to/my-package
164
+ # → Installs from /path/to/my-package (not registry)
165
+
166
+ # To switch to registry version:
167
+ # 1. Edit openpackage.yml: remove 'path:', add 'version: ^1.0.0'
168
+ # 2. Run: opkg install my-package
169
+ ```
170
+
171
+ See [Install Behavior](install/install-behavior.md) for complete install semantics.
172
+
173
+ ## Mutability Rules
174
+
175
+ | Source Type | `save` | `add` | `pack` | `apply` | `install` | Notes |
176
+ |----------------------------------|----------|---------|----------------------|---------|-----------|-------------------|
177
+ | Workspace/Global Path (`packages/`) | ✅ | ✅ | ✅ | ✅ | N/A | Mutable dev |
178
+ | Registry (`registry/<name>/<ver>/`) | ❌ Error | ❌ Error | N/A | ✅ | ✅ | Immutable |
179
+ | Git (resolved to registry/) | ❌ | ❌ | ✅ (if mutable, else N/A) | ✅ | ✅ | Current: immutable|
180
+ | Custom Path (non-registry) | ✅ (if writable) | ✅ | ✅ | ✅ | N/A | User-defined |
181
+
182
+ Errors guide users (e.g., "Copy to mutable dir first").
183
+
184
+ ## Error Handling Examples
185
+
186
+ ### Modifying Immutable
187
+
188
+ ```
189
+ Error: Cannot save 'community-pkg' – from registry (immutable, v1.2.3).
190
+ Path: ~/.openpackage/registry/community-pkg/1.2.3/
191
+
192
+ Fix: Copy to ~/.openpackage/packages/, update path:, edit, then pack.
193
+ ```
194
+
195
+ ### Path Not Found
196
+
197
+ ```
198
+ Error: Source not found for 'my-rules': ~/.openpackage/packages/my-rules/
199
+ Run `opkg status` to verify.
200
+ ```
201
+
202
+ ## Path Resolution
203
+
204
+ ### Tilde Expansion
205
+
206
+ `~/.openpackage/...` expands to user's home directory at runtime.
207
+
208
+ Stored in YAML with tilde for portability across machines.
209
+
210
+ ### Relative Paths
211
+
212
+ Relative paths (e.g., `./.openpackage/packages/...`) resolve relative to the `openpackage.yml` file location.
213
+
214
+ ### Portability
215
+
216
+ | Path Type | Example | Portability |
217
+ |-----------|---------|-------------|
218
+ | Tilde | `~/.openpackage/packages/...` | ✅ Portable (same home structure) |
219
+ | Relative | `./.openpackage/packages/...` | ✅ Portable (committed with project) |
220
+ | Absolute | `/opt/packages/...` | ❌ Machine-specific |
221
+
222
+ ## Registry Path After Install
223
+
224
+ `openpackage.yml` declares dependency **intent** (e.g., version constraint). On `install` from registry:
225
+
226
+ - yml **unchanged**: Keeps requested `version` (range/exact); no `path:` added (inferred at runtime).
227
+ - Unified index updated with **resolved facts**: exact version, source path, mappings.
228
+
229
+ Example:
230
+
231
+ ```yaml
232
+ # openpackage.yml (before and after install - unchanged)
233
+ packages:
234
+ - name: community-pkg
235
+ version: ^1.2.0 # Intent: latest satisfying ^1.2.0
236
+
237
+ # .openpackage/openpackage.index.yml (added/updated after install)
238
+ packages:
239
+ community-pkg:
240
+ version: 1.2.3 # Resolved exact (e.g., latest in range from local/remote)
241
+ path: ~/.openpackage/registry/community-pkg/1.2.3/ # Resolved source
242
+ files:
243
+ rules/auth.md: [.cursor/rules/auth.md, .opencode/rules/auth.md] # Mappings
244
+ # ... more
245
+ ```
246
+
247
+ - If re-install runs with same constraint, prefers same resolved version (local-first).
248
+ - See [Version Resolution](install/version-resolution.md) for selection logic; [Workspace Index](package/package-index-yml.md) for full schema; [Package Sources](.) for inference rules.
@@ -0,0 +1,52 @@
1
+ # Platform System Documentation
2
+
3
+ The **Platform System** is OpenPackage's declarative transformation engine that maps universal package content to platform-specific formats across 13+ AI coding platforms.
4
+
5
+ ## 📚 Documentation Overview
6
+
7
+ ### Getting Started
8
+
9
+ - **[Overview](./overview.md)** - High-level introduction to the platform system, key concepts, and architecture
10
+ - **[Examples](./examples.md)** - Common patterns, practical use cases, and complete working configurations
11
+
12
+ ### Core Concepts
13
+
14
+ - **[Flows](./flows.md)** - Declarative bidirectional transformation system with explicit export (package → workspace) and import (workspace → package) flows
15
+ - **[Map Pipeline](./map-pipeline.md)** - MongoDB-inspired document transformations: 6 core operations, context variables, and pattern matching
16
+ - **[Universal Converter](./universal-converter.md)** - Cross-platform package conversion system using import flows for platform-to-universal conversion
17
+ - **[Configuration](./configuration.md)** - Structure of `platforms.jsonc`, merge hierarchy, and validation rules
18
+ - **[Flow Reference](./flow-reference.md)** - Complete technical reference for all flow fields, transforms, and options
19
+
20
+ ### Implementation Details
21
+
22
+ - **[Detection](./detection.md)** - How platforms are detected in workspaces (rootDir, rootFile, aliases)
23
+ - **[Directory Layout](./directory-layout.md)** - File organization, root directories, subdirectories, and extensions
24
+ - **[Troubleshooting](./troubleshooting.md)** - Debug tips, validation, common errors, and performance optimization
25
+
26
+ ### Technical Specification
27
+
28
+ - **[Specification](./specification.md)** - Formal requirements with SHALL/MUST contracts and scenario-based tests
29
+
30
+ ## Quick Links
31
+
32
+ - **Quick Start:** See [Examples](./examples.md#quick-start) for zero-config installation
33
+ - **Flow Syntax:** See [Flow Reference](./flow-reference.md) for complete schema
34
+ - **Debugging:** See [Troubleshooting](./troubleshooting.md#debug-flow-execution)
35
+ - **Custom Platform:** See [Configuration](./configuration.md#adding-custom-platforms)
36
+
37
+ ## Key Features
38
+
39
+ - ✅ **Declarative** - JSON configuration, not code
40
+ - ✅ **Bidirectional** - Explicit export (install/apply) and import (save) flows
41
+ - ✅ **Type-safe** - IDE autocomplete + schema validation
42
+ - ✅ **Powerful** - Simple file copies to complex transformations
43
+ - ✅ **Composable** - Multi-package content merging with priority
44
+ - ✅ **Format-agnostic** - JSON, YAML, TOML, JSONC, Markdown
45
+ - ✅ **Extensible** - Custom handlers for edge cases
46
+ - ✅ **Single file** - One configuration with merge hierarchy
47
+
48
+ ## Supported Platforms
49
+
50
+ Built-in support for 13 platforms: Cursor, Claude, Windsurf, Gemini, Kilo, Cline, Roo-Code, Void, Aide, Zed, Codex, OpenCode, Factory.
51
+
52
+ Custom platforms can be added via configuration overrides.