@maycombhq/atticus 0.0.0-stage → 2.0.0-beta.2

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 (475) hide show
  1. package/LICENSE +177 -0
  2. package/README.md +17 -2
  3. package/THIRD-PARTY-LICENSES.txt +2607 -0
  4. package/dist/bin.js +47 -0
  5. package/dist/chunk-23W7VWKR.js +2609 -0
  6. package/dist/chunk-27NKUS3X.js +4330 -0
  7. package/dist/chunk-2ANOROX3.js +2522 -0
  8. package/dist/chunk-2BF2EYJV.js +174 -0
  9. package/dist/chunk-2BFCZ3RK.js +315 -0
  10. package/dist/chunk-2DIQQJCB.js +378 -0
  11. package/dist/chunk-2RMYG36Q.js +1227 -0
  12. package/dist/chunk-2VHF7OXM.js +55 -0
  13. package/dist/chunk-3ALD2W2A.js +95 -0
  14. package/dist/chunk-3C7EYRFZ.js +41 -0
  15. package/dist/chunk-3G4YI4ZU.js +16 -0
  16. package/dist/chunk-3HI6Z55Y.js +5949 -0
  17. package/dist/chunk-3USYZGRF.js +324 -0
  18. package/dist/chunk-42EVSKME.js +37 -0
  19. package/dist/chunk-4AK7IBVP.js +915 -0
  20. package/dist/chunk-4BKGMUIK.js +53 -0
  21. package/dist/chunk-4BN53TG3.js +343 -0
  22. package/dist/chunk-4NDAAFQT.js +103 -0
  23. package/dist/chunk-4Q3NN7VF.js +32 -0
  24. package/dist/chunk-4RS5KZQD.js +25 -0
  25. package/dist/chunk-4SKZDI62.js +22 -0
  26. package/dist/chunk-4WBVUHXN.js +69 -0
  27. package/dist/chunk-5GDRCDQB.js +32 -0
  28. package/dist/chunk-5GGOLAKC.js +856 -0
  29. package/dist/chunk-5KLGBXG5.js +48 -0
  30. package/dist/chunk-5WG5YP4T.js +34 -0
  31. package/dist/chunk-64EQYWCA.js +180 -0
  32. package/dist/chunk-652QWTLZ.js +242 -0
  33. package/dist/chunk-65NYPGRC.js +766 -0
  34. package/dist/chunk-66YVAGGM.js +46 -0
  35. package/dist/chunk-6BNC6EQ4.js +41 -0
  36. package/dist/chunk-6BVONWJ7.js +50 -0
  37. package/dist/chunk-6D2CQ5II.js +41 -0
  38. package/dist/chunk-6IU67AEK.js +325 -0
  39. package/dist/chunk-6J5OKA4Y.js +49 -0
  40. package/dist/chunk-6JCPI55B.js +92 -0
  41. package/dist/chunk-6JUBZBMW.js +56 -0
  42. package/dist/chunk-6M5NK3K3.js +415 -0
  43. package/dist/chunk-6QSERWXH.js +53 -0
  44. package/dist/chunk-6TACQN3N.js +41 -0
  45. package/dist/chunk-76WKMA4J.js +14 -0
  46. package/dist/chunk-7AVHLZGD.js +45 -0
  47. package/dist/chunk-7EFILTCI.js +67 -0
  48. package/dist/chunk-7EKXJZ2Y.js +2902 -0
  49. package/dist/chunk-7EOBHUMC.js +133 -0
  50. package/dist/chunk-7FBGJFEE.js +66 -0
  51. package/dist/chunk-7JUKDRSZ.js +1726 -0
  52. package/dist/chunk-7SW2QWLU.js +212 -0
  53. package/dist/chunk-7WD63HU2.js +143 -0
  54. package/dist/chunk-7ZUIMTOU.js +108 -0
  55. package/dist/chunk-A3GY6SOA.js +95 -0
  56. package/dist/chunk-A7UPUQFY.js +2356 -0
  57. package/dist/chunk-AA6YULYB.js +376 -0
  58. package/dist/chunk-ABWHYWNI.js +101 -0
  59. package/dist/chunk-AIOQPLA5.js +540 -0
  60. package/dist/chunk-AVJDSJ2F.js +18 -0
  61. package/dist/chunk-B2WLAWNJ.js +374 -0
  62. package/dist/chunk-BKVWTZ6A.js +211 -0
  63. package/dist/chunk-BOHJZTEQ.js +1991 -0
  64. package/dist/chunk-BWZ77RQT.js +25 -0
  65. package/dist/chunk-C6EKFH7J.js +169 -0
  66. package/dist/chunk-CAQZUNOH.js +1150 -0
  67. package/dist/chunk-CEXSU4S6.js +1217 -0
  68. package/dist/chunk-CKSITVS4.js +16101 -0
  69. package/dist/chunk-CNUKCS2T.js +2741 -0
  70. package/dist/chunk-CPA6HPVR.js +3206 -0
  71. package/dist/chunk-CR3MTH32.js +207 -0
  72. package/dist/chunk-CSZ4C5N6.js +307 -0
  73. package/dist/chunk-D3PO4DOZ.js +261 -0
  74. package/dist/chunk-D46WUV3T.js +33 -0
  75. package/dist/chunk-DE76JROX.js +80 -0
  76. package/dist/chunk-DFBCSHVT.js +69 -0
  77. package/dist/chunk-DHPACDG7.js +104 -0
  78. package/dist/chunk-DKJA76CJ.js +113 -0
  79. package/dist/chunk-DPUYDDQG.js +164 -0
  80. package/dist/chunk-DPZHZQKE.js +285 -0
  81. package/dist/chunk-E36QOJMD.js +47 -0
  82. package/dist/chunk-EADP3PEN.js +450 -0
  83. package/dist/chunk-EBEW3XXQ.js +166 -0
  84. package/dist/chunk-EDS2L2LD.js +106 -0
  85. package/dist/chunk-EFHQ3TWP.js +637 -0
  86. package/dist/chunk-EPTBZ3GP.js +101 -0
  87. package/dist/chunk-EYWIDJFU.js +130 -0
  88. package/dist/chunk-F7HYOUFF.js +287 -0
  89. package/dist/chunk-FHH4I4ZV.js +128 -0
  90. package/dist/chunk-FITWGOJ2.js +131 -0
  91. package/dist/chunk-FQXYPF7E.js +147 -0
  92. package/dist/chunk-G2B4ZQGH.js +240 -0
  93. package/dist/chunk-GBRFVT63.js +45 -0
  94. package/dist/chunk-GDLULHTC.js +2919 -0
  95. package/dist/chunk-GLUX4EEP.js +583 -0
  96. package/dist/chunk-GQ4N4WKF.js +1142 -0
  97. package/dist/chunk-GT4I4ZWM.js +38 -0
  98. package/dist/chunk-HFQCFSJR.js +60 -0
  99. package/dist/chunk-HITVBIJS.js +1247 -0
  100. package/dist/chunk-HLJAXMM4.js +233 -0
  101. package/dist/chunk-HVUPKCGJ.js +162 -0
  102. package/dist/chunk-I3E7CX4H.js +155 -0
  103. package/dist/chunk-I4JRCD6M.js +184 -0
  104. package/dist/chunk-ICY36XCH.js +34 -0
  105. package/dist/chunk-IHMLFRVV.js +228 -0
  106. package/dist/chunk-IPKHE5D6.js +1963 -0
  107. package/dist/chunk-J4K3KVLD.js +131 -0
  108. package/dist/chunk-JBTK5OP2.js +55 -0
  109. package/dist/chunk-JCZIKA4C.js +163 -0
  110. package/dist/chunk-JGZCG5VM.js +189 -0
  111. package/dist/chunk-JIITQXFB.js +4087 -0
  112. package/dist/chunk-JMSCMUCA.js +271 -0
  113. package/dist/chunk-JZU3H6UQ.js +54 -0
  114. package/dist/chunk-K65BJIMT.js +49 -0
  115. package/dist/chunk-KEM4SDDP.js +3898 -0
  116. package/dist/chunk-KQDZXGNR.js +14 -0
  117. package/dist/chunk-L24C55VN.js +7923 -0
  118. package/dist/chunk-L6SGQIR3.js +471 -0
  119. package/dist/chunk-LR3R6Z2A.js +400 -0
  120. package/dist/chunk-M766ZJ6W.js +119 -0
  121. package/dist/chunk-MC3H7736.js +19910 -0
  122. package/dist/chunk-MGYZM27B.js +205 -0
  123. package/dist/chunk-MMOSZPWJ.js +273 -0
  124. package/dist/chunk-MVZVGYXH.js +1611 -0
  125. package/dist/chunk-N7IXEHK3.js +549 -0
  126. package/dist/chunk-NE2W3OO7.js +230 -0
  127. package/dist/chunk-NN2ZQEB4.js +38 -0
  128. package/dist/chunk-NXFPS2LR.js +182 -0
  129. package/dist/chunk-O3WI5KWW.js +31 -0
  130. package/dist/chunk-OLQJTJJU.js +76 -0
  131. package/dist/chunk-ONLS5QA5.js +102 -0
  132. package/dist/chunk-OT2O76OS.js +1496 -0
  133. package/dist/chunk-PAMPPUR6.js +4500 -0
  134. package/dist/chunk-PCOCACY3.js +385 -0
  135. package/dist/chunk-PCVDV3UZ.js +430 -0
  136. package/dist/chunk-PRPPGYZG.js +104 -0
  137. package/dist/chunk-Q4D5X7QB.js +264 -0
  138. package/dist/chunk-Q5AMFEWD.js +119 -0
  139. package/dist/chunk-QRAOANID.js +214 -0
  140. package/dist/chunk-QSXK2RGH.js +688 -0
  141. package/dist/chunk-QZSX3F7C.js +389 -0
  142. package/dist/chunk-R6RY4Q5T.js +51 -0
  143. package/dist/chunk-R6XF6UR3.js +149 -0
  144. package/dist/chunk-R77KLRB3.js +166 -0
  145. package/dist/chunk-RRTKKSLQ.js +251 -0
  146. package/dist/chunk-RTEYOSJY.js +29 -0
  147. package/dist/chunk-RUVFXE2L.js +666 -0
  148. package/dist/chunk-RVH5SUW5.js +69 -0
  149. package/dist/chunk-RZPYKDWS.js +26 -0
  150. package/dist/chunk-S2A7YC3Q.js +41433 -0
  151. package/dist/chunk-S3QNRWYR.js +25 -0
  152. package/dist/chunk-SJRGMG6A.js +174 -0
  153. package/dist/chunk-SP2I63OO.js +252 -0
  154. package/dist/chunk-T2UYZSCQ.js +545 -0
  155. package/dist/chunk-T6AIP7H5.js +3851 -0
  156. package/dist/chunk-T6XQL73F.js +94 -0
  157. package/dist/chunk-TANFV3MZ.js +531 -0
  158. package/dist/chunk-TDD55CJH.js +119 -0
  159. package/dist/chunk-TV45EUGM.js +51 -0
  160. package/dist/chunk-TXLH6WHQ.js +2078 -0
  161. package/dist/chunk-TYAID7B7.js +408 -0
  162. package/dist/chunk-UBBC2XSG.js +873 -0
  163. package/dist/chunk-UGLN7QHV.js +27 -0
  164. package/dist/chunk-UNM6ZOKP.js +878 -0
  165. package/dist/chunk-V2YTAIQO.js +1075 -0
  166. package/dist/chunk-VN3DP4LQ.js +43 -0
  167. package/dist/chunk-VOGCSYOI.js +16 -0
  168. package/dist/chunk-VYDBJ73M.js +32 -0
  169. package/dist/chunk-W3BQAZ3Q.js +34 -0
  170. package/dist/chunk-W5BVQF44.js +36 -0
  171. package/dist/chunk-WVPJSRRJ.js +52 -0
  172. package/dist/chunk-WY6PP6AA.js +53 -0
  173. package/dist/chunk-XAKWMCXI.js +285 -0
  174. package/dist/chunk-XPCM366L.js +70 -0
  175. package/dist/chunk-XPTOBS2D.js +48 -0
  176. package/dist/chunk-XY3P7JW7.js +3479 -0
  177. package/dist/chunk-XZRON6IV.js +131 -0
  178. package/dist/chunk-YEDDOYSC.js +27809 -0
  179. package/dist/chunk-YISXLPHN.js +496 -0
  180. package/dist/chunk-YMZ3TNYB.js +18 -0
  181. package/dist/chunk-YY6ZQQBP.js +203 -0
  182. package/dist/chunk-YYQN46FY.js +334 -0
  183. package/dist/chunk-Z6LF7HQN.js +22 -0
  184. package/dist/chunk-ZCJDOK2S.js +116 -0
  185. package/dist/chunk-ZDPAS56H.js +76 -0
  186. package/dist/chunk-ZMAINWBW.js +18 -0
  187. package/dist/chunk-ZMFPW66A.js +22 -0
  188. package/dist/chunk-ZNCEKR4J.js +296 -0
  189. package/dist/chunk-ZVM6AKKM.js +47 -0
  190. package/dist/files.json +1888 -0
  191. package/dist/fixtures/forge/README.md +19 -0
  192. package/dist/fixtures/forge/expected/discrepancies.yaml +54 -0
  193. package/dist/fixtures/forge/expected/inputs.yaml +38 -0
  194. package/dist/fixtures/forge/expected/scan.yaml +342 -0
  195. package/dist/fixtures/forge/inputs/diagrams/forge-context.drawio +23 -0
  196. package/dist/fixtures/forge/inputs/partner-specs/northwind-pay-openapi.yaml +11 -0
  197. package/dist/fixtures/forge/inputs/tickets/ado-stories.json +4 -0
  198. package/dist/fixtures/forge/inputs/tickets/closed-service-requests.json +5 -0
  199. package/dist/fixtures/forge/inputs/wiki/integration-patterns.md +11 -0
  200. package/dist/fixtures/forge/inputs/wiki/ledger-solution-spec.md +9 -0
  201. package/dist/fixtures/forge/inputs/wiki/snow-firewall-request.md +4 -0
  202. package/dist/fixtures/forge/metarepo/judgments/reaches/84af5b6af24f7ca8c23013f3.yaml +17 -0
  203. package/dist/fixtures/forge/metarepo/judgments/reaches/c3917555edebddce8cecb647.yaml +17 -0
  204. package/dist/fixtures/forge/metarepo/judgments/reaches/c5fafd6601f8ca9e34e0bbd0.yaml +17 -0
  205. package/dist/fixtures/forge/metarepo/org-pack/agents/architecture-critic.yaml +9 -0
  206. package/dist/fixtures/forge/metarepo/org-pack/agents/story-writer.yaml +10 -0
  207. package/dist/fixtures/forge/metarepo/org-pack/checklists/architecture.yaml +115 -0
  208. package/dist/fixtures/forge/metarepo/org-pack/dialects/forge.yaml +111 -0
  209. package/dist/fixtures/forge/metarepo/org-pack/gates.yaml +22 -0
  210. package/dist/fixtures/forge/metarepo/org-pack/pack.yaml +11 -0
  211. package/dist/fixtures/forge/metarepo/org-pack/patterns/A.EB.PUB.yaml +12 -0
  212. package/dist/fixtures/forge/metarepo/org-pack/patterns/D.JDBC.yaml +12 -0
  213. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.DIR.BFF.yaml +12 -0
  214. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.GW.SOR.yaml +13 -0
  215. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.GW.VND.yaml +14 -0
  216. package/dist/fixtures/forge/metarepo/org-pack/process/change-templates/feature.md +37 -0
  217. package/dist/fixtures/forge/metarepo/org-pack/process/skills/add-forge-endpoint/SKILL.md +17 -0
  218. package/dist/fixtures/forge/metarepo/org-pack/process/snow/firewall-rule.yaml +14 -0
  219. package/dist/fixtures/forge/metarepo/org-pack/process/snow/gateway-route.yaml +13 -0
  220. package/dist/fixtures/forge/metarepo/org-pack/profiles/forge/profile.yaml +12 -0
  221. package/dist/fixtures/forge/metarepo/org-pack/profiles/forge/repos.manifest.yaml +44 -0
  222. package/dist/fixtures/forge/metarepo/org-pack/roles.yaml +14 -0
  223. package/dist/fixtures/forge/metarepo/org-pack/runtime.yaml +14 -0
  224. package/dist/fixtures/forge/metarepo/org-pack/sources.yaml +3 -0
  225. package/dist/fixtures/forge/repos/forge-events/topics/payments.initiated.yaml +4 -0
  226. package/dist/fixtures/forge/repos/forge-events/topics/transfers.completed.yaml +4 -0
  227. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/ledger-v1.xml +3 -0
  228. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/policies/SpikeArrest.xml +3 -0
  229. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/policies/VerifyOAuth.xml +4 -0
  230. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/proxies/default.xml +14 -0
  231. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/targets/ledger.xml +5 -0
  232. package/dist/fixtures/forge/repos/forge-infra/alerts/ledger-api.yaml +5 -0
  233. package/dist/fixtures/forge/repos/forge-infra/k8s/ledger-api.yaml +15 -0
  234. package/dist/fixtures/forge/repos/forge-infra/k8s/portal-bff.yaml +7 -0
  235. package/dist/fixtures/forge/repos/forge-infra/terraform/ledger-db.tf +9 -0
  236. package/dist/fixtures/forge/repos/forge-ledger/api/ledger-openapi.yaml +31 -0
  237. package/dist/fixtures/forge/repos/forge-ledger/forge.yaml +4 -0
  238. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/LedgerEndpoints.java +13 -0
  239. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/LedgerEvents.java +11 -0
  240. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/NorthwindClient.java +10 -0
  241. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/application.yml +3 -0
  242. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/db/migration/V1__create_account.sql +5 -0
  243. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/db/migration/V2__create_entry.sql +7 -0
  244. package/dist/fixtures/forge/repos/forge-portal-bff/pom.xml +1 -0
  245. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/AuditPublisher.java +12 -0
  246. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/BalanceController.java +16 -0
  247. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/LedgerClient.java +13 -0
  248. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/PaymentEvents.java +13 -0
  249. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/resources/application.yml +8 -0
  250. package/dist/fixtures/forge/repos/forge-portal-ui/package.json +1 -0
  251. package/dist/fixtures/forge/repos/forge-portal-ui/src/api/balance.ts +5 -0
  252. package/dist/fixtures/forge/repos/forge-reports-job/src/main/java/forge/reports/DailyEntriesJob.java +19 -0
  253. package/dist/fixtures/forge/repos/forge-reports-job/src/main/resources/application.yml +3 -0
  254. package/dist/fixtures/forge-change/README.md +41 -0
  255. package/dist/fixtures/forge-change/expected/findings.yaml +301 -0
  256. package/dist/fixtures/forge-change/expected/stories.yaml +101 -0
  257. package/dist/fixtures/forge-change/judgments/personal-data/0b5f3dbf5257a22275d8c74b.yaml +18 -0
  258. package/dist/fixtures/forge-change/judgments/personal-data/2759a66770134c417440bf2d.yaml +18 -0
  259. package/dist/fixtures/forge-change/judgments/personal-data/31b1ea2f14d0737f1aca79fd.yaml +18 -0
  260. package/dist/fixtures/forge-change/judgments/personal-data/49afd70c08228e65ad6ca1ed.yaml +18 -0
  261. package/dist/fixtures/forge-change/judgments/personal-data/761cabcb8a39f5e5866d2dd6.yaml +18 -0
  262. package/dist/fixtures/forge-change/judgments/personal-data/adae902b90cc8ffa0c765145.yaml +18 -0
  263. package/dist/fixtures/forge-change/judgments/personal-data/ba11bb933105ec9493e065dd.yaml +18 -0
  264. package/dist/fixtures/forge-change/judgments/personal-data/bdbcd1cdac3021c68063c3e7.yaml +18 -0
  265. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/brief.md +35 -0
  266. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/change.yaml +120 -0
  267. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/data.md +18 -0
  268. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/design.md +29 -0
  269. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/interfaces.md +17 -0
  270. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/mappings.md +26 -0
  271. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/proposal.md +35 -0
  272. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/snow.md +12 -0
  273. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/specs/transfer-limits/spec.md +19 -0
  274. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s1-refuse-over-limit.md +17 -0
  275. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s2-show-remaining.md +16 -0
  276. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s3-audit-refusals.md +18 -0
  277. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s4-velocity-check.md +16 -0
  278. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories.md +8 -0
  279. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/tasks.md +12 -0
  280. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/ux.md +7 -0
  281. package/dist/fixtures/forge-change/org-pack/agents/code-and-test-critic.yaml +13 -0
  282. package/dist/fixtures/forge-change/org-pack/agents/complete-critic.yaml +12 -0
  283. package/dist/fixtures/forge-change/org-pack/agents/safe-critic.yaml +12 -0
  284. package/dist/fixtures/forge-change/org-pack/agents/ship-critic.yaml +11 -0
  285. package/dist/fixtures/forge-change/org-pack/agents/true-critic.yaml +11 -0
  286. package/dist/fixtures/forge-change/org-pack/checklists/review.yaml +54 -0
  287. package/dist/fixtures/forge-change/org-pack/gates.yaml +25 -0
  288. package/dist/fixtures/forge-change/org-pack/teams/team-ledger/checklists/ledger-team.yaml +227 -0
  289. package/dist/fixtures/forge-change/recordings/complete-critic/2ad84f84bf39c1d5412697e69fe23034d6983ec45a00314bf0975e627589a3c5.json +12 -0
  290. package/dist/fixtures/forge-change/recordings/complete-critic/417c98d8e54a4387d0fd93441c49f44c2868958739070d855c1dce0c41e24db3.json +12 -0
  291. package/dist/fixtures/forge-change/recordings/complete-critic/50203ee22e9cb3ef047295edb6538fe7d5695e1e4b139f3c929013dc6ce47021.json +12 -0
  292. package/dist/fixtures/forge-change/recordings/complete-critic/89f18d67f5d9c325bf35e2a9e020f9ddb6ee13b8523315037f0905cc57c040b1.json +12 -0
  293. package/dist/fixtures/forge-change/recordings/complete-critic/b4097867d26ae8eadc8b9efa8cdd86897013358035f0b40086c299a59c4ba121.json +12 -0
  294. package/dist/fixtures/forge-change/recordings/safe-critic/302d06f49664dd67ad2e21ab9cf74c1b0f7d3f750709c6ed8eff2b70983274e2.json +12 -0
  295. package/dist/fixtures/forge-change/recordings/safe-critic/32f1049c9a5ab4a759543290db4644ec6e221cc45fdfdcf06193837c6a8ce0b9.json +12 -0
  296. package/dist/fixtures/forge-change/recordings/safe-critic/4e4a84bfc04b9f26ca4250319a879901ff7a1c081c71e46a117675fee05026b0.json +12 -0
  297. package/dist/fixtures/forge-change/recordings/safe-critic/604af0fcdd6df6b76208fa88305fdc15c37606c2a4d1ae816477e46ac8c2dd04.json +12 -0
  298. package/dist/fixtures/forge-change/recordings/safe-critic/f0bf50af11f14c50d07904f0dffe1c8c20fb0cd89770645a8824c1d30a443955.json +12 -0
  299. package/dist/fixtures/forge-change/recordings/ship-critic/350954b58833b2c04880c67db45a1b328b7fd541d9f0d943b63905b8875488a6.json +12 -0
  300. package/dist/fixtures/forge-change/recordings/ship-critic/4af95c6c96a206777cec9de1f9c2d8c55a36ddc9b8db2f81d6eb83217b835efa.json +12 -0
  301. package/dist/fixtures/forge-change/recordings/ship-critic/76c34522a49cf7587a4e5689a5030d384603fa780b8aba97d27815cbc829683e.json +12 -0
  302. package/dist/fixtures/forge-change/recordings/ship-critic/a3b2cd1ace48587e5994333db03b34c3a0f9dec4f1932f1730ddfb687f6918c8.json +12 -0
  303. package/dist/fixtures/forge-change/recordings/ship-critic/de288a4fa64d0fc20890f9a787080ce6eac5203b7b9b72d884df11e8cf111835.json +12 -0
  304. package/dist/fixtures/forge-change/recordings/story-writer/1ddb00eac2aaf91a5ec5d9dfd220116be9f75aec6546a4a3a3b050ed89af2864.json +12 -0
  305. package/dist/packages/assistant-kit/frameworks-kit/README.md +86 -0
  306. package/dist/packages/assistant-kit/frameworks-kit/checklist.md +11 -0
  307. package/dist/packages/assistant-kit/frameworks-kit/examples/tide-lantern.yaml +56 -0
  308. package/dist/packages/assistant-kit/frameworks-kit/examples/tide-platform.yaml +43 -0
  309. package/dist/packages/assistant-kit/frameworks-kit/prompts/write-framework-model.md +12 -0
  310. package/dist/packages/assistant-kit/kit/README.md +98 -0
  311. package/dist/packages/assistant-kit/kit/c2-reference.md +334 -0
  312. package/dist/packages/assistant-kit/kit/checklist.md +39 -0
  313. package/dist/packages/assistant-kit/kit/examples/house-http-client.yaml +102 -0
  314. package/dist/packages/assistant-kit/kit/examples/tide-apigee.yaml +56 -0
  315. package/dist/packages/assistant-kit/kit/examples/tide-apim.yaml +32 -0
  316. package/dist/packages/assistant-kit/kit/examples/tide-kong.yaml +44 -0
  317. package/dist/packages/assistant-kit/kit/prompts/write-dialect.md +34 -0
  318. package/dist/packages/assistant-kit/kit/worked-example.md +198 -0
  319. package/dist/packages/conformance/sample/README.md +4 -0
  320. package/dist/packages/conformance/sample/inputs/notes.md +3 -0
  321. package/dist/packages/conformance/sample/inputs/systems.csv +3 -0
  322. package/dist/packages/conformance/sample/repo/api/greeter.proto +6 -0
  323. package/dist/packages/conformance/sample/repo/api/openapi.yaml +10 -0
  324. package/dist/packages/conformance/sample/repo/api/schema.graphql +3 -0
  325. package/dist/packages/conformance/sample/repo/db/V1__create_greeting.sql +4 -0
  326. package/dist/packages/conformance/sample/repo/package.json +7 -0
  327. package/dist/packages/conformance/sample/repo/src/main/java/sample/HelloController.java +10 -0
  328. package/dist/packages/conformance/sample/repo/web/app.ts +4 -0
  329. package/dist/packages/evals/datasets/critic-lenses.yaml +62 -0
  330. package/dist/packages/evals/datasets/dialect-writer.yaml +14 -0
  331. package/dist/packages/evals/datasets/feature-namer.yaml +34 -0
  332. package/dist/packages/evals/datasets/glossary-definer.yaml +25 -0
  333. package/dist/packages/evals/datasets/story-writer.yaml +13 -0
  334. package/dist/packages/evals/datasets/template-writer.yaml +16 -0
  335. package/dist/packages/evals/datasets/test-writer.yaml +18 -0
  336. package/dist/packages/executors/reference/reference-executor.mjs +233 -0
  337. package/dist/packages/extractors/dialects/argocd.yaml +45 -0
  338. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/AccountResource.java +47 -0
  339. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/AuditClient.java +12 -0
  340. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/LedgerClient.java +17 -0
  341. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/LedgerClient.java +14 -0
  342. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/RatesClient.java +11 -0
  343. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/StatementController.java +36 -0
  344. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/resources/application.yml +7 -0
  345. package/dist/packages/extractors/dialects/fixtures/quarkus-reactive-messaging/fraud-service/src/main/java/forge/fraud/FraudScorer.java +27 -0
  346. package/dist/packages/extractors/dialects/fixtures/quarkus-reactive-messaging/fraud-service/src/main/resources/application.properties +4 -0
  347. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/api.tf +38 -0
  348. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/main.tf +95 -0
  349. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/terraform.tfvars +1 -0
  350. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/variables.tf +4 -0
  351. package/dist/packages/extractors/dialects/fixtures/terraform-azure/forge-azure-infra/main.tf +102 -0
  352. package/dist/packages/extractors/dialects/fixtures/terraform-gcp/forge-gcp-infra/main.tf +51 -0
  353. package/dist/packages/extractors/dialects/harness.yaml +101 -0
  354. package/dist/packages/extractors/dialects/jaxrs.yaml +155 -0
  355. package/dist/packages/extractors/dialects/micronaut.yaml +207 -0
  356. package/dist/packages/extractors/dialects/quarkus-reactive-messaging.yaml +158 -0
  357. package/dist/packages/extractors/dialects/tekton.yaml +71 -0
  358. package/dist/packages/extractors/dialects/terraform-aws.yaml +267 -0
  359. package/dist/packages/extractors/dialects/terraform-azure.yaml +212 -0
  360. package/dist/packages/extractors/dialects/terraform-gcp.yaml +109 -0
  361. package/dist/packages/extractors/grammars/README.md +11 -0
  362. package/dist/packages/extractors/grammars/tree-sitter-groovy.LICENSE +21 -0
  363. package/dist/packages/extractors/grammars/tree-sitter-groovy.wasm +0 -0
  364. package/dist/packages/extractors/grammars/vendored.json +11 -0
  365. package/dist/packages/learn/lessons/architect-diagrams-and-code.yaml +69 -0
  366. package/dist/packages/learn/lessons/business-analyst-story-bar.yaml +94 -0
  367. package/dist/packages/learn/lessons/delivery-lead-release-readiness.yaml +44 -0
  368. package/dist/packages/learn/lessons/designer-features-in-user-words.yaml +57 -0
  369. package/dist/packages/learn/lessons/developer-find-your-way.yaml +60 -0
  370. package/dist/packages/learn/lessons/everyone-first-hour.yaml +74 -0
  371. package/dist/packages/learn/lessons/platform-lead-coverage-and-defences.yaml +58 -0
  372. package/dist/packages/learn/lessons/product-owner-first-change.yaml +167 -0
  373. package/dist/packages/learn/lessons/qa-tests-and-trace.yaml +53 -0
  374. package/dist/packages/learn/lessons/team-lead-initiative.yaml +146 -0
  375. package/dist/packages/naysayer/constitution/constitution.yaml +286 -0
  376. package/dist/packages/naysayer/starter/review.yaml +256 -0
  377. package/dist/packages/sdk/npm/index.js +8892 -0
  378. package/dist/packages/speckit/rules/drift.yaml +78 -0
  379. package/dist/packages/taskrun/rules/conform.yaml +38 -0
  380. package/dist/packages/testgen/rules/trace.yaml +49 -0
  381. package/dist/packages/ui/dist/assets/elk-api-tma0MCuh.js +2 -0
  382. package/dist/packages/ui/dist/assets/elk-worker.min--dAJroGl.js +6401 -0
  383. package/dist/packages/ui/dist/assets/elk-worker.min-DdYmS5kP.js +2 -0
  384. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-400-normal-BTotfTJu.woff +0 -0
  385. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-400-normal-DZqxrq2p.woff2 +0 -0
  386. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-500-normal-ByOcLdNv.woff +0 -0
  387. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-500-normal-CocWQlwt.woff2 +0 -0
  388. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-600-normal-71GNu3SW.woff2 +0 -0
  389. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-600-normal-BGq0mW3O.woff +0 -0
  390. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-400-normal-Dsrv2Tcn.woff +0 -0
  391. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-400-normal-g30qAdWV.woff2 +0 -0
  392. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-500-normal-Cs5J6C77.woff2 +0 -0
  393. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-500-normal-DB5PtV2g.woff +0 -0
  394. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-600-normal-Bz0x94Yp.woff +0 -0
  395. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-600-normal-DUMzJB7m.woff2 +0 -0
  396. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-400-normal-D9ESIMu3.woff +0 -0
  397. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-400-normal-_efipK4i.woff2 +0 -0
  398. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-500-normal-CuWXN6rf.woff +0 -0
  399. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-500-normal-JMMifIXV.woff2 +0 -0
  400. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-600-normal-D-CqTdkO.woff +0 -0
  401. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-600-normal-DzTrcv_p.woff2 +0 -0
  402. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
  403. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
  404. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
  405. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
  406. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
  407. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
  408. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-400-normal-C5H60-Va.woff2 +0 -0
  409. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-400-normal-RBey6euL.woff +0 -0
  410. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-500-normal-D0aIdm-b.woff +0 -0
  411. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-500-normal-DakdToA3.woff2 +0 -0
  412. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-600-normal-DIrixKbi.woff +0 -0
  413. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-600-normal-DOrvGEcy.woff2 +0 -0
  414. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-400-normal-DG4YqDda.woff2 +0 -0
  415. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-400-normal-fK1oJ5dG.woff +0 -0
  416. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-500-normal-BEb3_waV.woff +0 -0
  417. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-500-normal-e4dixQRQ.woff2 +0 -0
  418. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-600-normal-DgdngZtN.woff +0 -0
  419. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-600-normal-DpPYBSTl.woff2 +0 -0
  420. package/dist/packages/ui/dist/assets/index-B54fm9FQ.js +29 -0
  421. package/dist/packages/ui/dist/assets/index-DD_hufQz.css +1 -0
  422. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  423. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  424. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff +0 -0
  425. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2 +0 -0
  426. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  427. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  428. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff +0 -0
  429. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2 +0 -0
  430. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  431. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  432. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  433. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  434. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  435. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  436. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2 +0 -0
  437. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff +0 -0
  438. package/dist/packages/ui/dist/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  439. package/dist/packages/ui/dist/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff +0 -0
  440. package/dist/packages/ui/dist/assets/rajdhani-devanagari-600-normal-BtY48IV_.woff +0 -0
  441. package/dist/packages/ui/dist/assets/rajdhani-devanagari-600-normal-DhS7ScYx.woff2 +0 -0
  442. package/dist/packages/ui/dist/assets/rajdhani-devanagari-700-normal-BQQOj9BB.woff2 +0 -0
  443. package/dist/packages/ui/dist/assets/rajdhani-devanagari-700-normal-DBRwWuxA.woff +0 -0
  444. package/dist/packages/ui/dist/assets/rajdhani-latin-600-normal-CXCVEoA9.woff2 +0 -0
  445. package/dist/packages/ui/dist/assets/rajdhani-latin-600-normal-Dx02qI2_.woff +0 -0
  446. package/dist/packages/ui/dist/assets/rajdhani-latin-700-normal-BPDUZo87.woff2 +0 -0
  447. package/dist/packages/ui/dist/assets/rajdhani-latin-700-normal-e0Uj8ZlN.woff +0 -0
  448. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-600-normal-BleIgkPp.woff +0 -0
  449. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-600-normal-C9ZjJQAt.woff2 +0 -0
  450. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-700-normal-BPaQ7tlD.woff +0 -0
  451. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-700-normal-S6aYESQK.woff2 +0 -0
  452. package/dist/packages/ui/dist/favicon.svg +1 -0
  453. package/dist/packages/ui/dist/index.html +15 -0
  454. package/dist/third-party.json +575 -0
  455. package/dist/vendor/@fission-ai/openspec/bin/openspec.js +85986 -0
  456. package/dist/vendor/@fission-ai/openspec/package.json +82 -0
  457. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/schema.yaml +248 -0
  458. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/design.md +21 -0
  459. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/proposal.md +34 -0
  460. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/spec.md +13 -0
  461. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/tasks.md +11 -0
  462. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-c_sharp.wasm +0 -0
  463. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-go.wasm +0 -0
  464. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-java.wasm +0 -0
  465. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-javascript.wasm +0 -0
  466. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-kotlin.wasm +0 -0
  467. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-php.wasm +0 -0
  468. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-python.wasm +0 -0
  469. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-ruby.wasm +0 -0
  470. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-rust.wasm +0 -0
  471. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-scala.wasm +0 -0
  472. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-tsx.wasm +0 -0
  473. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-typescript.wasm +0 -0
  474. package/dist/vendor/web-tree-sitter/tree-sitter.wasm +0 -0
  475. package/package.json +36 -3
