@aionlabsai/aion 0.2.1 → 0.2.2

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 (87) hide show
  1. package/README.md +59 -0
  2. package/dist/agents/base-agent.d.ts.map +1 -1
  3. package/dist/agents/base-agent.js +23 -12
  4. package/dist/agents/base-agent.js.map +1 -1
  5. package/dist/agents/synthesizer.d.ts +3 -0
  6. package/dist/agents/synthesizer.d.ts.map +1 -1
  7. package/dist/agents/synthesizer.js +93 -52
  8. package/dist/agents/synthesizer.js.map +1 -1
  9. package/dist/cli/commands/audit.d.ts.map +1 -1
  10. package/dist/cli/commands/audit.js +87 -534
  11. package/dist/cli/commands/audit.js.map +1 -1
  12. package/dist/cli/commands/chat.d.ts.map +1 -1
  13. package/dist/cli/commands/chat.js +2 -1
  14. package/dist/cli/commands/chat.js.map +1 -1
  15. package/dist/cli/commands/context.d.ts +3 -0
  16. package/dist/cli/commands/context.d.ts.map +1 -0
  17. package/dist/cli/commands/context.js +72 -0
  18. package/dist/cli/commands/context.js.map +1 -0
  19. package/dist/cli/commands/next.d.ts +3 -0
  20. package/dist/cli/commands/next.d.ts.map +1 -0
  21. package/dist/cli/commands/next.js +49 -0
  22. package/dist/cli/commands/next.js.map +1 -0
  23. package/dist/cli/commands/report.d.ts.map +1 -1
  24. package/dist/cli/commands/report.js +52 -400
  25. package/dist/cli/commands/report.js.map +1 -1
  26. package/dist/cli/commands/search.d.ts +3 -0
  27. package/dist/cli/commands/search.d.ts.map +1 -0
  28. package/dist/cli/commands/search.js +50 -0
  29. package/dist/cli/commands/search.js.map +1 -0
  30. package/dist/cli/commands/tree.d.ts +3 -0
  31. package/dist/cli/commands/tree.d.ts.map +1 -0
  32. package/dist/cli/commands/tree.js +85 -0
  33. package/dist/cli/commands/tree.js.map +1 -0
  34. package/dist/cli/menu.d.ts.map +1 -1
  35. package/dist/cli/menu.js +13 -0
  36. package/dist/cli/menu.js.map +1 -1
  37. package/dist/core/cost-tracker.d.ts +10 -0
  38. package/dist/core/cost-tracker.d.ts.map +1 -1
  39. package/dist/core/cost-tracker.js +53 -0
  40. package/dist/core/cost-tracker.js.map +1 -1
  41. package/dist/core/pipelines/audit-pipeline.d.ts +4 -1
  42. package/dist/core/pipelines/audit-pipeline.d.ts.map +1 -1
  43. package/dist/core/pipelines/audit-pipeline.js +60 -30
  44. package/dist/core/pipelines/audit-pipeline.js.map +1 -1
  45. package/dist/index.js +11 -1
  46. package/dist/index.js.map +1 -1
  47. package/dist/infra/audit-cache.d.ts +2 -1
  48. package/dist/infra/audit-cache.d.ts.map +1 -1
  49. package/dist/infra/audit-cache.js +18 -6
  50. package/dist/infra/audit-cache.js.map +1 -1
  51. package/dist/infra/audit-model.d.ts +72 -0
  52. package/dist/infra/audit-model.d.ts.map +1 -0
  53. package/dist/infra/audit-model.js +146 -0
  54. package/dist/infra/audit-model.js.map +1 -0
  55. package/dist/infra/audit-report-writer.d.ts +4 -0
  56. package/dist/infra/audit-report-writer.d.ts.map +1 -0
  57. package/dist/infra/audit-report-writer.js +290 -0
  58. package/dist/infra/audit-report-writer.js.map +1 -0
  59. package/dist/infra/code-metrics.d.ts +11 -0
  60. package/dist/infra/code-metrics.d.ts.map +1 -1
  61. package/dist/infra/code-metrics.js +62 -0
  62. package/dist/infra/code-metrics.js.map +1 -1
  63. package/dist/infra/embeddings.d.ts +2 -0
  64. package/dist/infra/embeddings.d.ts.map +1 -1
  65. package/dist/infra/embeddings.js +2 -2
  66. package/dist/infra/embeddings.js.map +1 -1
  67. package/dist/infra/project-report.d.ts +67 -0
  68. package/dist/infra/project-report.d.ts.map +1 -0
  69. package/dist/infra/project-report.js +159 -0
  70. package/dist/infra/project-report.js.map +1 -0
  71. package/dist/infra/repo-vectors.d.ts +31 -0
  72. package/dist/infra/repo-vectors.d.ts.map +1 -0
  73. package/dist/infra/repo-vectors.js +83 -0
  74. package/dist/infra/repo-vectors.js.map +1 -0
  75. package/dist/infra/update-check.d.ts +3 -0
  76. package/dist/infra/update-check.d.ts.map +1 -0
  77. package/dist/infra/update-check.js +84 -0
  78. package/dist/infra/update-check.js.map +1 -0
  79. package/dist/prompts/scanner.js +1 -1
  80. package/dist/prompts/synthesizer.d.ts.map +1 -1
  81. package/dist/prompts/synthesizer.js +7 -23
  82. package/dist/prompts/synthesizer.js.map +1 -1
  83. package/dist/providers/cli-provider.d.ts +1 -0
  84. package/dist/providers/cli-provider.d.ts.map +1 -1
  85. package/dist/providers/cli-provider.js +22 -2
  86. package/dist/providers/cli-provider.js.map +1 -1
  87. package/package.json +1 -1
