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

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 (497) 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-23M2LUYM.js +55 -0
  6. package/dist/chunk-26PLPSQW.js +48 -0
  7. package/dist/chunk-2G4DFUWJ.js +43 -0
  8. package/dist/chunk-2HMWX4T6.js +226 -0
  9. package/dist/chunk-2KDSXJFJ.js +294 -0
  10. package/dist/chunk-2M6WXO73.js +38 -0
  11. package/dist/chunk-2RX7PI2Y.js +166 -0
  12. package/dist/chunk-2XM6PYQQ.js +199 -0
  13. package/dist/chunk-3G4YI4ZU.js +16 -0
  14. package/dist/chunk-3GTZ2OON.js +362 -0
  15. package/dist/chunk-3QAKDIEU.js +108 -0
  16. package/dist/chunk-47QE246J.js +6115 -0
  17. package/dist/chunk-4GZXS6S2.js +5401 -0
  18. package/dist/chunk-4PJADZRR.js +545 -0
  19. package/dist/chunk-4Q3NN7VF.js +32 -0
  20. package/dist/chunk-4QUQEBFT.js +143 -0
  21. package/dist/chunk-4SKZDI62.js +22 -0
  22. package/dist/chunk-4SVJNVEE.js +80 -0
  23. package/dist/chunk-52R2YXP5.js +80 -0
  24. package/dist/chunk-577AJVRS.js +44694 -0
  25. package/dist/chunk-5F3RJCHB.js +45 -0
  26. package/dist/chunk-5IALSMZ2.js +34 -0
  27. package/dist/chunk-5KTOPOEP.js +174 -0
  28. package/dist/chunk-5MI2SEV5.js +242 -0
  29. package/dist/chunk-5XDNUJ4P.js +2743 -0
  30. package/dist/chunk-5XN76FTF.js +22 -0
  31. package/dist/chunk-5YIBJXGB.js +2007 -0
  32. package/dist/chunk-62YMDXY6.js +38 -0
  33. package/dist/chunk-65C57N7P.js +116 -0
  34. package/dist/chunk-67J3VZBA.js +120 -0
  35. package/dist/chunk-6EDQE7GO.js +27809 -0
  36. package/dist/chunk-6GNS32SI.js +285 -0
  37. package/dist/chunk-6GWHKMQR.js +405 -0
  38. package/dist/chunk-6JLPXDWN.js +7923 -0
  39. package/dist/chunk-6TJCUYC5.js +22 -0
  40. package/dist/chunk-6VBXAGJX.js +234 -0
  41. package/dist/chunk-73VPWF5R.js +415 -0
  42. package/dist/chunk-76WKMA4J.js +14 -0
  43. package/dist/chunk-7DUDLVFJ.js +52 -0
  44. package/dist/chunk-7EFILTCI.js +67 -0
  45. package/dist/chunk-7EKESFWV.js +130 -0
  46. package/dist/chunk-7F2RUWPU.js +101 -0
  47. package/dist/chunk-7GB4ZRE2.js +378 -0
  48. package/dist/chunk-7TGYNOXD.js +189 -0
  49. package/dist/chunk-7UKVYFQ2.js +2078 -0
  50. package/dist/chunk-7URGP4DD.js +102 -0
  51. package/dist/chunk-7YYEKTYF.js +2522 -0
  52. package/dist/chunk-AJJK7GLO.js +252 -0
  53. package/dist/chunk-AKJTKMXU.js +25 -0
  54. package/dist/chunk-APSVL2AI.js +344 -0
  55. package/dist/chunk-AWECWW5Y.js +3206 -0
  56. package/dist/chunk-AY2IUF4K.js +5071 -0
  57. package/dist/chunk-B2VSVN4P.js +34 -0
  58. package/dist/chunk-B3O52AUQ.js +275 -0
  59. package/dist/chunk-B7434AE2.js +104 -0
  60. package/dist/chunk-BDEKREZH.js +155 -0
  61. package/dist/chunk-BJPMKJTL.js +1428 -0
  62. package/dist/chunk-BMCKL3VQ.js +324 -0
  63. package/dist/chunk-BMHGA7WD.js +25 -0
  64. package/dist/chunk-BUYJL3GJ.js +287 -0
  65. package/dist/chunk-BXIX7S7O.js +32 -0
  66. package/dist/chunk-CHC5FKTU.js +26 -0
  67. package/dist/chunk-CITDNDIZ.js +53 -0
  68. package/dist/chunk-CIUHAHM6.js +70 -0
  69. package/dist/chunk-CNKGYDMG.js +334 -0
  70. package/dist/chunk-CRE4BJHM.js +408 -0
  71. package/dist/chunk-D3PO4DOZ.js +261 -0
  72. package/dist/chunk-DAQBIK5G.js +47 -0
  73. package/dist/chunk-DDAHCPGA.js +212 -0
  74. package/dist/chunk-DPHCFZ7W.js +374 -0
  75. package/dist/chunk-DZRQDNPT.js +34 -0
  76. package/dist/chunk-E3JYO547.js +46 -0
  77. package/dist/chunk-E3Z67HRK.js +104 -0
  78. package/dist/chunk-EADP3PEN.js +450 -0
  79. package/dist/chunk-EX6ZXS5K.js +169 -0
  80. package/dist/chunk-EZIUFEN6.js +27 -0
  81. package/dist/chunk-F2FOQLJ7.js +430 -0
  82. package/dist/chunk-F7UQR4ZX.js +149 -0
  83. package/dist/chunk-F7YL2RZ4.js +94 -0
  84. package/dist/chunk-FEZE6NIA.js +69 -0
  85. package/dist/chunk-FJCFYKVO.js +1014 -0
  86. package/dist/chunk-FLOEZA6K.js +29 -0
  87. package/dist/chunk-FMKKVWZD.js +133 -0
  88. package/dist/chunk-FNHSVBRA.js +48 -0
  89. package/dist/chunk-FOGG4AUR.js +114 -0
  90. package/dist/chunk-FPGVOSOG.js +41 -0
  91. package/dist/chunk-FQSRHTTC.js +49 -0
  92. package/dist/chunk-FR7JPYBD.js +182 -0
  93. package/dist/chunk-FTV6I76U.js +211 -0
  94. package/dist/chunk-FV5YFR6I.js +540 -0
  95. package/dist/chunk-FZ2E5LGK.js +54 -0
  96. package/dist/chunk-FZL2HNWP.js +531 -0
  97. package/dist/chunk-G2E5MNYP.js +549 -0
  98. package/dist/chunk-G5SFOH7P.js +256 -0
  99. package/dist/chunk-GFXLPJWY.js +53 -0
  100. package/dist/chunk-GR6YKM55.js +480 -0
  101. package/dist/chunk-GXJVY6WT.js +250 -0
  102. package/dist/chunk-GZ4TKR3Q.js +928 -0
  103. package/dist/chunk-HB6XSGI6.js +131 -0
  104. package/dist/chunk-HE4ZQXZM.js +396 -0
  105. package/dist/chunk-HHUFVJF7.js +1019 -0
  106. package/dist/chunk-HKTUIMH4.js +76 -0
  107. package/dist/chunk-HUZQDKQK.js +48 -0
  108. package/dist/chunk-I7IWQIEB.js +58 -0
  109. package/dist/chunk-IDGSU7JF.js +1496 -0
  110. package/dist/chunk-ILFKECGI.js +69 -0
  111. package/dist/chunk-ISNZYKAS.js +53 -0
  112. package/dist/chunk-IUD3ME4E.js +251 -0
  113. package/dist/chunk-IV7BCWWN.js +101 -0
  114. package/dist/chunk-IZNSAEBX.js +164 -0
  115. package/dist/chunk-J5LHDJU4.js +400 -0
  116. package/dist/chunk-JAA53T23.js +172 -0
  117. package/dist/chunk-JF2NSTFO.js +47 -0
  118. package/dist/chunk-JMSEEBN4.js +41 -0
  119. package/dist/chunk-JQ7XQPQS.js +273 -0
  120. package/dist/chunk-KC5DROFC.js +16667 -0
  121. package/dist/chunk-KIAI6PWL.js +36 -0
  122. package/dist/chunk-KIHOIVST.js +18 -0
  123. package/dist/chunk-KM2FBM3T.js +659 -0
  124. package/dist/chunk-KQDZXGNR.js +14 -0
  125. package/dist/chunk-L4VJ4ETL.js +41 -0
  126. package/dist/chunk-LDKUC2QJ.js +49 -0
  127. package/dist/chunk-LK44ULGI.js +2043 -0
  128. package/dist/chunk-LRS573EX.js +104 -0
  129. package/dist/chunk-LTQANUDH.js +119 -0
  130. package/dist/chunk-LVGBKKSM.js +282 -0
  131. package/dist/chunk-MF7QH4AX.js +162 -0
  132. package/dist/chunk-MGVYVW7Q.js +915 -0
  133. package/dist/chunk-MH5OCRUM.js +240 -0
  134. package/dist/chunk-MKFYQQ5Q.js +36 -0
  135. package/dist/chunk-MKRBG5EF.js +1142 -0
  136. package/dist/chunk-MTAUZW2Z.js +2504 -0
  137. package/dist/chunk-MTEBM4Y4.js +39 -0
  138. package/dist/chunk-N3NBWIYQ.js +48 -0
  139. package/dist/chunk-N4QZJJVB.js +3851 -0
  140. package/dist/chunk-NGPU2ARF.js +1726 -0
  141. package/dist/chunk-NIXVDQVO.js +2929 -0
  142. package/dist/chunk-NNUASOAA.js +34 -0
  143. package/dist/chunk-NPCD54I7.js +226 -0
  144. package/dist/chunk-OEI7LVRP.js +856 -0
  145. package/dist/chunk-OGRWQ562.js +18 -0
  146. package/dist/chunk-OIU657QQ.js +95 -0
  147. package/dist/chunk-OJLRFGBP.js +128 -0
  148. package/dist/chunk-OS7PQ35Z.js +391 -0
  149. package/dist/chunk-OSGQW2Z6.js +104 -0
  150. package/dist/chunk-P3TKKBAH.js +131 -0
  151. package/dist/chunk-PEF5OEMB.js +163 -0
  152. package/dist/chunk-PGKHJYOB.js +706 -0
  153. package/dist/chunk-PIVKU64W.js +688 -0
  154. package/dist/chunk-PKCMRPPB.js +109 -0
  155. package/dist/chunk-QICFHVRW.js +15 -0
  156. package/dist/chunk-QKEFZRHS.js +166 -0
  157. package/dist/chunk-QWVBEK4P.js +113 -0
  158. package/dist/chunk-R4TBNKKC.js +3217 -0
  159. package/dist/chunk-R64GLVBO.js +2919 -0
  160. package/dist/chunk-R6B6XAKK.js +56 -0
  161. package/dist/chunk-R6RY4Q5T.js +51 -0
  162. package/dist/chunk-RK6MKKKP.js +471 -0
  163. package/dist/chunk-ROTY5J2L.js +25 -0
  164. package/dist/chunk-RRVT4MPS.js +150 -0
  165. package/dist/chunk-SS66Q4VE.js +231 -0
  166. package/dist/chunk-T4RTWMJD.js +310 -0
  167. package/dist/chunk-T6USVBEJ.js +105 -0
  168. package/dist/chunk-TM7LC37P.js +4044 -0
  169. package/dist/chunk-TV45EUGM.js +51 -0
  170. package/dist/chunk-TZDSDDSV.js +233 -0
  171. package/dist/chunk-UBWCUP3G.js +55 -0
  172. package/dist/chunk-UF7TAFJM.js +906 -0
  173. package/dist/chunk-UR7RMZ3R.js +19943 -0
  174. package/dist/chunk-UYYN2IUZ.js +1611 -0
  175. package/dist/chunk-V2TH46ZY.js +66 -0
  176. package/dist/chunk-VKMTFIWS.js +315 -0
  177. package/dist/chunk-VOGCSYOI.js +16 -0
  178. package/dist/chunk-W5OYJMBT.js +41 -0
  179. package/dist/chunk-WARBF2KY.js +296 -0
  180. package/dist/chunk-WGZWR4RF.js +130 -0
  181. package/dist/chunk-WLIIQ2A4.js +18 -0
  182. package/dist/chunk-X4W4XXWP.js +134 -0
  183. package/dist/chunk-XB5RFZHH.js +1217 -0
  184. package/dist/chunk-XEG3FE2R.js +766 -0
  185. package/dist/chunk-XIWYUQZQ.js +583 -0
  186. package/dist/chunk-XKS6THI5.js +31 -0
  187. package/dist/chunk-XKZHAD6Y.js +184 -0
  188. package/dist/chunk-XNYNEEBR.js +214 -0
  189. package/dist/chunk-XPCWQXTY.js +37 -0
  190. package/dist/chunk-XPEEICAO.js +325 -0
  191. package/dist/chunk-XQ3YIV5R.js +3507 -0
  192. package/dist/chunk-XRO65C7V.js +1079 -0
  193. package/dist/chunk-XTVDAHH2.js +203 -0
  194. package/dist/chunk-XZRON6IV.js +131 -0
  195. package/dist/chunk-Y4BRGOJR.js +523 -0
  196. package/dist/chunk-Y5PZHS4K.js +3898 -0
  197. package/dist/chunk-Y7KBQ4BD.js +230 -0
  198. package/dist/chunk-YFSSNGLR.js +277 -0
  199. package/dist/chunk-YGKYFMSL.js +60 -0
  200. package/dist/chunk-YGR6OCHQ.js +345 -0
  201. package/dist/chunk-YIEOFHOL.js +30 -0
  202. package/dist/chunk-YLAJAI2W.js +180 -0
  203. package/dist/chunk-YMOJD5BO.js +50 -0
  204. package/dist/chunk-YPBQNJHA.js +33 -0
  205. package/dist/chunk-YPIEYQF4.js +307 -0
  206. package/dist/chunk-YVLMBAYE.js +221 -0
  207. package/dist/chunk-YXJ4XOHF.js +376 -0
  208. package/dist/chunk-ZE3P35DA.js +1247 -0
  209. package/dist/chunk-ZONE6E3Z.js +32 -0
  210. package/dist/chunk-ZP4FJHR4.js +95 -0
  211. package/dist/chunk-ZZXF6OOJ.js +119 -0
  212. package/dist/files.json +1976 -0
  213. package/dist/fixtures/forge/README.md +19 -0
  214. package/dist/fixtures/forge/expected/discrepancies.yaml +54 -0
  215. package/dist/fixtures/forge/expected/inputs.yaml +38 -0
  216. package/dist/fixtures/forge/expected/scan.yaml +342 -0
  217. package/dist/fixtures/forge/inputs/diagrams/forge-context.drawio +23 -0
  218. package/dist/fixtures/forge/inputs/partner-specs/northwind-pay-openapi.yaml +11 -0
  219. package/dist/fixtures/forge/inputs/tickets/ado-stories.json +4 -0
  220. package/dist/fixtures/forge/inputs/tickets/closed-service-requests.json +5 -0
  221. package/dist/fixtures/forge/inputs/wiki/integration-patterns.md +11 -0
  222. package/dist/fixtures/forge/inputs/wiki/ledger-solution-spec.md +9 -0
  223. package/dist/fixtures/forge/inputs/wiki/snow-firewall-request.md +4 -0
  224. package/dist/fixtures/forge/metarepo/judgments/reaches/84af5b6af24f7ca8c23013f3.yaml +17 -0
  225. package/dist/fixtures/forge/metarepo/judgments/reaches/c3917555edebddce8cecb647.yaml +17 -0
  226. package/dist/fixtures/forge/metarepo/judgments/reaches/c5fafd6601f8ca9e34e0bbd0.yaml +17 -0
  227. package/dist/fixtures/forge/metarepo/org-pack/agents/architecture-critic.yaml +9 -0
  228. package/dist/fixtures/forge/metarepo/org-pack/agents/story-writer.yaml +10 -0
  229. package/dist/fixtures/forge/metarepo/org-pack/checklists/architecture.yaml +115 -0
  230. package/dist/fixtures/forge/metarepo/org-pack/dialects/forge.yaml +111 -0
  231. package/dist/fixtures/forge/metarepo/org-pack/gates.yaml +22 -0
  232. package/dist/fixtures/forge/metarepo/org-pack/pack.yaml +11 -0
  233. package/dist/fixtures/forge/metarepo/org-pack/patterns/A.EB.PUB.yaml +12 -0
  234. package/dist/fixtures/forge/metarepo/org-pack/patterns/D.JDBC.yaml +12 -0
  235. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.DIR.BFF.yaml +12 -0
  236. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.GW.SOR.yaml +13 -0
  237. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.GW.VND.yaml +14 -0
  238. package/dist/fixtures/forge/metarepo/org-pack/process/change-templates/feature.md +37 -0
  239. package/dist/fixtures/forge/metarepo/org-pack/process/skills/add-forge-endpoint/SKILL.md +17 -0
  240. package/dist/fixtures/forge/metarepo/org-pack/process/snow/firewall-rule.yaml +14 -0
  241. package/dist/fixtures/forge/metarepo/org-pack/process/snow/gateway-route.yaml +13 -0
  242. package/dist/fixtures/forge/metarepo/org-pack/profiles/forge/profile.yaml +12 -0
  243. package/dist/fixtures/forge/metarepo/org-pack/profiles/forge/repos.manifest.yaml +44 -0
  244. package/dist/fixtures/forge/metarepo/org-pack/roles.yaml +14 -0
  245. package/dist/fixtures/forge/metarepo/org-pack/runtime.yaml +14 -0
  246. package/dist/fixtures/forge/metarepo/org-pack/sources.yaml +3 -0
  247. package/dist/fixtures/forge/repos/forge-events/topics/payments.initiated.yaml +4 -0
  248. package/dist/fixtures/forge/repos/forge-events/topics/transfers.completed.yaml +4 -0
  249. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/ledger-v1.xml +3 -0
  250. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/policies/SpikeArrest.xml +3 -0
  251. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/policies/VerifyOAuth.xml +4 -0
  252. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/proxies/default.xml +14 -0
  253. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/targets/ledger.xml +5 -0
  254. package/dist/fixtures/forge/repos/forge-infra/alerts/ledger-api.yaml +5 -0
  255. package/dist/fixtures/forge/repos/forge-infra/k8s/ledger-api.yaml +15 -0
  256. package/dist/fixtures/forge/repos/forge-infra/k8s/portal-bff.yaml +7 -0
  257. package/dist/fixtures/forge/repos/forge-infra/terraform/ledger-db.tf +9 -0
  258. package/dist/fixtures/forge/repos/forge-ledger/api/ledger-openapi.yaml +31 -0
  259. package/dist/fixtures/forge/repos/forge-ledger/forge.yaml +4 -0
  260. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/LedgerEndpoints.java +13 -0
  261. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/LedgerEvents.java +11 -0
  262. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/NorthwindClient.java +10 -0
  263. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/application.yml +3 -0
  264. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/db/migration/V1__create_account.sql +5 -0
  265. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/db/migration/V2__create_entry.sql +7 -0
  266. package/dist/fixtures/forge/repos/forge-portal-bff/pom.xml +1 -0
  267. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/AuditPublisher.java +12 -0
  268. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/BalanceController.java +16 -0
  269. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/LedgerClient.java +13 -0
  270. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/PaymentEvents.java +13 -0
  271. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/resources/application.yml +8 -0
  272. package/dist/fixtures/forge/repos/forge-portal-ui/package.json +1 -0
  273. package/dist/fixtures/forge/repos/forge-portal-ui/src/api/balance.ts +5 -0
  274. package/dist/fixtures/forge/repos/forge-reports-job/src/main/java/forge/reports/DailyEntriesJob.java +19 -0
  275. package/dist/fixtures/forge/repos/forge-reports-job/src/main/resources/application.yml +3 -0
  276. package/dist/fixtures/forge-change/README.md +41 -0
  277. package/dist/fixtures/forge-change/expected/findings.yaml +301 -0
  278. package/dist/fixtures/forge-change/expected/stories.yaml +101 -0
  279. package/dist/fixtures/forge-change/judgments/personal-data/0b5f3dbf5257a22275d8c74b.yaml +18 -0
  280. package/dist/fixtures/forge-change/judgments/personal-data/2759a66770134c417440bf2d.yaml +18 -0
  281. package/dist/fixtures/forge-change/judgments/personal-data/31b1ea2f14d0737f1aca79fd.yaml +18 -0
  282. package/dist/fixtures/forge-change/judgments/personal-data/49afd70c08228e65ad6ca1ed.yaml +18 -0
  283. package/dist/fixtures/forge-change/judgments/personal-data/761cabcb8a39f5e5866d2dd6.yaml +18 -0
  284. package/dist/fixtures/forge-change/judgments/personal-data/adae902b90cc8ffa0c765145.yaml +18 -0
  285. package/dist/fixtures/forge-change/judgments/personal-data/ba11bb933105ec9493e065dd.yaml +18 -0
  286. package/dist/fixtures/forge-change/judgments/personal-data/bdbcd1cdac3021c68063c3e7.yaml +18 -0
  287. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/brief.md +35 -0
  288. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/change.yaml +120 -0
  289. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/data.md +18 -0
  290. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/design.md +29 -0
  291. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/interfaces.md +17 -0
  292. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/mappings.md +26 -0
  293. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/proposal.md +35 -0
  294. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/snow.md +12 -0
  295. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/specs/transfer-limits/spec.md +19 -0
  296. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s1-refuse-over-limit.md +17 -0
  297. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s2-show-remaining.md +16 -0
  298. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s3-audit-refusals.md +18 -0
  299. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s4-velocity-check.md +16 -0
  300. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories.md +8 -0
  301. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/tasks.md +12 -0
  302. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/ux.md +7 -0
  303. package/dist/fixtures/forge-change/org-pack/agents/code-and-test-critic.yaml +13 -0
  304. package/dist/fixtures/forge-change/org-pack/agents/complete-critic.yaml +12 -0
  305. package/dist/fixtures/forge-change/org-pack/agents/safe-critic.yaml +12 -0
  306. package/dist/fixtures/forge-change/org-pack/agents/ship-critic.yaml +11 -0
  307. package/dist/fixtures/forge-change/org-pack/agents/true-critic.yaml +11 -0
  308. package/dist/fixtures/forge-change/org-pack/checklists/review.yaml +54 -0
  309. package/dist/fixtures/forge-change/org-pack/gates.yaml +25 -0
  310. package/dist/fixtures/forge-change/org-pack/teams/team-ledger/checklists/ledger-team.yaml +227 -0
  311. package/dist/fixtures/forge-change/recordings/complete-critic/2ad84f84bf39c1d5412697e69fe23034d6983ec45a00314bf0975e627589a3c5.json +12 -0
  312. package/dist/fixtures/forge-change/recordings/complete-critic/417c98d8e54a4387d0fd93441c49f44c2868958739070d855c1dce0c41e24db3.json +12 -0
  313. package/dist/fixtures/forge-change/recordings/complete-critic/50203ee22e9cb3ef047295edb6538fe7d5695e1e4b139f3c929013dc6ce47021.json +12 -0
  314. package/dist/fixtures/forge-change/recordings/complete-critic/89f18d67f5d9c325bf35e2a9e020f9ddb6ee13b8523315037f0905cc57c040b1.json +12 -0
  315. package/dist/fixtures/forge-change/recordings/complete-critic/b4097867d26ae8eadc8b9efa8cdd86897013358035f0b40086c299a59c4ba121.json +12 -0
  316. package/dist/fixtures/forge-change/recordings/safe-critic/302d06f49664dd67ad2e21ab9cf74c1b0f7d3f750709c6ed8eff2b70983274e2.json +12 -0
  317. package/dist/fixtures/forge-change/recordings/safe-critic/32f1049c9a5ab4a759543290db4644ec6e221cc45fdfdcf06193837c6a8ce0b9.json +12 -0
  318. package/dist/fixtures/forge-change/recordings/safe-critic/4e4a84bfc04b9f26ca4250319a879901ff7a1c081c71e46a117675fee05026b0.json +12 -0
  319. package/dist/fixtures/forge-change/recordings/safe-critic/604af0fcdd6df6b76208fa88305fdc15c37606c2a4d1ae816477e46ac8c2dd04.json +12 -0
  320. package/dist/fixtures/forge-change/recordings/safe-critic/f0bf50af11f14c50d07904f0dffe1c8c20fb0cd89770645a8824c1d30a443955.json +12 -0
  321. package/dist/fixtures/forge-change/recordings/ship-critic/350954b58833b2c04880c67db45a1b328b7fd541d9f0d943b63905b8875488a6.json +12 -0
  322. package/dist/fixtures/forge-change/recordings/ship-critic/4af95c6c96a206777cec9de1f9c2d8c55a36ddc9b8db2f81d6eb83217b835efa.json +12 -0
  323. package/dist/fixtures/forge-change/recordings/ship-critic/76c34522a49cf7587a4e5689a5030d384603fa780b8aba97d27815cbc829683e.json +12 -0
  324. package/dist/fixtures/forge-change/recordings/ship-critic/a3b2cd1ace48587e5994333db03b34c3a0f9dec4f1932f1730ddfb687f6918c8.json +12 -0
  325. package/dist/fixtures/forge-change/recordings/ship-critic/de288a4fa64d0fc20890f9a787080ce6eac5203b7b9b72d884df11e8cf111835.json +12 -0
  326. package/dist/fixtures/forge-change/recordings/story-writer/1ddb00eac2aaf91a5ec5d9dfd220116be9f75aec6546a4a3a3b050ed89af2864.json +12 -0
  327. package/dist/packages/assistant-kit/frameworks-kit/README.md +86 -0
  328. package/dist/packages/assistant-kit/frameworks-kit/checklist.md +11 -0
  329. package/dist/packages/assistant-kit/frameworks-kit/examples/tide-lantern.yaml +56 -0
  330. package/dist/packages/assistant-kit/frameworks-kit/examples/tide-platform.yaml +43 -0
  331. package/dist/packages/assistant-kit/frameworks-kit/prompts/write-framework-model.md +12 -0
  332. package/dist/packages/assistant-kit/kit/README.md +98 -0
  333. package/dist/packages/assistant-kit/kit/c2-reference.md +334 -0
  334. package/dist/packages/assistant-kit/kit/checklist.md +39 -0
  335. package/dist/packages/assistant-kit/kit/examples/house-http-client.yaml +102 -0
  336. package/dist/packages/assistant-kit/kit/examples/tide-apigee.yaml +56 -0
  337. package/dist/packages/assistant-kit/kit/examples/tide-apim.yaml +32 -0
  338. package/dist/packages/assistant-kit/kit/examples/tide-kong.yaml +44 -0
  339. package/dist/packages/assistant-kit/kit/prompts/write-dialect.md +34 -0
  340. package/dist/packages/assistant-kit/kit/worked-example.md +198 -0
  341. package/dist/packages/conformance/sample/README.md +4 -0
  342. package/dist/packages/conformance/sample/inputs/notes.md +3 -0
  343. package/dist/packages/conformance/sample/inputs/systems.csv +3 -0
  344. package/dist/packages/conformance/sample/repo/api/greeter.proto +6 -0
  345. package/dist/packages/conformance/sample/repo/api/openapi.yaml +10 -0
  346. package/dist/packages/conformance/sample/repo/api/schema.graphql +3 -0
  347. package/dist/packages/conformance/sample/repo/db/V1__create_greeting.sql +4 -0
  348. package/dist/packages/conformance/sample/repo/package.json +7 -0
  349. package/dist/packages/conformance/sample/repo/src/main/java/sample/HelloController.java +10 -0
  350. package/dist/packages/conformance/sample/repo/web/app.ts +4 -0
  351. package/dist/packages/evals/datasets/critic-lenses.yaml +62 -0
  352. package/dist/packages/evals/datasets/dialect-writer.yaml +14 -0
  353. package/dist/packages/evals/datasets/feature-namer.yaml +34 -0
  354. package/dist/packages/evals/datasets/glossary-definer.yaml +25 -0
  355. package/dist/packages/evals/datasets/story-writer.yaml +13 -0
  356. package/dist/packages/evals/datasets/template-writer.yaml +16 -0
  357. package/dist/packages/evals/datasets/test-writer.yaml +18 -0
  358. package/dist/packages/executors/reference/reference-executor.mjs +233 -0
  359. package/dist/packages/extractors/dialects/argocd.yaml +45 -0
  360. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/AccountResource.java +47 -0
  361. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/AuditClient.java +12 -0
  362. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/LedgerClient.java +17 -0
  363. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/LedgerClient.java +14 -0
  364. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/RatesClient.java +11 -0
  365. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/StatementController.java +36 -0
  366. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/resources/application.yml +7 -0
  367. package/dist/packages/extractors/dialects/fixtures/quarkus-reactive-messaging/fraud-service/src/main/java/forge/fraud/FraudScorer.java +27 -0
  368. package/dist/packages/extractors/dialects/fixtures/quarkus-reactive-messaging/fraud-service/src/main/resources/application.properties +4 -0
  369. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/api.tf +38 -0
  370. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/main.tf +95 -0
  371. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/terraform.tfvars +1 -0
  372. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/variables.tf +4 -0
  373. package/dist/packages/extractors/dialects/fixtures/terraform-azure/forge-azure-infra/main.tf +102 -0
  374. package/dist/packages/extractors/dialects/fixtures/terraform-gcp/forge-gcp-infra/main.tf +51 -0
  375. package/dist/packages/extractors/dialects/harness.yaml +101 -0
  376. package/dist/packages/extractors/dialects/jaxrs.yaml +155 -0
  377. package/dist/packages/extractors/dialects/micronaut.yaml +207 -0
  378. package/dist/packages/extractors/dialects/quarkus-reactive-messaging.yaml +158 -0
  379. package/dist/packages/extractors/dialects/tekton.yaml +71 -0
  380. package/dist/packages/extractors/dialects/terraform-aws.yaml +267 -0
  381. package/dist/packages/extractors/dialects/terraform-azure.yaml +212 -0
  382. package/dist/packages/extractors/dialects/terraform-gcp.yaml +109 -0
  383. package/dist/packages/extractors/grammars/README.md +11 -0
  384. package/dist/packages/extractors/grammars/tree-sitter-groovy.LICENSE +21 -0
  385. package/dist/packages/extractors/grammars/tree-sitter-groovy.wasm +0 -0
  386. package/dist/packages/extractors/grammars/vendored.json +11 -0
  387. package/dist/packages/learn/lessons/architect-diagrams-and-code.yaml +69 -0
  388. package/dist/packages/learn/lessons/business-analyst-story-bar.yaml +94 -0
  389. package/dist/packages/learn/lessons/delivery-lead-release-readiness.yaml +44 -0
  390. package/dist/packages/learn/lessons/designer-features-in-user-words.yaml +57 -0
  391. package/dist/packages/learn/lessons/developer-find-your-way.yaml +60 -0
  392. package/dist/packages/learn/lessons/everyone-first-hour.yaml +74 -0
  393. package/dist/packages/learn/lessons/platform-lead-coverage-and-defences.yaml +58 -0
  394. package/dist/packages/learn/lessons/product-owner-first-change.yaml +167 -0
  395. package/dist/packages/learn/lessons/qa-tests-and-trace.yaml +53 -0
  396. package/dist/packages/learn/lessons/team-lead-initiative.yaml +146 -0
  397. package/dist/packages/naysayer/constitution/constitution.yaml +305 -0
  398. package/dist/packages/naysayer/starter/review.yaml +256 -0
  399. package/dist/packages/sdk/npm/index.js +9780 -0
  400. package/dist/packages/speckit/rules/drift.yaml +78 -0
  401. package/dist/packages/taskrun/rules/conform.yaml +38 -0
  402. package/dist/packages/testgen/rules/trace.yaml +49 -0
  403. package/dist/packages/ui/dist/assets/elk-api-Mo5w5xCa.js +2 -0
  404. package/dist/packages/ui/dist/assets/elk-worker.min--dAJroGl.js +6401 -0
  405. package/dist/packages/ui/dist/assets/elk-worker.min-DdYmS5kP.js +2 -0
  406. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-400-normal-BTotfTJu.woff +0 -0
  407. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-400-normal-DZqxrq2p.woff2 +0 -0
  408. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-500-normal-ByOcLdNv.woff +0 -0
  409. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-500-normal-CocWQlwt.woff2 +0 -0
  410. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-600-normal-71GNu3SW.woff2 +0 -0
  411. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-600-normal-BGq0mW3O.woff +0 -0
  412. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-400-normal-Dsrv2Tcn.woff +0 -0
  413. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-400-normal-g30qAdWV.woff2 +0 -0
  414. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-500-normal-Cs5J6C77.woff2 +0 -0
  415. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-500-normal-DB5PtV2g.woff +0 -0
  416. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-600-normal-Bz0x94Yp.woff +0 -0
  417. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-600-normal-DUMzJB7m.woff2 +0 -0
  418. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-400-normal-D9ESIMu3.woff +0 -0
  419. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-400-normal-_efipK4i.woff2 +0 -0
  420. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-500-normal-CuWXN6rf.woff +0 -0
  421. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-500-normal-JMMifIXV.woff2 +0 -0
  422. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-600-normal-D-CqTdkO.woff +0 -0
  423. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-600-normal-DzTrcv_p.woff2 +0 -0
  424. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
  425. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
  426. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
  427. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
  428. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
  429. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
  430. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-400-normal-C5H60-Va.woff2 +0 -0
  431. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-400-normal-RBey6euL.woff +0 -0
  432. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-500-normal-D0aIdm-b.woff +0 -0
  433. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-500-normal-DakdToA3.woff2 +0 -0
  434. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-600-normal-DIrixKbi.woff +0 -0
  435. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-600-normal-DOrvGEcy.woff2 +0 -0
  436. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-400-normal-DG4YqDda.woff2 +0 -0
  437. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-400-normal-fK1oJ5dG.woff +0 -0
  438. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-500-normal-BEb3_waV.woff +0 -0
  439. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-500-normal-e4dixQRQ.woff2 +0 -0
  440. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-600-normal-DgdngZtN.woff +0 -0
  441. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-600-normal-DpPYBSTl.woff2 +0 -0
  442. package/dist/packages/ui/dist/assets/index-Bp3XhPHX.css +1 -0
  443. package/dist/packages/ui/dist/assets/index-DM212ZbV.js +29 -0
  444. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  445. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  446. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff +0 -0
  447. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2 +0 -0
  448. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  449. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  450. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff +0 -0
  451. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2 +0 -0
  452. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  453. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  454. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  455. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  456. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  457. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  458. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2 +0 -0
  459. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff +0 -0
  460. package/dist/packages/ui/dist/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  461. package/dist/packages/ui/dist/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff +0 -0
  462. package/dist/packages/ui/dist/assets/rajdhani-devanagari-600-normal-BtY48IV_.woff +0 -0
  463. package/dist/packages/ui/dist/assets/rajdhani-devanagari-600-normal-DhS7ScYx.woff2 +0 -0
  464. package/dist/packages/ui/dist/assets/rajdhani-devanagari-700-normal-BQQOj9BB.woff2 +0 -0
  465. package/dist/packages/ui/dist/assets/rajdhani-devanagari-700-normal-DBRwWuxA.woff +0 -0
  466. package/dist/packages/ui/dist/assets/rajdhani-latin-600-normal-CXCVEoA9.woff2 +0 -0
  467. package/dist/packages/ui/dist/assets/rajdhani-latin-600-normal-Dx02qI2_.woff +0 -0
  468. package/dist/packages/ui/dist/assets/rajdhani-latin-700-normal-BPDUZo87.woff2 +0 -0
  469. package/dist/packages/ui/dist/assets/rajdhani-latin-700-normal-e0Uj8ZlN.woff +0 -0
  470. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-600-normal-BleIgkPp.woff +0 -0
  471. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-600-normal-C9ZjJQAt.woff2 +0 -0
  472. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-700-normal-BPaQ7tlD.woff +0 -0
  473. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-700-normal-S6aYESQK.woff2 +0 -0
  474. package/dist/packages/ui/dist/favicon.svg +1 -0
  475. package/dist/packages/ui/dist/index.html +15 -0
  476. package/dist/third-party.json +575 -0
  477. package/dist/vendor/@fission-ai/openspec/bin/openspec.js +85986 -0
  478. package/dist/vendor/@fission-ai/openspec/package.json +82 -0
  479. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/schema.yaml +248 -0
  480. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/design.md +21 -0
  481. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/proposal.md +34 -0
  482. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/spec.md +13 -0
  483. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/tasks.md +11 -0
  484. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-c_sharp.wasm +0 -0
  485. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-go.wasm +0 -0
  486. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-java.wasm +0 -0
  487. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-javascript.wasm +0 -0
  488. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-kotlin.wasm +0 -0
  489. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-php.wasm +0 -0
  490. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-python.wasm +0 -0
  491. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-ruby.wasm +0 -0
  492. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-rust.wasm +0 -0
  493. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-scala.wasm +0 -0
  494. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-tsx.wasm +0 -0
  495. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-typescript.wasm +0 -0
  496. package/dist/vendor/web-tree-sitter/tree-sitter.wasm +0 -0
  497. package/package.json +36 -3
