@cairn-tool/cairn 2.0.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 (526) hide show
  1. package/.markdownlintrc +7 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1431 -0
  4. package/dist/agent/audit/baseline.d.ts +69 -0
  5. package/dist/agent/audit/baseline.js +128 -0
  6. package/dist/agent/audit/baseline.js.map +1 -0
  7. package/dist/agent/audit/index.d.ts +126 -0
  8. package/dist/agent/audit/index.js +625 -0
  9. package/dist/agent/audit/index.js.map +1 -0
  10. package/dist/agent/import/detect.d.ts +49 -0
  11. package/dist/agent/import/detect.js +159 -0
  12. package/dist/agent/import/detect.js.map +1 -0
  13. package/dist/agent/import/normalize.d.ts +72 -0
  14. package/dist/agent/import/normalize.js +475 -0
  15. package/dist/agent/import/normalize.js.map +1 -0
  16. package/dist/agent/install/index.d.ts +211 -0
  17. package/dist/agent/install/index.js +907 -0
  18. package/dist/agent/install/index.js.map +1 -0
  19. package/dist/agent/manifest.d.ts +75 -0
  20. package/dist/agent/manifest.js +210 -0
  21. package/dist/agent/manifest.js.map +1 -0
  22. package/dist/agent/marketplace/index.d.ts +69 -0
  23. package/dist/agent/marketplace/index.js +212 -0
  24. package/dist/agent/marketplace/index.js.map +1 -0
  25. package/dist/agent/marketplace/spec.d.ts +48 -0
  26. package/dist/agent/marketplace/spec.js +237 -0
  27. package/dist/agent/marketplace/spec.js.map +1 -0
  28. package/dist/agent/output.d.ts +36 -0
  29. package/dist/agent/output.js +56 -0
  30. package/dist/agent/output.js.map +1 -0
  31. package/dist/agent/overlays.d.ts +38 -0
  32. package/dist/agent/overlays.js +223 -0
  33. package/dist/agent/overlays.js.map +1 -0
  34. package/dist/agent/package/index.d.ts +105 -0
  35. package/dist/agent/package/index.js +339 -0
  36. package/dist/agent/package/index.js.map +1 -0
  37. package/dist/agent/package/tar.d.ts +36 -0
  38. package/dist/agent/package/tar.js +137 -0
  39. package/dist/agent/package/tar.js.map +1 -0
  40. package/dist/agent/parser.d.ts +13 -0
  41. package/dist/agent/parser.js +559 -0
  42. package/dist/agent/parser.js.map +1 -0
  43. package/dist/agent/render.d.ts +16 -0
  44. package/dist/agent/render.js +721 -0
  45. package/dist/agent/render.js.map +1 -0
  46. package/dist/agent/sarif.d.ts +18 -0
  47. package/dist/agent/sarif.js +56 -0
  48. package/dist/agent/sarif.js.map +1 -0
  49. package/dist/agent/scaffold.d.ts +86 -0
  50. package/dist/agent/scaffold.js +250 -0
  51. package/dist/agent/scaffold.js.map +1 -0
  52. package/dist/agent/targets/antigravity.d.ts +17 -0
  53. package/dist/agent/targets/antigravity.js +218 -0
  54. package/dist/agent/targets/antigravity.js.map +1 -0
  55. package/dist/agent/targets/claude-code.d.ts +2 -0
  56. package/dist/agent/targets/claude-code.js +220 -0
  57. package/dist/agent/targets/claude-code.js.map +1 -0
  58. package/dist/agent/targets/codex.d.ts +2 -0
  59. package/dist/agent/targets/codex.js +212 -0
  60. package/dist/agent/targets/codex.js.map +1 -0
  61. package/dist/agent/targets/cursor.d.ts +2 -0
  62. package/dist/agent/targets/cursor.js +210 -0
  63. package/dist/agent/targets/cursor.js.map +1 -0
  64. package/dist/agent/targets/index.d.ts +31 -0
  65. package/dist/agent/targets/index.js +64 -0
  66. package/dist/agent/targets/index.js.map +1 -0
  67. package/dist/agent/targets/opencode.d.ts +15 -0
  68. package/dist/agent/targets/opencode.js +215 -0
  69. package/dist/agent/targets/opencode.js.map +1 -0
  70. package/dist/agent/targets/schema.d.ts +315 -0
  71. package/dist/agent/targets/schema.js +179 -0
  72. package/dist/agent/targets/schema.js.map +1 -0
  73. package/dist/agent/test/assert.d.ts +46 -0
  74. package/dist/agent/test/assert.js +288 -0
  75. package/dist/agent/test/assert.js.map +1 -0
  76. package/dist/agent/test/index.d.ts +73 -0
  77. package/dist/agent/test/index.js +181 -0
  78. package/dist/agent/test/index.js.map +1 -0
  79. package/dist/agent/test/schema.d.ts +81 -0
  80. package/dist/agent/test/schema.js +235 -0
  81. package/dist/agent/test/schema.js.map +1 -0
  82. package/dist/agent/types.d.ts +204 -0
  83. package/dist/agent/types.js +11 -0
  84. package/dist/agent/types.js.map +1 -0
  85. package/dist/agent/upgrade.d.ts +29 -0
  86. package/dist/agent/upgrade.js +72 -0
  87. package/dist/agent/upgrade.js.map +1 -0
  88. package/dist/agent/writer.d.ts +30 -0
  89. package/dist/agent/writer.js +73 -0
  90. package/dist/agent/writer.js.map +1 -0
  91. package/dist/archive/db.d.ts +20 -0
  92. package/dist/archive/db.js +98 -0
  93. package/dist/archive/db.js.map +1 -0
  94. package/dist/archive/progress.d.ts +62 -0
  95. package/dist/archive/progress.js +151 -0
  96. package/dist/archive/progress.js.map +1 -0
  97. package/dist/archive/query.d.ts +86 -0
  98. package/dist/archive/query.js +241 -0
  99. package/dist/archive/query.js.map +1 -0
  100. package/dist/archive/run.d.ts +91 -0
  101. package/dist/archive/run.js +331 -0
  102. package/dist/archive/run.js.map +1 -0
  103. package/dist/archive/segments.d.ts +89 -0
  104. package/dist/archive/segments.js +144 -0
  105. package/dist/archive/segments.js.map +1 -0
  106. package/dist/archive/sets.d.ts +58 -0
  107. package/dist/archive/sets.js +344 -0
  108. package/dist/archive/sets.js.map +1 -0
  109. package/dist/archive/tar-read.d.ts +35 -0
  110. package/dist/archive/tar-read.js +90 -0
  111. package/dist/archive/tar-read.js.map +1 -0
  112. package/dist/audit-baseline.d.ts +66 -0
  113. package/dist/audit-baseline.js +124 -0
  114. package/dist/audit-baseline.js.map +1 -0
  115. package/dist/automation.d.ts +16 -0
  116. package/dist/automation.js +38 -0
  117. package/dist/automation.js.map +1 -0
  118. package/dist/backlinks.d.ts +15 -0
  119. package/dist/backlinks.js +30 -0
  120. package/dist/backlinks.js.map +1 -0
  121. package/dist/checkers/katex.d.ts +3 -0
  122. package/dist/checkers/katex.js +71 -0
  123. package/dist/checkers/katex.js.map +1 -0
  124. package/dist/checkers/markdown-lint.d.ts +28 -0
  125. package/dist/checkers/markdown-lint.js +53 -0
  126. package/dist/checkers/markdown-lint.js.map +1 -0
  127. package/dist/checkers/mermaid.d.ts +6 -0
  128. package/dist/checkers/mermaid.js +53 -0
  129. package/dist/checkers/mermaid.js.map +1 -0
  130. package/dist/checkers/references.d.ts +3 -0
  131. package/dist/checkers/references.js +55 -0
  132. package/dist/checkers/references.js.map +1 -0
  133. package/dist/cli.d.ts +2 -0
  134. package/dist/cli.js +1117 -0
  135. package/dist/cli.js.map +1 -0
  136. package/dist/command-result.d.ts +6 -0
  137. package/dist/command-result.js +13 -0
  138. package/dist/command-result.js.map +1 -0
  139. package/dist/commands/agent-audit.d.ts +21 -0
  140. package/dist/commands/agent-audit.js +119 -0
  141. package/dist/commands/agent-audit.js.map +1 -0
  142. package/dist/commands/agent-doctor.d.ts +25 -0
  143. package/dist/commands/agent-doctor.js +217 -0
  144. package/dist/commands/agent-doctor.js.map +1 -0
  145. package/dist/commands/agent-import.d.ts +21 -0
  146. package/dist/commands/agent-import.js +212 -0
  147. package/dist/commands/agent-import.js.map +1 -0
  148. package/dist/commands/agent-install.d.ts +18 -0
  149. package/dist/commands/agent-install.js +59 -0
  150. package/dist/commands/agent-install.js.map +1 -0
  151. package/dist/commands/agent-installed.d.ts +6 -0
  152. package/dist/commands/agent-installed.js +17 -0
  153. package/dist/commands/agent-installed.js.map +1 -0
  154. package/dist/commands/agent-marketplace.d.ts +11 -0
  155. package/dist/commands/agent-marketplace.js +178 -0
  156. package/dist/commands/agent-marketplace.js.map +1 -0
  157. package/dist/commands/agent-package.d.ts +16 -0
  158. package/dist/commands/agent-package.js +159 -0
  159. package/dist/commands/agent-package.js.map +1 -0
  160. package/dist/commands/agent-scaffold.d.ts +17 -0
  161. package/dist/commands/agent-scaffold.js +181 -0
  162. package/dist/commands/agent-scaffold.js.map +1 -0
  163. package/dist/commands/agent-specs.d.ts +7 -0
  164. package/dist/commands/agent-specs.js +20 -0
  165. package/dist/commands/agent-specs.js.map +1 -0
  166. package/dist/commands/agent-test.d.ts +21 -0
  167. package/dist/commands/agent-test.js +50 -0
  168. package/dist/commands/agent-test.js.map +1 -0
  169. package/dist/commands/agent-uninstall.d.ts +6 -0
  170. package/dist/commands/agent-uninstall.js +45 -0
  171. package/dist/commands/agent-uninstall.js.map +1 -0
  172. package/dist/commands/agent-upgrade.d.ts +5 -0
  173. package/dist/commands/agent-upgrade.js +105 -0
  174. package/dist/commands/agent-upgrade.js.map +1 -0
  175. package/dist/commands/agent.d.ts +27 -0
  176. package/dist/commands/agent.js +549 -0
  177. package/dist/commands/agent.js.map +1 -0
  178. package/dist/commands/archive.d.ts +47 -0
  179. package/dist/commands/archive.js +311 -0
  180. package/dist/commands/archive.js.map +1 -0
  181. package/dist/commands/audit.d.ts +25 -0
  182. package/dist/commands/audit.js +325 -0
  183. package/dist/commands/audit.js.map +1 -0
  184. package/dist/commands/check-snippets.d.ts +58 -0
  185. package/dist/commands/check-snippets.js +247 -0
  186. package/dist/commands/check-snippets.js.map +1 -0
  187. package/dist/commands/check-urls.d.ts +52 -0
  188. package/dist/commands/check-urls.js +205 -0
  189. package/dist/commands/check-urls.js.map +1 -0
  190. package/dist/commands/code-blocks.d.ts +8 -0
  191. package/dist/commands/code-blocks.js +66 -0
  192. package/dist/commands/code-blocks.js.map +1 -0
  193. package/dist/commands/completion.d.ts +15 -0
  194. package/dist/commands/completion.js +20 -0
  195. package/dist/commands/completion.js.map +1 -0
  196. package/dist/commands/context.d.ts +16 -0
  197. package/dist/commands/context.js +131 -0
  198. package/dist/commands/context.js.map +1 -0
  199. package/dist/commands/describe.d.ts +12 -0
  200. package/dist/commands/describe.js +62 -0
  201. package/dist/commands/describe.js.map +1 -0
  202. package/dist/commands/diff.d.ts +11 -0
  203. package/dist/commands/diff.js +185 -0
  204. package/dist/commands/diff.js.map +1 -0
  205. package/dist/commands/fix.d.ts +59 -0
  206. package/dist/commands/fix.js +173 -0
  207. package/dist/commands/fix.js.map +1 -0
  208. package/dist/commands/frontmatter.d.ts +7 -0
  209. package/dist/commands/frontmatter.js +84 -0
  210. package/dist/commands/frontmatter.js.map +1 -0
  211. package/dist/commands/graph.d.ts +12 -0
  212. package/dist/commands/graph.js +122 -0
  213. package/dist/commands/graph.js.map +1 -0
  214. package/dist/commands/headers.d.ts +7 -0
  215. package/dist/commands/headers.js +48 -0
  216. package/dist/commands/headers.js.map +1 -0
  217. package/dist/commands/index.d.ts +8 -0
  218. package/dist/commands/index.js +32 -0
  219. package/dist/commands/index.js.map +1 -0
  220. package/dist/commands/links.d.ts +9 -0
  221. package/dist/commands/links.js +123 -0
  222. package/dist/commands/links.js.map +1 -0
  223. package/dist/commands/lint-dir.d.ts +15 -0
  224. package/dist/commands/lint-dir.js +156 -0
  225. package/dist/commands/lint-dir.js.map +1 -0
  226. package/dist/commands/lint.d.ts +14 -0
  227. package/dist/commands/lint.js +45 -0
  228. package/dist/commands/lint.js.map +1 -0
  229. package/dist/commands/orphans.d.ts +10 -0
  230. package/dist/commands/orphans.js +74 -0
  231. package/dist/commands/orphans.js.map +1 -0
  232. package/dist/commands/outline.d.ts +7 -0
  233. package/dist/commands/outline.js +54 -0
  234. package/dist/commands/outline.js.map +1 -0
  235. package/dist/commands/query.d.ts +18 -0
  236. package/dist/commands/query.js +341 -0
  237. package/dist/commands/query.js.map +1 -0
  238. package/dist/commands/refs-to.d.ts +8 -0
  239. package/dist/commands/refs-to.js +65 -0
  240. package/dist/commands/refs-to.js.map +1 -0
  241. package/dist/commands/refs.d.ts +10 -0
  242. package/dist/commands/refs.js +103 -0
  243. package/dist/commands/refs.js.map +1 -0
  244. package/dist/commands/rename-file.d.ts +16 -0
  245. package/dist/commands/rename-file.js +215 -0
  246. package/dist/commands/rename-file.js.map +1 -0
  247. package/dist/commands/rename-heading.d.ts +10 -0
  248. package/dist/commands/rename-heading.js +182 -0
  249. package/dist/commands/rename-heading.js.map +1 -0
  250. package/dist/commands/schema.d.ts +10 -0
  251. package/dist/commands/schema.js +34 -0
  252. package/dist/commands/schema.js.map +1 -0
  253. package/dist/commands/scripts.d.ts +59 -0
  254. package/dist/commands/scripts.js +222 -0
  255. package/dist/commands/scripts.js.map +1 -0
  256. package/dist/commands/section.d.ts +9 -0
  257. package/dist/commands/section.js +49 -0
  258. package/dist/commands/section.js.map +1 -0
  259. package/dist/commands/serve.d.ts +6 -0
  260. package/dist/commands/serve.js +48 -0
  261. package/dist/commands/serve.js.map +1 -0
  262. package/dist/commands/stats.d.ts +6 -0
  263. package/dist/commands/stats.js +109 -0
  264. package/dist/commands/stats.js.map +1 -0
  265. package/dist/commands/structure.d.ts +6 -0
  266. package/dist/commands/structure.js +130 -0
  267. package/dist/commands/structure.js.map +1 -0
  268. package/dist/commands/tables.d.ts +8 -0
  269. package/dist/commands/tables.js +77 -0
  270. package/dist/commands/tables.js.map +1 -0
  271. package/dist/commands/tasks.d.ts +8 -0
  272. package/dist/commands/tasks.js +59 -0
  273. package/dist/commands/tasks.js.map +1 -0
  274. package/dist/commands/toc.d.ts +18 -0
  275. package/dist/commands/toc.js +105 -0
  276. package/dist/commands/toc.js.map +1 -0
  277. package/dist/commands/update-check.d.ts +36 -0
  278. package/dist/commands/update-check.js +119 -0
  279. package/dist/commands/update-check.js.map +1 -0
  280. package/dist/commands/usage.d.ts +56 -0
  281. package/dist/commands/usage.js +883 -0
  282. package/dist/commands/usage.js.map +1 -0
  283. package/dist/commands/validate-frontmatter.d.ts +13 -0
  284. package/dist/commands/validate-frontmatter.js +34 -0
  285. package/dist/commands/validate-frontmatter.js.map +1 -0
  286. package/dist/completion/model.d.ts +49 -0
  287. package/dist/completion/model.js +194 -0
  288. package/dist/completion/model.js.map +1 -0
  289. package/dist/completion/shells.d.ts +2 -0
  290. package/dist/completion/shells.js +280 -0
  291. package/dist/completion/shells.js.map +1 -0
  292. package/dist/config-schema.d.ts +15 -0
  293. package/dist/config-schema.js +44 -0
  294. package/dist/config-schema.js.map +1 -0
  295. package/dist/config.d.ts +102 -0
  296. package/dist/config.js +614 -0
  297. package/dist/config.js.map +1 -0
  298. package/dist/context.d.ts +106 -0
  299. package/dist/context.js +202 -0
  300. package/dist/context.js.map +1 -0
  301. package/dist/contract/describe.d.ts +84 -0
  302. package/dist/contract/describe.js +104 -0
  303. package/dist/contract/describe.js.map +1 -0
  304. package/dist/contract/registry.d.ts +2 -0
  305. package/dist/contract/registry.js +622 -0
  306. package/dist/contract/registry.js.map +1 -0
  307. package/dist/contract/schemas/agent.d.ts +2 -0
  308. package/dist/contract/schemas/agent.js +572 -0
  309. package/dist/contract/schemas/agent.js.map +1 -0
  310. package/dist/contract/schemas/archive.d.ts +3 -0
  311. package/dist/contract/schemas/archive.js +227 -0
  312. package/dist/contract/schemas/archive.js.map +1 -0
  313. package/dist/contract/schemas/index.d.ts +11 -0
  314. package/dist/contract/schemas/index.js +49 -0
  315. package/dist/contract/schemas/index.js.map +1 -0
  316. package/dist/contract/schemas/markdown.d.ts +15 -0
  317. package/dist/contract/schemas/markdown.js +1035 -0
  318. package/dist/contract/schemas/markdown.js.map +1 -0
  319. package/dist/contract/schemas/meta.d.ts +5 -0
  320. package/dist/contract/schemas/meta.js +233 -0
  321. package/dist/contract/schemas/meta.js.map +1 -0
  322. package/dist/contract/schemas/scripts.d.ts +4 -0
  323. package/dist/contract/schemas/scripts.js +183 -0
  324. package/dist/contract/schemas/scripts.js.map +1 -0
  325. package/dist/contract/schemas/shared.d.ts +11 -0
  326. package/dist/contract/schemas/shared.js +26 -0
  327. package/dist/contract/schemas/shared.js.map +1 -0
  328. package/dist/contract/schemas/usage.d.ts +6 -0
  329. package/dist/contract/schemas/usage.js +489 -0
  330. package/dist/contract/schemas/usage.js.map +1 -0
  331. package/dist/contract/types.d.ts +63 -0
  332. package/dist/contract/types.js +2 -0
  333. package/dist/contract/types.js.map +1 -0
  334. package/dist/contract/version.d.ts +20 -0
  335. package/dist/contract/version.js +21 -0
  336. package/dist/contract/version.js.map +1 -0
  337. package/dist/diff.d.ts +156 -0
  338. package/dist/diff.js +500 -0
  339. package/dist/diff.js.map +1 -0
  340. package/dist/edit-plan.d.ts +133 -0
  341. package/dist/edit-plan.js +245 -0
  342. package/dist/edit-plan.js.map +1 -0
  343. package/dist/fix/markdownlint-fixer.d.ts +34 -0
  344. package/dist/fix/markdownlint-fixer.js +125 -0
  345. package/dist/fix/markdownlint-fixer.js.map +1 -0
  346. package/dist/fix/registry.d.ts +48 -0
  347. package/dist/fix/registry.js +28 -0
  348. package/dist/fix/registry.js.map +1 -0
  349. package/dist/fix/relative-links-fixer.d.ts +21 -0
  350. package/dist/fix/relative-links-fixer.js +96 -0
  351. package/dist/fix/relative-links-fixer.js.map +1 -0
  352. package/dist/fix/snippets-fixer.d.ts +2 -0
  353. package/dist/fix/snippets-fixer.js +64 -0
  354. package/dist/fix/snippets-fixer.js.map +1 -0
  355. package/dist/fix/toc-fixer.d.ts +2 -0
  356. package/dist/fix/toc-fixer.js +94 -0
  357. package/dist/fix/toc-fixer.js.map +1 -0
  358. package/dist/formats.d.ts +22 -0
  359. package/dist/formats.js +34 -0
  360. package/dist/formats.js.map +1 -0
  361. package/dist/formatters.d.ts +11 -0
  362. package/dist/formatters.js +48 -0
  363. package/dist/formatters.js.map +1 -0
  364. package/dist/frontmatter-validation.d.ts +11 -0
  365. package/dist/frontmatter-validation.js +188 -0
  366. package/dist/frontmatter-validation.js.map +1 -0
  367. package/dist/git.d.ts +40 -0
  368. package/dist/git.js +124 -0
  369. package/dist/git.js.map +1 -0
  370. package/dist/graph.d.ts +50 -0
  371. package/dist/graph.js +200 -0
  372. package/dist/graph.js.map +1 -0
  373. package/dist/input-selection.d.ts +9 -0
  374. package/dist/input-selection.js +122 -0
  375. package/dist/input-selection.js.map +1 -0
  376. package/dist/input.d.ts +2 -0
  377. package/dist/input.js +32 -0
  378. package/dist/input.js.map +1 -0
  379. package/dist/link-target.d.ts +39 -0
  380. package/dist/link-target.js +68 -0
  381. package/dist/link-target.js.map +1 -0
  382. package/dist/lint.d.ts +13 -0
  383. package/dist/lint.js +27 -0
  384. package/dist/lint.js.map +1 -0
  385. package/dist/markdown-ast.d.ts +73 -0
  386. package/dist/markdown-ast.js +187 -0
  387. package/dist/markdown-ast.js.map +1 -0
  388. package/dist/object-path.d.ts +14 -0
  389. package/dist/object-path.js +14 -0
  390. package/dist/object-path.js.map +1 -0
  391. package/dist/option-utils.d.ts +13 -0
  392. package/dist/option-utils.js +25 -0
  393. package/dist/option-utils.js.map +1 -0
  394. package/dist/outline.d.ts +16 -0
  395. package/dist/outline.js +32 -0
  396. package/dist/outline.js.map +1 -0
  397. package/dist/query/entities.d.ts +60 -0
  398. package/dist/query/entities.js +219 -0
  399. package/dist/query/entities.js.map +1 -0
  400. package/dist/query/execute.d.ts +22 -0
  401. package/dist/query/execute.js +0 -0
  402. package/dist/query/execute.js.map +1 -0
  403. package/dist/query/plan.d.ts +76 -0
  404. package/dist/query/plan.js +183 -0
  405. package/dist/query/plan.js.map +1 -0
  406. package/dist/query/render.d.ts +3 -0
  407. package/dist/query/render.js +39 -0
  408. package/dist/query/render.js.map +1 -0
  409. package/dist/refs.d.ts +19 -0
  410. package/dist/refs.js +10 -0
  411. package/dist/refs.js.map +1 -0
  412. package/dist/result.d.ts +49 -0
  413. package/dist/result.js +47 -0
  414. package/dist/result.js.map +1 -0
  415. package/dist/runtime.d.ts +35 -0
  416. package/dist/runtime.js +77 -0
  417. package/dist/runtime.js.map +1 -0
  418. package/dist/sarif.d.ts +36 -0
  419. package/dist/sarif.js +30 -0
  420. package/dist/sarif.js.map +1 -0
  421. package/dist/scripts/execute.d.ts +65 -0
  422. package/dist/scripts/execute.js +235 -0
  423. package/dist/scripts/execute.js.map +1 -0
  424. package/dist/scripts/registry.d.ts +55 -0
  425. package/dist/scripts/registry.js +103 -0
  426. package/dist/scripts/registry.js.map +1 -0
  427. package/dist/scripts/resolve.d.ts +90 -0
  428. package/dist/scripts/resolve.js +288 -0
  429. package/dist/scripts/resolve.js.map +1 -0
  430. package/dist/sections.d.ts +53 -0
  431. package/dist/sections.js +100 -0
  432. package/dist/sections.js.map +1 -0
  433. package/dist/serve/errors.d.ts +25 -0
  434. package/dist/serve/errors.js +45 -0
  435. package/dist/serve/errors.js.map +1 -0
  436. package/dist/serve/paths.d.ts +32 -0
  437. package/dist/serve/paths.js +71 -0
  438. package/dist/serve/paths.js.map +1 -0
  439. package/dist/serve/server.d.ts +31 -0
  440. package/dist/serve/server.js +123 -0
  441. package/dist/serve/server.js.map +1 -0
  442. package/dist/serve/tools.d.ts +19 -0
  443. package/dist/serve/tools.js +597 -0
  444. package/dist/serve/tools.js.map +1 -0
  445. package/dist/snippets.d.ts +184 -0
  446. package/dist/snippets.js +454 -0
  447. package/dist/snippets.js.map +1 -0
  448. package/dist/sqlite-store.d.ts +62 -0
  449. package/dist/sqlite-store.js +104 -0
  450. package/dist/sqlite-store.js.map +1 -0
  451. package/dist/sqlite.d.ts +59 -0
  452. package/dist/sqlite.js +51 -0
  453. package/dist/sqlite.js.map +1 -0
  454. package/dist/toc.d.ts +58 -0
  455. package/dist/toc.js +83 -0
  456. package/dist/toc.js.map +1 -0
  457. package/dist/types.d.ts +7 -0
  458. package/dist/types.js +2 -0
  459. package/dist/types.js.map +1 -0
  460. package/dist/update-notifier.d.ts +95 -0
  461. package/dist/update-notifier.js +301 -0
  462. package/dist/update-notifier.js.map +1 -0
  463. package/dist/url-cache.d.ts +14 -0
  464. package/dist/url-cache.js +70 -0
  465. package/dist/url-cache.js.map +1 -0
  466. package/dist/usage/aggregate.d.ts +107 -0
  467. package/dist/usage/aggregate.js +435 -0
  468. package/dist/usage/aggregate.js.map +1 -0
  469. package/dist/usage/db/index.d.ts +49 -0
  470. package/dist/usage/db/index.js +118 -0
  471. package/dist/usage/db/index.js.map +1 -0
  472. package/dist/usage/db/migrations.d.ts +29 -0
  473. package/dist/usage/db/migrations.js +38 -0
  474. package/dist/usage/db/migrations.js.map +1 -0
  475. package/dist/usage/db/open.d.ts +33 -0
  476. package/dist/usage/db/open.js +37 -0
  477. package/dist/usage/db/open.js.map +1 -0
  478. package/dist/usage/db/schema.d.ts +18 -0
  479. package/dist/usage/db/schema.js +147 -0
  480. package/dist/usage/db/schema.js.map +1 -0
  481. package/dist/usage/db/store.d.ts +74 -0
  482. package/dist/usage/db/store.js +280 -0
  483. package/dist/usage/db/store.js.map +1 -0
  484. package/dist/usage/events.d.ts +202 -0
  485. package/dist/usage/events.js +243 -0
  486. package/dist/usage/events.js.map +1 -0
  487. package/dist/usage/filter.d.ts +43 -0
  488. package/dist/usage/filter.js +97 -0
  489. package/dist/usage/filter.js.map +1 -0
  490. package/dist/usage/providers/antigravity.d.ts +2 -0
  491. package/dist/usage/providers/antigravity.js +431 -0
  492. package/dist/usage/providers/antigravity.js.map +1 -0
  493. package/dist/usage/providers/claude-code.d.ts +2 -0
  494. package/dist/usage/providers/claude-code.js +400 -0
  495. package/dist/usage/providers/claude-code.js.map +1 -0
  496. package/dist/usage/providers/codex.d.ts +2 -0
  497. package/dist/usage/providers/codex.js +387 -0
  498. package/dist/usage/providers/codex.js.map +1 -0
  499. package/dist/usage/providers/gemini-cli.d.ts +2 -0
  500. package/dist/usage/providers/gemini-cli.js +466 -0
  501. package/dist/usage/providers/gemini-cli.js.map +1 -0
  502. package/dist/usage/providers/index.d.ts +23 -0
  503. package/dist/usage/providers/index.js +46 -0
  504. package/dist/usage/providers/index.js.map +1 -0
  505. package/dist/usage/providers/opencode.d.ts +2 -0
  506. package/dist/usage/providers/opencode.js +422 -0
  507. package/dist/usage/providers/opencode.js.map +1 -0
  508. package/dist/usage/providers/protobuf.d.ts +35 -0
  509. package/dist/usage/providers/protobuf.js +125 -0
  510. package/dist/usage/providers/protobuf.js.map +1 -0
  511. package/dist/usage/providers/types.d.ts +74 -0
  512. package/dist/usage/providers/types.js +2 -0
  513. package/dist/usage/providers/types.js.map +1 -0
  514. package/dist/usage/scan.d.ts +54 -0
  515. package/dist/usage/scan.js +216 -0
  516. package/dist/usage/scan.js.map +1 -0
  517. package/dist/version.d.ts +2 -0
  518. package/dist/version.js +8 -0
  519. package/dist/version.js.map +1 -0
  520. package/dist/workspace-index.d.ts +39 -0
  521. package/dist/workspace-index.js +265 -0
  522. package/dist/workspace-index.js.map +1 -0
  523. package/dist/workspace.d.ts +89 -0
  524. package/dist/workspace.js +219 -0
  525. package/dist/workspace.js.map +1 -0
  526. package/package.json +92 -0