package/README.md CHANGED
@@ -71,6 +71,7 @@ export AI_RUNTIME_CODEX_MODEL="gpt-5-codex"
71
71
  ```bash
72
72
  aion --help
73
73
  aion menu
74
+ aion next
74
75
  aion audit .
75
76
  aion analyze .
76
77
  aion "review this project and find risky code"
@@ -102,12 +103,14 @@ The menu includes:
102
103
  ### Audit
103
104
 
104
105
  ```bash
106
+ aion audit . --dry-run
105
107
  aion audit . --local-only
106
108
  aion audit .
107
109
  aion audit . --preset security
108
110
  aion audit . --preset ai --budget normal
109
111
  aion audit . --domains security,dependencies,compliance
110
112
  aion audit . --preset security --max-files 20
113
+ aion audit . --ai-context-budget 6000
111
114
  ```
112
115
 
113
116
  Useful presets:
@@ -124,6 +127,7 @@ Useful presets:
124
127
  Cost controls:
125
128
 
126
129
  ```bash
130
+ aion audit . --dry-run
127
131
  aion audit . --local-only
128
132
  aion audit . --preset security --scanners 2
129
133
  aion audit . --preset security --max-files 20
@@ -132,6 +136,17 @@ aion audit . --preset full --force-full --budget deep --scanner-timeout 240
132
136
 
133
137
  Local scans still inspect the whole repository. `--max-files` only limits the prioritized file list handed to AI scanners.
134
138
 
139
+ Recommended low-cost audit flow:
140
+
141
+ ```bash
142
+ aion audit . --dry-run --max-files 20
143
+ aion audit . --local-only
144
+ aion audit . --preset security --scanners 2 --max-files 20
145
+ aion context --audit --budget 6000
146
+ ```
147
+
148
+ This produces compact reports that are safe to send to another AI without pasting raw JSON or all source files.
149
+
135
150
  ### Analyze, Review, Fix
136
151
 
137
152
  ```bash
@@ -158,7 +173,13 @@ aion scan cognitive-load
158
173
  ```bash
159
174
  aion health
160
175
  aion report
176
+ aion report latest
161
177
  aion report --md
178
+ aion context --audit
179
+ aion context "audit report generation" --budget 8000
180
+ aion search "audit report generation" --rebuild
181
+ aion search "where reports are saved" --semantic --rebuild
182
+ aion tree --hotspots --rebuild
162
183
  aion graph
163
184
  aion churn
164
185
  aion patterns
@@ -194,6 +215,8 @@ Each organized audit run contains:
194
215
 
195
216
  - `index.html`
196
217
  - `summary.md`
