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,77 @@
1
+ # Pack Command
2
+
3
+ `opkg pack` creates an immutable versioned snapshot from a mutable package source, copying to the local registry. It promotes dev work to distributable form, tying into save's WIP versioning.
4
+
5
+ ## Purpose & Direction
6
+ - **Source → Registry**: Full dir copy to `~/.openpackage/registry/<name>/<version>/`.
7
+ - Preconditions: Mutable source (packages/ dir).
8
+ - Key: Makes package immutable; enables install/apply from registry path.
9
+
10
+ ## Flow
11
+ 1. Resolve package source path (from context or arg):
12
+ - **Input Types**: Package name, absolute path, relative path
13
+ - **Path Detection**: Inputs starting with `/`, `./`, `../`, or `~` are treated as paths
14
+ - **Package Name Resolution** (for non-path inputs):
15
+ - Priority: CWD → Workspace packages → Global packages
16
+ - Skips registry (already immutable) and remote (not relevant)
17
+ - See [Package Name Resolution](./package-name-resolution.md) for details
18
+ 2. Read `openpackage.yml.version` → Target stable `S` (no bump).
19
+ 3. Copy entire package root (payload rules) to registry/<name>/<S>/ (overwrite if exists).
20
+ 4. Update workspace index `workspace.version = S`; refresh file mappings.
21
+ 5. Clean this workspace's WIP versions for the package.
22
+ 6. Idempotent: Re-pack same → same content.
23
+
24
+ ## Versioning
25
+ - Uses exact `openpackage.yml.version` as stable.
26
+ - After pack, next `save` bumps to patch line for new WIP.
27
+ - See [Save Versioning](save/save-versioning.md).
28
+
29
+ ## Options
30
+ - `--output <path>`: Copy directly to `<path>` (bypasses registry structure; `<path>` becomes root).
31
+ - `--dry-run`: Simulate without write.
32
+ - Global: `--cwd`, etc. (see [CLI Options](../cli-options.md)).
33
+
34
+ ## Examples
35
+
36
+ ### Pack from Current Directory
37
+ ```bash
38
+ cd ~/projects/my-package
39
+ opkg pack # Packs CWD (no name needed)
40
+ opkg pack my-package # Also packs CWD (name matches)
41
+ ```
42
+
43
+ ### Pack from Workspace or Global Packages
44
+ ```bash
45
+ cd ~/my-workspace
46
+ opkg pack shared-component # Finds in .openpackage/packages/ or ~/.openpackage/packages/
47
+ ```
48
+
49
+ ### Pack from Absolute Path
50
+ ```bash
51
+ opkg pack /Users/user/projects/my-package # Pack from absolute path
52
+ opkg pack ~/projects/my-package # Pack from home directory path
53
+ ```
54
+
55
+ ### Pack from Relative Path
56
+ ```bash
57
+ cd ~/workspace
58
+ opkg pack ./packages/shared-component # Pack from relative path
59
+ opkg pack ../sibling-project # Pack from parent directory
60
+ ```
61
+
62
+ Output: Shows created path, version, and source location.
63
+
64
+ ## Errors
65
+ - **Package not found**: "Package 'X' not found. Searched: current directory, workspace packages, and global packages."
66
+ - **Invalid version**: Semver checks require valid semver in openpackage.yml
67
+ - **Missing manifest**: "openpackage.yml not found at [path]"
68
+ - **Invalid path**: "Path 'X' exists but is not a valid OpenPackage directory. Valid packages must contain openpackage.yml"
69
+ - **Tarball input**: "Pack command does not support tarball inputs. To pack from a tarball, first extract it to a directory."
70
+ - **Git input**: "Pack command does not support git inputs. To pack from a git repository, first clone it to a directory."
71
+
72
+ ## Integration
73
+ - Called after iterative `save` (WIP → stable promotion).
74
+ - Payload excludes metadata (see [Registry Payload](../package/registry-payload-and-copy.md)).
75
+ - Enables `install <name>@<ver>` from new snapshot.
76
+
77
+ For impl: [Pack Pipeline](../core/pack/pack-pipeline.ts). Related: [Registry](registry.md), [Commands Overview](commands-overview.md).
@@ -0,0 +1,330 @@
1
+ # Package Name Resolution Architecture
2
+
3
+ ## Overview
4
+
5
+ This document describes the unified package name resolution architecture used by the `pack` and `install` commands.
6
+
7
+ ## Architecture Diagram
8
+
9
+ ```
10
+ ┌─────────────────────────────────────────────────────────────────┐
11
+ │ Package Name Resolution │
12
+ │ (package-name-resolution.ts) │
13
+ └─────────────────────────────────────────────────────────────────┘
14
+
15
+
16
+ ┌──────────┴───────────┐
17
+ │ │
18
+ ┌───────────▼──────────┐ ┌───────▼──────────┐
19
+ │ Pack Command │ │ Install Command │
20
+ │ (pack-pipeline.ts) │ │ (package-input.ts)│
21
+ └──────────────────────┘ └───────────────────┘
22
+ ```
23
+
24
+ ## Before: Separate Resolution Logic
25
+
26
+ ### Pack Command (Old)
27
+ ```
28
+ pack-pipeline.ts
29
+
30
+ resolvePackageSource()
31
+
32
+ readWorkspaceIndex()
33
+
34
+ Looks up in .openpackage/index.yml only
35
+
36
+ ❌ Requires package to be installed first
37
+ ```
38
+
39
+ ### Install Command (Old)
40
+ ```
41
+ package-input.ts
42
+
43
+ findPackageInMutableDirectories()
44
+
45
+ Searches: workspace → global → registry
46
+
47
+ ✅ Version comparison logic
48
+ ```
49
+
50
+ **Problem**: Code duplication, inconsistent behavior
51
+
52
+ ## After: Unified Resolution Logic
53
+
54
+ ### Shared Resolution Module
55
+
56
+ ```
57
+ package-name-resolution.ts
58
+ ├── resolvePackageByName() # Main entry point
59
+ │ ├── checkCwdPackage() # Check current directory
60
+ │ ├── checkWorkspacePackage() # Check .openpackage/packages/
61
+ │ ├── checkGlobalPackage() # Check ~/.openpackage/packages/
62
+ │ ├── checkRegistryPackage() # Check ~/.openpackage/registry/
63
+ │ ├── selectBestCandidate() # Version-aware selection
64
+ │ └── determineSelectionReason() # Explain selection
65
+ ```
66
+
67
+ ### Pack Command (New)
68
+ ```
69
+ pack-pipeline.ts
70
+
71
+ resolvePackageByName({
72
+ checkCwd: true, ← CWD priority
73
+ searchWorkspace: true,
74
+ searchGlobal: true,
75
+ searchRegistry: false ← Skip immutable
76
+ })
77
+
78
+ ✅ Can pack without installing
79
+ ✅ Version-aware selection
80
+ ```
81
+
82
+ ### Install Command (New)
83
+ ```
84
+ package-input.ts
85
+
86
+ resolvePackageByName({
87
+ checkCwd: false, ← No CWD priority
88
+ searchWorkspace: true,
89
+ searchGlobal: true,
90
+ searchRegistry: true ← Include registry
91
+ })
92
+
93
+ ✅ Same resolution logic
94
+ ✅ Different configuration
95
+ ```
96
+
97
+ ## Resolution Flow
98
+
99
+ ```
100
+ ┌─────────────────────────────────────────────────────────────┐
101
+ │ resolvePackageByName({ cwd, packageName, options }) │
102
+ └─────────────────────────────────────────────────────────────┘
103
+
104
+
105
+ ┌────────────────────────┐
106
+ │ Check CWD (optional) │ ← if checkCwd=true
107
+ └────────────────────────┘
108
+
109
+
110
+ ┌────────────────────────┐
111
+ │ Check Workspace │ ← if searchWorkspace=true
112
+ │ .openpackage/packages │
113
+ └────────────────────────┘
114
+
115
+
116
+ ┌────────────────────────┐
117
+ │ Check Global │ ← if searchGlobal=true
118
+ │ ~/.openpackage/packages│
119
+ └────────────────────────┘
120
+
121
+
122
+ ┌────────────────────────┐
123
+ │ Check Registry │ ← if searchRegistry=true
124
+ │ ~/.openpackage/registry│
125
+ └────────────────────────┘
126
+
127
+
128
+ ┌────────────────────────┐
129
+ │ Collect Candidates │
130
+ └────────────────────────┘
131
+
132
+
133
+ ┌────────────────────────┐
134
+ │ Select Best │
135
+ │ (version-aware) │
136
+ └────────────────────────┘
137
+
138
+
139
+ ┌────────────────────────┐
140
+ │ Return Result │
141
+ │ { path, version, ... }│
142
+ └────────────────────────┘
143
+ ```
144
+
145
+ ## Selection Logic
146
+
147
+ When multiple candidates are found:
148
+
149
+ ```
150
+ Priority Rules:
151
+ 1. CWD (if checked and name matches) ← Pack only
152
+ └─ ALWAYS WINS if present
153
+
154
+ 2. Workspace (.openpackage/packages/) ← Both commands
155
+ └─ ALWAYS WINS among remaining
156
+
157
+ 3. Version Comparison (global vs registry)
158
+ ├─ Higher version WINS
159
+ └─ Same version → prefer Global (mutable)
160
+ ```
161
+
162
+ ## Example Resolution Scenarios
163
+
164
+ ### Scenario 1: Pack from CWD
165
+ ```
166
+ Input:
167
+ cwd: /projects/my-package
168
+ packageName: my-package
169
+ checkCwd: true
170
+
171
+ Resolution:
172
+ ✓ CWD: my-package@3.0.0 (match!)
173
+ ✓ Workspace: my-package@2.0.0
174
+
175
+ Selection: CWD@3.0.0 (CWD priority)
176
+ ```
177
+
178
+ ### Scenario 2: Install (no CWD priority)
179
+ ```
180
+ Input:
181
+ cwd: /projects/workspace
182
+ packageName: some-lib
183
+ checkCwd: false
184
+
185
+ Resolution:
186
+ ✓ Workspace: some-lib@2.0.0
187
+ ✓ Global: some-lib@3.0.0
188
+ ✓ Registry: some-lib@2.5.0
189
+
190
+ Selection: Workspace@2.0.0 (workspace priority)
191
+ ```
192
+
193
+ ### Scenario 3: Version Comparison
194
+ ```
195
+ Input:
196
+ cwd: /projects/workspace
197
+ packageName: tool
198
+ checkCwd: false
199
+
200
+ Resolution:
201
+ ✗ Workspace: not found
202
+ ✓ Global: tool@5.0.0
203
+ ✓ Registry: tool@4.0.0
204
+
205
+ Selection: Global@5.0.0 (higher version)
206
+ ```
207
+
208
+ ### Scenario 4: Same Version Tie-breaker
209
+ ```
210
+ Input:
211
+ cwd: /projects/workspace
212
+ packageName: util
213
+ checkCwd: false
214
+
215
+ Resolution:
216
+ ✗ Workspace: not found
217
+ ✓ Global: util@1.2.3
218
+ ✓ Registry: util@1.2.3
219
+
220
+ Selection: Global@1.2.3 (prefer mutable)
221
+ ```
222
+
223
+ ## Configuration Matrix
224
+
225
+ | Option | Pack | Install | Purpose |
226
+ |--------|------|---------|---------|
227
+ | `checkCwd` | ✅ true | ❌ false | Pack prioritizes current work |
228
+ | `searchWorkspace` | ✅ true | ✅ true | Both check workspace |
229
+ | `searchGlobal` | ✅ true | ✅ true | Both check global |
230
+ | `searchRegistry` | ❌ false | ✅ true | Pack skips immutable |
231
+
232
+ ## Benefits of Unified Architecture
233
+
234
+ ### Code Quality
235
+ - **DRY**: Single implementation
236
+ - **Testable**: Pure functions
237
+ - **Maintainable**: One place to update
238
+ - **Extensible**: Easy to add locations
239
+
240
+ ### User Experience
241
+ - **Consistent**: Similar behavior across commands
242
+ - **Predictable**: Clear priority rules
243
+ - **Flexible**: Works in more scenarios
244
+ - **Transparent**: Clear resolution messages
245
+
246
+ ### Developer Experience
247
+ - **Simple API**: One function, multiple configs
248
+ - **Type-safe**: Full TypeScript support
249
+ - **Well-documented**: Inline and external docs
250
+ - **Easy to use**: Import and configure
251
+
252
+ ## API Reference
253
+
254
+ ### Main Function
255
+
256
+ ```typescript
257
+ resolvePackageByName(options: PackageNameResolutionOptions):
258
+ Promise<PackageNameResolutionResult>
259
+ ```
260
+
261
+ ### Input Type
262
+
263
+ ```typescript
264
+ interface PackageNameResolutionOptions {
265
+ cwd: string; // Current working directory
266
+ packageName: string; // Package to resolve
267
+ checkCwd?: boolean; // Check CWD first (pack=true)
268
+ searchWorkspace?: boolean; // Check workspace packages
269
+ searchGlobal?: boolean; // Check global packages
270
+ searchRegistry?: boolean; // Check local registry
271
+ }
272
+ ```
273
+
274
+ ### Output Type
275
+
276
+ ```typescript
277
+ interface PackageNameResolutionResult {
278
+ found: boolean; // Whether package was found
279
+ path?: string; // Absolute path to package
280
+ version?: string; // Package version
281
+ sourceType?: PackageSourceType; // Where it was found
282
+ resolutionInfo?: SourceResolutionInfo; // Details
283
+ }
284
+ ```
285
+
286
+ ## Testing Strategy
287
+
288
+ ### Unit Tests
289
+ Individual functions tested in isolation:
290
+ - `checkCwdPackage()`
291
+ - `checkWorkspacePackage()`
292
+ - `checkGlobalPackage()`
293
+ - `checkRegistryPackage()`
294
+ - `selectBestCandidate()`
295
+
296
+ ### Integration Tests
297
+ End-to-end scenarios:
298
+ - Pack from CWD
299
+ - Pack from workspace
300
+ - Pack from global
301
+ - CWD priority
302
+ - Version comparison
303
+
304
+ ### Regression Tests
305
+ Ensure no breaking changes:
306
+ - Existing pack tests
307
+ - Existing install tests
308
+ - Install selection tests
309
+
310
+ ## Future Enhancements
311
+
312
+ ### Potential Features
313
+ 1. **Custom search paths** via config
314
+ 2. **Resolution caching** for performance
315
+ 3. **Parallel searches** across locations
316
+ 4. **Resolution plugins** for extensibility
317
+ 5. **Verbose tracing** for debugging
318
+
319
+ ### Potential Optimizations
320
+ 1. **Early exit** on first match (configurable)
321
+ 2. **Lazy evaluation** of candidates
322
+ 3. **Memoization** of results
323
+ 4. **Index-based lookup** for speed
324
+
325
+ ## Related Files
326
+
327
+ - **Implementation**: `src/utils/package-name-resolution.ts`
328
+ - **Pack Usage**: `src/core/pack/pack-pipeline.ts`
329
+ - **Install Usage**: `src/utils/package-input.ts`
330
+ - **Tests**: `tests/pack-name-resolution.test.ts`
@@ -3,8 +3,8 @@
3
3
  This directory contains the canonical on-disk structure spec for OpenPackage packages, split into focused documents:
