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
|
@@ -31,7 +31,10 @@ ${c.yellow("Interrupted.")} ${dim(getInterruptMessage())}
|
|
|
31
31
|
`);
|
|
32
32
|
}
|
|
33
33
|
process.stdout.on("error", (err) => {
|
|
34
|
-
if (err.code === "EPIPE")
|
|
34
|
+
if (err.code === "EPIPE") {
|
|
35
|
+
if (process.env.ATHENA_DEBUG) process.stderr.write("athena: stdout was closed by the reader (EPIPE); exiting quietly\n");
|
|
36
|
+
process.exit(0);
|
|
37
|
+
}
|
|
35
38
|
throw err;
|
|
36
39
|
});
|
|
37
40
|
process.on("SIGINT", onSignal);
|
|
@@ -55,47 +58,75 @@ function buildProgram() {
|
|
|
55
58
|
program.command("init").description("Analyze the project and create .athena/ knowledge").option("--agents <list>", 'Agents to configure: comma-separated ids (claude-code, cursor, codex, copilot, gemini-cli, antigravity, windsurf, cline, agents-md), "all" or "none". Default: detected agents + AGENTS.md').option("--no-agents", "Do not configure any agent integration").option("--dry-run", "Analyze and show what would be written, without writing").action(
|
|
56
59
|
run(async (cmdOpts, cmd) => {
|
|
57
60
|
const g = globals(cmd);
|
|
58
|
-
await (await import("./init-
|
|
61
|
+
await (await import("./init-427QR5AS.js")).initCommand({ ...g, agents: typeof cmdOpts.agents === "string" ? cmdOpts.agents : void 0, noAgents: cmdOpts.agents === false, dryRun: cmdOpts.dryRun, signal: controller.signal });
|
|
59
62
|
})
|
|
60
63
|
);
|
|
61
|
-
program.command("analyze").description("Re-analyze the project and refresh generated knowledge (developer edits are preserved)").option("--force", "Regenerate sections even if they were edited by hand").option("--agents <list>", "Reconfigure these agent integrations").action(run(async (o, cmd) => (await import("./analyze-
|
|
62
|
-
program.command("sync").description("Review and apply knowledge updates for changes since the last analysis").option("-y, --yes", "Apply without asking").option("--dry-run", "Show the plan without writing").option("--check", "Exit with code 1 if knowledge is out of date (for CI/hooks)").option("--staged", "With --check: check the staged knowledge against the staged code (the index), ignoring untracked and unstaged changes").option("--diff", "Print full diffs of proposed document changes").option("--force", "Also regenerate sections that were edited by hand").action(run(async (o, cmd) => (await import("./sync-
|
|
63
|
-
program.command("watch").description("Watch the project and propose knowledge updates as files change").option("--auto-apply", "Apply updates automatically instead of proposing them").option("--debounce <ms>", "Quiet period before checking changes (default 1500)").action(run(async (o, cmd) => (await import("./watch-
|
|
64
|
-
program.command("context <task>").description("Show which knowledge an agent should read for a task (deterministic)").option("--full", "Print the full context an agent would receive").option("--max-chars <n>", "Character budget for selected sections").action(run(async (task, o, cmd) => (await import("./context-
|
|
65
|
-
program.command("graph").description("Inspect the project graph (packages, files, routes, entities and their relationships)").option("--build", "Rebuild the graph from the current code").option("--node <id>", "Show one node and its relationships").option("--kind <kind>", "Filter by node kind (package, file, route, entity, framework, command, infra)").option("--search <term>", "Filter nodes by name or path").action(run(async (o, cmd) => (await import("./context-
|
|
66
|
-
program.command("architecture").description("Summarize the project graph").action(run(async (_o, cmd) => (await import("./context-
|
|
67
|
-
program.command("mcp").description("Serve Athena project intelligence over MCP (stdio) for AI agents").option("--allow-write", "Permit the update_knowledge tool to apply changes (read-only by default)").action(run(async (o, cmd) => (await import("./mcp-
|
|
64
|
+
program.command("analyze").description("Re-analyze the project and refresh generated knowledge (developer edits are preserved)").option("--force", "Regenerate sections even if they were edited by hand").option("--agents <list>", "Reconfigure these agent integrations").action(run(async (o, cmd) => (await import("./analyze-AP4XJT7D.js")).analyzeCommand({ ...globals(cmd), ...o, signal: controller.signal })));
|
|
65
|
+
program.command("sync").description("Review and apply knowledge updates for changes since the last analysis").option("-y, --yes", "Apply without asking").option("--dry-run", "Show the plan without writing").option("--check", "Exit with code 1 if knowledge is out of date (for CI/hooks)").option("--staged", "With --check: check the staged knowledge against the staged code (the index), ignoring untracked and unstaged changes").option("--diff", "Print full diffs of proposed document changes").option("--force", "Also regenerate sections that were edited by hand").action(run(async (o, cmd) => (await import("./sync-GVO2VHPI.js")).syncCommand({ ...globals(cmd), ...o, signal: controller.signal })));
|
|
66
|
+
program.command("watch").description("Watch the project and propose knowledge updates as files change").option("--auto-apply", "Apply updates automatically instead of proposing them").option("--debounce <ms>", "Quiet period before checking changes (default 1500)").action(run(async (o, cmd) => (await import("./watch-TEHFO47V.js")).watchCommand({ ...globals(cmd), ...o, signal: controller.signal })));
|
|
67
|
+
program.command("context <task>").description("Show which knowledge an agent should read for a task (deterministic)").option("--full", "Print the full context an agent would receive").option("--max-chars <n>", "Character budget for selected sections").action(run(async (task, o, cmd) => (await import("./context-G5YHY3L2.js")).contextCommand(task, { ...globals(cmd), ...o, signal: controller.signal })));
|
|
68
|
+
program.command("graph").description("Inspect the project graph (packages, files, routes, entities and their relationships)").option("--build", "Rebuild the graph from the current code").option("--node <id>", "Show one node and its relationships").option("--kind <kind>", "Filter by node kind (package, file, route, entity, framework, command, infra)").option("--search <term>", "Filter nodes by name or path").action(run(async (o, cmd) => (await import("./context-G5YHY3L2.js")).graphCommand({ ...globals(cmd), ...o, signal: controller.signal })));
|
|
69
|
+
program.command("architecture").description("Summarize the project graph").action(run(async (_o, cmd) => (await import("./context-G5YHY3L2.js")).architectureCommand({ ...globals(cmd), signal: controller.signal })));
|
|
70
|
+
program.command("mcp").description("Serve Athena project intelligence over MCP (stdio) for AI agents").option("--allow-write", "Permit the update_knowledge tool to apply changes (read-only by default)").option("--no-memory-write", "Disable the remember tool (agents cannot record unreviewed memories)").action(run(async (o, cmd) => (await import("./mcp-DWNWRGJW.js")).mcpCommand({ ...globals(cmd), ...o, signal: controller.signal })));
|
|
68
71
|
const ai = program.command("ai").description("Optional AI provider integration (never required)");
|
|
69
|
-
ai.command("status", { isDefault: true }).description("Show configured and available AI providers").action(run(async (_o, cmd) => (await import("./ai-
|
|
70
|
-
ai.command("enrich").description("Ask the configured provider for INFERRED suggestions based on your knowledge documents").option("--docs <list>", "Documents to send (default: project,architecture,database,api)").option("--consent", "Consent to sending redacted knowledge to a remote provider for this run").option("--dry-run", "Show exactly what would be sent, and send nothing").action(run(async (o, cmd) => (await import("./ai-
|
|
71
|
-
program.command("security").description("Scan dependencies with the audit tools installed for this project, and report secret findings").option("--no-audit", "Skip dependency audits (report secrets only)").option("--fail-on <severity>", "Exit 1 when a finding at or above this severity exists (critical, high, moderate, low)").option("--last", "Show the last scan instead of running a new one").option("--unrated <policy>", 'With --fail-on: "fail" (default) also fails on findings the tool did not rate (pip-audit, govulncheck); "warn" only reports them', "fail").action(run(async (o, cmd) => (await import("./security-
|
|
72
|
-
|
|
73
|
-
program.command("
|
|
74
|
-
|
|
72
|
+
ai.command("status", { isDefault: true }).description("Show configured and available AI providers").action(run(async (_o, cmd) => (await import("./ai-LGTLQKL4.js")).aiStatusCommand(globals(cmd))));
|
|
73
|
+
ai.command("enrich").description("Ask the configured provider for INFERRED suggestions based on your knowledge documents").option("--docs <list>", "Documents to send (default: project,architecture,database,api)").option("--consent", "Consent to sending redacted knowledge to a remote provider for this run").option("--dry-run", "Show exactly what would be sent, and send nothing").action(run(async (o, cmd) => (await import("./ai-LGTLQKL4.js")).aiEnrichCommand({ ...globals(cmd), ...o, signal: controller.signal })));
|
|
74
|
+
program.command("security").description("Scan dependencies with the audit tools installed for this project, and report secret findings").option("--no-audit", "Skip dependency audits (report secrets only)").option("--fail-on <severity>", "Exit 1 when a finding at or above this severity exists (critical, high, moderate, low)").option("--last", "Show the last scan instead of running a new one").option("--unrated <policy>", 'With --fail-on: "fail" (default) also fails on findings the tool did not rate (pip-audit, govulncheck); "warn" only reports them', "fail").action(run(async (o, cmd) => (await import("./security-JTJN3E7K.js")).securityCommand({ ...globals(cmd), noAudit: o.audit === false, failOn: o.failOn, unrated: o.unrated, last: o.last, signal: controller.signal })));
|
|
75
|
+
const scanCmds = () => import("./scan-JVKCVHPD.js");
|
|
76
|
+
program.command("scan").description("Scan for secrets, vulnerable dependencies and review issues; apply the policy, baseline and triage; evaluate the quality gate").option("--only <scanners>", "Comma-separated: secrets, deps, review (default: secrets,deps; plus review when scanning a change)").option("--base <ref>", "Scan the changes since this ref (merge-base..HEAD, like a pull request)").option("--staged", "Scan what is staged for commit").option("--changed", "Scan working-tree changes").option("-f, --format <format>", "text, json, markdown, github or sarif").option("-o, --output <file>", "Write the report to a file").option("--fail-on <severity>", "Override the gate threshold: critical, high, medium, low, info").option("--min-confidence <level>", "Override the gate confidence: high, medium, low").option("--unrated <policy>", "Override how unrated findings affect the gate: fail or warn").option("--no-baseline", "Ignore .athena/baseline.json (every finding counts as new)").option("--policy-from <ref>", "Use the policy, baseline and triage committed at this ref, and report changes to them (CI)").option("--offline", "Do not contact the network (dependency audits are skipped and reported as skipped)").option("--no-fail", "Always exit 0, even when the gate fails").option("--list-rules", "List the rules Athena knows and exit").action(run(
|
|
77
|
+
async (o, cmd) => (await scanCmds()).scanCommand({ ...globals(cmd), ...o, noBaseline: o.baseline === false, noFail: o.fail === false, signal: controller.signal })
|
|
78
|
+
));
|
|
79
|
+
program.command("explain <ruleId>").description("Explain a rule: what it detects, why it matters and what to do").action(run(async (ruleId, _o, cmd) => (await scanCmds()).explainCommand(ruleId, globals(cmd))));
|
|
80
|
+
const baseline = program.command("baseline").description("Record existing findings so only new ones fail the gate (.athena/baseline.json)");
|
|
81
|
+
baseline.command("show", { isDefault: true }).description("Summarize the baseline").action(run(async (_o, cmd) => (await scanCmds()).baselineShowCommand(globals(cmd))));
|
|
82
|
+
baseline.command("create").description("Scan the whole project and baseline every current finding").option("--reason <text>", "Why these findings are accepted for now").option("--last", "Use the last full scan instead of scanning again").option("--offline", "Do not contact the network").option("--force", "Add to an existing baseline").action(run(async (o, cmd) => (await scanCmds()).baselineCreateCommand({ ...globals(cmd), ...o, signal: controller.signal })));
|
|
83
|
+
baseline.command("update").description("Add findings that are not in the baseline yet").option("--reason <text>", "Why these findings are accepted for now").option("--last", "Use the last full scan instead of scanning again").option("--offline", "Do not contact the network").action(run(async (o, cmd) => (await scanCmds()).baselineCreateCommand({ ...globals(cmd), ...o, update: true, signal: controller.signal })));
|
|
84
|
+
baseline.command("prune").description("Remove entries a full scan no longer reports").option("--last", "Use the last full scan instead of scanning again").option("--offline", "Do not contact the network").action(run(async (o, cmd) => (await scanCmds()).baselinePruneCommand({ ...globals(cmd), ...o, signal: controller.signal })));
|
|
85
|
+
const findings = program.command("findings").description("Inspect and triage findings from the last scan");
|
|
86
|
+
findings.command("list", { isDefault: true }).description("List active findings with their fingerprints").option("--status <status>", "open, baselined, suppressed, excluded, triaged, or a triage decision such as to-review").option("--severity <severity>", "Only this severity").option("--category <category>", "Only this category").option("--all", "Include baselined, suppressed, triaged and excluded findings").action(run(async (o, cmd) => (await scanCmds()).findingsListCommand({ ...globals(cmd), ...o, signal: controller.signal })));
|
|
87
|
+
findings.command("show <fingerprint>").description("Show one finding (a fingerprint prefix of 6+ characters is enough)").action(run(async (fp, _o, cmd) => (await scanCmds()).findingsShowCommand(fp, { ...globals(cmd), signal: controller.signal })));
|
|
88
|
+
findings.command("triage <fingerprint> <status>").description('Record a review decision: safe, false-positive, accepted-risk, fixed, to-review (or "clear")').option("--reason <text>", "Why (required; committed in .athena/triage.json)").option("--by <name>", "Who decided").action(run(async (fp, status, o, cmd) => (await scanCmds()).findingsTriageCommand(fp, status, { ...globals(cmd), ...o, signal: controller.signal })));
|
|
89
|
+
program.command("review").description("Check the current diff for facts worth reviewing, and list the project rules and checklist").option("--base <ref>", "Compare against this Git ref instead of the working tree").option("--staged", "Review only what is staged for commit (used by the pre-commit hook)").option("--no-sync", "Skip the knowledge freshness check").option("--no-fail", "Always exit 0, even when blockers are found").action(run(async (o, cmd) => (await import("./review-VEJBPACX.js")).reviewCommand({ ...globals(cmd), base: o.base, staged: o.staged, noSync: o.sync === false, noFail: o.fail === false, signal: controller.signal })));
|
|
90
|
+
program.command("status").description("Show knowledge health and changes since the last analysis").action(run(async (_o, cmd) => (await import("./status-PO27BSOZ.js")).statusCommand({ ...globals(cmd), signal: controller.signal })));
|
|
91
|
+
program.command("doctor").description("Check the Athena installation, project and integrations").action(run(async (_o, cmd) => (await import("./doctor-L34QJ7WR.js")).doctorCommand(globals(cmd))));
|
|
75
92
|
const rules = program.command("rules").description("List and edit project rules (.athena/rules.md)");
|
|
76
|
-
rules.command("list", { isDefault: true }).description("List rules with their numbers").action(run(async (_o, cmd) => (await import("./rules-
|
|
77
|
-
rules.command("add <text>").description("Add a rule").option("-s, --section <name>", "Section heading", "General").action(run(async (text, o, cmd) => (await import("./rules-
|
|
78
|
-
rules.command("edit <number> <text>").description("Replace the text of a rule").action(run(async (n, text, _o, cmd) => (await import("./rules-
|
|
79
|
-
rules.command("enable <number>").description("Enable a rule").action(run(async (n, _o, cmd) => (await import("./rules-
|
|
80
|
-
rules.command("disable <number>").description("Disable a rule without deleting it").action(run(async (n, _o, cmd) => (await import("./rules-
|
|
81
|
-
rules.command("remove <number>").description("Delete a rule").action(run(async (n, _o, cmd) => (await import("./rules-
|
|
93
|
+
rules.command("list", { isDefault: true }).description("List rules with their numbers").action(run(async (_o, cmd) => (await import("./rules-M4DLLXBL.js")).rulesListCommand(globals(cmd))));
|
|
94
|
+
rules.command("add <text>").description("Add a rule").option("-s, --section <name>", "Section heading", "General").action(run(async (text, o, cmd) => (await import("./rules-M4DLLXBL.js")).rulesAddCommand(text, { ...globals(cmd), ...o })));
|
|
95
|
+
rules.command("edit <number> <text>").description("Replace the text of a rule").action(run(async (n, text, _o, cmd) => (await import("./rules-M4DLLXBL.js")).rulesEditCommand(n, text, globals(cmd))));
|
|
96
|
+
rules.command("enable <number>").description("Enable a rule").action(run(async (n, _o, cmd) => (await import("./rules-M4DLLXBL.js")).rulesEnableCommand(n, globals(cmd))));
|
|
97
|
+
rules.command("disable <number>").description("Disable a rule without deleting it").action(run(async (n, _o, cmd) => (await import("./rules-M4DLLXBL.js")).rulesDisableCommand(n, globals(cmd))));
|
|
98
|
+
rules.command("remove <number>").description("Delete a rule").action(run(async (n, _o, cmd) => (await import("./rules-M4DLLXBL.js")).rulesRemoveCommand(n, globals(cmd))));
|
|
99
|
+
const repeat = (value, prev = []) => [...prev, ...value.split(",").map((s) => s.trim()).filter(Boolean)];
|
|
100
|
+
const mem = () => import("./memory-XBZCYQLW.js");
|
|
101
|
+
const memory = program.command("memory").description("Record, review and recall project memory (.athena/memory/)");
|
|
102
|
+
memory.command("list", { isDefault: true }).description("List memory entries with their label (FACT/INFERRED), status and staleness").option("--kind <kind>", "Only this kind (decision, gotcha, bug, convention, todo, fact)").option("--status <status>", "Only this status (unreviewed, confirmed, superseded)").option("--stale", "Only entries whose linked files changed since").action(run(async (o, cmd) => (await mem()).memoryListCommand({ ...globals(cmd), ...o })));
|
|
103
|
+
memory.command("show <id>").description("Show one entry in full: files, tags, evidence, staleness, warnings").action(run(async (id, _o, cmd) => (await mem()).memoryShowCommand(id, globals(cmd))));
|
|
104
|
+
memory.command("add").description("Record a memory as the developer (confirmed, FACT)").option("--kind <kind>", "decision, gotcha, bug, convention, todo or fact").option("--title <title>", "One-line summary").option("--details <text>", 'Longer explanation ("-" reads it from stdin)').option("--file <path>", "Linked project file (repeatable); the entry goes stale when it changes", repeat).option("--tag <tag>", "Tag (repeatable)", repeat).option("--evidence <text>", "Where this was observed (commit, issue, test, log)").option("--supersedes <id>", "Older memory this one replaces").action(run(async (o, cmd) => (await mem()).memoryAddCommand({ ...globals(cmd), ...o })));
|
|
105
|
+
memory.command("search <query>").description("Find entries whose title, details, tags or files contain the text").action(run(async (q, _o, cmd) => (await mem()).memorySearchCommand(q, globals(cmd))));
|
|
106
|
+
memory.command("recall <task...>").description("Rank the memory relevant to a task (what an agent would be given), with reasons").option("--file <path>", "File you are about to work on (repeatable)", repeat).option("--tag <tag>", "Tag to match (repeatable)", repeat).option("-n, --limit <count>", "Maximum entries (default 8)").action(run(async (task, o, cmd) => (await mem()).memoryRecallCommand(task, { ...globals(cmd), ...o })));
|
|
107
|
+
memory.command("confirm <ids...>").description("Confirm entries as FACT (and re-anchor them to the current files)").action(run(async (ids, _o, cmd) => (await mem()).memoryConfirmCommand(ids, globals(cmd))));
|
|
108
|
+
memory.command("supersede <id>").description("Mark an entry as replaced by a newer one (kept as history)").option("--by <id>", "The newer memory").action(run(async (id, o, cmd) => (await mem()).memorySupersedeCommand(id, { ...globals(cmd), ...o })));
|
|
109
|
+
memory.command("forget <ids...>").description("Delete entries").option("-y, --yes", "Skip confirmation").action(run(async (ids, o, cmd) => (await mem()).memoryForgetCommand(ids, { ...globals(cmd), ...o })));
|
|
110
|
+
memory.command("edit <id>").description("Change an entry (fields you pass replace the old values)").option("--title <title>", "New title").option("--details <text>", 'New details ("-" reads them from stdin)').option("--file <path>", "Linked files (repeatable; replaces the list)", repeat).option("--tag <tag>", "Tags (repeatable; replaces the list)", repeat).option("--evidence <text>", "New evidence").action(run(async (id, o, cmd) => (await mem()).memoryEditCommand(id, { ...globals(cmd), ...o })));
|
|
111
|
+
memory.command("stale").description("Entries whose linked files changed since they were recorded or confirmed").action(run(async (_o, cmd) => (await mem()).memoryStaleCommand(globals(cmd))));
|
|
112
|
+
memory.command("review").description("Walk through unreviewed (agent-written) entries: confirm, forget or skip").action(run(async (_o, cmd) => (await mem()).memoryReviewCommand(globals(cmd))));
|
|
82
113
|
const agents = program.command("agents").description("Manage AI agent integrations");
|
|
83
|
-
agents.command("list", { isDefault: true }).description("Show supported agents and integration status").action(run(async (_o, cmd) => (await import("./agents-
|
|
84
|
-
agents.command("add <agents...>").description('Configure integrations (claude-code, cursor, codex, copilot, gemini-cli, antigravity, windsurf, cline, agents-md, or "all")').action(run(async (names, _o, cmd) => (await import("./agents-
|
|
85
|
-
agents.command("remove <agents...>").description("Remove Athena-managed integration files/blocks").action(run(async (names, _o, cmd) => (await import("./agents-
|
|
114
|
+
agents.command("list", { isDefault: true }).description("Show supported agents and integration status").action(run(async (_o, cmd) => (await import("./agents-HUJ4JXIB.js")).agentsListCommand(globals(cmd))));
|
|
115
|
+
agents.command("add <agents...>").description('Configure integrations (claude-code, cursor, codex, copilot, gemini-cli, antigravity, windsurf, cline, agents-md, or "all")').action(run(async (names, _o, cmd) => (await import("./agents-HUJ4JXIB.js")).agentsAddCommand(names, globals(cmd))));
|
|
116
|
+
agents.command("remove <agents...>").description("Remove Athena-managed integration files/blocks").action(run(async (names, _o, cmd) => (await import("./agents-HUJ4JXIB.js")).agentsRemoveCommand(names, globals(cmd))));
|
|
86
117
|
const gitHook = program.command("git-hook").description("Install a Git pre-commit hook that blocks commits when knowledge is out of date");
|
|
87
|
-
gitHook.command("status", { isDefault: true }).description("Show whether the Athena pre-commit hook is installed").action(run(async (_o, cmd) => (await import("./git-hook-
|
|
88
|
-
gitHook.command("install").description("Add the Athena pre-commit hook (existing hooks are kept; Athena adds a marked block)").option("--review", "Also run `athena review` and block commits with possible secrets or env files").action(run(async (o, cmd) => (await import("./git-hook-
|
|
89
|
-
gitHook.command("uninstall").description("Remove Athena's pre-commit hook or block").action(run(async (_o, cmd) => (await import("./git-hook-
|
|
90
|
-
program.command("open").description("Start (or reuse) the local web UI and open it in your browser").option("-p, --port <port>", "Port to bind (default: first free port from 7432)").option("--host <host>", "Interface to bind (default: 127.0.0.1)").option("--allow-remote", "Allow binding to a non-loopback interface").option("--no-open", "Do not launch a browser").option("--no-watch", "Do not watch the project for changes").action(run(async (o, cmd) => (await import("./open-
|
|
91
|
-
program.command("activity").description("Show AI agent activity observed through hooks").option("-n, --limit <count>", "Number of events to show (default 30)").option("--agent <id>", "Only show events from this agent").action(run(async (o, cmd) => (await import("./activity-
|
|
118
|
+
gitHook.command("status", { isDefault: true }).description("Show whether the Athena pre-commit hook is installed").action(run(async (_o, cmd) => (await import("./git-hook-Y7Y262F7.js")).gitHookStatusCommand(globals(cmd))));
|
|
119
|
+
gitHook.command("install").description("Add the Athena pre-commit hook (existing hooks are kept; Athena adds a marked block)").option("--review", "Also run `athena review` and block commits with possible secrets or env files").action(run(async (o, cmd) => (await import("./git-hook-Y7Y262F7.js")).gitHookInstallCommand({ ...globals(cmd), review: o.review })));
|
|
120
|
+
gitHook.command("uninstall").description("Remove Athena's pre-commit hook or block").action(run(async (_o, cmd) => (await import("./git-hook-Y7Y262F7.js")).gitHookUninstallCommand(globals(cmd))));
|
|
121
|
+
program.command("open").description("Start (or reuse) the local web UI and open it in your browser").option("-p, --port <port>", "Port to bind (default: first free port from 7432)").option("--host <host>", "Interface to bind (default: 127.0.0.1)").option("--allow-remote", "Allow binding to a non-loopback interface").option("--no-open", "Do not launch a browser").option("--no-watch", "Do not watch the project for changes").action(run(async (o, cmd) => (await import("./open-LJMOB6U2.js")).openCommand({ ...globals(cmd), ...o, signal: controller.signal })));
|
|
122
|
+
program.command("activity").description("Show AI agent activity observed through hooks").option("-n, --limit <count>", "Number of events to show (default 30)").option("--agent <id>", "Only show events from this agent").action(run(async (o, cmd) => (await import("./activity-XCHKBZTG.js")).activityCommand({ ...globals(cmd), ...o })));
|
|
92
123
|
program.command("event").description("Record an agent hook event (called by AI coding agents, reads JSON on stdin)").option("--agent <id>", "Agent that fired the hook").option("--hook <name>", "Hook event name").option("--athena-hook", "Marker used to identify Athena-managed hook entries").option("--verbose-errors", "Print errors to stderr (hooks stay silent by default)").action(
|
|
93
124
|
run(async (o, cmd) => {
|
|
94
125
|
const g = globals(cmd);
|
|
95
|
-
await (await import("./event-
|
|
126
|
+
await (await import("./event-6YW6TGFI.js")).eventCommand({ agent: o.agent, hook: o.hook, cwd: g.cwd, verbose: o.verboseErrors });
|
|
96
127
|
})
|
|
97
128
|
);
|
|
98
|
-
program.command("clean").description("Remove .athena/ and Athena agent integrations").option("-y, --yes", "Skip confirmation").option("--keep-agents", "Keep agent integration files/blocks").action(run(async (o, cmd) => (await import("./clean-
|
|
129
|
+
program.command("clean").description("Remove .athena/ and Athena agent integrations").option("-y, --yes", "Skip confirmation").option("--keep-agents", "Keep agent integration files/blocks").action(run(async (o, cmd) => (await import("./clean-LQOG56AM.js")).cleanCommand({ ...globals(cmd), ...o })));
|
|
99
130
|
program.command("version").description("Print the Athena version").action(run(async (_o, cmd) => {
|
|
100
131
|
if (globals(cmd).json) json({ version: ATHENA_VERSION, node: process.versions.node, platform: process.platform });
|
|
101
132
|
else line(ATHENA_VERSION);
|
|
@@ -145,4 +176,4 @@ export {
|
|
|
145
176
|
buildProgram,
|
|
146
177
|
main
|
|
147
178
|
};
|
|
148
|
-
//# sourceMappingURL=program-
|
|
179
|
+
//# sourceMappingURL=program-DCP526LU.js.map
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
import {
|
|
3
3
|
hasBlockers,
|
|
4
4
|
reviewChanges
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-C25FDXOO.js";
|
|
6
|
+
import "./chunk-Y6SDMZET.js";
|
|
6
7
|
import "./chunk-3IS2X2Z7.js";
|
|
7
8
|
import {
|
|
8
9
|
c,
|
|
@@ -22,18 +23,21 @@ import "./chunk-KBO7XRBW.js";
|
|
|
22
23
|
import {
|
|
23
24
|
planSync,
|
|
24
25
|
staleForCheck
|
|
25
|
-
} from "./chunk-
|
|
26
|
-
import "./chunk-
|
|
26
|
+
} from "./chunk-PZPMWCXS.js";
|
|
27
|
+
import "./chunk-GU3ZX2J7.js";
|
|
27
28
|
import "./chunk-GR4DL2VM.js";
|
|
28
|
-
import "./chunk-
|
|
29
|
-
import "./chunk-PANVPNYF.js";
|
|
30
|
-
import "./chunk-ELKFRTZT.js";
|
|
29
|
+
import "./chunk-4FETKOY3.js";
|
|
31
30
|
import "./chunk-2R6PXY6Z.js";
|
|
31
|
+
import "./chunk-44EGCEB2.js";
|
|
32
32
|
import "./chunk-PVCIGUIT.js";
|
|
33
|
-
import "./chunk-
|
|
34
|
-
import "./chunk-
|
|
35
|
-
import "./chunk-
|
|
33
|
+
import "./chunk-ELKFRTZT.js";
|
|
34
|
+
import "./chunk-AKOI4VTD.js";
|
|
35
|
+
import "./chunk-SVTEJYMS.js";
|
|
36
|
+
import "./chunk-QCC4VJUH.js";
|
|
37
|
+
import "./chunk-WWQ5NKEC.js";
|
|
38
|
+
import "./chunk-YRIS7ZS6.js";
|
|
36
39
|
import "./chunk-GHFRQAYT.js";
|
|
40
|
+
import "./chunk-INT3IGMQ.js";
|
|
37
41
|
import "./chunk-673EPYYH.js";
|
|
38
42
|
import "./chunk-FQEGEVLY.js";
|
|
39
43
|
import "./chunk-2DY4PUR4.js";
|
|
@@ -41,7 +45,6 @@ import "./chunk-IQQBAWSM.js";
|
|
|
41
45
|
import {
|
|
42
46
|
EXIT
|
|
43
47
|
} from "./chunk-AD4OZCU2.js";
|
|
44
|
-
import "./chunk-INT3IGMQ.js";
|
|
45
48
|
import "./chunk-XW3MLHI2.js";
|
|
46
49
|
import "./chunk-EUPETUWA.js";
|
|
47
50
|
|
|
@@ -112,4 +115,4 @@ ${blockers} blocker${blockers === 1 ? "" : "s"} found.`));
|
|
|
112
115
|
export {
|
|
113
116
|
reviewCommand
|
|
114
117
|
};
|
|
115
|
-
//# sourceMappingURL=review-
|
|
118
|
+
//# sourceMappingURL=review-VEJBPACX.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
getRules,
|
|
4
4
|
mutateRules
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-56EXAGTM.js";
|
|
6
6
|
import {
|
|
7
7
|
addRule,
|
|
8
8
|
removeRule,
|
|
@@ -20,8 +20,8 @@ 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-AKOI4VTD.js";
|
|
24
|
+
import "./chunk-WWQ5NKEC.js";
|
|
25
25
|
import "./chunk-673EPYYH.js";
|
|
26
26
|
import "./chunk-FQEGEVLY.js";
|
|
27
27
|
import "./chunk-2DY4PUR4.js";
|
|
@@ -80,4 +80,4 @@ export {
|
|
|
80
80
|
rulesListCommand,
|
|
81
81
|
rulesRemoveCommand
|
|
82
82
|
};
|
|
83
|
-
//# sourceMappingURL=rules-
|
|
83
|
+
//# sourceMappingURL=rules-M4DLLXBL.js.map
|