218
+ - `digest.md`
219
+ - `ai-context.md`
197
220
  - `action-plan.md`
198
221
  - `report.json`
199
222
  - `action-items.json`
@@ -203,6 +226,42 @@ Each organized audit run contains:
203
226
  - `findings-by-severity.json`
204
227
  - `findings-by-category.json`
205
228
 
229
+ For human reading, open `digest.md` or `index.html`.
230
+
231
+ For asking another AI to analyze the audit, use `ai-context.md` or generate a fresh compact file:
232
+
233
+ ```bash
234
+ aion context --audit --budget 6000
235
+ ```
236
+
237
+ ## Low-Token Workflow
238
+
239
+ Run:
240
+
241
+ ```bash
242
+ aion next
243
+ ```
244
+
245
+ This prints the recommended sequence for avoiding large token spend. The default flow is:
246
+
247
+ ```bash
248
+ aion audit . --dry-run --max-files 20
249
+ aion audit . --local-only
250
+ aion audit . --preset security --scanners 2 --max-files 20
251
+ aion context --audit --budget 6000
252
+ aion report latest
253
+ ```
254
+
255
+ `aion search --semantic` uses a local deterministic vector index under `.ai-runtime/repo-vectors.json`; it does not call an AI API.
256
+
257
+ ## Provider Safety
258
+
259
+ CLI subprocesses receive a minimal environment instead of the full parent shell environment. Codex `--ignore-rules` is disabled by default. To explicitly opt in:
260
+
261
+ ```bash
262
+ export AION_CODEX_IGNORE_RULES=1
263
+ ```
264
+
206
265
  Override the task store path:
207
266
 
208
267
  ```bash
@@ -1 +1 @@
1
- {"version":3,"file":"base-agent.d.ts","sourceRoot":"","sources":["../../src/agents/base-agent.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAI7E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,SAAS,CAAC;IACzB,MAAM,EAAE,CAAC,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,8BAAsB,SAAS,CAAC,MAAM,EAAE,OAAO;IACjC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW;gBAAnB,MAAM,EAAE,WAAW;IAElD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAC1D,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IACrD,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS;IAC3D,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAEnD,GAAG,CACP,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,aAAqC,EAC7C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IA6B7B,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,WAAW;IAWnB,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC;CAsCvD"}
1
+ {"version":3,"file":"base-agent.d.ts","sourceRoot":"","sources":["../../src/agents/base-agent.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAI7E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,SAAS,CAAC;IACzB,MAAM,EAAE,CAAC,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,8BAAsB,SAAS,CAAC,MAAM,EAAE,OAAO;IACjC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW;gBAAnB,MAAM,EAAE,WAAW;IAElD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAC1D,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IACrD,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS;IAC3D,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAEnD,GAAG,CACP,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,aAAqC,EAC7C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAgC7B,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,WAAW;IAiBnB,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC;CAsCvD"}
@@ -11,15 +11,20 @@ export class BaseAgent {
11
11
  const start = Date.now();
12
12
  const worktreePath = this.getWorktreePath(input);
13
13
  this.writeClaudeMd(worktreePath);
14
- const userMessage = this.applyLimits(this.buildUserMessage(input), policy);
15
- const rawText = await createProvider(this.config.provider, policy).run({
16
- agentName: this.config.name,
17
- cwd: worktreePath,
18
- systemPrompt: this.config.systemPrompt,
19
- userMessage,
20
- policy,
21
- }, onChunk);
22
- const output = this.parseOutput(rawText);
14
+ const attempt = async (charOverride) => {
15
+ const userMessage = this.applyLimits(this.buildUserMessage(input), policy, charOverride);
16
+ return createProvider(this.config.provider, policy).run({ agentName: this.config.name, cwd: worktreePath, systemPrompt: this.config.systemPrompt, userMessage, policy }, onChunk);
17
+ };
18
+ let rawText = await attempt();
19
+ let output;
20
+ try {
21
+ output = this.parseOutput(rawText);
22
+ }
23
+ catch {
24
+ // Retry once with 60% context if JSON parsing failed (likely context truncation)
25
+ rawText = await attempt(Math.floor(policy.maxOutputChars * 0.6));
26
+ output = this.parseOutput(rawText);
27
+ }
23
28
  return {
24
29
  agentName: this.config.name,
25
30
  resolvedState: this.resolveState(output),
@@ -33,15 +38,21 @@ export class BaseAgent {
33
38
  mkdirSync(claudeDir, { recursive: true });
34
39
  writeFileSync(join(claudeDir, 'CLAUDE.md'), this.config.systemPrompt, 'utf8');
35
40
  }
36
- applyLimits(message, policy) {
41
+ applyLimits(message, policy, charOverride) {
37
42
  const policyBlock = `Runtime policy:
