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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (475) hide show
  1. package/LICENSE +177 -0
  2. package/README.md +17 -2
  3. package/THIRD-PARTY-LICENSES.txt +2607 -0
  4. package/dist/bin.js +47 -0
  5. package/dist/chunk-23W7VWKR.js +2609 -0
  6. package/dist/chunk-2C5B464C.js +106 -0
  7. package/dist/chunk-2LLFKP7C.js +53 -0
  8. package/dist/chunk-2MD7TXSG.js +166 -0
  9. package/dist/chunk-2UIQBDJO.js +131 -0
  10. package/dist/chunk-32MPK524.js +378 -0
  11. package/dist/chunk-3ALD2W2A.js +95 -0
  12. package/dist/chunk-3G4YI4ZU.js +16 -0
  13. package/dist/chunk-4AK7IBVP.js +915 -0
  14. package/dist/chunk-4BMDGTED.js +69 -0
  15. package/dist/chunk-4NDAAFQT.js +103 -0
  16. package/dist/chunk-4Q3NN7VF.js +32 -0
  17. package/dist/chunk-4RS5KZQD.js +25 -0
  18. package/dist/chunk-4SKZDI62.js +22 -0
  19. package/dist/chunk-55YODD3N.js +385 -0
  20. package/dist/chunk-56YQ6ROQ.js +3479 -0
  21. package/dist/chunk-5A5L3T2U.js +583 -0
  22. package/dist/chunk-5FEOD73Z.js +374 -0
  23. package/dist/chunk-5GDRCDQB.js +32 -0
  24. package/dist/chunk-5WS2YOGD.js +95 -0
  25. package/dist/chunk-65NYPGRC.js +766 -0
  26. package/dist/chunk-6BVONWJ7.js +50 -0
  27. package/dist/chunk-6D4FRTFF.js +53 -0
  28. package/dist/chunk-6GPJOFV4.js +149 -0
  29. package/dist/chunk-6JCPI55B.js +92 -0
  30. package/dist/chunk-6JUBZBMW.js +56 -0
  31. package/dist/chunk-6SCVQZX5.js +2522 -0
  32. package/dist/chunk-6TACQN3N.js +41 -0
  33. package/dist/chunk-72TXNLOC.js +496 -0
  34. package/dist/chunk-76WKMA4J.js +14 -0
  35. package/dist/chunk-7EFILTCI.js +67 -0
  36. package/dist/chunk-7EKXJZ2Y.js +2902 -0
  37. package/dist/chunk-7EOBHUMC.js +133 -0
  38. package/dist/chunk-7JUKDRSZ.js +1726 -0
  39. package/dist/chunk-7NN5VWDC.js +43 -0
  40. package/dist/chunk-7UFQZXZA.js +5949 -0
  41. package/dist/chunk-A3KPZJ5M.js +131 -0
  42. package/dist/chunk-A6AC72A5.js +48 -0
  43. package/dist/chunk-A7KZKIZX.js +166 -0
  44. package/dist/chunk-ABWHYWNI.js +101 -0
  45. package/dist/chunk-AFFIK6JI.js +46 -0
  46. package/dist/chunk-AHOQZ4OK.js +37 -0
  47. package/dist/chunk-AVJDSJ2F.js +18 -0
  48. package/dist/chunk-AXXCPAP6.js +203 -0
  49. package/dist/chunk-AY3QXYMB.js +41 -0
  50. package/dist/chunk-B2OKWJIU.js +143 -0
  51. package/dist/chunk-B632FH3I.js +251 -0
  52. package/dist/chunk-BLW4SXCU.js +38 -0
  53. package/dist/chunk-BVS2K73A.js +33 -0
  54. package/dist/chunk-BWZ77RQT.js +25 -0
  55. package/dist/chunk-BYBUDX4T.js +163 -0
  56. package/dist/chunk-BYZCY6SP.js +230 -0
  57. package/dist/chunk-C6EKFH7J.js +169 -0
  58. package/dist/chunk-C6MZFGN7.js +271 -0
  59. package/dist/chunk-CAQZUNOH.js +1150 -0
  60. package/dist/chunk-CD4XHYGY.js +856 -0
  61. package/dist/chunk-CEZQOLEO.js +1217 -0
  62. package/dist/chunk-CHWTETW7.js +128 -0
  63. package/dist/chunk-CMV7TGU6.js +31 -0
  64. package/dist/chunk-CNUKCS2T.js +2741 -0
  65. package/dist/chunk-CP3L3FH7.js +549 -0
  66. package/dist/chunk-CPGCA6GZ.js +41 -0
  67. package/dist/chunk-CWM6KM5G.js +315 -0
  68. package/dist/chunk-CXDSTRUJ.js +873 -0
  69. package/dist/chunk-D3PO4DOZ.js +261 -0
  70. package/dist/chunk-DFBCSHVT.js +69 -0
  71. package/dist/chunk-DHPACDG7.js +104 -0
  72. package/dist/chunk-DPC5Y5DL.js +3898 -0
  73. package/dist/chunk-DPUYDDQG.js +164 -0
  74. package/dist/chunk-DQN7TF5D.js +325 -0
  75. package/dist/chunk-EADP3PEN.js +450 -0
  76. package/dist/chunk-ED2LWWIP.js +878 -0
  77. package/dist/chunk-EHVTK3UE.js +116 -0
  78. package/dist/chunk-EPTBZ3GP.js +101 -0
  79. package/dist/chunk-EXIMEJ2X.js +545 -0
  80. package/dist/chunk-EYWIDJFU.js +130 -0
  81. package/dist/chunk-F44OMYIN.js +54 -0
  82. package/dist/chunk-F7HYOUFF.js +287 -0
  83. package/dist/chunk-FALXWAMD.js +182 -0
  84. package/dist/chunk-FBNPE7HS.js +49 -0
  85. package/dist/chunk-FSWUD5QB.js +108 -0
  86. package/dist/chunk-FVQISWPW.js +296 -0
  87. package/dist/chunk-G2B4ZQGH.js +240 -0
  88. package/dist/chunk-GK6XK5SP.js +1227 -0
  89. package/dist/chunk-GLEBK5L3.js +34 -0
  90. package/dist/chunk-GNB5QDDI.js +25 -0
  91. package/dist/chunk-GQ4N4WKF.js +1142 -0
  92. package/dist/chunk-GRMR5TRQ.js +119 -0
  93. package/dist/chunk-HC6XKREB.js +334 -0
  94. package/dist/chunk-HFQCFSJR.js +60 -0
  95. package/dist/chunk-HJDICQA4.js +102 -0
  96. package/dist/chunk-HLJAXMM4.js +233 -0
  97. package/dist/chunk-HVIMMDVB.js +162 -0
  98. package/dist/chunk-HZVLAPN5.js +32 -0
  99. package/dist/chunk-I3E7CX4H.js +155 -0
  100. package/dist/chunk-IQFTZ37C.js +2919 -0
  101. package/dist/chunk-ITY3VJRX.js +285 -0
  102. package/dist/chunk-JBTK5OP2.js +55 -0
  103. package/dist/chunk-JPGCERE2.js +26 -0
  104. package/dist/chunk-JQDNHIBC.js +38 -0
  105. package/dist/chunk-JRBCWLOR.js +307 -0
  106. package/dist/chunk-JRZQA2JM.js +212 -0
  107. package/dist/chunk-KCBJCA66.js +45 -0
  108. package/dist/chunk-KJPMEAI4.js +705 -0
  109. package/dist/chunk-KQDZXGNR.js +14 -0
  110. package/dist/chunk-KUUQR4HA.js +264 -0
  111. package/dist/chunk-L24C55VN.js +7923 -0
  112. package/dist/chunk-L3BX5ZIB.js +400 -0
  113. package/dist/chunk-L6SGQIR3.js +471 -0
  114. package/dist/chunk-LBENYT3H.js +66 -0
  115. package/dist/chunk-LNAJW6FB.js +47 -0
  116. package/dist/chunk-MC3H7736.js +19910 -0
  117. package/dist/chunk-MMOSZPWJ.js +273 -0
  118. package/dist/chunk-MXCHWULV.js +285 -0
  119. package/dist/chunk-N3E56YPN.js +344 -0
  120. package/dist/chunk-NHFQMOVK.js +180 -0
  121. package/dist/chunk-NQU6KNQF.js +27 -0
  122. package/dist/chunk-OIK5YPTN.js +391 -0
  123. package/dist/chunk-OLWFG75W.js +4330 -0
  124. package/dist/chunk-ONPUIE7Y.js +29 -0
  125. package/dist/chunk-OW7D2PJL.js +376 -0
  126. package/dist/chunk-P63VL4HE.js +2357 -0
  127. package/dist/chunk-PA4YNUMU.js +45 -0
  128. package/dist/chunk-PAMPPUR6.js +4500 -0
  129. package/dist/chunk-PBS3OFNN.js +113 -0
  130. package/dist/chunk-PFT3VTS4.js +214 -0
  131. package/dist/chunk-PFTA6BZF.js +49 -0
  132. package/dist/chunk-PNN5KLAY.js +119 -0
  133. package/dist/chunk-PRPPGYZG.js +104 -0
  134. package/dist/chunk-PUKEZ37F.js +666 -0
  135. package/dist/chunk-Q3HOFXZJ.js +76 -0
  136. package/dist/chunk-Q5AMFEWD.js +119 -0
  137. package/dist/chunk-QKRNMBJO.js +80 -0
  138. package/dist/chunk-QSU47IQ5.js +36 -0
  139. package/dist/chunk-QSXK2RGH.js +688 -0
  140. package/dist/chunk-QXNWYUYI.js +52 -0
  141. package/dist/chunk-R6RY4Q5T.js +51 -0
  142. package/dist/chunk-RCU3MPY2.js +1496 -0
  143. package/dist/chunk-RLIB4JUN.js +174 -0
  144. package/dist/chunk-RYSCLMU3.js +1991 -0
  145. package/dist/chunk-RZUZ4RJJ.js +415 -0
  146. package/dist/chunk-S2A7YC3Q.js +41433 -0
  147. package/dist/chunk-S2FBBX7D.js +540 -0
  148. package/dist/chunk-S34B4QPI.js +430 -0
  149. package/dist/chunk-SETWVXOJ.js +2078 -0
  150. package/dist/chunk-SMA4N4AC.js +211 -0
  151. package/dist/chunk-SP2I63OO.js +252 -0
  152. package/dist/chunk-STHSY74Q.js +242 -0
  153. package/dist/chunk-STUPFGXY.js +3206 -0
  154. package/dist/chunk-T5I4S2W3.js +34 -0
  155. package/dist/chunk-T6AIP7H5.js +3851 -0
  156. package/dist/chunk-TANFV3MZ.js +531 -0
  157. package/dist/chunk-TAVDMUV3.js +189 -0
  158. package/dist/chunk-TBSQJ6IV.js +324 -0
  159. package/dist/chunk-TIZHP7KE.js +408 -0
  160. package/dist/chunk-TV45EUGM.js +51 -0
  161. package/dist/chunk-TW2KPPUC.js +4087 -0
  162. package/dist/chunk-V2YTAIQO.js +1075 -0
  163. package/dist/chunk-V5PKHHQQ.js +1963 -0
  164. package/dist/chunk-VF4IOZZO.js +184 -0
  165. package/dist/chunk-VJTINHZI.js +48 -0
  166. package/dist/chunk-VKLILA2D.js +205 -0
  167. package/dist/chunk-VOGCSYOI.js +16 -0
  168. package/dist/chunk-VPTTCYOC.js +16101 -0
  169. package/dist/chunk-WY6PP6AA.js +53 -0
  170. package/dist/chunk-WYFIXP54.js +174 -0
  171. package/dist/chunk-WZ2BXIGG.js +34 -0
  172. package/dist/chunk-XJNDSYGO.js +147 -0
  173. package/dist/chunk-XPCM366L.js +70 -0
  174. package/dist/chunk-XSQKGVYA.js +69 -0
  175. package/dist/chunk-XUPVB7TL.js +207 -0
  176. package/dist/chunk-XZRON6IV.js +131 -0
  177. package/dist/chunk-Y4NG2FP5.js +94 -0
  178. package/dist/chunk-YEDDOYSC.js +27809 -0
  179. package/dist/chunk-YGMCXNTY.js +41 -0
  180. package/dist/chunk-YJKPTX6J.js +228 -0
  181. package/dist/chunk-YMZ3TNYB.js +18 -0
  182. package/dist/chunk-Z6LF7HQN.js +22 -0
  183. package/dist/chunk-Z7SG32ZY.js +55 -0
  184. package/dist/chunk-ZDPAS56H.js +76 -0
  185. package/dist/chunk-ZJSP24X4.js +1247 -0
  186. package/dist/chunk-ZMAINWBW.js +18 -0
  187. package/dist/chunk-ZMFPW66A.js +22 -0
  188. package/dist/chunk-ZUIAOKXI.js +1611 -0
  189. package/dist/chunk-ZVM6AKKM.js +47 -0
  190. package/dist/files.json +1888 -0
  191. package/dist/fixtures/forge/README.md +19 -0
  192. package/dist/fixtures/forge/expected/discrepancies.yaml +54 -0
  193. package/dist/fixtures/forge/expected/inputs.yaml +38 -0
  194. package/dist/fixtures/forge/expected/scan.yaml +342 -0
  195. package/dist/fixtures/forge/inputs/diagrams/forge-context.drawio +23 -0
  196. package/dist/fixtures/forge/inputs/partner-specs/northwind-pay-openapi.yaml +11 -0
  197. package/dist/fixtures/forge/inputs/tickets/ado-stories.json +4 -0
  198. package/dist/fixtures/forge/inputs/tickets/closed-service-requests.json +5 -0
  199. package/dist/fixtures/forge/inputs/wiki/integration-patterns.md +11 -0
  200. package/dist/fixtures/forge/inputs/wiki/ledger-solution-spec.md +9 -0
  201. package/dist/fixtures/forge/inputs/wiki/snow-firewall-request.md +4 -0
  202. package/dist/fixtures/forge/metarepo/judgments/reaches/84af5b6af24f7ca8c23013f3.yaml +17 -0
  203. package/dist/fixtures/forge/metarepo/judgments/reaches/c3917555edebddce8cecb647.yaml +17 -0
  204. package/dist/fixtures/forge/metarepo/judgments/reaches/c5fafd6601f8ca9e34e0bbd0.yaml +17 -0
  205. package/dist/fixtures/forge/metarepo/org-pack/agents/architecture-critic.yaml +9 -0
  206. package/dist/fixtures/forge/metarepo/org-pack/agents/story-writer.yaml +10 -0
  207. package/dist/fixtures/forge/metarepo/org-pack/checklists/architecture.yaml +115 -0
  208. package/dist/fixtures/forge/metarepo/org-pack/dialects/forge.yaml +111 -0
  209. package/dist/fixtures/forge/metarepo/org-pack/gates.yaml +22 -0
  210. package/dist/fixtures/forge/metarepo/org-pack/pack.yaml +11 -0
  211. package/dist/fixtures/forge/metarepo/org-pack/patterns/A.EB.PUB.yaml +12 -0
  212. package/dist/fixtures/forge/metarepo/org-pack/patterns/D.JDBC.yaml +12 -0
  213. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.DIR.BFF.yaml +12 -0
  214. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.GW.SOR.yaml +13 -0
  215. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.GW.VND.yaml +14 -0
  216. package/dist/fixtures/forge/metarepo/org-pack/process/change-templates/feature.md +37 -0
  217. package/dist/fixtures/forge/metarepo/org-pack/process/skills/add-forge-endpoint/SKILL.md +17 -0
  218. package/dist/fixtures/forge/metarepo/org-pack/process/snow/firewall-rule.yaml +14 -0
  219. package/dist/fixtures/forge/metarepo/org-pack/process/snow/gateway-route.yaml +13 -0
  220. package/dist/fixtures/forge/metarepo/org-pack/profiles/forge/profile.yaml +12 -0
  221. package/dist/fixtures/forge/metarepo/org-pack/profiles/forge/repos.manifest.yaml +44 -0
  222. package/dist/fixtures/forge/metarepo/org-pack/roles.yaml +14 -0
  223. package/dist/fixtures/forge/metarepo/org-pack/runtime.yaml +14 -0
  224. package/dist/fixtures/forge/metarepo/org-pack/sources.yaml +3 -0
  225. package/dist/fixtures/forge/repos/forge-events/topics/payments.initiated.yaml +4 -0
  226. package/dist/fixtures/forge/repos/forge-events/topics/transfers.completed.yaml +4 -0
  227. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/ledger-v1.xml +3 -0
  228. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/policies/SpikeArrest.xml +3 -0
  229. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/policies/VerifyOAuth.xml +4 -0
  230. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/proxies/default.xml +14 -0
  231. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/targets/ledger.xml +5 -0
  232. package/dist/fixtures/forge/repos/forge-infra/alerts/ledger-api.yaml +5 -0
  233. package/dist/fixtures/forge/repos/forge-infra/k8s/ledger-api.yaml +15 -0
  234. package/dist/fixtures/forge/repos/forge-infra/k8s/portal-bff.yaml +7 -0
  235. package/dist/fixtures/forge/repos/forge-infra/terraform/ledger-db.tf +9 -0
  236. package/dist/fixtures/forge/repos/forge-ledger/api/ledger-openapi.yaml +31 -0
  237. package/dist/fixtures/forge/repos/forge-ledger/forge.yaml +4 -0
  238. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/LedgerEndpoints.java +13 -0
  239. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/LedgerEvents.java +11 -0
  240. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/NorthwindClient.java +10 -0
  241. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/application.yml +3 -0
  242. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/db/migration/V1__create_account.sql +5 -0
  243. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/db/migration/V2__create_entry.sql +7 -0
  244. package/dist/fixtures/forge/repos/forge-portal-bff/pom.xml +1 -0
  245. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/AuditPublisher.java +12 -0
  246. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/BalanceController.java +16 -0
  247. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/LedgerClient.java +13 -0
  248. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/PaymentEvents.java +13 -0
  249. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/resources/application.yml +8 -0
  250. package/dist/fixtures/forge/repos/forge-portal-ui/package.json +1 -0
  251. package/dist/fixtures/forge/repos/forge-portal-ui/src/api/balance.ts +5 -0
  252. package/dist/fixtures/forge/repos/forge-reports-job/src/main/java/forge/reports/DailyEntriesJob.java +19 -0
  253. package/dist/fixtures/forge/repos/forge-reports-job/src/main/resources/application.yml +3 -0
  254. package/dist/fixtures/forge-change/README.md +41 -0
  255. package/dist/fixtures/forge-change/expected/findings.yaml +301 -0
  256. package/dist/fixtures/forge-change/expected/stories.yaml +101 -0
  257. package/dist/fixtures/forge-change/judgments/personal-data/0b5f3dbf5257a22275d8c74b.yaml +18 -0
  258. package/dist/fixtures/forge-change/judgments/personal-data/2759a66770134c417440bf2d.yaml +18 -0
  259. package/dist/fixtures/forge-change/judgments/personal-data/31b1ea2f14d0737f1aca79fd.yaml +18 -0
  260. package/dist/fixtures/forge-change/judgments/personal-data/49afd70c08228e65ad6ca1ed.yaml +18 -0
  261. package/dist/fixtures/forge-change/judgments/personal-data/761cabcb8a39f5e5866d2dd6.yaml +18 -0
  262. package/dist/fixtures/forge-change/judgments/personal-data/adae902b90cc8ffa0c765145.yaml +18 -0
  263. package/dist/fixtures/forge-change/judgments/personal-data/ba11bb933105ec9493e065dd.yaml +18 -0
  264. package/dist/fixtures/forge-change/judgments/personal-data/bdbcd1cdac3021c68063c3e7.yaml +18 -0
  265. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/brief.md +35 -0
  266. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/change.yaml +120 -0
  267. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/data.md +18 -0
  268. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/design.md +29 -0
  269. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/interfaces.md +17 -0
  270. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/mappings.md +26 -0
  271. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/proposal.md +35 -0
  272. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/snow.md +12 -0
  273. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/specs/transfer-limits/spec.md +19 -0
  274. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s1-refuse-over-limit.md +17 -0
  275. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s2-show-remaining.md +16 -0
  276. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s3-audit-refusals.md +18 -0
  277. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s4-velocity-check.md +16 -0
  278. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories.md +8 -0
  279. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/tasks.md +12 -0
  280. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/ux.md +7 -0
  281. package/dist/fixtures/forge-change/org-pack/agents/code-and-test-critic.yaml +13 -0
  282. package/dist/fixtures/forge-change/org-pack/agents/complete-critic.yaml +12 -0
  283. package/dist/fixtures/forge-change/org-pack/agents/safe-critic.yaml +12 -0
  284. package/dist/fixtures/forge-change/org-pack/agents/ship-critic.yaml +11 -0
  285. package/dist/fixtures/forge-change/org-pack/agents/true-critic.yaml +11 -0
  286. package/dist/fixtures/forge-change/org-pack/checklists/review.yaml +54 -0
  287. package/dist/fixtures/forge-change/org-pack/gates.yaml +25 -0
  288. package/dist/fixtures/forge-change/org-pack/teams/team-ledger/checklists/ledger-team.yaml +227 -0
  289. package/dist/fixtures/forge-change/recordings/complete-critic/2ad84f84bf39c1d5412697e69fe23034d6983ec45a00314bf0975e627589a3c5.json +12 -0
  290. package/dist/fixtures/forge-change/recordings/complete-critic/417c98d8e54a4387d0fd93441c49f44c2868958739070d855c1dce0c41e24db3.json +12 -0
  291. package/dist/fixtures/forge-change/recordings/complete-critic/50203ee22e9cb3ef047295edb6538fe7d5695e1e4b139f3c929013dc6ce47021.json +12 -0
  292. package/dist/fixtures/forge-change/recordings/complete-critic/89f18d67f5d9c325bf35e2a9e020f9ddb6ee13b8523315037f0905cc57c040b1.json +12 -0
  293. package/dist/fixtures/forge-change/recordings/complete-critic/b4097867d26ae8eadc8b9efa8cdd86897013358035f0b40086c299a59c4ba121.json +12 -0
  294. package/dist/fixtures/forge-change/recordings/safe-critic/302d06f49664dd67ad2e21ab9cf74c1b0f7d3f750709c6ed8eff2b70983274e2.json +12 -0
  295. package/dist/fixtures/forge-change/recordings/safe-critic/32f1049c9a5ab4a759543290db4644ec6e221cc45fdfdcf06193837c6a8ce0b9.json +12 -0
  296. package/dist/fixtures/forge-change/recordings/safe-critic/4e4a84bfc04b9f26ca4250319a879901ff7a1c081c71e46a117675fee05026b0.json +12 -0
  297. package/dist/fixtures/forge-change/recordings/safe-critic/604af0fcdd6df6b76208fa88305fdc15c37606c2a4d1ae816477e46ac8c2dd04.json +12 -0
  298. package/dist/fixtures/forge-change/recordings/safe-critic/f0bf50af11f14c50d07904f0dffe1c8c20fb0cd89770645a8824c1d30a443955.json +12 -0
  299. package/dist/fixtures/forge-change/recordings/ship-critic/350954b58833b2c04880c67db45a1b328b7fd541d9f0d943b63905b8875488a6.json +12 -0
  300. package/dist/fixtures/forge-change/recordings/ship-critic/4af95c6c96a206777cec9de1f9c2d8c55a36ddc9b8db2f81d6eb83217b835efa.json +12 -0
  301. package/dist/fixtures/forge-change/recordings/ship-critic/76c34522a49cf7587a4e5689a5030d384603fa780b8aba97d27815cbc829683e.json +12 -0
  302. package/dist/fixtures/forge-change/recordings/ship-critic/a3b2cd1ace48587e5994333db03b34c3a0f9dec4f1932f1730ddfb687f6918c8.json +12 -0
  303. package/dist/fixtures/forge-change/recordings/ship-critic/de288a4fa64d0fc20890f9a787080ce6eac5203b7b9b72d884df11e8cf111835.json +12 -0
  304. package/dist/fixtures/forge-change/recordings/story-writer/1ddb00eac2aaf91a5ec5d9dfd220116be9f75aec6546a4a3a3b050ed89af2864.json +12 -0
  305. package/dist/packages/assistant-kit/frameworks-kit/README.md +86 -0
  306. package/dist/packages/assistant-kit/frameworks-kit/checklist.md +11 -0
  307. package/dist/packages/assistant-kit/frameworks-kit/examples/tide-lantern.yaml +56 -0
  308. package/dist/packages/assistant-kit/frameworks-kit/examples/tide-platform.yaml +43 -0
  309. package/dist/packages/assistant-kit/frameworks-kit/prompts/write-framework-model.md +12 -0
  310. package/dist/packages/assistant-kit/kit/README.md +98 -0
  311. package/dist/packages/assistant-kit/kit/c2-reference.md +334 -0
  312. package/dist/packages/assistant-kit/kit/checklist.md +39 -0
  313. package/dist/packages/assistant-kit/kit/examples/house-http-client.yaml +102 -0
  314. package/dist/packages/assistant-kit/kit/examples/tide-apigee.yaml +56 -0
  315. package/dist/packages/assistant-kit/kit/examples/tide-apim.yaml +32 -0
  316. package/dist/packages/assistant-kit/kit/examples/tide-kong.yaml +44 -0
  317. package/dist/packages/assistant-kit/kit/prompts/write-dialect.md +34 -0
  318. package/dist/packages/assistant-kit/kit/worked-example.md +198 -0
  319. package/dist/packages/conformance/sample/README.md +4 -0
  320. package/dist/packages/conformance/sample/inputs/notes.md +3 -0
  321. package/dist/packages/conformance/sample/inputs/systems.csv +3 -0
  322. package/dist/packages/conformance/sample/repo/api/greeter.proto +6 -0
  323. package/dist/packages/conformance/sample/repo/api/openapi.yaml +10 -0
  324. package/dist/packages/conformance/sample/repo/api/schema.graphql +3 -0
  325. package/dist/packages/conformance/sample/repo/db/V1__create_greeting.sql +4 -0
  326. package/dist/packages/conformance/sample/repo/package.json +7 -0
  327. package/dist/packages/conformance/sample/repo/src/main/java/sample/HelloController.java +10 -0
  328. package/dist/packages/conformance/sample/repo/web/app.ts +4 -0
  329. package/dist/packages/evals/datasets/critic-lenses.yaml +62 -0
  330. package/dist/packages/evals/datasets/dialect-writer.yaml +14 -0
  331. package/dist/packages/evals/datasets/feature-namer.yaml +34 -0
  332. package/dist/packages/evals/datasets/glossary-definer.yaml +25 -0
  333. package/dist/packages/evals/datasets/story-writer.yaml +13 -0
  334. package/dist/packages/evals/datasets/template-writer.yaml +16 -0
  335. package/dist/packages/evals/datasets/test-writer.yaml +18 -0
  336. package/dist/packages/executors/reference/reference-executor.mjs +233 -0
  337. package/dist/packages/extractors/dialects/argocd.yaml +45 -0
  338. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/AccountResource.java +47 -0
  339. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/AuditClient.java +12 -0
  340. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/LedgerClient.java +17 -0
  341. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/LedgerClient.java +14 -0
  342. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/RatesClient.java +11 -0
  343. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/StatementController.java +36 -0
  344. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/resources/application.yml +7 -0
  345. package/dist/packages/extractors/dialects/fixtures/quarkus-reactive-messaging/fraud-service/src/main/java/forge/fraud/FraudScorer.java +27 -0
  346. package/dist/packages/extractors/dialects/fixtures/quarkus-reactive-messaging/fraud-service/src/main/resources/application.properties +4 -0
  347. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/api.tf +38 -0
  348. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/main.tf +95 -0
  349. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/terraform.tfvars +1 -0
  350. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/variables.tf +4 -0
  351. package/dist/packages/extractors/dialects/fixtures/terraform-azure/forge-azure-infra/main.tf +102 -0
  352. package/dist/packages/extractors/dialects/fixtures/terraform-gcp/forge-gcp-infra/main.tf +51 -0
  353. package/dist/packages/extractors/dialects/harness.yaml +101 -0
  354. package/dist/packages/extractors/dialects/jaxrs.yaml +155 -0
  355. package/dist/packages/extractors/dialects/micronaut.yaml +207 -0
  356. package/dist/packages/extractors/dialects/quarkus-reactive-messaging.yaml +158 -0
  357. package/dist/packages/extractors/dialects/tekton.yaml +71 -0
  358. package/dist/packages/extractors/dialects/terraform-aws.yaml +267 -0
  359. package/dist/packages/extractors/dialects/terraform-azure.yaml +212 -0
  360. package/dist/packages/extractors/dialects/terraform-gcp.yaml +109 -0
  361. package/dist/packages/extractors/grammars/README.md +11 -0
  362. package/dist/packages/extractors/grammars/tree-sitter-groovy.LICENSE +21 -0
  363. package/dist/packages/extractors/grammars/tree-sitter-groovy.wasm +0 -0
  364. package/dist/packages/extractors/grammars/vendored.json +11 -0
  365. package/dist/packages/learn/lessons/architect-diagrams-and-code.yaml +69 -0
  366. package/dist/packages/learn/lessons/business-analyst-story-bar.yaml +94 -0
  367. package/dist/packages/learn/lessons/delivery-lead-release-readiness.yaml +44 -0
  368. package/dist/packages/learn/lessons/designer-features-in-user-words.yaml +57 -0
  369. package/dist/packages/learn/lessons/developer-find-your-way.yaml +60 -0
  370. package/dist/packages/learn/lessons/everyone-first-hour.yaml +74 -0
  371. package/dist/packages/learn/lessons/platform-lead-coverage-and-defences.yaml +58 -0
  372. package/dist/packages/learn/lessons/product-owner-first-change.yaml +167 -0
  373. package/dist/packages/learn/lessons/qa-tests-and-trace.yaml +53 -0
  374. package/dist/packages/learn/lessons/team-lead-initiative.yaml +146 -0
  375. package/dist/packages/naysayer/constitution/constitution.yaml +286 -0
  376. package/dist/packages/naysayer/starter/review.yaml +256 -0
  377. package/dist/packages/sdk/npm/index.js +8892 -0
  378. package/dist/packages/speckit/rules/drift.yaml +78 -0
  379. package/dist/packages/taskrun/rules/conform.yaml +38 -0
  380. package/dist/packages/testgen/rules/trace.yaml +49 -0
  381. package/dist/packages/ui/dist/assets/elk-api-tma0MCuh.js +2 -0
  382. package/dist/packages/ui/dist/assets/elk-worker.min--dAJroGl.js +6401 -0
  383. package/dist/packages/ui/dist/assets/elk-worker.min-DdYmS5kP.js +2 -0
  384. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-400-normal-BTotfTJu.woff +0 -0
  385. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-400-normal-DZqxrq2p.woff2 +0 -0
  386. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-500-normal-ByOcLdNv.woff +0 -0
  387. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-500-normal-CocWQlwt.woff2 +0 -0
  388. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-600-normal-71GNu3SW.woff2 +0 -0
  389. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-600-normal-BGq0mW3O.woff +0 -0
  390. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-400-normal-Dsrv2Tcn.woff +0 -0
  391. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-400-normal-g30qAdWV.woff2 +0 -0
  392. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-500-normal-Cs5J6C77.woff2 +0 -0
  393. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-500-normal-DB5PtV2g.woff +0 -0
  394. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-600-normal-Bz0x94Yp.woff +0 -0
  395. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-600-normal-DUMzJB7m.woff2 +0 -0
  396. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-400-normal-D9ESIMu3.woff +0 -0
  397. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-400-normal-_efipK4i.woff2 +0 -0
  398. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-500-normal-CuWXN6rf.woff +0 -0
  399. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-500-normal-JMMifIXV.woff2 +0 -0
  400. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-600-normal-D-CqTdkO.woff +0 -0
  401. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-600-normal-DzTrcv_p.woff2 +0 -0
  402. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
  403. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
  404. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
  405. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
  406. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
  407. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
  408. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-400-normal-C5H60-Va.woff2 +0 -0
  409. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-400-normal-RBey6euL.woff +0 -0
  410. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-500-normal-D0aIdm-b.woff +0 -0
  411. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-500-normal-DakdToA3.woff2 +0 -0
  412. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-600-normal-DIrixKbi.woff +0 -0
  413. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-600-normal-DOrvGEcy.woff2 +0 -0
  414. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-400-normal-DG4YqDda.woff2 +0 -0
  415. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-400-normal-fK1oJ5dG.woff +0 -0
  416. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-500-normal-BEb3_waV.woff +0 -0
  417. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-500-normal-e4dixQRQ.woff2 +0 -0
  418. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-600-normal-DgdngZtN.woff +0 -0
  419. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-600-normal-DpPYBSTl.woff2 +0 -0
  420. package/dist/packages/ui/dist/assets/index-B54fm9FQ.js +29 -0
  421. package/dist/packages/ui/dist/assets/index-DD_hufQz.css +1 -0
  422. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  423. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  424. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff +0 -0
  425. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2 +0 -0
  426. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  427. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  428. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff +0 -0
  429. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2 +0 -0
  430. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  431. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  432. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  433. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  434. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  435. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  436. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2 +0 -0
  437. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff +0 -0
  438. package/dist/packages/ui/dist/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  439. package/dist/packages/ui/dist/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff +0 -0
  440. package/dist/packages/ui/dist/assets/rajdhani-devanagari-600-normal-BtY48IV_.woff +0 -0
  441. package/dist/packages/ui/dist/assets/rajdhani-devanagari-600-normal-DhS7ScYx.woff2 +0 -0
  442. package/dist/packages/ui/dist/assets/rajdhani-devanagari-700-normal-BQQOj9BB.woff2 +0 -0
  443. package/dist/packages/ui/dist/assets/rajdhani-devanagari-700-normal-DBRwWuxA.woff +0 -0
  444. package/dist/packages/ui/dist/assets/rajdhani-latin-600-normal-CXCVEoA9.woff2 +0 -0
  445. package/dist/packages/ui/dist/assets/rajdhani-latin-600-normal-Dx02qI2_.woff +0 -0
  446. package/dist/packages/ui/dist/assets/rajdhani-latin-700-normal-BPDUZo87.woff2 +0 -0
  447. package/dist/packages/ui/dist/assets/rajdhani-latin-700-normal-e0Uj8ZlN.woff +0 -0
  448. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-600-normal-BleIgkPp.woff +0 -0
  449. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-600-normal-C9ZjJQAt.woff2 +0 -0
  450. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-700-normal-BPaQ7tlD.woff +0 -0
  451. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-700-normal-S6aYESQK.woff2 +0 -0
  452. package/dist/packages/ui/dist/favicon.svg +1 -0
  453. package/dist/packages/ui/dist/index.html +15 -0
  454. package/dist/third-party.json +575 -0
  455. package/dist/vendor/@fission-ai/openspec/bin/openspec.js +85986 -0
  456. package/dist/vendor/@fission-ai/openspec/package.json +82 -0
  457. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/schema.yaml +248 -0
  458. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/design.md +21 -0
  459. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/proposal.md +34 -0
  460. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/spec.md +13 -0
  461. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/tasks.md +11 -0
  462. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-c_sharp.wasm +0 -0
  463. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-go.wasm +0 -0
  464. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-java.wasm +0 -0
  465. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-javascript.wasm +0 -0
  466. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-kotlin.wasm +0 -0
  467. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-php.wasm +0 -0
  468. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-python.wasm +0 -0
  469. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-ruby.wasm +0 -0
  470. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-rust.wasm +0 -0
  471. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-scala.wasm +0 -0
  472. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-tsx.wasm +0 -0
  473. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-typescript.wasm +0 -0
  474. package/dist/vendor/web-tree-sitter/tree-sitter.wasm +0 -0
  475. package/package.json +36 -3
