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
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  committedAiWarning
4
- } from "./chunk-RXNRMIZP.js";
4
+ } from "./chunk-WUIC65QO.js";
5
5
  import {
6
6
  whichExecutable
7
- } from "./chunk-VSYBC3VY.js";
7
+ } from "./chunk-UMWX4UTK.js";
8
+ import {
9
+ readRecentEvents
10
+ } from "./chunk-P4TRQMES.js";
8
11
  import {
9
12
  listRules,
10
13
  parseRules
11
14
  } from "./chunk-3IS2X2Z7.js";
12
- import {
13
- readRecentEvents
14
- } from "./chunk-65TSRDQ3.js";
15
15
  import {
16
16
  findProjectRoot
17
17
  } from "./chunk-KBO7XRBW.js";
@@ -21,10 +21,10 @@ import {
21
21
  import {
22
22
  gitAvailable,
23
23
  isGitRepo
24
- } from "./chunk-OLPSEQS5.js";
24
+ } from "./chunk-AKOI4VTD.js";
25
25
  import {
26
26
  ADAPTERS
27
- } from "./chunk-2RS6TA3D.js";
27
+ } from "./chunk-YRIS7ZS6.js";
28
28
  import {
29
29
  hookCommand
30
30
  } from "./chunk-GHFRQAYT.js";
@@ -176,4 +176,4 @@ export {
176
176
  findRunningInstance,
177
177
  runDoctor
178
178
  };
179
- //# sourceMappingURL=chunk-PR53DT7I.js.map
179
+ //# sourceMappingURL=chunk-L2EHJCH4.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  redact
4
- } from "./chunk-JCGDR4UV.js";
4
+ } from "./chunk-WWQ5NKEC.js";
5
5
  import {
6
6
  toPosix
7
7
  } from "./chunk-XW3MLHI2.js";
@@ -121,4 +121,4 @@ export {
121
121
  readRecentEvents,
122
122
  summarizeSessions
123
123
  };
124
- //# sourceMappingURL=chunk-65TSRDQ3.js.map
124
+ //# sourceMappingURL=chunk-P4TRQMES.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  projectSession
4
- } from "./chunk-PDFQ5BFG.js";
4
+ } from "./chunk-GU3ZX2J7.js";
5
5
  import {
6
6
  impactOf
7
7
  } from "./chunk-GR4DL2VM.js";
@@ -11,13 +11,13 @@ import {
11
11
  indexWithIntegrations,
12
12
  planKnowledge,
13
13
  writePlannedKnowledge
14
- } from "./chunk-SJOOXO34.js";
14
+ } from "./chunk-4FETKOY3.js";
15
15
  import {
16
16
  analyzeProject
17
- } from "./chunk-PANVPNYF.js";
17
+ } from "./chunk-44EGCEB2.js";
18
18
  import {
19
19
  headMovement
20
- } from "./chunk-OLPSEQS5.js";
20
+ } from "./chunk-AKOI4VTD.js";
21
21
  import {
22
22
  KNOWLEDGE_DOCS
23
23
  } from "./chunk-FQEGEVLY.js";
@@ -396,4 +396,4 @@ export {
396
396
  HISTORY_SECTIONS,
397
397
  staleForCheck
398
398
  };