4
4
 
5
5
  - **Root layout**: `package-root-layout.md` – Package directory structure and content types
6
- - **Universal content**: `universal-content.md` – Platform-normalized content under `.openpackage/`
7
- - **Package index**: `package-index-yml.md` – File mapping and `package.index.yml` structure
6
+ - **Universal content**: `universal-content.md` – Platform-normalized content at package root
7
+ - **Package index**: `package-index-yml.md` – File mapping and `openpackage.index.yml` structure
8
8
  - **Registry payload and 1:1 copy rules**: `registry-payload-and-copy.md` – What gets included in packages
9
9
  - **Nested packages and parent packages**: `nested-packages-and-parent-packages.md` – Multi-package workspaces
10
10
 
@@ -12,7 +12,7 @@ This directory contains the canonical on-disk structure spec for OpenPackage pac
12
12
 
13
13
  #### Core Concept: Package Root
14
14
 
15
- A **package root** is any directory containing `.openpackage/package.yml`. This applies to:
15
+ A **package root** is any directory containing `openpackage.yml` at its root. This applies to:
16
16
 
17
17
  - **Workspace root package**: `cwd/` is the package root
18
18
  - **Nested packages**: `cwd/.openpackage/packages/<name>/` is the package root
@@ -22,16 +22,14 @@ All package roots have **identical internal structure**:
22
22
 
