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

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 (509) 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-23VFQHFQ.js +827 -0
  6. package/dist/chunk-26DBAGOP.js +315 -0
  7. package/dist/chunk-27EDZN52.js +115 -0
  8. package/dist/chunk-2K2ZEJVR.js +252 -0
  9. package/dist/chunk-3DDJLI7N.js +1081 -0
  10. package/dist/chunk-3G4YI4ZU.js +16 -0
  11. package/dist/chunk-3LU6YCSQ.js +3507 -0
  12. package/dist/chunk-3WU7LVTL.js +203 -0
  13. package/dist/chunk-4AYZQ3SY.js +285 -0
  14. package/dist/chunk-4ONORLK5.js +234 -0
  15. package/dist/chunk-4Q3NN7VF.js +32 -0
  16. package/dist/chunk-4SKZDI62.js +22 -0
  17. package/dist/chunk-4URR24DD.js +189 -0
  18. package/dist/chunk-4UZJOQYK.js +70 -0
  19. package/dist/chunk-4Y4FY34K.js +34 -0
  20. package/dist/chunk-4YWRU7JK.js +80 -0
  21. package/dist/chunk-52WCHTVZ.js +41 -0
  22. package/dist/chunk-55TBYJF2.js +36 -0
  23. package/dist/chunk-5ACUW753.js +240 -0
  24. package/dist/chunk-5BJFMAQU.js +32 -0
  25. package/dist/chunk-5ICB2BXH.js +33 -0
  26. package/dist/chunk-5NZSJ5ZG.js +60 -0
  27. package/dist/chunk-5P5BGG5L.js +307 -0
  28. package/dist/chunk-5RUMHLIS.js +104 -0
  29. package/dist/chunk-5TY4DTHQ.js +242 -0
  30. package/dist/chunk-5V5BJACL.js +2929 -0
  31. package/dist/chunk-6E2GJANQ.js +52 -0
  32. package/dist/chunk-6N2GUZMZ.js +471 -0
  33. package/dist/chunk-6RGIM2ZH.js +2069 -0
  34. package/dist/chunk-6V3DTQWK.js +391 -0
  35. package/dist/chunk-76WKMA4J.js +14 -0
  36. package/dist/chunk-77RSRG3A.js +104 -0
  37. package/dist/chunk-7A7IG7OA.js +2007 -0
  38. package/dist/chunk-7EFILTCI.js +67 -0
  39. package/dist/chunk-7HQOZALR.js +180 -0
  40. package/dist/chunk-7HWXYP4H.js +1217 -0
  41. package/dist/chunk-7J7UY46S.js +688 -0
  42. package/dist/chunk-7KXYMC2P.js +38 -0
  43. package/dist/chunk-7LCQ7JAM.js +55 -0
  44. package/dist/chunk-7RGCQ4VZ.js +22 -0
  45. package/dist/chunk-7RUMD56V.js +26 -0
  46. package/dist/chunk-7S3XFWOU.js +251 -0
  47. package/dist/chunk-7SZPENUP.js +32 -0
  48. package/dist/chunk-7VFVQX5K.js +105 -0
  49. package/dist/chunk-ACWQDL6T.js +37 -0
  50. package/dist/chunk-ANCI3LFS.js +25 -0
  51. package/dist/chunk-ASKDCMW5.js +275 -0
  52. package/dist/chunk-ATNG5VOZ.js +122 -0
  53. package/dist/chunk-B3QOYE74.js +58 -0
  54. package/dist/chunk-B3UHYXHU.js +41 -0
  55. package/dist/chunk-BA5DTXHQ.js +250 -0
  56. package/dist/chunk-BKFGGJKA.js +2743 -0
  57. package/dist/chunk-BQNEHB5U.js +212 -0
  58. package/dist/chunk-BUWSOQLU.js +131 -0
  59. package/dist/chunk-BX52REMA.js +134 -0
  60. package/dist/chunk-BXBCMGIQ.js +82 -0
  61. package/dist/chunk-C2YGYTU6.js +408 -0
  62. package/dist/chunk-C5JFMAXX.js +102 -0
  63. package/dist/chunk-C75W7VXX.js +42 -0
  64. package/dist/chunk-CAN3EBE5.js +1726 -0
  65. package/dist/chunk-CE4S5ZY3.js +182 -0
  66. package/dist/chunk-CRQ73DIF.js +25 -0
  67. package/dist/chunk-CZI2ACNT.js +36 -0
  68. package/dist/chunk-D7MWYJZF.js +43 -0
  69. package/dist/chunk-DDAEAZEV.js +54 -0
  70. package/dist/chunk-DGKNOPSE.js +549 -0
  71. package/dist/chunk-DQNKG4HY.js +906 -0
  72. package/dist/chunk-DS3ZEJVN.js +22 -0
  73. package/dist/chunk-DYWTQXP4.js +108 -0
  74. package/dist/chunk-E25G46RW.js +54 -0
  75. package/dist/chunk-EADP3PEN.js +450 -0
  76. package/dist/chunk-EAQFRD2B.js +430 -0
  77. package/dist/chunk-EATSD7YD.js +41 -0
  78. package/dist/chunk-EBWIOODZ.js +339 -0
  79. package/dist/chunk-EHUYLNLC.js +282 -0
  80. package/dist/chunk-EI4KQYJ3.js +1496 -0
  81. package/dist/chunk-EQOSXLK3.js +49 -0
  82. package/dist/chunk-EV4TEFOD.js +16667 -0
  83. package/dist/chunk-EW7MRMD5.js +312 -0
  84. package/dist/chunk-EZSZFI54.js +531 -0
  85. package/dist/chunk-FMRMTI7W.js +1142 -0
  86. package/dist/chunk-FOQXYMOR.js +46 -0
  87. package/dist/chunk-G3PBLW4K.js +246 -0
  88. package/dist/chunk-G7WZH54P.js +221 -0
  89. package/dist/chunk-GG6HIU74.js +211 -0
  90. package/dist/chunk-GMJXC5AL.js +27809 -0
  91. package/dist/chunk-GPLFYLGH.js +130 -0
  92. package/dist/chunk-GVFUEGGM.js +19943 -0
  93. package/dist/chunk-GWSWS264.js +130 -0
  94. package/dist/chunk-H4VJO3M2.js +229 -0
  95. package/dist/chunk-HGQZTUAC.js +415 -0
  96. package/dist/chunk-HOUUBE74.js +166 -0
  97. package/dist/chunk-HQMCHHY5.js +155 -0
  98. package/dist/chunk-HR4DVO6X.js +374 -0
  99. package/dist/chunk-HZYFLEWO.js +39 -0
  100. package/dist/chunk-IA2RKC6I.js +279 -0
  101. package/dist/chunk-IILZ7J3L.js +5548 -0
  102. package/dist/chunk-IRW64JFF.js +247 -0
  103. package/dist/chunk-IVHN2VYG.js +1526 -0
  104. package/dist/chunk-IWZPGIGT.js +856 -0
  105. package/dist/chunk-IY4PHPHT.js +15 -0
  106. package/dist/chunk-J27QGXO4.js +1247 -0
  107. package/dist/chunk-JBSD57N7.js +324 -0
  108. package/dist/chunk-JEUXCIRD.js +120 -0
  109. package/dist/chunk-JMOLB347.js +46388 -0
  110. package/dist/chunk-JQX6BSE4.js +130 -0
  111. package/dist/chunk-JRPQX2EK.js +376 -0
  112. package/dist/chunk-JUQHYTXN.js +45 -0
  113. package/dist/chunk-JUZ75OG4.js +344 -0
  114. package/dist/chunk-KIWEBM6G.js +378 -0
  115. package/dist/chunk-KLKENMWQ.js +891 -0
  116. package/dist/chunk-KQDZXGNR.js +14 -0
  117. package/dist/chunk-KQK6SQPE.js +48 -0
  118. package/dist/chunk-KQRYW7OS.js +4108 -0
  119. package/dist/chunk-KU4T2CXJ.js +116 -0
  120. package/dist/chunk-KXZR2BLL.js +53 -0
  121. package/dist/chunk-L7I5PKGD.js +915 -0
  122. package/dist/chunk-LDIARP6F.js +31 -0
  123. package/dist/chunk-LEHZTKB3.js +34 -0
  124. package/dist/chunk-LS3WR2RF.js +1071 -0
  125. package/dist/chunk-LUPW4WLK.js +526 -0
  126. package/dist/chunk-LVBPY2M6.js +406 -0
  127. package/dist/chunk-LZWVK4YY.js +169 -0
  128. package/dist/chunk-MCWWMMLN.js +48 -0
  129. package/dist/chunk-MKC7P5LD.js +32 -0
  130. package/dist/chunk-MKFYQQ5Q.js +36 -0
  131. package/dist/chunk-MKIULIUQ.js +273 -0
  132. package/dist/chunk-MMB2OHUY.js +263 -0
  133. package/dist/chunk-MQNBEO3N.js +2610 -0
  134. package/dist/chunk-MSL3CLHX.js +545 -0
  135. package/dist/chunk-MV4637YA.js +174 -0
  136. package/dist/chunk-MYKQVS5W.js +296 -0
  137. package/dist/chunk-MYOW3RPC.js +143 -0
  138. package/dist/chunk-NBGBMRIS.js +25 -0
  139. package/dist/chunk-NBQO75XT.js +287 -0
  140. package/dist/chunk-NCR24CPV.js +41 -0
  141. package/dist/chunk-NDW4ROST.js +38 -0
  142. package/dist/chunk-NELU7LSL.js +3208 -0
  143. package/dist/chunk-NG5R2WIY.js +2919 -0
  144. package/dist/chunk-NH5QH3WS.js +119 -0
  145. package/dist/chunk-NIYB5K5B.js +583 -0
  146. package/dist/chunk-NR5T46ZY.js +49 -0
  147. package/dist/chunk-NX6QEEOA.js +163 -0
  148. package/dist/chunk-O6ILVBYB.js +18 -0
  149. package/dist/chunk-OFWYZH6B.js +230 -0
  150. package/dist/chunk-OHXTB6CO.js +50 -0
  151. package/dist/chunk-OJN7WME4.js +34 -0
  152. package/dist/chunk-OR5VRULZ.js +226 -0
  153. package/dist/chunk-ORZSD2KD.js +55 -0
  154. package/dist/chunk-OXVVRJDQ.js +66 -0
  155. package/dist/chunk-PQW7PYUR.js +2522 -0
  156. package/dist/chunk-Q32Y5T2U.js +27 -0
  157. package/dist/chunk-QWHTTA2X.js +130 -0
  158. package/dist/chunk-R3RVFCJ2.js +76 -0
  159. package/dist/chunk-R3VFLYZZ.js +400 -0
  160. package/dist/chunk-R6RY4Q5T.js +51 -0
  161. package/dist/chunk-R6UTCLH5.js +166 -0
  162. package/dist/chunk-RB2VSED2.js +231 -0
  163. package/dist/chunk-REWZE2XI.js +53 -0
  164. package/dist/chunk-RIEFYHXI.js +162 -0
  165. package/dist/chunk-RJDP642F.js +101 -0
  166. package/dist/chunk-RWMSJP7H.js +279 -0
  167. package/dist/chunk-S2FDPN32.js +41 -0
  168. package/dist/chunk-S5LSDXV4.js +40 -0
  169. package/dist/chunk-S7ZWCMDO.js +192 -0
  170. package/dist/chunk-SG5KY4VB.js +69 -0
  171. package/dist/chunk-SH7AZZDA.js +69 -0
  172. package/dist/chunk-SILY6ZEZ.js +104 -0
  173. package/dist/chunk-SINJKQSI.js +34 -0
  174. package/dist/chunk-SIUDWWKS.js +47 -0
  175. package/dist/chunk-SKMHS4CL.js +766 -0
  176. package/dist/chunk-SNHOLLGN.js +280 -0
  177. package/dist/chunk-SUQZGPVG.js +119 -0
  178. package/dist/chunk-T6ESD5KM.js +6115 -0
  179. package/dist/chunk-TC3KTG33.js +221 -0
  180. package/dist/chunk-TCADP67G.js +101 -0
  181. package/dist/chunk-TEBBD4XH.js +7923 -0
  182. package/dist/chunk-TGEOLIAK.js +149 -0
  183. package/dist/chunk-TQYBXDVH.js +133 -0
  184. package/dist/chunk-TV45EUGM.js +51 -0
  185. package/dist/chunk-TZXHUDI6.js +233 -0
  186. package/dist/chunk-U5PDQTLA.js +50 -0
  187. package/dist/chunk-U6YKL7SI.js +334 -0
  188. package/dist/chunk-UABFFMWH.js +2078 -0
  189. package/dist/chunk-UFBKJOWB.js +325 -0
  190. package/dist/chunk-UFTQIK2J.js +43 -0
  191. package/dist/chunk-UNFCFJMF.js +95 -0
  192. package/dist/chunk-UTR67XU2.js +164 -0
  193. package/dist/chunk-V4XKYGLK.js +405 -0
  194. package/dist/chunk-VOGCSYOI.js +16 -0
  195. package/dist/chunk-VYNZED7B.js +53 -0
  196. package/dist/chunk-WCLAOKCH.js +540 -0
  197. package/dist/chunk-WFYHOXTB.js +29 -0
  198. package/dist/chunk-WGU6NIUV.js +113 -0
  199. package/dist/chunk-WIMOJMAK.js +3702 -0
  200. package/dist/chunk-WKXOEIOY.js +184 -0
  201. package/dist/chunk-WUE6HKIU.js +790 -0
  202. package/dist/chunk-WUP77GG2.js +56 -0
  203. package/dist/chunk-XF3DATVU.js +150 -0
  204. package/dist/chunk-XJAJQGXJ.js +18 -0
  205. package/dist/chunk-XKJRPVJO.js +3898 -0
  206. package/dist/chunk-XNRPCI23.js +3851 -0
  207. package/dist/chunk-XOVLGBKI.js +214 -0
  208. package/dist/chunk-XPJR74MA.js +562 -0
  209. package/dist/chunk-XPWSNKF3.js +5619 -0
  210. package/dist/chunk-XR5DD5DQ.js +104 -0
  211. package/dist/chunk-XZJE6WIT.js +706 -0
  212. package/dist/chunk-XZRON6IV.js +131 -0
  213. package/dist/chunk-Y5AYBGLB.js +368 -0
  214. package/dist/chunk-YLAM4HZH.js +95 -0
  215. package/dist/chunk-YVCOQ5TZ.js +47 -0
  216. package/dist/chunk-YWOMGMZB.js +94 -0
  217. package/dist/chunk-YWZDAZMA.js +18 -0
  218. package/dist/chunk-Z2EYRUOH.js +172 -0
  219. package/dist/chunk-Z46OXTBE.js +1611 -0
  220. package/dist/chunk-ZHWSL6SR.js +45 -0
  221. package/dist/chunk-ZJQUIG3A.js +87 -0
  222. package/dist/chunk-ZKUDS7JG.js +310 -0
  223. package/dist/chunk-ZTNS3L5Z.js +1019 -0
  224. package/dist/files.json +2024 -0
  225. package/dist/fixtures/forge/README.md +19 -0
  226. package/dist/fixtures/forge/expected/discrepancies.yaml +54 -0
  227. package/dist/fixtures/forge/expected/inputs.yaml +38 -0
  228. package/dist/fixtures/forge/expected/scan.yaml +342 -0
  229. package/dist/fixtures/forge/inputs/diagrams/forge-context.drawio +23 -0
  230. package/dist/fixtures/forge/inputs/partner-specs/northwind-pay-openapi.yaml +11 -0
  231. package/dist/fixtures/forge/inputs/tickets/ado-stories.json +4 -0
  232. package/dist/fixtures/forge/inputs/tickets/closed-service-requests.json +5 -0
  233. package/dist/fixtures/forge/inputs/wiki/integration-patterns.md +11 -0
  234. package/dist/fixtures/forge/inputs/wiki/ledger-solution-spec.md +9 -0
  235. package/dist/fixtures/forge/inputs/wiki/snow-firewall-request.md +4 -0
  236. package/dist/fixtures/forge/metarepo/judgments/reaches/84af5b6af24f7ca8c23013f3.yaml +17 -0
  237. package/dist/fixtures/forge/metarepo/judgments/reaches/c3917555edebddce8cecb647.yaml +17 -0
  238. package/dist/fixtures/forge/metarepo/judgments/reaches/c5fafd6601f8ca9e34e0bbd0.yaml +17 -0
  239. package/dist/fixtures/forge/metarepo/org-pack/agents/architecture-critic.yaml +9 -0
  240. package/dist/fixtures/forge/metarepo/org-pack/agents/story-writer.yaml +10 -0
  241. package/dist/fixtures/forge/metarepo/org-pack/checklists/architecture.yaml +115 -0
  242. package/dist/fixtures/forge/metarepo/org-pack/dialects/forge.yaml +111 -0
  243. package/dist/fixtures/forge/metarepo/org-pack/gates.yaml +22 -0
  244. package/dist/fixtures/forge/metarepo/org-pack/pack.yaml +11 -0
  245. package/dist/fixtures/forge/metarepo/org-pack/patterns/A.EB.PUB.yaml +12 -0
  246. package/dist/fixtures/forge/metarepo/org-pack/patterns/D.JDBC.yaml +12 -0
  247. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.DIR.BFF.yaml +12 -0
  248. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.GW.SOR.yaml +13 -0
  249. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.GW.VND.yaml +14 -0
  250. package/dist/fixtures/forge/metarepo/org-pack/process/change-templates/feature.md +37 -0
  251. package/dist/fixtures/forge/metarepo/org-pack/process/skills/add-forge-endpoint/SKILL.md +17 -0
  252. package/dist/fixtures/forge/metarepo/org-pack/process/snow/firewall-rule.yaml +14 -0
  253. package/dist/fixtures/forge/metarepo/org-pack/process/snow/gateway-route.yaml +13 -0
  254. package/dist/fixtures/forge/metarepo/org-pack/profiles/forge/profile.yaml +12 -0
  255. package/dist/fixtures/forge/metarepo/org-pack/profiles/forge/repos.manifest.yaml +44 -0
  256. package/dist/fixtures/forge/metarepo/org-pack/roles.yaml +14 -0
  257. package/dist/fixtures/forge/metarepo/org-pack/runtime.yaml +14 -0
  258. package/dist/fixtures/forge/metarepo/org-pack/sources.yaml +3 -0
  259. package/dist/fixtures/forge/repos/forge-events/topics/payments.initiated.yaml +4 -0
  260. package/dist/fixtures/forge/repos/forge-events/topics/transfers.completed.yaml +4 -0
  261. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/ledger-v1.xml +3 -0
  262. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/policies/SpikeArrest.xml +3 -0
  263. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/policies/VerifyOAuth.xml +4 -0
  264. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/proxies/default.xml +14 -0
  265. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/targets/ledger.xml +5 -0
  266. package/dist/fixtures/forge/repos/forge-infra/alerts/ledger-api.yaml +5 -0
  267. package/dist/fixtures/forge/repos/forge-infra/k8s/ledger-api.yaml +15 -0
  268. package/dist/fixtures/forge/repos/forge-infra/k8s/portal-bff.yaml +7 -0
  269. package/dist/fixtures/forge/repos/forge-infra/terraform/ledger-db.tf +9 -0
  270. package/dist/fixtures/forge/repos/forge-ledger/api/ledger-openapi.yaml +31 -0
  271. package/dist/fixtures/forge/repos/forge-ledger/forge.yaml +4 -0
  272. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/LedgerEndpoints.java +13 -0
  273. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/LedgerEvents.java +11 -0
  274. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/NorthwindClient.java +10 -0
  275. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/application.yml +3 -0
  276. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/db/migration/V1__create_account.sql +5 -0
  277. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/db/migration/V2__create_entry.sql +7 -0
  278. package/dist/fixtures/forge/repos/forge-portal-bff/pom.xml +1 -0
  279. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/AuditPublisher.java +12 -0
  280. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/BalanceController.java +16 -0
  281. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/LedgerClient.java +13 -0
  282. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/PaymentEvents.java +13 -0
  283. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/resources/application.yml +8 -0
  284. package/dist/fixtures/forge/repos/forge-portal-ui/package.json +1 -0
  285. package/dist/fixtures/forge/repos/forge-portal-ui/src/api/balance.ts +5 -0
  286. package/dist/fixtures/forge/repos/forge-reports-job/src/main/java/forge/reports/DailyEntriesJob.java +19 -0
  287. package/dist/fixtures/forge/repos/forge-reports-job/src/main/resources/application.yml +3 -0
  288. package/dist/fixtures/forge-change/README.md +41 -0
  289. package/dist/fixtures/forge-change/expected/findings.yaml +301 -0
  290. package/dist/fixtures/forge-change/expected/stories.yaml +101 -0
  291. package/dist/fixtures/forge-change/judgments/personal-data/0b5f3dbf5257a22275d8c74b.yaml +18 -0
  292. package/dist/fixtures/forge-change/judgments/personal-data/2759a66770134c417440bf2d.yaml +18 -0
  293. package/dist/fixtures/forge-change/judgments/personal-data/31b1ea2f14d0737f1aca79fd.yaml +18 -0
  294. package/dist/fixtures/forge-change/judgments/personal-data/49afd70c08228e65ad6ca1ed.yaml +18 -0
  295. package/dist/fixtures/forge-change/judgments/personal-data/761cabcb8a39f5e5866d2dd6.yaml +18 -0
  296. package/dist/fixtures/forge-change/judgments/personal-data/adae902b90cc8ffa0c765145.yaml +18 -0
  297. package/dist/fixtures/forge-change/judgments/personal-data/ba11bb933105ec9493e065dd.yaml +18 -0
  298. package/dist/fixtures/forge-change/judgments/personal-data/bdbcd1cdac3021c68063c3e7.yaml +18 -0
  299. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/brief.md +35 -0
  300. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/change.yaml +120 -0
  301. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/data.md +18 -0
  302. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/design.md +29 -0
  303. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/interfaces.md +17 -0
  304. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/mappings.md +26 -0
  305. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/proposal.md +35 -0
  306. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/snow.md +12 -0
  307. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/specs/transfer-limits/spec.md +19 -0
  308. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s1-refuse-over-limit.md +17 -0
  309. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s2-show-remaining.md +16 -0
  310. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s3-audit-refusals.md +18 -0
  311. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s4-velocity-check.md +16 -0
  312. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories.md +8 -0
  313. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/tasks.md +12 -0
  314. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/ux.md +7 -0
  315. package/dist/fixtures/forge-change/org-pack/agents/code-and-test-critic.yaml +13 -0
  316. package/dist/fixtures/forge-change/org-pack/agents/complete-critic.yaml +12 -0
  317. package/dist/fixtures/forge-change/org-pack/agents/safe-critic.yaml +12 -0
  318. package/dist/fixtures/forge-change/org-pack/agents/ship-critic.yaml +11 -0
  319. package/dist/fixtures/forge-change/org-pack/agents/true-critic.yaml +11 -0
  320. package/dist/fixtures/forge-change/org-pack/checklists/review.yaml +54 -0
  321. package/dist/fixtures/forge-change/org-pack/gates.yaml +25 -0
  322. package/dist/fixtures/forge-change/org-pack/teams/team-ledger/checklists/ledger-team.yaml +227 -0
  323. package/dist/fixtures/forge-change/recordings/complete-critic/2ad84f84bf39c1d5412697e69fe23034d6983ec45a00314bf0975e627589a3c5.json +12 -0
  324. package/dist/fixtures/forge-change/recordings/complete-critic/417c98d8e54a4387d0fd93441c49f44c2868958739070d855c1dce0c41e24db3.json +12 -0
  325. package/dist/fixtures/forge-change/recordings/complete-critic/50203ee22e9cb3ef047295edb6538fe7d5695e1e4b139f3c929013dc6ce47021.json +12 -0
  326. package/dist/fixtures/forge-change/recordings/complete-critic/89f18d67f5d9c325bf35e2a9e020f9ddb6ee13b8523315037f0905cc57c040b1.json +12 -0
  327. package/dist/fixtures/forge-change/recordings/complete-critic/b4097867d26ae8eadc8b9efa8cdd86897013358035f0b40086c299a59c4ba121.json +12 -0
  328. package/dist/fixtures/forge-change/recordings/safe-critic/302d06f49664dd67ad2e21ab9cf74c1b0f7d3f750709c6ed8eff2b70983274e2.json +12 -0
  329. package/dist/fixtures/forge-change/recordings/safe-critic/32f1049c9a5ab4a759543290db4644ec6e221cc45fdfdcf06193837c6a8ce0b9.json +12 -0
  330. package/dist/fixtures/forge-change/recordings/safe-critic/4e4a84bfc04b9f26ca4250319a879901ff7a1c081c71e46a117675fee05026b0.json +12 -0
  331. package/dist/fixtures/forge-change/recordings/safe-critic/604af0fcdd6df6b76208fa88305fdc15c37606c2a4d1ae816477e46ac8c2dd04.json +12 -0
  332. package/dist/fixtures/forge-change/recordings/safe-critic/f0bf50af11f14c50d07904f0dffe1c8c20fb0cd89770645a8824c1d30a443955.json +12 -0
  333. package/dist/fixtures/forge-change/recordings/ship-critic/350954b58833b2c04880c67db45a1b328b7fd541d9f0d943b63905b8875488a6.json +12 -0
  334. package/dist/fixtures/forge-change/recordings/ship-critic/4af95c6c96a206777cec9de1f9c2d8c55a36ddc9b8db2f81d6eb83217b835efa.json +12 -0
  335. package/dist/fixtures/forge-change/recordings/ship-critic/76c34522a49cf7587a4e5689a5030d384603fa780b8aba97d27815cbc829683e.json +12 -0
  336. package/dist/fixtures/forge-change/recordings/ship-critic/a3b2cd1ace48587e5994333db03b34c3a0f9dec4f1932f1730ddfb687f6918c8.json +12 -0
  337. package/dist/fixtures/forge-change/recordings/ship-critic/de288a4fa64d0fc20890f9a787080ce6eac5203b7b9b72d884df11e8cf111835.json +12 -0
  338. package/dist/fixtures/forge-change/recordings/story-writer/1ddb00eac2aaf91a5ec5d9dfd220116be9f75aec6546a4a3a3b050ed89af2864.json +12 -0
  339. package/dist/packages/assistant-kit/frameworks-kit/README.md +86 -0
  340. package/dist/packages/assistant-kit/frameworks-kit/checklist.md +11 -0
  341. package/dist/packages/assistant-kit/frameworks-kit/examples/tide-lantern.yaml +56 -0
  342. package/dist/packages/assistant-kit/frameworks-kit/examples/tide-platform.yaml +43 -0
  343. package/dist/packages/assistant-kit/frameworks-kit/prompts/write-framework-model.md +12 -0
  344. package/dist/packages/assistant-kit/kit/README.md +98 -0
  345. package/dist/packages/assistant-kit/kit/c2-reference.md +334 -0
  346. package/dist/packages/assistant-kit/kit/checklist.md +39 -0
  347. package/dist/packages/assistant-kit/kit/examples/house-http-client.yaml +102 -0
  348. package/dist/packages/assistant-kit/kit/examples/tide-apigee.yaml +56 -0
  349. package/dist/packages/assistant-kit/kit/examples/tide-apim.yaml +32 -0
  350. package/dist/packages/assistant-kit/kit/examples/tide-kong.yaml +44 -0
  351. package/dist/packages/assistant-kit/kit/prompts/write-dialect.md +34 -0
  352. package/dist/packages/assistant-kit/kit/worked-example.md +198 -0
  353. package/dist/packages/conformance/sample/README.md +4 -0
  354. package/dist/packages/conformance/sample/inputs/notes.md +3 -0
  355. package/dist/packages/conformance/sample/inputs/systems.csv +3 -0
  356. package/dist/packages/conformance/sample/repo/api/greeter.proto +6 -0
  357. package/dist/packages/conformance/sample/repo/api/openapi.yaml +10 -0
  358. package/dist/packages/conformance/sample/repo/api/schema.graphql +3 -0
  359. package/dist/packages/conformance/sample/repo/db/V1__create_greeting.sql +4 -0
  360. package/dist/packages/conformance/sample/repo/package.json +7 -0
  361. package/dist/packages/conformance/sample/repo/src/main/java/sample/HelloController.java +10 -0
  362. package/dist/packages/conformance/sample/repo/web/app.ts +4 -0
  363. package/dist/packages/evals/datasets/critic-lenses.yaml +62 -0
  364. package/dist/packages/evals/datasets/dialect-writer.yaml +14 -0
  365. package/dist/packages/evals/datasets/feature-namer.yaml +34 -0
  366. package/dist/packages/evals/datasets/glossary-definer.yaml +25 -0
  367. package/dist/packages/evals/datasets/story-writer.yaml +13 -0
  368. package/dist/packages/evals/datasets/template-writer.yaml +16 -0
  369. package/dist/packages/evals/datasets/test-writer.yaml +18 -0
  370. package/dist/packages/executors/reference/reference-executor.mjs +233 -0
  371. package/dist/packages/extractors/dialects/argocd.yaml +45 -0
  372. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/AccountResource.java +47 -0
  373. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/AuditClient.java +12 -0
  374. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/LedgerClient.java +17 -0
  375. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/LedgerClient.java +14 -0
  376. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/RatesClient.java +11 -0
  377. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/StatementController.java +36 -0
  378. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/resources/application.yml +7 -0
  379. package/dist/packages/extractors/dialects/fixtures/quarkus-reactive-messaging/fraud-service/src/main/java/forge/fraud/FraudScorer.java +27 -0
  380. package/dist/packages/extractors/dialects/fixtures/quarkus-reactive-messaging/fraud-service/src/main/resources/application.properties +4 -0
  381. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/api.tf +38 -0
  382. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/main.tf +95 -0
  383. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/terraform.tfvars +1 -0
  384. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/variables.tf +4 -0
  385. package/dist/packages/extractors/dialects/fixtures/terraform-azure/forge-azure-infra/main.tf +102 -0
  386. package/dist/packages/extractors/dialects/fixtures/terraform-gcp/forge-gcp-infra/main.tf +51 -0
  387. package/dist/packages/extractors/dialects/harness.yaml +101 -0
  388. package/dist/packages/extractors/dialects/jaxrs.yaml +155 -0
  389. package/dist/packages/extractors/dialects/micronaut.yaml +207 -0
  390. package/dist/packages/extractors/dialects/quarkus-reactive-messaging.yaml +158 -0
  391. package/dist/packages/extractors/dialects/tekton.yaml +71 -0
  392. package/dist/packages/extractors/dialects/terraform-aws.yaml +267 -0
  393. package/dist/packages/extractors/dialects/terraform-azure.yaml +212 -0
  394. package/dist/packages/extractors/dialects/terraform-gcp.yaml +109 -0
  395. package/dist/packages/extractors/grammars/README.md +11 -0
  396. package/dist/packages/extractors/grammars/tree-sitter-groovy.LICENSE +21 -0
  397. package/dist/packages/extractors/grammars/tree-sitter-groovy.wasm +0 -0
  398. package/dist/packages/extractors/grammars/vendored.json +11 -0
  399. package/dist/packages/learn/lessons/architect-diagrams-and-code.yaml +69 -0
  400. package/dist/packages/learn/lessons/business-analyst-story-bar.yaml +94 -0
  401. package/dist/packages/learn/lessons/delivery-lead-release-readiness.yaml +44 -0
  402. package/dist/packages/learn/lessons/designer-features-in-user-words.yaml +57 -0
  403. package/dist/packages/learn/lessons/developer-find-your-way.yaml +60 -0
  404. package/dist/packages/learn/lessons/everyone-first-hour.yaml +74 -0
  405. package/dist/packages/learn/lessons/platform-lead-coverage-and-defences.yaml +58 -0
  406. package/dist/packages/learn/lessons/product-owner-first-change.yaml +167 -0
  407. package/dist/packages/learn/lessons/qa-tests-and-trace.yaml +53 -0
  408. package/dist/packages/learn/lessons/team-lead-initiative.yaml +146 -0
  409. package/dist/packages/naysayer/constitution/constitution.yaml +305 -0
  410. package/dist/packages/naysayer/starter/review.yaml +256 -0
  411. package/dist/packages/sdk/npm/index.js +10097 -0
  412. package/dist/packages/speckit/rules/drift.yaml +78 -0
  413. package/dist/packages/taskrun/rules/conform.yaml +38 -0
  414. package/dist/packages/testgen/rules/trace.yaml +49 -0
  415. package/dist/packages/ui/dist/assets/elk-api-DDup23Us.js +2 -0
  416. package/dist/packages/ui/dist/assets/elk-worker.min--dAJroGl.js +6401 -0
  417. package/dist/packages/ui/dist/assets/elk-worker.min-DdYmS5kP.js +2 -0
  418. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-400-normal-BTotfTJu.woff +0 -0
  419. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-400-normal-DZqxrq2p.woff2 +0 -0
  420. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-500-normal-ByOcLdNv.woff +0 -0
  421. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-500-normal-CocWQlwt.woff2 +0 -0
  422. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-600-normal-71GNu3SW.woff2 +0 -0
  423. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-600-normal-BGq0mW3O.woff +0 -0
  424. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-400-normal-Dsrv2Tcn.woff +0 -0
  425. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-400-normal-g30qAdWV.woff2 +0 -0
  426. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-500-normal-Cs5J6C77.woff2 +0 -0
  427. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-500-normal-DB5PtV2g.woff +0 -0
  428. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-600-normal-Bz0x94Yp.woff +0 -0
  429. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-600-normal-DUMzJB7m.woff2 +0 -0
  430. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-400-normal-D9ESIMu3.woff +0 -0
  431. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-400-normal-_efipK4i.woff2 +0 -0
  432. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-500-normal-CuWXN6rf.woff +0 -0
  433. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-500-normal-JMMifIXV.woff2 +0 -0
  434. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-600-normal-D-CqTdkO.woff +0 -0
  435. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-600-normal-DzTrcv_p.woff2 +0 -0
  436. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
  437. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
  438. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
  439. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
  440. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
  441. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
  442. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-400-normal-C5H60-Va.woff2 +0 -0
  443. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-400-normal-RBey6euL.woff +0 -0
  444. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-500-normal-D0aIdm-b.woff +0 -0
  445. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-500-normal-DakdToA3.woff2 +0 -0
  446. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-600-normal-DIrixKbi.woff +0 -0
  447. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-600-normal-DOrvGEcy.woff2 +0 -0
  448. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-400-normal-DG4YqDda.woff2 +0 -0
  449. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-400-normal-fK1oJ5dG.woff +0 -0
  450. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-500-normal-BEb3_waV.woff +0 -0
  451. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-500-normal-e4dixQRQ.woff2 +0 -0
  452. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-600-normal-DgdngZtN.woff +0 -0
  453. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-600-normal-DpPYBSTl.woff2 +0 -0
  454. package/dist/packages/ui/dist/assets/index-C0JEkXyN.css +1 -0
  455. package/dist/packages/ui/dist/assets/index-mTOWhQZm.js +29 -0
  456. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  457. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  458. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff +0 -0
  459. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2 +0 -0
  460. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  461. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  462. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff +0 -0
  463. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2 +0 -0
  464. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  465. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  466. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  467. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  468. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  469. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  470. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2 +0 -0
  471. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff +0 -0
  472. package/dist/packages/ui/dist/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  473. package/dist/packages/ui/dist/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff +0 -0
  474. package/dist/packages/ui/dist/assets/rajdhani-devanagari-600-normal-BtY48IV_.woff +0 -0
  475. package/dist/packages/ui/dist/assets/rajdhani-devanagari-600-normal-DhS7ScYx.woff2 +0 -0
  476. package/dist/packages/ui/dist/assets/rajdhani-devanagari-700-normal-BQQOj9BB.woff2 +0 -0
  477. package/dist/packages/ui/dist/assets/rajdhani-devanagari-700-normal-DBRwWuxA.woff +0 -0
  478. package/dist/packages/ui/dist/assets/rajdhani-latin-600-normal-CXCVEoA9.woff2 +0 -0
  479. package/dist/packages/ui/dist/assets/rajdhani-latin-600-normal-Dx02qI2_.woff +0 -0
  480. package/dist/packages/ui/dist/assets/rajdhani-latin-700-normal-BPDUZo87.woff2 +0 -0
  481. package/dist/packages/ui/dist/assets/rajdhani-latin-700-normal-e0Uj8ZlN.woff +0 -0
  482. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-600-normal-BleIgkPp.woff +0 -0
  483. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-600-normal-C9ZjJQAt.woff2 +0 -0
  484. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-700-normal-BPaQ7tlD.woff +0 -0
  485. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-700-normal-S6aYESQK.woff2 +0 -0
  486. package/dist/packages/ui/dist/favicon.svg +1 -0
  487. package/dist/packages/ui/dist/index.html +15 -0
  488. package/dist/third-party.json +575 -0
  489. package/dist/vendor/@fission-ai/openspec/bin/openspec.js +85986 -0
  490. package/dist/vendor/@fission-ai/openspec/package.json +82 -0
  491. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/schema.yaml +248 -0
  492. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/design.md +21 -0
  493. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/proposal.md +34 -0
  494. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/spec.md +13 -0
  495. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/tasks.md +11 -0
  496. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-c_sharp.wasm +0 -0
  497. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-go.wasm +0 -0
  498. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-java.wasm +0 -0
  499. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-javascript.wasm +0 -0
  500. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-kotlin.wasm +0 -0
  501. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-php.wasm +0 -0
  502. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-python.wasm +0 -0
  503. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-ruby.wasm +0 -0
  504. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-rust.wasm +0 -0
  505. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-scala.wasm +0 -0
  506. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-tsx.wasm +0 -0
  507. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-typescript.wasm +0 -0
  508. package/dist/vendor/web-tree-sitter/tree-sitter.wasm +0 -0
  509. package/package.json +36 -3