@@ -0,0 +1,212 @@
1
+ import path from "node:path";
2
+ import { diagnostic } from "../types.js";
3
+ import { loadBundle } from "../parser.js";
4
+ import { renderBundle } from "../render.js";
5
+ import { profileFor } from "../targets/index.js";
6
+ import { buildArchives, buildCatalogs, buildChecksums, buildSbom, checkAssets, checkCaseCollisions, checkExecutables, checkPinning, } from "../package/index.js";
7
+ import { TarPathTooLongError } from "../package/tar.js";
8
+ import { selectedForTarget } from "./spec.js";
9
+ export const MARKETPLACE_REPORT = "marketplace-report.json";
10
+ /**
11
+ * Distribution modes a collection supports.
12
+ *
13
+ * `agent package`'s third mode, `none`, is deliberately absent: a collection
14
+ * whose whole product is a catalog has nothing left when the catalog is
15
+ * suppressed.
16
+ */
17
+ export const COLLECTION_MODES = ["repo", "local"];
18
+ /**
19
+ * The collection's own pass/fail rule.
20
+ *
21
+ * Like package, install, and doctor, this cannot use the shared `hasFindings`:
22
+ * a codex bundle inherently carries approximate render diagnostics, which say
23
+ * nothing about whether a collection is publishable.
24
+ */
25
+ export function collectionHasFindings(diagnostics, strict) {
26
+ return diagnostics.some((item) => item.severity === "error" || (strict && item.severity === "warning"));
27
+ }
28
+ function sortByPath(artifacts) {
29
+ // Byte comparison, never localeCompare: that is ICU- and locale-dependent and
30
+ // would reorder a collection on a differently configured runner.
31
+ return [...artifacts].sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));
32
+ }
33
+ /**
34
+ * Relocates a rendered artifact out of its `<target>/<profile>/` prefix and
35
+ * under the plugin's own directory, so a collection reads
36
+ * `<target>/<plugin>/…` rather than `<target>/plugin/…` repeated N times.
37
+ */
38
+ function relocate(artifact, target, plugin) {
39
+ const prefix = `${target}/plugin/`;
40
+ return {
41
+ ...artifact,
42
+ path: `${target}/${plugin}/${artifact.path.slice(prefix.length)}`,
43
+ };
44
+ }
45
+ /**
46
+ * Renders every bundle for every target it is selected for, and aggregates one
47
+ * catalog per target.
48
+ *
49
+ * Catalog identity comes from the spec rather than from any bundle: a
50
+ * collection's name and owner are properties of the collection. Entry fields
51
+ * still resolve per bundle from the target profile, so `category`'s
52
+ * first-of-list transform and `author`'s object shape keep working with no
53
+ * per-target branching here.
54
+ */
55
+ export function buildCollection(spec, targets, mode, options = {}) {
56
+ const diagnostics = [];
57
+ const bundles = new Map();
58
+ for (const entry of spec.bundles)
59
+ bundles.set(entry.path, loadBundle(entry.root));
60
+ // Two bundles may declare distinct paths and still render the same plugin
61
+ // name, which a host would resolve arbitrarily.
62
+ const byName = new Map();
63
+ for (const entry of spec.bundles) {
64
+ const name = bundles.get(entry.path).name;
65
+ const previous = byName.get(name);
66
+ if (previous)
67
+ diagnostics.push({
68
+ ...diagnostic("AB905", `Bundles '${previous.path}' and '${entry.path}' are both '${name}'`, "unsupported", {
69
+ path: spec.file,
70
+ }),
71
+ severity: "error",
72
+ });
73
+ else
74
+ byName.set(name, entry);
75
+ }
76
+ const artifacts = [];
77
+ const reportTargets = [];
78
+ let archives = [];
79
+ for (const target of targets) {
80
+ const selected = spec.bundles.filter((entry) => selectedForTarget(entry, target));
81
+ // A notice, not a warning: an exclusion is the author saying so, and a
82
+ // warning would block the build under --strict for working as declared.
83
+ for (const entry of spec.bundles)
84
+ if (!selectedForTarget(entry, target))
85
+ diagnostics.push(diagnostic("AB907", `${entry.path} is not built for ${target}`, "exact", {
86
+ target,
87
+ path: entry.path,
88
+ }));
89
+ if (selected.length === 0) {
90
+ diagnostics.push({
91
+ ...diagnostic("AB906", `No bundles are built for ${target}`, "unsupported", {
92
+ target,
93
+ path: spec.file,
94
+ remediation: "Drop the target, or widen a bundle's include/exclude.",
95
+ }),
96
+ severity: "warning",
97
+ });
98
+ reportTargets.push({ target, catalog: null, plugins: [] });
99
+ continue;
100
+ }
101
+ const targetArtifacts = [];
102
+ const ordered = [];
103
+ const plugins = [];
104
+ for (const entry of selected) {
105
+ const bundle = bundles.get(entry.path);
106
+ const rendered = renderBundle(bundle, [target], ["plugin"]);
107
+ diagnostics.push(...rendered.diagnostics);
108
+ targetArtifacts.push(...rendered.artifacts.map((artifact) => relocate(artifact, target, bundle.name)));
109
+ ordered.push(bundle);
110
+ plugins.push({ name: bundle.name, version: bundle.version, source: entry.path });
111
+ }
112
+ // AB507 already means "this target produces no catalog"; a target that
113
+ // declares no marketplace at all is the same condition, and one condition
114
+ // keeps one id whichever command surfaces it. Silently emitting payloads
115
+ // and no catalog would be a surprise for a command whose product is one.
116
+ const marketplace = profileFor(target).marketplace;
117
+ if (!marketplace)
118
+ diagnostics.push(diagnostic("AB507", `${target} declares no marketplace catalog`, "unsupported", {
119
+ target,
120
+ path: spec.file,
121
+ remediation: `Drop ${target} from targets, or install the plugins directly.`,
122
+ }));
123
+ const location = marketplace?.catalog[mode];
124
+ const catalogs = buildCatalogs(ordered, [target], ["plugin"], mode, {
125
+ document: {
126
+ name: spec.name,
127
+ ...(spec.description !== undefined ? { description: spec.description } : {}),
128
+ owner: spec.owner,
129
+ },
130
+ // Relative to the catalog, which sits one level above the plugin
131
+ // directories — never rewritten to "./", which is only correct when a
132
+ // catalog shares a directory with the single plugin it describes.
133
+ sourceFor: (bundle) => `./${bundle.name}`,
134
+ catalogPathFor: (id, _profile, where) => `${id}/${where.directory}/${where.file}`,
135
+ attributeToBundle: true,
136
+ });
137
+ diagnostics.push(...catalogs.diagnostics);
138
+ targetArtifacts.push(...catalogs.artifacts);
139
+ // Per bundle, not once for the collection: each declares its own icon and
140
+ // screenshots, and checking only the first would let the rest ship an asset
141
+ // the catalog references but the payload does not carry.
142
+ for (const bundle of ordered)
143
+ diagnostics.push(...checkPinning(bundle), ...checkAssets(bundle, [target], targetArtifacts));
144
+ artifacts.push(...targetArtifacts);
145
+ reportTargets.push({
146
+ target,
147
+ catalog: location ? `${target}/${location.directory}/${location.file}` : null,
148
+ plugins,
149
+ });
150
+ }
151
+ const payload = sortByPath(artifacts);
152
+ diagnostics.push(...checkExecutables(payload), ...checkCaseCollisions(payload));
153
+ const extra = [];
154
+ if (options.archive)
155
+ for (const target of targets)
156
+ for (const entry of spec.bundles.filter((item) => selectedForTarget(item, target))) {
157
+ const bundle = bundles.get(entry.path);
158
+ // Archive each plugin from its own subtree, so the member paths inside
159
+ // are the plugin's own rather than the collection's.
160
+ const own = payload
161
+ .filter((artifact) => artifact.path.startsWith(`${target}/${bundle.name}/`))
162
+ .map((artifact) => ({
163
+ ...artifact,
164
+ path: `${target}/plugin/${artifact.path.slice(`${target}/${bundle.name}/`.length)}`,
165
+ }));
166
+ try {
167
+ const built = buildArchives(bundle, own, [target], ["plugin"]);
168
+ extra.push(...built.artifacts);
169
+ archives = [...archives, ...built.archives];
170
+ }
171
+ catch (cause) {
172
+ if (!(cause instanceof TarPathTooLongError))
173
+ throw cause;
174
+ diagnostics.push({
175
+ ...diagnostic("AB509", cause.message, "unsupported", {
176
+ path: cause.path,
177
+ remediation: "Shorten the path; ustar headers cannot express it.",
178
+ }),
179
+ severity: "error",
180
+ });
181
+ }
182
+ }
183
+ const withArchives = sortByPath([...payload, ...extra]);
184
+ const checksums = buildChecksums(withArchives);
185
+ // The sbom's subject is the collection, not any one bundle, so it is given a
186
+ // synthetic bundle carrying the spec's identity.
187
+ const subject = { ...bundles.values().next().value, name: spec.name, version: spec.version };
188
+ const sbom = buildSbom(subject, withArchives);
189
+ const report = {
190
+ name: spec.name,
191
+ version: spec.version,
192
+ targets: reportTargets,
193
+ archives,
194
+ checksums: checksums.path,
195
+ sbom: sbom.path,
196
+ checks: {
197
+ failed: diagnostics.filter((item) => item.severity === "error").length,
198
+ passed: diagnostics.filter((item) => item.severity !== "error").length,
199
+ },
200
+ };
201
+ return {
202
+ artifacts: [...withArchives, checksums, sbom],
203
+ report,
204
+ diagnostics,
205
+ bundles,
206
+ };
207
+ }
208
+ /** Collection-relative directories the writer owns outright, one per target. */
209
+ export function managedRootsFor(targets) {
210
+ return targets.map((target) => path.join(target));
211
+ }
212
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/marketplace/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { AgentDiagnostic, AgentTarget } from "../types.js";
2
+ import type { MarketplacePublisher } from "../manifest.js";
3
+ /**
4
+ * The `agent-marketplace.yaml` format: which bundles a collection contains, and
5
+ * which targets each is built for.
6
+ *
7
+ * `schemaVersion` is hand-owned and versions the source format authors write,
8
+ * the sixth such version in this project. It is unrelated to the package
9
+ * version, to `CONTRACT_VERSION`, to `PROFILE_SCHEMA_VERSION`, to the bundle
10
+ * `schemaVersion`, or to the test-file one. See `docs/contract.md`.
11
+ */
12
+ export declare const SUPPORTED_SPEC_SCHEMAS: readonly ["1"];
13
+ export declare const CURRENT_SPEC_SCHEMA = "1";
14
+ export declare const SPEC_FILENAME = "agent-marketplace.yaml";
15
+ /** One bundle in a collection, with the targets it is built for. */
16
+ export interface SpecBundle {
17
+ /** Spec-relative POSIX path, as written. */
18
+ path: string;
19
+ /** Absolute, symlink-resolved bundle root. */
20
+ root: string;
21
+ include?: AgentTarget[];
22
+ exclude?: AgentTarget[];
23
+ }
24
+ export interface MarketplaceSpec {
25
+ schemaVersion: string;
26
+ name: string;
27
+ version: string;
28
+ description?: string;
29
+ owner: MarketplacePublisher;
30
+ targets: AgentTarget[];
31
+ bundles: SpecBundle[];
32
+ /** Absolute directory the spec file lives in; every bundle path resolves from it. */
33
+ root: string;
34
+ /** Absolute path to the spec file itself, for diagnostics. */
35
+ file: string;
36
+ }
37
+ export interface SpecResult {
38
+ spec: MarketplaceSpec;
39
+ diagnostics: AgentDiagnostic[];
40
+ }
41
+ /** True when `bundle` is built for `target` under its include/exclude declaration. */
42
+ export declare function selectedForTarget(bundle: SpecBundle, target: AgentTarget): boolean;
43
+ /**
44
+ * Reads and validates a collection spec. Never throws for a content problem —
45
+ * every finding is a diagnostic, so a caller reports all of them at once rather
46
+ * than one per run. Only an unreadable or unparseable file throws.
47
+ */
48
+ export declare function loadSpec(source: string): SpecResult;
@@ -0,0 +1,237 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { diagnostic, TARGETS } from "../types.js";
4
+ import { readStructured } from "../parser.js";
5
+ import { isInside } from "../../config-schema.js";
6
+ /**
7
+ * The `agent-marketplace.yaml` format: which bundles a collection contains, and
8
+ * which targets each is built for.
9
+ *
10
+ * `schemaVersion` is hand-owned and versions the source format authors write,
11
+ * the sixth such version in this project. It is unrelated to the package
12
+ * version, to `CONTRACT_VERSION`, to `PROFILE_SCHEMA_VERSION`, to the bundle
13
+ * `schemaVersion`, or to the test-file one. See `docs/contract.md`.
14
+ */
15
+ export const SUPPORTED_SPEC_SCHEMAS = ["1"];
16
+ export const CURRENT_SPEC_SCHEMA = "1";
17
+ export const SPEC_FILENAME = "agent-marketplace.yaml";
18
+ const NAME = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
19
+ const SEMVER = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/;
20
+ const ROOT_KEYS = new Set([
21
+ "schemaVersion",
22
+ "name",
23
+ "version",
24
+ "description",
25
+ "owner",
26
+ "targets",
27
+ "bundles",
28
+ ]);
29
+ const BUNDLE_KEYS = new Set(["path", "include", "exclude"]);
30
+ const OWNER_KEYS = new Set(["name", "url", "email"]);
31
+ /**
32
+ * The `AB9xx` error factory. The same three-line idiom appears in
33
+ * `manifest.ts`, `package/index.ts`, and `install/index.ts`: `diagnostic()`
34
+ * derives severity from quality and never returns `"error"`, so an error is
35
+ * built by spreading and overriding.
36
+ */
37
+ function error(diagnostics, code, message, file, remediation) {
38
+ diagnostics.push({
39
+ ...diagnostic(code, message, "unsupported", {
40
+ path: file,
41
+ ...(remediation ? { remediation } : {}),
42
+ }),
43
+ severity: "error",
44
+ });
45
+ }
46
+ function record(value) {
47
+ return value && typeof value === "object" && !Array.isArray(value)
48
+ ? value
49
+ : undefined;
50
+ }
51
+ /** Required non-empty string, reported as AB901 when missing and AB902 when malformed. */
52
+ function requiredString(value, field, file, diagnostics) {
53
+ if (value === undefined || value === null || value === "") {
54
+ error(diagnostics, "AB901", `Marketplace field '${field}' is required`, file);
55
+ return "";
56
+ }
57
+ if (typeof value !== "string") {
58
+ error(diagnostics, "AB902", `Marketplace field '${field}' must be a string`, file);
59
+ return "";
60
+ }
61
+ return value;
62
+ }
63
+ function parseTargetList(value, field, file, diagnostics) {
64
+ if (value === undefined)
65
+ return undefined;
66
+ if (!Array.isArray(value)) {
67
+ error(diagnostics, "AB902", `${field} must be an array of target ids`, file);
68
+ return [];
69
+ }
70
+ const resolved = [];
71
+ for (const entry of value) {
72
+ const id = String(entry);
73
+ // `all` is the same spelling `--target all` accepts, so a spec and a flag
74
+ // never disagree about what "everything" means.
75
+ if (id === "all") {
76
+ resolved.push(...TARGETS);
77
+ continue;
78
+ }
79
+ if (!TARGETS.includes(id)) {
80
+ error(diagnostics, "AB902", `Unknown target '${id}' in ${field}`, file, `Use one of: ${TARGETS.join(", ")}.`);
81
+ continue;
82
+ }
83
+ resolved.push(id);
84
+ }
85
+ return [...new Set(resolved)];
86
+ }
87
+ function parseOwner(value, file, diagnostics) {
88
+ if (value === undefined) {
89
+ error(diagnostics, "AB901", "Marketplace field 'owner' is required", file, "Claude Code refuses a catalog with no owner.");
90
+ return { name: "" };
91
+ }
92
+ const owner = record(value);
93
+ if (!owner) {
94
+ error(diagnostics, "AB902", "Marketplace 'owner' must be a mapping", file);
95
+ return { name: "" };
96
+ }
97
+ for (const key of Object.keys(owner))
98
+ if (!OWNER_KEYS.has(key))
99
+ error(diagnostics, "AB902", `Unknown owner key '${key}'`, file);
100
+ const name = requiredString(owner.name, "owner.name", file, diagnostics);
101
+ const result = { name };
102
+ if (typeof owner.url === "string")
103
+ result.url = owner.url;
104
+ if (typeof owner.email === "string")
105
+ result.email = owner.email;
106
+ return result;
107
+ }
108
+ /**
109
+ * Bundle paths resolve from the spec file's directory and may not escape it,
110
+ * including after resolving symlinks — the same containment rule component
111
+ * paths inside a bundle follow. A path that escapes is refused rather than
112
+ * followed.
113
+ */
114
+ function parseBundle(value, index, root, file, diagnostics) {
115
+ const entry = record(value);
116
+ if (!entry) {
117
+ error(diagnostics, "AB902", `bundles[${index}] must be a mapping`, file);
118
+ return undefined;
119
+ }
120
+ for (const key of Object.keys(entry))
121
+ if (!BUNDLE_KEYS.has(key))
122
+ error(diagnostics, "AB902", `Unknown bundles[${index}] key '${key}'`, file);
123
+ const declared = requiredString(entry.path, `bundles[${index}].path`, file, diagnostics);
124
+ if (!declared)
125
+ return undefined;
126
+ const include = parseTargetList(entry.include, `bundles[${index}].include`, file, diagnostics);
127
+ const exclude = parseTargetList(entry.exclude, `bundles[${index}].exclude`, file, diagnostics);
128
+ if (include && exclude) {
129
+ error(diagnostics, "AB903", `bundles[${index}] declares both include and exclude`, file, "Use one or the other; they are not combined.");
130
+ return undefined;
131
+ }
132
+ const resolved = path.resolve(root, declared);
133
+ if (!fs.existsSync(resolved)) {
134
+ error(diagnostics, "AB904", `Bundle path '${declared}' does not exist`, file);
135
+ return undefined;
136
+ }
137
+ const real = fs.realpathSync(resolved);
138
+ if (!isInside(fs.realpathSync(root), real)) {
139
+ error(diagnostics, "AB904", `Bundle path '${declared}' escapes the spec directory`, file, "A bundle must live inside the directory holding the spec file.");
140
+ return undefined;
141
+ }
142
+ if (!fs.statSync(real).isDirectory()) {
143
+ error(diagnostics, "AB904", `Bundle path '${declared}' is not a directory`, file);
144
+ return undefined;
145
+ }
146
+ return {
147
+ path: declared,
148
+ root: real,
149
+ ...(include ? { include } : {}),
150
+ ...(exclude ? { exclude } : {}),
151
+ };
152
+ }
153
+ /** True when `bundle` is built for `target` under its include/exclude declaration. */
154
+ export function selectedForTarget(bundle, target) {
155
+ if (bundle.include)
156
+ return bundle.include.includes(target);
157
+ if (bundle.exclude)
158
+ return !bundle.exclude.includes(target);
159
+ return true;
160
+ }
161
+ /**
162
+ * Reads and validates a collection spec. Never throws for a content problem —
163
+ * every finding is a diagnostic, so a caller reports all of them at once rather
164
+ * than one per run. Only an unreadable or unparseable file throws.
165
+ */
166
+ export function loadSpec(source) {
167
+ const file = path.resolve(source);
168
+ const stat = fs.existsSync(file) ? fs.statSync(file) : undefined;
169
+ const resolved = stat?.isDirectory() ? path.join(file, SPEC_FILENAME) : file;
170
+ if (!fs.existsSync(resolved))
171
+ throw new Error(`Marketplace spec not found: ${path.relative(process.cwd(), resolved)}`);
172
+ const root = path.dirname(resolved);
173
+ const raw = readStructured(resolved);
174
+ const diagnostics = [];
175
+ for (const key of Object.keys(raw))
176
+ if (!ROOT_KEYS.has(key))
177
+ error(diagnostics, "AB902", `Unknown marketplace key '${key}'`, resolved);
178
+ const schemaVersion = String(raw.schemaVersion ?? "");
179
+ if (!SUPPORTED_SPEC_SCHEMAS.includes(schemaVersion))
180
+ error(diagnostics, "AB900", `Unsupported marketplace schemaVersion '${schemaVersion}'`, resolved, `Use schemaVersion: "${CURRENT_SPEC_SCHEMA}".`);
181
+ const name = requiredString(raw.name, "name", resolved, diagnostics);
182
+ if (name && !NAME.test(name))
183
+ error(diagnostics, "AB902", `Invalid marketplace name '${name}'`, resolved, "Use lowercase kebab-case; this becomes the marketplace key hosts index by.");
184
+ const version = requiredString(raw.version, "version", resolved, diagnostics);
185
+ if (version && !SEMVER.test(version))
186
+ error(diagnostics, "AB902", `Invalid marketplace version '${version}'`, resolved, "Use a semantic version such as 1.0.0.");
187
+ const description = raw.description === undefined
188
+ ? undefined
189
+ : typeof raw.description === "string"
190
+ ? raw.description
191
+ : (error(diagnostics, "AB902", "Marketplace 'description' must be a string", resolved),
192
+ undefined);
193
+ const owner = parseOwner(raw.owner, resolved, diagnostics);
194
+ const targets = parseTargetList(raw.targets, "targets", resolved, diagnostics) ?? [];
195
+ if (raw.targets === undefined)
196
+ error(diagnostics, "AB901", "Marketplace field 'targets' is required", resolved);
197
+ else if (targets.length === 0 && Array.isArray(raw.targets))
198
+ error(diagnostics, "AB901", "Marketplace field 'targets' is empty", resolved);
199
+ const bundles = [];
200
+ if (raw.bundles === undefined)
201
+ error(diagnostics, "AB901", "Marketplace field 'bundles' is required", resolved);
202
+ else if (!Array.isArray(raw.bundles))
203
+ error(diagnostics, "AB902", "Marketplace 'bundles' must be an array", resolved);
204
+ else if (raw.bundles.length === 0)
205
+ error(diagnostics, "AB901", "Marketplace field 'bundles' is empty", resolved);
206
+ else
207
+ raw.bundles.forEach((entry, index) => {
208
+ const parsed = parseBundle(entry, index, root, resolved, diagnostics);
209
+ if (parsed)
210
+ bundles.push(parsed);
211
+ });
212
+ // Two entries pointing at the same directory would render the same plugin
213
+ // name twice into one catalog, which a host resolves arbitrarily.
214
+ const seen = new Map();
215
+ for (const bundle of bundles) {
216
+ const previous = seen.get(bundle.root);
217
+ if (previous !== undefined)
218
+ error(diagnostics, "AB905", `Bundles '${previous}' and '${bundle.path}' resolve to the same directory`, resolved);
219
+ else
220
+ seen.set(bundle.root, bundle.path);
221
+ }
222
+ return {
223
+ spec: {
224
+ schemaVersion,
225
+ name,
226
+ version,
227
+ ...(description !== undefined ? { description } : {}),
228
+ owner,
229
+ targets,
230
+ bundles,
231
+ root,
232
+ file: resolved,
233
+ },
234
+ diagnostics,
235
+ };
236
+ }
237
+ //# sourceMappingURL=spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../src/agent/marketplace/spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { AgentProfile, AgentTarget, Artifact } from "./types.js";
2
+ /** File name of the report `agent convert` writes at the output root. */
3
+ export declare const CONVERSION_REPORT = "conversion-report.json";
4
+ /**
5
+ * Provenance recorded in the conversion report so `agent doctor` can tell a
6
+ * tree generated against an older target profile from a current one.
7
+ */
8
+ export interface ConversionProvenance {
9
+ generator: {
10
+ name: string;
11
+ version: string;
12
+ };
13
+ profileSchemaVersion: string;
14
+ targetProfiles: Record<string, {
15
+ documentationRevision: string;
16
+ }>;
17
+ }
18
+ export interface OutputDiff {
19
+ /** Expected artifacts absent from the tree, or present but not a regular file. */
20
+ missing: string[];
21
+ /** Expected artifacts whose bytes or mode differ. */
22
+ changed: string[];
23
+ /** Files inside a rendered target/profile root that no artifact accounts for. */
24
+ unmanaged: string[];
25
+ }
26
+ /**
27
+ * Compares a generated tree against the artifacts that should produce it.
28
+ *
29
+ * The conversion report is compared by existence only. It embeds the generator
30
+ * version and target profile revisions, so byte-comparing it would report every
31
+ * tree as stale after any CLI upgrade — and it is derived from artifacts that
32
+ * are already compared byte for byte.
33
+ */
34
+ export declare function diffOutput(output: string, artifacts: Artifact[], targets: AgentTarget[], profiles: AgentProfile[]): OutputDiff;
35
+ /** True when the generated tree matches the artifacts exactly. */
36
+ export declare function outputMatches(diff: OutputDiff): boolean;
@@ -0,0 +1,56 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ /** File name of the report `agent convert` writes at the output root. */
4
+ export const CONVERSION_REPORT = "conversion-report.json";
5
+ function walk(directory, onFile) {
6
+ for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
7
+ const full = path.join(directory, entry.name);
8
+ if (entry.isDirectory())
9
+ walk(full, onFile);
10
+ else
11
+ onFile(full);
12
+ }
13
+ }
14
+ /**
15
+ * Compares a generated tree against the artifacts that should produce it.
16
+ *
17
+ * The conversion report is compared by existence only. It embeds the generator
18
+ * version and target profile revisions, so byte-comparing it would report every
19
+ * tree as stale after any CLI upgrade — and it is derived from artifacts that
20
+ * are already compared byte for byte.
21
+ */
22
+ export function diffOutput(output, artifacts, targets, profiles) {
23
+ const diff = { missing: [], changed: [], unmanaged: [] };
24
+ const expected = new Map(artifacts.map((artifact) => [artifact.path, artifact]));
25
+ for (const artifact of artifacts) {
26
+ const file = path.join(output, artifact.path);
27
+ if (!fs.existsSync(file) || !fs.statSync(file).isFile()) {
28
+ diff.missing.push(artifact.path);
29
+ continue;
30
+ }
31
+ if (artifact.path === CONVERSION_REPORT)
32
+ continue;
33
+ if (!fs.readFileSync(file).equals(artifact.content) ||
34
+ (fs.statSync(file).mode & 0o777) !== artifact.mode)
35
+ diff.changed.push(artifact.path);
36
+ }
37
+ for (const target of targets)
38
+ for (const profile of profiles) {
39
+ const root = path.join(output, target, profile);
40
+ if (!fs.existsSync(root)) {
41
+ diff.missing.push(`${target}/${profile}`);
42
+ continue;
43
+ }
44
+ walk(root, (file) => {
45
+ const relative = path.relative(output, file).split(path.sep).join("/");
46
+ if (!expected.has(relative))
47
+ diff.unmanaged.push(relative);
48
+ });
49
+ }
50
+ return diff;
51
+ }
52
+ /** True when the generated tree matches the artifacts exactly. */
53
+ export function outputMatches(diff) {
54
+ return !diff.missing.length && !diff.changed.length && !diff.unmanaged.length;
55
+ }
56
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/agent/output.ts"],"names":[],"mappings":"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"}