23
23
  ```text
24
24
  <package-root>/
25
- .openpackage/
26
- package.yml # marks this as a package
27
- package.index.yml # install index (not in registry)
28
- commands/ # universal content
29
- rules/
30
- agents/
31
- skills/
32
- <root-dir>/ # root-level content (outside .openpackage/)
25
+ openpackage.yml # package manifest (marks this as a package)
26
+ <universal-subdirs>/ # universal content (standard: commands/, rules/, agents/, skills/; custom from platforms.jsonc)
33
27
  AGENTS.md # root files
34
- README.md
28
+ <platform-root-files> # optional platform root file overrides (e.g. CLAUDE.md)
29
+ root/ # OPTIONAL – copied 1:1 to workspace root (strip `root/` prefix)
30
+ <root-dir>/ # other root-level content (not installed by default)
31
+ README.md # docs (not installed by default)
32
+ LICENSE.md # docs (not installed by default)
35
33
  ```
36
34
 
37
35
  ---
@@ -40,11 +38,14 @@ All package roots have **identical internal structure**:
40
38
 
41
39
  | Type | Location | Example |
42
40
  |------|----------|---------|
43
- | **Universal content** | `.openpackage/<subdir>/` | `.openpackage/commands/test.md` |
44
- | **Root-level content** | At package root (outside `.openpackage/`) | `<dir>/helper.md`, `AGENTS.md` |
41
+ | **Universal content** | `<package-root>/<subdir>/` | `commands/test.md` |
42
+ | **Root-level content** | `<package-root>/<path>` | `AGENTS.md`, `root/tools/helper.sh`, `README.md` (not installed by default) |
45
43
 