@@ -0,0 +1,33 @@
1
+ import { createRequire as __atticusCreateRequire } from "node:module";
2
+ import { fileURLToPath as __atticusFileURLToPath } from "node:url";
3
+ var require = __atticusCreateRequire(import.meta.url);
4
+ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
+ var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
+ import {
7
+ citesCli,
8
+ fileInRepo,
9
+ uiCiteRoutes
10
+ } from "./chunk-GK6XK5SP.js";
11
+ import "./chunk-5FEOD73Z.js";
12
+ import "./chunk-7UFQZXZA.js";
13
+ import "./chunk-56YQ6ROQ.js";
14
+ import "./chunk-4AK7IBVP.js";
15
+ import "./chunk-7JUKDRSZ.js";
16
+ import "./chunk-OLWFG75W.js";
17
+ import "./chunk-L24C55VN.js";
18
+ import "./chunk-PAMPPUR6.js";
19
+ import "./chunk-23W7VWKR.js";
20
+ import "./chunk-7EKXJZ2Y.js";
21
+ import "./chunk-MC3H7736.js";
22
+ import "./chunk-T6AIP7H5.js";
23
+ import "./chunk-KJPMEAI4.js";
24
+ import "./chunk-GQ4N4WKF.js";
25
+ import "./chunk-CNUKCS2T.js";
26
+ import "./chunk-S2A7YC3Q.js";
27
+ import "./chunk-D3PO4DOZ.js";
28
+ import "./chunk-TV45EUGM.js";
29
+ export {
30
+ citesCli,
31
+ fileInRepo,
32
+ uiCiteRoutes
33
+ };
@@ -0,0 +1,25 @@
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
+ runtimeForCli
8
+ } from "./chunk-CNUKCS2T.js";
9
+
10
+ // packages/cli/dist/judging.js
11
+ async function judgingRuntime(root, given) {
12
+ if (given === null)
13
+ return void 0;
14
+ if (given)
15
+ return given;
16
+ try {
17
+ return (await runtimeForCli(root)).runtime;
18
+ } catch {
19
+ return void 0;
20
+ }
21
+ }
22
+
23
+ export {
24
+ judgingRuntime
25
+ };
@@ -0,0 +1,163 @@
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
+ ASSISTANT_FORMATS,
8
+ assistantTier,
9
+ probeFileOf,
10
+ probeTier,
11
+ writeProbe
12
+ } from "./chunk-V5PKHHQQ.js";
13
+ import "./chunk-KJPMEAI4.js";
14
+ import {
15
+ AssistantId,
16
+ external_exports,
17
+ loadOrgPack,
18
+ orgPackDirOf,
19
+ runsDirOf,
20
+ runsRelOf
21
+ } from "./chunk-S2A7YC3Q.js";
22
+ import "./chunk-D3PO4DOZ.js";
23
+ import "./chunk-TV45EUGM.js";
24
+
25
+ // packages/cli/dist/probe-commands.js
26
+ import { randomBytes } from "node:crypto";
27
+ import { existsSync } from "node:fs";
28
+ import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
29
+ import { join } from "node:path";
30
+ var OPEN_HOURS = 24;
31
+ var Challenge = external_exports.strictObject({
32
+ schemaVersion: external_exports.literal(1),
33
+ assistant: AssistantId,
34
+ code: external_exports.string().regex(/^[0-9a-f]{8}$/),
35
+ started: external_exports.iso.datetime(),
36
+ maxTokens: external_exports.number().int().min(1e3).optional()
37
+ });
38
+ var probeDir = (root) => join(runsDirOf(root), "probe");
39
+ var probeRel = (root) => `${runsRelOf(root)}/probe`;
40
+ function startIn(id) {
41
+ const f = ASSISTANT_FORMATS[id];
42
+ return id === "agents-md" ? `In ${f.typeIn}, ask it to follow ${f.commandPath("atticus-probe")}.` : `In ${f.typeIn}, run /atticus-probe.`;
43
+ }
44
+ async function probeCommand(root, o, io, deps = {}) {
45
+ const rt = (await loadOrgPack(orgPackDirOf(root))).runtime;
46
+ if (rt.ai === "off") {
47
+ io.err("AI is off here (runtime.yaml): there is no assistant to probe.");
48
+ return 1;
49
+ }
50
+ const want = o.assistant ?? rt.assistants.default;
51
+ const id = AssistantId.safeParse(want);
52
+ if (!id.success || !rt.assistants.allowed.includes(id.data)) {
53
+ io.err(`runtime.yaml doesn't allow ${want} here: it allows ${rt.assistants.allowed.join(", ")}.`);
54
+ return 2;
55
+ }
56
+ const assistant = id.data;
57
+ const now = (deps.now ?? (() => /* @__PURE__ */ new Date()))();
58
+ const challenge = {
59
+ schemaVersion: 1,
60
+ assistant,
61
+ code: deps.code?.() ?? randomBytes(4).toString("hex"),
62
+ started: now.toISOString(),
63
+ ...o.maxTokens !== void 0 ? { maxTokens: o.maxTokens } : {}
64
+ };
65
+ const dir = probeDir(root);
66
+ await rm(dir, { recursive: true, force: true });
67
+ await mkdir(dir, { recursive: true });
68
+ await writeFile(join(dir, "probe.json"), `${JSON.stringify(challenge, null, 2)}
69
+ `, "utf8");
70
+ await writeFile(join(dir, "challenge.md"), [
71
+ "# Atticus capability probe",
72
+ "",
73
+ `Code: ${challenge.code}`,
74
+ "",
75
+ `Atticus wrote this file at ${challenge.started} for /atticus-probe. The steps of /atticus-probe say what to do with the code.`,
76
+ ""
77
+ ].join("\n"), "utf8");
78
+ const rel = probeRel(root);
79
+ const name = ASSISTANT_FORMATS[assistant].name;
80
+ const result = probeFileOf(assistant);
81
+ if (o.json) {
82
+ io.out(JSON.stringify({
83
+ assistant,
84
+ challenge: `${rel}/challenge.md`,
85
+ answerFile: `${rel}/answer.txt`,
86
+ result,
87
+ started: challenge.started,
88
+ expires: new Date(now.getTime() + OPEN_HOURS * 36e5).toISOString(),
89
+ ...o.maxTokens !== void 0 ? { maxTokens: o.maxTokens } : {}
90
+ }, null, 2));
91
+ return 0;
92
+ }
93
+ io.out(`Probing ${name} (another assistant runtime.yaml allows: --assistant <id>).`);
94
+ io.out(`${startIn(assistant)} It asks the assistant to open ${rel}/challenge.md, write the code it holds to ${rel}/answer.txt, and run atticus probe answer <code> itself.`);
95
+ io.out("An assistant that can't run commands gives you a line to paste in this terminal instead: atticus probe answer <code> --pasted.");
96
+ io.out("A chat with no /atticus-probe (a web chat) can't open files here: run atticus probe answer none --pasted.");
97
+ if (o.maxTokens === void 0)
98
+ io.out("Give your model's limit, the most tokens it takes in one prompt, with --max-tokens <n> on the answer if you know it: Atticus never guesses it.");
99
+ else
100
+ io.out(`Model limit: ${o.maxTokens} tokens, as you stated it.`);
101
+ io.out(`The probe is open for ${OPEN_HOURS} hours. Nothing leaves this machine: the answer is checked here and kept in ${result}.`);
102
+ return 0;
103
+ }
104
+ var yesNo = (b) => b ? "yes" : "no";
105
+ async function probeAnswerCommand(root, given, o, io, deps = {}) {
106
+ if (!given) {
107
+ io.err("Usage: atticus probe answer <code|none> [--pasted] [--max-tokens n] [--json]");
108
+ return 2;
109
+ }
110
+ const dir = probeDir(root);
111
+ const rel = probeRel(root);
112
+ const parsed = Challenge.safeParse(await readFile(join(dir, "probe.json"), "utf8").then((t2) => JSON.parse(t2)).catch(() => void 0));
113
+ if (!parsed.success) {
114
+ io.err("No probe is under way here: start one with atticus probe.");
115
+ return 1;
116
+ }
117
+ const c = parsed.data;
118
+ const now = (deps.now ?? (() => /* @__PURE__ */ new Date()))();
119
+ if (now.getTime() - Date.parse(c.started) > OPEN_HOURS * 36e5) {
120
+ io.err(`The probe started at ${c.started} is more than ${OPEN_HOURS} hours old: start a new one with atticus probe.`);
121
+ return 1;
122
+ }
123
+ const code = given.trim().toLowerCase();
124
+ if (code !== "none" && code !== c.code) {
125
+ io.err(`${given.trim()} isn't the code in ${rel}/challenge.md: the assistant didn't read that file. Nothing was recorded. Run /atticus-probe again, or answer none if the assistant can't open files.`);
126
+ return 1;
127
+ }
128
+ const answerFile = join(dir, "answer.txt");
129
+ const written = existsSync(answerFile) ? (await readFile(answerFile, "utf8").catch(() => "")).trim().toLowerCase() : void 0;
130
+ const read = code === c.code;
131
+ const write = written === c.code;
132
+ const run = o.pasted !== true;
133
+ const maxTokens = o.maxTokens ?? c.maxTokens;
134
+ const result = {
135
+ schemaVersion: 1,
136
+ assistant: c.assistant,
137
+ measured: now.toISOString(),
138
+ tier: probeTier({ read, write, run }),
139
+ read,
140
+ write,
141
+ run,
142
+ answered: run ? "command" : "pasted",
143
+ ...maxTokens !== void 0 ? { maxTokens } : {}
144
+ };
145
+ const file = await writeProbe(root, result);
146
+ await rm(dir, { recursive: true, force: true });
147
+ const rt = (await loadOrgPack(orgPackDirOf(root))).runtime;
148
+ const t = assistantTier({ ...rt, assistants: { allowed: [c.assistant], default: c.assistant } }, { probes: [result], now });
149
+ if (o.json) {
150
+ io.out(JSON.stringify({ ...result, file, how: t.how }, null, 2));
151
+ return 0;
152
+ }
153
+ const name = ASSISTANT_FORMATS[c.assistant].name;
154
+ io.out(`Measured ${name}: opened the file Atticus wrote: ${yesNo(read)}; wrote a file: ${write ? "yes" : written === void 0 ? "no" : `no (${rel}/answer.txt doesn't hold the code)`}; ran a command itself: ${run ? "yes" : "no (the line was pasted)"}. That is ${result.tier === 1 ? "agentic (tier 1)" : result.tier === 2 ? "batched hand-off (tier 2)" : "copy-paste (tier 3)"}.`);
155
+ io.out(`The first read of a repo: ${t.how}`);
156
+ io.out(maxTokens !== void 0 ? `Model limit: ${maxTokens} tokens, as stated.` : "No model limit was stated: atticus probe --max-tokens <n> measures again with it, or give --max-tokens <n> on each atticus map.");
157
+ io.out(`Kept in ${file}, on this machine only (never committed). atticus doctor, init, adopt and map --estimate say this tier from now on.`);
158
+ return 0;
159
+ }
160
+ export {
161
+ probeAnswerCommand,
162
+ probeCommand
163
+ };
@@ -0,0 +1,230 @@
1
+ import { createRequire as __atticusCreateRequire } from "node:module";
2
+ import { fileURLToPath as __atticusFileURLToPath } from "node:url";
3
+ var require = __atticusCreateRequire(import.meta.url);
4
+ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
+ var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
+ import {
7
+ renderTaskContext,
8
+ taskContext
9
+ } from "./chunk-VPTTCYOC.js";
10
+ import "./chunk-L6SGQIR3.js";
11
+ import "./chunk-7UFQZXZA.js";
12
+ import {
13
+ changeFolder,
14
+ changeStore
15
+ } from "./chunk-56YQ6ROQ.js";
16
+ import "./chunk-4AK7IBVP.js";
17
+ import "./chunk-7JUKDRSZ.js";
18
+ import "./chunk-OLWFG75W.js";
19
+ import "./chunk-L24C55VN.js";
20
+ import "./chunk-PAMPPUR6.js";
21
+ import {
22
+ attachToChange
23
+ } from "./chunk-23W7VWKR.js";
24
+ import "./chunk-7EKXJZ2Y.js";
25
+ import "./chunk-MC3H7736.js";
26
+ import "./chunk-T6AIP7H5.js";
27
+ import "./chunk-KJPMEAI4.js";
28
+ import "./chunk-GQ4N4WKF.js";
29
+ import "./chunk-CNUKCS2T.js";
30
+ import {
31
+ changesRelOf,
32
+ inputsDirOf
33
+ } from "./chunk-S2A7YC3Q.js";
34
+ import "./chunk-D3PO4DOZ.js";
35
+ import "./chunk-TV45EUGM.js";
36
+
37
+ // packages/cli/dist/attach-commands.js
38
+ import { createHash } from "node:crypto";
39
+ import { readdir, readFile } from "node:fs/promises";
40
+ import { basename, join, relative, resolve, sep } from "node:path";
41
+ var sha256 = (b) => createHash("sha256").update(b).digest("hex");
42
+ async function filesUnder(dir) {
43
+ const out = [];
44
+ const walk = async (d) => {
45
+ for (const e of await readdir(d, { withFileTypes: true }).catch(() => []))
46
+ if (e.isDirectory())
47
+ await walk(join(d, e.name));
48
+ else if (e.isFile())
49
+ out.push(join(d, e.name));
50
+ };
51
+ await walk(dir);
52
+ return out;
53
+ }
54
+ async function metarepoInputs(root) {
55
+ const out = /* @__PURE__ */ new Map();
56
+ for (const f of await filesUnder(inputsDirOf(root)))
57
+ out.set(sha256(new Uint8Array(await readFile(f))), relative(root, f).split(sep).join("/"));
58
+ return out;
59
+ }
60
+ var AttachError = class extends Error {
61
+ code;
62
+ constructor(code, message) {
63
+ super(message);
64
+ this.code = code;
65
+ this.name = "AttachError";
66
+ }
67
+ };
68
+ async function attachFiles(root, change, files, by, now = /* @__PURE__ */ new Date(), replaces) {
69
+ const c = await changeStore(root).read(change).catch(() => {
70
+ throw new AttachError("not-found", `There is no change ${change}: atticus change list shows them.`);
71
+ });
72
+ const known = await metarepoInputs(root);
73
+ return attachToChange(changeFolder(root, c.id), files, {
74
+ by,
75
+ at: now.toISOString().replace(/\.\d{3}Z$/, "Z"),
76
+ elsewhere: (h) => known.get(h),
77
+ ...replaces ? { replaces } : {}
78
+ });
79
+ }
80
+ async function promoteChangeInput(root, change, file) {
81
+ const c = await changeStore(root).read(change).catch(() => {
82
+ throw new AttachError("not-found", `There is no change ${change}: atticus change list shows them.`);
83
+ });
84
+ const name = file.replace(/^inputs\//, "");
85
+ if (!name || /[\\/]/.test(name) || name === "." || name === "..")
86
+ throw new AttachError("invalid", `Name one attached file, such as inputs/${basename(file) || "rules.pdf"}.`);
87
+ let bytes;
88
+ try {
89
+ bytes = new Uint8Array(await readFile(join(changeFolder(root, c.id), "inputs", name)));
90
+ } catch {
91
+ throw new AttachError("not-found", `inputs/${name} isn't attached to ${c.id}: atticus change attach ${c.id} adds it.`);
92
+ }
93
+ const { addToInbox } = await import("./chunk-WZ2BXIGG.js");
94
+ const r = await addToInbox(root, [{ name, bytes }]);
95
+ const added = r.added[0];
96
+ if (!added)
97
+ throw new AttachError("invalid", `inputs/${name}: ${r.refused[0]?.why ?? "refused"}`);
98
+ return {
99
+ path: added.path,
100
+ note: `Copied to ${added.path}: general knowledge, read at the next atticus sources sync. ${c.id} keeps its copy. Commit both through a pull request.`
101
+ };
102
+ }
103
+ function attachedLine(rel, a) {
104
+ const what = a.read === "text" ? `${a.kind}, ${a.format}; read, cited by ${a.citeBy}` : a.kind === "image" ? "a picture: your assistant looks at it in the chat; Atticus doesn't read pictures" : `${a.format}: no reader takes it, so the steps name it without its text`;
105
+ return `Attached ${rel}/${a.path} (${what})${a.supersedes ? `, a newer version of ${a.supersedes}` : ""}${a.defences ? `; the defences found ${a.defences.risk} risk` : ""}.`;
106
+ }
107
+ async function changeAttachCli(root, change, paths, o, io) {
108
+ if (change && o.prototype) {
109
+ if (paths.length) {
110
+ const { PROTOTYPE_CLI_WORDS } = await import("./chunk-KUUQR4HA.js");
111
+ io.err(PROTOTYPE_CLI_WORDS.usage(change, o.prototype));
112
+ return 2;
113
+ }
114
+ const { attachPrototype } = await import("./chunk-KUUQR4HA.js");
115
+ return attachPrototype(root, change, o.prototype, { by: o.by, ...o.json ? { json: true } : {}, ...o.now ? { now: o.now } : {} }, io);
116
+ }
117
+ if (change && o.like) {
118
+ if (paths.length) {
119
+ io.err("--like names an archived change, attached on its own: atticus change attach add-refund-window --like raise-transfer-limit");
120
+ return 2;
121
+ }
122
+ const { attachPastChange, findPastChange } = await import("./chunk-HVIMMDVB.js");
123
+ const folder = await findPastChange(root, o.like);
124
+ if (!folder) {
125
+ io.err(`There is no archived change ${o.like}: atticus change similar "<what it is about>" lists them.`);
126
+ return 1;
127
+ }
128
+ try {
129
+ const name = await attachPastChange(root, change, folder, o.by, o.now);
130
+ io.out(`Attached ${folder} as inputs/${name}: the change's steps read it as an example.`);
131
+ return 0;
132
+ } catch (e) {
133
+ if (e instanceof AttachError) {
134
+ io.err(e.message);
135
+ return 1;
136
+ }
137
+ throw e;
138
+ }
139
+ }
140
+ if (change && o.promote) {
141
+ if (paths.length) {
142
+ io.err("--promote names one file already attached; attach new files without it, for example: atticus change attach add-refund-window --promote inputs/refund-rules.pdf");
143
+ return 2;
144
+ }
145
+ try {
146
+ const r2 = await promoteChangeInput(root, change, o.promote);
147
+ if (o.json)
148
+ io.out(JSON.stringify(r2, null, 2));
149
+ else
150
+ io.out(r2.note);
151
+ return 0;
152
+ } catch (e) {
153
+ if (e instanceof AttachError) {
154
+ io.err(e.message);
155
+ return 1;
156
+ }
157
+ throw e;
158
+ }
159
+ }
160
+ if (!change || paths.length === 0) {
161
+ io.err("Usage: atticus change attach <change> <files...>, for example: atticus change attach add-refund-window refund-rules.pdf");
162
+ return 2;
163
+ }
164
+ if (o.replaces && paths.length !== 1) {
165
+ io.err("--replaces names the one attached file that the file given replaces: attach one file with it, for example: atticus change attach add-refund-window refund-rules-v2.pdf --replaces inputs/refund-rules-v1.pdf");
166
+ return 2;
167
+ }
168
+ const files = [];
169
+ let problems = false;
170
+ for (const p of paths) {
171
+ try {
172
+ files.push({ name: basename(p), bytes: new Uint8Array(await readFile(resolve(p))) });
173
+ } catch {
174
+ io.err(`Can't read ${p}.`);
175
+ problems = true;
176
+ }
177
+ }
178
+ let r;
179
+ try {
180
+ r = await attachFiles(root, change, files, o.by, o.now, o.replaces);
181
+ } catch (e) {
182
+ if (e instanceof AttachError) {
183
+ io.err(e.message);
184
+ return 1;
185
+ }
186
+ throw e;
187
+ }
188
+ if (o.json) {
189
+ io.out(JSON.stringify(r, null, 2));
190
+ return r.refused.length || problems ? 1 : 0;
191
+ }
192
+ const rel = `${changesRelOf(root)}/${change}`;
193
+ for (const a of r.added)
194
+ io.out(attachedLine(rel, a));
195
+ for (const x of r.refused)
196
+ io.err(`${x.name}: not attached. ${x.why}`);
197
+ for (const n of r.notes)
198
+ io.out(n);
199
+ if (r.added.length)
200
+ io.out(`The change's steps read them as data, citing each by file and line or page: atticus next says which step is next. Commit ${rel}/inputs/ with the change.`);
201
+ return r.refused.length || problems ? 1 : 0;
202
+ }
203
+ async function taskContextCli(root, change, task, o, io) {
204
+ if (!change || !task) {
205
+ io.err("Usage: atticus task context <change> <task> [--json|--markdown], for example: atticus task context add-refund-window 1.2");
206
+ return 2;
207
+ }
208
+ try {
209
+ const command = `atticus task context ${change} ${task}`;
210
+ const c = await taskContext(root, change, task, {
211
+ ask: { command, rerun: command, at: (o.now ?? /* @__PURE__ */ new Date()).toISOString() }
212
+ });
213
+ io.out(o.json && !o.markdown ? JSON.stringify(c, null, 2) : renderTaskContext(c).trimEnd());
214
+ return 0;
215
+ } catch (e) {
216
+ if (e instanceof Error && ["PlannerError", "ChangeError", "ChangeFileError"].includes(e.name)) {
217
+ io.err(e.message);
218
+ return 1;
219
+ }
220
+ throw e;
221
+ }
222
+ }
223
+ export {
224
+ AttachError,
225
+ attachFiles,
226
+ attachedLine,
227
+ changeAttachCli,
228
+ promoteChangeInput,
229
+ taskContextCli
230
+ };
@@ -0,0 +1,169 @@
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
+ table
8
+ } from "./chunk-VOGCSYOI.js";
9
+ import {
10
+ QueryError,
11
+ askLookup,
12
+ impact,
13
+ openIndex,
14
+ runContextTool,
15
+ translate
16
+ } from "./chunk-T6AIP7H5.js";
17
+ import "./chunk-CNUKCS2T.js";
18
+ import "./chunk-S2A7YC3Q.js";
19
+ import "./chunk-D3PO4DOZ.js";
20
+ import "./chunk-TV45EUGM.js";
21
+
22
+ // packages/cli/dist/index-commands.js
23
+ async function withIndex(root, io, fn, rebuild = false) {
24
+ const ix = await openIndex(root, { rebuild });
25
+ try {
26
+ for (const p of ix.problems)
27
+ io.err(`${p.file}: ${p.message} (left out of the index)`);
28
+ return fn(ix);
29
+ } finally {
30
+ ix.close();
31
+ }
32
+ }
33
+ async function askCommand(root, question, o, io) {
34
+ const asked = await withIndex(root, io, (ix) => {
35
+ return translate(question, askLookup(ix));
36
+ });
37
+ if (!o.json) {
38
+ io.out(asked.explanation);
39
+ io.out(`Query: ${asked.query}`);
40
+ io.out("");
41
+ }
42
+ if (asked.action === "impact")
43
+ return impactCommand(root, asked.id, { json: o.json === true }, io);
44
+ return queryCommand(root, asked.query, { json: o.json === true }, io);
45
+ }
46
+ async function queryCommand(root, q, o, io) {
47
+ return withIndex(root, io, (ix) => {
48
+ let res;
49
+ try {
50
+ res = ix.query(q, { limit: o.limit ?? 100 });
51
+ } catch (e) {
52
+ if (e instanceof QueryError) {
53
+ io.err(e.message);
54
+ return 2;
55
+ }
56
+ throw e;
57
+ }
58
+ if (o.json) {
59
+ io.out(JSON.stringify({ total: res.total, records: ix.records(res.rows) }, null, 2));
60
+ return 0;
61
+ }
62
+ if (res.rows.length > 0)
63
+ for (const l of table(["KIND", "ID", "NAME", "STATUS", "CONFIDENCE", "SYSTEM"], res.rows.map((r) => [r.kind, r.id, r.name, r.status, r.confidence, r.system ?? ""])))
64
+ io.out(l);
65
+ io.out(res.rows.length < res.total ? `${res.rows.length} of ${res.total} records (use --limit to see more)` : `${res.total} record${res.total === 1 ? "" : "s"}`);
66
+ return 0;
67
+ });
68
+ }
69
+ async function searchCommand(root, text, o, io) {
70
+ if (o.by && o.by !== "words") {
71
+ if (o.by !== "meaning" && o.by !== "both") {
72
+ io.err("--by is words, meaning or both.");
73
+ return 2;
74
+ }
75
+ const ix = await openIndex(root, { embedOnOpen: Number.MAX_SAFE_INTEGER });
76
+ try {
77
+ const kinds = o.kind?.split(",").map((k) => k.trim()).filter(Boolean);
78
+ io.out(await runContextTool(ix, root, "search", {
79
+ text,
80
+ by: o.by,
81
+ limit: Math.min(o.limit ?? 20, 20),
82
+ ...kinds?.length ? { kinds } : {}
83
+ }));
84
+ return 0;
85
+ } finally {
86
+ ix.close();
87
+ }
88
+ }
89
+ return withIndex(root, io, (ix) => {
90
+ const kinds = o.kind ? o.kind.split(",").map((k) => k.trim()).filter(Boolean) : void 0;
91
+ const hits = ix.search(text, { limit: o.limit ?? 20, ...kinds ? { kinds } : {} });
92
+ if (o.json) {
93
+ io.out(JSON.stringify({ total: hits.length, hits }, null, 2));
94
+ return 0;
95
+ }
96
+ if (hits.length > 0)
97
+ for (const l of table(["KIND", "ID", "NAME", "FILE"], hits.map((h) => [h.kind, h.id, h.name.slice(0, 60), h.file])))
98
+ io.out(l);
99
+ io.out(hits.length ? `${hits.length} hit${hits.length === 1 ? "" : "s"}, best first` : "Nothing in the index matches those words.");
100
+ return 0;
101
+ });
102
+ }
103
+ async function impactCommand(root, id, o, io) {
104
+ return withIndex(root, io, (ix) => {
105
+ const r = impact(ix, id, o.depth ?? 4);
106
+ if (!r) {
107
+ io.err(`No record with id "${id}" in the catalog. Try: atticus query ${id}`);
108
+ return 1;
109
+ }
110
+ if (o.json) {
111
+ io.out(JSON.stringify(r, null, 2));
112
+ return 0;
113
+ }
114
+ io.out(`Changing ${id} reaches ${r.affected.length} record${r.affected.length === 1 ? "" : "s"}:`);
115
+ if (r.affected.length > 0)
116
+ for (const l of table(["KIND", "ID", "OWNER", "WHY"], r.affected.map((a) => [a.kind, a.id, a.owner ?? "", a.reason])))
117
+ io.out(` ${l}`);
118
+ if (r.gaps.length > 0) {
119
+ io.out("Open questions:");
120
+ for (const g of r.gaps)
121
+ io.out(` - ${g.question} (${g.record})`);
122
+ }
123
+ return 0;
124
+ });
125
+ }
126
+ async function indexEmbed(root, io) {
127
+ const ix = await openIndex(root, { embedOnOpen: 0 });
128
+ try {
129
+ const before = ix.meaning();
130
+ if (!ix.embedder) {
131
+ io.err(`${before.note}. Set retrieval.embeddings.model in the org pack's runtime.yaml.`);
132
+ return 1;
133
+ }
134
+ let last = Date.now();
135
+ const n = await ix.embed({
136
+ progress: (done, of) => {
137
+ if (Date.now() - last > 5e3 || done === of) {
138
+ io.out(`Embedded ${done} of ${of}`);
139
+ last = Date.now();
140
+ }
141
+ }
142
+ });
143
+ const after = ix.meaning();
144
+ io.out(`${n ? `Embedded ${n} new text${n === 1 ? "" : "s"}. ` : ""}${after.note}.`);
145
+ return after.on ? 0 : 1;
146
+ } catch (e) {
147
+ io.err(`The embedding model couldn't run: ${e.message.split("\n")[0]}`);
148
+ return 1;
149
+ } finally {
150
+ ix.close();
151
+ }
152
+ }
153
+ async function indexRebuild(root, io) {
154
+ return withIndex(root, io, (ix) => {
155
+ const kinds = ix.kinds();
156
+ const total = kinds.reduce((n, k) => n + k.count, 0);
157
+ io.out(`Indexed ${total} records of ${kinds.length} kinds into ${ix.file}`);
158
+ return ix.problems.length > 0 ? 1 : 0;
159
+ }, true);
160
+ }
161
+ export {
162
+ askCommand,
163
+ impactCommand,
164
+ indexEmbed,
165
+ indexRebuild,
166
+ queryCommand,
167
+ searchCommand,
168
+ table
169
+ };