project-athena 0.3.0 → 0.5.0

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 (140) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +56 -4
  3. package/dist/{activity-P4UUFHWV.js → activity-XCHKBZTG.js} +6 -6
  4. package/dist/{agents-3HTSQGL2.js → agents-HUJ4JXIB.js} +6 -6
  5. package/dist/{ai-ASL4FFQ7.js → ai-LGTLQKL4.js} +3 -3
  6. package/dist/{analyze-F3YOILNL.js → analyze-AP4XJT7D.js} +10 -9
  7. package/dist/{chunk-ZB7LC6FP.js → chunk-3KFOI2X4.js} +2 -2
  8. package/dist/{chunk-PANVPNYF.js → chunk-44EGCEB2.js} +59 -251
  9. package/dist/{chunk-SJOOXO34.js → chunk-4FETKOY3.js} +9 -8
  10. package/dist/chunk-4IIBVTBS.js +76 -0
  11. package/dist/{chunk-LEMPCNAY.js → chunk-56EXAGTM.js} +3 -3
  12. package/dist/{chunk-32PRS2MG.js → chunk-6OSQMXUP.js} +5 -5
  13. package/dist/{chunk-OLPSEQS5.js → chunk-AKOI4VTD.js} +10 -1
  14. package/dist/{chunk-EF6GHOIN.js → chunk-C25FDXOO.js} +133 -23
  15. package/dist/{chunk-S7T6VX56.js → chunk-DH5AGULY.js} +8 -4
  16. package/dist/chunk-F65QINMR.js +702 -0
  17. package/dist/chunk-GU3ZX2J7.js +166 -0
  18. package/dist/chunk-GYQG4Q2N.js +108 -0
  19. package/dist/chunk-IDODPGTX.js +595 -0
  20. package/dist/chunk-KJYSNZXS.js +934 -0
  21. package/dist/{chunk-PR53DT7I.js → chunk-L2EHJCH4.js} +8 -8
  22. package/dist/{chunk-65TSRDQ3.js → chunk-P4TRQMES.js} +2 -2
  23. package/dist/{chunk-TGJUUB44.js → chunk-PZPMWCXS.js} +5 -5
  24. package/dist/chunk-QCC4VJUH.js +217 -0
  25. package/dist/{chunk-DOQMAZL5.js → chunk-R5AX7VST.js} +3 -3
  26. package/dist/{chunk-JY6BFIJJ.js → chunk-RQKGT2EK.js} +3 -3
  27. package/dist/{chunk-PDFQ5BFG.js → chunk-SVTEJYMS.js} +4 -155
  28. package/dist/{chunk-VSYBC3VY.js → chunk-UMWX4UTK.js} +2 -2
  29. package/dist/{chunk-RXNRMIZP.js → chunk-WUIC65QO.js} +2 -2
  30. package/dist/{chunk-JCGDR4UV.js → chunk-WWQ5NKEC.js} +3 -1
  31. package/dist/{chunk-XB66PZ6Z.js → chunk-X7EYOAEX.js} +2 -2
  32. package/dist/chunk-Y6SDMZET.js +278 -0
  33. package/dist/{chunk-2RS6TA3D.js → chunk-YRIS7ZS6.js} +28 -17
  34. package/dist/{clean-S7PKCOLM.js → clean-LQOG56AM.js} +4 -4
  35. package/dist/cli.js +2 -2
  36. package/dist/{context-AH5MFHRG.js → context-G5YHY3L2.js} +24 -10
  37. package/dist/{doctor-RSJMLE2P.js → doctor-L34QJ7WR.js} +17 -10
  38. package/dist/{event-TNT6CQZR.js → event-6YW6TGFI.js} +3 -3
  39. package/dist/{git-hook-YZNZGAAP.js → git-hook-Y7Y262F7.js} +2 -2
  40. package/dist/{init-2V34DVRQ.js → init-427QR5AS.js} +10 -9
  41. package/dist/{mcp-T2GRTEX5.js → mcp-DWNWRGJW.js} +196 -21
  42. package/dist/memory-XBZCYQLW.js +393 -0
  43. package/dist/{open-2QSZKKUG.js → open-LJMOB6U2.js} +262 -69
  44. package/dist/{program-V2USHGXN.js → program-DCP526LU.js} +63 -32
  45. package/dist/{review-R3R2J5BJ.js → review-VEJBPACX.js} +14 -11
  46. package/dist/{rules-4FXJUCXB.js → rules-M4DLLXBL.js} +4 -4
  47. package/dist/scan-JVKCVHPD.js +939 -0
  48. package/dist/{security-PI4LXCOB.js → security-JTJN3E7K.js} +15 -11
  49. package/dist/{staged-check-HHIBKKMR.js → staged-check-PQSLGQBW.js} +15 -13
  50. package/dist/{status-6M73WX5I.js → status-PO27BSOZ.js} +10 -4
  51. package/dist/{sync-3ZNJDSSU.js → sync-GVO2VHPI.js} +14 -12
  52. package/dist/{watch-USN5CQIV.js → watch-TEHFO47V.js} +14 -12
  53. package/dist/web/assets/{Editor-BI56-HX5.js → Editor-Bnilgch0.js} +1 -1
  54. package/dist/web/assets/{abnfDiagram-O67JEVCF-y_9px2ob.js → abnfDiagram-O67JEVCF-DW9LWr8f.js} +1 -1
  55. package/dist/web/assets/architecture-7GRP2DOG-BWDZV2yn.js +1 -0
  56. package/dist/web/assets/{architectureDiagram-NJMV4G6O-lB6fcVzU.js → architectureDiagram-NJMV4G6O-0eKeQRhj.js} +1 -1
  57. package/dist/web/assets/{blockDiagram-BEXU5L5S-DcM5pEjM.js → blockDiagram-BEXU5L5S-D5i3-ogI.js} +1 -1
  58. package/dist/web/assets/{c4Diagram-YGBWAQC7-CJgqxTY2.js → c4Diagram-YGBWAQC7-BAWQZrEu.js} +1 -1
  59. package/dist/web/assets/channel-Bkh05NKd.js +1 -0
  60. package/dist/web/assets/{chunk-3FUC2YCW-B8l_VuWR.js → chunk-3FUC2YCW-fKRGOZF3.js} +1 -1
  61. package/dist/web/assets/{chunk-5DYCD2WN-CZecgNhf.js → chunk-5DYCD2WN-C5jOlx42.js} +1 -1
  62. package/dist/web/assets/{chunk-742MDFTN-BeZ7P5jB.js → chunk-742MDFTN-urY4RP_A.js} +1 -1
  63. package/dist/web/assets/{chunk-7INBJB4K-IKy0pr5m.js → chunk-7INBJB4K-nk48sKqZ.js} +1 -1
  64. package/dist/web/assets/{chunk-7M6MHVWA-Dg_QqJEX.js → chunk-7M6MHVWA-BfBD9X0F.js} +1 -1
  65. package/dist/web/assets/{chunk-7PRAP22T-DqQNS8oq.js → chunk-7PRAP22T-jYf59QlI.js} +1 -1
  66. package/dist/web/assets/{chunk-GTNCS2PH-x4sM51nJ.js → chunk-GTNCS2PH-BOCxryKf.js} +1 -1
  67. package/dist/web/assets/{chunk-GWA4HPMP-CE5GcwVN.js → chunk-GWA4HPMP-CFpaW0ru.js} +1 -1
  68. package/dist/web/assets/{chunk-MBY4JIJT-DA_D1hjF.js → chunk-MBY4JIJT-BIB8HctN.js} +1 -1
  69. package/dist/web/assets/{chunk-NETBCI7D-CeJ3XBZ2.js → chunk-NETBCI7D-CpUUK6rh.js} +1 -1
  70. package/dist/web/assets/{chunk-O7XYJQB3-BH2gESvO.js → chunk-O7XYJQB3-BNx_V4Oi.js} +1 -1
  71. package/dist/web/assets/{chunk-UA2S7LBM-BWr0xCux.js → chunk-UA2S7LBM-D3tMiIOY.js} +1 -1
  72. package/dist/web/assets/{chunk-WEXAMYUT-B4QwUZPM.js → chunk-WEXAMYUT-CC-3C32l.js} +1 -1
  73. package/dist/web/assets/{chunk-Z7XXMR3K-BxcA-y5B.js → chunk-Z7XXMR3K-BzhxKQUc.js} +1 -1
  74. package/dist/web/assets/{chunk-ZIGJFQKS-BZYvP63G.js → chunk-ZIGJFQKS-D4tBHzxg.js} +1 -1
  75. package/dist/web/assets/{classDiagram-v2-NBCMYWYE-BS3P_NXb.js → classDiagram-v2-NBCMYWYE-BbtyanXR.js} +1 -1
  76. package/dist/web/assets/{cynefin-OW5HDTMX-BALD4Pve.js → cynefin-OW5HDTMX-BIArb8W1.js} +1 -1
  77. package/dist/web/assets/{cynefinDiagram-VND7K2PF-BM2y4W6d.js → cynefinDiagram-VND7K2PF-BrAcfkXL.js} +1 -1
  78. package/dist/web/assets/{dagre-6A5THRUB-PTfOrIdF.js → dagre-6A5THRUB-BcHXRl4s.js} +1 -1
  79. package/dist/web/assets/{diagram-22UHCM2B-CpXEHhUl.js → diagram-22UHCM2B-Dx9tSCdE.js} +1 -1
  80. package/dist/web/assets/{diagram-3UASUU5V-DPHfXzr6.js → diagram-3UASUU5V-CLLDP9yH.js} +1 -1
  81. package/dist/web/assets/{diagram-ATOU4E4O-DMBNXvAC.js → diagram-ATOU4E4O-B46H9iPt.js} +1 -1
  82. package/dist/web/assets/{diagram-CDSNMT55-CDLe1M7G.js → diagram-CDSNMT55-CYtvB6aG.js} +1 -1
  83. package/dist/web/assets/{diagram-MLGK6HIB-D6L8oE7j.js → diagram-MLGK6HIB-Dar7ktoX.js} +1 -1
  84. package/dist/web/assets/{diagram-MPIPVDR6-CP-S7rrQ.js → diagram-MPIPVDR6-C-DljnYN.js} +1 -1
  85. package/dist/web/assets/{ebnfDiagram-ZINNZB2B-CkUc63TK.js → ebnfDiagram-ZINNZB2B-Dv_3jWnh.js} +1 -1
  86. package/dist/web/assets/{elk-276RUBZZ-C1CAJLH_.js → elk-276RUBZZ-DnHciE9k.js} +1 -1
  87. package/dist/web/assets/{erDiagram-OPXOYQCR-DXBnaTHm.js → erDiagram-OPXOYQCR-Bn46KrHz.js} +1 -1
  88. package/dist/web/assets/eventmodeling-NTZA5JFV-DYwoptMd.js +1 -0
  89. package/dist/web/assets/flowDiagram-KWPJA3E3-y4rS0gIB.js +1 -0
  90. package/dist/web/assets/{ganttDiagram-FUAMR5RP-BVm8SiGg.js → ganttDiagram-FUAMR5RP-DOjjJtqz.js} +1 -1
  91. package/dist/web/assets/{gitGraph-4MIJSDKK-Dm7xBrW0.js → gitGraph-4MIJSDKK-BIoMXJRQ.js} +1 -1
  92. package/dist/web/assets/{gitGraphDiagram-X574FWY7-D_PIKKhx.js → gitGraphDiagram-X574FWY7-BsJ01R0v.js} +1 -1
  93. package/dist/web/assets/{index-CeOIBpu2.js → index-Cen0jOXj.js} +5 -4
  94. package/dist/web/assets/{index-DKE3ojTe.css → index-WwRY6n68.css} +1 -1
  95. package/dist/web/assets/{info-A6RAGUB7-CLGrx8pn.js → info-A6RAGUB7-BmlXzRWj.js} +1 -1
  96. package/dist/web/assets/{infoDiagram-VRGFBTTK-BlBjaKm7.js → infoDiagram-VRGFBTTK-CYPJPmBP.js} +1 -1
  97. package/dist/web/assets/{ishikawaDiagram-OU5B5YK6-Kxe7GGS3.js → ishikawaDiagram-OU5B5YK6-YN96geky.js} +1 -1
  98. package/dist/web/assets/{journeyDiagram-ZHPQQLJL-wCMoHK4M.js → journeyDiagram-ZHPQQLJL-20juojKY.js} +1 -1
  99. package/dist/web/assets/{kanban-definition-PNTS6WVX-BxdCz9Ko.js → kanban-definition-PNTS6WVX-BhCKIEbP.js} +1 -1
  100. package/dist/web/assets/{line-Zf11FnWF.js → line-BERsMFG6.js} +1 -1
  101. package/dist/web/assets/{mermaid-parser.core-BvFFklev.js → mermaid-parser.core-Bis_wTB-.js} +3 -3
  102. package/dist/web/assets/{mermaid.core-Cd_Ssti9.js → mermaid.core-DMsM3ZX7.js} +4 -4
  103. package/dist/web/assets/{mindmap-definition-NLK3R4M7-BGPQl-GY.js → mindmap-definition-NLK3R4M7-BkcGdOfv.js} +1 -1
  104. package/dist/web/assets/{packet-AYTQ26CC-6lI3cEX_.js → packet-AYTQ26CC-Bh30-JJX.js} +1 -1
  105. package/dist/web/assets/{pegDiagram-GJSIUBJH-BPIjlSAj.js → pegDiagram-GJSIUBJH-DxnIo9RF.js} +1 -1
  106. package/dist/web/assets/{pie-WAS4IAKB-D6Dzj3Ja.js → pie-WAS4IAKB-ChaTr-GD.js} +1 -1
  107. package/dist/web/assets/{pieDiagram-5QR66LMP-DtA-vZmv.js → pieDiagram-5QR66LMP-CzAp78FM.js} +1 -1
  108. package/dist/web/assets/{quadrantDiagram-O4NWA36T-EettyqQn.js → quadrantDiagram-O4NWA36T-BDSE-cfY.js} +1 -1
  109. package/dist/web/assets/{radar-RG4KPBEZ-xmRc3Dl8.js → radar-RG4KPBEZ-DgJ-o_dq.js} +1 -1
  110. package/dist/web/assets/{railroad-74A4TZTK-BLB7dhOn.js → railroad-74A4TZTK-C8MmcBKz.js} +1 -1
  111. package/dist/web/assets/railroad-abnf-HS5TGJTU-CTLXjcdP.js +1 -0
  112. package/dist/web/assets/railroad-ebnf-LZEXJU2U-ggWsTTL0.js +1 -0
  113. package/dist/web/assets/railroad-peg-WCYAUIDC-D1mCX705.js +1 -0
  114. package/dist/web/assets/{railroadDiagram-XR7U4H2S-PBw4We6b.js → railroadDiagram-XR7U4H2S-DfbcWRNh.js} +1 -1
  115. package/dist/web/assets/{requirementDiagram-PLB6GJNP-DjQpaUFA.js → requirementDiagram-PLB6GJNP-DM3nksxs.js} +1 -1
  116. package/dist/web/assets/{sankeyDiagram-IPEJSGJF-CBW-_AoF.js → sankeyDiagram-IPEJSGJF-DthUpiiC.js} +1 -1
  117. package/dist/web/assets/{sequenceDiagram-PO4LG4MO-DEoPYqY9.js → sequenceDiagram-PO4LG4MO-DLA3nuvA.js} +1 -1
  118. package/dist/web/assets/{stateDiagram-v2-GCMORJYK-UZq5rPud.js → stateDiagram-v2-GCMORJYK-B0X6ihBW.js} +1 -1
  119. package/dist/web/assets/{swimlanes-2SLR337P-CACfuXJR.js → swimlanes-2SLR337P-B4qWe6vE.js} +1 -1
  120. package/dist/web/assets/swimlanesDiagram-TC7HE7FX-ClIk3e7S.js +8 -0
  121. package/dist/web/assets/{timeline-definition-EJHVYXUP-CYJl7mP-.js → timeline-definition-EJHVYXUP-F-cDzYrj.js} +1 -1
  122. package/dist/web/assets/{treeView-Q6P3EWNA-DtZ5nkPQ.js → treeView-Q6P3EWNA-BaI30nLZ.js} +1 -1
  123. package/dist/web/assets/{treemap-WGGIJYW6-m49GDM-M.js → treemap-WGGIJYW6-D2jGGoMl.js} +1 -1
  124. package/dist/web/assets/{usecaseDiagram-POWQR4AR-C2Vg20UK.js → usecaseDiagram-POWQR4AR-B9qoAQCy.js} +1 -1
  125. package/dist/web/assets/{vennDiagram-UO4OBE2U-C07v5OGI.js → vennDiagram-UO4OBE2U-DGVNOaKO.js} +1 -1
  126. package/dist/web/assets/{wardley-WFR3VGLG-C9Z7EZtz.js → wardley-WFR3VGLG-DbKqhNAh.js} +1 -1
  127. package/dist/web/assets/{wardleyDiagram-VNRHLVJA-DdA8CcSC.js → wardleyDiagram-VNRHLVJA-BgZ1gprw.js} +1 -1
  128. package/dist/web/assets/{xychartDiagram-PMCCYNJV-C9EZw07b.js → xychartDiagram-PMCCYNJV-D73RYid1.js} +1 -1
  129. package/dist/web/index.html +2 -2
  130. package/package.json +3 -1
  131. package/dist/chunk-CXUTYCZX.js +0 -238
  132. package/dist/chunk-LMOFZNTQ.js +0 -379
  133. package/dist/web/assets/architecture-7GRP2DOG-DyxkwYiW.js +0 -1
  134. package/dist/web/assets/channel-BvDD7AMO.js +0 -1
  135. package/dist/web/assets/eventmodeling-NTZA5JFV-cLIzvgDp.js +0 -1
  136. package/dist/web/assets/flowDiagram-KWPJA3E3-D7Zq63VQ.js +0 -1
  137. package/dist/web/assets/railroad-abnf-HS5TGJTU-DBFym6g8.js +0 -1
  138. package/dist/web/assets/railroad-ebnf-LZEXJU2U-CkG28ig8.js +0 -1
  139. package/dist/web/assets/railroad-peg-WCYAUIDC-Df_Ifaad.js +0 -1
  140. package/dist/web/assets/swimlanesDiagram-TC7HE7FX-CDSrqdgx.js +0 -8