38
43
  - Maximum read per file/context block: ${policy.maxFileLines} lines.
39
44
  - Maximum retained CLI output: ${policy.maxOutputChars} chars.
40
45
  - Budget: ${policy.budget}.
41
46
 
42
47
  `;
43
- const limitedLines = limitLines(policyBlock + message, policy.maxFileLines * 8);
44
- return limitChars(limitedLines, policy.maxOutputChars);
48
+ const full = policyBlock + message;
49
+ const limitedLines = limitLines(full, policy.maxFileLines * 8);
50
+ const charCap = charOverride ?? policy.maxOutputChars;
51
+ const limited = limitChars(limitedLines, charCap);
52
+ if (limited.length < full.length) {
53
+ return limited + '\n\n[CONTEXT TRUNCATED — respond using only what is visible above; output valid JSON from partial data]';
54
+ }
55
+ return limited;
45
56
  }
46
57
  parseJson(text, label) {
47
58
  const cleaned = text.replace(/^```(?:json)?\n?/m, '').replace(/\n?```$/m, '').trim();
@@ -1 +1 @@
1
- {"version":3,"file":"base-agent.js","sourceRoot":"","sources":["../../src/agents/base-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-agent.js","sourceRoot":"","sources":["../../src/agents/base-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAgB9D,MAAM,OAAgB,SAAS;IACE;IAA/B,YAA+B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAOtD,KAAK,CAAC,GAAG,CACP,KAAa,EACb,SAAwB,mBAAmB,EAAE,EAC7C,OAAmD;QAEnD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAEjC,MAAM,OAAO,GAAG,KAAK,EAAE,YAAqB,EAAmB,EAAE;YAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACzF,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,GAAG,CACrD,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,EAC/G,OAAO,CACR,CAAC;QACJ,CAAC,CAAC;QAEF,IAAI,OAAO,GAAG,MAAM,OAAO,EAAE,CAAC;QAC9B,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,iFAAiF;YACjF,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC,CAAC;YACjE,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YAC3B,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YACxC,MAAM;YACN,OAAO;YACP,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;SAC/B,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,YAAoB;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAChD,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAChF,CAAC;IAEO,WAAW,CAAC,OAAe,EAAE,MAAqB,EAAE,YAAqB;QAC/E,MAAM,WAAW,GAAG;yCACiB,MAAM,CAAC,YAAY;iCAC3B,MAAM,CAAC,cAAc;YAC1C,MAAM,CAAC,MAAM;;CAExB,CAAC;QACE,MAAM,IAAI,GAAG,WAAW,GAAG,OAAO,CAAC;QACnC,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,YAAY,IAAI,MAAM,CAAC,cAAc,CAAC;QACtD,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACjC,OAAO,OAAO,GAAG,yGAAyG,CAAC;QAC7H,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAES,SAAS,CAAI,IAAY,EAAE,KAAa;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrF,qFAAqF;QACrF,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QACf,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,OAAO,EAAE,CAAC;gBAAC,OAAO,GAAG,KAAK,CAAC;gBAAC,SAAS;YAAC,CAAC;YAC3C,IAAI,EAAE,KAAK,IAAI,IAAI,QAAQ,EAAE,CAAC;gBAAC,OAAO,GAAG,IAAI,CAAC;gBAAC,SAAS;YAAC,CAAC;YAC1D,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBAAC,QAAQ,GAAG,CAAC,QAAQ,CAAC;gBAAC,SAAS;YAAC,CAAC;YACnD,IAAI,QAAQ;gBAAE,SAAS;YAEvB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACf,IAAI,KAAK,KAAK,CAAC;oBAAE,KAAK,GAAG,CAAC,CAAC;gBAC3B,KAAK,EAAE,CAAC;YACV,CAAC;iBAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACtB,KAAK,EAAE,CAAC;gBACR,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;oBAChC,IAAI,CAAC;wBACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAM,CAAC;oBACtD,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,4BAA4B,MAAM,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;oBAC7F,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,8CAA8C,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,4BAA4B,MAAM,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;CACF"}
@@ -7,6 +7,9 @@ export interface SynthesizerInput {
7
7
  worktreePath: string;
8
8
  }
9
9
  export declare class SynthesizerAgent extends BaseAgent<SynthesizerInput, AuditReport> {
10
+ private mergedFindings;
11
+ private domainSections;
12
+ private totalFiles;
10
13
  constructor();
11
14
  protected getWorktreePath(input: SynthesizerInput): string;
12
15
  protected buildUserMessage(input: SynthesizerInput): string;
@@ -1 +1 @@
1
- {"version":3,"file":"synthesizer.d.ts","sourceRoot":"","sources":["../../src/agents/synthesizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAqB,KAAK,WAAW,EAAqB,KAAK,UAAU,EAAsB,MAAM,qBAAqB,CAAC;AAClI,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AA6CD,qBAAa,gBAAiB,SAAQ,SAAS,CAAC,gBAAgB,EAAE,WAAW,CAAC;;IAS5E,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM;IAI1D,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM;IAoB3D,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;IA2BhD,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS;CAGxD"}
1
+ {"version":3,"file":"synthesizer.d.ts","sourceRoot":"","sources":["../../src/agents/synthesizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,UAAU,EAAsB,MAAM,qBAAqB,CAAC;AAC/G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAuGD,qBAAa,gBAAiB,SAAQ,SAAS,CAAC,gBAAgB,EAAE,WAAW,CAAC;IAC5E,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,UAAU,CAAK;;IAUvB,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM;IAI1D,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM;IAkB3D,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;IAkBhD,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS;CAGxD"}
@@ -1,46 +1,97 @@
1
1
  import { BaseAgent } from './base-agent.js';
2
2
  import { buildSynthesizerPrompt } from '../prompts/synthesizer.js';
3
- import { AuditReportSchema } from '../schemas/audit.js';
3
+ import { z } from 'zod';
4
+ const SEVERITY_ORDER = ['critical', 'high', 'medium', 'low', 'info'];
5
+ const SEVERITY_RANK = { critical: 5, high: 4, medium: 3, low: 2, info: 1 };
4
6
  const MIN_PER_DOMAIN = 2;
5
- function buildDomainSections(scanReports) {
6
- const byDomain = new Map();
7
+ // Compact schema — Claude only writes summary + topPriorities
8
+ const SynthOutputSchema = z.object({
9
+ summary: z.string(),
10
+ topPriorities: z.array(z.string()),
11
+ });
12
+ // ── Local helpers ─────────────────────────────────────────────────────────────
13
+ function deduplicateAndRank(scanReports) {
14
+ const seen = new Map();
7
15
  for (const report of scanReports) {
8
- for (const finding of report.findings) {
9
- const d = finding.category;
10
- if (!byDomain.has(d))
11
- byDomain.set(d, []);
12
- byDomain.get(d).push(finding);
16
+ for (const f of report.findings) {
17
+ const key = `${f.file}:${f.line ?? ''}:${f.category}`;
18
+ const existing = seen.get(key);
19
+ if (!existing || (SEVERITY_RANK[f.severity] ?? 0) > (SEVERITY_RANK[existing.severity] ?? 0)) {
20
+ seen.set(key, existing
21
+ ? { ...f, persona: [existing.persona, f.persona].filter(Boolean).join('+') }
22
+ : f);
23
+ }
13
24
  }
14
25
  }
15
- return [...byDomain.entries()].map(([domain, findings]) => ({
16
- domain,
17
- findings: findings.sort((a, b) => severityRank(b.severity) - severityRank(a.severity)),
18
- summary: `${findings.length} finding(s) in ${domain}`,
19
- }));
26
+ return [...seen.values()].sort((a, b) => (SEVERITY_RANK[b.severity] ?? 0) - (SEVERITY_RANK[a.severity] ?? 0));
20
27
  }
21
- function severityRank(s) {
22
- return { critical: 5, high: 4, medium: 3, low: 2, info: 1 }[s] ?? 0;
23
- }
24
- function guaranteePerDomain(reports, merged) {
25
- const mergedKeys = new Set(merged.map((f) => `${f.file}:${f.line}:${f.finding}`));
28
+ function ensurePerDomainCoverage(deduped, scanReports) {
29
+ const dedupedKeys = new Set(deduped.map((f) => `${f.file}:${f.line ?? ''}:${f.category}`));
26
30
  const extras = [];
27
- for (const report of reports) {
31
+ for (const report of scanReports) {
28
32
  const domain = report.findings[0]?.category;
29
33
  if (!domain)
30
34
  continue;
31
- const inMerged = merged.filter((f) => f.category === domain).length;
32
- if (inMerged >= MIN_PER_DOMAIN)
35
+ const inDeduped = deduped.filter((f) => f.category === domain).length;
36
+ if (inDeduped >= MIN_PER_DOMAIN)
33
37
  continue;
34
- const needed = MIN_PER_DOMAIN - inMerged;
38
+ const needed = MIN_PER_DOMAIN - inDeduped;
35
39
  const candidates = report.findings
36
- .filter((f) => !mergedKeys.has(`${f.file}:${f.line}:${f.finding}`))
40
+ .filter((f) => !dedupedKeys.has(`${f.file}:${f.line ?? ''}:${f.category}`))
37
41
  .slice(0, needed);
38
42
  extras.push(...candidates);
39
- candidates.forEach((f) => mergedKeys.add(`${f.file}:${f.line}:${f.finding}`));
43
+ candidates.forEach((f) => dedupedKeys.add(`${f.file}:${f.line ?? ''}:${f.category}`));
40
44
  }
41
45
  return extras;
42
46
  }
47
+ function buildDomainSections(findings) {
48
+ const byDomain = new Map();
49
+ for (const f of findings) {
50
+ if (!byDomain.has(f.category))
51
+ byDomain.set(f.category, []);
52
+ byDomain.get(f.category).push(f);
53
+ }
54
+ return [...byDomain.entries()].map(([domain, domainFindings]) => ({
55
+ domain,
56
+ findings: domainFindings.sort((a, b) => (SEVERITY_RANK[b.severity] ?? 0) - (SEVERITY_RANK[a.severity] ?? 0)),
57
+ summary: `${domainFindings.length} finding(s) in ${domain}`,
58
+ }));
59
+ }
60
+ // Build a compact text digest — much smaller than raw JSON.
61
+ // Claude only reads this to write summary + topPriorities.
62
+ function buildCompactDigest(findings, totalFiles, domainSections) {
63
+ const lines = [
64
+ `## Audit Digest: ${findings.length} findings across ${domainSections.length} domains (${totalFiles} files scanned)`,
65
+ '',
66
+ ];
67
+ for (const sev of SEVERITY_ORDER) {
68
+ const group = findings.filter((f) => f.severity === sev);
69
+ if (group.length === 0)
70
+ continue;
71
+ lines.push(`${sev.toUpperCase()} (${group.length}):`);
72
+ for (const f of group.slice(0, 12)) {
73
+ const loc = f.line ? `${f.file}:${f.line}` : f.file;
74
+ lines.push(`- [${f.category}] ${loc} — ${f.finding.slice(0, 120)}`);
75
+ }
76
+ if (group.length > 12)
77
+ lines.push(` ... ${group.length - 12} more`);
78
+ lines.push('');
79
+ }
80
+ lines.push('Domain coverage:');
81
+ for (const s of domainSections) {
82
+ const bySev = SEVERITY_ORDER.map((sv) => {
83
+ const n = s.findings.filter((f) => f.severity === sv).length;
84
+ return n > 0 ? `${n} ${sv}` : null;
85
+ }).filter(Boolean).join(', ');
86
+ lines.push(`- ${s.domain}: ${s.findings.length} (${bySev || 'none'})`);
87
+ }
88
+ return lines.join('\n');
89
+ }
90
+ // ── Agent ─────────────────────────────────────────────────────────────────────
43
91
  export class SynthesizerAgent extends BaseAgent {
92
+ mergedFindings = [];
93
+ domainSections = [];
94
+ totalFiles = 0;
44
95
  constructor() {
45
96
  super({
46
97
  name: 'synthesizer',
@@ -52,42 +103,32 @@ export class SynthesizerAgent extends BaseAgent {
52
103
  return input.worktreePath;
53
104
  }
54
105
  buildUserMessage(input) {
55
- const parts = input.scanReports.map((r, i) => {
56
- const header = `=== Scanner ${i + 1} (${r.findings[0]?.category ?? 'unknown'}) ===`;
57
- const findingsCompact = r.findings.map((f) => JSON.stringify(f)).join('\n');
58
- return `${header}\nSummary: ${r.summary}\nFindings:\n${findingsCompact}`;
59
- });
60
- return `Total files: ${input.totalFiles} | Scanners: ${input.scanReports.length}
61
-
62
- ${parts.join('\n\n')}
63
-
64
- Rules:
65
- - Include AT LEAST ${MIN_PER_DOMAIN} findings per scanner domain regardless of severity
66
- - Merge duplicates (same file+line), keep the more descriptive finding
67
- - Rank overall by severity but preserve domain diversity in topPriorities
68
- - topPriorities must include at least one entry per domain that has critical/high findings
106
+ // All heavy work is done locally here before calling Claude.
107
+ const deduped = deduplicateAndRank(input.scanReports);
108
+ const extras = ensurePerDomainCoverage(deduped, input.scanReports);
109
+ const allFindings = [...deduped, ...extras].sort((a, b) => (SEVERITY_RANK[b.severity] ?? 0) - (SEVERITY_RANK[a.severity] ?? 0));
110
+ this.mergedFindings = allFindings;
111
+ this.domainSections = buildDomainSections(allFindings);
112
+ this.totalFiles = input.totalFiles;
113
+ return buildCompactDigest(allFindings, input.totalFiles, this.domainSections) + `
69
114
 
70
- Merge, deduplicate, rank by severity, and output the unified audit report JSON.`;
115
+ Write the summary and topPriorities for this audit. Output ONLY valid JSON:
116
+ { "summary": "...", "topPriorities": ["...", "...", "...", "...", "..."] }`;
71
117
  }
72
118
  parseOutput(text) {
73
119
  const raw = this.parseJson(text, 'SynthesizerAgent');
74
- const result = AuditReportSchema.safeParse(raw);
120
+ const result = SynthOutputSchema.safeParse(raw);
75
121
  if (!result.success) {
76
122
  throw new Error(`SynthesizerAgent schema error: ${result.error.message}`);
77
123
  }
78
- const report = result.data;
79
- // Post-process: guarantee per-domain representation and add sections
80
- const extras = guaranteePerDomain([], report.findings);
81
- const allFindings = [...report.findings, ...extras];
82
- const sections = buildDomainSections(report.sections
83
- ? report.sections.map((s) => ({ filesScanned: [], findings: s.findings, summary: s.summary }))
84
- : [{ filesScanned: [], findings: allFindings, summary: '' }]);
85
124
  return {
86
- ...report,
87
- findings: allFindings,
88
- sections,
89
- criticalCount: allFindings.filter((f) => f.severity === 'critical').length,
90
- highCount: allFindings.filter((f) => f.severity === 'high').length,
125
+ findings: this.mergedFindings,
126
+ criticalCount: this.mergedFindings.filter((f) => f.severity === 'critical').length,
127
+ highCount: this.mergedFindings.filter((f) => f.severity === 'high').length,
128
+ totalFiles: this.totalFiles,
129
+ summary: result.data.summary,
130
+ topPriorities: result.data.topPriorities,
131
+ sections: this.domainSections,
91
132
  };
92
133
  }
93
134
  resolveState(_output) {
@@ -1 +1 @@
1
- {"version":3,"file":"synthesizer.js","sourceRoot":"","sources":["../../src/agents/synthesizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"synthesizer.js","sourceRoot":"","sources":["../../src/agents/synthesizer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyjBzC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkKpD"}
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+GzC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmGpD"}