399
- //# sourceMappingURL=chunk-TGJUUB44.js.map
399
+ //# sourceMappingURL=chunk-PZPMWCXS.js.map
@@ -0,0 +1,217 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/core/model/project-model.ts
4
+ import { z as z2 } from "zod";
5
+
6
+ // src/core/model/fact.ts
7
+ import { z } from "zod";
8
+ var FactStatus = z.enum(["FACT", "DETECTED", "INFERRED", "UNKNOWN"]);
9
+ var Confidence = z.enum(["high", "medium", "low"]);
10
+ var FactSource = z.enum(["code", "config", "filesystem", "git", "developer", "ai"]);
11
+ var Evidence = z.object({
12
+ /** Repo-relative POSIX path. */
13
+ file: z.string(),
14
+ line: z.number().int().positive().optional(),
15
+ detail: z.string().optional()
16
+ });
17
+ var Provenance = z.object({
18
+ status: FactStatus,
19
+ confidence: Confidence,
20
+ source: FactSource,
21
+ evidence: z.array(Evidence)
22
+ });
23
+ function detected(source, evidence, confidence = "high") {
24
+ return { status: "DETECTED", confidence, source, evidence };
25
+ }
26
+ function inferred(source, evidence, confidence = "medium") {
27
+ return { status: "INFERRED", confidence, source, evidence };
28
+ }
29
+ function fact(source, evidence) {
30
+ return { status: "FACT", confidence: "high", source, evidence };
31
+ }
32
+
33
+ // src/core/model/project-model.ts
34
+ var Named = z2.object({ name: z2.string(), provenance: Provenance });
35
+ var Language = z2.object({
36
+ name: z2.string(),
37
+ files: z2.number().int(),
38
+ bytes: z2.number().int()
39
+ });
40
+ var Framework = Named.extend({
41
+ category: z2.enum(["frontend", "backend", "fullstack", "mobile", "desktop", "orm", "testing", "other"]),
42
+ version: z2.string().optional(),
43
+ /** Workspace package root (repo-relative) this belongs to; "." for root. */
44
+ root: z2.string()
45
+ });
46
+ var Manifest = z2.object({
47
+ path: z2.string(),
48
+ ecosystem: z2.string(),
49
+ name: z2.string().optional(),
50
+ version: z2.string().optional(),
51
+ dependencies: z2.array(z2.string()),
52
+ devDependencies: z2.array(z2.string())
53
+ });
54
+ var WorkspacePackage = z2.object({
55
+ name: z2.string(),
56
+ path: z2.string(),
57
+ kind: z2.enum(["app", "package", "root", "unknown"]),
58
+ ecosystem: z2.string(),
59
+ /** Names of other workspace packages this one depends on. */
60
+ internalDependencies: z2.array(z2.string())
61
+ });
62
+ var Command = z2.object({
63
+ name: z2.string(),
64
+ command: z2.string(),
65
+ source: z2.string(),
66
+ purpose: z2.enum(["dev", "build", "test", "lint", "format", "start", "migrate", "deploy", "other"])
67
+ });
68
+ var Route = z2.object({
69
+ method: z2.string(),
70
+ path: z2.string(),
71
+ framework: z2.string(),
72
+ file: z2.string(),
73
+ line: z2.number().int().optional(),
74
+ provenance: Provenance
75
+ });
76
+ var DbEntity = z2.object({
77
+ name: z2.string(),
78
+ kind: z2.enum(["table", "model", "collection"]),
79
+ fields: z2.array(z2.object({ name: z2.string(), type: z2.string().optional(), attributes: z2.array(z2.string()) })),
80
+ indexes: z2.array(z2.string()),
81
+ relations: z2.array(z2.string()),
82
+ file: z2.string(),
83
+ provenance: Provenance
84
+ });
85
+ var Database = Named.extend({ kind: z2.enum(["engine", "orm", "driver", "service"]) });
86
+ var EnvVar = z2.object({
87
+ name: z2.string(),
88
+ /** Where the name was seen. Values are NEVER recorded. */
89
+ references: z2.array(z2.string()),
90
+ secretLike: z2.boolean()
91
+ });
92
+ var SecretFinding = z2.object({
93
+ type: z2.string(),
94
+ file: z2.string(),
95
+ line: z2.number().int(),
96
+ /**
97
+ * Keyed fingerprint (HMAC with the machine-local salt in .athena/local.json, or a
98
+ * per-process key) — allows dedup without storing the secret. Never a plain hash
99
+ * of the value, and never written to committed files.
100
+ */
101
+ fingerprint: z2.string()
102
+ });
103
+ var CiJob = z2.object({ system: z2.string(), file: z2.string(), name: z2.string(), commands: z2.array(z2.string()) });
104
+ var ContainerService = z2.object({
105
+ name: z2.string(),
106
+ image: z2.string().optional(),
107
+ ports: z2.array(z2.string()),
108
+ dependsOn: z2.array(z2.string()),
109
+ file: z2.string()
110
+ });
111
+ var TestInfo = z2.object({
112
+ frameworks: z2.array(Named),
113
+ testFileCount: z2.number().int(),
114
+ testDirs: z2.array(z2.string()),
115
+ coverageConfigs: z2.array(z2.string()),
116
+ /** Workspace packages that contain source files but zero detected test files (structural, not coverage). */
117
+ packagesWithoutTests: z2.array(z2.string())
118
+ });
119
+ var GitInfo = z2.object({
120
+ available: z2.boolean(),
121
+ isRepo: z2.boolean(),
122
+ branch: z2.string().optional(),
123
+ head: z2.string().optional(),
124
+ lastCommitDate: z2.string().optional(),
125
+ contributorCount: z2.number().int().optional(),
126
+ hotspots: z2.array(z2.object({ path: z2.string(), commits: z2.number().int() }))
127
+ });
128
+ var ProjectModel = z2.object({
129
+ schemaVersion: z2.literal(1),
130
+ name: z2.string(),
131
+ description: z2.string().optional(),
132
+ root: z2.string(),
133
+ stats: z2.object({
134
+ filesScanned: z2.number().int(),
135
+ skippedBinary: z2.number().int(),
136
+ skippedLarge: z2.number().int(),
137
+ skippedUnreadable: z2.number().int()
138
+ }),
139
+ topLevelDirs: z2.array(z2.string()),
140
+ languages: z2.array(Language),
141
+ manifests: z2.array(Manifest),
142
+ packageManagers: z2.array(Named),
143
+ buildSystems: z2.array(Named),
144
+ workspace: z2.object({
145
+ isMonorepo: z2.boolean(),
146
+ tool: z2.string().optional(),
147
+ packages: z2.array(WorkspacePackage)
148
+ }),
149
+ frameworks: z2.array(Framework),
150
+ entryPoints: z2.array(z2.object({ path: z2.string(), provenance: Provenance })),
151
+ commands: z2.array(Command),
152
+ databases: z2.array(Database),
153
+ dbEntities: z2.array(DbEntity),
154
+ migrations: z2.array(z2.object({ path: z2.string(), tool: z2.string(), count: z2.number().int() })),
155
+ routes: z2.array(Route),
156
+ apiSpecs: z2.array(z2.object({ path: z2.string(), kind: z2.enum(["openapi", "graphql", "grpc"]) })),
157
+ auth: z2.array(Named.extend({ kind: z2.enum(["library", "provider", "hashing", "middleware", "token"]) })),
158
+ containers: z2.object({ dockerfiles: z2.array(z2.object({ path: z2.string(), baseImages: z2.array(z2.string()), exposedPorts: z2.array(z2.string()) })), services: z2.array(ContainerService) }),
159
+ infrastructure: z2.array(Named.extend({ kind: z2.string(), file: z2.string() })),
160
+ ci: z2.array(CiJob),
161
+ tests: TestInfo,
162
+ env: z2.object({ vars: z2.array(EnvVar), envFilesPresent: z2.array(z2.string()) }),
163
+ security: z2.object({
164
+ secrets: z2.array(SecretFinding),
165
+ tooling: z2.array(Named),
166
+ /** Libraries/middleware relevant to web security controls (helmet, cors, csrf...). */
167
+ controls: z2.array(Named)
168
+ }),
169
+ caching: z2.array(Named),
170
+ queues: z2.array(Named),
171
+ observability: z2.array(Named),
172
+ git: GitInfo,
173
+ warnings: z2.array(z2.string())
174
+ });
175
+ function emptyModel(name, root) {
176
+ return {
177
+ schemaVersion: 1,
178
+ name,
179
+ root,
180
+ stats: { filesScanned: 0, skippedBinary: 0, skippedLarge: 0, skippedUnreadable: 0 },
181
+ topLevelDirs: [],
182
+ languages: [],
183
+ manifests: [],
184
+ packageManagers: [],
185
+ buildSystems: [],
186
+ workspace: { isMonorepo: false, packages: [] },
187
+ frameworks: [],
188
+ entryPoints: [],
189
+ commands: [],
190
+ databases: [],
191
+ dbEntities: [],
192
+ migrations: [],
193
+ routes: [],
194
+ apiSpecs: [],
195
+ auth: [],
196
+ containers: { dockerfiles: [], services: [] },
197
+ infrastructure: [],
198
+ ci: [],
199
+ tests: { frameworks: [], testFileCount: 0, testDirs: [], coverageConfigs: [], packagesWithoutTests: [] },
200
+ env: { vars: [], envFilesPresent: [] },
201
+ security: { secrets: [], tooling: [], controls: [] },
202
+ caching: [],
203
+ queues: [],
204
+ observability: [],
205
+ git: { available: false, isRepo: false, hotspots: [] },
206
+ warnings: []
207
+ };
208
+ }
209
+
210
+ export {
211
+ detected,
212
+ inferred,
213
+ fact,
214
+ ProjectModel,
215
+ emptyModel
216
+ };
217
+ //# sourceMappingURL=chunk-QCC4VJUH.js.map
@@ -33,11 +33,11 @@ import {
33
33
  } from "./chunk-XFN7UZCS.js";
