@owasp-aghast/aghast 0.8.0-beta.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 (178) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +127 -0
  3. package/assets/img/aghastowaspcaption.png +0 -0
  4. package/assets/txt/logo.txt +52 -0
  5. package/config/pricing.json +42 -0
  6. package/config/prompts/false-positive-validation.md +78 -0
  7. package/config/prompts/general-vuln-discovery.md +99 -0
  8. package/config/prompts/generic-instructions.md +59 -0
  9. package/config/prompts/test-cheaper-instructions.md +57 -0
  10. package/dist/budget.d.ts +62 -0
  11. package/dist/budget.d.ts.map +1 -0
  12. package/dist/budget.js +137 -0
  13. package/dist/budget.js.map +1 -0
  14. package/dist/build-config.d.ts +15 -0
  15. package/dist/build-config.d.ts.map +1 -0
  16. package/dist/build-config.js +568 -0
  17. package/dist/build-config.js.map +1 -0
  18. package/dist/check-library.d.ts +88 -0
  19. package/dist/check-library.d.ts.map +1 -0
  20. package/dist/check-library.js +461 -0
  21. package/dist/check-library.js.map +1 -0
  22. package/dist/check-types.d.ts +35 -0
  23. package/dist/check-types.d.ts.map +1 -0
  24. package/dist/check-types.js +66 -0
  25. package/dist/check-types.js.map +1 -0
  26. package/dist/claude-code-provider.d.ts +29 -0
  27. package/dist/claude-code-provider.d.ts.map +1 -0
  28. package/dist/claude-code-provider.js +347 -0
  29. package/dist/claude-code-provider.js.map +1 -0
  30. package/dist/cli.d.ts +13 -0
  31. package/dist/cli.d.ts.map +1 -0
  32. package/dist/cli.js +109 -0
  33. package/dist/cli.js.map +1 -0
  34. package/dist/colors.d.ts +7 -0
  35. package/dist/colors.d.ts.map +1 -0
  36. package/dist/colors.js +18 -0
  37. package/dist/colors.js.map +1 -0
  38. package/dist/cost-calculator.d.ts +80 -0
  39. package/dist/cost-calculator.d.ts.map +1 -0
  40. package/dist/cost-calculator.js +226 -0
  41. package/dist/cost-calculator.js.map +1 -0
  42. package/dist/defaults.d.ts +21 -0
  43. package/dist/defaults.d.ts.map +1 -0
  44. package/dist/defaults.js +21 -0
  45. package/dist/defaults.js.map +1 -0
  46. package/dist/diff-filter.d.ts +50 -0
  47. package/dist/diff-filter.d.ts.map +1 -0
  48. package/dist/diff-filter.js +130 -0
  49. package/dist/diff-filter.js.map +1 -0
  50. package/dist/diff-parser.d.ts +40 -0
  51. package/dist/diff-parser.d.ts.map +1 -0
  52. package/dist/diff-parser.js +112 -0
  53. package/dist/diff-parser.js.map +1 -0
  54. package/dist/diff-unit-matcher.d.ts +53 -0
  55. package/dist/diff-unit-matcher.d.ts.map +1 -0
  56. package/dist/diff-unit-matcher.js +156 -0
  57. package/dist/diff-unit-matcher.js.map +1 -0
  58. package/dist/discoveries/openant-discovery.d.ts +10 -0
  59. package/dist/discoveries/openant-discovery.d.ts.map +1 -0
  60. package/dist/discoveries/openant-discovery.js +56 -0
  61. package/dist/discoveries/openant-discovery.js.map +1 -0
  62. package/dist/discoveries/sarif-discovery.d.ts +9 -0
  63. package/dist/discoveries/sarif-discovery.d.ts.map +1 -0
  64. package/dist/discoveries/sarif-discovery.js +56 -0
  65. package/dist/discoveries/sarif-discovery.js.map +1 -0
  66. package/dist/discoveries/semgrep-discovery.d.ts +9 -0
  67. package/dist/discoveries/semgrep-discovery.d.ts.map +1 -0
  68. package/dist/discoveries/semgrep-discovery.js +61 -0
  69. package/dist/discoveries/semgrep-discovery.js.map +1 -0
  70. package/dist/discovery.d.ts +100 -0
  71. package/dist/discovery.d.ts.map +1 -0
  72. package/dist/discovery.js +49 -0
  73. package/dist/discovery.js.map +1 -0
  74. package/dist/error-codes.d.ts +46 -0
  75. package/dist/error-codes.d.ts.map +1 -0
  76. package/dist/error-codes.js +70 -0
  77. package/dist/error-codes.js.map +1 -0
  78. package/dist/formatters/index.d.ts +10 -0
  79. package/dist/formatters/index.d.ts.map +1 -0
  80. package/dist/formatters/index.js +23 -0
  81. package/dist/formatters/index.js.map +1 -0
  82. package/dist/formatters/json-formatter.d.ts +11 -0
  83. package/dist/formatters/json-formatter.d.ts.map +1 -0
  84. package/dist/formatters/json-formatter.js +11 -0
  85. package/dist/formatters/json-formatter.js.map +1 -0
  86. package/dist/formatters/sarif-formatter.d.ts +18 -0
  87. package/dist/formatters/sarif-formatter.d.ts.map +1 -0
  88. package/dist/formatters/sarif-formatter.js +103 -0
  89. package/dist/formatters/sarif-formatter.js.map +1 -0
  90. package/dist/formatters/types.d.ts +11 -0
  91. package/dist/formatters/types.d.ts.map +1 -0
  92. package/dist/formatters/types.js +6 -0
  93. package/dist/formatters/types.js.map +1 -0
  94. package/dist/index.d.ts +7 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +754 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/logging.d.ts +140 -0
  99. package/dist/logging.d.ts.map +1 -0
  100. package/dist/logging.js +344 -0
  101. package/dist/logging.js.map +1 -0
  102. package/dist/mock-agent-provider.d.ts +24 -0
  103. package/dist/mock-agent-provider.d.ts.map +1 -0
  104. package/dist/mock-agent-provider.js +38 -0
  105. package/dist/mock-agent-provider.js.map +1 -0
  106. package/dist/mock-ai-provider.d.ts +21 -0
  107. package/dist/mock-ai-provider.d.ts.map +1 -0
  108. package/dist/mock-ai-provider.js +31 -0
  109. package/dist/mock-ai-provider.js.map +1 -0
  110. package/dist/new-check.d.ts +13 -0
  111. package/dist/new-check.d.ts.map +1 -0
  112. package/dist/new-check.js +515 -0
  113. package/dist/new-check.js.map +1 -0
  114. package/dist/openant-loader.d.ts +105 -0
  115. package/dist/openant-loader.d.ts.map +1 -0
  116. package/dist/openant-loader.js +135 -0
  117. package/dist/openant-loader.js.map +1 -0
  118. package/dist/openant-runner.d.ts +30 -0
  119. package/dist/openant-runner.d.ts.map +1 -0
  120. package/dist/openant-runner.js +113 -0
  121. package/dist/openant-runner.js.map +1 -0
  122. package/dist/opencode-provider.d.ts +63 -0
  123. package/dist/opencode-provider.d.ts.map +1 -0
  124. package/dist/opencode-provider.js +719 -0
  125. package/dist/opencode-provider.js.map +1 -0
  126. package/dist/prompt-template.d.ts +12 -0
  127. package/dist/prompt-template.d.ts.map +1 -0
  128. package/dist/prompt-template.js +36 -0
  129. package/dist/prompt-template.js.map +1 -0
  130. package/dist/provider-registry.d.ts +15 -0
  131. package/dist/provider-registry.d.ts.map +1 -0
  132. package/dist/provider-registry.js +29 -0
  133. package/dist/provider-registry.js.map +1 -0
  134. package/dist/provider-utils.d.ts +52 -0
  135. package/dist/provider-utils.d.ts.map +1 -0
  136. package/dist/provider-utils.js +40 -0
  137. package/dist/provider-utils.js.map +1 -0
  138. package/dist/repository-analyzer.d.ts +68 -0
  139. package/dist/repository-analyzer.d.ts.map +1 -0
  140. package/dist/repository-analyzer.js +238 -0
  141. package/dist/repository-analyzer.js.map +1 -0
  142. package/dist/response-parser.d.ts +14 -0
  143. package/dist/response-parser.d.ts.map +1 -0
  144. package/dist/response-parser.js +111 -0
  145. package/dist/response-parser.js.map +1 -0
  146. package/dist/runtime-config.d.ts +15 -0
  147. package/dist/runtime-config.d.ts.map +1 -0
  148. package/dist/runtime-config.js +187 -0
  149. package/dist/runtime-config.js.map +1 -0
  150. package/dist/sarif-parser.d.ts +20 -0
  151. package/dist/sarif-parser.d.ts.map +1 -0
  152. package/dist/sarif-parser.js +76 -0
  153. package/dist/sarif-parser.js.map +1 -0
  154. package/dist/scan-history.d.ts +82 -0
  155. package/dist/scan-history.d.ts.map +1 -0
  156. package/dist/scan-history.js +127 -0
  157. package/dist/scan-history.js.map +1 -0
  158. package/dist/scan-runner.d.ts +122 -0
  159. package/dist/scan-runner.d.ts.map +1 -0
  160. package/dist/scan-runner.js +928 -0
  161. package/dist/scan-runner.js.map +1 -0
  162. package/dist/semgrep-runner.d.ts +25 -0
  163. package/dist/semgrep-runner.d.ts.map +1 -0
  164. package/dist/semgrep-runner.js +100 -0
  165. package/dist/semgrep-runner.js.map +1 -0
  166. package/dist/snippet-extractor.d.ts +25 -0
  167. package/dist/snippet-extractor.d.ts.map +1 -0
  168. package/dist/snippet-extractor.js +56 -0
  169. package/dist/snippet-extractor.js.map +1 -0
  170. package/dist/stats.d.ts +11 -0
  171. package/dist/stats.d.ts.map +1 -0
  172. package/dist/stats.js +197 -0
  173. package/dist/stats.js.map +1 -0
  174. package/dist/types.d.ts +321 -0
  175. package/dist/types.d.ts.map +1 -0
  176. package/dist/types.js +19 -0
  177. package/dist/types.js.map +1 -0
  178. package/package.json +61 -0