package/CHANGELOG.md CHANGED
@@ -1,5 +1,61 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.0 — 2026-10-03
4
+
5
+ Unified findings: every security check (secrets, dependency audits, review checks) now reports into one findings model with value-free fingerprints, an honest coverage record, and a quality gate driven by an optional committed policy, baseline and triage. New `athena scan` writes text, JSON, Markdown, GitHub annotations or SARIF 2.1.0 for code scanning, and `--policy-from <base>` keeps a pull request from quietly weakening the gate. Static analysis rules arrive in 0.6.0; until then reports say plainly that SAST and IaC are not covered.
6
+
7
+ ### `athena scan` and friends
8
+
9
+ - New `athena scan`: runs the secret scanner and dependency audits over the whole project, or with `--base <ref>` / `--staged` / `--changed` over a change (adding the review checks), then applies the policy, baseline, triage and inline suppressions and evaluates the quality gate. Exit 1 when the gate fails (`--no-fail` to report only), 2 when Git can't compute the requested change. `--only secrets,deps,review`, `--format text|json|markdown|github|sarif`, `-o <file>`, gate overrides `--fail-on`, `--min-confidence`, `--unrated`, plus `--no-baseline`, `--policy-from <ref>` and `--offline` (audits are skipped and reported as skipped). Full-project scans are saved to `.athena/findings.json`.
10
+ - New `athena baseline show|create|update|prune`, `athena findings list|show|triage` (fingerprint prefixes of 6+ characters; a reason is required and committed) and `athena explain <ruleId>` / `athena scan --list-rules`.
11
+ - New MCP tool `findings`: a read-only summary of the last scan (gate, ratings, coverage gaps, active findings with fingerprints), fenced as untrusted data and never containing secret values. It never starts a scan.
12
+ - `athena security` keeps its flags, output and `--json` shape; it now also writes `.athena/findings.json`.
13
+
14
+ ### Unified findings: secrets, dependencies and review checks
15
+
16
+ - New `.athena/findings.json` (gitignored): every security check now reports into one findings model with stable, value-free fingerprints, severity (`critical`…`info`, plus `unrated`), confidence, a FACT/DETECTED/INFERRED label, CWE, location or package, the engine that reported it, and a coverage record per engine (files scanned and skipped, tools unavailable/failed/timed out/skipped offline).
17
+ - Secrets: one `secret/<pattern>` finding per match with file, line and column. Private keys and AWS/GCP/Azure credentials are `critical`, other known token formats `high`, keyword heuristics `medium` and marked *potential* (low confidence). Fingerprints hash the line with the matched value masked, so they survive rotating the value and reveal nothing about it; no secret value is ever written.
18
+ - Dependency audits: one `dependency/vulnerable-package` finding per package and advisory (FACT, attributed to `npm-audit`, `pnpm-audit`, `pip-audit`, `govulncheck`, `cargo-audit` or `composer-audit`), with version, lockfile/target, advisory ids, vulnerable range, fixed version and CWE where the tool reports them. `moderate` is now `medium`; a missing severity stays `unrated`. npm packages that are only vulnerable through another reported package are not counted twice.
19
+ - `athena review --json` gains a `scan` object (`scan.findings`, `scan.coverage`) with the checks as `review/<check>` findings (blocker → high, warning → medium, info → info) and added secrets as `secret/*` findings at the exact line. The existing `findings` list, human output and exit codes are unchanged.
20
+ - `athena security` runs on the new scanners and writes both `.athena/findings.json` and the legacy `.athena/security-scan.json` (still used by the web UI and `security.md`). Flags, output, `--fail-on` and `--unrated` behave as before; `--json` keeps the v1 shape — the unified shape will be `athena scan --format json`.
21
+ - A project that only has a `security-scan.json` from an older version is read as findings (its secret count becomes a coverage note, since v1 recorded no lines).
22
+
23
+ ### Policy, baseline, triage and quality gate
24
+
25
+ - `.athena/policy.json` (optional, committed; `schemaVersion: 1`): `gate` (`failOn` severity, default `high`; `minConfidence`, default `medium`; `unrated: fail|warn`, default `fail`; `scope: new|all`, default `new`; gated `categories`, default secret, dependency, sast, iac, review), per-rule `rules` (`"off"` or a `severity`/`confidence` override; exact ids or `family/*` prefixes), `paths.exclude`/`paths.tests` globs, `licenses.deny`/`warn`, and `external` engines (`semgrep`, `gitleaks`, `trivy`, `osv-scanner`: `auto|off`; `network: allow|deny`). A missing file means defaults. An invalid file, including an unknown key, is an error that names the offending path. It is never silently ignored.
26
+ - `.athena/baseline.json` (committed): records findings that already exist so that only new ones fail the gate (scope `new`). Baselined findings stay visible and still count in ratings. Entries hold only value-free fingerprints, rule ids and files. Pruning needs a full scan and keeps entries of any category whose engine failed or did not run, because a broken engine reports nothing and that must not read as "fixed".
27
+ - `.athena/triage.json` (committed): a reviewed decision per finding (`safe`, `false-positive`, `accepted-risk`, `fixed`, `to-review`), similar to SonarQube's hotspot review. Every decision needs a reason (at most 500 characters). A reason that looks like it contains a secret is refused, and the value is never echoed. `to-review` keeps the finding open.
28
+ - Inline suppressions: `athena-ignore <ruleId> -- <reason>` in a `//`, `#`, `/* */`, `<!-- -->` or `--` comment on the finding's line or the line above. Each comment names one exact rule. A suppression without a reason is ignored and reported as an `info` finding (`review/suppression-without-reason`). A comment with no valid rule id is reported as `review/invalid-suppression`.
29
+ - Every finding gets a status on each run (never stored): `open`, `baselined`, `suppressed`, `triaged:<safe|false-positive|accepted-risk|fixed>` or `excluded`.
30
+ - Quality gate: fails on active findings in gated categories at or above `failOn` with at least `minConfidence` confidence. Unrated findings follow `gate.unrated`. With scope `new`, baselined findings are skipped. The gate also fails when an engine for a gated category failed or timed out, and the result says so explicitly, because an engine that broke checked nothing. Unavailable or skipped engines, and gated categories that nothing scanned, are listed as warnings.
31
+ - Ratings A–E per category, based on the worst active finding: A none, B low/info, C medium, D high, E critical. Unrated counts as D, or C under `unrated: warn`. Each rating comes with a basis ("N rules across <languages>; X files not covered") and no numeric score. A category is not rated when no engine ran for it or one of its engines failed.
32
+ - Anti-tamper for CI (`policyFrom: <ref>`): the gate uses the policy, baseline and triage committed at the base ref (missing there means defaults). Every change to them since `merge-base(ref, HEAD)`, and every added `athena-ignore` comment (tracked or untracked), is reported as `review/policy-weakened`. Severity is `high` when the change relaxes the gate (a higher `failOn` or `minConfidence`, rules turned off or downgraded, new excludes, fewer gated categories, engines turned off, added baseline entries, new closing triage decisions, added suppressions); other changes are `info`. A base-branch policy can downgrade this rule if a team prefers review notes over a failing check.
33
+
34
+ ## 0.4.0 — 2026-10-03
35
+
36
+ Agent memory: coding agents can now record what they learn — decisions and why, gotchas, bug root causes, conventions — and later sessions recall it. Memory lives in `.athena/memory/` as plain Markdown you commit and review like code. Anything an agent writes is `unreviewed` (INFERRED) until you confirm it (`athena memory review`, or the Memory page in `athena open`); entries turn `stale` when the files they describe change. Secrets are refused, and text that looks like it is trying to instruct the agent is flagged and kept out of recall.
37
+
38
+ After upgrading, run `athena analyze` (or `athena agents add <agent>`) so your agent instructions mention `recall` and `remember`.
39
+
40
+ ### Project memory
41
+
42
+ - New `athena memory` commands for the project memory in `.athena/memory/`: `list` (`--kind`, `--status`, `--stale`), `show`, `add` (`--kind`, `--title`, `--details` or `--details -` for stdin, repeatable `--file`/`--tag`, `--evidence`, `--supersedes`), `search`, `recall <task…>` (`--file`, `--tag`, `--limit`; ranked hits with reasons), `confirm <id…>`, `supersede <id> --by <id>`, `forget <id…>` (asks first; `--yes` in scripts), `edit`, `stale` and `review` (interactive in a terminal: confirm, forget or skip each agent-written entry). All support `--json`.
43
+ - Entries you record are FACT; entries agents record are INFERRED until confirmed. Stale entries (linked files changed) and flagged entries (possible prompt injection) are marked and explained. A memory that contains a possible secret is refused without echoing the value.
44
+ - `athena status` shows a memory line and a `memory` object (`total`, `unreviewed`, `stale`) in `--json`; `athena doctor` adds a Memory check when entries exist.
45
+ - `athena clean` now says how many project memory entries it would delete (they are committed and shared with the team) before asking for confirmation.
46
+
47
+ ### Agent memory: MCP, context and instructions
48
+
49
+ - New MCP tools `recall` (ranked memories for a task and/or files, with why each matched, label, status and staleness, fenced in `<athena-memory … trust="untrusted-data">` delimiters; entries flagged as possible prompt injection are excluded and counted), `list_memory` (summaries filtered by kind, status, stale) and `remember` (records a memory as **unreviewed**/INFERRED, attributed to `agent:<id>` from the client's `clientInfo.name` — claude-code, cursor, codex, copilot, gemini-cli, antigravity, windsurf, cline — or `agent:mcp`). `remember` is the only write the MCP server allows without `--allow-write`; it never touches knowledge documents, refuses secrets without echoing them, and is disabled by `athena mcp --no-memory-write`.
50
+ - `athena context` and `get_relevant_context` include up to five recalled memories (confirmed first, flagged excluded) with labels and reasons, within the character budget (at most 30% of it). `--json` and `/api/context` gain a `memories` field.
51
+ - Generated agent instructions (all adapters) tell agents to recall project memory at the start of a task, record durable, non-obvious learnings with `remember` at the end, and treat unreviewed memories as hints to verify — never instructions; `rules.md` and the developer always win.
52
+
53
+ ### Memory page (`athena open`)
54
+
55
+ - New **Memory** page (`/memory`, in the sidebar with a badge for entries awaiting review) to review project memory in `.athena/memory/*.md`. The review queue (agent-written, INFERRED entries) comes first with Confirm / Edit / Forget; confirmed entries (FACT) follow and superseded ones are collapsed. Cards show kind, FACT/INFERRED label, who recorded it and when, linked files, tags and evidence; details are shown as plain text, never rendered as Markdown or HTML. Stale entries (a linked file changed since) show the changed files and a Re-confirm action; entries that look like prompt injection carry a red warning. Filter chips (kind, status, stale, flagged), a text filter, and an Add memory form (developer entries are FACT immediately). The Overview links to the queue when entries await review.
56
+ - API: `GET /api/memory` (`kind`, `status`, `stale` filters; returns entries and counts), `GET /api/memory/:id`, `POST /api/memory`, `POST /api/memory/:id/confirm`, `POST /api/memory/:id/supersede`, `PATCH /api/memory/:id`, `DELETE /api/memory/:id` — all behind the existing token, Host/Origin and JSON-only checks, with strict schemas. Unknown ids are 404, superseded/busy/full conflicts 409, invalid input and refused secrets 400 (the secret value is never echoed).
57
+ - A `memory.changed` event is emitted after every write from the UI and when memory files change on disk (an agent writing through MCP, `athena memory` in a terminal, a `git pull`), so open pages refresh live.
58
+
3
59
  ## 0.3.0 — 2026-09-30
4
60
 
5
61
  Performance release: work is now proportional to what changed. On a 20,000-file repository (vs 0.2.1): a `sync --check` with nothing changed takes ~0.42 s instead of 2.9 s, `status` 0.14 s instead of 0.34 s, agent hooks start in ~28 ms instead of 112 ms, and peak memory is 20–52% lower in every scenario. The generated `model.json` is unchanged (golden-tested against the 0.2.1 analyzer). Benchmarks: `npm run bench`.
package/README.md CHANGED
@@ -58,23 +58,61 @@ Generated content sits between `athena:generated` markers. Anything outside the
58
58
  | `athena sync` | Show which documents would change and why (with diffs), then apply after confirmation (`--yes`, `--dry-run`, `--diff`, `--check` for CI) |
59
59
  | `athena watch` | Watch the project and propose updates as files change (`--auto-apply` to write automatically) |
60
60
  | `athena doctor` | Check the installation, project, knowledge files and agent integrations |
61
+ | `athena memory` | `list`, `show`, `add`, `search`, `recall`, `confirm`, `supersede`, `forget`, `edit`, `stale`, `review` — project memory in `.athena/memory/` (see [Project memory](#project-memory)) |
61
62
  | `athena rules` | `list`, `add "<rule>" --section <name>`, `edit`, `enable`, `disable`, `remove` |
62
63
  | `athena agents` | `list`, `add <claude-code\|cursor\|codex\|copilot\|gemini-cli\|antigravity\|windsurf\|cline\|agents-md\|all>`, `remove` |
63
64
  | `athena activity` | Show AI agent activity observed through hooks (`-n`, `--agent`) |
65
+ | `athena scan` | Unified scan: secrets, dependency audits and (on a change) review checks, with policy, baseline, triage and a quality gate (`--base`, `--staged`, `--changed`, `--only`, `-f text\|json\|markdown\|github\|sarif`, `-o`, `--fail-on`, `--policy-from`, `--offline`, `--list-rules`) |
66
+ | `athena baseline` | `show`, `create`, `update`, `prune` — record existing findings so only new ones fail the gate |
67
+ | `athena findings` | `list`, `show <fingerprint>`, `triage <fingerprint> <safe\|false-positive\|accepted-risk\|fixed\|to-review\|clear> --reason …` |
68
+ | `athena explain <ruleId>` | What a rule detects and what to do about it |
64
69
  | `athena security` | Audit dependencies with the tools installed for this project, and report secret findings (`--fail-on`, `--last`, `--no-audit`) |
65
70
  | `athena review` | Check the current diff for facts worth reviewing, and list your rules and checklist (`--base`, `--no-fail`) |
66
71
  | `athena git-hook` | `install` (`--review`), `uninstall`, `status` — a Git pre-commit hook that blocks commits when knowledge is out of date |
67
72
  | `athena context <task>` | Show which knowledge an agent should read for a task (`--full`, `--json`) |
68
73
  | `athena graph` | Inspect the project graph (`--build`, `--search`, `--node`, `--kind`) |
69
- | `athena mcp` | Serve project intelligence to agents over MCP (stdio; `--allow-write`) |
74
+ | `athena mcp` | Serve project intelligence to agents over MCP (stdio; `--allow-write`, `--no-memory-write`) |
70
75
  | `athena ai` | `status`, `enrich` — optional AI suggestions (`--consent`, `--dry-run`) |
71
76
  | `athena open` | Start (or reuse) the local web UI on `127.0.0.1`, watch for changes, and open it (`--port`, `--no-open`, `--no-watch`) |
72
- | `athena clean` | Remove `.athena/` and Athena integration blocks |
77
+ | `athena clean` | Remove `.athena/` (including project memory) and Athena integration blocks |
73
78
 
74
79
  Global flags: `--json`, `--quiet`, `--cwd <dir>`, `--no-color`.
75
80
 
76
81
  They print *Not available yet* and exit with code 2. See [docs/ROADMAP.md](docs/ROADMAP.md).
77
82
 
83
+ ## Project memory
84
+
85
+ Agents rediscover the same things every session: why the queue uses advisory locks, that tests need `TZ=UTC`, which bug the retry guard fixes. Athena keeps these as **project memory** in `.athena/memory/` — one Markdown file per kind (`decisions.md`, `gotchas.md`, `bugs.md`, `conventions.md`, `todos.md`, `facts.md`). Commit it: the team shares it and reviews changes in pull requests. Text you write outside the `athena:memory` markers is kept as written.
86
+
87
+ - **Evidence labels.** An entry you record is `confirmed` (**FACT**). An entry an agent records is `unreviewed` (**INFERRED**) until you confirm it.
88
+ - **Staleness.** Entries can link files. When a linked file changes, the entry is reported **stale** until you confirm it again (which re-anchors it), edit it or forget it.
89
+ - **Safety.** Entries that look like a secret are refused (the value is never stored or printed). Entries that address the agent instead of describing the project (possible prompt injection) are flagged and never recalled automatically.
90
+
91
+ ```bash
92
+ athena memory add --kind decision --title "Queue uses advisory locks" \
93
+ --file src/jobs/queue.ts --tag jobs --evidence "PR #412"
94
+ git log -1 --format=%B | athena memory add --kind bug --title "Double refund on webhook retry" --details -
95
+ athena memory list # --kind, --status unreviewed|confirmed|superseded, --stale
96
+ athena memory review # walk agent-written entries: [c]onfirm [e]dit later [f]orget [s]kip [q]uit
97
+ athena memory recall "change the refund flow" --file src/api/refunds.ts
98
+ athena memory stale # entries whose linked files changed
99
+ athena memory confirm m-1a2b3c m-4d5e6f
100
+ athena memory supersede m-1a2b3c --by m-7a8b9c # keep as history
101
+ athena memory forget m-1a2b3c # asks first; --yes in scripts
102
+ ```
103
+
104
+ ```text
105
+ $ athena memory list
106
+ ID KIND LABEL STATUS TITLE · SOURCE
107
+ m-b74d24 gotcha INFERRED unreviewed Refund webhook retries twice · agent:claude-code
108
+ m-815cd7 decision FACT confirmed stale Queue uses advisory locks · developer
109
+
110
+ 2 entries · 1 confirmed · 1 unreviewed · 1 stale · source: .athena/memory/
111
+ 1 entry written by agents is INFERRED until reviewed: run `athena memory review`.
112
+ ```
113
+
114
+ Every command supports `--json`. `athena memory review` is interactive only in a terminal; elsewhere it lists the unreviewed entries and exits 0. `athena status` and `athena doctor` show how many entries are unreviewed or stale, and `athena clean` warns before deleting project memory.
115
+
78
116
  ## Keeping knowledge in sync
79
117
 
80
118
  ```text
@@ -136,6 +174,10 @@ $ athena activity
136
174
  ## Security and review
137
175
 
138
176
  ```bash
177
+ athena scan # secrets + dependency audits, policy and quality gate
178
+ athena scan --base origin/main -f sarif -o athena.sarif --policy-from origin/main # in CI
179
+ athena baseline create # accept today's findings; only new ones fail the gate
180
+ athena findings triage 5f65caf9 false-positive --reason "test fixture"
139
181
  athena security # audit dependencies + report secret findings
140
182
  athena security --fail-on high # exit 1 in CI
141
183
  athena review # check the current diff before you commit
@@ -143,6 +185,8 @@ athena review # check the current diff before you commit
143
185
 
144
186
  **`athena security`** runs the audit tools your project's ecosystems provide (`npm audit`, `pnpm audit`, `pip-audit`, `govulncheck`, `cargo audit`, `composer audit`) and reports what they find, attributed to the tool. Athena has no vulnerability database of its own: a tool that isn't installed is reported as **unknown**, never as "no problems". Results are stored in `.athena/security-scan.json` and recorded in `security.md` on the next `athena sync`.
145
187
 
188
+ **`athena scan`** puts every check into one findings model. Each finding has a rule id, severity (`unrated` when the tool gave none — never treated as low), confidence, a FACT/DETECTED/INFERRED label, CWE, a location or package, and a fingerprint that never depends on a secret's value. Every report lists what was *not* covered (tools not installed, engines that failed, categories nothing scanned), and a failed engine fails the gate — it checked nothing. Optional committed files tune it: `.athena/policy.json` (gate thresholds, rule overrides, path excludes), `.athena/baseline.json`, `.athena/triage.json`, and inline `athena-ignore <ruleId> -- <reason>` comments (a reason is required). In CI, `--policy-from <base>` evaluates with the base branch's policy and reports any change to it on the branch as `review/policy-weakened`. Output formats: text, JSON, Markdown, GitHub annotations and SARIF 2.1.0 (for code scanning). Ratings A–E per category come with their basis; there is no numeric score.
189
+
146
190
  **`athena review`** checks facts about your current diff: secrets in added lines (a blocker, exit 1), committed env files, new dependencies, source changed without tests, API/schema/auth touchpoints, large files, debug leftovers, and whether Athena knowledge is stale. It then lists your enabled rules and the project's review checklist for you or your agent to apply — Athena does not claim to judge whether they are met, and it runs no AI.
147
191
 
148
192
  ## Use in CI and git hooks
@@ -249,11 +293,19 @@ Documents to read
249
293
 
250
294
  - **Deterministic.** The same task and project state always produce the same selection, with a stated reason for each document. No AI is involved.
251
295
  - **Sections, not whole files.** Only the relevant sections are returned, under a character budget, with your rules always included.
296
+ - **Project memory.** Up to five recalled memories from `.athena/memory/` (confirmed ones first, possible prompt injections excluded) are included with their label (`FACT` once a developer confirmed them, `INFERRED` while unreviewed), whether they are stale, and why they matched. They share the character budget (at most 30% of it) and appear in `--full` output and as `memories` in `--json`.
252
297
  - **Project graph.** `athena graph --build` writes `.athena/graph.json`: packages, files, routes, entities, frameworks and commands, connected by `contains`, `imports`, `handles`, `defines` and `depends_on`. It comes from the analysis, so it never asserts more than DETECTED evidence.
253
298
 
254
- **MCP.** `athena mcp` serves this to any MCP-capable agent over stdio, and `athena agents add` registers it (`.mcp.json` for Claude Code, `.cursor/mcp.json` for Cursor, `[mcp_servers.athena]` in `.codex/config.toml` for Codex, `servers.athena` in `.vscode/mcp.json` for GitHub Copilot in VS Code, `mcpServers.athena` in `.gemini/settings.json` for Gemini CLI). Tools: `get_relevant_context`, `get_project_context`, `get_architecture`, `get_database_schema`, `get_api_context`, `get_security_context`, `get_project_rules`, `get_knowledge_document`, `get_project_changes`, `get_project_graph`, `get_athena_status`, `update_knowledge`.
299
+ **MCP.** `athena mcp` serves this to any MCP-capable agent over stdio, and `athena agents add` registers it (`.mcp.json` for Claude Code, `.cursor/mcp.json` for Cursor, `[mcp_servers.athena]` in `.codex/config.toml` for Codex, `servers.athena` in `.vscode/mcp.json` for GitHub Copilot in VS Code, `mcpServers.athena` in `.gemini/settings.json` for Gemini CLI). Tools: `get_relevant_context`, `get_project_context`, `get_architecture`, `get_database_schema`, `get_api_context`, `get_security_context`, `get_project_rules`, `get_knowledge_document`, `get_project_changes`, `get_project_graph`, `get_athena_status`, `update_knowledge`, and the memory tools `recall`, `list_memory` and `remember`.
300
+
301
+ The server is **read-only by default**: `update_knowledge` reports what would change and refuses to write unless you start it with `--allow-write`. The one exception is `remember`: an agent may append a memory to `.athena/memory/`, but it is always stored **unreviewed** (`INFERRED`, attributed to the agent, e.g. `agent:claude-code`, or `agent:mcp` when the client is not recognized) and counts as a `FACT` only after a developer confirms it. It never touches knowledge documents and refuses anything that looks like a secret. Start the server with `--no-memory-write` to turn it off.
255
302
 
256
- The server is **read-only by default**: `update_knowledge` reports what would change and refuses to write unless you start it with `--allow-write`. Repository content it returns is passed through the secret redactor and wrapped in `<athena-document … trust="untrusted-data">` delimiters, so agents can tell project data from instructions.
303
+ | Memory tool | Input | Returns |
304
+ | --- | --- | --- |
305
+ | `recall` | `task?`, `files?`, `tags?`, `limit?` | Ranked memories with why each matched, label, status and staleness, each in `<athena-memory … trust="untrusted-data">` delimiters. Entries that look like instructions to an agent are excluded (the reply says how many). |
306
+ | `list_memory` | `kind?`, `status?`, `stale?` | One-line summaries: id, kind, status, label, stale, title |
307
+ | `remember` | `kind`, `title`, `details?`, `files?`, `tags?`, `evidence?`, `supersedes?` | The new id and label (`INFERRED`); a developer must confirm it |
308
+ Repository content it returns is passed through the secret redactor and wrapped in `<athena-document … trust="untrusted-data">` (or `<athena-memory …>`) delimiters, so agents can tell project data from instructions. The generated agent instructions tell agents to `recall` at the start of a task, `remember` durable learnings at the end, and treat unreviewed memories as hints to verify — `rules.md` and the developer always win.
257
309
 
258
310
  ## Optional AI
259
311
 
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  listAgents
4
- } from "./chunk-JY6BFIJJ.js";
4
+ } from "./chunk-RQKGT2EK.js";
5
5
  import {
6
6
  readRecentEvents,
7
7
  summarizeSessions
8
- } from "./chunk-65TSRDQ3.js";
8
+ } from "./chunk-P4TRQMES.js";
9
9
  import {
10
10
  c,
11
11
  dim,
@@ -20,15 +20,15 @@ import {
20
20
  requireProjectRoot
21
21
  } from "./chunk-XFN7UZCS.js";
22
22
  import "./chunk-KBO7XRBW.js";
23
- import "./chunk-JCGDR4UV.js";
24
- import "./chunk-2RS6TA3D.js";
23
+ import "./chunk-WWQ5NKEC.js";
24
+ import "./chunk-YRIS7ZS6.js";
25
25
  import "./chunk-GHFRQAYT.js";
26
+ import "./chunk-INT3IGMQ.js";
26
27
  import "./chunk-673EPYYH.js";
27
28
  import "./chunk-FQEGEVLY.js";
28
29
  import "./chunk-2DY4PUR4.js";
29
30
  import "./chunk-IQQBAWSM.js";
30
31
  import "./chunk-AD4OZCU2.js";
31
- import "./chunk-INT3IGMQ.js";
32
32
  import "./chunk-XW3MLHI2.js";
33
33
  import "./chunk-EUPETUWA.js";
34
34
 
@@ -74,4 +74,4 @@ async function activityCommand(opts) {
74
74
  export {
75
75
  activityCommand
76
76
  };
77
- //# sourceMappingURL=activity-P4UUFHWV.js.map
77
+ //# sourceMappingURL=activity-XCHKBZTG.js.map
@@ -3,8 +3,8 @@ import {
3
3
  configureAgents,
4
4
  listAgents,
5
5
  removeAgents
6
- } from "./chunk-JY6BFIJJ.js";
7
- import "./chunk-65TSRDQ3.js";
6
+ } from "./chunk-RQKGT2EK.js";
7
+ import "./chunk-P4TRQMES.js";
8
8
  import {
9
9
  c,
10
10
  dim,
@@ -19,15 +19,15 @@ import {
19
19
  requireProjectRoot
20
20
  } from "./chunk-XFN7UZCS.js";
21
21
  import "./chunk-KBO7XRBW.js";
22
- import "./chunk-JCGDR4UV.js";
23
- import "./chunk-2RS6TA3D.js";
22
+ import "./chunk-WWQ5NKEC.js";
23
+ import "./chunk-YRIS7ZS6.js";
24
24
  import "./chunk-GHFRQAYT.js";
25
+ import "./chunk-INT3IGMQ.js";
25
26
  import "./chunk-673EPYYH.js";
26
27
  import "./chunk-FQEGEVLY.js";
27
28
  import "./chunk-2DY4PUR4.js";
28
29
  import "./chunk-IQQBAWSM.js";
29
30
  import "./chunk-AD4OZCU2.js";
30
- import "./chunk-INT3IGMQ.js";
31
31
  import "./chunk-XW3MLHI2.js";
32
32
  import "./chunk-EUPETUWA.js";
33
33
 
@@ -66,4 +66,4 @@ export {
66
66
  agentsListCommand,
67
67
  agentsRemoveCommand
68
68
  };
69
- //# sourceMappingURL=agents-3HTSQGL2.js.map
69
+ //# sourceMappingURL=agents-HUJ4JXIB.js.map
@@ -3,7 +3,7 @@ import {
3
3
  aiStatus,
4
4
  buildEnrichPayload,
5
5
  enrich
6
- } from "./chunk-RXNRMIZP.js";
6
+ } from "./chunk-WUIC65QO.js";
7
7
  import {
8
8
  c,
9
9
  dim,
@@ -20,7 +20,7 @@ import {
20
20
  } from "./chunk-XFN7UZCS.js";
21
21
  import "./chunk-KBO7XRBW.js";
22
22
  import "./chunk-PVCIGUIT.js";
23
- import "./chunk-JCGDR4UV.js";
23
+ import "./chunk-WWQ5NKEC.js";
24
24
  import "./chunk-FQEGEVLY.js";
25
25
  import "./chunk-2DY4PUR4.js";
26
26
  import "./chunk-IQQBAWSM.js";
@@ -93,4 +93,4 @@ export {
93
93
  aiEnrichCommand,
94
94
  aiStatusCommand
95
95
  };
96
- //# sourceMappingURL=ai-ASL4FFQ7.js.map
96
+ //# sourceMappingURL=ai-LGTLQKL4.js.map
@@ -4,7 +4,7 @@ import {
4
4
  printSummary,
5
5
  runWithProgress,
6
6
  summarize
7
- } from "./chunk-DOQMAZL5.js";
7
+ } from "./chunk-R5AX7VST.js";
8
8
  import {
9
9
  printHeader
10
10
  } from "./chunk-SHKXELUX.js";
@@ -16,21 +16,22 @@ import {
16
16
  requireProjectRoot
17
17
  } from "./chunk-XFN7UZCS.js";
18
18
  import "./chunk-KBO7XRBW.js";
19
- import "./chunk-SJOOXO34.js";
20
- import "./chunk-PANVPNYF.js";
21
- import "./chunk-ELKFRTZT.js";
19
+ import "./chunk-4FETKOY3.js";
22
20
  import "./chunk-2R6PXY6Z.js";
21
+ import "./chunk-44EGCEB2.js";
23
22
  import "./chunk-PVCIGUIT.js";
24
- import "./chunk-OLPSEQS5.js";
25
- import "./chunk-JCGDR4UV.js";
26
- import "./chunk-2RS6TA3D.js";
23
+ import "./chunk-ELKFRTZT.js";
24
+ import "./chunk-AKOI4VTD.js";
25
+ import "./chunk-QCC4VJUH.js";
26
+ import "./chunk-WWQ5NKEC.js";
27
+ import "./chunk-YRIS7ZS6.js";
27
28
  import "./chunk-GHFRQAYT.js";
29
+ import "./chunk-INT3IGMQ.js";
28
30
  import "./chunk-673EPYYH.js";
29
31
  import "./chunk-FQEGEVLY.js";
30
32
  import "./chunk-2DY4PUR4.js";
31
33
  import "./chunk-IQQBAWSM.js";
32
34
  import "./chunk-AD4OZCU2.js";
33
- import "./chunk-INT3IGMQ.js";
34
35
  import "./chunk-XW3MLHI2.js";
35
36
  import "./chunk-EUPETUWA.js";
36
37
 
@@ -46,4 +47,4 @@ async function analyzeCommand(opts) {
46
47
  export {
47
48
  analyzeCommand
48
49
  };
49
- //# sourceMappingURL=analyze-F3YOILNL.js.map
50
+ //# sourceMappingURL=analyze-AP4XJT7D.js.map
@@ -13,7 +13,7 @@ import {
13
13
  git,
14
14
  statusV2,
15
15
  workingChanges
16
- } from "./chunk-OLPSEQS5.js";
16
+ } from "./chunk-AKOI4VTD.js";
17
17
  import {
18
18
  isBlockModified,
19
19
  parseBlocks
@@ -218,4 +218,4 @@ async function buildStatus(root, signal, opts = {}) {
218
218
  export {
219
219
  buildStatus
220
220
  };
221
- //# sourceMappingURL=chunk-ZB7LC6FP.js.map
221
+ //# sourceMappingURL=chunk-3KFOI2X4.js.map