34
34
  import {
35
35
  runPipeline
36
- } from "./chunk-SJOOXO34.js";
36
+ } from "./chunk-4FETKOY3.js";
37
37
  import {
38
38
  ADAPTERS,
39
39
  resolveAdapters
40
- } from "./chunk-2RS6TA3D.js";
40
+ } from "./chunk-YRIS7ZS6.js";
41
41
  import {
42
42
  KNOWLEDGE_DOCS
43
43
  } from "./chunk-FQEGEVLY.js";
@@ -433,4 +433,4 @@ export {
433
433
  printSummary,
434
434
  summarize
435
435
  };
436
- //# sourceMappingURL=chunk-DOQMAZL5.js.map
436
+ //# sourceMappingURL=chunk-R5AX7VST.js.map
@@ -2,12 +2,12 @@
2
2
  import {
3
3
  readRecentEvents,
4
4
  summarizeSessions
5
- } from "./chunk-65TSRDQ3.js";
5
+ } from "./chunk-P4TRQMES.js";
6
6
  import {
7
7
  ADAPTERS,
8
8
  applyChanges,
9
9
  resolveAdapters
10
- } from "./chunk-2RS6TA3D.js";
10
+ } from "./chunk-YRIS7ZS6.js";
11
11
  import {
12
12
  athenaDir,
13
13
  readState,
@@ -92,4 +92,4 @@ export {
92
92
  configureAgents,
93
93
  removeAgents
94
94
  };
95
- //# sourceMappingURL=chunk-JY6BFIJJ.js.map
95
+ //# sourceMappingURL=chunk-RQKGT2EK.js.map
@@ -1,20 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- ProjectModel,
4
- SCAN_FILE,
5
- SecurityScan
6
- } from "./chunk-PANVPNYF.js";
7
- import {
8
- athenaDir,
9
- readState
3
+ athenaDir
10
4
  } from "./chunk-2DY4PUR4.js";
