@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,540 @@
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
+ isMetarepo,
8
+ notMetarepo
9
+ } from "./chunk-3G4YI4ZU.js";
10
+ import {
11
+ upgradeCheck
12
+ } from "./chunk-Y4BRGOJR.js";
13
+ import {
14
+ ASSISTANT_FORMATS,
15
+ assistantTier,
16
+ generateAssistantFiles,
17
+ readProbes,
18
+ tierLine
19
+ } from "./chunk-LK44ULGI.js";
20
+ import {
21
+ BETA_FEATURES,
22
+ OPENSPEC_PINNED,
23
+ STORE_MARKER,
24
+ createOpenSpec,
25
+ isSupportedVersion,
26
+ openspecFeatures,
27
+ openspecHasStores,
28
+ readStoreMarker
29
+ } from "./chunk-MGVYVW7Q.js";
30
+ import {
31
+ versionAtLeast
32
+ } from "./chunk-CHC5FKTU.js";
33
+ import {
34
+ baseClonePath,
35
+ createGit,
36
+ isInPlace,
37
+ loadRepos,
38
+ remoteDefaultBranch
39
+ } from "./chunk-PGKHJYOB.js";
40
+ import {
41
+ modelEnvOf,
42
+ modelSourceWords,
43
+ modelsByClass
44
+ } from "./chunk-5XDNUJ4P.js";
45
+ import {
46
+ DEFAULT_PORT,
47
+ STEP_CLASSES,
48
+ factsDirOf,
49
+ loadOpenSpecSettings,
50
+ loadOrgPack,
51
+ orgPackDirOf,
52
+ require_dist,
53
+ retrievalOf,
54
+ stepModelsOf
55
+ } from "./chunk-577AJVRS.js";
56
+ import {
57
+ readLock
58
+ } from "./chunk-D3PO4DOZ.js";
59
+ import {
60
+ __toESM
61
+ } from "./chunk-TV45EUGM.js";
62
+
63
+ // packages/cli/dist/doctor.js
64
+ import { existsSync } from "node:fs";
65
+ import { access, constants, mkdir, readFile, rm, statfs, writeFile } from "node:fs/promises";
66
+ import { createServer } from "node:net";
67
+ import { delimiter, join } from "node:path";
68
+ var import_yaml = __toESM(require_dist(), 1);
69
+ function stepModelChoices(rt, env) {
70
+ if (rt.modes.allowed.includes("model") && rt.adapters.model)
71
+ return modelsByClass(rt, env);
72
+ const org = stepModelsOf(rt);
73
+ const out = {};
74
+ for (const c of STEP_CLASSES) {
75
+ const set = env[modelEnvOf(c)]?.trim();
76
+ out[c] = set && set !== "atticus" ? { stepClass: c, model: set, from: "setting", notes: [] } : org[c] ? { stepClass: c, model: org[c], from: "runtime.yaml", notes: [] } : { stepClass: c, from: "fallback", notes: [] };
77
+ }
78
+ return out;
79
+ }
80
+ var stepModelLine = (m) => `${m.stepClass}: ${m.model ?? "the editor's own model"} (${m.from === "fallback" ? m.model ? modelSourceWords("fallback") : "fallback" : m.from === "setting" ? "your setting" : "runtime.yaml"})`;
81
+ async function defaultAssistantFiles(root) {
82
+ const r = await generateAssistantFiles(root, { check: true });
83
+ const of = (a) => r.results.filter((x) => x.action === a).map((x) => x.path);
84
+ return { missing: of("created"), stale: of("updated"), edited: of("kept-edited") };
85
+ }
86
+ async function eachAtOnce(items, f, limit = 8) {
87
+ const out = new Array(items.length);
88
+ let next = 0;
89
+ const worker = async () => {
90
+ while (next < items.length) {
91
+ const i = next++;
92
+ out[i] = await f(items[i]);
93
+ }
94
+ };
95
+ await Promise.all(Array.from({ length: Math.min(limit, items.length) }, worker));
96
+ return out;
97
+ }
98
+ async function factsCommit(root, repo) {
99
+ const text = await readFile(join(factsDirOf(root), `${repo}.verify.yaml`), "utf8").catch(() => void 0);
100
+ if (!text)
101
+ return void 0;
102
+ try {
103
+ const commit = (0, import_yaml.parse)(text)?.commit;
104
+ return typeof commit === "string" && commit ? commit : void 0;
105
+ } catch {
106
+ return void 0;
107
+ }
108
+ }
109
+ var MIN_NODE = "22.13.0";
110
+ var MIN_GIT = "2.30.0";
111
+ var GB = 1024 ** 3;
112
+ function defaultPortFree(port) {
113
+ return new Promise((resolve) => {
114
+ const s = createServer();
115
+ s.once("error", () => resolve(false));
116
+ s.listen(port, "127.0.0.1", () => s.close(() => resolve(true)));
117
+ });
118
+ }
119
+ async function defaultFreeBytes(dir) {
120
+ try {
121
+ const s = await statfs(dir);
122
+ return s.bavail * s.bsize;
123
+ } catch {
124
+ return void 0;
125
+ }
126
+ }
127
+ function defaultOnPath(env, platform) {
128
+ const exts = platform === "win32" ? (env.PATHEXT ?? ".EXE;.CMD;.BAT").split(";") : [""];
129
+ const dirs = (env.PATH ?? env.Path ?? "").split(platform === "win32" ? ";" : delimiter);
130
+ return (program) => dirs.some((d) => d && exts.some((e) => existsSync(join(d, program + e.toLowerCase())) || existsSync(join(d, program + e))));
131
+ }
132
+ var envName = (env, ...names) => names.find((n) => env[n] !== void 0 && env[n] !== "");
133
+ var PROGRAMS = Object.fromEntries(Object.entries(ASSISTANT_FORMATS).map(([id, f]) => [
134
+ id,
135
+ {
136
+ programs: f.programs,
137
+ name: id === "copilot" ? "VS Code or IntelliJ (Copilot runs in them)" : `${f.name} (${f.programs.join(" or ")})`
138
+ }
139
+ ]));
140
+ var EDITORS = {
141
+ vscode: ["code"],
142
+ intellij: ["idea", "idea64"]
143
+ };
144
+ async function doctorChecks(root, deps = {}) {
145
+ const env = deps.env ?? process.env;
146
+ const platform = deps.platform ?? process.platform;
147
+ const git = deps.git ?? createGit({ timeoutMs: 15e3 });
148
+ const onPath = deps.onPath ?? defaultOnPath(env, platform);
149
+ const out = [];
150
+ const openspecVersion = deps.openspecVersion ?? (async () => {
151
+ try {
152
+ return await createOpenSpec({ root }).version();
153
+ } catch {
154
+ return void 0;
155
+ }
156
+ });
157
+ const openspecSoon = openspecVersion();
158
+ const storesSoon = (deps.openspecStores ?? (() => openspecHasStores()))().catch(() => false);
159
+ const meta = isMetarepo(root);
160
+ const upgradeSoon = meta ? upgradeCheck(root) : Promise.resolve({ atticus: "", newer: false, pending: [] });
161
+ upgradeSoon.catch(() => void 0);
162
+ const node = deps.nodeVersion ?? process.versions.node;
163
+ out.push({
164
+ id: "node",
165
+ label: "Node.js",
166
+ status: versionAtLeast(node, MIN_NODE) ? "ok" : "fail",
167
+ detail: `Node ${node} (needs ${MIN_NODE} or later)`,
168
+ fix: `Install Node ${MIN_NODE} or later (the LTS 22 line), or use the offline bundle, which carries its own.`
169
+ });
170
+ const gitConfig = async (key) => {
171
+ try {
172
+ return (await git(["config", "--get", key], root)).stdout.trim() || void 0;
173
+ } catch {
174
+ return void 0;
175
+ }
176
+ };
177
+ let gitVersion;
178
+ try {
179
+ gitVersion = /(\d+\.\d+(?:\.\d+)?)/.exec((await git(["--version"], root)).stdout)?.[1];
180
+ } catch {
181
+ gitVersion = void 0;
182
+ }
183
+ out.push({
184
+ id: "git",
185
+ label: "Git",
186
+ status: gitVersion && versionAtLeast(gitVersion, MIN_GIT) ? "ok" : "fail",
187
+ detail: gitVersion ? `git ${gitVersion} (needs ${MIN_GIT} or later)` : "git isn't on PATH",
188
+ fix: `Install Git ${MIN_GIT} or later and make sure \`git\` runs from a terminal.`
189
+ });
190
+ if (gitVersion) {
191
+ const [name, email, long, crlf] = await Promise.all([
192
+ gitConfig("user.name"),
193
+ gitConfig("user.email"),
194
+ platform === "win32" ? gitConfig("core.longpaths") : void 0,
195
+ gitConfig("core.autocrlf")
196
+ ]);
197
+ out.push({
198
+ id: "git-identity",
199
+ label: "Git identity",
200
+ status: name && email ? "ok" : "warn",
201
+ detail: name && email ? "user.name and user.email are set" : "user.name or user.email isn't set",
202
+ fix: 'Set them once: git config --global user.name "Your Name" and git config --global user.email you@example.com. Hand-offs and task runs commit as you.'
203
+ });
204
+ if (platform === "win32") {
205
+ out.push({
206
+ id: "git-longpaths",
207
+ label: "Long paths (Windows)",
208
+ status: long === "true" ? "ok" : "warn",
209
+ detail: long === "true" ? "core.longpaths is on" : "core.longpaths is off",
210
+ fix: "Worktrees nest deep: run git config --global core.longpaths true."
211
+ });
212
+ }
213
+ out.push({
214
+ id: "line-endings",
215
+ label: "Line endings",
216
+ status: "ok",
217
+ detail: crlf ? `core.autocrlf is ${crlf}; Atticus reads files with LF line endings either way` : "core.autocrlf isn't set"
218
+ });
219
+ }
220
+ const osv = await openspecSoon;
221
+ out.push({
222
+ id: "openspec",
223
+ label: "OpenSpec CLI",
224
+ status: osv && isSupportedVersion(osv) ? "ok" : "fail",
225
+ detail: osv ? `OpenSpec ${osv} (tested with ${OPENSPEC_PINNED})` : "the bundled OpenSpec CLI didn't run",
226
+ fix: "Reinstall Atticus (it carries a pinned OpenSpec): npm install -g @maycombhq/atticus from your npm mirror, or with the offline bundle run its install script again."
227
+ });
228
+ const hasStores = await storesSoon;
229
+ const marker = await readStoreMarker(root);
230
+ const { settings: osSettings, problem: osProblem } = await loadOpenSpecSettings(orgPackDirOf(root));
231
+ const uses = [
232
+ marker.marker ? `this metarepo is the store ${marker.marker.id}` : !marker.missing ? `this metarepo has a ${STORE_MARKER} that can't be read` : "",
233
+ osSettings.stores.length ? `org-pack/openspec.yaml names ${osSettings.stores.length} store${osSettings.stores.length === 1 ? "" : "s"} to read` : "",
234
+ osSettings.referenceInRepos ? "hand-down adds it to code repos' references" : ""
235
+ ].filter(Boolean);
236
+ out.push({
237
+ id: "openspec-stores",
238
+ label: "OpenSpec stores (beta)",
239
+ status: osProblem || !hasStores && uses.length ? "warn" : "ok",
240
+ detail: osProblem ? `org-pack/${osProblem}` : hasStores ? `${osv ? `OpenSpec ${osv}` : "OpenSpec"} has stores; ${uses.length ? uses.join("; ") : "this metarepo isn't one (optional: atticus upgrade --openspec-store)"}` : uses.length ? `the installed OpenSpec has no stores, but ${uses.join("; ")}` : "the installed OpenSpec has no stores; nothing here uses them",
241
+ fix: osProblem ? "Fix org-pack/openspec.yaml (ADR 0126); until then Atticus reads no store and hand-down adds no reference." : "Plain OpenSpec can't register this metarepo or read it as a reference until it has stores; Atticus still reads the stores org-pack/openspec.yaml names. Install an Atticus whose pinned OpenSpec has stores (1.14.0 does)."
242
+ });
243
+ const features = await (deps.openspecFeatures ?? (() => openspecFeatures()))().catch(() => void 0);
244
+ if (features) {
245
+ const has = (f) => features.beta[f].present;
246
+ const present = BETA_FEATURES.filter(has);
247
+ out.push({
248
+ id: "openspec-features",
249
+ label: "OpenSpec beta features",
250
+ status: "ok",
251
+ detail: [
252
+ `${osv ? `OpenSpec ${osv}` : "OpenSpec"} has ${present.length ? present.join(", ") : "none of them"}`,
253
+ `through OpenSpec: status, instructions, validate, list, show, archive${has("store") ? ", each store read with openspec list in it" : ""}`,
254
+ `Atticus's own: the OpenSpec root from the metarepo's layout${has("context") ? " (context --json not used yet)" : ""}, the org-flow schema from the org pack`,
255
+ `not used: ${["workset", "doctor", "store doctor"].filter((f) => has(f)).join(", ") || "none"}`
256
+ ].join("; ")
257
+ });
258
+ }
259
+ const proxy = envName(env, "HTTPS_PROXY", "https_proxy", "HTTP_PROXY", "http_proxy");
260
+ const noProxyName = envName(env, "NO_PROXY", "no_proxy");
261
+ const noProxy = noProxyName ? env[noProxyName] : "";
262
+ const localBypassed = /(^|,)\s*(localhost|127\.0\.0\.1|\*)\s*(,|$)/.test(noProxy);
263
+ out.push({
264
+ id: "proxy",
265
+ label: "Proxy",
266
+ status: !proxy || localBypassed ? "ok" : "warn",
267
+ detail: proxy ? `${proxy} is set${noProxyName ? `; ${noProxyName} ${localBypassed ? "includes" : "doesn't include"} localhost` : "; NO_PROXY isn't set"}` : "no proxy variable is set (direct connections)",
268
+ fix: "Add localhost and 127.0.0.1 to NO_PROXY so tools that honour the proxy (git, npm, assistants) don't send the app's local calls through it."
269
+ });
270
+ const caName = envName(env, "NODE_EXTRA_CA_CERTS");
271
+ let ca;
272
+ if (caName) {
273
+ const file = env[caName];
274
+ const text = await readFile(file, "utf8").catch(() => void 0);
275
+ ca = {
276
+ id: "tls",
277
+ label: "TLS certificates",
278
+ status: text && /-----BEGIN CERTIFICATE-----/.test(text) ? "ok" : "fail",
279
+ detail: text ? /-----BEGIN CERTIFICATE-----/.test(text) ? "NODE_EXTRA_CA_CERTS points at a PEM file" : "NODE_EXTRA_CA_CERTS points at a file with no PEM certificate in it" : "NODE_EXTRA_CA_CERTS points at a file that can't be read",
280
+ fix: "Point NODE_EXTRA_CA_CERTS at your organisation's root certificate in PEM form (ask the desktop or network team for it)."
281
+ };
282
+ } else
283
+ ca = {
284
+ id: "tls",
285
+ label: "TLS certificates",
286
+ status: proxy ? "warn" : "ok",
287
+ detail: proxy ? "a proxy is set but NODE_EXTRA_CA_CERTS isn't" : "the system's certificates (no extra CA set)",
288
+ fix: "If your proxy inspects TLS, set NODE_EXTRA_CA_CERTS to your organisation's root certificate (PEM), or Atticus's adapters and plugins can't reach your systems."
289
+ };
290
+ out.push(ca);
291
+ let writable = true;
292
+ if (meta)
293
+ try {
294
+ const dir = join(root, ".atticus");
295
+ await mkdir(dir, { recursive: true });
296
+ const probe = join(dir, `.doctor-${process.pid}`);
297
+ await writeFile(probe, "ok");
298
+ await rm(probe);
299
+ await access(root, constants.W_OK);
300
+ } catch {
301
+ writable = false;
302
+ }
303
+ out.push({
304
+ id: "writable",
305
+ label: "Metarepo is writable",
306
+ status: writable ? "ok" : "fail",
307
+ detail: writable ? root : `can't write in ${root}`,
308
+ fix: "Clone the metarepo to a folder you own (not a synced or read-only share)."
309
+ });
310
+ const free = await (deps.freeBytes ?? defaultFreeBytes)(root);
311
+ out.push({
312
+ id: "disk",
313
+ label: "Disk space",
314
+ status: free === void 0 ? "warn" : free >= 2 * GB ? "ok" : free >= 0.5 * GB ? "warn" : "fail",
315
+ detail: free === void 0 ? "couldn't read free space" : `${(free / GB).toFixed(1)} GB free`,
316
+ fix: "Base clones and change worktrees need room: free at least 2 GB (about 50 MB per repo, more per worktree)."
317
+ });
318
+ const port = await (deps.portFree ?? defaultPortFree)(DEFAULT_PORT);
319
+ out.push({
320
+ id: "port",
321
+ label: `Port ${DEFAULT_PORT}`,
322
+ status: port ? "ok" : "warn",
323
+ detail: port ? "free for atticus ui" : "in use (another atticus ui, or another program)",
324
+ fix: `Stop the other program, or start the app on another port: atticus ui --port 4322.`
325
+ });
326
+ const manifest = await loadRepos(root).catch(() => []);
327
+ const lock = await readLock(root, "scan");
328
+ const read = [];
329
+ const unverified = [];
330
+ const unread = [];
331
+ const listed = manifest.filter((x) => !x.archived).sort((a, b) => a.id < b.id ? -1 : 1);
332
+ const commits = await eachAtOnce(listed, (r) => factsCommit(root, r.id));
333
+ for (const [i, r] of listed.entries()) {
334
+ const commit = commits[i];
335
+ if (commit)
336
+ read.push(`${r.id} at ${commit.slice(0, 12)}`);
337
+ else if (existsSync(join(factsDirOf(root), `${r.id}.jsonl`)))
338
+ unverified.push(`${r.id} read, not verified yet`);
339
+ else
340
+ unread.push(r.id);
341
+ }
342
+ const facts = [
343
+ ...read,
344
+ ...unverified,
345
+ ...unread.length ? [`not read yet: ${unread.join(", ")}`] : []
346
+ ];
347
+ out.push({
348
+ id: "facts-read",
349
+ label: "Facts read",
350
+ status: lock?.stale ? "warn" : "ok",
351
+ detail: [
352
+ lock ? lock.stale ? `the write started ${lock.startedAt} stopped before it finished` : `a write is running (since ${lock.startedAt})` : "",
353
+ facts.length ? facts.join("; ") : "no repo is listed yet"
354
+ ].filter(Boolean).join("; "),
355
+ fix: lock?.stale ? "Run atticus verify <repo> --write again: every file it writes is whole." : "Read a repo with /atticus-map <repo> in your assistant (or atticus map <repo>), then atticus verify <repo> --write."
356
+ });
357
+ const differ = [];
358
+ const cloned = manifest.filter((x) => !x.archived && !isInPlace(x.url));
359
+ const remotes = await eachAtOnce(cloned, (r) => remoteDefaultBranch(baseClonePath(root, r.id), git));
360
+ for (const [i, r] of cloned.entries()) {
361
+ const remote = remotes[i];
362
+ if (remote && remote !== r.defaultBranch)
363
+ differ.push(`${r.id} (manifest ${r.defaultBranch}, remote ${remote})`);
364
+ }
365
+ if (manifest.length)
366
+ out.push({
367
+ id: "default-branches",
368
+ label: "Default branches",
369
+ status: differ.length ? "warn" : "ok",
370
+ detail: differ.length ? `read from another branch than the remote's default: ${differ.join(", ")}` : "each repo is read from the branch its manifest names",
371
+ fix: "If the remote's default is the one to read, set defaultBranch in the manifest (or on Set up \u203A Repos), then run atticus workspace sync."
372
+ });
373
+ const up = await upgradeSoon;
374
+ out.push({
375
+ id: "upgrade",
376
+ label: "Metarepo version",
377
+ status: up.newer ? "fail" : up.pending.length ? "warn" : "ok",
378
+ detail: up.newer ? `upgraded by Atticus ${up.stamp.atticus}; this is ${up.atticus}` : up.pending.length ? `${up.pending.length} upgrade step${up.pending.length === 1 ? "" : "s"} to run` : up.stamp ? `up to date (last upgraded by Atticus ${up.stamp.atticus})` : "up to date",
379
+ fix: up.newer ? `Install Atticus ${up.stamp.atticus} or later before working in this metarepo (npm install -g @maycombhq/atticus@${up.stamp.atticus} from your npm mirror, or that version's offline bundle).` : "Run atticus upgrade, then commit what it changed in a pull request."
380
+ });
381
+ const op = await loadOrgPack(orgPackDirOf(root));
382
+ out.push({
383
+ id: "org-pack",
384
+ label: "Org pack",
385
+ status: op.problems.length ? "fail" : "ok",
386
+ detail: op.problems.length ? `${op.problems.length} problem${op.problems.length === 1 ? "" : "s"}` : "valid",
387
+ fix: "Run atticus orgpack validate and fix each problem it names."
388
+ });
389
+ const rt = op.runtime;
390
+ const assistants = rt.assistants.allowed.filter((a) => PROGRAMS[a]);
391
+ const found = assistants.filter((a) => PROGRAMS[a].programs.some(onPath));
392
+ out.push({
393
+ id: "assistant",
394
+ label: "AI assistant",
395
+ status: rt.ai === "off" || !assistants.length || found.length ? "ok" : "warn",
396
+ detail: rt.ai === "off" ? "AI is off here (runtime.yaml); no assistant needed" : assistants.length ? found.length ? `found: ${found.map((a) => PROGRAMS[a].name).join(", ")}` : `none of ${assistants.map((a) => PROGRAMS[a].name).join(", ")} is on PATH` : "runtime.yaml allows no assistant this check knows",
397
+ fix: "Hand-off mode runs in your own assistant: install the one runtime.yaml allows, or ask your desktop team. Atticus works without one; AI steps wait for you."
398
+ });
399
+ const editors = rt.editors.filter((e) => EDITORS[e]);
400
+ const editorFound = editors.filter((e) => EDITORS[e].some(onPath));
401
+ out.push({
402
+ id: "editor",
403
+ label: "Editor",
404
+ status: !editors.length || editorFound.length ? "ok" : "warn",
405
+ detail: editorFound.length ? `found: ${editorFound.join(", ")}` : editors.length ? `none of ${editors.join(", ")} is on PATH` : "no editor listed in runtime.yaml",
406
+ fix: "Change worktrees open as VS Code or IntelliJ workspaces: install one, or add its command to PATH."
407
+ });
408
+ const probes = await readProbes(root);
409
+ const tier = assistantTier(rt, { probes: probes.results });
410
+ const stale = tier.measured?.stale === true;
411
+ out.push({
412
+ id: "tier",
413
+ label: "First read of a repo",
414
+ status: stale || probes.problems.length ? "warn" : "ok",
415
+ detail: [tierLine(tier), ...probes.problems.map((p) => `${p}; left out.`)].join(" "),
416
+ fix: "Run atticus probe and follow what it prints in your assistant: it measures the tier again."
417
+ });
418
+ const model = rt.adapters.model;
419
+ const keyEnv = model && typeof model.settings.keyEnv === "string" ? model.settings.keyEnv : void 0;
420
+ const modelMode = rt.modes.allowed.includes("model");
421
+ const named = !!model && model.type !== "mock";
422
+ out.push({
423
+ id: "model",
424
+ label: "How AI steps run",
425
+ status: rt.ai === "off" || !modelMode || named && (!keyEnv || envName(env, keyEnv)) ? "ok" : "warn",
426
+ detail: rt.ai === "off" ? "AI is off here (runtime.yaml)" : !modelMode ? rt.modes.allowed.includes("headless-claude-code") ? "AI steps hand off to your assistant, or run in headless Claude Code (--mode headless-claude-code); runtime.yaml doesn't allow Atticus to call a model's API itself" : "AI steps hand off to your assistant; runtime.yaml doesn't allow Atticus to call a model itself" : !named ? "model mode is allowed, but runtime.yaml names no model provider" : keyEnv && !envName(env, keyEnv) ? `model mode with ${model.type}, but ${keyEnv} isn't set on this machine` : `model mode with ${model.type}${typeof model.settings.model === "string" ? ` (${model.settings.model})` : ""}${keyEnv ? `; ${keyEnv} is set` : ""}. Not called here: doctor makes no network call`,
427
+ fix: !named ? "Name the provider under adapters.model in runtime.yaml (docs/guide/admin.md, Calling a model directly), or leave model mode out of modes.allowed." : `Set the environment variable ${keyEnv ?? "the provider's key variable"} to the key on this machine (never in runtime.yaml), then open a new terminal.`
428
+ });
429
+ if (rt.ai !== "off") {
430
+ const choices = stepModelChoices(rt, env);
431
+ const notes = STEP_CLASSES.flatMap((c) => choices[c].notes);
432
+ out.push({
433
+ id: "step-models",
434
+ label: "Model for each kind of step",
435
+ status: notes.length ? "warn" : "ok",
436
+ detail: ((line) => notes.length ? `${line}. ${notes.join(" ")}` : line)(STEP_CLASSES.map((c) => stepModelLine(choices[c])).join("; ")),
437
+ fix: "Name a model per kind of step under models in runtime.yaml (read, draft, critic, knowledge, quick), each one models.allowed lists; a person overrides one in their editor's settings. docs/guide/models.md has a default table."
438
+ });
439
+ }
440
+ if (rt.ai !== "off" && meta) {
441
+ let files;
442
+ let problem;
443
+ try {
444
+ files = await (deps.assistantFiles ?? defaultAssistantFiles)(root);
445
+ } catch (e) {
446
+ problem = e instanceof Error ? e.message : String(e);
447
+ }
448
+ const parts = files ? [
449
+ files.missing.length ? `${files.missing.length} missing` : "",
450
+ files.stale.length ? `${files.stale.length} out of date` : "",
451
+ files.edited.length ? `${files.edited.length} edited by hand (kept)` : ""
452
+ ].filter(Boolean) : [];
453
+ out.push({
454
+ id: "assistant-files",
455
+ label: "Slash commands",
456
+ status: problem || files.missing.length || files.stale.length ? "warn" : "ok",
457
+ detail: problem ? `couldn't check them: ${problem}` : parts.length ? `${parts.join(", ")}: the /atticus-* commands your assistant runs` : "the /atticus-* commands your assistant runs are there and current",
458
+ fix: "Run atticus assistant-files, then commit what it wrote in a pull request; a file edited by hand is kept unless you add --force."
459
+ });
460
+ }
461
+ const lexical = "the context engine searches by words and names only";
462
+ const embed = await (deps.embed ?? (() => import("./chunk-FZL2HNWP.js")))().catch((e) => e);
463
+ if (embed instanceof Error) {
464
+ const model2 = retrievalOf(rt).embeddings.model;
465
+ const off = process.env.ATTICUS_EMBEDDINGS === "off" || model2 === "off";
466
+ const missing = embed.code === "ERR_MODULE_NOT_FOUND";
467
+ out.push({
468
+ id: "embeddings",
469
+ label: "Embedding model",
470
+ status: off || missing && model2 === "bundled" ? "ok" : "warn",
471
+ detail: off ? `off (${process.env.ATTICUS_EMBEDDINGS === "off" ? "ATTICUS_EMBEDDINGS is off for this process" : "retrieval.embeddings.model is off"}); ${lexical}` : !missing ? `@maycombhq/embed couldn't be loaded (${embed.message.split("\n")[0]}), so ${lexical}` : model2 === "bundled" ? `not installed (@maycombhq/embed, an optional plugin), so ${lexical} (BM25 and the graph walk)` : `runtime.yaml names the model ${model2}, but @maycombhq/embed, the optional plugin that runs it, isn't installed, so ${lexical}`,
472
+ fix: "Search by meaning is an optional plugin. Add it to this install with the plugin zip (atticus-<version>-embeddings-plugin.zip, built with pnpm bundle --embeddings-plugin): run its install script, then node embeddings-plugin/fetch-model.mjs for the model. Or install Atticus from the bundle built with pnpm bundle --with-embeddings, or install @maycombhq/atticus from your npm mirror without --omit=optional (it brings @maycombhq/embed-model and onnxruntime as optional dependencies). Set retrieval.embeddings.model to off to say the organisation doesn't use one. Atticus itself never downloads anything."
473
+ });
474
+ } else {
475
+ const { embeddingState, runtimeAvailable } = embed;
476
+ const e = await embeddingState(root);
477
+ const ort = e.setting === "off" ? void 0 : await runtimeAvailable(root);
478
+ out.push({
479
+ id: "embeddings",
480
+ label: "Embedding model",
481
+ status: e.setting === "off" ? "ok" : e.problem ? e.configured ? "warn" : "ok" : ort ? "ok" : "warn",
482
+ detail: e.setting === "off" ? `off (${e.problem ?? "runtime.yaml retrieval.embeddings"}); ${lexical}` : e.problem ? `${e.problem}, so ${lexical}` : (
483
+ // ADR 0124 addendum D-npm: an npm install carries the model's and onnxruntime's
484
+ // bytes, so the default is ready with nothing fetched.
485
+ `${ort ? "ready: " : ""}${e.id} (${((e.bytes ?? 0) / 1024 / 1024).toFixed(0)} MB, ${e.licence}), ${e.setting === "bundled" ? "installed with Atticus" : "the folder runtime.yaml names"}, in ${e.dir}; runtime: ${ort ?? `none found, so ${lexical}`}`
486
+ ),
487
+ fix: "The model is an optional plugin (@maycombhq/embed-model and its onnxruntime packages, optional dependencies of @maycombhq/atticus on npm). Where the plugin zip added them, run node embeddings-plugin/fetch-model.mjs in the Atticus folder (--list names the files, --from <folder> takes them from your mirror). Otherwise reinstall Atticus from your npm mirror (npm install -g @maycombhq/atticus) or from the offline bundle built with pnpm bundle --with-embeddings; in a checkout of Atticus run pnpm model:fetch; or point retrieval.embeddings.model at a model folder. Set it to off to say the organisation doesn't use one. Atticus itself never downloads anything."
488
+ });
489
+ }
490
+ const live = Object.entries(rt.adapters).filter(([, a]) => a && a.type !== "mock" && a.type !== "manual");
491
+ out.push({
492
+ id: "adapters",
493
+ label: "Outside systems",
494
+ status: "ok",
495
+ detail: live.length ? `${live.map(([k, a]) => `${k}: ${a.type}`).join(", ")}; each falls back to steps a person does when it can't be reached` : "every outside system is manual or a mock: Atticus writes steps for a person"
496
+ });
497
+ if (meta)
498
+ return out;
499
+ return [
500
+ { id: "metarepo", label: "Metarepo", status: "warn", detail: notMetarepo(root) },
501
+ ...out.filter((c) => !METAREPO_ONLY.has(c.id))
502
+ ];
503
+ }
504
+ var METAREPO_ONLY = /* @__PURE__ */ new Set([
505
+ "openspec-stores",
506
+ "writable",
507
+ "facts-read",
508
+ "default-branches",
509
+ "upgrade",
510
+ "org-pack",
511
+ "tier",
512
+ "assistant-files",
513
+ "adapters"
514
+ ]);
515
+ async function doctorCommand(root, o, io, deps = {}) {
516
+ const checks = await doctorChecks(root, deps);
517
+ const failed = checks.filter((c) => c.status === "fail");
518
+ const warned = checks.filter((c) => c.status === "warn");
519
+ if (o.json)
520
+ io.out(JSON.stringify({ checks, ok: failed.length === 0 }, null, 2));
521
+ else {
522
+ const mark = { ok: "[ok] ", warn: "[warn]", fail: "[FAIL]" };
523
+ for (const c of checks) {
524
+ io.out(`${mark[c.status]} ${c.label}: ${c.detail}`);
525
+ if (c.status !== "ok" && c.fix)
526
+ io.out(` ${c.fix}`);
527
+ }
528
+ io.out(failed.length ? `${failed.length} to fix before Atticus can work here${warned.length ? `, ${warned.length} to look at` : ""}.` : warned.length ? `Ready, with ${warned.length} thing${warned.length === 1 ? "" : "s"} to look at.` : "Ready: this machine has what Atticus needs.");
529
+ }
530
+ return failed.length ? 1 : 0;
531
+ }
532
+
533
+ export {
534
+ stepModelChoices,
535
+ stepModelLine,
536
+ MIN_NODE,
537
+ MIN_GIT,
538
+ doctorChecks,
539
+ doctorCommand
540
+ };
@@ -0,0 +1,54 @@
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
+ completionOf,
8
+ handoffDone,
9
+ openspecCheck,
10
+ openspecSetup,
11
+ workspaceOpen,
12
+ workspacePrune,
13
+ workspaceSync
14
+ } from "./chunk-APSVL2AI.js";
15
+ import "./chunk-23M2LUYM.js";
16
+ import "./chunk-Y5PZHS4K.js";
17
+ import "./chunk-IDGSU7JF.js";
18
+ import "./chunk-LK44ULGI.js";
19
+ import "./chunk-73VPWF5R.js";
20
+ import "./chunk-J5LHDJU4.js";
21
+ import "./chunk-YXJ4XOHF.js";
22
+ import "./chunk-ROTY5J2L.js";
23
+ import "./chunk-ZE3P35DA.js";
24
+ import "./chunk-7YYEKTYF.js";
25
+ import "./chunk-XEG3FE2R.js";
26
+ import "./chunk-KC5DROFC.js";
27
+ import "./chunk-RK6MKKKP.js";
28
+ import "./chunk-VOGCSYOI.js";
29
+ import "./chunk-47QE246J.js";
30
+ import "./chunk-XQ3YIV5R.js";
31
+ import "./chunk-MGVYVW7Q.js";
32
+ import "./chunk-NGPU2ARF.js";
33
+ import "./chunk-AY2IUF4K.js";
34
+ import "./chunk-6JLPXDWN.js";
35
+ import "./chunk-4GZXS6S2.js";
36
+ import "./chunk-R4TBNKKC.js";
37
+ import "./chunk-NIXVDQVO.js";
38
+ import "./chunk-UR7RMZ3R.js";
39
+ import "./chunk-N4QZJJVB.js";
40
+ import "./chunk-PGKHJYOB.js";
41
+ import "./chunk-MKRBG5EF.js";
42
+ import "./chunk-5XDNUJ4P.js";
43
+ import "./chunk-577AJVRS.js";
44
+ import "./chunk-D3PO4DOZ.js";
45
+ import "./chunk-TV45EUGM.js";
46
+ export {
47
+ completionOf,
48
+ handoffDone,
49
+ openspecCheck,
50
+ openspecSetup,
51
+ workspaceOpen,
52
+ workspacePrune,
53
+ workspaceSync
54
+ };