@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,339 @@
1
+ import crypto from "node:crypto";
2
+ import { diagnostic } from "../types.js";
3
+ import { profileFor } from "../targets/index.js";
4
+ import { packageName, packageVersion } from "../../version.js";
5
+ import { archive } from "./tar.js";
6
+ export const PACKAGE_REPORT = "package-report.json";
7
+ export const CHECKSUMS = "checksums.sha256";
8
+ export const SBOM = "sbom.json";
9
+ function sha256(content) {
10
+ return crypto.createHash("sha256").update(content).digest("hex");
11
+ }
12
+ function error(code, message, extra = {}) {
13
+ return { ...diagnostic(code, message, "unsupported", extra), severity: "error" };
14
+ }
15
+ /**
16
+ * Names the bundle key behind a catalog field, which is not always the catalog
17
+ * key: Claude Code's `owner` and Cursor's `author` both come from
18
+ * `marketplace.publisher`, so pointing at the catalog name would send an author
19
+ * to a key that does not exist.
20
+ */
21
+ function sourceField(field) {
22
+ switch (field.source.from) {
23
+ case "marketplace":
24
+ return `marketplace.${field.source.field}`;
25
+ case "manifest":
26
+ return field.source.field;
27
+ case "computed":
28
+ return field.name;
29
+ }
30
+ }
31
+ /** Reshapes a resolved value into the form the target's catalog declares. */
32
+ function reshape(value, transform) {
33
+ switch (transform ?? "identity") {
34
+ case "name":
35
+ return value && typeof value === "object" ? value.name : value;
36
+ case "first":
37
+ return Array.isArray(value) ? value[0] : value;
38
+ case "identity":
39
+ return value;
40
+ }
41
+ }
42
+ /** Resolves one catalog field from the manifest, the marketplace block, or the layout. */
43
+ function resolveField(field, bundle, source) {
44
+ switch (field.source.from) {
45
+ case "computed":
46
+ return reshape(source, field.transform);
47
+ case "manifest":
48
+ return reshape(bundle.manifest[field.source.field], field.transform);
49
+ case "marketplace":
50
+ return reshape(bundle.marketplace?.[field.source.field], field.transform);
51
+ }
52
+ }
53
+ /**
54
+ * Fills one catalog object from a field list, reporting AB500 per missing
55
+ * requirement. Shared by the document and its entries so a target's identity
56
+ * fields resolve by exactly the rules its plugin fields do.
57
+ */
58
+ function collectFields(fields, bundle, source, onMissing) {
59
+ const result = {};
60
+ for (const field of fields) {
61
+ const value = resolveField(field, bundle, source);
62
+ if (empty(value)) {
63
+ if (field.required)
64
+ onMissing(field);
65
+ continue;
66
+ }
67
+ result[field.name] = value;
68
+ }
69
+ return result;
70
+ }
71
+ function empty(value) {
72
+ if (value === undefined || value === null)
73
+ return true;
74
+ if (typeof value === "string")
75
+ return value.trim() === "";
76
+ if (Array.isArray(value))
77
+ return value.length === 0;
78
+ return false;
79
+ }
80
+ /**
81
+ * Reads image dimensions from a PNG or JPEG header.
82
+ *
83
+ * Header parsing only — pulling in an image library to answer "is this a PNG"
84
+ * would be a dependency for a validation nicety.
85
+ */
86
+ export function imageKind(content) {
87
+ if (content.length > 8 && content.subarray(0, 8).equals(Buffer.from("89504e470d0a1a0a", "hex")))
88
+ return "png";
89
+ if (content.length > 3 && content[0] === 0xff && content[1] === 0xd8)
90
+ return "jpeg";
91
+ if (content.subarray(0, 512).toString("utf8").includes("<svg"))
92
+ return "svg";
93
+ return null;
94
+ }
95
+ /**
96
+ * Builds a marketplace catalog per selected target, covering every bundle given.
97
+ *
98
+ * Field names and requirements come from the target profile, so the packager
99
+ * itself contains no per-target branching and a catalog change is a data edit.
100
+ * `AB500` and `AB501` fire from here for every caller — `agent package` with one
101
+ * bundle, `agent marketplace` with a collection — so a consumer's suppression
102
+ * list means the same thing whichever command produced the catalog.
103
+ */
104
+ export function buildCatalogs(bundles, targets, profiles, mode, options = {}) {
105
+ const list = Array.isArray(bundles) ? bundles : [bundles];
106
+ const artifacts = [];
107
+ const entries = [];
108
+ const diagnostics = [];
109
+ if (mode === "none")
110
+ return { artifacts, entries, diagnostics };
111
+ for (const target of targets) {
112
+ const spec = profileFor(target).marketplace;
113
+ if (!spec)
114
+ continue;
115
+ const location = spec.catalog[mode];
116
+ if (!location) {
117
+ diagnostics.push(diagnostic("AB507", `${target} has no ${mode} marketplace catalog`, "unsupported", {
118
+ target,
119
+ }));
120
+ continue;
121
+ }
122
+ for (const profile of profiles) {
123
+ if (profile !== "plugin")
124
+ continue;
125
+ const at = (bundle) => (options.attributeToBundle ? { path: bundle.root } : {});
126
+ const missing = (bundle) => (field) => {
127
+ diagnostics.push(error("AB500", `Catalog field '${field.name}' is required by ${target}`, {
128
+ target,
129
+ profile,
130
+ ...at(bundle),
131
+ remediation: `Set ${sourceField(field)} in agent-bundle.yaml.`,
132
+ }));
133
+ };
134
+ const collected = [];
135
+ for (const bundle of list) {
136
+ const source = options.sourceFor?.(bundle, target, profile) ?? `./${target}/${profile}`;
137
+ const entry = collectFields(spec.entryFields, bundle, source, missing(bundle));
138
+ // A catalog naming a version the manifest disagrees with would install
139
+ // one thing and advertise another.
140
+ if (entry.version !== undefined && entry.version !== bundle.version)
141
+ diagnostics.push(error("AB501", `Catalog version '${String(entry.version)}' disagrees with the bundle`, {
142
+ target,
143
+ profile,
144
+ ...at(bundle),
145
+ }));
146
+ collected.push(entry);
147
+ }
148
+ // Document identity comes from the first bundle unless a caller supplies
149
+ // it. `source` is irrelevant to document fields, so any value serves.
150
+ const document = options.document ??
151
+ collectFields(spec.documentFields ?? [], list[0], `./${target}/${profile}`, missing(list[0]));
152
+ const catalogPath = options.catalogPathFor?.(target, profile, location) ??
153
+ `${target}/${profile}/${location.directory}/${location.file}`;
154
+ artifacts.push({
155
+ path: catalogPath,
156
+ content: Buffer.from(JSON.stringify({ ...document, [spec.entriesKey]: collected }, null, 2) + "\n"),
157
+ mode: 0o644,
158
+ });
159
+ entries.push({ target, profile, path: catalogPath });
160
+ }
161
+ }
162
+ return { artifacts, entries, diagnostics };
163
+ }
164
+ /** Validates declared marketplace assets against the target's asset rules. */
165
+ export function checkAssets(bundle, targets, payload) {
166
+ const diagnostics = [];
167
+ const byName = new Map(payload.map((artifact) => [artifact.path, artifact]));
168
+ for (const target of targets) {
169
+ const spec = profileFor(target).marketplace;
170
+ if (!spec)
171
+ continue;
172
+ for (const rule of spec.assets) {
173
+ const declared = rule.role === "icon"
174
+ ? bundle.marketplace?.icon
175
+ ? [bundle.marketplace.icon]
176
+ : []
177
+ : (bundle.marketplace?.screenshots ?? []);
178
+ if (!declared.length) {
179
+ if (rule.required)
180
+ diagnostics.push(error("AB502", `${target} requires a marketplace ${rule.role}`, {
181
+ target,
182
+ remediation: `Set marketplace.${rule.role === "icon" ? "icon" : "screenshots"}.`,
183
+ }));
184
+ continue;
185
+ }
186
+ for (const reference of declared) {
187
+ const found = [...byName.entries()].find(([candidate]) => candidate.endsWith(`/${reference}`))?.[1];
188
+ if (!found) {
189
+ diagnostics.push(error("AB502", `Marketplace ${rule.role} '${reference}' is not in the package`, {
190
+ target,
191
+ remediation: "Add it under the bundle's assets directory.",
192
+ }));
193
+ continue;
194
+ }
195
+ if (!rule.extensions.some((extension) => reference.toLowerCase().endsWith(extension)))
196
+ diagnostics.push(diagnostic("AB503", `Marketplace ${rule.role} '${reference}' is not one of ${rule.extensions.join(", ")}`, "approximate", { target }));
197
+ else if (imageKind(found.content) === null)
198
+ diagnostics.push(diagnostic("AB503", `Marketplace ${rule.role} '${reference}' does not look like an image`, "approximate", { target }));
199
+ if (rule.maxBytes !== null && found.content.length > rule.maxBytes)
200
+ diagnostics.push(diagnostic("AB503", `Marketplace ${rule.role} '${reference}' exceeds ${rule.maxBytes} bytes`, "approximate", { target }));
201
+ }
202
+ }
203
+ }
204
+ return diagnostics;
205
+ }
206
+ /** Flags executable files outside the directories where a script belongs. */
207
+ export function checkExecutables(payload) {
208
+ return payload
209
+ .filter((artifact) => (artifact.mode & 0o111) !== 0)
210
+ .filter((artifact) => !/(^|\/)(hooks|scripts|bin)\//.test(artifact.path))
211
+ .map((artifact) => diagnostic("AB504", `Executable file outside hooks/, scripts/, or bin/: ${artifact.path}`, "approximate", { path: artifact.path, remediation: "Move it, or clear the execute bit." }));
212
+ }
213
+ /** Flags paths that collide when the filesystem is case-insensitive. */
214
+ export function checkCaseCollisions(payload) {
215
+ const seen = new Map();
216
+ const diagnostics = [];
217
+ for (const artifact of payload) {
218
+ const key = artifact.path.toLowerCase();
219
+ const existing = seen.get(key);
220
+ if (existing && existing !== artifact.path)
221
+ diagnostics.push(error("AB505", `Paths collide case-insensitively: '${existing}' and '${artifact.path}'`, {
222
+ path: artifact.path,
223
+ }));
224
+ else
225
+ seen.set(key, artifact.path);
226
+ }
227
+ return diagnostics;
228
+ }
229
+ /** Notes MCP servers invoked through an unpinned package specifier. */
230
+ export function checkPinning(bundle) {
231
+ const servers = bundle.mcp?.value.mcpServers;
232
+ if (!servers || typeof servers !== "object")
233
+ return [];
234
+ const diagnostics = [];
235
+ for (const [name, value] of Object.entries(servers)) {
236
+ if (!value || typeof value !== "object")
237
+ continue;
238
+ const server = value;
239
+ if (server.command !== "npx" || !Array.isArray(server.args))
240
+ continue;
241
+ const spec = server.args.map(String).find((arg) => !arg.startsWith("-"));
242
+ // A bare package name resolves to whatever is newest at install time.
243
+ if (spec && !/.@[^/]+$/.test(spec))
244
+ diagnostics.push(diagnostic("AB506", `MCP server '${name}' invokes an unpinned package: ${spec}`, "exact", {
245
+ path: bundle.mcp?.path,
246
+ remediation: "Pin a version, for example package@1.2.3.",
247
+ }));
248
+ }
249
+ return diagnostics;
250
+ }
251
+ /** `sha256sum -c` compatible, sorted by byte order for reproducibility. */
252
+ export function buildChecksums(payload) {
253
+ const lines = payload
254
+ .map((artifact) => `${sha256(artifact.content)} ${artifact.path}`)
255
+ .sort((a, b) => (a.slice(66) < b.slice(66) ? -1 : 1));
256
+ return { path: CHECKSUMS, content: Buffer.from(lines.join("\n") + "\n"), mode: 0o644 };
257
+ }
258
+ /**
259
+ * Content-derived file type, as recorded in `sbom.json`. Exported because
260
+ * `agent audit --baseline` reads that `type` field back and must classify the
261
+ * current side by the same rule.
262
+ */
263
+ export function classify(artifact) {
264
+ if ((artifact.mode & 0o111) !== 0)
265
+ return artifact.content.subarray(0, 2).toString("utf8") === "#!" ? "script" : "executable";
266
+ if (artifact.content.includes(0))
267
+ return "binary";
268
+ if (/\.(json|ya?ml|toml)$/i.test(artifact.path))
269
+ return "config";
270
+ if (/\.md$/i.test(artifact.path))
271
+ return "document";
272
+ return "asset";
273
+ }
274
+ /**
275
+ * A file inventory, deliberately not a CycloneDX claim.
276
+ *
277
+ * `bomFormat` and `specVersion` identify it as this tool's own format so a
278
+ * later `--sbom cyclonedx` can be added without changing what this one means.
279
+ */
280
+ export function buildSbom(bundle, payload) {
281
+ const document = {
282
+ bomFormat: "cairn-inventory",
283
+ specVersion: "1",
284
+ generator: { name: packageName, version: packageVersion },
285
+ subject: { name: bundle.name, version: bundle.version },
286
+ components: payload.map((artifact) => ({
287
+ path: artifact.path,
288
+ type: classify(artifact),
289
+ sha256: sha256(artifact.content),
290
+ bytes: artifact.content.length,
291
+ mode: `0${artifact.mode.toString(8)}`,
292
+ origin: artifact.origin ?? "portable",
293
+ })),
294
+ };
295
+ return {
296
+ path: SBOM,
297
+ content: Buffer.from(JSON.stringify(document, null, 2) + "\n"),
298
+ mode: 0o644,
299
+ };
300
+ }
301
+ /** One deterministic archive per target and profile. */
302
+ export function buildArchives(bundle, payload, targets, profiles) {
303
+ const artifacts = [];
304
+ const archives = [];
305
+ for (const target of targets) {
306
+ const spec = profileFor(target).marketplace;
307
+ if (!spec)
308
+ continue;
309
+ for (const profile of profiles) {
310
+ const prefix = `${target}/${profile}/`;
311
+ const entries = payload
312
+ .filter((artifact) => artifact.path.startsWith(prefix))
313
+ .map((artifact) => ({
314
+ path: artifact.path.slice(prefix.length),
315
+ content: artifact.content,
316
+ mode: artifact.mode,
317
+ }));
318
+ if (!entries.length)
319
+ continue;
320
+ const name = spec.archiveName
321
+ .replace("{name}", bundle.name)
322
+ .replace("{version}", bundle.version)
323
+ .replace("{target}", target)
324
+ .replace("{profile}", profile);
325
+ const content = archive(entries);
326
+ const destination = `archives/${name}`;
327
+ artifacts.push({ path: destination, content, mode: 0o644 });
328
+ archives.push({
329
+ target,
330
+ profile,
331
+ path: destination,
332
+ sha256: sha256(content),
333
+ bytes: content.length,
334
+ });
335
+ }
336
+ }
337
+ return { artifacts, archives };
338
+ }
339
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/package/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ export interface TarEntry {
2
+ /** POSIX path inside the archive. */
3
+ path: string;
4
+ content: Buffer;
5
+ mode: number;
6
+ }
7
+ export declare class TarPathTooLongError extends Error {
8
+ readonly path: string;
9
+ constructor(path: string);
10
+ }
11
+ /**
12
+ * Normalizes a mode to one of two values.
13
+ *
14
+ * This drops group/other write bits and setuid, so a stray 0o777 in a bundle
15
+ * cannot ship inside an archive.
16
+ */
17
+ export declare function normalizeMode(mode: number, directory: boolean): number;
18
+ /**
19
+ * Builds a deterministic ustar archive.
20
+ *
21
+ * Every field that could vary between machines or runs is pinned: mtime, uid,
22
+ * gid, uname, gname, mode, and entry order. Ordering is a byte comparison
23
+ * rather than `localeCompare`, which is ICU-build and locale dependent and
24
+ * would otherwise reorder the archive on a differently configured CI runner.
25
+ */
26
+ export declare function tarball(entries: TarEntry[]): Buffer;
27
+ /**
28
+ * Gzips deterministically.
29
+ *
30
+ * Node already writes a zero mtime, but the OS byte is a compile-time zlib
31
+ * constant that differs across platforms. Normalizing it keeps the archive
32
+ * byte-identical on macOS, Linux, and Windows.
33
+ */
34
+ export declare function gzipDeterministic(payload: Buffer): Buffer;
35
+ /** A deterministic `.tar.gz` for the given entries. */
36
+ export declare function archive(entries: TarEntry[]): Buffer;
@@ -0,0 +1,137 @@
1
+ import zlib from "node:zlib";
2
+ const BLOCK = 512;
3
+ /** GNU's default blocking factor; padding to it keeps every tar implementation happy. */
4
+ const RECORD = BLOCK * 20;
5
+ /** Longest name the ustar `name` field holds; longer paths use the `prefix` field. */
6
+ const NAME_LIMIT = 100;
7
+ const PREFIX_LIMIT = 155;
8
+ export class TarPathTooLongError extends Error {
9
+ path;
10
+ constructor(path) {
11
+ super(`Path does not fit the ustar header: ${path}`);
12
+ this.path = path;
13
+ this.name = "TarPathTooLongError";
14
+ }
15
+ }
16
+ function octal(value, width) {
17
+ return value.toString(8).padStart(width - 1, "0") + "\0";
18
+ }
19
+ /**
20
+ * Splits a path across the ustar `name` and `prefix` fields.
21
+ *
22
+ * A path that will not fit is refused rather than escalated to a PAX header:
23
+ * PAX records carry their own name and mtime, which would need a separate
24
+ * determinism policy. Refusing is honest and can be relaxed later.
25
+ */
26
+ function splitPath(value) {
27
+ if (Buffer.byteLength(value) <= NAME_LIMIT)
28
+ return { name: value, prefix: "" };
29
+ const segments = value.split("/");
30
+ for (let index = 1; index < segments.length; index++) {
31
+ const prefix = segments.slice(0, index).join("/");
32
+ const name = segments.slice(index).join("/");
33
+ if (Buffer.byteLength(prefix) <= PREFIX_LIMIT && Buffer.byteLength(name) <= NAME_LIMIT)
34
+ return { name, prefix };
35
+ }
36
+ throw new TarPathTooLongError(value);
37
+ }
38
+ /**
39
+ * Normalizes a mode to one of two values.
40
+ *
41
+ * This drops group/other write bits and setuid, so a stray 0o777 in a bundle
42
+ * cannot ship inside an archive.
43
+ */
44
+ export function normalizeMode(mode, directory) {
45
+ if (directory)
46
+ return 0o755;
47
+ return (mode & 0o111) !== 0 ? 0o755 : 0o644;
48
+ }
49
+ function header(entry) {
50
+ const block = Buffer.alloc(BLOCK, 0);
51
+ const { name, prefix } = splitPath(entry.directory ? `${entry.path}/` : entry.path);
52
+ block.write(name, 0, NAME_LIMIT, "utf8");
53
+ block.write(octal(entry.mode, 8), 100, 8, "utf8");
54
+ // uid/gid zero and uname/gname empty: a nonempty uname would embed the
55
+ // building machine's user in the archive bytes.
56
+ block.write(octal(0, 8), 108, 8, "utf8");
57
+ block.write(octal(0, 8), 116, 8, "utf8");
58
+ block.write(octal(entry.size, 12), 124, 12, "utf8");
59
+ block.write(octal(0, 12), 136, 12, "utf8"); // mtime
60
+ block.write(" ", 148, 8, "utf8"); // checksum placeholder: eight spaces
61
+ block.write(entry.directory ? "5" : "0", 156, 1, "utf8");
62
+ block.write("ustar\0", 257, 6, "utf8");
63
+ block.write("00", 263, 2, "utf8");
64
+ block.write(octal(0, 8), 329, 8, "utf8"); // devmajor
65
+ block.write(octal(0, 8), 337, 8, "utf8"); // devminor
66
+ if (prefix)
67
+ block.write(prefix, 345, PREFIX_LIMIT, "utf8");
68
+ let checksum = 0;
69
+ for (const byte of block)
70
+ checksum += byte;
71
+ block.write(checksum.toString(8).padStart(6, "0") + "\0 ", 148, 8, "utf8");
72
+ return block;
73
+ }
74
+ function pad(size) {
75
+ const remainder = size % BLOCK;
76
+ return remainder === 0 ? Buffer.alloc(0) : Buffer.alloc(BLOCK - remainder, 0);
77
+ }
78
+ /**
79
+ * Builds a deterministic ustar archive.
80
+ *
81
+ * Every field that could vary between machines or runs is pinned: mtime, uid,
82
+ * gid, uname, gname, mode, and entry order. Ordering is a byte comparison
83
+ * rather than `localeCompare`, which is ICU-build and locale dependent and
84
+ * would otherwise reorder the archive on a differently configured CI runner.
85
+ */
86
+ export function tarball(entries) {
87
+ const sorted = [...entries].sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));
88
+ // Directory entries are emitted explicitly so `tar tf` lists a complete tree.
89
+ const directories = new Set();
90
+ for (const entry of sorted) {
91
+ const segments = entry.path.split("/");
92
+ for (let index = 1; index < segments.length; index++)
93
+ directories.add(segments.slice(0, index).join("/"));
94
+ }
95
+ const all = [
96
+ ...[...directories].map((path) => ({
97
+ path,
98
+ content: Buffer.alloc(0),
99
+ mode: 0o755,
100
+ directory: true,
101
+ })),
102
+ ...sorted.map((entry) => ({ ...entry, directory: false })),
103
+ ].sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));
104
+ const blocks = [];
105
+ for (const entry of all) {
106
+ blocks.push(header({
107
+ path: entry.path,
108
+ size: entry.content.length,
109
+ mode: normalizeMode(entry.mode, entry.directory),
110
+ directory: entry.directory,
111
+ }));
112
+ if (entry.content.length)
113
+ blocks.push(entry.content, pad(entry.content.length));
114
+ }
115
+ blocks.push(Buffer.alloc(BLOCK * 2, 0));
116
+ const body = Buffer.concat(blocks);
117
+ const remainder = body.length % RECORD;
118
+ return remainder === 0 ? body : Buffer.concat([body, Buffer.alloc(RECORD - remainder, 0)]);
119
+ }
120
+ /**
121
+ * Gzips deterministically.
122
+ *
123
+ * Node already writes a zero mtime, but the OS byte is a compile-time zlib
124
+ * constant that differs across platforms. Normalizing it keeps the archive
125
+ * byte-identical on macOS, Linux, and Windows.
126
+ */
127
+ export function gzipDeterministic(payload) {
128
+ const compressed = zlib.gzipSync(payload, { level: 9 });
129
+ compressed.writeUInt32LE(0, 4); // MTIME
130
+ compressed[9] = 0x03; // OS = Unix
131
+ return compressed;
132
+ }
133
+ /** A deterministic `.tar.gz` for the given entries. */
134
+ export function archive(entries) {
135
+ return gzipDeterministic(tarball(entries));
136
+ }
137
+ //# sourceMappingURL=tar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tar.js","sourceRoot":"","sources":["../../../src/agent/package/tar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { AgentBundle, SourceFile } from "./types.js";
2
+ export declare function readStructured(file: string): Record<string, unknown>;
3
+ export declare function splitFrontmatter(content: string, file: string): {
4
+ metadata: Record<string, unknown>;
5
+ body: string;
6
+ };
7
+ /**
8
+ * Every file under `directory`, with root-relative paths in the platform's
9
+ * separator. Refuses a symlink that resolves outside `directory`, which is why
10
+ * callers outside this module use it rather than walking the tree themselves.
11
+ */
12
+ export declare function allFiles(directory: string): SourceFile[];
13
+ export declare function loadBundle(source: string): AgentBundle;