11
5
  import {
12
6
  readTextIfExists,
13
7
  writeFileAtomic
14
8
  } from "./chunk-IQQBAWSM.js";
15
- import {
16
- AthenaError
17
- } from "./chunk-AD4OZCU2.js";
18
9
  import {
19
10
  toPosix
20
11
  } from "./chunk-XW3MLHI2.js";
@@ -224,155 +215,13 @@ function expandFromFiles(graph, files, depth = 1, limit = 40) {
224
215
  return [...seen].map((id) => byId.get(id)).filter((n) => Boolean(n)).slice(0, limit);
225
216
  }
226
217
 
227
- // src/services/project-session.ts
228
- import { promises as fs } from "fs";
229
- import path2 from "path";
230
- var fileKey = (st) => `${st.ino}:${st.size}:${st.mtimeNs}`;
231
- var ProjectSession = class {
232
- constructor(root) {
233
- this.root = root;
234
- }
235
- root;
236
- cache = /* @__PURE__ */ new Map();
237
- inflight = /* @__PURE__ */ new Map();
238
- stateEntry = null;
239
- get dir() {
240
- return athenaDir(this.root);
241
- }
242
- /** model.json, or why it can't be used. */
243
- readModel() {
244
- return this.read("model.json", ProjectModel);
245
- }
246
- /** The parsed model, or null when missing or unusable. */
247
- async model() {
248
- const r = await this.readModel();
249
- return r.kind === "ok" ? r.value : null;
250
- }
251
- /** The parsed model; throws an AthenaError with a hint when it is missing or corrupted. */
252
- async requireModel() {
253
- const r = await this.readModel();
254
- if (r.kind === "ok") return r.value;
255
- if (r.kind === "missing") throw new AthenaError("model.json is missing.", "Run `athena analyze` (or re-analyze from the overview) first.");
256
- throw new AthenaError(`model.json is corrupted (${r.reason}).`, "Run `athena analyze` to rebuild it.");
257
- }
258
- /** Cheap existence check (a stat, no parsing). */
259
- async hasModel() {
260
- return this.exists("model.json");
261
- }
262
- readGraph() {
263
- return this.read(GRAPH_FILE, ProjectGraph);
264
- }
265
- async graph() {
266
- const r = await this.readGraph();
267
- return r.kind === "ok" ? r.value : null;
268
- }
269
- readScan() {
270
- return this.read(SCAN_FILE, SecurityScan);
271
- }
272
- async scan() {
273
- const r = await this.readScan();
274
- return r.kind === "ok" ? r.value : null;
275
- }
276
- /** state.json via `readState`, memoized like the other artifacts. */
277
- async state() {
278
- const file = path2.join(this.dir, "state.json");
279
- const st = await fs.stat(file, { bigint: true }).catch(() => null);
280
- if (!st) return readState(this.dir);
281
- const key = fileKey(st);
282
- if (this.stateEntry?.key === key) return this.stateEntry.state;
283
- const state = await readState(this.dir);
284
- const after = await fs.stat(file, { bigint: true }).catch(() => null);
285
- if (after && fileKey(after) === key) this.stateEntry = { key, state };
286
- return state;
287
- }
288
- /**
289
- * Record a value this process just wrote to `.athena/<name>`, so the next
290
- * read doesn't parse it again. The file must already be on disk.
291
- */
292
- async remember(name, value) {
293
- const st = await fs.stat(path2.join(this.dir, name), { bigint: true }).catch(() => null);
294
- if (st) this.cache.set(name, { key: fileKey(st), result: { kind: "ok", value } });
295
- else this.cache.delete(name);
296
- }
297
- /** Drop memoized results (all, or one file). */
298
- invalidate(name) {
299
- if (!name || name === "state.json") this.stateEntry = null;
300
- if (name) this.cache.delete(name);
301
- else this.cache.clear();
302
- }
303
- async exists(name) {
304
- const st = await fs.stat(path2.join(this.dir, name)).catch(() => null);
305
- return Boolean(st?.isFile());
306
- }
307
- read(name, schema) {
308
- const running = this.inflight.get(name);
309
- if (running) return running;
310
- const p = this.load(name, schema).finally(() => this.inflight.delete(name));
311
- this.inflight.set(name, p);
312
- return p;
313
- }
314
- async load(name, schema) {
315
- const file = path2.join(this.dir, name);
316
- let st;
317
- try {
318
- st = await fs.stat(file, { bigint: true });
319
- } catch (err) {
320
- const code = err.code;
321
- this.cache.delete(name);
322
- if (code === "ENOENT" || code === "ENOTDIR") return { kind: "missing" };
323
- return { kind: "corrupted", reason: `unreadable (${code})` };
324
- }
325
- const key = fileKey(st);
326
- const hit = this.cache.get(name);
327
- if (hit?.key === key) return hit.result;
328
- let raw;
329
- try {
330
- raw = await fs.readFile(file, "utf8");
331
- } catch (err) {
332
- const code = err.code;
333
- if (code === "ENOENT") return { kind: "missing" };
334
- return { kind: "corrupted", reason: `unreadable (${code})` };
335
- }
336
- const result = parseArtifact(raw, schema);
337
- const after = await fs.stat(file, { bigint: true }).catch(() => null);
338
- if (after && fileKey(after) === key) this.cache.set(name, { key, result });
339
- return result;
340
- }
341
- };
342
- function parseArtifact(raw, schema) {
343
- let json;
344
- try {
345
- json = JSON.parse(raw);
346
- } catch {
347
- return { kind: "corrupted", reason: "invalid JSON" };
348
- }
349
- const parsed = schema.safeParse(json);
350
- if (parsed.success) return { kind: "ok", value: parsed.data };
351
- const issue = parsed.error.issues[0];
352
- return { kind: "corrupted", reason: `schema mismatch at ${issue?.path.map(String).join(".") || "(root)"}: ${issue?.message}` };
353
- }
354
- var sessions = /* @__PURE__ */ new Map();
355
- function projectSession(root) {
356
- const key = path2.resolve(root);
357
- let s = sessions.get(key);
358
- if (!s) {
359
- s = new ProjectSession(key);
360
- sessions.set(key, s);
361
- }
362
- return s;
363
- }
364
- function releaseProjectSession(root) {
365
- sessions.delete(path2.resolve(root));
366
- }
367
-
368
218
  export {
219
+ ProjectGraph,
369
220
  GRAPH_FILE,
370
221
  buildGraph,
371
222
  saveGraph,
372
223
  loadGraph,
373
224
  neighbors,
374
- expandFromFiles,
375
- projectSession,
376
- releaseProjectSession
225
+ expandFromFiles
377
226
  };
