@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,204 @@
1
+ import type { BundleMarketplace } from "./manifest.js";
2
+ import type { UpgradeReport } from "./upgrade.js";
3
+ import type { ImportReport } from "./import/normalize.js";
4
+ import type { PackageReport } from "./package/index.js";
5
+ import type { AuditReport } from "./audit/index.js";
6
+ import type { TestReport } from "./test/index.js";
7
+ import type { InstallReport } from "./install/index.js";
8
+ import type { MarketplaceReport } from "./marketplace/index.js";
9
+ export declare const TARGETS: readonly ["claude-code", "codex", "cursor", "antigravity", "opencode"];
10
+ export type AgentTarget = (typeof TARGETS)[number];
11
+ export type AgentProfile = "plugin" | "project";
12
+ export type MappingQuality = "exact" | "approximate" | "unsupported";
13
+ export interface AgentDiagnostic {
14
+ code: string;
15
+ severity: "notice" | "warning" | "error";
16
+ message: string;
17
+ component?: string;
18
+ path?: string;
19
+ target?: AgentTarget;
20
+ profile?: AgentProfile;
21
+ quality: MappingQuality;
22
+ remediation?: string;
23
+ }
24
+ export interface SourceFile {
25
+ path: string;
26
+ content: Buffer;
27
+ mode: number;
28
+ }
29
+ export interface MarkdownComponent {
30
+ name: string;
31
+ description: string;
32
+ path: string;
33
+ metadata: Record<string, unknown>;
34
+ body: string;
35
+ files: SourceFile[];
36
+ }
37
+ export interface BundleRule extends MarkdownComponent {
38
+ activation: "always" | "files" | "model" | "manual";
39
+ globs: string[];
40
+ }
41
+ /**
42
+ * A target-native overlay: files copied verbatim into one target's output,
43
+ * keyed by the output profile they belong to. This is how a platform-only
44
+ * feature reaches the generated tree without being given a false portable
45
+ * abstraction.
46
+ */
47
+ export interface NativeOverlay {
48
+ target: AgentTarget;
49
+ /** Absolute path to the overlay root. */
50
+ root: string;
51
+ /** Overlay files, POSIX-relative to `root/<profile>`, per output profile. */
52
+ files: Record<AgentProfile, SourceFile[]>;
53
+ /** `native/<target>/manifest.json`, merged over the generated plugin manifest. */
54
+ manifest?: Record<string, unknown>;
55
+ /**
56
+ * What happens when an overlay file claims a path a portable artifact already
57
+ * produced. Defaults to `overlay-wins`: an overlay is a deliberate,
58
+ * target-specific statement, so honoring it and reporting AB181 beats
59
+ * discarding it silently. `error` refuses the whole conversion instead.
60
+ */
61
+ onCollision: "overlay-wins" | "error";
62
+ }
63
+ export interface AgentBundle {
64
+ schemaVersion: string;
65
+ name: string;
66
+ version: string;
67
+ description: string;
68
+ root: string;
69
+ legacy: boolean;
70
+ manifest: Record<string, unknown>;
71
+ /** Declared listing metadata. Read by `agent package`; ignored by `agent convert`. */
72
+ marketplace?: BundleMarketplace;
73
+ /** Loaded native overlays. Always empty on a v1 or legacy bundle. */
74
+ overlays: NativeOverlay[];
75
+ skills: MarkdownComponent[];
76
+ agents: MarkdownComponent[];
77
+ rules: BundleRule[];
78
+ hooks?: {
79
+ path: string;
80
+ value: Record<string, unknown>;
81
+ };
82
+ hookFiles: SourceFile[];
83
+ policies: Array<{
84
+ path: string;
85
+ value: Record<string, unknown>;
86
+ }>;
87
+ mcp?: {
88
+ path: string;
89
+ value: Record<string, unknown>;
90
+ };
91
+ assets: SourceFile[];
92
+ diagnostics: AgentDiagnostic[];
93
+ graph: Record<string, string[]>;
94
+ }
95
+ export type ArtifactOrigin = "portable" | "native";
96
+ export interface Artifact {
97
+ path: string;
98
+ content: Buffer;
99
+ mode: number;
100
+ /**
101
+ * Absent means "portable". Only overlay-sourced artifacts set it, which is
102
+ * what keeps `conversion-report.json` byte-identical for every bundle that
103
+ * has no overlay.
104
+ */
105
+ origin?: ArtifactOrigin;
106
+ }
107
+ export type HostStatus = "unknown" | "unverified" | "below-minimum" | "verified" | "newer";
108
+ export interface HostReport {
109
+ target: AgentTarget;
110
+ /** The version supplied via `--host-version`, or `null` when none was given. */
111
+ requested: string | null;
112
+ minimumVersion: string | null;
113
+ verifiedThrough: string | null;
114
+ documentationRevision: string;
115
+ status: HostStatus;
116
+ }
117
+ export interface DoctorReport {
118
+ /** One row per selected target, present even when no host version is known. */
119
+ hosts: HostReport[];
120
+ /** Populated only when `--output` was given. */
121
+ output?: {
122
+ root: string;
123
+ missing: string[];
124
+ changed: string[];
125
+ unmanaged: string[];
126
+ };
127
+ /** Rendered paths no target profile describes. */
128
+ undeclared: Array<{
129
+ target: AgentTarget;
130
+ profile: AgentProfile;
131
+ path: string;
132
+ }>;
133
+ /**
134
+ * Paths contributed by a native overlay. These are exempt from the declared
135
+ * path check by design — being outside the profile is what an overlay is for —
136
+ * so they are reported positively here rather than as `undeclared` findings.
137
+ */
138
+ overlays: Array<{
139
+ target: AgentTarget;
140
+ profile: AgentProfile;
141
+ path: string;
142
+ }>;
143
+ /**
144
+ * Reserved for evidence from a host's own validator. Always empty in this
145
+ * release: `agent doctor` never spawns a process, so its result does not
146
+ * depend on what happens to be installed.
147
+ */
148
+ native: never[];
149
+ }
150
+ export type PlanAction = "create" | "update" | "skip";
151
+ export interface PlanOperation {
152
+ action: PlanAction;
153
+ /** POSIX path relative to the plan root. */
154
+ path: string;
155
+ kind: string;
156
+ bytes: number;
157
+ /** Octal file mode, spelled as in `artifacts[].mode`. */
158
+ mode: string;
159
+ /** Why a `skip`, or what an `update` changes. */
160
+ reason?: string;
161
+ }
162
+ export interface AgentPlan {
163
+ root: string;
164
+ operations: PlanOperation[];
165
+ }
166
+ export interface AgentResult {
167
+ command: "convert" | "validate" | "inspect" | "compat" | "doctor" | "specs" | "init" | "add" | "upgrade" | "import" | "package" | "audit" | "test" | "install" | "uninstall" | "installed" | "marketplace";
168
+ ok: boolean;
169
+ source?: string;
170
+ targets: AgentTarget[];
171
+ profiles?: AgentProfile[];
172
+ artifacts: Array<{
173
+ path: string;
174
+ bytes: number;
175
+ mode: string;
176
+ }>;
177
+ diagnostics: AgentDiagnostic[];
178
+ bundle?: unknown;
179
+ compatibility?: unknown;
180
+ /** The full target conformance profiles, emitted by `agent specs`. */
181
+ specs?: unknown;
182
+ /** Conformance findings, emitted by `agent doctor`. */
183
+ doctor?: DoctorReport;
184
+ /** What a writing command did or would do, emitted by `agent init` and `agent add`. */
185
+ plan?: AgentPlan;
186
+ /** Migration result, emitted by `agent upgrade`. */
187
+ upgrade?: UpgradeReport;
188
+ /** Provenance report, emitted by `agent import`. */
189
+ import?: ImportReport;
190
+ /** Packaging result, emitted by `agent package`. */
191
+ package?: PackageReport;
192
+ /** Review surface and findings summary, emitted by `agent audit`. */
193
+ audit?: AuditReport;
194
+ /** Contract test results, emitted by `agent test`. */
195
+ test?: TestReport;
196
+ /** Install, uninstall, or listing result, emitted by the install commands. */
197
+ install?: InstallReport;
198
+ /** Collection build result, emitted by `agent marketplace`. */
199
+ marketplace?: MarketplaceReport;
200
+ dryRun?: boolean;
201
+ check?: boolean;
202
+ stale?: boolean;
203
+ }
204
+ export declare function diagnostic(code: string, message: string, quality: MappingQuality, extra?: Partial<AgentDiagnostic>): AgentDiagnostic;
@@ -0,0 +1,11 @@
1
+ export const TARGETS = ["claude-code", "codex", "cursor", "antigravity", "opencode"];
2
+ export function diagnostic(code, message, quality, extra = {}) {
3
+ return {
4
+ code,
5
+ severity: quality === "unsupported" ? "warning" : quality === "approximate" ? "warning" : "notice",
6
+ message,
7
+ quality,
8
+ ...extra,
9
+ };
10
+ }
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAU,CAAC;AA0M9F,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,OAAe,EACf,OAAuB,EACvB,QAAkC,EAAE;IAEpC,OAAO;QACL,IAAI;QACJ,QAAQ,EACN,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QAC1F,OAAO;QACP,OAAO;QACP,GAAG,KAAK;KACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { AgentBundle, AgentDiagnostic } from "./types.js";
2
+ export interface MigrationChange {
3
+ field: string;
4
+ from: unknown;
5
+ to: unknown;
6
+ }
7
+ export interface UpgradeReport {
8
+ /** Source schema layer, spelled as the manifest spells it. */
9
+ from: string;
10
+ to: string;
11
+ changes: MigrationChange[];
12
+ /** Items a human should decide, mirrored as AB221 notices. */
13
+ notes: string[];
14
+ }
15
+ export interface UpgradePlan {
16
+ report: UpgradeReport;
17
+ /** The migrated manifest, or `null` when nothing needs to change. */
18
+ content: Buffer | null;
19
+ diagnostics: AgentDiagnostic[];
20
+ }
21
+ /**
22
+ * Plans a 1 -> 2 migration of `agent-bundle.yaml`.
23
+ *
24
+ * Only the manifest is rewritten; no component file is touched. Schema 2 is a
25
+ * strict superset of schema 1, so the migration is additive by construction —
26
+ * which is what makes the byte-identity guarantee checkable rather than hoped
27
+ * for. The caller verifies it by rendering before and after.
28
+ */
29
+ export declare function planUpgrade(bundle: AgentBundle, source: string, to: string): UpgradePlan;
@@ -0,0 +1,72 @@
1
+ import { parseDocument } from "yaml";
2
+ import { diagnostic } from "./types.js";
3
+ import { COMPONENT_KEYS, CURRENT_BUNDLE_SCHEMA } from "./manifest.js";
4
+ import { YAML_OPTIONS } from "./scaffold.js";
5
+ function notice(code, message, path, remediation) {
6
+ return diagnostic(code, message, "exact", {
7
+ path,
8
+ ...(remediation ? { remediation } : {}),
9
+ });
10
+ }
11
+ function error(code, message, path, remediation) {
12
+ return {
13
+ ...diagnostic(code, message, "unsupported", { path, ...(remediation ? { remediation } : {}) }),
14
+ severity: "error",
15
+ };
16
+ }
17
+ /**
18
+ * Plans a 1 -> 2 migration of `agent-bundle.yaml`.
19
+ *
20
+ * Only the manifest is rewritten; no component file is touched. Schema 2 is a
21
+ * strict superset of schema 1, so the migration is additive by construction —
22
+ * which is what makes the byte-identity guarantee checkable rather than hoped
23
+ * for. The caller verifies it by rendering before and after.
24
+ */
25
+ export function planUpgrade(bundle, source, to) {
26
+ const manifestPath = `${bundle.root}/agent-bundle.yaml`;
27
+ const diagnostics = [];
28
+ const report = {
29
+ from: bundle.schemaVersion,
30
+ to,
31
+ changes: [],
32
+ notes: [],
33
+ };
34
+ if (to !== CURRENT_BUNDLE_SCHEMA) {
35
+ diagnostics.push(error("AB222", `Unsupported target schema '${to}'`, manifestPath, `Use --to-schema ${CURRENT_BUNDLE_SCHEMA}.`));
36
+ return { report, content: null, diagnostics };
37
+ }
38
+ if (bundle.legacy) {
39
+ diagnostics.push(error("AB223", "A legacy Claude plugin has no neutral manifest to upgrade", manifestPath, "Run agent import to produce a portable bundle first."));
40
+ return { report, content: null, diagnostics };
41
+ }
42
+ if (bundle.schemaVersion === CURRENT_BUNDLE_SCHEMA) {
43
+ diagnostics.push(notice("AB220", `Bundle is already at schemaVersion ${to}`, manifestPath));
44
+ return { report, content: null, diagnostics };
45
+ }
46
+ const document = parseDocument(source);
47
+ document.setIn(["schemaVersion"], to);
48
+ report.changes.push({ field: "schemaVersion", from: bundle.schemaVersion, to });
49
+ // v1 allowed component paths both at the top level and under `components`.
50
+ // v2 prefers the nested form, so hoist them; the parser still honors either.
51
+ for (const key of COMPONENT_KEYS) {
52
+ const value = document.getIn([key]);
53
+ if (value === undefined)
54
+ continue;
55
+ if (document.getIn(["components", key]) === undefined) {
56
+ document.setIn(["components", key], value);
57
+ report.changes.push({ field: `components.${key}`, from: undefined, to: value });
58
+ }
59
+ document.deleteIn([key]);
60
+ report.changes.push({ field: key, from: value, to: undefined });
61
+ }
62
+ // Marketplace metadata is deliberately not synthesized. A half-filled block
63
+ // would look like a decision nobody made, and `agent package` would then
64
+ // report findings against values this migration invented.
65
+ if (!bundle.marketplace) {
66
+ report.notes.push("Add a marketplace: block before packaging; displayName, categories, publisher, and license cannot be derived.");
67
+ diagnostics.push(notice("AB221", "Marketplace metadata cannot be derived from a v1 bundle", manifestPath, "Add a marketplace: block before running agent package."));
68
+ }
69
+ report.notes.push("Native overlays are now available under native/<target>/; nothing was created because none existed.");
70
+ return { report, content: Buffer.from(document.toString(YAML_OPTIONS)), diagnostics };
71
+ }
72
+ //# sourceMappingURL=upgrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/agent/upgrade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { Artifact } from "./types.js";
2
+ export interface WriteOptions {
3
+ /**
4
+ * Directories, relative to the output root, that this write owns entirely.
5
+ * Each is replaced wholesale, so a component removed from the source stops
6
+ * existing in the output instead of lingering as an orphan.
7
+ */
8
+ managedRoots: string[];
9
+ /** Artifacts at the output root that are replaced individually, not by directory. */
10
+ looseFiles?: string[];
11
+ /** Replace a nonempty managed root instead of refusing. */
12
+ force: boolean;
13
+ }
14
+ /**
15
+ * Writes every artifact under `root` through a staging directory.
16
+ *
17
+ * The staging directory is a sibling of the output root rather than a temp
18
+ * directory, so it is on the same filesystem and the final `rename` is atomic.
19
+ * Nothing is visible at the destination until every artifact has been written
20
+ * successfully.
21
+ */
22
+ export declare function writeArtifactsAtomically(root: string, artifacts: Artifact[], options: WriteOptions): void;
23
+ /**
24
+ * Places `linkPath` as a symlink to `target`.
25
+ *
26
+ * Replaces whatever is already at `linkPath`. Occupancy checks belong to the
27
+ * caller; this is the write. The target is stored as an absolute path so the
28
+ * link keeps working after the process changes directory.
29
+ */
30
+ export declare function placeSymlink(linkPath: string, target: string): void;
@@ -0,0 +1,73 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ function nonempty(directory) {
4
+ if (!fs.existsSync(directory))
5
+ return false;
6
+ return !fs.statSync(directory).isDirectory() || fs.readdirSync(directory).length > 0;
7
+ }
8
+ /**
9
+ * Writes every artifact under `root` through a staging directory.
10
+ *
11
+ * The staging directory is a sibling of the output root rather than a temp
12
+ * directory, so it is on the same filesystem and the final `rename` is atomic.
13
+ * Nothing is visible at the destination until every artifact has been written
14
+ * successfully.
15
+ */
16
+ export function writeArtifactsAtomically(root, artifacts, options) {
17
+ for (const managed of options.managedRoots) {
18
+ const destination = path.join(root, managed);
19
+ if (nonempty(destination) && !options.force)
20
+ throw new Error(`Destination is nonempty: ${destination} (use --force)`);
21
+ }
22
+ const parent = path.dirname(root);
23
+ fs.mkdirSync(parent, { recursive: true });
24
+ const staging = fs.mkdtempSync(path.join(parent, `.${path.basename(root)}.staging-`));
25
+ try {
26
+ for (const artifact of artifacts) {
27
+ const destination = path.join(staging, artifact.path);
28
+ fs.mkdirSync(path.dirname(destination), { recursive: true });
29
+ fs.writeFileSync(destination, artifact.content, { mode: artifact.mode });
30
+ fs.chmodSync(destination, artifact.mode);
31
+ }
32
+ fs.mkdirSync(root, { recursive: true });
33
+ for (const managed of options.managedRoots) {
34
+ const destination = path.join(root, managed);
35
+ const staged = path.join(staging, managed);
36
+ if (fs.existsSync(destination))
37
+ fs.rmSync(destination, { recursive: true, force: true });
38
+ fs.mkdirSync(path.dirname(destination), { recursive: true });
39
+ if (fs.existsSync(staged))
40
+ fs.renameSync(staged, destination);
41
+ else
42
+ fs.mkdirSync(destination, { recursive: true });
43
+ }
44
+ for (const loose of options.looseFiles ?? []) {
45
+ const destination = path.join(root, loose);
46
+ const staged = path.join(staging, loose);
47
+ if (!fs.existsSync(staged))
48
+ continue;
49
+ if (fs.existsSync(destination))
50
+ fs.rmSync(destination, { recursive: true, force: true });
51
+ fs.mkdirSync(path.dirname(destination), { recursive: true });
52
+ fs.renameSync(staged, destination);
53
+ }
54
+ }
55
+ finally {
56
+ fs.rmSync(staging, { recursive: true, force: true });
57
+ }
58
+ }
59
+ /**
60
+ * Places `linkPath` as a symlink to `target`.
61
+ *
62
+ * Replaces whatever is already at `linkPath`. Occupancy checks belong to the
63
+ * caller; this is the write. The target is stored as an absolute path so the
64
+ * link keeps working after the process changes directory.
65
+ */
66
+ export function placeSymlink(linkPath, target) {
67
+ const resolved = path.resolve(target);
68
+ fs.mkdirSync(path.dirname(linkPath), { recursive: true });
69
+ if (fs.lstatSync(linkPath, { throwIfNoEntry: false }))
70
+ fs.rmSync(linkPath, { recursive: true, force: true });
71
+ fs.symlinkSync(resolved, linkPath);
72
+ }
73
+ //# sourceMappingURL=writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/agent/writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { Migration, StoreHandle } from "../sqlite-store.js";
2
+ export declare const MIGRATIONS: readonly Migration[];
3
+ export declare const LATEST_VERSION: number;
4
+ /**
5
+ * Where the archive lives.
6
+ *
7
+ * Under `XDG_DATA_HOME` like the usage store, and for a stronger version of the
8
+ * same reason: this one holds the only copy of files whose originals may since
9
+ * have been deleted. `--archive` points it somewhere else — external or network
10
+ * storage — which is the expected shape once transcripts are included.
11
+ */
12
+ export declare function getArchiveRoot(env?: NodeJS.ProcessEnv, homedir?: string): string;
13
+ export declare function indexPath(root: string): string;
14
+ export declare function segmentsDirectory(root: string): string;
15
+ export interface OpenArchiveOptions {
16
+ root: string;
17
+ readOnly?: boolean;
18
+ migrate?: boolean;
19
+ }
20
+ export declare function openArchive(options: OpenArchiveOptions): StoreHandle;
@@ -0,0 +1,98 @@
1
+ import os from "node:os";
2
+ import path from "node:path";
3
+ import { latestVersion, openStore } from "../sqlite-store.js";
4
+ /**
5
+ * The archive index.
6
+ *
7
+ * Content-addressed, which is what makes the archive incremental in both
8
+ * directions at once. A file whose bytes have not changed is already a `blob`
9
+ * and is not stored again; a file whose bytes *have* changed gets a second
10
+ * `artifact` row against a new blob, so the archive keeps every version it ever
11
+ * saw without anyone asking it to.
12
+ *
13
+ * The index is a convenience, not the archive. Every segment is a plain
14
+ * `.tar.gz` whose members are named by their own hash, so `tar tzf` recovers the
15
+ * contents with no database and no `cairn` — which is the whole point of
16
+ * choosing a standard container for something meant to outlive the tool.
17
+ */
18
+ const SCHEMA_V1 = `
19
+ CREATE TABLE meta(
20
+ key TEXT PRIMARY KEY,
21
+ value TEXT NOT NULL
22
+ );
23
+
24
+ CREATE TABLE segment(
25
+ id INTEGER PRIMARY KEY,
26
+ name TEXT NOT NULL UNIQUE,
27
+ bytes INTEGER NOT NULL,
28
+ blobs INTEGER NOT NULL,
29
+ sha256 TEXT NOT NULL,
30
+ sealed_at TEXT NOT NULL
31
+ );
32
+
33
+ CREATE TABLE blob(
34
+ sha256 TEXT PRIMARY KEY,
35
+ size INTEGER NOT NULL,
36
+ segment_id INTEGER NOT NULL REFERENCES segment(id),
37
+ offset INTEGER NOT NULL,
38
+ stored_at TEXT NOT NULL
39
+ );
40
+
41
+ CREATE TABLE artifact(
42
+ id INTEGER PRIMARY KEY,
43
+ provider TEXT NOT NULL,
44
+ set_id TEXT NOT NULL,
45
+ class TEXT NOT NULL,
46
+ path TEXT NOT NULL,
47
+ sha256 TEXT NOT NULL REFERENCES blob(sha256),
48
+ size INTEGER NOT NULL,
49
+ mtime_ms REAL NOT NULL,
50
+ mode INTEGER NOT NULL,
51
+ first_seen TEXT NOT NULL,
52
+ last_seen TEXT NOT NULL,
53
+ UNIQUE(provider, path, sha256)
54
+ );
55
+
56
+ CREATE INDEX artifact_path ON artifact(provider, path);
57
+ CREATE INDEX artifact_class ON artifact(class, last_seen);
58
+ CREATE INDEX blob_segment ON blob(segment_id);
59
+ `;
60
+ export const MIGRATIONS = [
61
+ {
62
+ version: 1,
63
+ description: "Initial schema: segments, blobs, and artifact path history",
64
+ up(db) {
65
+ db.exec(SCHEMA_V1);
66
+ },
67
+ },
68
+ ];
69
+ export const LATEST_VERSION = latestVersion(MIGRATIONS);
70
+ /**
71
+ * Where the archive lives.
72
+ *
73
+ * Under `XDG_DATA_HOME` like the usage store, and for a stronger version of the
74
+ * same reason: this one holds the only copy of files whose originals may since
75
+ * have been deleted. `--archive` points it somewhere else — external or network
76
+ * storage — which is the expected shape once transcripts are included.
77
+ */
78
+ export function getArchiveRoot(env = process.env, homedir = os.homedir()) {
79
+ const configured = env.XDG_DATA_HOME?.trim();
80
+ const base = configured ? configured : path.join(homedir, ".local", "share");
81
+ return path.join(base, "cairn", "archive");
82
+ }
83
+ export function indexPath(root) {
84
+ return path.join(root, "archive.db");
85
+ }
86
+ export function segmentsDirectory(root) {
87
+ return path.join(root, "segments");
88
+ }
89
+ export function openArchive(options) {
90
+ return openStore({
91
+ path: indexPath(options.root),
92
+ migrations: MIGRATIONS,
93
+ label: "archive index",
94
+ ...(options.readOnly === true ? { readOnly: true } : {}),
95
+ ...(options.migrate === false ? { migrate: false } : {}),
96
+ });
97
+ }
98
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/archive/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE9D;;;;;;;;;;;;;GAaG;AACH,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCjB,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAyB;IAC9C;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,4DAA4D;QACzE,EAAE,CAAC,EAAE;YACH,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrB,CAAC;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAW,aAAa,CAAC,UAAU,CAAC,CAAC;AAEhE;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAyB,OAAO,CAAC,GAAG,EACpC,UAAkB,EAAE,CAAC,OAAO,EAAE;IAE9B,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC7E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACrC,CAAC;AAQD,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,OAAO,SAAS,CAAC;QACf,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;QAC7B,UAAU,EAAE,UAAU;QACtB,KAAK,EAAE,eAAe;QACtB,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzD,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Progress reporting for a long archive run.
3
+ *
4
+ * A full run is tens of thousands of files and several gigabytes, and without
5
+ * this it printed nothing at all until it finished. Two levels, because they
6
+ * answer different questions:
7
+ *
8
+ * - the **transient line** answers "is it still going, and how far in" — it
9
+ * rewrites itself in place, so it belongs only on a terminal
10
+ * - **verbose** answers "what exactly did it do to which file" — one durable
11
+ * line per artifact, so it is worth redirecting to a file and grepping later
12
+ *
13
+ * The transient line is gated the same way the update notifier is: stderr must
14
+ * be a TTY, the format must not be machine-readable, and `CI` must be unset.
15
+ * Those gates exist because a `\r`-rewritten line is corruption in a log file
16
+ * and noise in a CI transcript. Verbose has no such gate — being redirectable is
17
+ * the whole point of it.
18
+ */
19
+ export type Disposition = "stored" | "duplicate" | "unchanged" | "skipped";
20
+ export interface FileEvent {
21
+ path: string;
22
+ class: string;
23
+ size: number;
24
+ disposition: Disposition;
25
+ /** Absent for `unchanged`, which is decided without opening the file. */
26
+ sha256?: string;
27
+ }
28
+ export interface SegmentEvent {
29
+ name: string;
30
+ bytes: number;
31
+ blobs: number;
32
+ }
33
+ /** What `runArchive` reports as it goes. Every hook is optional. */
34
+ export interface RunReporter {
35
+ start?(total: {
36
+ files: number;
37
+ bytes: number;
38
+ }): void;
39
+ file?(event: FileEvent): void;
40
+ segment?(event: SegmentEvent): void;
41
+ failure?(event: {
42
+ file: string;
43
+ reason: string;
44
+ }): void;
45
+ finish?(): void;
46
+ }
47
+ export interface ReporterOptions {
48
+ /** Draw the transient status line. */
49
+ progress: boolean;
50
+ /** Emit one durable line per artifact. */
51
+ verbose: boolean;
52
+ stream?: NodeJS.WriteStream;
53
+ now?: () => number;
54
+ }
55
+ /**
56
+ * Decides whether the transient line may be drawn.
57
+ *
58
+ * Kept separate from the reporter so the command can report the decision, and
59
+ * so the rule is testable without a terminal.
60
+ */
61
+ export declare function progressAllowed(format: string, stream?: NodeJS.WriteStream, env?: NodeJS.ProcessEnv): boolean;
62
+ export declare function createReporter(options: ReporterOptions): RunReporter;