@@ -0,0 +1,345 @@
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
+ denyHashesAt
8
+ } from "./chunk-GXJVY6WT.js";
9
+ import {
10
+ estateRepos,
11
+ outsideProfileSystems
12
+ } from "./chunk-AY2IUF4K.js";
13
+ import "./chunk-6JLPXDWN.js";
14
+ import "./chunk-4GZXS6S2.js";
15
+ import {
16
+ denyListHits
17
+ } from "./chunk-R4TBNKKC.js";
18
+ import "./chunk-NIXVDQVO.js";
19
+ import "./chunk-UR7RMZ3R.js";
20
+ import "./chunk-PGKHJYOB.js";
21
+ import "./chunk-MKRBG5EF.js";
22
+ import "./chunk-5XDNUJ4P.js";
23
+ import {
24
+ RepoManifest,
25
+ SHARED_MAP_SCHEMA_VERSION,
26
+ SharedMapFile,
27
+ factsDirOf,
28
+ factsFileOf,
29
+ isAdopted,
30
+ isSecretPath,
31
+ loadOrgPack,
32
+ orgPackDirOf,
33
+ parseFactsLines,
34
+ readSharedMaps,
35
+ redactSecrets,
36
+ require_dist,
37
+ serializeFacts,
38
+ sharedDirOf,
39
+ sharedRelOf
40
+ } from "./chunk-577AJVRS.js";
41
+ import {
42
+ writeFileAtomic
43
+ } from "./chunk-D3PO4DOZ.js";
44
+ import {
45
+ __toESM
46
+ } from "./chunk-TV45EUGM.js";
47
+
48
+ // packages/cli/dist/shared-commands.js
49
+ var import_yaml = __toESM(require_dist(), 1);
50
+ import { readdir, readFile, rm, mkdir, stat } from "node:fs/promises";
51
+ import { isAbsolute, join, relative, resolve } from "node:path";
52
+ var SLUG = /^[a-z0-9][a-z0-9_-]*$/;
53
+ var SHA = /^[0-9a-f]{7,64}$/;
54
+ var SECRET_WORD = /(password|passwd|secret|token|api[-_]?key|access[-_]?key|private[-_]?key|credential)/i;
55
+ var posix = (p) => p.split("\\").join("/");
56
+ async function headCommitOf(dir) {
57
+ let git = join(dir, ".git");
58
+ const s = await stat(git).catch(() => void 0);
59
+ if (!s)
60
+ return void 0;
61
+ if (s.isFile()) {
62
+ const m = /^gitdir:\s*(.+)$/m.exec(await readFile(git, "utf8"));
63
+ if (!m)
64
+ return void 0;
65
+ git = resolve(dir, m[1].trim());
66
+ }
67
+ const head = (await readFile(join(git, "HEAD"), "utf8").catch(() => "")).trim();
68
+ if (SHA.test(head))
69
+ return head;
70
+ const ref = /^ref:\s*(.+)$/.exec(head)?.[1]?.trim();
71
+ if (!ref)
72
+ return void 0;
73
+ const common = (await readFile(join(git, "commondir"), "utf8").catch(() => "")).trim();
74
+ for (const g of [git, ...common ? [resolve(git, common)] : []]) {
75
+ const loose = (await readFile(join(g, ...ref.split("/")), "utf8").catch(() => "")).trim();
76
+ if (SHA.test(loose))
77
+ return loose;
78
+ const packed = await readFile(join(g, "packed-refs"), "utf8").catch(() => "");
79
+ for (const line of packed.split(/\r?\n/)) {
80
+ const [sha, name] = line.trim().split(/\s+/);
81
+ if (name === ref && sha && SHA.test(sha))
82
+ return sha;
83
+ }
84
+ }
85
+ return void 0;
86
+ }
87
+ async function theirManifest(dir) {
88
+ const out = /* @__PURE__ */ new Map();
89
+ const profiles = join(orgPackDirOf(dir), "profiles");
90
+ for (const p of (await readdir(profiles).catch(() => [])).sort()) {
91
+ const text = await readFile(join(profiles, p, "repos.manifest.yaml"), "utf8").catch(() => void 0);
92
+ if (text === void 0)
93
+ continue;
94
+ let raw;
95
+ try {
96
+ raw = (0, import_yaml.parse)(text);
97
+ } catch {
98
+ continue;
99
+ }
100
+ const m = RepoManifest.safeParse(raw);
101
+ if (m.success) {
102
+ for (const r of m.data.repos)
103
+ if (!out.has(r.id))
104
+ out.set(r.id, r);
105
+ }
106
+ }
107
+ return out;
108
+ }
109
+ function kept(f) {
110
+ const q = f.cite.quote;
111
+ if (q === void 0)
112
+ return { fact: f, redacted: false };
113
+ const red = isSecretPath(f.cite.file) ? void 0 : redactSecrets(q);
114
+ const quote = red !== void 0 && red === q && SECRET_WORD.test(q) ? void 0 : red;
115
+ if (quote === q)
116
+ return { fact: f, redacted: false };
117
+ const { quote: _q, ...cite } = f.cite;
118
+ return { fact: { ...f, cite: quote ? { ...cite, quote } : cite }, redacted: true };
119
+ }
120
+ async function readTheirMap(root, dir, o) {
121
+ if (!SLUG.test(o.team))
122
+ return {
123
+ ok: false,
124
+ message: `${o.team} isn't a team id: use a lowercase slug, e.g. forge-risk-team.`
125
+ };
126
+ const op = await loadOrgPack(orgPackDirOf(root));
127
+ const systems = outsideProfileSystems(op);
128
+ const system = systems.find((s) => s.id === o.system);
129
+ if (!system)
130
+ return {
131
+ ok: false,
132
+ message: `${o.system} isn't a system of your profiles that no estate repo belongs to (${systems.map((s) => s.id).join(", ") || "none"}). Add their system to a profile, boundary internal, with its host as an alias, then import again.`
133
+ };
134
+ const others = (await readSharedMaps(root)).maps.filter((m) => m.system === o.system && m.team !== o.team);
135
+ if (others.length)
136
+ return {
137
+ ok: false,
138
+ message: `${o.system} already has ${others[0].name}'s map (shared/${others[0].team}/): one map per system.`
139
+ };
140
+ const from = resolve(dir);
141
+ const st = await stat(from).catch(() => void 0);
142
+ if (!st?.isDirectory())
143
+ return { ok: false, message: `${dir} isn't a folder.` };
144
+ const commit = o.commit ?? await headCommitOf(from);
145
+ if (!commit || !SHA.test(commit))
146
+ return {
147
+ ok: false,
148
+ message: o.commit ? `${o.commit} isn't a commit sha.` : `${dir} isn't a git clone Atticus can read the commit of: say which commit of their metarepo these files are at with --commit <sha>.`
149
+ };
150
+ const theirFacts = isAdopted(from) || await stat(factsDirOf(from)).catch(() => void 0) ? factsDirOf(from) : from;
151
+ const names = (await readdir(theirFacts).catch(() => [])).sort();
152
+ const files = names.flatMap((n) => {
153
+ const f = factsFileOf(n);
154
+ return f?.facts ? [f.repo] : [];
155
+ });
156
+ if (!files.length)
157
+ return {
158
+ ok: false,
159
+ message: `No facts files (<repo>.jsonl) in ${dir}: give their metarepo, or the folder their facts are in.`
160
+ };
161
+ const ours = new Set(estateRepos(op).map((r) => r.id));
162
+ const clash = files.filter((r) => ours.has(r));
163
+ if (clash.length)
164
+ return {
165
+ ok: false,
166
+ message: `${clash.join(", ")} ${clash.length === 1 ? "is a repo" : "are repos"} of your estate: a shared map holds only another team's repos.`
167
+ };
168
+ const manifest = await theirManifest(from);
169
+ const leftOut = { other: 0, unverified: 0, bad: 0, redacted: 0 };
170
+ const facts = {};
171
+ const repos = [];
172
+ for (const repo of files) {
173
+ const { facts: read, bad } = parseFactsLines(await readFile(join(theirFacts, `${repo}.jsonl`), "utf8"));
174
+ leftOut.bad += bad.length;
175
+ const list = [];
176
+ for (const f of read) {
177
+ if (f.kind !== "entry" || f.repo !== repo)
178
+ leftOut.other++;
179
+ else if (f.verified === "none")
180
+ leftOut.unverified++;
181
+ else {
182
+ const k = kept(f);
183
+ if (k.redacted)
184
+ leftOut.redacted++;
185
+ list.push(k.fact);
186
+ }
187
+ }
188
+ const m = manifest.get(repo);
189
+ const hosts = [
190
+ .../* @__PURE__ */ new Set([...m?.hosts ?? [], ...(m?.modules ?? []).flatMap((x) => x.hosts)])
191
+ ].sort();
192
+ const codeCommit = list.map((f) => f.commit).sort()[0];
193
+ facts[repo] = list;
194
+ repos.push({
195
+ repo,
196
+ ...m?.component ? { component: m.component } : {},
197
+ ...codeCommit ? { commit: codeCommit } : {},
198
+ hosts,
199
+ ...m?.basePath ? { basePath: m.basePath } : {},
200
+ entries: list.length
201
+ });
202
+ }
203
+ const rel = posix(relative(root, from));
204
+ const inside = !!rel && rel !== ".." && !rel.startsWith("../") && !isAbsolute(rel);
205
+ const file = SharedMapFile.parse({
206
+ schemaVersion: SHARED_MAP_SCHEMA_VERSION,
207
+ team: o.team,
208
+ name: o.name ?? o.team,
209
+ system: o.system,
210
+ ...inside ? { source: rel } : {},
211
+ commit,
212
+ importedAt: (o.now ?? /* @__PURE__ */ new Date()).toISOString(),
213
+ repos
214
+ });
215
+ const deny = await denyHashesAt(root);
216
+ if (deny.size) {
217
+ for (const [repo, list] of Object.entries(facts)) {
218
+ const hits = denyListHits(list.length ? serializeFacts(list) : "", deny);
219
+ if (hits.length)
220
+ return {
221
+ ok: false,
222
+ message: `Refused: the deny-list names a word in ${repo}'s entries (line${hits.length === 1 ? "" : "s"} ${hits.join(", ")} as they would be kept). Nothing was written.`
223
+ };
224
+ }
225
+ if (denyListHits((0, import_yaml.stringify)(file), deny).length)
226
+ return {
227
+ ok: false,
228
+ message: "Refused: the deny-list names a word in the map's own file. Nothing was written."
229
+ };
230
+ }
231
+ const was = (await readSharedMaps(root)).maps.find((m) => m.team === o.team);
232
+ return { ok: true, file, facts, leftOut, ...was ? { replaced: was.commit } : {} };
233
+ }
234
+ async function writeTheirMap(root, r) {
235
+ const dir = join(sharedDirOf(root), r.file.team);
236
+ await rm(join(dir, "facts"), { recursive: true, force: true });
237
+ await mkdir(join(dir, "facts"), { recursive: true });
238
+ for (const [repo, list] of Object.entries(r.facts))
239
+ await writeFileAtomic(join(dir, "facts", `${repo}.jsonl`), list.length ? serializeFacts(list) : "");
240
+ await writeFileAtomic(join(dir, "map.yaml"), `# ${r.file.name}'s Atticus map, read-only (ADR 0160): their entries at their commit. Theirs to
241
+ # change: import it again (atticus join shared refresh ${r.file.team}); never edit it here.
242
+ ${(0, import_yaml.stringify)(r.file)}`);
243
+ return `${sharedRelOf(root)}/${r.file.team}`;
244
+ }
245
+ function sayImported(r, where, io) {
246
+ const f = r.file;
247
+ const entries = f.repos.reduce((n, x) => n + x.entries, 0);
248
+ io.out(`${r.replaced && r.replaced !== f.commit ? `Replaced ${f.name}'s map at ${r.replaced.slice(0, 7)} with` : r.replaced ? `Imported ${f.name}'s map again,` : `Imported ${f.name}'s map,`} their commit ${f.commit.slice(0, 7)}: ${entries} entr${entries === 1 ? "y" : "ies"} from ${f.repos.length} repo${f.repos.length === 1 ? "" : "s"} (${f.repos.map((x) => `${x.repo} ${x.entries}`).join(", ")}), standing for ${f.system}. Written to ${where}/.`);
249
+ const lo = r.leftOut;
250
+ const parts = [
251
+ lo.other ? `${lo.other} fact${lo.other === 1 ? "" : "s"} that aren't entries` : "",
252
+ lo.unverified ? `${lo.unverified} entr${lo.unverified === 1 ? "y" : "ies"} their verify didn't confirm` : "",
253
+ lo.bad ? `${lo.bad} line${lo.bad === 1 ? "" : "s"} that don't read as facts` : ""
254
+ ].filter(Boolean);
255
+ if (parts.length)
256
+ io.out(` Left out: ${parts.join(", ")}.`);
257
+ if (lo.redacted)
258
+ io.out(` ${lo.redacted} quote${lo.redacted === 1 ? "" : "s"} naming a secret-looking key redacted or dropped.`);
259
+ if (!f.source)
260
+ io.out(` Their folder is outside this metarepo, so where it is isn't recorded: refresh with atticus join shared refresh ${f.team} <folder>.`);
261
+ io.out(` Their entries stay theirs: never verified, corrected or reported on here. Review ${where}/ in a pull request, then atticus verify --all --write joins the calls to ${f.system} to them.`);
262
+ }
263
+ async function sharedImport(root, dir, o, io) {
264
+ if (!dir || !o.team || !o.system) {
265
+ io.err("Usage: atticus join shared import <their metarepo or facts folder> --team <id> --system <our profile's system id> [--name <team name>] [--commit <sha>] [--json]");
266
+ return 2;
267
+ }
268
+ const r = await readTheirMap(root, dir, o);
269
+ if (!r.ok) {
270
+ io.err(r.message);
271
+ return 1;
272
+ }
273
+ const where = await writeTheirMap(root, r);
274
+ if (o.json)
275
+ io.out(JSON.stringify({ written: where, map: r.file, leftOut: r.leftOut }, null, 2));
276
+ else
277
+ sayImported(r, where, io);
278
+ return 0;
279
+ }
280
+ async function sharedRefresh(root, team, o, io) {
281
+ const { maps, problems } = await readSharedMaps(root);
282
+ for (const p of problems)
283
+ io.err(p.message);
284
+ const which = team ? maps.filter((m) => m.team === team) : maps;
285
+ if (team && !which.length) {
286
+ io.err(`No shared map for ${team} in ${sharedRelOf(root)}/: import it first (atticus join shared import).`);
287
+ return 1;
288
+ }
289
+ if (o.dir && which.length !== 1) {
290
+ io.err("Give the team with a new folder: atticus join shared refresh <team> <folder>.");
291
+ return 2;
292
+ }
293
+ let failed = 0;
294
+ let noFolder = 0;
295
+ for (const m of which) {
296
+ const source = m.file.source;
297
+ if (!o.dir && !source) {
298
+ io.err(`${m.team}'s map doesn't record where it came from (its folder was outside this metarepo): give the folder, atticus join shared refresh ${m.team} <folder>.`);
299
+ noFolder++;
300
+ continue;
301
+ }
302
+ const src = o.dir ?? (isAbsolute(source) ? source : join(root, ...source.split("/")));
303
+ const r = await readTheirMap(root, src, {
304
+ team: m.team,
305
+ name: m.name,
306
+ system: m.system,
307
+ ...o.commit ? { commit: o.commit } : {},
308
+ ...o.now ? { now: o.now } : {}
309
+ });
310
+ if (!r.ok) {
311
+ io.err(`${m.team}: ${r.message}`);
312
+ failed++;
313
+ continue;
314
+ }
315
+ sayImported(r, await writeTheirMap(root, r), io);
316
+ }
317
+ if (!which.length)
318
+ io.out(`No shared maps in ${sharedRelOf(root)}/.`);
319
+ return failed ? 1 : noFolder ? 2 : 0;
320
+ }
321
+ async function sharedList(root, o, io) {
322
+ const { maps, problems } = await readSharedMaps(root);
323
+ if (o.json) {
324
+ io.out(JSON.stringify({ maps: maps.map((m) => m.file), problems }, null, 2));
325
+ return problems.length ? 1 : 0;
326
+ }
327
+ for (const p of problems)
328
+ io.err(p.message);
329
+ if (!maps.length) {
330
+ io.out(`No shared maps in ${sharedRelOf(root)}/. Import another team's: atticus join shared import <their metarepo> --team <id> --system <id>.`);
331
+ return problems.length ? 1 : 0;
332
+ }
333
+ for (const m of maps) {
334
+ const n = m.file.repos.reduce((k, r) => k + r.entries, 0);
335
+ io.out(`${m.team}: ${m.name}'s map for ${m.system}, their commit ${m.commit.slice(0, 7)}, imported ${m.file.importedAt.slice(0, 10)} from ${m.file.source ?? "a folder outside the metarepo"}: ${n} entr${n === 1 ? "y" : "ies"} in ${m.file.repos.map((r) => r.repo).join(", ")}.`);
336
+ }
337
+ return problems.length ? 1 : 0;
338
+ }
339
+ export {
340
+ headCommitOf,
341
+ readTheirMap,
342
+ sharedImport,
343
+ sharedList,
344
+ sharedRefresh
345
+ };
@@ -0,0 +1,30 @@
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
+ SHOWN,
8
+ factsRepos,
9
+ verifyAllCommand,
10
+ verifyCommand,
11
+ verifyInputsOf
12
+ } from "./chunk-3GTZ2OON.js";
13
+ import "./chunk-HE4ZQXZM.js";
14
+ import "./chunk-B3O52AUQ.js";
15
+ import "./chunk-XKS6THI5.js";
16
+ import "./chunk-4GZXS6S2.js";
17
+ import "./chunk-UR7RMZ3R.js";
18
+ import "./chunk-7F2RUWPU.js";
19
+ import "./chunk-PGKHJYOB.js";
20
+ import "./chunk-MKRBG5EF.js";
21
+ import "./chunk-577AJVRS.js";
22
+ import "./chunk-D3PO4DOZ.js";
23
+ import "./chunk-TV45EUGM.js";
24
+ export {
25
+ SHOWN,
26
+ factsRepos,
27
+ verifyAllCommand,
28
+ verifyCommand,
29
+ verifyInputsOf
30
+ };
@@ -0,0 +1,180 @@
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
+ diffCatalogs,
8
+ readCatalog
9
+ } from "./chunk-AY2IUF4K.js";
10
+ import "./chunk-6JLPXDWN.js";
11
+ import "./chunk-4GZXS6S2.js";
12
+ import "./chunk-R4TBNKKC.js";
13
+ import "./chunk-NIXVDQVO.js";
14
+ import "./chunk-UR7RMZ3R.js";
15
+ import {
16
+ baseClonePath,
17
+ branchSlug,
18
+ checkoutState,
19
+ gitUser,
20
+ loadRepos,
21
+ remoteDefaultBranch
22
+ } from "./chunk-PGKHJYOB.js";
23
+ import "./chunk-MKRBG5EF.js";
24
+ import "./chunk-5XDNUJ4P.js";
25
+ import {
26
+ ManifestEditError,
27
+ REPO_DESCRIPTION_MAX,
28
+ RepoDescription,
29
+ RepoManifest,
30
+ catalogDirOf,
31
+ orgPackDirOf,
32
+ require_dist,
33
+ setManifestDescription
34
+ } from "./chunk-577AJVRS.js";
35
+ import {
36
+ writeFileAtomic
37
+ } from "./chunk-D3PO4DOZ.js";
38
+ import {
39
+ __toESM
40
+ } from "./chunk-TV45EUGM.js";
41
+
42
+ // packages/cli/dist/repo-branches.js
43
+ var import_yaml = __toESM(require_dist(), 1);
44
+ var import_yaml2 = __toESM(require_dist(), 1);
45
+ import { readdir, readFile } from "node:fs/promises";
46
+ import { join } from "node:path";
47
+ async function branchScans(root) {
48
+ const dir = join(catalogDirOf(root), "branches");
49
+ const out = [];
50
+ for (const d of (await readdir(dir).catch(() => [])).sort()) {
51
+ const text = await readFile(join(dir, d, "branch.yaml"), "utf8").catch(() => void 0);
52
+ if (!text)
53
+ continue;
54
+ const m = (0, import_yaml2.parse)(text);
55
+ if (typeof m.branch === "string" && typeof m.scannedAt === "string" && Array.isArray(m.repos))
56
+ out.push({ branch: m.branch, scannedAt: m.scannedAt, repos: m.repos });
57
+ }
58
+ return out;
59
+ }
60
+ async function repoBranches(root) {
61
+ const scans = await branchScans(root);
62
+ const repos = [];
63
+ for (const r of await loadRepos(root)) {
64
+ if (r.archived)
65
+ continue;
66
+ const base = baseClonePath(root, r.id);
67
+ const remoteDefault = await remoteDefaultBranch(base);
68
+ const commit = await checkoutState(base).then((s) => s.commit, () => void 0);
69
+ repos.push({
70
+ id: r.id,
71
+ platform: r.platform,
72
+ url: r.url,
73
+ type: r.type,
74
+ owner: r.owner,
75
+ // What it is, in a person's words, or a draft nobody has confirmed (ADR 0128).
76
+ ...r.description ? { description: r.description } : {},
77
+ defaultBranch: r.defaultBranch,
78
+ ...remoteDefault ? { remoteDefault } : {},
79
+ branches: r.branches,
80
+ ...commit ? { commit } : {},
81
+ scans: scans.flatMap((s) => s.repos.filter((x) => x.id === r.id).map((x) => ({ branch: s.branch, scannedAt: s.scannedAt, commit: x.commit })))
82
+ });
83
+ }
84
+ return { repos };
85
+ }
86
+ var key = (r) => `${r.kind}/${r.id}`;
87
+ async function compareBranch(root, branch) {
88
+ const scan = (await branchScans(root)).find((s) => s.branch === branch);
89
+ if (!scan)
90
+ return void 0;
91
+ const ids = new Set(scan.repos.map((r) => r.id));
92
+ const ofRepos = (records) => records.filter((r) => r.evidence.some((e) => e.repo && ids.has(e.repo)));
93
+ const cat = catalogDirOf(root);
94
+ const before = await readCatalog(join(cat, "generated"), { cacheRoot: root });
95
+ const after = await readCatalog(join(cat, "branches", branchSlug(branch), "generated"), {
96
+ cacheRoot: root
97
+ });
98
+ const d = diffCatalogs(ofRepos(before.records), ofRepos(after.records));
99
+ return {
100
+ branch,
101
+ scannedAt: scan.scannedAt,
102
+ repos: scan.repos,
103
+ added: d.added.map(key),
104
+ removed: d.removed.map(key),
105
+ changed: d.changed.map((c) => ({ record: key(c), fields: c.fields }))
106
+ };
107
+ }
108
+ var RepoEditError = class extends Error {
109
+ code;
110
+ constructor(code, message) {
111
+ super(message);
112
+ this.code = code;
113
+ }
114
+ };
115
+ async function editRepoBranches(root, repoId, set) {
116
+ const repo = (await loadRepos(root)).find((r) => r.id === repoId);
117
+ if (!repo)
118
+ throw new RepoEditError("not-found", `There is no repo ${repoId} in any manifest.`);
119
+ const rel = `org-pack/profiles/${repo.platform}/repos.manifest.yaml`;
120
+ const file = join(orgPackDirOf(root), "profiles", repo.platform, "repos.manifest.yaml");
121
+ const doc = (0, import_yaml.parseDocument)(await readFile(file, "utf8"));
122
+ const list = doc.get("repos");
123
+ const item = (0, import_yaml.isSeq)(list) ? list.items.find((x) => (0, import_yaml.isMap)(x) && x.get("id") === repoId) : void 0;
124
+ if (!(0, import_yaml.isMap)(item))
125
+ throw new RepoEditError("not-found", `${rel} doesn't list ${repoId}.`);
126
+ const branches = set.branches?.map((b) => b.trim()).filter(Boolean);
127
+ const def = set.defaultBranch?.trim() || repo.defaultBranch;
128
+ if (branches?.includes(def))
129
+ throw new RepoEditError("invalid", `${def} is the default branch: its catalog is the baseline, so it isn't one of the branches scanned beside it.`);
130
+ if (set.defaultBranch?.trim())
131
+ item.set("defaultBranch", set.defaultBranch.trim());
132
+ if (branches) {
133
+ if (branches.length)
134
+ item.set("branches", doc.createNode([...new Set(branches)]));
135
+ else
136
+ item.delete("branches");
137
+ }
138
+ const check = RepoManifest.safeParse(doc.toJS());
139
+ if (!check.success)
140
+ throw new RepoEditError("invalid", check.error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; "));
141
+ await writeFileAtomic(file, doc.toString({ flowCollectionPadding: true }));
142
+ return rel;
143
+ }
144
+ async function editRepoDescription(root, repoId, set, o = {}) {
145
+ const repo = (await loadRepos(root)).find((r) => r.id === repoId);
146
+ if (!repo)
147
+ throw new RepoEditError("not-found", `There is no repo ${repoId} in any manifest.`);
148
+ const now = o.now ?? /* @__PURE__ */ new Date();
149
+ let next;
150
+ if (!set.reject) {
151
+ const text = set.text?.trim() || (set.accept ? repo.description?.text : void 0);
152
+ if (!text)
153
+ throw new RepoEditError("invalid", set.accept ? `${repoId} has no drafted description to confirm. Write one instead.` : `Say what ${repoId} is, in one line.`);
154
+ if (text.length > REPO_DESCRIPTION_MAX)
155
+ throw new RepoEditError("invalid", `That is ${text.length} characters; a description is one line, up to ${REPO_DESCRIPTION_MAX}.`);
156
+ const by = o.by ?? await gitUser(root).then((u) => u.handle, () => "someone");
157
+ next = RepoDescription.parse({
158
+ text,
159
+ trust: "verified",
160
+ by,
161
+ at: now.toISOString().replace(/\.\d{3}Z$/, "Z")
162
+ });
163
+ } else if (!repo.description)
164
+ throw new RepoEditError("invalid", `${repoId} has no description to drop.`);
165
+ try {
166
+ const f = await setManifestDescription(root, repoId, next);
167
+ return { file: f.rel, ...next ? { description: next } : {} };
168
+ } catch (e) {
169
+ if (e instanceof ManifestEditError)
170
+ throw new RepoEditError(e.code === "not-found" ? "not-found" : "invalid", e.message);
171
+ throw e;
172
+ }
173
+ }
174
+ export {
175
+ RepoEditError,
176
+ compareBranch,
177
+ editRepoBranches,
178
+ editRepoDescription,
179
+ repoBranches
180
+ };
@@ -0,0 +1,50 @@
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
+ runOpenSpecRaw
8
+ } from "./chunk-MGVYVW7Q.js";
9
+ import {
10
+ changesDirOf
11
+ } from "./chunk-577AJVRS.js";
12
+ import "./chunk-D3PO4DOZ.js";
13
+ import "./chunk-TV45EUGM.js";
14
+
15
+ // packages/cli/dist/openspec-run-commands.js
16
+ import { readdir } from "node:fs/promises";
17
+ var CHANGE_FLAG = (a) => a === "--change" || a === "-c" || a.startsWith("--change=") || a.startsWith("-c=");
18
+ async function openChanges(root) {
19
+ return (await readdir(changesDirOf(root), { withFileTypes: true }).catch(() => [])).filter((d) => d.isDirectory() && d.name !== "archive").map((d) => d.name).sort();
20
+ }
21
+ var NEEDS_CHANGE = /* @__PURE__ */ new Set(["status", "instructions", "show"]);
22
+ async function openspecRun(root, args, io) {
23
+ if (!args.length) {
24
+ io.err("Usage: atticus openspec <openspec arguments>, for example: atticus openspec status, atticus openspec instructions apply. atticus openspec setup and atticus openspec check are Atticus's own.");
25
+ return 2;
26
+ }
27
+ let full = [...args];
28
+ let note;
29
+ if (NEEDS_CHANGE.has(args[0]) && !args.some(CHANGE_FLAG)) {
30
+ const changes = await openChanges(root);
31
+ if (changes.length === 1) {
32
+ full = [...full, "--change", changes[0]];
33
+ note = `Only one change is open, so: openspec ${full.join(" ")}`;
34
+ } else if (changes.length > 1)
35
+ note = `${changes.length} changes are open (${changes.join(", ")}); add --change <id> to name one.`;
36
+ }
37
+ if (note)
38
+ io.out(note);
39
+ const r = await runOpenSpecRaw(full, { root });
40
+ for (const l of r.stdout.replace(/\n$/, "").split("\n"))
41
+ if (l !== "")
42
+ io.out(l);
43
+ for (const l of r.stderr.replace(/\n$/, "").split("\n"))
44
+ if (l !== "")
45
+ io.err(l);
46
+ return r.exitCode ?? 1;
47
+ }
48
+ export {
49
+ openspecRun
50
+ };
@@ -0,0 +1,33 @@
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
+ denyHash,
8
+ denyHashesAt,
9
+ intakeTraffic,
10
+ linkEvidenceAbout,
11
+ linkEvidenceLines,
12
+ loadLinkEvidence,
13
+ repoContractsOf,
14
+ writeRepoContracts
15
+ } from "./chunk-GXJVY6WT.js";
16
+ import "./chunk-R4TBNKKC.js";
17
+ import "./chunk-NIXVDQVO.js";
18
+ import "./chunk-UR7RMZ3R.js";
19
+ import "./chunk-MKRBG5EF.js";
20
+ import "./chunk-5XDNUJ4P.js";
21
+ import "./chunk-577AJVRS.js";
22
+ import "./chunk-D3PO4DOZ.js";
23
+ import "./chunk-TV45EUGM.js";
24
+ export {
25
+ denyHash,
26
+ denyHashesAt,
27
+ intakeTraffic,
28
+ linkEvidenceAbout,
29
+ linkEvidenceLines,
30
+ loadLinkEvidence,
31
+ repoContractsOf,
32
+ writeRepoContracts
33
+ };