46
44
  **Universal content** is mapped to platform-specific paths during install.
47
- **Root-level content** is copied 1:1 without transformation.
45
+ **Root-level content** is only installed when it is a root file (e.g., `AGENTS.md`) or under `root/**` (strip-prefix copy).
46
+
47
+ > **Workspace-local metadata** (like `.openpackage/openpackage.yml` and `openpackage.index.yml`) lives under `.openpackage/`
48
+ > in the workspace and is **not part of the package payload**.
48
49
 
49
50
  ---
50
51
 
@@ -52,8 +53,8 @@ All package roots have **identical internal structure**:
52
53
 
53
54
  A package directory can be **moved or copied 1:1** between:
54
55
 
55
- - Workspace root packages (`cwd/`)
56
- - Nested workspace packages (`cwd/.openpackage/packages/<name>/`)
56
+ - Workspace root packages (effective `cwd/` via shell or `--cwd`; see [../../cli-options.md])
57
+ - Nested workspace packages (effective `cwd/.openpackage/packages/<name>/`)
57
58
  - Local registry copies (`~/.openpackage/registry/<name>/<version>/`)
58
59
 
59
60
  …while preserving the same internal layout and invariants.
@@ -4,29 +4,32 @@
4
4
 
5
5
  ```text
6
6
  <workspace-root>/ # root package (package root = cwd/)
7
- .openpackage/
8
- package.yml # root package manifest
9
- package.index.yml # root package index
10
- commands/ # root package universal content
11
- shared-command.md
12
- rules/
13
- shared-rule.md
14
- <root-dir>/ # root package root-level content (any directory)
15
- workspace-helper.md
16
- AGENTS.md # root package root file
17
- packages/ # nested packages directory (workspace root only)
18
- alpha/ # nested package (package root = .openpackage/packages/alpha/)
19
- .openpackage/
20
- package.yml
21
- package.index.yml
7
+ openpackage.yml # root package manifest (payload)
8
+ commands/ # root package universal content (payload)
9
+ shared-command.md
10
+ rules/
11
+ shared-rule.md
12
+ AGENTS.md # root package root file (payload)
13
+ root/ # direct copy: copied 1:1 to workspace root (payload)
14
+ tools/
15
+ helper.sh # → installs to <workspace>/tools/helper.sh
16
+ docs/ # other root-level content (NOT installed)
17
+ README.md
18
+ .openpackage/ # workspace-local metadata (not payload)
19
+ openpackage.yml # workspace manifest (dependency intent)
20
+ openpackage.index.yml # workspace index (never in registry payload)
21
+ packages/ # nested packages directory
22
+ alpha/ # nested package (package root = .openpackage/packages/alpha/)
23
+ openpackage.yml # nested package manifest (package root)
22
24
  commands/
23
25
  alpha-command.md
24
- <root-dir>/ # nested package root-level content
25
- alpha-helper.md
26
- beta/ # nested package (package root = .openpackage/packages/beta/)
27
- .openpackage/
28
- package.yml
29
- package.index.yml
26
+ root/ # direct copy for nested package
27
+ scripts/
28
+ setup.sh # installs to <workspace>/scripts/setup.sh
29
+ docs/ # NOT installed
30
+ notes.md
31
+ beta/ # nested package (package root = .openpackage/packages/beta/)
32
+ openpackage.yml # nested package manifest (package root)
30
33
  rules/
31
34
  beta-rule.md
32
35
  ```