@@ -0,0 +1,321 @@
1
+ /**
2
+ * Core type definitions for aghast.
3
+ * Based on SPECIFICATION.md Appendix A.
4
+ */
5
+ export declare const DEFAULT_MODEL = "haiku";
6
+ export declare const MOCK_MODEL_NAME = "mock";
7
+ export interface TokenUsage {
8
+ inputTokens: number;
9
+ outputTokens: number;
10
+ cacheCreationInputTokens?: number;
11
+ cacheReadInputTokens?: number;
12
+ /** OpenCode-only; billed at output rate by the calculator fallback. */
13
+ reasoningTokens?: number;
14
+ totalTokens: number;
15
+ reportedCost?: {
16
+ amountUsd: number;
17
+ source: 'claude-agent-sdk' | 'opencode';
18
+ /**
19
+ * true when AGHAST_LOCAL_CLAUDE=true — user didn't pay this amount via API.
20
+ * Populated exclusively by ClaudeCodeProvider; other providers should leave it absent.
21
+ */
22
+ coveredBySubscription?: boolean;
23
+ };
24
+ }
25
+ export interface CheckRegistryEntry {
26
+ id: string;
27
+ repositories: string[];
28
+ excludeRepositories?: string[];
29
+ enabled?: boolean;
30
+ }
31
+ export interface CheckDefinition {
32
+ id: string;
33
+ name: string;
34
+ instructionsFile?: string;
35
+ severity?: 'critical' | 'high' | 'medium' | 'low' | 'informational';
36
+ confidence?: 'high' | 'medium' | 'low';
37
+ model?: string;
38
+ checkTarget?: CheckTargetDefinition;
39
+ applicablePaths?: string[];
40
+ excludedPaths?: string[];
41
+ }
42
+ export interface SecurityCheck {
43
+ id: string;
44
+ name: string;
45
+ repositories: string[];
46
+ excludeRepositories?: string[];
47
+ checkTarget?: CheckTargetDefinition;
48
+ instructionsFile?: string;
49
+ applicablePaths?: string[];
50
+ excludedPaths?: string[];
51
+ enabled?: boolean;
52
+ severity?: 'critical' | 'high' | 'medium' | 'low' | 'informational';
53
+ confidence?: 'high' | 'medium' | 'low';
54
+ /** AI model override for this specific check. */
55
+ model?: string;
56
+ /** Path to the check folder (set during resolution). */
57
+ checkDir?: string;
58
+ }
59
+ export interface OpenAntFilterConfig {
60
+ unitTypes?: string[];
61
+ excludeUnitTypes?: string[];
62
+ securityClassifications?: string[];
63
+ reachableOnly?: boolean;
64
+ entryPointsOnly?: boolean;
65
+ minConfidence?: number;
66
+ }
67
+ export interface CheckTargetDefinition {
68
+ type: 'targeted' | 'static' | 'repository';
69
+ discovery?: 'semgrep' | 'openant' | 'sarif';
70
+ rules?: string | string[];
71
+ config?: string;
72
+ sarifFile?: string;
73
+ maxTargets?: number;
74
+ concurrency?: number;
75
+ /** Cap on issues returned per target; omit for unlimited. See docs/configuration.md. */
76
+ maxIssuesPerTarget?: number;
77
+ /** Analysis mode: determines the AI's approach to each target. */
78
+ analysisMode?: 'custom' | 'false-positive-validation' | 'general-vuln-discovery';
79
+ openant?: OpenAntFilterConfig;
80
+ /**
81
+ * Opt-out for post-discovery diff filtering. Set to `false` to skip the
82
+ * filter for this check even when a diff source is available at scan time.
83
+ * When unset (or `true`), filtering is applied automatically whenever a
84
+ * diff source is present and the discovery supports diff filtering.
85
+ */
86
+ diffFilter?: boolean;
87
+ /**
88
+ * Git ref to diff against for this check (e.g. 'main', 'HEAD~1').
89
+ *
90
+ * Overridden by any runtime diff source. Precedence, highest to lowest:
91
+ * 1. CLI `--diff-file <path>` (CLI only; no AGHAST_DIFF_FILE env var
92
+ * equivalent) — when present, bypasses all ref sources including
93
+ * this field; the file is used directly.
94
+ * 2. CLI `--diff-ref <ref>`
95
+ * 3. `AGHAST_DIFF_REF` env var
96
+ * 4. Runtime config `diffRef`
97
+ * 5. This field (check-level fallback).
98
+ */
99
+ diffRef?: string;
100
+ }
101
+ export interface CheckTarget {
102
+ file: string;
103
+ startLine: number;
104
+ endLine: number;
105
+ message: string;
106
+ snippet?: string;
107
+ }
108
+ export interface DataFlowStep {
109
+ file: string;
110
+ lineNumber: number;
111
+ label: string;
112
+ }
113
+ export interface SecurityIssue {
114
+ checkId: string;
115
+ checkName: string;
116
+ file: string;
117
+ startLine: number;
118
+ endLine: number;
119
+ description: string;
120
+ codeSnippet?: string;
121
+ severity?: string;
122
+ confidence?: string;
123
+ recommendation?: string;
124
+ dataFlow?: DataFlowStep[];
125
+ }
126
+ export interface CheckResponse {
127
+ issues: AIIssue[];
128
+ flagged?: boolean;
129
+ summary?: string;
130
+ analysisNotes?: string;
131
+ }
132
+ /** Raw issue as returned by the AI (before enrichment). */
133
+ export interface AIIssue {
134
+ file: string;
135
+ startLine: number;
136
+ endLine: number;
137
+ description: string;
138
+ dataFlow?: DataFlowStep[];
139
+ }
140
+ export interface CheckExecutionSummary {
141
+ checkId: string;
142
+ checkName: string;
143
+ status: 'PASS' | 'FAIL' | 'FLAG' | 'ERROR';
144
+ issuesFound: number;
145
+ executionTime: number;
146
+ targetsAnalyzed?: number;
147
+ error?: string;
148
+ /**
149
+ * Raw text body of the agent provider's response, included in ERROR results
150
+ * for debugging. Field name retains "AI" (rather than "Agent") because the
151
+ * stored content is the LLM's raw text output — same rationale as
152
+ * AGHAST_MOCK_AI / AGHAST_AI_MODEL: the model and its output are AI/LLM
153
+ * concerns, the harness around them is the agent.
154
+ */
155
+ rawAiResponse?: string;
156
+ tokenUsage?: TokenUsage;
157
+ }
158
+ export interface ScanResults {
159
+ scanId: string;
160
+ timestamp: string;
161
+ version: string;
162
+ repository: RepositoryInfo;
163
+ issues: SecurityIssue[];
164
+ checks: CheckExecutionSummary[];
165
+ summary: ScanSummary;
166
+ executionTime: number;
167
+ startTime: string;
168
+ endTime: string;
169
+ agentProvider: {
170
+ name: string;
171
+ models: string[];
172
+ };
173
+ tokenUsage?: TokenUsage;
174
+ metadata?: Record<string, unknown>;
175
+ }
176
+ export interface RepositoryInfo {
177
+ path: string;
178
+ remoteUrl?: string;
179
+ branch?: string;
180
+ commit?: string;
181
+ isGitRepository: boolean;
182
+ }
183
+ export interface ScanSummary {
184
+ totalChecks: number;
185
+ passedChecks: number;
186
+ failedChecks: number;
187
+ flaggedChecks: number;
188
+ errorChecks: number;
189
+ totalIssues: number;
190
+ }
191
+ export interface RuntimeBudgetConfig {
192
+ perScan?: {
193
+ maxTokens?: number;
194
+ maxCostUsd?: number;
195
+ };
196
+ perPeriod?: {
197
+ window?: 'day' | 'week' | 'month';
198
+ maxCostUsd?: number;
199
+ };
200
+ thresholds?: {
201
+ warnAt?: number;
202
+ abortAt?: number;
203
+ };
204
+ }
205
+ export interface RuntimePricingConfig {
206
+ currency?: string;
207
+ models?: Record<string, {
208
+ inputPerMillion: number;
209
+ outputPerMillion: number;
210
+ cacheReadPerMillion?: number;
211
+ cacheWritePerMillion?: number;
212
+ }>;
213
+ }
214
+ export interface RuntimeConfig {
215
+ agentProvider?: {
216
+ name?: string;
217
+ model?: string;
218
+ };
219
+ reporting?: {
220
+ outputDirectory?: string;
221
+ outputFormat?: string;
222
+ };
223
+ logging?: {
224
+ logFile?: string;
225
+ logType?: string;
226
+ level?: string;
227
+ };
228
+ genericPrompt?: string;
229
+ failOnCheckFailure?: boolean;
230
+ /**
231
+ * Git ref to diff against. Auto-activates diff filtering on every check
232
+ * whose discovery supports it, unless the check opts out via diffFilter: false.
233
+ */
234
+ diffRef?: string;
235
+ budget?: RuntimeBudgetConfig;
236
+ pricing?: RuntimePricingConfig;
237
+ }
238
+ export interface AggregatedReport {
239
+ timestamp: string;
240
+ projectsScanned: number;
241
+ repositories: string[];
242
+ issues: AggregatedIssue[];
243
+ checks: AggregatedCheckSummary[];
244
+ projectSummaries: ProjectSummary[];
245
+ summary: ScanSummary;
246
+ }
247
+ export interface AggregatedIssue extends SecurityIssue {
248
+ projectName: string;
249
+ repositoryUrl?: string;
250
+ }
251
+ export interface AggregatedCheckSummary extends CheckExecutionSummary {
252
+ projectName: string;
253
+ timestamp: string;
254
+ jobUrl?: string;
255
+ branch?: string;
256
+ pipelineSource?: string;
257
+ }
258
+ export interface ProjectSummary {
259
+ projectName: string;
260
+ totalChecks: number;
261
+ passedChecks: number;
262
+ failedChecks: number;
263
+ errorChecks: number;
264
+ issuesFound: number;
265
+ timestamp: string;
266
+ jobUrl?: string;
267
+ branch?: string;
268
+ pipelineSource?: string;
269
+ }
270
+ export interface CheckDetails {
271
+ id: string;
272
+ name: string;
273
+ overview: string;
274
+ content: string;
275
+ }
276
+ export interface ProviderConfig {
277
+ apiKey?: string;
278
+ model?: string;
279
+ [key: string]: unknown;
280
+ }
281
+ export interface AgentResponse {
282
+ raw: string;
283
+ parsed?: CheckResponse;
284
+ tokenUsage?: TokenUsage;
285
+ }
286
+ /** Describes a single model exposed by a provider's `listModels()`. */
287
+ export interface ProviderModelInfo {
288
+ /** Model identifier as accepted by the provider (stored in runtime config). */
289
+ id: string;
290
+ /** Optional human-readable label shown in selection UIs. */
291
+ label?: string;
292
+ /** Optional one-line description shown in selection UIs. */
293
+ description?: string;
294
+ }
295
+ export interface AgentProvider {
296
+ initialize(config: ProviderConfig): Promise<void>;
297
+ executeCheck(instructions: string, repositoryPath: string, logPrefix?: string, options?: {
298
+ maxTurns?: number;
299
+ }): Promise<AgentResponse>;
300
+ validateConfig(): Promise<boolean>;
301
+ /**
302
+ * Check that required prerequisites (API keys, binaries, etc.) are available.
303
+ * Called before initialize() to give early feedback. Throws with a descriptive
304
+ * error message if a prerequisite is missing.
305
+ */
306
+ checkPrerequisites?(): void;
307
+ getModelName?(): string;
308
+ setModel?(model: string): void;
309
+ cleanup?(): Promise<void>;
310
+ /** Closed list of models this provider accepts. Used by `aghast build-config`. */
311
+ listModels?(): Promise<readonly ProviderModelInfo[]>;
312
+ }
313
+ /**
314
+ * Error thrown by agent providers for unrecoverable failures (e.g. 401 auth, rate limits).
315
+ * When caught by the scan runner, this signals that the entire scan should abort —
316
+ * no further checks or targets should be attempted.
317
+ */
318
+ export declare class FatalProviderError extends Error {
319
+ constructor(message: string);
320
+ }
321
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Core type definitions for aghast.
3
+ * Based on SPECIFICATION.md Appendix A.
4
+ */
5
+ // --- Default Model ---
6
+ export const DEFAULT_MODEL = 'haiku';
7
+ export const MOCK_MODEL_NAME = 'mock';
8
+ /**
9
+ * Error thrown by agent providers for unrecoverable failures (e.g. 401 auth, rate limits).
10
+ * When caught by the scan runner, this signals that the entire scan should abort —
11
+ * no further checks or targets should be attempted.
12
+ */
13
+ export class FatalProviderError extends Error {
14
+ constructor(message) {
15
+ super(message);
16
+ this.name = 'FatalProviderError';
17
+ }
18
+ }
19
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAwB;AAExB,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AA2WtC;;;;GAIG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF"}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@owasp-aghast/aghast",
3
+ "version": "0.8.0-beta.0",
4
+ "description": "AI Guided Hybrid Application Static Testing",
5
+ "type": "module",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/owasp-aghast/aghast.git"
9
+ },
10
+ "bin": {
11
+ "aghast": "dist/cli.js"
12
+ },
13
+ "files": [
14
+ "dist/",
15
+ "config/",
16
+ "assets/"
17
+ ],
18
+ "scripts": {
19
+ "prepare": "tsc",
20
+ "build": "tsc",
21
+ "test": "node --import tsx --test tests/*.test.ts",
22
+ "test:coverage": "node --experimental-test-coverage --import tsx --test tests/*.test.ts",
23
+ "test:ci": "node --import tsx --test --test-reporter=spec --test-reporter-destination=stdout --test-reporter=junit --test-reporter-destination=test-results.xml tests/*.test.ts",
24
+ "test:semgrep": "node --import tsx --test tests/semgrep-integration.itest.ts",
25
+ "test:openant": "node --import tsx --test tests/openant-integration.itest.ts",
26
+ "test:opencode": "node --import tsx --test --test-force-exit tests/opencode-integration.itest.ts",
27
+ "lint": "eslint src/ tests/",
28
+ "lint:fix": "eslint --fix src/ tests/",
29
+ "scan": "tsx src/cli.ts scan",
30
+ "new-check": "tsx src/cli.ts new-check",
31
+ "build-config": "tsx src/cli.ts build-config"
32
+ },
33
+ "keywords": [],
34
+ "author": "",
35
+ "license": "AGPL-3.0-or-later",
36
+ "engines": {
37
+ "node": ">=20.0.0"
38
+ },
39
+ "packageManager": "npm@10.9.2",
40
+ "devDependencies": {
41
+ "@eslint/js": "^10.0.1",
42
+ "@types/node": "^25.5.0",
43
+ "@types/picomatch": "^4.0.2",
44
+ "eslint": "^10.0.3",
45
+ "fast-check": "^4.6.0",
46
+ "tsx": "^4.21.0",
47
+ "typescript": "~6.0.2",
48
+ "typescript-eslint": "^8.57.1"
49
+ },
50
+ "dependencies": {
51
+ "@anthropic-ai/claude-agent-sdk": "^0.3.144",
52
+ "@opencode-ai/sdk": "^1.4.6",
53
+ "dotenv": "^17.3.1",
54
+ "picocolors": "^1.1.1",
55
+ "picomatch": "^4.0.4"
56
+ },
57
+ "overrides": {
58
+ "minimatch@<10.2.3": ">=10.2.3",
59
+ "@anthropic-ai/sdk@<0.91.1": ">=0.91.1"
60
+ }
61
+ }