@@ -0,0 +1,583 @@
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
+ loadCatalog
8
+ } from "./chunk-BUWSOQLU.js";
9
+ import {
10
+ repoFor
11
+ } from "./chunk-LDIARP6F.js";
12
+ import {
13
+ checkDraft,
14
+ checkFrameworkDraft,
15
+ draftDialect,
16
+ draftFramework,
17
+ evalOnboarding,
18
+ findGaps,
19
+ formatEval,
20
+ learnFrameworkFrom,
21
+ loadEvalCases,
22
+ proposalYaml,
23
+ reviewRepo,
24
+ surveyRepo
25
+ } from "./chunk-XKJRPVJO.js";
26
+ import {
27
+ matchRepoType
28
+ } from "./chunk-IILZ7J3L.js";
29
+ import {
30
+ modelCovers,
31
+ repoImports,
32
+ runDialectTests,
33
+ runFrameworkTests
34
+ } from "./chunk-GVFUEGGM.js";
35
+ import {
36
+ offerCodeDir
37
+ } from "./chunk-YVCOQ5TZ.js";
38
+ import {
39
+ baseClonePath
40
+ } from "./chunk-XZJE6WIT.js";
41
+ import {
42
+ fsRepo
43
+ } from "./chunk-FMRMTI7W.js";
44
+ import {
45
+ Dialect,
46
+ FrameworkModel,
47
+ RecordId,
48
+ listQuestions,
49
+ loadOrgPack,
50
+ orgPackDirOf,
51
+ questionsRelOf,
52
+ raiseQuestions,
53
+ require_dist,
54
+ reusedLine
55
+ } from "./chunk-JMOLB347.js";
56
+ import {
57
+ __toESM
58
+ } from "./chunk-TV45EUGM.js";
59
+
60
+ // packages/cli/dist/onboard-commands.js
61
+ var import_yaml = __toESM(require_dist(), 1);
62
+ import { mkdir, readFile, rename, stat, writeFile } from "node:fs/promises";
63
+ import { join, resolve } from "node:path";
64
+ var plural = (n, one, many = `${one}s`) => `${n} ${n === 1 ? one : many}`;
65
+ var proposalPath = (root, name) => join(root, "proposals", "dialects", `${name}.yaml`);
66
+ var isDir = async (p) => !!(await stat(p).catch(() => void 0))?.isDirectory();
67
+ async function onboardDraft(root, target, o, deps, io) {
68
+ const repo = await repoFor(root, target);
69
+ if (!repo) {
70
+ io.err(`${target} isn't a cloned repo of the manifest or a folder; clone it with atticus workspace sync, or give its folder.`);
71
+ return 2;
72
+ }
73
+ const name = o.name ?? repo.id.toLowerCase().replace(/[^a-z0-9._-]+/g, "-");
74
+ if (!RecordId.safeParse(name).success) {
75
+ io.err(`"${name}" isn't a dialect name: use lower case, digits and dashes (--name).`);
76
+ return 2;
77
+ }
78
+ const op = await loadOrgPack(orgPackDirOf(root));
79
+ offerCodeDir(repo.id, repo.dir);
80
+ const handle = fsRepo(repo.id, repo.dir, "0".repeat(40));
81
+ const r = await draftDialect(handle, {
82
+ name,
83
+ runtime: deps.runtime,
84
+ orgPack: op,
85
+ maxAttempts: o.attempts ?? 3,
86
+ ...deps.now ? { now: deps.now } : {}
87
+ });
88
+ const rel = `proposals/dialects/${name}.yaml`;
89
+ if (r.status === "waiting") {
90
+ io.out(`Handed to your assistant (run ${r.runId}). Save its dialect as ${rel}, then check it: atticus onboard check ${name} --repo ${repo.id}`);
91
+ return 0;
92
+ }
93
+ for (const a of r.attempts.filter((x) => x.problems.length > 0)) {
94
+ io.out(`Attempt ${a.attempt}: ${plural(a.problems.length, "problem")}, handed back:`);
95
+ for (const p of a.problems)
96
+ io.out(` - ${p}`);
97
+ }
98
+ if (r.status === "failed") {
99
+ io.err(`No draft passed in ${plural(r.attempts.length, "attempt")}. Nothing was written. Try again with --attempts, give the assistant the framework's documents, or write the dialect with the kit (atticus dialect kit).`);
100
+ return 1;
101
+ }
102
+ await mkdir(join(root, "proposals", "dialects"), { recursive: true });
103
+ await writeFile(proposalPath(root, name), r.yaml, "utf8");
104
+ const kinds = /* @__PURE__ */ new Map();
105
+ for (const x of r.records)
106
+ kinds.set(x.split(" ")[0], (kinds.get(x.split(" ")[0]) ?? 0) + 1);
107
+ io.out(`Drafted ${rel} for ${repo.id} in ${plural(r.attempts.length, "attempt")}: its tests pass, and on ${repo.id} it gives ${[...kinds].map(([k, n]) => plural(n, k)).join(", ")}.`);
108
+ for (const x of r.records)
109
+ io.out(` ${x}`);
110
+ io.out(`It is a proposal: nothing scans with it yet. Review the rules and their tests, then: atticus onboard accept ${name}`);
111
+ return 0;
112
+ }
113
+ async function onboardCheck(root, name, target, io) {
114
+ const repo = await repoFor(root, target);
115
+ if (!repo) {
116
+ io.err(`${target} isn't a cloned repo of the manifest or a folder.`);
117
+ return 2;
118
+ }
119
+ const text = await readFile(proposalPath(root, name), "utf8").catch(() => void 0);
120
+ if (text === void 0) {
121
+ io.err(`There's no proposals/dialects/${name}.yaml.`);
122
+ return 2;
123
+ }
124
+ const c = await checkDraft(text, fsRepo(repo.id, repo.dir, "0".repeat(40)), name);
125
+ if (c.problems.length) {
126
+ for (const p of c.problems)
127
+ io.err(`- ${p}`);
128
+ return 1;
129
+ }
130
+ io.out(`proposals/dialects/${name}.yaml passes: its tests pass, and on ${repo.id} it gives ${plural(c.records.length, "record")}. Accept it: atticus onboard accept ${name}`);
131
+ return 0;
132
+ }
133
+ async function onboardAccept(root, name, o, io) {
134
+ const from = proposalPath(root, name);
135
+ const text = await readFile(from, "utf8").catch(() => void 0);
136
+ if (text === void 0) {
137
+ if (await stat(frameworkProposalPath(root, name)).catch(() => void 0))
138
+ return onboardFrameworkAccept(root, name, o, io);
139
+ io.err(`There's no proposals/dialects/${name}.yaml or proposals/frameworks/${name}.yaml to accept.`);
140
+ return 2;
141
+ }
142
+ const parsed = Dialect.safeParse((0, import_yaml.parse)(text));
143
+ if (!parsed.success) {
144
+ io.err(`proposals/dialects/${name}.yaml isn't a valid dialect; run atticus onboard check.`);
145
+ return 1;
146
+ }
147
+ const failures = await runDialectTests(parsed.data, ".");
148
+ if (failures.length) {
149
+ for (const f of failures)
150
+ io.err(`- test "${f.test}": ${f.message}`);
151
+ io.err("Its tests fail, so it can't be accepted.");
152
+ return 1;
153
+ }
154
+ const to = join(orgPackDirOf(root), "dialects", `${name}.yaml`);
155
+ if (await stat(to).catch(() => void 0) && !o.replace) {
156
+ io.err(`org-pack/dialects/${name}.yaml exists; use --replace to replace it.`);
157
+ return 1;
158
+ }
159
+ await mkdir(join(orgPackDirOf(root), "dialects"), { recursive: true });
160
+ await rename(from, to);
161
+ const types = parsed.data.appliesTo.repoTypes;
162
+ io.out(`Accepted: org-pack/dialects/${name}.yaml. ${types.length ? `It applies to repos of type ${types.join(", ")}.` : `Add it to the repos it reads in repos.manifest.yaml: dialects: [${name}].`} Commit the org pack for review, as with any change to it.`);
163
+ return 0;
164
+ }
165
+ async function onboardEval(root, dir, o, deps, io) {
166
+ if (!await isDir(resolve(dir))) {
167
+ io.err(`${dir} isn't a folder of evaluation cases (each <case>/case.yaml).`);
168
+ return 2;
169
+ }
170
+ const cases = await loadEvalCases(resolve(dir));
171
+ if (cases.length === 0) {
172
+ io.err(`${dir} has no cases (each <case>/case.yaml names a repo and a reference dialect).`);
173
+ return 2;
174
+ }
175
+ const op = await loadOrgPack(orgPackDirOf(root));
176
+ const results = await evalOnboarding(cases, {
177
+ runtime: deps.runtime,
178
+ orgPack: op,
179
+ maxAttempts: o.attempts ?? 3,
180
+ ...deps.now ? { now: deps.now } : {}
181
+ });
182
+ if (o.json)
183
+ io.out(JSON.stringify(results, null, 2));
184
+ else
185
+ for (const l of formatEval(results))
186
+ io.out(l);
187
+ return results.every((r) => r.status === "drafted" && r.precision === 1 && r.recall === 1) ? 0 : 1;
188
+ }
189
+ var frameworkProposalPath = (root, name) => join(root, "proposals", "frameworks", `${name}.yaml`);
190
+ async function frameworkUsers(root, op, named, packages, io) {
191
+ if (named?.length) {
192
+ const out2 = [];
193
+ for (const u of named) {
194
+ const repo = await repoFor(root, u);
195
+ if (!repo) {
196
+ io.err(`${u} isn't a cloned repo of the manifest or a folder; clone it with atticus workspace sync, or give its folder.`);
197
+ return void 0;
198
+ }
199
+ out2.push(repo);
200
+ }
201
+ return out2;
202
+ }
203
+ const out = [];
204
+ const pk = { packages };
205
+ for (const r of op.profiles.flatMap((p) => (p.repos?.repos ?? []).filter((x) => !x.archived))) {
206
+ const dir = baseClonePath(root, r.id);
207
+ if (!await isDir(dir) || packages.length === 0)
208
+ continue;
209
+ const imports = await repoImports(fsRepo(r.id, dir, "0".repeat(40)));
210
+ if ([...imports.modules.keys()].some((m) => modelCovers(pk, m)))
211
+ out.push({ id: r.id, dir });
212
+ }
213
+ if (out.length === 0) {
214
+ io.err(`No cloned repo imports ${packages.length ? packages.join(", ") : "the framework"}: name the repos that use it with --users <repo>[,<repo>...].`);
215
+ return void 0;
216
+ }
217
+ return out;
218
+ }
219
+ function reportCheck(c, io) {
220
+ for (const g of c.gains) {
221
+ const mine = new Set(c.drafted.find((d) => d.repo === g.repo)?.records ?? []);
222
+ io.out(`On ${g.repo} it reads ${plural(g.records.length, "record")} the repo doesn't give without it${g.records.length ? ":" : "."}`);
223
+ for (const l of g.records)
224
+ io.out(` ${l}${c.added.length && mine.has(l) ? " (drafted)" : ""}`);
225
+ }
226
+ if (c.idle.length)
227
+ io.out(`These entries change nothing in these repos: ${c.idle.join(", ")}. Keep them only if other repos use them.`);
228
+ if (c.added.length)
229
+ io.out(`Review the drafted entries first (inferred until a person confirms them): ${c.added.map((e) => `${e.label} (${e.source.kind}${e.source.ref ? ` ${e.source.ref}` : ""})`).join("; ")}.`);
230
+ }
231
+ async function onboardFramework(root, name, o, deps, io) {
232
+ if (!RecordId.safeParse(name).success) {
233
+ io.err(`"${name}" isn't a framework name: use lower case, digits and dashes, e.g. tide-platform.`);
234
+ return 2;
235
+ }
236
+ const op = await loadOrgPack(orgPackDirOf(root));
237
+ let learned;
238
+ if (o.from) {
239
+ try {
240
+ learned = await learnFrameworkFrom(o.from, {
241
+ name,
242
+ ...o.packages?.length ? { packages: o.packages } : {}
243
+ });
244
+ } catch (e) {
245
+ io.err(`${o.from} couldn't be read (${e.message}): give the framework's source folder, its JAR or its npm package (.tgz).`);
246
+ return 2;
247
+ }
248
+ } else
249
+ learned = {
250
+ from: "none",
251
+ notes: ["no --from was given: the assistant drafts from the repos that use the framework"]
252
+ };
253
+ const existing = op.frameworks.find((m) => m.name === name);
254
+ const packages = [
255
+ .../* @__PURE__ */ new Set([
256
+ ...o.packages ?? [],
257
+ ...learned.model?.packages ?? [],
258
+ ...existing?.packages ?? []
259
+ ])
260
+ ];
261
+ const users = await frameworkUsers(root, op, o.users, packages, io);
262
+ if (!users)
263
+ return 2;
264
+ const handles = users.map((u) => fsRepo(u.id, u.dir, "0".repeat(40)));
265
+ const what = learned.from === "jar" ? "its JAR" : learned.from === "package" ? "its npm package" : learned.from === "source" ? "its source" : void 0;
266
+ if (learned.model && what) {
267
+ const m = learned.model;
268
+ io.out(`Learned from ${what}: ${plural(m.annotations.length, "annotation")}, ${plural(m.clients.length + m.calls.length, "call")}, ${plural(m.routes.length, "route")}, ${plural(Object.keys(m.constants).length, "constant")} (verified: no draft changes them).`);
269
+ }
270
+ for (const n of learned.notes)
271
+ io.out(`note: ${n}`);
272
+ if (!deps.runtime && !learned.model) {
273
+ io.err("The learner read nothing and AI is off, so there is nothing to propose: write the model with the kit (atticus frameworks kit).");
274
+ return 1;
275
+ }
276
+ const r = await draftFramework({
277
+ name,
278
+ learned,
279
+ users: handles,
280
+ ...deps.runtime ? { runtime: deps.runtime } : {},
281
+ orgPack: op,
282
+ ...o.packages?.length ? { packages: o.packages } : {},
283
+ ...existing ? { existing } : {},
284
+ maxAttempts: o.attempts ?? 3,
285
+ ...deps.now ? { now: deps.now } : {}
286
+ });
287
+ const rel = `proposals/frameworks/${name}.yaml`;
288
+ const userList = users.map((u) => u.id).join(",");
289
+ const checkCmd = `atticus onboard check framework ${name}${o.from ? ` --from ${o.from}` : ""} --users ${userList}`;
290
+ if (r.status === "waiting") {
291
+ if (learned.model) {
292
+ await mkdir(join(root, "proposals", "frameworks"), { recursive: true });
293
+ await writeFile(frameworkProposalPath(root, name), proposalYaml(learned.model, []), "utf8");
294
+ }
295
+ io.out(`Handed to your assistant (run ${r.runId}). ${learned.model ? `${rel} holds what was learned; the assistant adds to it` : `Save its model as ${rel}`}, then check it: ${checkCmd}`);
296
+ return 0;
297
+ }
298
+ for (const a of r.attempts.filter((x) => x.attempt > 0 && x.problems.length > 0)) {
299
+ io.out(`Attempt ${a.attempt}: ${plural(a.problems.length, "problem")}, handed back:`);
300
+ for (const p of a.problems)
301
+ io.out(` - ${p}`);
302
+ }
303
+ if (r.status === "failed") {
304
+ if (!deps.runtime)
305
+ for (const p of r.attempts[0]?.problems ?? [])
306
+ io.err(`- ${p}`);
307
+ io.err(deps.runtime ? `No draft passed in ${plural(r.attempts.length, "attempt")}. Nothing was written. Try again with --attempts, give the assistant the framework's documents, or write the model with the kit (atticus frameworks kit).` : "The learned model doesn't pass on these repos, and AI is off. Nothing was written. Complete it with the kit (atticus frameworks kit).");
308
+ return 1;
309
+ }
310
+ await mkdir(join(root, "proposals", "frameworks"), { recursive: true });
311
+ await writeFile(frameworkProposalPath(root, name), r.yaml, "utf8");
312
+ const c = r.check;
313
+ io.out(deps.runtime ? `Drafted ${rel} in ${plural(r.attempts.length, "attempt")}: ${plural(c.added.length, "entry", "entries")} drafted by your assistant over what was learned; its tests pass.` : `Wrote ${rel} from the learner alone (AI off): it reads the repos that use it.`);
314
+ reportCheck(c, io);
315
+ io.out(`It is a proposal: nothing scans with it yet. Review it, then: atticus onboard accept framework ${name}${existing ? " --replace (it replaces the model in the org pack)" : ""}`);
316
+ return 0;
317
+ }
318
+ async function onboardFrameworkCheck(root, name, o, io) {
319
+ const file = frameworkProposalPath(root, name);
320
+ const text = await readFile(file, "utf8").catch(() => void 0);
321
+ if (text === void 0) {
322
+ io.err(`There's no proposals/frameworks/${name}.yaml.`);
323
+ return 2;
324
+ }
325
+ const op = await loadOrgPack(orgPackDirOf(root));
326
+ let learned;
327
+ if (o.from) {
328
+ try {
329
+ learned = (await learnFrameworkFrom(o.from, {
330
+ name,
331
+ ...o.packages?.length ? { packages: o.packages } : {}
332
+ })).model;
333
+ } catch (e) {
334
+ io.err(`${o.from} couldn't be read (${e.message}).`);
335
+ return 2;
336
+ }
337
+ }
338
+ let packages = [...o.packages ?? [], ...learned?.packages ?? []];
339
+ try {
340
+ packages.push(...(0, import_yaml.parse)(text)?.packages ?? []);
341
+ } catch {
342
+ }
343
+ packages = [...new Set(packages.filter((p) => typeof p === "string"))];
344
+ const users = await frameworkUsers(root, op, o.users, packages, io);
345
+ if (!users)
346
+ return 2;
347
+ const c = await checkFrameworkDraft(text, {
348
+ name,
349
+ ...learned ? { learned } : {},
350
+ users: users.map((u) => fsRepo(u.id, u.dir, "0".repeat(40))),
351
+ others: op.frameworks
352
+ });
353
+ if (c.problems.length) {
354
+ for (const p of c.problems)
355
+ io.err(`- ${p}`);
356
+ if (!o.from && c.problems.some((p) => /source (code|bytecode) is only for/.test(p)))
357
+ io.err("Entries citing code or bytecode are confirmed by reading the framework again: give --from <its source, JAR or package>.");
358
+ return 1;
359
+ }
360
+ const merged = proposalYaml(c.model, c.added);
361
+ if (learned && merged !== text)
362
+ await writeFile(file, merged, "utf8");
363
+ io.out(`proposals/frameworks/${name}.yaml passes${learned && merged !== text ? " (rewritten with what the learner read)" : ""}: its tests pass, and it reads the repos that use it.`);
364
+ reportCheck(c, io);
365
+ io.out(`Accept it: atticus onboard accept framework ${name}`);
366
+ return 0;
367
+ }
368
+ async function onboardFrameworkAccept(root, name, o, io) {
369
+ const from = frameworkProposalPath(root, name);
370
+ const text = await readFile(from, "utf8").catch(() => void 0);
371
+ if (text === void 0) {
372
+ io.err(`There's no proposals/frameworks/${name}.yaml to accept.`);
373
+ return 2;
374
+ }
375
+ let model;
376
+ try {
377
+ model = FrameworkModel.parse((0, import_yaml.parse)(text));
378
+ } catch {
379
+ io.err(`proposals/frameworks/${name}.yaml isn't a valid framework model; run atticus onboard check framework ${name}.`);
380
+ return 1;
381
+ }
382
+ const failures = await runFrameworkTests(model);
383
+ if (failures.length) {
384
+ for (const f of failures)
385
+ io.err(`- test "${f.test}": ${f.message}`);
386
+ io.err("Its tests fail, so it can't be accepted.");
387
+ return 1;
388
+ }
389
+ const to = join(orgPackDirOf(root), "frameworks", `${name}.yaml`);
390
+ if (await stat(to).catch(() => void 0) && !o.replace) {
391
+ io.err(`org-pack/frameworks/${name}.yaml exists; use --replace to replace it.`);
392
+ return 1;
393
+ }
394
+ await mkdir(join(orgPackDirOf(root), "frameworks"), { recursive: true });
395
+ await rename(from, to);
396
+ io.out(`Accepted: org-pack/frameworks/${name}.yaml. Scans read every repo that imports ${model.packages.join(", ")} through it. Commit the org pack for review, as with any change to it.`);
397
+ return 0;
398
+ }
399
+ async function matchedRepoType(repo, id, op, io) {
400
+ if (op.repoTypes.length === 0)
401
+ return void 0;
402
+ const m = await matchRepoType(repo, op.repoTypes);
403
+ if (m.verdict === "tie") {
404
+ io.out(`${id} matches ${m.tied.join(" and ")} about as well, so the survey uses neither. See atticus repo-type detect ${id}.`);
405
+ return void 0;
406
+ }
407
+ if (m.verdict === "none")
408
+ return void 0;
409
+ const type = op.repoTypes.find((t) => t.id === m.best);
410
+ const score = m.matches[0].score;
411
+ io.out(`${id} is a ${m.verdict} match for the repo type ${type.id} (${Math.round(score * 100)}%); its settings and skills go to your assistant.`);
412
+ const skills = op.skills.filter((s) => type.skills.includes(`process/skills/${s.id}/SKILL.md`));
413
+ return { type, verdict: m.verdict, score, skills };
414
+ }
415
+ async function scanSurvey(root, target, o, deps, io) {
416
+ const repo = await repoFor(root, target);
417
+ if (!repo) {
418
+ io.err(`${target} isn't a cloned repo of the manifest or a folder; clone it with atticus workspace sync, or give its folder.`);
419
+ return 2;
420
+ }
421
+ const file = join(orgPackDirOf(root), "scan", `${repo.id}.yaml`);
422
+ if (!o.force && !o.resume && await stat(file).catch(() => void 0)) {
423
+ io.err(`${repo.id} already has scan settings (org-pack/scan/${repo.id}.yaml). Re-run with --force to draft them again.`);
424
+ return 1;
425
+ }
426
+ const op = await loadOrgPack(orgPackDirOf(root));
427
+ const before = await listQuestions(root, { repo: repo.id, step: "scan-survey" });
428
+ offerCodeDir(repo.id, repo.dir);
429
+ const handle = fsRepo(repo.id, repo.dir, "0".repeat(40));
430
+ const repoType = await matchedRepoType(handle, repo.id, op, io);
431
+ const r = await surveyRepo(handle, {
432
+ repoId: repo.id,
433
+ runtime: deps.runtime,
434
+ orgPack: op,
435
+ ...repoType ? { repoType } : {},
436
+ maxAttempts: o.attempts ?? 3,
437
+ questions: before.questions,
438
+ ...deps.now ? { now: deps.now } : {},
439
+ ...o.resume ? { resume: o.resume } : {}
440
+ });
441
+ if (r.status === "waiting") {
442
+ io.out(`Handed the survey to your assistant (run ${r.runId}). When it is done: atticus handoff done ${r.runId}, then atticus scan survey ${repo.id} --resume ${r.runId}`);
443
+ return 0;
444
+ }
445
+ for (const a of r.attempts.filter((x) => x.problems.length > 0)) {
446
+ io.out(`Attempt ${a.attempt}: ${plural(a.problems.length, "problem")}, handed back:`);
447
+ for (const p of a.problems)
448
+ io.out(` - ${p}`);
449
+ }
450
+ if (r.status !== "drafted" || !r.settings) {
451
+ io.out(`The survey still had problems after ${plural(r.attempts.length, "attempt")}; nothing was written.`);
452
+ return 1;
453
+ }
454
+ await mkdir(join(orgPackDirOf(root), "scan"), { recursive: true });
455
+ await writeFile(file, `# Drafted by atticus scan survey on ${(deps.now ?? /* @__PURE__ */ new Date()).toISOString().slice(0, 10)}; every entry was checked against the code (ADR 0075). Review it like any org-pack change.
456
+ ${r.yaml}`, "utf8");
457
+ const s = r.settings;
458
+ io.out(`Wrote org-pack/scan/${repo.id}.yaml: ${plural(s.exclude.length, "folder")} left out, ${plural(s.prefixes.length, "prefix", "prefixes")}${s.clients.length ? `, ${plural(s.clients.length, "client base")}` : ""}.`);
459
+ for (const e of s.exclude)
460
+ io.out(` leave out ${e.path}: ${e.why} (${e.at})`);
461
+ for (const p of s.prefixes)
462
+ io.out(` ${p.prefix} in front of ${p.paths.join(", ")}: ${p.why} (${p.at})`);
463
+ for (const c of s.clients)
464
+ io.out(` ${c.base} in front of the calls in ${c.paths.join(", ")}: ${c.why} (${c.at})`);
465
+ const rerun = `atticus scan survey ${repo.id} --force`;
466
+ const { raised, known, reused } = await raiseQuestions(root, r.questions ?? [], {
467
+ step: "scan-survey",
468
+ repo: repo.id,
469
+ command: `atticus scan survey ${repo.id}`,
470
+ rerun,
471
+ ...r.runId ? { run: r.runId } : {},
472
+ at: (deps.now ?? /* @__PURE__ */ new Date()).toISOString()
473
+ });
474
+ const waiting = known.filter((q) => q.state === "open");
475
+ if (raised.length) {
476
+ io.out(`${plural(raised.length, "question")} for a person, in ${questionsRelOf(root)}/:`);
477
+ for (const q of raised)
478
+ io.out(` ${q.id} ${q.question}`);
479
+ }
480
+ for (const q of reused)
481
+ io.out(reusedLine(q));
482
+ if (waiting.length)
483
+ io.out(`${plural(waiting.length, "question")} still waiting for an answer: ${waiting.map((q) => q.id).join(", ")}`);
484
+ if (raised.length + waiting.length === 0)
485
+ io.out(`Next: atticus scan, then review the file in a pull request.`);
486
+ else
487
+ io.out(`Answer ${raised.length + waiting.length === 1 ? "it" : "them"} with atticus questions answer <id> --option <n>, or on the app's Questions page; then run ${rerun}`);
488
+ return 0;
489
+ }
490
+ async function scanReview(root, target, o, deps, io) {
491
+ const repo = await repoFor(root, target);
492
+ if (!repo) {
493
+ io.err(`${target} isn't a cloned repo of the manifest or a folder; clone it with atticus workspace sync, or give its folder.`);
494
+ return 2;
495
+ }
496
+ const name = o.name ?? `${repo.id.toLowerCase().replace(/[^a-z0-9._-]+/g, "-")}-review`;
497
+ if (!RecordId.safeParse(name).success) {
498
+ io.err(`"${name}" isn't a dialect name: use lower case, digits and dashes (--name).`);
499
+ return 2;
500
+ }
501
+ const { records } = await loadCatalog(root, { out: () => {
502
+ }, err: (l) => io.err(l) });
503
+ offerCodeDir(repo.id, repo.dir);
504
+ const handle = fsRepo(repo.id, repo.dir, "0".repeat(40));
505
+ const gaps = await findGaps(handle, records);
506
+ if (gaps.length === 0) {
507
+ io.out(`The last scan of ${repo.id} left no gaps: everything it found is read and resolved.`);
508
+ return 0;
509
+ }
510
+ io.out(`${plural(gaps.length, "gap")} in ${repo.id} after the last scan:`);
511
+ for (const g of gaps)
512
+ io.out(` ${g.id} ${g.kind} ${g.path}${g.line ? `:${g.line}` : ""}${g.raw ? ` ${g.raw}` : ""}${g.component ? ` (${g.component})` : ""}`);
513
+ if (o.gapsOnly)
514
+ return 0;
515
+ const op = await loadOrgPack(orgPackDirOf(root));
516
+ const r = await reviewRepo(handle, {
517
+ name,
518
+ runtime: deps.runtime,
519
+ gaps,
520
+ orgPack: op,
521
+ maxAttempts: o.attempts ?? 3,
522
+ ...deps.now ? { now: deps.now } : {},
523
+ ...o.resume ? { resume: o.resume } : {}
524
+ });
525
+ if (r.status === "waiting") {
526
+ io.out(`Handed the gaps to your assistant (run ${r.runId}). When it is done: atticus handoff done ${r.runId}, then atticus scan review ${repo.id} --resume ${r.runId}`);
527
+ return 0;
528
+ }
529
+ for (const a of r.attempts.filter((x) => x.problems.length > 0)) {
530
+ io.out(`Attempt ${a.attempt}: ${plural(a.problems.length, "problem")}, handed back:`);
531
+ for (const p of a.problems)
532
+ io.out(` - ${p}`);
533
+ }
534
+ if (r.status === "failed") {
535
+ io.err(`No answer passed in ${plural(r.attempts.length, "attempt")}. Nothing was written.`);
536
+ return 1;
537
+ }
538
+ io.out("Verdicts:");
539
+ for (const v of r.verdicts)
540
+ io.out(` ${v.gap} ${v.verdict}: ${v.why}`);
541
+ const report = [
542
+ `# Scan review of ${repo.id}`,
543
+ "",
544
+ "Drafted by atticus scan review from the gaps the last scan left; a person decides on each.",
545
+ "",
546
+ "| Gap | Kind | Where | Verdict | Why |",
547
+ "| --- | --- | --- | --- | --- |",
548
+ ...gaps.map((g) => {
549
+ const v = r.verdicts.find((x) => x.gap === g.id);
550
+ const where = `${g.path}${g.line ? `:${g.line}` : ""}${g.raw ? ` (${g.raw})` : ""}`;
551
+ return `| ${g.id} | ${g.kind} | ${where.replace(/\|/g, "\\|")} | ${v?.verdict ?? ""} | ${(v?.why ?? "").replace(/\|/g, "\\|")} |`;
552
+ }),
553
+ ""
554
+ ].join("\n");
555
+ await mkdir(join(root, "proposals", "reviews"), { recursive: true });
556
+ await writeFile(join(root, "proposals", "reviews", `${repo.id}.md`), report, "utf8");
557
+ io.out(`Wrote proposals/reviews/${repo.id}.md.`);
558
+ if (r.yaml) {
559
+ await mkdir(join(root, "proposals", "dialects"), { recursive: true });
560
+ await writeFile(proposalPath(root, name), r.yaml, "utf8");
561
+ io.out(`Drafted proposals/dialects/${name}.yaml: its tests pass, and it reads ${plural(r.resolved.length, "gap")} (${r.resolved.join(", ")}) with ${plural(r.records.length, "record")}. Review it, then: atticus onboard accept ${name}, and atticus scan.`);
562
+ }
563
+ const misread = r.verdicts.filter((v) => v.verdict === "reader");
564
+ if (misread.length)
565
+ io.out(`For Atticus: ${plural(misread.length, "gap")} where a built-in reader misreads the code (${misread.map((v) => v.gap).join(", ")}); the review file says what each misreads.`);
566
+ const others = r.verdicts.filter((v) => v.verdict === "vendor" || v.verdict === "person");
567
+ if (others.length)
568
+ io.out(`For a person: ${others.map((v) => `${v.gap} (${v.verdict})`).join(", ")}. Record a vendor with atticus alias, or answer in the review file.`);
569
+ return 0;
570
+ }
571
+
572
+ export {
573
+ onboardDraft,
574
+ onboardCheck,
575
+ onboardAccept,
576
+ onboardEval,
577
+ onboardFramework,
578
+ onboardFrameworkCheck,
579
+ onboardFrameworkAccept,
580
+ matchedRepoType,
581
+ scanSurvey,
582
+ scanReview
583
+ };
@@ -0,0 +1,49 @@
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
+ matchedRepoType,
8
+ onboardAccept,
9
+ onboardCheck,
10
+ onboardDraft,
11
+ onboardEval,
12
+ onboardFramework,
13
+ onboardFrameworkAccept,
14
+ onboardFrameworkCheck,
15
+ scanReview,
16
+ scanSurvey
17
+ } from "./chunk-NIYB5K5B.js";
18
+ import "./chunk-BUWSOQLU.js";
19
+ import {
20
+ repoFor
21
+ } from "./chunk-LDIARP6F.js";
22
+ import "./chunk-XKJRPVJO.js";
23
+ import "./chunk-IILZ7J3L.js";
24
+ import "./chunk-TEBBD4XH.js";
25
+ import "./chunk-XPWSNKF3.js";
26
+ import "./chunk-WIMOJMAK.js";
27
+ import "./chunk-5V5BJACL.js";
28
+ import "./chunk-GVFUEGGM.js";
29
+ import "./chunk-YVCOQ5TZ.js";
30
+ import "./chunk-XNRPCI23.js";
31
+ import "./chunk-XZJE6WIT.js";
32
+ import "./chunk-FMRMTI7W.js";
33
+ import "./chunk-BKFGGJKA.js";
34
+ import "./chunk-JMOLB347.js";
35
+ import "./chunk-MMB2OHUY.js";
36
+ import "./chunk-TV45EUGM.js";
37
+ export {
38
+ matchedRepoType,
39
+ onboardAccept,
40
+ onboardCheck,
41
+ onboardDraft,
42
+ onboardEval,
43
+ onboardFramework,
44
+ onboardFrameworkAccept,
45
+ onboardFrameworkCheck,
46
+ repoFor,
47
+ scanReview,
48
+ scanSurvey
49
+ };