@@ -35,16 +38,16 @@
35
38
 
36
39
  #### Key Rules
37
40
 
38
- - Each `packages/<name>/` directory is its **own canonical package root**, with:
39
- - Its own `.openpackage/package.yml` (marks it as a package)
40
- - Its own `.openpackage/` content directory
41
- - Its own root-level content (outside `.openpackage/`)
41
+ - Each `.openpackage/packages/<name>/` directory is its **own canonical package root**, with:
42
+ - Its own `openpackage.yml` at the package root (marks it as a package)
43
+ - Its own universal subdirs at the package root (e.g., `commands/`, `rules/`)
44
+ - Its own root-level content (root files, `root/` directory, etc.)
42
45
 
43
- - The **parent root package never inlines** `packages/<name>/` into its own payload.
46
+ - The **parent root package never inlines** `.openpackage/packages/<name>/` into its own payload.
44
47
 
45
48
  - Registry entries for `alpha` and `beta` are created **independently** from their respective package roots.
46
49
 
47
- - **Only the workspace root package** can have a `packages/` directory. Nested packages cannot have further nested packages.
50
+ - **Only the workspace root package** can have a `.openpackage/packages/` directory. Nested packages cannot have further nested packages.
48
51
 
49
52
  ---
50
53
 
@@ -64,10 +67,8 @@ Both root and nested packages have **identical internal structure**:
64
67
 
65
68
  ```text
66
69
  <package-root>/
67
- .openpackage/
68
- package.yml
69
- package.index.yml
70
- <universal-subdirs>/
70
+ openpackage.yml
71
+ <universal-subdirs>/
71
72
  <root-level-content>/
72
73
  <root-files>
73
74
  ```