dravix-agent 0.1.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 (208) hide show
  1. package/.claude/settings.example.json +30 -0
  2. package/ARCHITECTURE.md +410 -0
  3. package/LICENSE +21 -0
  4. package/README.md +153 -0
  5. package/ROADMAP.md +117 -0
  6. package/data/vulnkb.json +666 -0
  7. package/dist/bin/aegis.d.ts +3 -0
  8. package/dist/bin/aegis.d.ts.map +1 -0
  9. package/dist/bin/aegis.js +489 -0
  10. package/dist/bin/aegis.js.map +1 -0
  11. package/dist/cache.d.ts +9 -0
  12. package/dist/cache.d.ts.map +1 -0
  13. package/dist/cache.js +146 -0
  14. package/dist/cache.js.map +1 -0
  15. package/dist/engines/ai-sinks.d.ts +52 -0
  16. package/dist/engines/ai-sinks.d.ts.map +1 -0
  17. package/dist/engines/ai-sinks.js +204 -0
  18. package/dist/engines/ai-sinks.js.map +1 -0
  19. package/dist/engines/eslint.d.ts +9 -0
  20. package/dist/engines/eslint.d.ts.map +1 -0
  21. package/dist/engines/eslint.js +245 -0
  22. package/dist/engines/eslint.js.map +1 -0
  23. package/dist/engines/joern.d.ts +3 -0
  24. package/dist/engines/joern.d.ts.map +1 -0
  25. package/dist/engines/joern.js +98 -0
  26. package/dist/engines/joern.js.map +1 -0
  27. package/dist/engines/js-sinks.d.ts +70 -0
  28. package/dist/engines/js-sinks.d.ts.map +1 -0
  29. package/dist/engines/js-sinks.js +370 -0
  30. package/dist/engines/js-sinks.js.map +1 -0
  31. package/dist/engines/llm-critic.d.ts +130 -0
  32. package/dist/engines/llm-critic.d.ts.map +1 -0
  33. package/dist/engines/llm-critic.js +551 -0
  34. package/dist/engines/llm-critic.js.map +1 -0
  35. package/dist/engines/pragma.d.ts +20 -0
  36. package/dist/engines/pragma.d.ts.map +1 -0
  37. package/dist/engines/pragma.js +83 -0
  38. package/dist/engines/pragma.js.map +1 -0
  39. package/dist/engines/property-test.d.ts +3 -0
  40. package/dist/engines/property-test.d.ts.map +1 -0
  41. package/dist/engines/property-test.js +134 -0
  42. package/dist/engines/property-test.js.map +1 -0
  43. package/dist/engines/pyright.d.ts +10 -0
  44. package/dist/engines/pyright.d.ts.map +1 -0
  45. package/dist/engines/pyright.js +143 -0
  46. package/dist/engines/pyright.js.map +1 -0
  47. package/dist/engines/pysa.d.ts +3 -0
  48. package/dist/engines/pysa.d.ts.map +1 -0
  49. package/dist/engines/pysa.js +83 -0
  50. package/dist/engines/pysa.js.map +1 -0
  51. package/dist/engines/python-sinks.d.ts +82 -0
  52. package/dist/engines/python-sinks.d.ts.map +1 -0
  53. package/dist/engines/python-sinks.js +459 -0
  54. package/dist/engines/python-sinks.js.map +1 -0
  55. package/dist/engines/registry.d.ts +26 -0
  56. package/dist/engines/registry.d.ts.map +1 -0
  57. package/dist/engines/registry.js +70 -0
  58. package/dist/engines/registry.js.map +1 -0
  59. package/dist/engines/secret-scan.d.ts +22 -0
  60. package/dist/engines/secret-scan.d.ts.map +1 -0
  61. package/dist/engines/secret-scan.js +179 -0
  62. package/dist/engines/secret-scan.js.map +1 -0
  63. package/dist/engines/semgrep.d.ts +10 -0
  64. package/dist/engines/semgrep.d.ts.map +1 -0
  65. package/dist/engines/semgrep.js +200 -0
  66. package/dist/engines/semgrep.js.map +1 -0
  67. package/dist/engines/treesitter.d.ts +18 -0
  68. package/dist/engines/treesitter.d.ts.map +1 -0
  69. package/dist/engines/treesitter.js +135 -0
  70. package/dist/engines/treesitter.js.map +1 -0
  71. package/dist/engines/tsc.d.ts +10 -0
  72. package/dist/engines/tsc.d.ts.map +1 -0
  73. package/dist/engines/tsc.js +142 -0
  74. package/dist/engines/tsc.js.map +1 -0
  75. package/dist/engines/types.d.ts +47 -0
  76. package/dist/engines/types.d.ts.map +1 -0
  77. package/dist/engines/types.js +27 -0
  78. package/dist/engines/types.js.map +1 -0
  79. package/dist/findings.d.ts +121 -0
  80. package/dist/findings.d.ts.map +1 -0
  81. package/dist/findings.js +98 -0
  82. package/dist/findings.js.map +1 -0
  83. package/dist/hooks/claude-code.d.ts +3 -0
  84. package/dist/hooks/claude-code.d.ts.map +1 -0
  85. package/dist/hooks/claude-code.js +187 -0
  86. package/dist/hooks/claude-code.js.map +1 -0
  87. package/dist/index/context.d.ts +127 -0
  88. package/dist/index/context.d.ts.map +1 -0
  89. package/dist/index/context.js +267 -0
  90. package/dist/index/context.js.map +1 -0
  91. package/dist/index/embeddings.d.ts +68 -0
  92. package/dist/index/embeddings.d.ts.map +1 -0
  93. package/dist/index/embeddings.js +570 -0
  94. package/dist/index/embeddings.js.map +1 -0
  95. package/dist/index/graph_routing.d.ts +36 -0
  96. package/dist/index/graph_routing.d.ts.map +1 -0
  97. package/dist/index/graph_routing.js +170 -0
  98. package/dist/index/graph_routing.js.map +1 -0
  99. package/dist/index/joern.d.ts +76 -0
  100. package/dist/index/joern.d.ts.map +1 -0
  101. package/dist/index/joern.js +782 -0
  102. package/dist/index/joern.js.map +1 -0
  103. package/dist/index/property-test.d.ts +88 -0
  104. package/dist/index/property-test.d.ts.map +1 -0
  105. package/dist/index/property-test.js +466 -0
  106. package/dist/index/property-test.js.map +1 -0
  107. package/dist/index/proto/scip.proto +897 -0
  108. package/dist/index/pysa.d.ts +91 -0
  109. package/dist/index/pysa.d.ts.map +1 -0
  110. package/dist/index/pysa.js +617 -0
  111. package/dist/index/pysa.js.map +1 -0
  112. package/dist/index/scip.d.ts +76 -0
  113. package/dist/index/scip.d.ts.map +1 -0
  114. package/dist/index/scip.js +541 -0
  115. package/dist/index/scip.js.map +1 -0
  116. package/dist/index/vulrag.d.ts +86 -0
  117. package/dist/index/vulrag.d.ts.map +1 -0
  118. package/dist/index/vulrag.js +242 -0
  119. package/dist/index/vulrag.js.map +1 -0
  120. package/dist/index.d.ts +9 -0
  121. package/dist/index.d.ts.map +1 -0
  122. package/dist/index.js +8 -0
  123. package/dist/index.js.map +1 -0
  124. package/dist/install/claude-code.d.ts +31 -0
  125. package/dist/install/claude-code.d.ts.map +1 -0
  126. package/dist/install/claude-code.js +447 -0
  127. package/dist/install/claude-code.js.map +1 -0
  128. package/dist/lang.d.ts +5 -0
  129. package/dist/lang.d.ts.map +1 -0
  130. package/dist/lang.js +52 -0
  131. package/dist/lang.js.map +1 -0
  132. package/dist/learning/suppressions.d.ts +70 -0
  133. package/dist/learning/suppressions.d.ts.map +1 -0
  134. package/dist/learning/suppressions.js +179 -0
  135. package/dist/learning/suppressions.js.map +1 -0
  136. package/dist/mcp/server.d.ts +2 -0
  137. package/dist/mcp/server.d.ts.map +1 -0
  138. package/dist/mcp/server.js +187 -0
  139. package/dist/mcp/server.js.map +1 -0
  140. package/dist/mcp/tools/explain.d.ts +58 -0
  141. package/dist/mcp/tools/explain.d.ts.map +1 -0
  142. package/dist/mcp/tools/explain.js +60 -0
  143. package/dist/mcp/tools/explain.js.map +1 -0
  144. package/dist/mcp/tools/precheck.d.ts +29 -0
  145. package/dist/mcp/tools/precheck.d.ts.map +1 -0
  146. package/dist/mcp/tools/precheck.js +42 -0
  147. package/dist/mcp/tools/precheck.js.map +1 -0
  148. package/dist/mcp/tools/validate.d.ts +73 -0
  149. package/dist/mcp/tools/validate.d.ts.map +1 -0
  150. package/dist/mcp/tools/validate.js +66 -0
  151. package/dist/mcp/tools/validate.js.map +1 -0
  152. package/dist/mcp/warm.d.ts +88 -0
  153. package/dist/mcp/warm.d.ts.map +1 -0
  154. package/dist/mcp/warm.js +331 -0
  155. package/dist/mcp/warm.js.map +1 -0
  156. package/dist/orchestrator.d.ts +46 -0
  157. package/dist/orchestrator.d.ts.map +1 -0
  158. package/dist/orchestrator.js +596 -0
  159. package/dist/orchestrator.js.map +1 -0
  160. package/dist/policy.d.ts +51 -0
  161. package/dist/policy.d.ts.map +1 -0
  162. package/dist/policy.js +201 -0
  163. package/dist/policy.js.map +1 -0
  164. package/dist/risk.d.ts +31 -0
  165. package/dist/risk.d.ts.map +1 -0
  166. package/dist/risk.js +92 -0
  167. package/dist/risk.js.map +1 -0
  168. package/dist/stats.d.ts +72 -0
  169. package/dist/stats.d.ts.map +1 -0
  170. package/dist/stats.js +217 -0
  171. package/dist/stats.js.map +1 -0
  172. package/dist/telemetry/collector.d.ts +10 -0
  173. package/dist/telemetry/collector.d.ts.map +1 -0
  174. package/dist/telemetry/collector.js +75 -0
  175. package/dist/telemetry/collector.js.map +1 -0
  176. package/dist/telemetry/consent.d.ts +9 -0
  177. package/dist/telemetry/consent.d.ts.map +1 -0
  178. package/dist/telemetry/consent.js +42 -0
  179. package/dist/telemetry/consent.js.map +1 -0
  180. package/dist/telemetry/installation.d.ts +2 -0
  181. package/dist/telemetry/installation.d.ts.map +1 -0
  182. package/dist/telemetry/installation.js +32 -0
  183. package/dist/telemetry/installation.js.map +1 -0
  184. package/dist/telemetry/sanitizer.d.ts +5 -0
  185. package/dist/telemetry/sanitizer.d.ts.map +1 -0
  186. package/dist/telemetry/sanitizer.js +60 -0
  187. package/dist/telemetry/sanitizer.js.map +1 -0
  188. package/dist/telemetry/types.d.ts +39 -0
  189. package/dist/telemetry/types.d.ts.map +1 -0
  190. package/dist/telemetry/types.js +4 -0
  191. package/dist/telemetry/types.js.map +1 -0
  192. package/dist/telemetry/uploader.d.ts +12 -0
  193. package/dist/telemetry/uploader.d.ts.map +1 -0
  194. package/dist/telemetry/uploader.js +92 -0
  195. package/dist/telemetry/uploader.js.map +1 -0
  196. package/dist/util/logger.d.ts +19 -0
  197. package/dist/util/logger.d.ts.map +1 -0
  198. package/dist/util/logger.js +58 -0
  199. package/dist/util/logger.js.map +1 -0
  200. package/dist/util/safe-paths.d.ts +8 -0
  201. package/dist/util/safe-paths.d.ts.map +1 -0
  202. package/dist/util/safe-paths.js +102 -0
  203. package/dist/util/safe-paths.js.map +1 -0
  204. package/dist/util/subprocess.d.ts +32 -0
  205. package/dist/util/subprocess.d.ts.map +1 -0
  206. package/dist/util/subprocess.js +137 -0
  207. package/dist/util/subprocess.js.map +1 -0
  208. package/package.json +93 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joern.js","sourceRoot":"","sources":["../../src/index/joern.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import { winToWslPath } from "./pysa.js";
