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.
- package/CHANGELOG.md +56 -0
- package/README.md +56 -4
- package/dist/{activity-P4UUFHWV.js → activity-XCHKBZTG.js} +6 -6
- package/dist/{agents-3HTSQGL2.js → agents-HUJ4JXIB.js} +6 -6
- package/dist/{ai-ASL4FFQ7.js → ai-LGTLQKL4.js} +3 -3
- package/dist/{analyze-F3YOILNL.js → analyze-AP4XJT7D.js} +10 -9
- package/dist/{chunk-ZB7LC6FP.js → chunk-3KFOI2X4.js} +2 -2
- package/dist/{chunk-PANVPNYF.js → chunk-44EGCEB2.js} +59 -251
- package/dist/{chunk-SJOOXO34.js → chunk-4FETKOY3.js} +9 -8
- package/dist/chunk-4IIBVTBS.js +76 -0
- package/dist/{chunk-LEMPCNAY.js → chunk-56EXAGTM.js} +3 -3
- package/dist/{chunk-32PRS2MG.js → chunk-6OSQMXUP.js} +5 -5
- package/dist/{chunk-OLPSEQS5.js → chunk-AKOI4VTD.js} +10 -1
- package/dist/{chunk-EF6GHOIN.js → chunk-C25FDXOO.js} +133 -23
- package/dist/{chunk-S7T6VX56.js → chunk-DH5AGULY.js} +8 -4
- package/dist/chunk-F65QINMR.js +702 -0
- package/dist/chunk-GU3ZX2J7.js +166 -0
- package/dist/chunk-GYQG4Q2N.js +108 -0
- package/dist/chunk-IDODPGTX.js +595 -0
- package/dist/chunk-KJYSNZXS.js +934 -0
- package/dist/{chunk-PR53DT7I.js → chunk-L2EHJCH4.js} +8 -8
- package/dist/{chunk-65TSRDQ3.js → chunk-P4TRQMES.js} +2 -2
- package/dist/{chunk-TGJUUB44.js → chunk-PZPMWCXS.js} +5 -5
- package/dist/chunk-QCC4VJUH.js +217 -0
- package/dist/{chunk-DOQMAZL5.js → chunk-R5AX7VST.js} +3 -3
- package/dist/{chunk-JY6BFIJJ.js → chunk-RQKGT2EK.js} +3 -3
- package/dist/{chunk-PDFQ5BFG.js → chunk-SVTEJYMS.js} +4 -155
- package/dist/{chunk-VSYBC3VY.js → chunk-UMWX4UTK.js} +2 -2
- package/dist/{chunk-RXNRMIZP.js → chunk-WUIC65QO.js} +2 -2
- package/dist/{chunk-JCGDR4UV.js → chunk-WWQ5NKEC.js} +3 -1
- package/dist/{chunk-XB66PZ6Z.js → chunk-X7EYOAEX.js} +2 -2
- package/dist/chunk-Y6SDMZET.js +278 -0
- package/dist/{chunk-2RS6TA3D.js → chunk-YRIS7ZS6.js} +28 -17
- package/dist/{clean-S7PKCOLM.js → clean-LQOG56AM.js} +4 -4
- package/dist/cli.js +2 -2
- package/dist/{context-AH5MFHRG.js → context-G5YHY3L2.js} +24 -10
- package/dist/{doctor-RSJMLE2P.js → doctor-L34QJ7WR.js} +17 -10
- package/dist/{event-TNT6CQZR.js → event-6YW6TGFI.js} +3 -3
- package/dist/{git-hook-YZNZGAAP.js → git-hook-Y7Y262F7.js} +2 -2
- package/dist/{init-2V34DVRQ.js → init-427QR5AS.js} +10 -9
- package/dist/{mcp-T2GRTEX5.js → mcp-DWNWRGJW.js} +196 -21
- package/dist/memory-XBZCYQLW.js +393 -0
- package/dist/{open-2QSZKKUG.js → open-LJMOB6U2.js} +262 -69
- package/dist/{program-V2USHGXN.js → program-DCP526LU.js} +63 -32
- package/dist/{review-R3R2J5BJ.js → review-VEJBPACX.js} +14 -11
- package/dist/{rules-4FXJUCXB.js → rules-M4DLLXBL.js} +4 -4
- package/dist/scan-JVKCVHPD.js +939 -0
- package/dist/{security-PI4LXCOB.js → security-JTJN3E7K.js} +15 -11
- package/dist/{staged-check-HHIBKKMR.js → staged-check-PQSLGQBW.js} +15 -13
- package/dist/{status-6M73WX5I.js → status-PO27BSOZ.js} +10 -4
- package/dist/{sync-3ZNJDSSU.js → sync-GVO2VHPI.js} +14 -12
- package/dist/{watch-USN5CQIV.js → watch-TEHFO47V.js} +14 -12
- package/dist/web/assets/{Editor-BI56-HX5.js → Editor-Bnilgch0.js} +1 -1
- package/dist/web/assets/{abnfDiagram-O67JEVCF-y_9px2ob.js → abnfDiagram-O67JEVCF-DW9LWr8f.js} +1 -1
- package/dist/web/assets/architecture-7GRP2DOG-BWDZV2yn.js +1 -0
- package/dist/web/assets/{architectureDiagram-NJMV4G6O-lB6fcVzU.js → architectureDiagram-NJMV4G6O-0eKeQRhj.js} +1 -1
- package/dist/web/assets/{blockDiagram-BEXU5L5S-DcM5pEjM.js → blockDiagram-BEXU5L5S-D5i3-ogI.js} +1 -1
- package/dist/web/assets/{c4Diagram-YGBWAQC7-CJgqxTY2.js → c4Diagram-YGBWAQC7-BAWQZrEu.js} +1 -1
- package/dist/web/assets/channel-Bkh05NKd.js +1 -0
- package/dist/web/assets/{chunk-3FUC2YCW-B8l_VuWR.js → chunk-3FUC2YCW-fKRGOZF3.js} +1 -1
- package/dist/web/assets/{chunk-5DYCD2WN-CZecgNhf.js → chunk-5DYCD2WN-C5jOlx42.js} +1 -1
- package/dist/web/assets/{chunk-742MDFTN-BeZ7P5jB.js → chunk-742MDFTN-urY4RP_A.js} +1 -1
- package/dist/web/assets/{chunk-7INBJB4K-IKy0pr5m.js → chunk-7INBJB4K-nk48sKqZ.js} +1 -1
- package/dist/web/assets/{chunk-7M6MHVWA-Dg_QqJEX.js → chunk-7M6MHVWA-BfBD9X0F.js} +1 -1
- package/dist/web/assets/{chunk-7PRAP22T-DqQNS8oq.js → chunk-7PRAP22T-jYf59QlI.js} +1 -1
- package/dist/web/assets/{chunk-GTNCS2PH-x4sM51nJ.js → chunk-GTNCS2PH-BOCxryKf.js} +1 -1
- package/dist/web/assets/{chunk-GWA4HPMP-CE5GcwVN.js → chunk-GWA4HPMP-CFpaW0ru.js} +1 -1
- package/dist/web/assets/{chunk-MBY4JIJT-DA_D1hjF.js → chunk-MBY4JIJT-BIB8HctN.js} +1 -1
- package/dist/web/assets/{chunk-NETBCI7D-CeJ3XBZ2.js → chunk-NETBCI7D-CpUUK6rh.js} +1 -1
- package/dist/web/assets/{chunk-O7XYJQB3-BH2gESvO.js → chunk-O7XYJQB3-BNx_V4Oi.js} +1 -1
- package/dist/web/assets/{chunk-UA2S7LBM-BWr0xCux.js → chunk-UA2S7LBM-D3tMiIOY.js} +1 -1
- package/dist/web/assets/{chunk-WEXAMYUT-B4QwUZPM.js → chunk-WEXAMYUT-CC-3C32l.js} +1 -1
- package/dist/web/assets/{chunk-Z7XXMR3K-BxcA-y5B.js → chunk-Z7XXMR3K-BzhxKQUc.js} +1 -1
- package/dist/web/assets/{chunk-ZIGJFQKS-BZYvP63G.js → chunk-ZIGJFQKS-D4tBHzxg.js} +1 -1
- package/dist/web/assets/{classDiagram-v2-NBCMYWYE-BS3P_NXb.js → classDiagram-v2-NBCMYWYE-BbtyanXR.js} +1 -1
- package/dist/web/assets/{cynefin-OW5HDTMX-BALD4Pve.js → cynefin-OW5HDTMX-BIArb8W1.js} +1 -1
- package/dist/web/assets/{cynefinDiagram-VND7K2PF-BM2y4W6d.js → cynefinDiagram-VND7K2PF-BrAcfkXL.js} +1 -1
- package/dist/web/assets/{dagre-6A5THRUB-PTfOrIdF.js → dagre-6A5THRUB-BcHXRl4s.js} +1 -1
- package/dist/web/assets/{diagram-22UHCM2B-CpXEHhUl.js → diagram-22UHCM2B-Dx9tSCdE.js} +1 -1
- package/dist/web/assets/{diagram-3UASUU5V-DPHfXzr6.js → diagram-3UASUU5V-CLLDP9yH.js} +1 -1
- package/dist/web/assets/{diagram-ATOU4E4O-DMBNXvAC.js → diagram-ATOU4E4O-B46H9iPt.js} +1 -1
- package/dist/web/assets/{diagram-CDSNMT55-CDLe1M7G.js → diagram-CDSNMT55-CYtvB6aG.js} +1 -1
- package/dist/web/assets/{diagram-MLGK6HIB-D6L8oE7j.js → diagram-MLGK6HIB-Dar7ktoX.js} +1 -1
- package/dist/web/assets/{diagram-MPIPVDR6-CP-S7rrQ.js → diagram-MPIPVDR6-C-DljnYN.js} +1 -1
- package/dist/web/assets/{ebnfDiagram-ZINNZB2B-CkUc63TK.js → ebnfDiagram-ZINNZB2B-Dv_3jWnh.js} +1 -1
- package/dist/web/assets/{elk-276RUBZZ-C1CAJLH_.js → elk-276RUBZZ-DnHciE9k.js} +1 -1
- package/dist/web/assets/{erDiagram-OPXOYQCR-DXBnaTHm.js → erDiagram-OPXOYQCR-Bn46KrHz.js} +1 -1
- package/dist/web/assets/eventmodeling-NTZA5JFV-DYwoptMd.js +1 -0
- package/dist/web/assets/flowDiagram-KWPJA3E3-y4rS0gIB.js +1 -0
- package/dist/web/assets/{ganttDiagram-FUAMR5RP-BVm8SiGg.js → ganttDiagram-FUAMR5RP-DOjjJtqz.js} +1 -1
- package/dist/web/assets/{gitGraph-4MIJSDKK-Dm7xBrW0.js → gitGraph-4MIJSDKK-BIoMXJRQ.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-X574FWY7-D_PIKKhx.js → gitGraphDiagram-X574FWY7-BsJ01R0v.js} +1 -1
- package/dist/web/assets/{index-CeOIBpu2.js → index-Cen0jOXj.js} +5 -4
- package/dist/web/assets/{index-DKE3ojTe.css → index-WwRY6n68.css} +1 -1
- package/dist/web/assets/{info-A6RAGUB7-CLGrx8pn.js → info-A6RAGUB7-BmlXzRWj.js} +1 -1
- package/dist/web/assets/{infoDiagram-VRGFBTTK-BlBjaKm7.js → infoDiagram-VRGFBTTK-CYPJPmBP.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-OU5B5YK6-Kxe7GGS3.js → ishikawaDiagram-OU5B5YK6-YN96geky.js} +1 -1
- package/dist/web/assets/{journeyDiagram-ZHPQQLJL-wCMoHK4M.js → journeyDiagram-ZHPQQLJL-20juojKY.js} +1 -1
- package/dist/web/assets/{kanban-definition-PNTS6WVX-BxdCz9Ko.js → kanban-definition-PNTS6WVX-BhCKIEbP.js} +1 -1
- package/dist/web/assets/{line-Zf11FnWF.js → line-BERsMFG6.js} +1 -1
- package/dist/web/assets/{mermaid-parser.core-BvFFklev.js → mermaid-parser.core-Bis_wTB-.js} +3 -3
- package/dist/web/assets/{mermaid.core-Cd_Ssti9.js → mermaid.core-DMsM3ZX7.js} +4 -4
- package/dist/web/assets/{mindmap-definition-NLK3R4M7-BGPQl-GY.js → mindmap-definition-NLK3R4M7-BkcGdOfv.js} +1 -1
- package/dist/web/assets/{packet-AYTQ26CC-6lI3cEX_.js → packet-AYTQ26CC-Bh30-JJX.js} +1 -1
- package/dist/web/assets/{pegDiagram-GJSIUBJH-BPIjlSAj.js → pegDiagram-GJSIUBJH-DxnIo9RF.js} +1 -1
- package/dist/web/assets/{pie-WAS4IAKB-D6Dzj3Ja.js → pie-WAS4IAKB-ChaTr-GD.js} +1 -1
- package/dist/web/assets/{pieDiagram-5QR66LMP-DtA-vZmv.js → pieDiagram-5QR66LMP-CzAp78FM.js} +1 -1
- package/dist/web/assets/{quadrantDiagram-O4NWA36T-EettyqQn.js → quadrantDiagram-O4NWA36T-BDSE-cfY.js} +1 -1
- package/dist/web/assets/{radar-RG4KPBEZ-xmRc3Dl8.js → radar-RG4KPBEZ-DgJ-o_dq.js} +1 -1
- package/dist/web/assets/{railroad-74A4TZTK-BLB7dhOn.js → railroad-74A4TZTK-C8MmcBKz.js} +1 -1
- package/dist/web/assets/railroad-abnf-HS5TGJTU-CTLXjcdP.js +1 -0
- package/dist/web/assets/railroad-ebnf-LZEXJU2U-ggWsTTL0.js +1 -0
- package/dist/web/assets/railroad-peg-WCYAUIDC-D1mCX705.js +1 -0
- package/dist/web/assets/{railroadDiagram-XR7U4H2S-PBw4We6b.js → railroadDiagram-XR7U4H2S-DfbcWRNh.js} +1 -1
- package/dist/web/assets/{requirementDiagram-PLB6GJNP-DjQpaUFA.js → requirementDiagram-PLB6GJNP-DM3nksxs.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-IPEJSGJF-CBW-_AoF.js → sankeyDiagram-IPEJSGJF-DthUpiiC.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-PO4LG4MO-DEoPYqY9.js → sequenceDiagram-PO4LG4MO-DLA3nuvA.js} +1 -1
- package/dist/web/assets/{stateDiagram-v2-GCMORJYK-UZq5rPud.js → stateDiagram-v2-GCMORJYK-B0X6ihBW.js} +1 -1
- package/dist/web/assets/{swimlanes-2SLR337P-CACfuXJR.js → swimlanes-2SLR337P-B4qWe6vE.js} +1 -1
- package/dist/web/assets/swimlanesDiagram-TC7HE7FX-ClIk3e7S.js +8 -0
- package/dist/web/assets/{timeline-definition-EJHVYXUP-CYJl7mP-.js → timeline-definition-EJHVYXUP-F-cDzYrj.js} +1 -1
- package/dist/web/assets/{treeView-Q6P3EWNA-DtZ5nkPQ.js → treeView-Q6P3EWNA-BaI30nLZ.js} +1 -1
- package/dist/web/assets/{treemap-WGGIJYW6-m49GDM-M.js → treemap-WGGIJYW6-D2jGGoMl.js} +1 -1
- package/dist/web/assets/{usecaseDiagram-POWQR4AR-C2Vg20UK.js → usecaseDiagram-POWQR4AR-B9qoAQCy.js} +1 -1
- package/dist/web/assets/{vennDiagram-UO4OBE2U-C07v5OGI.js → vennDiagram-UO4OBE2U-DGVNOaKO.js} +1 -1
- package/dist/web/assets/{wardley-WFR3VGLG-C9Z7EZtz.js → wardley-WFR3VGLG-DbKqhNAh.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-VNRHLVJA-DdA8CcSC.js → wardleyDiagram-VNRHLVJA-BgZ1gprw.js} +1 -1
- package/dist/web/assets/{xychartDiagram-PMCCYNJV-C9EZw07b.js → xychartDiagram-PMCCYNJV-D73RYid1.js} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +3 -1
- package/dist/chunk-CXUTYCZX.js +0 -238
- package/dist/chunk-LMOFZNTQ.js +0 -379
- package/dist/web/assets/architecture-7GRP2DOG-DyxkwYiW.js +0 -1
- package/dist/web/assets/channel-BvDD7AMO.js +0 -1
- package/dist/web/assets/eventmodeling-NTZA5JFV-cLIzvgDp.js +0 -1
- package/dist/web/assets/flowDiagram-KWPJA3E3-D7Zq63VQ.js +0 -1
- package/dist/web/assets/railroad-abnf-HS5TGJTU-DBFym6g8.js +0 -1
- package/dist/web/assets/railroad-ebnf-LZEXJU2U-CkG28ig8.js +0 -1
- package/dist/web/assets/railroad-peg-WCYAUIDC-Df_Ifaad.js +0 -1
- 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
|
-
|
|
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-
|
|
4
|
+
} from "./chunk-RQKGT2EK.js";
|
|
5
5
|
import {
|
|
6
6
|
readRecentEvents,
|
|
7
7
|
summarizeSessions
|
|
8
|
-
} from "./chunk-
|
|
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-
|
|
24
|
-
import "./chunk-
|
|
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-
|
|
77
|
+
//# sourceMappingURL=activity-XCHKBZTG.js.map
|
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
configureAgents,
|
|
4
4
|
listAgents,
|
|
5
5
|
removeAgents
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
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-
|
|
23
|
-
import "./chunk-
|
|
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-
|
|
69
|
+
//# sourceMappingURL=agents-HUJ4JXIB.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
aiStatus,
|
|
4
4
|
buildEnrichPayload,
|
|
5
5
|
enrich
|
|
6
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
96
|
+
//# sourceMappingURL=ai-LGTLQKL4.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
printSummary,
|
|
5
5
|
runWithProgress,
|
|
6
6
|
summarize
|
|
7
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
25
|
-
import "./chunk-
|
|
26
|
-
import "./chunk-
|
|
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-
|
|
50
|
+
//# sourceMappingURL=analyze-AP4XJT7D.js.map
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
git,
|
|
14
14
|
statusV2,
|
|
15
15
|
workingChanges
|
|
16
|
-
} from "./chunk-
|
|
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-
|
|
221
|
+
//# sourceMappingURL=chunk-3KFOI2X4.js.map
|