378
- //# sourceMappingURL=chunk-PDFQ5BFG.js.map
227
+ //# sourceMappingURL=chunk-SVTEJYMS.js.map
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- // src/services/which.ts
3
+ // src/core/util/which.ts
4
4
  import { promises as fs } from "fs";
5
5
  import path from "path";
6
6
  async function whichExecutable(command) {
@@ -25,4 +25,4 @@ async function whichExecutable(command) {
25
25
  export {
26
26
  whichExecutable
27
27
  };
28
- //# sourceMappingURL=chunk-VSYBC3VY.js.map
28
+ //# sourceMappingURL=chunk-UMWX4UTK.js.map
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  redact,
7
7
  scanText
8
- } from "./chunk-JCGDR4UV.js";
8
+ } from "./chunk-WWQ5NKEC.js";
9
9
  import {
10
10
  KNOWLEDGE_DOCS
11
11
  } from "./chunk-FQEGEVLY.js";
@@ -387,4 +387,4 @@ export {
387
387
  buildEnrichPayload,
388
388
  enrich
389
389
  };
390
- //# sourceMappingURL=chunk-RXNRMIZP.js.map
390
+ //# sourceMappingURL=chunk-WUIC65QO.js.map
@@ -174,9 +174,11 @@ function isSecretLikeName(name) {
174
174
  }
175
175
 
176
176
  export {
177
+ MAX_GENERIC_LINE,
178
+ SECRET_PATTERNS,
177
179
  ephemeralFingerprint,
178
180
  scanText,
179
181
  redact,
180
182
  isSecretLikeName
181
183
  };
182
- //# sourceMappingURL=chunk-JCGDR4UV.js.map
184
+ //# sourceMappingURL=chunk-WWQ5NKEC.js.map
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  planSnapshot,
4
4
  planSync
5
- } from "./chunk-TGJUUB44.js";
5
+ } from "./chunk-PZPMWCXS.js";
6
6
 
7
7
  // src/services/scheduler.ts
8
8
  var DEFAULT_FULL_WALK_EVERY_MS = 5 * 6e4;
@@ -179,4 +179,4 @@ var AnalysisScheduler = class {
179
179
  export {
180
180
  AnalysisScheduler
181
181
  };
182
- //# sourceMappingURL=chunk-XB66PZ6Z.js.map
182
+ //# sourceMappingURL=chunk-X7EYOAEX.js.map