2
+ export interface PropertyCandidate {
3
+ /** Function name (e.g. ``total_after_discount``). */
4
+ name: string;
5
+ /** Approximate source-line where the ``def`` sits (1-indexed). */
6
+ line: number;
7
+ /** Verbatim source of the function (including the def line and body).
8
+ * Capped at MAX_FUNC_BODY_CHARS. */
9
+ source: string;
10
+ }
11
+ export interface PropertyRunResult {
12
+ /** Function we tested. */
13
+ candidate: PropertyCandidate;
14
+ /** True iff Hypothesis ran AND the property held (no counterexample). */
15
+ passed: boolean;
16
+ /** True iff we found a real bug via a counterexample. */
17
+ bugFound: boolean;
18
+ /** True iff something went wrong (LLM failed, pytest crashed, timeout). */
19
+ inconclusive: boolean;
20
+ /** Short human reason when inconclusive (e.g. "llm refused"). */
21
+ reason?: string;
22
+ /** Hypothesis-formatted "Falsifying example: name=…(value)" string. */
23
+ counterexample?: string;
24
+ /** Short invariant description the LLM stated. */
25
+ invariant?: string;
26
+ /** Per-run duration. */
27
+ durationMs: number;
28
+ }
29
+ interface LLMOk {
30
+ ok: true;
31
+ imports: string[];
32
+ property_code: string;
33
+ explanation: string;
34
+ }
35
+ interface LLMRefused {
36
+ ok: false;
37
+ reason: string;
38
+ }
39
+ type LLMResponse = LLMOk | LLMRefused;
40
+ /** Find top-level def statements in the file. Returns up to ``max``
41
+ * candidates, prioritising names that match HIGH_RISK_PATTERNS. */
42
+ export declare function findPropertyCandidates(content: string, max?: number): PropertyCandidate[];
43
+ declare function findClaudeCli(): Promise<string | null>;
44
+ /** Test-only resetter. */
45
+ export declare function _resetClaudeCacheForTests(): void;
46
+ declare function buildPrompt(candidate: PropertyCandidate): string;
47
+ declare function callClaudeForProperty(candidate: PropertyCandidate, binPath: string): Promise<LLMResponse>;
48
+ interface PytestResult {
49
+ passed: boolean;
50
+ /** True iff a Falsifying example was found. */
51
+ bugFound: boolean;
52
+ counterexample?: string;
53
+ rawTail: string;
54
+ }
55
+ /** Parse pytest+hypothesis stdout. We don't try to be exhaustive — Hypothesis
56
+ * prints a distinctive "Falsifying example: …" header when it finds a counter-
57
+ * example. PASSED with no falsifying line = invariant holds. */
58
+ export declare function parsePytestOutput(stdout: string, stderr: string, exitCode: number | null): PytestResult;
59
+ declare function buildTestFile(candidate: PropertyCandidate, llm: LLMOk): string;
60
+ interface WslEnv {
61
+ wslExe: string;
62
+ distro: string;
63
+ pythonBin: string;
64
+ }
65
+ /** Discover WSL + venv python. Returns null when unavailable (engine
66
+ * reports unavailable cleanly). */
67
+ declare function findRunner(): Promise<WslEnv | null>;
68
+ /** Run property-based tests on every high-risk candidate in ``content``.
69
+ * Returns a structured result per candidate so the engine can build
70
+ * Findings + audit-log diagnostics independently. */
71
+ export declare function runPropertyTests(content: string): Promise<PropertyRunResult[]>;
72
+ /** Per-process LMDB cache key for a property-test run. Keyed by
73
+ * sha256(content + prompt_version + model + effort + seed). */
74
+ export declare function propertyCacheKey(content: string): string;
75
+ /** Used by the engine: ensure the per-run scratch / log dir exists. */
76
+ export declare function ensurePropertyCacheDir(): string;
77
+ export declare const _testing: {
78
+ findPropertyCandidates: typeof findPropertyCandidates;
79
+ buildPrompt: typeof buildPrompt;
80
+ parsePytestOutput: typeof parsePytestOutput;
81
+ buildTestFile: typeof buildTestFile;
82
+ propertyCacheKey: typeof propertyCacheKey;
83
+ winToWslPath: typeof winToWslPath;
84
+ PROMPT_VERSION: string;
85
+ HIGH_RISK_PATTERNS: RegExp;
86
+ };
87
+ export { findRunner as _findRunner, callClaudeForProperty as _callClaudeForProperty, findClaudeCli as _findClaudeCli };
88
+ //# sourceMappingURL=property-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"property-test.d.ts","sourceRoot":"","sources":["../../src/index/property-test.ts"],"names":[],"mappings":"AAiDA,OAAO,EAAW,YAAY,EAAE,MAAM,WAAW,CAAC;AAkClD,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb;wCACoC;IACpC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,0BAA0B;IAC1B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,yEAAyE;IACzE,MAAM,EAAE,OAAO,CAAC;IAChB,yDAAyD;IACzD,QAAQ,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,YAAY,EAAE,OAAO,CAAC;IACtB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,KAAK;IACb,EAAE,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AACD,UAAU,UAAU;IAClB,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,KAAK,WAAW,GAAG,KAAK,GAAG,UAAU,CAAC;AAItC;mEACmE;AACnE,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,MAA0B,GAC9B,iBAAiB,EAAE,CA6BrB;AAkCD,iBAAe,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgCrD;AAOD,0BAA0B;AAC1B,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAID,iBAAS,WAAW,CAAC,SAAS,EAAE,iBAAiB,GAAG,MAAM,CA6BzD;AAED,iBAAe,qBAAqB,CAClC,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,CAAC,CA+CtB;AAID,UAAU,YAAY;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,+CAA+C;IAC/C,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;gEAEgE;AAChE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY,CAqBvG;AAID,iBAAS,aAAa,CAAC,SAAS,EAAE,iBAAiB,EAAE,GAAG,EAAE,KAAK,GAAG,MAAM,CAevE;AAED,UAAU,MAAM;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;mCACmC;AACnC,iBAAe,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWlD;AAoDD;;qDAEqD;AACrD,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAuD9B;AAQD;+DAC+D;AAC/D,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAgBxD;AAED,uEAAuE;AACvE,wBAAgB,sBAAsB,IAAI,MAAM,CAI/C;AAGD,eAAO,MAAM,QAAQ;;;;;;;;;CASpB,CAAC;AAGF,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,qBAAqB,IAAI,sBAAsB,EAAE,aAAa,IAAI,cAAc,EAAE,CAAC"}
@@ -0,0 +1,466 @@
1
+ /**
2
+ * Property-based testing gate — proves bugs via Hypothesis counterexamples.
3
+ *
4
+ * Pipeline per file:
5
+ * 1. Extract every top-level Python ``def`` from the file content.
6
+ * 2. Filter to "high-risk" callables (money / arithmetic / auth name
7
+ * patterns) — capped at MAX_FUNCTIONS_PER_FILE so we don't spawn
8
+ * claude N times on a 1000-function module.
9
+ * 3. For each candidate, call ``claude -p --output-format json`` with a
10
+ * strict prompt that asks for a Hypothesis property + import list.
11
+ * The LLM either emits the property or returns ``{"ok": false}``
12
+ * (cleanly skip — no fake findings).
13
+ * 4. Compose a self-contained ``.py`` file (function source + imports
14
+ * + property) in a WSL scratch dir.
15
+ * 5. Run ``pytest -p no:cacheprovider --hypothesis-seed=42`` via WSL
16
+ * with a 30s timeout + 64 KB stdout/stderr cap.
17
+ * 6. Parse pytest output: a Hypothesis "Falsifying example: …" line
18
+ * means a counterexample was found → emit Finding with proof.
19
+ * A "PASSED" + non-zero examples = function holds invariant → no Finding.
20
+ *
21
+ * **Why no MCP competitor does this:** writing meaningful properties
22
+ * requires (a) a smart LLM, (b) a safe execution sandbox, (c) integration
23
+ * with the gate decision. Most static-analysis MCPs stop at "what looks
24
+ * bad"; this PROVES it via concrete inputs.
25
+ *
26
+ * **Safety surface:**
27
+ * - All execution happens inside WSL Ubuntu (Linux isolation).
28
+ * - The temp file lives in ``/tmp/aegis-prop-<rand>/`` — cleaned up
29
+ * after each run. Function code is appended verbatim from the user's
30
+ * file (which we already trust at the gate level).
31
+ * - Hard timeout (30s) via spawnRun.
32
+ * - stdout/stderr capped at 64 KB so a runaway loop printing forever
33
+ * can't blow memory.
34
+ * - LLM-generated code lives only inside the property function body.
35
+ * The prompt strictly forbids side effects, network, fs writes; we
36
+ * trust the prompt + timeout (no seccomp jail in v1 — Phase 3 task).
37
+ *
38
+ * **Env overrides:**
39
+ * AEGIS_PROP_TIMEOUT_MS per-pytest timeout (default 30000)
40
+ * AEGIS_PROP_MAX_FUNCS cap candidates per file (default 3)
41
+ * AEGIS_PROP_HYPOTHESIS_SEED seed (default 42 → reproducible)
42
+ */
43
+ import { createHash } from "node:crypto";
44
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
45
+ import { homedir } from "node:os";
46
+ import { join, resolve as resolvePath } from "node:path";
47
+ import { getLogger } from "../util/logger.js";
48
+ import { run as spawnRun, which as whichBin } from "../util/subprocess.js";
49
+ import { findWsl, winToWslPath } from "./pysa.js";
50
+ const log = getLogger("aegis.property");
51
+ // Bump on any prompt change — invalidates downstream caches.
52
+ const PROMPT_VERSION = "v1";
53
+ const DEFAULT_TIMEOUT_MS = 30_000;
54
+ const DEFAULT_MAX_FUNCS = 3;
55
+ const DEFAULT_SEED = 42;
56
+ const DEFAULT_CLAUDE_MODEL = "claude-opus-4-7[1m]";
57
+ const DEFAULT_CLAUDE_EFFORT = "max"; // per Rotem 2026-05-25 standing requirement
58
+ const MAX_FUNC_BODY_CHARS = 4_000;
59
+ // Python identifier regex for top-level def detection.
60
+ const TOP_LEVEL_DEF_RE = /^def\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*\(/gm;
61
+ // High-risk name patterns — function names matching these are the
62
+ // universe we'll spend LLM tokens on first. Math / money / arithmetic
63
+ // focused: those are the bugs Hypothesis actually proves with concrete
64
+ // counterexamples. Auth/permission bugs are better served by the LLM
65
+ // critic with Vul-RAG (Hypothesis can't easily synthesise valid auth
66
+ // state) so they're intentionally NOT in this list.
67
+ //
68
+ // Word-boundary handling: ``(?:^|_)`` matches start of string or
69
+ // preceding underscore (snake_case prefix); ``(?:_|[A-Z]|$)`` matches
70
+ // trailing underscore, capital letter (camelCase boundary), or end.
71
+ // This catches ``calculate_total``, ``calculateTotal``, ``total_after_discount``,
72
+ // ``apply_discount_with_tax`` — but NOT ``calculator`` (no trailing
73
+ // underscore / cap) or ``escalate`` (no prefix boundary).
74
+ const HIGH_RISK_PATTERNS = /(?:^|_)(calculate|compute|apply|discount|tax|fee|total|sum|average|mean|divide|multiply|transfer|deduct|charge|price|amount|balance|interest|rate|allocate|distribute|convert|exchange|premium|withhold|withdraw|deposit|round|toll|levy)(?:_|[A-Z]|$)/i;
75
+ // ── Candidate extraction ────────────────────────────────────────────────-
76
+ /** Find top-level def statements in the file. Returns up to ``max``
77
+ * candidates, prioritising names that match HIGH_RISK_PATTERNS. */
78
+ export function findPropertyCandidates(content, max = DEFAULT_MAX_FUNCS) {
79
+ const out = [];
80
+ const lines = content.split(/\r?\n/);
81
+ const matches = Array.from(content.matchAll(TOP_LEVEL_DEF_RE));
82
+ for (const m of matches) {
83
+ const name = m[1];
84
+ const start = m.index ?? 0;
85
+ // Count newlines up to this match for 1-indexed line number.
86
+ const before = content.slice(0, start);
87
+ const lineNo = (before.match(/\n/g) ?? []).length + 1;
88
+ const source = extractFunctionSource(lines, lineNo);
89
+ if (source)
90
+ out.push({ name, line: lineNo, source });
91
+ }
92
+ // Sort: high-risk names first, then by appearance order.
93
+ out.sort((a, b) => {
94
+ const aRisk = HIGH_RISK_PATTERNS.test(a.name) ? 0 : 1;
95
+ const bRisk = HIGH_RISK_PATTERNS.test(b.name) ? 0 : 1;
96
+ if (aRisk !== bRisk)
97
+ return aRisk - bRisk;
98
+ return a.line - b.line;
99
+ });
100
+ // Strict filter: function NAME must match HIGH_RISK_PATTERNS.
101
+ // We tested a permissive "name OR arithmetic-in-body" variant and it
102
+ // burned an LLM call on every helper that did `x + y` — including
103
+ // ``add(a, b)`` in clean_demo.py. Name-only matching is conservative
104
+ // (false-negatives possible if a money function is named oddly) but
105
+ // never wastes an LLM message on pure-helper code. Tune via
106
+ // AEGIS_PROP_NAME_PATTERN env if a project uses different naming.
107
+ const filtered = out.filter((c) => HIGH_RISK_PATTERNS.test(c.name));
108
+ return filtered.slice(0, max);
109
+ }
110
+ /** Walk ``lines`` from ``defLineNo`` (1-indexed) until the next top-level
111
+ * dedent. Cap at MAX_FUNC_BODY_CHARS so a megafunction can't blow the
112
+ * prompt budget. Naïve indent tracker — fine for typical 4-space code. */
113
+ function extractFunctionSource(lines, defLineNo) {
114
+ if (defLineNo < 1 || defLineNo > lines.length)
115
+ return "";
116
+ const start = defLineNo - 1; // 0-indexed
117
+ const out = [];
118
+ const defLine = lines[start] ?? "";
119
+ out.push(defLine);
120
+ let total = defLine.length;
121
+ for (let i = start + 1; i < lines.length; i++) {
122
+ const line = lines[i] ?? "";
123
+ // Empty / comment-only lines belong to the function.
124
+ if (line.trim() === "" || /^\s*#/.test(line)) {
125
+ out.push(line);
126
+ total += line.length;
127
+ if (total > MAX_FUNC_BODY_CHARS)
128
+ break;
129
+ continue;
130
+ }
131
+ // Dedented to column 0 = next top-level statement = end of fn.
132
+ if (/^\S/.test(line))
133
+ break;
134
+ out.push(line);
135
+ total += line.length;
136
+ if (total > MAX_FUNC_BODY_CHARS)
137
+ break;
138
+ }
139
+ return out.join("\n");
140
+ }
141
+ // ── Claude CLI discovery (reuses llm-critic env) ─────────────────────────
142
+ let _cachedClaudePath;
143
+ async function findClaudeCli() {
144
+ if (_cachedClaudePath !== undefined)
145
+ return _cachedClaudePath;
146
+ const explicit = process.env.AEGIS_CRITIC_BIN; // same env as llm-critic
147
+ if (explicit && explicit.trim()) {
148
+ const e = expandHome(explicit.trim());
149
+ if (existsSync(e)) {
150
+ _cachedClaudePath = e;
151
+ return e;
152
+ }
153
+ }
154
+ const hit = await whichBin("claude");
155
+ if (hit) {
156
+ _cachedClaudePath = hit;
157
+ return hit;
158
+ }
159
+ const fallbacks = process.platform === "win32"
160
+ ? [
161
+ "~\\.local\\bin\\claude.exe",
162
+ "~\\AppData\\Local\\Programs\\claude-code\\claude.exe",
163
+ "~\\AppData\\Roaming\\npm\\claude.cmd",
164
+ ]
165
+ : ["~/.local/bin/claude", "~/.claude/local/claude", "/usr/local/bin/claude"];
166
+ for (const raw of fallbacks) {
167
+ const p = expandHome(raw);
168
+ if (existsSync(p)) {
169
+ _cachedClaudePath = p;
170
+ return p;
171
+ }
172
+ }
173
+ _cachedClaudePath = null;
174
+ return null;
175
+ }
176
+ function expandHome(p) {
177
+ if (!p.startsWith("~"))
178
+ return p;
179
+ return resolvePath(homedir(), p.slice(2));
180
+ }
181
+ /** Test-only resetter. */
182
+ export function _resetClaudeCacheForTests() {
183
+ _cachedClaudePath = undefined;
184
+ }
185
+ // ── LLM prompt ───────────────────────────────────────────────────────────
186
+ function buildPrompt(candidate) {
187
+ return [
188
+ "You are a property-based test author for Python. Given a function, output ONE Hypothesis property that captures an INVARIANT that should hold for ALL valid inputs.",
189
+ "",
190
+ "RULES:",
191
+ "1. Use realistic input strategies — for money, use `st.decimals(min_value=Decimal(\"0\"), max_value=Decimal(\"1000000\"), allow_nan=False, allow_infinity=False, places=2)`; for indices, `st.integers(min_value=0, max_value=10000)`; for percentages, `st.floats(min_value=0, max_value=100, allow_nan=False, allow_infinity=False)`.",
192
+ "2. ONE invariant per property — pick the strongest you can prove.",
193
+ "3. NO side effects: no I/O, no network, no fs writes, no subprocess.",
194
+ "4. Property must finish in <1 second per input.",
195
+ "5. Use `assert <cond>, f\"<message including inputs>\"` so counterexamples are readable.",
196
+ "6. Do NOT redefine the function — assume it's already in scope.",
197
+ "7. If the function has no provable invariant (pure pass-through, side-effect only, framework callback), output `{\"ok\":false,\"reason\":\"<short>\"}`.",
198
+ "",
199
+ "OUTPUT — STRICT JSON ONLY (first character must be '{'):",
200
+ "{",
201
+ ' "ok": true,',
202
+ ' "imports": ["from hypothesis import given, strategies as st", "..."],',
203
+ ' "property_code": "@given(...)\\ndef test_invariant(...):\\n ...",',
204
+ ' "explanation": "<one-line: what invariant this checks>"',
205
+ "}",
206
+ "",
207
+ "Or:",
208
+ ' {"ok": false, "reason": "<short>"}',
209
+ "",
210
+ "Function under test:",
211
+ "```python",
212
+ candidate.source,
213
+ "```",
214
+ ].join("\n");
215
+ }
216
+ async function callClaudeForProperty(candidate, binPath) {
217
+ const model = process.env.AEGIS_CRITIC_MODEL ?? DEFAULT_CLAUDE_MODEL;
218
+ const effort = process.env.AEGIS_CRITIC_EFFORT ?? DEFAULT_CLAUDE_EFFORT;
219
+ const r = await spawnRun(binPath, {
220
+ args: [
221
+ "-p",
222
+ "--output-format", "json",
223
+ "--model", model,
224
+ "--effort", effort,
225
+ ],
226
+ stdin: buildPrompt(candidate),
227
+ timeoutMs: 120_000,
228
+ });
229
+ if (r.timedOut || r.exitCode !== 0) {
230
+ return { ok: false, reason: `claude rc=${r.exitCode} timedOut=${r.timedOut}` };
231
+ }
232
+ try {
233
+ const wrapper = JSON.parse(r.stdout);
234
+ if (wrapper.is_error)
235
+ return { ok: false, reason: "claude wrapper is_error" };
236
+ const text = wrapper.result ?? "";
237
+ // Extract the inner JSON object.
238
+ const first = text.indexOf("{");
239
+ const last = text.lastIndexOf("}");
240
+ if (first < 0 || last < 0 || last <= first) {
241
+ return { ok: false, reason: "no JSON object in claude output" };
242
+ }
243
+ const obj = JSON.parse(text.slice(first, last + 1));
244
+ if (obj.ok === false) {
245
+ return { ok: false, reason: String(obj.reason ?? "claude refused") };
246
+ }
247
+ if (obj.ok !== true ||
248
+ !Array.isArray(obj.imports) ||
249
+ typeof obj.property_code !== "string" ||
250
+ typeof obj.explanation !== "string") {
251
+ return { ok: false, reason: "malformed claude property envelope" };
252
+ }
253
+ return {
254
+ ok: true,
255
+ imports: obj.imports.filter((s) => typeof s === "string"),
256
+ property_code: obj.property_code,
257
+ explanation: obj.explanation,
258
+ };
259
+ }
260
+ catch (err) {
261
+ return { ok: false, reason: `claude parse error: ${String(err)}` };
262
+ }
263
+ }
264
+ /** Parse pytest+hypothesis stdout. We don't try to be exhaustive — Hypothesis
265
+ * prints a distinctive "Falsifying example: …" header when it finds a counter-
266
+ * example. PASSED with no falsifying line = invariant holds. */
267
+ export function parsePytestOutput(stdout, stderr, exitCode) {
268
+ const combined = stdout + "\n" + stderr;
269
+ const rawTail = combined.slice(-2000);
270
+ const falsifyMatch = combined.match(/Falsifying example:\s*([^\n]+)/);
271
+ if (falsifyMatch) {
272
+ // Include the next 3 lines after for context (often shows the assertion failure).
273
+ const idx = combined.indexOf(falsifyMatch[0]);
274
+ const after = combined.slice(idx, idx + 1000);
275
+ return {
276
+ passed: false,
277
+ bugFound: true,
278
+ counterexample: after.split("\n").slice(0, 4).join("\n").trim(),
279
+ rawTail,
280
+ };
281
+ }
282
+ if (exitCode === 0 && /PASSED|passed/.test(combined)) {
283
+ return { passed: true, bugFound: false, rawTail };
284
+ }
285
+ // Exit non-zero with no falsifying example = test errored (import error,
286
+ // syntax, etc.). Inconclusive, not a bug.
287
+ return { passed: false, bugFound: false, rawTail };
288
+ }
289
+ // ── WSL sandbox runner ──────────────────────────────────────────────────-
290
+ function buildTestFile(candidate, llm) {
291
+ return [
292
+ "# Auto-generated by aegis-v2 property-based testing gate.",
293
+ "# Function: " + candidate.name + " (line " + String(candidate.line) + ")",
294
+ "# Invariant: " + llm.explanation,
295
+ "",
296
+ ...llm.imports,
297
+ "",
298
+ "# --- function under test (verbatim from source) ---",
299
+ candidate.source,
300
+ "",
301
+ "# --- LLM-generated property ---",
302
+ llm.property_code,
303
+ "",
304
+ ].join("\n");
305
+ }
306
+ /** Discover WSL + venv python. Returns null when unavailable (engine
307
+ * reports unavailable cleanly). */
308
+ async function findRunner() {
309
+ if (process.platform === "win32") {
310
+ const wsl = findWsl();
311
+ if (!wsl)
312
+ return null;
313
+ // We reuse the same ~/pyre-venv/bin/python the Pysa engine uses —
314
+ // Hypothesis + pytest get installed there once.
315
+ const pythonBin = process.env.AEGIS_PROP_PYTHON_BIN ?? "~/pyre-venv/bin/python";
316
+ return { ...wsl, pythonBin };
317
+ }
318
+ // Native Linux/macOS — would use the system python. Out of scope v1.
319
+ return null;
320
+ }
321
+ /** Sandboxed pytest run. Returns the structured result. Never throws. */
322
+ async function runPytestInWsl(testFileContent, candidate) {
323
+ const wsl = await findRunner();
324
+ if (!wsl) {
325
+ return { passed: false, bugFound: false, rawTail: "WSL unavailable" };
326
+ }
327
+ // Per-run scratch dir under WSL /tmp.
328
+ const stamp = Date.now().toString(36) + "-" + Math.random().toString(36).slice(2, 8);
329
+ const scratchWsl = "/tmp/aegis-prop-" + stamp;
330
+ // We compose the script body inside bash so we don't need to convert
331
+ // paths back and forth. Heredoc preserves the test content verbatim.
332
+ // ``EOF_AEGIS`` is unique enough that even attacker-controlled code
333
+ // can't terminate it (we forbid that string in the prompt? No — we
334
+ // trust the LLM's strict JSON wrapper. If a payload included "EOF_AEGIS"
335
+ // the worst case is the heredoc closes early and pytest sees a syntax
336
+ // error → inconclusive, not a security issue. We never EXECUTE outside
337
+ // the WSL sandbox.).
338
+ const seed = Number(process.env.AEGIS_PROP_HYPOTHESIS_SEED ?? DEFAULT_SEED);
339
+ const remoteScript = [
340
+ "set -e",
341
+ `mkdir -p ${scratchWsl}`,
342
+ `cat > ${scratchWsl}/test_prop.py <<'EOF_AEGIS_PROP'`,
343
+ testFileContent,
344
+ "EOF_AEGIS_PROP",
345
+ `cd ${scratchWsl}`,
346
+ `${wsl.pythonBin} -m pytest -p no:cacheprovider --hypothesis-seed=${seed} test_prop.py -v 2>&1`,
347
+ `rm -rf ${scratchWsl} 2>/dev/null || true`,
348
+ ].join("\n");
349
+ const r = await spawnRun(wsl.wslExe, {
350
+ args: ["-d", wsl.distro, "--", "bash", "-c", remoteScript],
351
+ timeoutMs: Number(process.env.AEGIS_PROP_TIMEOUT_MS ?? DEFAULT_TIMEOUT_MS) || DEFAULT_TIMEOUT_MS,
352
+ maxBufferBytes: 256 * 1024,
353
+ });
354
+ log.debug("property pytest done", {
355
+ fn: candidate.name,
356
+ rc: r.exitCode,
357
+ timedOut: r.timedOut,
358
+ ms: r.durationMs,
359
+ });
360
+ if (r.timedOut) {
361
+ return { passed: false, bugFound: false, rawTail: "pytest timed out" };
362
+ }
363
+ return parsePytestOutput(r.stdout, r.stderr, r.exitCode);
364
+ }
365
+ // ── Public entry ────────────────────────────────────────────────────────-
366
+ /** Run property-based tests on every high-risk candidate in ``content``.
367
+ * Returns a structured result per candidate so the engine can build
368
+ * Findings + audit-log diagnostics independently. */
369
+ export async function runPropertyTests(content) {
370
+ const t0 = Date.now();
371
+ const claudePath = await findClaudeCli();
372
+ if (!claudePath) {
373
+ log.debug("property test skipped — claude CLI not found");
374
+ return [];
375
+ }
376
+ const maxFuncs = Math.max(1, Number(process.env.AEGIS_PROP_MAX_FUNCS ?? DEFAULT_MAX_FUNCS) || DEFAULT_MAX_FUNCS);
377
+ const candidates = findPropertyCandidates(content, maxFuncs);
378
+ if (candidates.length === 0) {
379
+ log.debug("property test: no high-risk candidates in file");
380
+ return [];
381
+ }
382
+ log.info("property test: candidates", {
383
+ count: candidates.length,
384
+ names: candidates.map((c) => c.name),
385
+ });
386
+ const out = [];
387
+ for (const c of candidates) {
388
+ const tCand = Date.now();
389
+ const llm = await callClaudeForProperty(c, claudePath);
390
+ if (llm.ok === false) {
391
+ out.push({
392
+ candidate: c,
393
+ passed: false,
394
+ bugFound: false,
395
+ inconclusive: true,
396
+ reason: "llm:" + llm.reason,
397
+ durationMs: Date.now() - tCand,
398
+ });
399
+ continue;
400
+ }
401
+ const testFile = buildTestFile(c, llm);
402
+ const pytest = await runPytestInWsl(testFile, c);
403
+ out.push({
404
+ candidate: c,
405
+ passed: pytest.passed,
406
+ bugFound: pytest.bugFound,
407
+ inconclusive: !pytest.bugFound && !pytest.passed,
408
+ ...(pytest.counterexample ? { counterexample: pytest.counterexample } : {}),
409
+ invariant: llm.explanation,
410
+ durationMs: Date.now() - tCand,
411
+ });
412
+ }
413
+ log.info("property test: done", {
414
+ total_ms: Date.now() - t0,
415
+ bugs: out.filter((r) => r.bugFound).length,
416
+ passed: out.filter((r) => r.passed).length,
417
+ inconclusive: out.filter((r) => r.inconclusive).length,
418
+ });
419
+ return out;
420
+ }
421
+ // ── Cache helpers (per-content hash) ────────────────────────────────────-
422
+ function aegisHome() {
423
+ return process.env.AEGIS_HOME ?? resolvePath(homedir(), ".aegis");
424
+ }
425
+ /** Per-process LMDB cache key for a property-test run. Keyed by
426
+ * sha256(content + prompt_version + model + effort + seed). */
427
+ export function propertyCacheKey(content) {
428
+ const model = process.env.AEGIS_CRITIC_MODEL ?? DEFAULT_CLAUDE_MODEL;
429
+ const effort = process.env.AEGIS_CRITIC_EFFORT ?? DEFAULT_CLAUDE_EFFORT;
430
+ const seed = String(process.env.AEGIS_PROP_HYPOTHESIS_SEED ?? DEFAULT_SEED);
431
+ const h = createHash("sha256");
432
+ h.update("prop:");
433
+ h.update(PROMPT_VERSION);
434
+ h.update("\0");
435
+ h.update(model);
436
+ h.update("\0");
437
+ h.update(effort);
438
+ h.update("\0");
439
+ h.update(seed);
440
+ h.update("\0");
441
+ h.update(content);
442
+ return "prop:" + h.digest("hex").slice(0, 32);
443
+ }
444
+ /** Used by the engine: ensure the per-run scratch / log dir exists. */
445
+ export function ensurePropertyCacheDir() {
446
+ const d = join(aegisHome(), "property-test");
447
+ mkdirSync(d, { recursive: true });
448
+ return d;
449
+ }
450
+ // Test-friendly exports
451
+ export const _testing = {
452
+ findPropertyCandidates,
453
+ buildPrompt,
454
+ parsePytestOutput,
455
+ buildTestFile,
456
+ propertyCacheKey,
457
+ winToWslPath,
458
+ PROMPT_VERSION,
459
+ HIGH_RISK_PATTERNS,
460
+ };
461
+ // Re-export internal helpers used by the engine module.
462
+ export { findRunner as _findRunner, callClaudeForProperty as _callClaudeForProperty, findClaudeCli as _findClaudeCli };
463
+ // Avoid TS unused-import warnings — these are used by `_testing`.
464
+ void readFileSync;
465
+ void writeFileSync;
466
+ //# sourceMappingURL=property-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"property-test.js","sourceRoot":"","sources":["../../src/index/property-test.ts"],"names":[],"mappings":"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"}