@@ -0,0 +1,230 @@
1
+ import { createRequire as __atticusCreateRequire } from "node:module";
2
+ import { fileURLToPath as __atticusFileURLToPath } from "node:url";
3
+ var require = __atticusCreateRequire(import.meta.url);
4
+ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
+ var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
+ import {
7
+ renderTaskContext,
8
+ taskContext
9
+ } from "./chunk-CKSITVS4.js";
10
+ import "./chunk-L6SGQIR3.js";
11
+ import "./chunk-3HI6Z55Y.js";
12
+ import {
13
+ changeFolder,
14
+ changeStore
15
+ } from "./chunk-XY3P7JW7.js";
16
+ import "./chunk-4AK7IBVP.js";
17
+ import "./chunk-7JUKDRSZ.js";
18
+ import "./chunk-27NKUS3X.js";
19
+ import "./chunk-L24C55VN.js";
20
+ import "./chunk-PAMPPUR6.js";
21
+ import {
22
+ attachToChange
23
+ } from "./chunk-23W7VWKR.js";
24
+ import "./chunk-7EKXJZ2Y.js";
25
+ import "./chunk-MC3H7736.js";
26
+ import "./chunk-T6AIP7H5.js";
27
+ import "./chunk-EFHQ3TWP.js";
28
+ import "./chunk-GQ4N4WKF.js";
29
+ import "./chunk-CNUKCS2T.js";
30
+ import {
31
+ changesRelOf,
32
+ inputsDirOf
33
+ } from "./chunk-S2A7YC3Q.js";
34
+ import "./chunk-D3PO4DOZ.js";
35
+ import "./chunk-TV45EUGM.js";
36
+
37
+ // packages/cli/dist/attach-commands.js
38
+ import { createHash } from "node:crypto";
39
+ import { readdir, readFile } from "node:fs/promises";
40
+ import { basename, join, relative, resolve, sep } from "node:path";
41
+ var sha256 = (b) => createHash("sha256").update(b).digest("hex");
42
+ async function filesUnder(dir) {
43
+ const out = [];
44
+ const walk = async (d) => {
45
+ for (const e of await readdir(d, { withFileTypes: true }).catch(() => []))
46
+ if (e.isDirectory())
47
+ await walk(join(d, e.name));
48
+ else if (e.isFile())
49
+ out.push(join(d, e.name));
50
+ };
51
+ await walk(dir);
52
+ return out;
53
+ }
54
+ async function metarepoInputs(root) {
55
+ const out = /* @__PURE__ */ new Map();
56
+ for (const f of await filesUnder(inputsDirOf(root)))
57
+ out.set(sha256(new Uint8Array(await readFile(f))), relative(root, f).split(sep).join("/"));
58
+ return out;
59
+ }
60
+ var AttachError = class extends Error {
61
+ code;
62
+ constructor(code, message) {
63
+ super(message);
64
+ this.code = code;
65
+ this.name = "AttachError";
66
+ }
67
+ };
68
+ async function attachFiles(root, change, files, by, now = /* @__PURE__ */ new Date(), replaces) {
69
+ const c = await changeStore(root).read(change).catch(() => {
70
+ throw new AttachError("not-found", `There is no change ${change}: atticus change list shows them.`);
71
+ });
72
+ const known = await metarepoInputs(root);
73
+ return attachToChange(changeFolder(root, c.id), files, {
74
+ by,
75
+ at: now.toISOString().replace(/\.\d{3}Z$/, "Z"),
76
+ elsewhere: (h) => known.get(h),
77
+ ...replaces ? { replaces } : {}
78
+ });
79
+ }
80
+ async function promoteChangeInput(root, change, file) {
81
+ const c = await changeStore(root).read(change).catch(() => {
82
+ throw new AttachError("not-found", `There is no change ${change}: atticus change list shows them.`);
83
+ });
84
+ const name = file.replace(/^inputs\//, "");
85
+ if (!name || /[\\/]/.test(name) || name === "." || name === "..")
86
+ throw new AttachError("invalid", `Name one attached file, such as inputs/${basename(file) || "rules.pdf"}.`);
87
+ let bytes;
88
+ try {
89
+ bytes = new Uint8Array(await readFile(join(changeFolder(root, c.id), "inputs", name)));
90
+ } catch {
91
+ throw new AttachError("not-found", `inputs/${name} isn't attached to ${c.id}: atticus change attach ${c.id} adds it.`);
92
+ }
93
+ const { addToInbox } = await import("./chunk-W3BQAZ3Q.js");
94
+ const r = await addToInbox(root, [{ name, bytes }]);
95
+ const added = r.added[0];
96
+ if (!added)
97
+ throw new AttachError("invalid", `inputs/${name}: ${r.refused[0]?.why ?? "refused"}`);
98
+ return {
99
+ path: added.path,
100
+ note: `Copied to ${added.path}: general knowledge, read at the next atticus sources sync. ${c.id} keeps its copy. Commit both through a pull request.`
101
+ };
102
+ }
103
+ function attachedLine(rel, a) {
104
+ const what = a.read === "text" ? `${a.kind}, ${a.format}; read, cited by ${a.citeBy}` : a.kind === "image" ? "a picture: your assistant looks at it in the chat; Atticus doesn't read pictures" : `${a.format}: no reader takes it, so the steps name it without its text`;
105
+ return `Attached ${rel}/${a.path} (${what})${a.supersedes ? `, a newer version of ${a.supersedes}` : ""}${a.defences ? `; the defences found ${a.defences.risk} risk` : ""}.`;
106
+ }
107
+ async function changeAttachCli(root, change, paths, o, io) {
108
+ if (change && o.prototype) {
109
+ if (paths.length) {
110
+ const { PROTOTYPE_CLI_WORDS } = await import("./chunk-Q4D5X7QB.js");
111
+ io.err(PROTOTYPE_CLI_WORDS.usage(change, o.prototype));
112
+ return 2;
113
+ }
114
+ const { attachPrototype } = await import("./chunk-Q4D5X7QB.js");
115
+ return attachPrototype(root, change, o.prototype, { by: o.by, ...o.json ? { json: true } : {}, ...o.now ? { now: o.now } : {} }, io);
116
+ }
117
+ if (change && o.like) {
118
+ if (paths.length) {
119
+ io.err("--like names an archived change, attached on its own: atticus change attach add-refund-window --like raise-transfer-limit");
120
+ return 2;
121
+ }
122
+ const { attachPastChange, findPastChange } = await import("./chunk-HVUPKCGJ.js");
123
+ const folder = await findPastChange(root, o.like);
124
+ if (!folder) {
125
+ io.err(`There is no archived change ${o.like}: atticus change similar "<what it is about>" lists them.`);
126
+ return 1;
127
+ }
128
+ try {
129
+ const name = await attachPastChange(root, change, folder, o.by, o.now);
130
+ io.out(`Attached ${folder} as inputs/${name}: the change's steps read it as an example.`);
131
+ return 0;
132
+ } catch (e) {
133
+ if (e instanceof AttachError) {
134
+ io.err(e.message);
135
+ return 1;
136
+ }
137
+ throw e;
138
+ }
139
+ }
140
+ if (change && o.promote) {
141
+ if (paths.length) {
142
+ io.err("--promote names one file already attached; attach new files without it, for example: atticus change attach add-refund-window --promote inputs/refund-rules.pdf");
143
+ return 2;
144
+ }
145
+ try {
146
+ const r2 = await promoteChangeInput(root, change, o.promote);
147
+ if (o.json)
148
+ io.out(JSON.stringify(r2, null, 2));
149
+ else
150
+ io.out(r2.note);
151
+ return 0;
152
+ } catch (e) {
153
+ if (e instanceof AttachError) {
154
+ io.err(e.message);
155
+ return 1;
156
+ }
157
+ throw e;
158
+ }
159
+ }
160
+ if (!change || paths.length === 0) {
161
+ io.err("Usage: atticus change attach <change> <files...>, for example: atticus change attach add-refund-window refund-rules.pdf");
162
+ return 2;
163
+ }
164
+ if (o.replaces && paths.length !== 1) {
165
+ io.err("--replaces names the one attached file that the file given replaces: attach one file with it, for example: atticus change attach add-refund-window refund-rules-v2.pdf --replaces inputs/refund-rules-v1.pdf");
166
+ return 2;
167
+ }
168
+ const files = [];
169
+ let problems = false;
170
+ for (const p of paths) {
171
+ try {
172
+ files.push({ name: basename(p), bytes: new Uint8Array(await readFile(resolve(p))) });
173
+ } catch {
174
+ io.err(`Can't read ${p}.`);
175
+ problems = true;
176
+ }
177
+ }
178
+ let r;
179
+ try {
180
+ r = await attachFiles(root, change, files, o.by, o.now, o.replaces);
181
+ } catch (e) {
182
+ if (e instanceof AttachError) {
183
+ io.err(e.message);
184
+ return 1;
185
+ }
186
+ throw e;
187
+ }
188
+ if (o.json) {
189
+ io.out(JSON.stringify(r, null, 2));
190
+ return r.refused.length || problems ? 1 : 0;
191
+ }
192
+ const rel = `${changesRelOf(root)}/${change}`;
193
+ for (const a of r.added)
194
+ io.out(attachedLine(rel, a));
195
+ for (const x of r.refused)
196
+ io.err(`${x.name}: not attached. ${x.why}`);
197
+ for (const n of r.notes)
198
+ io.out(n);
199
+ if (r.added.length)
200
+ io.out(`The change's steps read them as data, citing each by file and line or page: atticus next says which step is next. Commit ${rel}/inputs/ with the change.`);
201
+ return r.refused.length || problems ? 1 : 0;
202
+ }
203
+ async function taskContextCli(root, change, task, o, io) {
204
+ if (!change || !task) {
205
+ io.err("Usage: atticus task context <change> <task> [--json|--markdown], for example: atticus task context add-refund-window 1.2");
206
+ return 2;
207
+ }
208
+ try {
209
+ const command = `atticus task context ${change} ${task}`;
210
+ const c = await taskContext(root, change, task, {
211
+ ask: { command, rerun: command, at: (o.now ?? /* @__PURE__ */ new Date()).toISOString() }
212
+ });
213
+ io.out(o.json && !o.markdown ? JSON.stringify(c, null, 2) : renderTaskContext(c).trimEnd());
214
+ return 0;
215
+ } catch (e) {
216
+ if (e instanceof Error && ["PlannerError", "ChangeError", "ChangeFileError"].includes(e.name)) {
217
+ io.err(e.message);
218
+ return 1;
219
+ }
220
+ throw e;
221
+ }
222
+ }
223
+ export {
224
+ AttachError,
225
+ attachFiles,
226
+ attachedLine,
227
+ changeAttachCli,
228
+ promoteChangeInput,
229
+ taskContextCli
230
+ };
@@ -0,0 +1,38 @@
1
+ import { createRequire as __atticusCreateRequire } from "node:module";
2
+ import { fileURLToPath as __atticusFileURLToPath } from "node:url";
3
+ var require = __atticusCreateRequire(import.meta.url);
4
+ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
+ var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
+ import {
7
+ changeEstimateCommand,
8
+ estimateOf
9
+ } from "./chunk-FHH4I4ZV.js";
10
+ import "./chunk-TDD55CJH.js";
11
+ import "./chunk-BOHJZTEQ.js";
12
+ import "./chunk-MVZVGYXH.js";
13
+ import "./chunk-FITWGOJ2.js";
14
+ import "./chunk-2ANOROX3.js";
15
+ import "./chunk-65NYPGRC.js";
16
+ import "./chunk-CKSITVS4.js";
17
+ import "./chunk-L6SGQIR3.js";
18
+ import "./chunk-3HI6Z55Y.js";
19
+ import "./chunk-XY3P7JW7.js";
20
+ import "./chunk-4AK7IBVP.js";
21
+ import "./chunk-7JUKDRSZ.js";
22
+ import "./chunk-27NKUS3X.js";
23
+ import "./chunk-L24C55VN.js";
24
+ import "./chunk-PAMPPUR6.js";
25
+ import "./chunk-23W7VWKR.js";
26
+ import "./chunk-7EKXJZ2Y.js";
27
+ import "./chunk-MC3H7736.js";
28
+ import "./chunk-T6AIP7H5.js";
29
+ import "./chunk-EFHQ3TWP.js";
30
+ import "./chunk-GQ4N4WKF.js";
31
+ import "./chunk-CNUKCS2T.js";
32
+ import "./chunk-S2A7YC3Q.js";
33
+ import "./chunk-D3PO4DOZ.js";
34
+ import "./chunk-TV45EUGM.js";
35
+ export {
36
+ changeEstimateCommand,
37
+ estimateOf
38
+ };
@@ -0,0 +1,182 @@
1
+ import { createRequire as __atticusCreateRequire } from "node:module";
2
+ import { fileURLToPath as __atticusFileURLToPath } from "node:url";
3
+ var require = __atticusCreateRequire(import.meta.url);
4
+ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
+ var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
+ import {
7
+ runPluginTests
8
+ } from "./chunk-27NKUS3X.js";
9
+ import "./chunk-L24C55VN.js";
10
+ import "./chunk-PAMPPUR6.js";
11
+ import "./chunk-23W7VWKR.js";
12
+ import "./chunk-7EKXJZ2Y.js";
13
+ import "./chunk-MC3H7736.js";
14
+ import "./chunk-EFHQ3TWP.js";
15
+ import {
16
+ pluginEntryHash,
17
+ runTranslator
18
+ } from "./chunk-GQ4N4WKF.js";
19
+ import {
20
+ SHIPPED_MODEL_PROVIDER_PLUGINS
21
+ } from "./chunk-YEDDOYSC.js";
22
+ import "./chunk-CNUKCS2T.js";
23
+ import {
24
+ ModelProviderPlugin,
25
+ ScannerPlugin,
26
+ orgPackDirOf,
27
+ require_dist
28
+ } from "./chunk-S2A7YC3Q.js";
29
+ import "./chunk-D3PO4DOZ.js";
30
+ import {
31
+ __toESM
32
+ } from "./chunk-TV45EUGM.js";
33
+
34
+ // packages/cli/dist/plugin-commands.js
35
+ var import_yaml = __toESM(require_dist(), 1);
36
+ import { existsSync } from "node:fs";
37
+ import { mkdir, readdir, readFile, writeFile } from "node:fs/promises";
38
+ import { dirname, join } from "node:path";
39
+ import { isDeepStrictEqual } from "node:util";
40
+ var plural = (n, word) => `${n} ${word}${n === 1 ? "" : "s"}`;
41
+ var MODEL_PROVIDERS = "model-providers";
42
+ async function folders(dir) {
43
+ return (await readdir(dir, { withFileTypes: true }).catch(() => [])).filter((e) => e.isDirectory()).map((e) => e.name);
44
+ }
45
+ async function load(root, id, io) {
46
+ const plugins = join(orgPackDirOf(root), "plugins");
47
+ const asModel = join(plugins, MODEL_PROVIDERS, id);
48
+ const kind = id !== MODEL_PROVIDERS && existsSync(join(plugins, id, "plugin.yaml")) ? "scanner" : existsSync(join(asModel, "plugin.yaml")) ? "model-provider" : void 0;
49
+ if (!kind) {
50
+ const known = [
51
+ ...(await folders(plugins)).filter((n) => n !== MODEL_PROVIDERS),
52
+ ...await folders(join(plugins, MODEL_PROVIDERS))
53
+ ].sort();
54
+ io.err(`No plugin ${id} in org-pack/plugins/ or org-pack/plugins/${MODEL_PROVIDERS}/. ${known.length ? `Plugins here: ${known.join(", ")}` : "This org pack has no plugins yet."}`);
55
+ return void 0;
56
+ }
57
+ const dir = kind === "scanner" ? join(plugins, id) : asModel;
58
+ const rel = kind === "scanner" ? `plugins/${id}` : `plugins/${MODEL_PROVIDERS}/${id}`;
59
+ const file = join(dir, "plugin.yaml");
60
+ let data;
61
+ try {
62
+ data = (0, import_yaml.parse)(await readFile(file, "utf8"));
63
+ } catch (e) {
64
+ io.err(`org-pack/${rel}/plugin.yaml isn't valid YAML: ${e.message}`);
65
+ return void 0;
66
+ }
67
+ const r = kind === "scanner" ? ScannerPlugin.safeParse(data) : ModelProviderPlugin.safeParse(data);
68
+ if (!r.success) {
69
+ io.err(`org-pack/${rel}/plugin.yaml isn't a valid plugin manifest (contract C6):`);
70
+ for (const i of r.error.issues)
71
+ io.err(` ${i.path.length ? `${i.path.map(String).join(".")}: ` : ""}${i.message}`);
72
+ return void 0;
73
+ }
74
+ if (r.data.id !== id) {
75
+ io.err(`org-pack/${rel}/plugin.yaml is for ${r.data.id}; keep it in a folder of that name`);
76
+ return void 0;
77
+ }
78
+ let source;
79
+ try {
80
+ source = await readFile(join(dir, ...r.data.entry.split("/")), "utf8");
81
+ } catch {
82
+ io.err(`Can't read the entry file org-pack/${rel}/${r.data.entry}.`);
83
+ return void 0;
84
+ }
85
+ return kind === "scanner" ? { kind, dir, file, rel, source, manifest: r.data } : { kind, dir, file, rel, source, manifest: r.data };
86
+ }
87
+ async function modelProviderTests(p) {
88
+ const code = {
89
+ id: p.manifest.id,
90
+ version: p.manifest.version,
91
+ source: p.source,
92
+ entry: p.manifest.entry,
93
+ limits: p.manifest.limits
94
+ };
95
+ const out = [];
96
+ for (const name of (await folders(join(p.dir, "test"))).sort()) {
97
+ const at = join(p.dir, "test", name);
98
+ const failures = [];
99
+ for (const [fn, given, wanted] of [
100
+ ["request", "request.json", "expected-request.json"],
101
+ ["response", "answer.json", "expected-answer.json"]
102
+ ]) {
103
+ if (!existsSync(join(at, given)))
104
+ continue;
105
+ try {
106
+ const arg = JSON.parse(await readFile(join(at, given), "utf8"));
107
+ const expected = JSON.parse(await readFile(join(at, wanted), "utf8"));
108
+ const got = await runTranslator(code, fn, arg);
109
+ if (!isDeepStrictEqual(got, expected))
110
+ failures.push(`${fn} gave ${JSON.stringify(got)}, but ${wanted} says ${JSON.stringify(expected)}`);
111
+ } catch (e) {
112
+ failures.push(`${fn}: ${e.message}`);
113
+ }
114
+ }
115
+ out.push({ name, failures });
116
+ }
117
+ return out;
118
+ }
119
+ async function pluginTest(root, id, io) {
120
+ const p = await load(root, id, io);
121
+ if (!p)
122
+ return 1;
123
+ const results = p.kind === "scanner" ? await runPluginTests(p.dir, p.manifest, p.source) : await modelProviderTests(p);
124
+ io.out(`Testing plugin ${p.manifest.id} ${p.manifest.version}: ${plural(results.length, "test")}`);
125
+ if (results.length === 0) {
126
+ io.out(p.kind === "scanner" ? `No tests. Add test/<case>/repo/ and test/<case>/expected.yaml under org-pack/${p.rel}/; the scan won't use a plugin without them.` : `No tests. Add test/<case>/request.json with expected-request.json, and answer.json with expected-answer.json, under org-pack/${p.rel}/.`);
127
+ return 1;
128
+ }
129
+ for (const r of results) {
130
+ io.out(` ${r.failures.length === 0 ? "pass" : "FAIL"} ${r.name}`);
131
+ for (const f of r.failures)
132
+ io.out(` ${f}`);
133
+ }
134
+ const hash = pluginEntryHash(p.source);
135
+ const user = p.kind === "scanner" ? "the scan" : "model mode";
136
+ const pin = !p.manifest.sha256 ? `It isn't pinned: once it is reviewed, run atticus plugin pin ${id}.` : p.manifest.sha256 === hash ? `The pin matches ${p.manifest.entry}.` : `${p.manifest.entry} changed since it was pinned: ${user} won't use it until it is reviewed and pinned again.`;
137
+ const failed = results.filter((r) => r.failures.length > 0).length;
138
+ if (failed === 0) {
139
+ io.out(`${plural(results.length, "test")} passed. ${pin}`);
140
+ return 0;
141
+ }
142
+ io.out(`${failed} of ${plural(results.length, "test")} failed. ${pin}`);
143
+ return 1;
144
+ }
145
+ async function pluginPin(root, id, io) {
146
+ const p = await load(root, id, io);
147
+ if (!p)
148
+ return 1;
149
+ const hash = pluginEntryHash(p.source);
150
+ const doc = (0, import_yaml.parseDocument)(await readFile(p.file, "utf8"));
151
+ doc.set("sha256", hash);
152
+ await writeFile(p.file, doc.toString({ flowCollectionPadding: false }), "utf8");
153
+ io.out(`Pinned ${p.manifest.id} ${p.manifest.version}: ${p.manifest.entry} has sha256 ${hash}.`);
154
+ io.out("Commit plugin.yaml with the code, in the same reviewed change.");
155
+ return 0;
156
+ }
157
+ async function pluginAdd(root, id, io) {
158
+ const files = SHIPPED_MODEL_PROVIDER_PLUGINS[id];
159
+ if (!files) {
160
+ io.err(`Atticus ships no plugin called ${id}. It ships: ${Object.keys(SHIPPED_MODEL_PROVIDER_PLUGINS).sort().join(", ")}.`);
161
+ return 2;
162
+ }
163
+ const dir = join(orgPackDirOf(root), "plugins", MODEL_PROVIDERS, id);
164
+ if (existsSync(dir)) {
165
+ io.err(`org-pack/plugins/${MODEL_PROVIDERS}/${id}/ is already there; Atticus leaves it as it is.`);
166
+ return 1;
167
+ }
168
+ for (const [path, text] of Object.entries(files)) {
169
+ const to = join(dir, ...path.split("/"));
170
+ await mkdir(dirname(to), { recursive: true });
171
+ await writeFile(to, text, "utf8");
172
+ }
173
+ io.out(`Added the ${id} model-provider plugin in org-pack/plugins/${MODEL_PROVIDERS}/${id}/.`);
174
+ io.out(`Review index.js: it only builds each request and reads each answer; Atticus makes the call, to the hosts plugin.yaml names, and adds the key itself.`);
175
+ io.out(`Then run atticus plugin test ${id}, atticus plugin pin ${id}, and commit the folder through a pull request. Choose it as the model provider on Set up \u203A AI (adapters.model.type: ${id}).`);
176
+ return 0;
177
+ }
178
+ export {
179
+ pluginAdd,
180
+ pluginPin,
181
+ pluginTest
182
+ };
@@ -0,0 +1,31 @@
1
+ import { createRequire as __atticusCreateRequire } from "node:module";
2
+ import { fileURLToPath as __atticusFileURLToPath } from "node:url";
3
+ var require = __atticusCreateRequire(import.meta.url);
4
+ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
+ var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
+ import {
7
+ baseClonePath
8
+ } from "./chunk-EFHQ3TWP.js";
9
+ import {
10
+ loadOrgPack,
11
+ orgPackDirOf
12
+ } from "./chunk-S2A7YC3Q.js";
13
+
14
+ // packages/cli/dist/repo-for.js
15
+ import { stat } from "node:fs/promises";
16
+ import { basename, resolve } from "node:path";
17
+ var isDir = async (p) => !!(await stat(p).catch(() => void 0))?.isDirectory();
18
+ async function repoFor(root, target) {
19
+ const op = await loadOrgPack(orgPackDirOf(root));
20
+ const known = op.profiles.flatMap((p) => p.repos?.repos ?? []).find((r) => r.id === target);
21
+ if (known) {
22
+ const dir2 = baseClonePath(root, known.id);
23
+ return await isDir(dir2) ? { id: known.id, dir: dir2 } : void 0;
24
+ }
25
+ const dir = resolve(target);
26
+ return await isDir(dir) ? { id: basename(dir), dir } : void 0;
27
+ }
28
+
29
+ export {
30
+ repoFor
31
+ };
@@ -0,0 +1,76 @@
1
+ import { createRequire as __atticusCreateRequire } from "node:module";
2
+ import { fileURLToPath as __atticusFileURLToPath } from "node:url";
3
+ var require = __atticusCreateRequire(import.meta.url);
4
+ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
+ var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
+ import {
7
+ GitError,
8
+ IGNORED,
9
+ WORKSPACE_DIR,
10
+ WorkspaceFileError,
11
+ baseClonePath,
12
+ branchCheckoutPath,
13
+ branchSlug,
14
+ changeDir,
15
+ changeReposPath,
16
+ changeWorktreesDir,
17
+ changedFiles,
18
+ changesSince,
19
+ checkoutState,
20
+ createGit,
21
+ createWorkspace,
22
+ ensureGitignore,
23
+ gitUser,
24
+ intellijProject,
25
+ intellijProjectPath,
26
+ isInPlace,
27
+ loadManifest,
28
+ loadRepos,
29
+ readChangeRepos,
30
+ remoteDefaultBranch,
31
+ removeEditorWorkspaces,
32
+ toHandle,
33
+ toRepoRelative,
34
+ vscodeWorkspace,
35
+ vscodeWorkspacePath,
36
+ worktreePath,
37
+ writeChangeRepos,
38
+ writeEditorWorkspaces
39
+ } from "./chunk-EFHQ3TWP.js";
40
+ import "./chunk-S2A7YC3Q.js";
41
+ import "./chunk-D3PO4DOZ.js";
42
+ import "./chunk-TV45EUGM.js";
43
+ export {
44
+ GitError,
45
+ IGNORED,
46
+ WORKSPACE_DIR,
47
+ WorkspaceFileError,
48
+ baseClonePath,
49
+ branchCheckoutPath,
50
+ branchSlug,
51
+ changeDir,
52
+ changeReposPath,
53
+ changeWorktreesDir,
54
+ changedFiles,
55
+ changesSince,
56
+ checkoutState,
57
+ createGit,
58
+ createWorkspace,
59
+ ensureGitignore,
60
+ gitUser,
61
+ intellijProject,
62
+ intellijProjectPath,
63
+ isInPlace,
64
+ loadManifest,
65
+ loadRepos,
66
+ readChangeRepos,
67
+ remoteDefaultBranch,
68
+ removeEditorWorkspaces,
69
+ toHandle,
70
+ toRepoRelative,
71
+ vscodeWorkspace,
72
+ vscodeWorkspacePath,
73
+ worktreePath,
74
+ writeChangeRepos,
75
+ writeEditorWorkspaces
76
+ };
@@ -0,0 +1,102 @@
1
+ import { createRequire as __atticusCreateRequire } from "node:module";
2
+ import { fileURLToPath as __atticusFileURLToPath } from "node:url";
3
+ var require = __atticusCreateRequire(import.meta.url);
4
+ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
+ var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
+ import {
7
+ INPUTS_SOURCE_ID
8
+ } from "./chunk-ABWHYWNI.js";
9
+ import {
10
+ readCatalog
11
+ } from "./chunk-27NKUS3X.js";
12
+ import {
13
+ readKnowledge,
14
+ readSnapshot
15
+ } from "./chunk-L24C55VN.js";
16
+ import "./chunk-PAMPPUR6.js";
17
+ import {
18
+ scanInputs
19
+ } from "./chunk-23W7VWKR.js";
20
+ import "./chunk-7EKXJZ2Y.js";
21
+ import "./chunk-MC3H7736.js";
22
+ import "./chunk-EFHQ3TWP.js";
23
+ import "./chunk-GQ4N4WKF.js";
24
+ import "./chunk-CNUKCS2T.js";
25
+ import {
26
+ catalogDirOf,
27
+ inputsDirOf,
28
+ knowledgeRelOf,
29
+ loadOrgPack,
30
+ orgPackDirOf
31
+ } from "./chunk-S2A7YC3Q.js";
32
+ import "./chunk-D3PO4DOZ.js";
33
+ import "./chunk-TV45EUGM.js";
34
+
35
+ // packages/cli/dist/documents.js
36
+ import { stat } from "node:fs/promises";
37
+ import { join } from "node:path";
38
+ var titleOf = (r) => "title" in r && typeof r.title === "string" && r.title || "name" in r && typeof r.name === "string" && r.name || r.id;
39
+ async function listDocuments(root) {
40
+ const dir = inputsDirOf(root);
41
+ const commands = [
42
+ `atticus sources sync --source ${INPUTS_SOURCE_ID}`,
43
+ `atticus knowledge scan --source ${INPUTS_SOURCE_ID}`
44
+ ];
45
+ const there = await stat(dir).then((s) => s.isDirectory(), () => false);
46
+ if (!there)
47
+ return { documents: [], snapshot: null, commands };
48
+ const op = await loadOrgPack(orgPackDirOf(root));
49
+ const records = [];
50
+ for (const part of ["generated", "curated"])
51
+ records.push(...await readCatalog(join(catalogDirOf(root), part), { cacheRoot: root }).then((c) => c.records, () => []));
52
+ const intake = await scanInputs({
53
+ root,
54
+ orgPack: op,
55
+ inputsDir: dir,
56
+ records,
57
+ scannedAt: "1970-01-01T00:00:00Z"
58
+ });
59
+ const byId = new Map(intake.documents.filter((d) => d.id).map((d) => [d.id, d.path]));
60
+ const snap = await readSnapshot(root, INPUTS_SOURCE_ID).catch(() => void 0);
61
+ const read = new Set(snap?.manifest.pages.map((p) => `inputs/${p.page}`) ?? []);
62
+ const skipped = new Map(snap?.manifest.skipped.map((s) => [s.page, s.reason]) ?? []);
63
+ const fileOf = new Map(snap?.manifest.pages.map((p) => [p.file, `inputs/${p.page}`]) ?? []);
64
+ const copy = new RegExp(`^${knowledgeRelOf(root).replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}/snapshots/${INPUTS_SOURCE_ID}/[^/]+/(.+)$`);
65
+ const k = await readKnowledge(root, { cacheRoot: root }).catch(() => void 0);
66
+ const itemsOf = /* @__PURE__ */ new Map();
67
+ for (const item of k?.items ?? []) {
68
+ const files = new Set(item.evidence.map((e) => e.path ? copy.exec(e.path)?.[1] : void 0).filter((f) => !!f).map((f) => fileOf.get(f)).filter((p) => !!p));
69
+ const review = k.reviews[item.id];
70
+ for (const f of files)
71
+ itemsOf.set(f, [
72
+ ...itemsOf.get(f) ?? [],
73
+ {
74
+ id: item.id,
75
+ title: titleOf(item),
76
+ verified: review?.state === "verified" || review?.state === "corrected"
77
+ }
78
+ ]);
79
+ }
80
+ const documents = [];
81
+ for (const d of [...intake.documents].sort((a, b) => a.path < b.path ? -1 : 1)) {
82
+ const at = await stat(join(dir, ...d.path.replace(/^inputs\//, "").split("/"))).catch(() => void 0);
83
+ const reason = skipped.get(d.path);
84
+ documents.push({
85
+ path: d.path,
86
+ kind: d.classification,
87
+ ...d.title ? { title: d.title } : {},
88
+ systems: d.systems,
89
+ state: read.has(d.path) ? "read" : reason ? "skipped" : "not-synced",
90
+ ...reason ? { reason } : {},
91
+ ...d.duplicateOf ? { duplicateOf: d.duplicateOf } : {},
92
+ ...d.supersededBy ? { supersededBy: byId.get(d.supersededBy) ?? d.supersededBy } : {},
93
+ inbox: d.path.startsWith("inputs/inbox/"),
94
+ ...at ? { modifiedAt: at.mtime.toISOString() } : {},
95
+ items: itemsOf.get(d.path) ?? []
96
+ });
97
+ }
98
+ return { documents, snapshot: snap ? { date: snap.manifest.date } : null, commands };
99
+ }
100
+ export {
101
+ listDocuments
102
+ };