appsec-agent 2.4.4 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/conf/appsec_agent.yaml +9 -0
- package/dist/bin/agent-run.js +21 -4
- package/dist/bin/agent-run.js.map +1 -1
- package/dist/conf/appsec_agent.yaml +9 -0
- package/dist/src/agent_actions.d.ts +16 -0
- package/dist/src/agent_actions.d.ts.map +1 -1
- package/dist/src/agent_actions.js +90 -4
- package/dist/src/agent_actions.js.map +1 -1
- package/dist/src/agent_options.d.ts +23 -4
- package/dist/src/agent_options.d.ts.map +1 -1
- package/dist/src/agent_options.js +67 -13
- package/dist/src/agent_options.js.map +1 -1
- package/dist/src/main.d.ts.map +1 -1
- package/dist/src/main.js +71 -0
- package/dist/src/main.js.map +1 -1
- package/dist/src/resolveAgentRunMcpEnv.d.ts +22 -0
- package/dist/src/resolveAgentRunMcpEnv.d.ts.map +1 -0
- package/dist/src/resolveAgentRunMcpEnv.js +24 -0
- package/dist/src/resolveAgentRunMcpEnv.js.map +1 -0
- package/dist/src/schemas/learned_guidance.d.ts +96 -0
- package/dist/src/schemas/learned_guidance.d.ts.map +1 -0
- package/dist/src/schemas/learned_guidance.js +286 -0
- package/dist/src/schemas/learned_guidance.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Learned-guidance synthesizer schemas (v2.5.0 / parent-app plan §3.8 — CLLG).
|
|
4
|
+
*
|
|
5
|
+
* The parent app collects three signal streams (dismissal validations,
|
|
6
|
+
* `addressed` PR outcomes, 👍 feedback) and buckets them by CWE. For each
|
|
7
|
+
* eligible bucket it asks this role to emit ONE short policy bullet that
|
|
8
|
+
* captures the class-level pattern (e.g. *"Trust the CSRF middleware in
|
|
9
|
+
* `auth/csrf.ts`; do not flag PR routes that go through it."*).
|
|
10
|
+
*
|
|
11
|
+
* Input file shape (passed via `--inputs <file>`; matches the JSON the
|
|
12
|
+
* parent app's `runSynthesizerAgent` writes in `learnedGuidanceSynthesizer.ts`):
|
|
13
|
+
*
|
|
14
|
+
* {
|
|
15
|
+
* "buckets": [
|
|
16
|
+
* {
|
|
17
|
+
* "cwe": "CWE-79",
|
|
18
|
+
* "signal_count": 12,
|
|
19
|
+
* "example_dismissal_reasons": [
|
|
20
|
+
* "duplicate of issue #4321 - already mitigated by helmet middleware",
|
|
21
|
+
* "auto-escaped by React JSX",
|
|
22
|
+
* ...
|
|
23
|
+
* ]
|
|
24
|
+
* },
|
|
25
|
+
* ...
|
|
26
|
+
* ]
|
|
27
|
+
* }
|
|
28
|
+
*
|
|
29
|
+
* Output shape on stdout (structured JSON, written to `-o <file>` per the
|
|
30
|
+
* parent app's spawn contract; backend rejects anything off-schema with
|
|
31
|
+
* `outcome=validation_error`):
|
|
32
|
+
*
|
|
33
|
+
* {
|
|
34
|
+
* "bullets": [
|
|
35
|
+
* {
|
|
36
|
+
* "cwe": "CWE-79",
|
|
37
|
+
* "bullet": "≤300 chars positive-form rule the pr_reviewer can apply",
|
|
38
|
+
* "confidence": 0.85
|
|
39
|
+
* },
|
|
40
|
+
* ...
|
|
41
|
+
* ]
|
|
42
|
+
* }
|
|
43
|
+
*
|
|
44
|
+
* The role is a pure transform: no Read/Grep tools, no source-tree
|
|
45
|
+
* access. Output is constrained by `LEARNED_GUIDANCE_OUTPUT_SCHEMA` so a
|
|
46
|
+
* malformed bullet list never reaches the parent app's prompt budget.
|
|
47
|
+
*/
|
|
48
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
49
|
+
if (k2 === undefined) k2 = k;
|
|
50
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
51
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
52
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
53
|
+
}
|
|
54
|
+
Object.defineProperty(o, k2, desc);
|
|
55
|
+
}) : (function(o, m, k, k2) {
|
|
56
|
+
if (k2 === undefined) k2 = k;
|
|
57
|
+
o[k2] = m[k];
|
|
58
|
+
}));
|
|
59
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
60
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
61
|
+
}) : function(o, v) {
|
|
62
|
+
o["default"] = v;
|
|
63
|
+
});
|
|
64
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
65
|
+
var ownKeys = function(o) {
|
|
66
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
67
|
+
var ar = [];
|
|
68
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
69
|
+
return ar;
|
|
70
|
+
};
|
|
71
|
+
return ownKeys(o);
|
|
72
|
+
};
|
|
73
|
+
return function (mod) {
|
|
74
|
+
if (mod && mod.__esModule) return mod;
|
|
75
|
+
var result = {};
|
|
76
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
77
|
+
__setModuleDefault(result, mod);
|
|
78
|
+
return result;
|
|
79
|
+
};
|
|
80
|
+
})();
|
|
81
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
82
|
+
exports.LEARNED_GUIDANCE_OUTPUT_SCHEMA = exports.MAX_BULLET_LEN = void 0;
|
|
83
|
+
exports.parseLearnedGuidanceInputs = parseLearnedGuidanceInputs;
|
|
84
|
+
exports.loadLearnedGuidanceInputs = loadLearnedGuidanceInputs;
|
|
85
|
+
exports.buildLearnedGuidanceUserPrompt = buildLearnedGuidanceUserPrompt;
|
|
86
|
+
exports.emptyLearnedGuidanceOutput = emptyLearnedGuidanceOutput;
|
|
87
|
+
const fs = __importStar(require("fs"));
|
|
88
|
+
/**
|
|
89
|
+
* Hard caps applied at parse time. Generous on top of the parent app's
|
|
90
|
+
* own caps in `learnedGuidanceSynthesizer.ts` (MAX_INPUTS_PER_BUCKET =
|
|
91
|
+
* 50, MIN_BUCKET_SIZE = 5) so this validator only fires on truly
|
|
92
|
+
* runaway inputs — e.g. someone hand-builds a malicious JSON file.
|
|
93
|
+
*/
|
|
94
|
+
const MAX_BUCKETS = 200;
|
|
95
|
+
const MAX_REASONS_PER_BUCKET = 200;
|
|
96
|
+
const MAX_REASON_LEN = 2_000;
|
|
97
|
+
const MAX_CWE_LEN = 64;
|
|
98
|
+
/** Output character cap. Stays in lockstep with the parent app's `MAX_BULLET_LEN = 300`. */
|
|
99
|
+
exports.MAX_BULLET_LEN = 300;
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
// Input parser / validator
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
/**
|
|
104
|
+
* Parse and validate a `LearnedGuidanceInputs` object loaded from the
|
|
105
|
+
* `--inputs` JSON file. Throws on any structural deviation; the CLI
|
|
106
|
+
* wrapper in `main.ts` exits non-zero so the parent app sees the error
|
|
107
|
+
* via stderr (and stays fail-closed: zero bullets persisted).
|
|
108
|
+
*/
|
|
109
|
+
function parseLearnedGuidanceInputs(data) {
|
|
110
|
+
if (!data || typeof data !== 'object') {
|
|
111
|
+
throw new Error('Learned-guidance inputs must be a JSON object');
|
|
112
|
+
}
|
|
113
|
+
const o = data;
|
|
114
|
+
if (!Array.isArray(o.buckets)) {
|
|
115
|
+
throw new Error('Learned-guidance inputs must include a "buckets" array');
|
|
116
|
+
}
|
|
117
|
+
if (o.buckets.length === 0) {
|
|
118
|
+
throw new Error('Learned-guidance inputs must include at least one bucket');
|
|
119
|
+
}
|
|
120
|
+
if (o.buckets.length > MAX_BUCKETS) {
|
|
121
|
+
throw new Error(`Learned-guidance inputs supports at most ${MAX_BUCKETS} buckets per run`);
|
|
122
|
+
}
|
|
123
|
+
const buckets = [];
|
|
124
|
+
for (const item of o.buckets) {
|
|
125
|
+
if (!item || typeof item !== 'object') {
|
|
126
|
+
throw new Error('Each bucket must be an object');
|
|
127
|
+
}
|
|
128
|
+
const b = item;
|
|
129
|
+
if (typeof b.cwe !== 'string' || !b.cwe.trim()) {
|
|
130
|
+
throw new Error('Each bucket must include a non-empty string "cwe"');
|
|
131
|
+
}
|
|
132
|
+
if (b.cwe.length > MAX_CWE_LEN) {
|
|
133
|
+
throw new Error(`Bucket "cwe" exceeds ${MAX_CWE_LEN} chars`);
|
|
134
|
+
}
|
|
135
|
+
if (typeof b.signal_count !== 'number' || !Number.isFinite(b.signal_count) || b.signal_count < 0) {
|
|
136
|
+
throw new Error(`Bucket "${b.cwe}" must include a non-negative numeric "signal_count"`);
|
|
137
|
+
}
|
|
138
|
+
if (!Array.isArray(b.example_dismissal_reasons)) {
|
|
139
|
+
throw new Error(`Bucket "${b.cwe}" must include an array "example_dismissal_reasons"`);
|
|
140
|
+
}
|
|
141
|
+
if (b.example_dismissal_reasons.length > MAX_REASONS_PER_BUCKET) {
|
|
142
|
+
throw new Error(`Bucket "${b.cwe}" exceeds ${MAX_REASONS_PER_BUCKET} example_dismissal_reasons`);
|
|
143
|
+
}
|
|
144
|
+
const reasons = [];
|
|
145
|
+
for (const r of b.example_dismissal_reasons) {
|
|
146
|
+
if (typeof r !== 'string') {
|
|
147
|
+
throw new Error(`Bucket "${b.cwe}" example_dismissal_reasons must all be strings`);
|
|
148
|
+
}
|
|
149
|
+
// Truncate per-reason rather than reject — the parent app already
|
|
150
|
+
// sanitizes/truncates, but be defensive against future drift.
|
|
151
|
+
reasons.push(r.length > MAX_REASON_LEN ? r.slice(0, MAX_REASON_LEN) : r);
|
|
152
|
+
}
|
|
153
|
+
buckets.push({
|
|
154
|
+
cwe: b.cwe.trim(),
|
|
155
|
+
signal_count: Math.floor(b.signal_count),
|
|
156
|
+
example_dismissal_reasons: reasons,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
return { buckets };
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Convenience loader matching the pattern used by `loadRetestContext`
|
|
163
|
+
* etc. — read JSON from disk, parse, validate, return.
|
|
164
|
+
*
|
|
165
|
+
* Caller is responsible for path validation (we expect `main.ts` to run
|
|
166
|
+
* the file path through `validateInputFilePath` before calling this so
|
|
167
|
+
* traversal attempts never reach the loader).
|
|
168
|
+
*/
|
|
169
|
+
function loadLearnedGuidanceInputs(absolutePath) {
|
|
170
|
+
if (!fs.existsSync(absolutePath)) {
|
|
171
|
+
throw new Error(`Learned-guidance inputs file not found: ${absolutePath}`);
|
|
172
|
+
}
|
|
173
|
+
const raw = fs.readFileSync(absolutePath, 'utf-8');
|
|
174
|
+
let data;
|
|
175
|
+
try {
|
|
176
|
+
data = JSON.parse(raw);
|
|
177
|
+
}
|
|
178
|
+
catch (e) {
|
|
179
|
+
throw new Error(`Failed to parse learned-guidance inputs JSON: ${e?.message || e}`);
|
|
180
|
+
}
|
|
181
|
+
return parseLearnedGuidanceInputs(data);
|
|
182
|
+
}
|
|
183
|
+
// ---------------------------------------------------------------------------
|
|
184
|
+
// Prompt builder
|
|
185
|
+
// ---------------------------------------------------------------------------
|
|
186
|
+
/**
|
|
187
|
+
* Build the user-facing prompt for the synthesizer role. The prompt:
|
|
188
|
+
* 1. States the task and the success bar (positive-form rule, not generic).
|
|
189
|
+
* 2. Lists each bucket with its CWE, signal count, and a few example reasons.
|
|
190
|
+
* 3. Reminds the model of the schema, the per-bullet length cap, and the
|
|
191
|
+
* confidence scale.
|
|
192
|
+
*
|
|
193
|
+
* The system prompt (set in `agent_options.ts`) plus the JSON schema
|
|
194
|
+
* enforcement (set on `Options.outputFormat`) enforce the structural
|
|
195
|
+
* contract; this prompt focuses on the *content* contract.
|
|
196
|
+
*/
|
|
197
|
+
function buildLearnedGuidanceUserPrompt(inputs) {
|
|
198
|
+
const lines = [
|
|
199
|
+
'## Class-level Learned Guidance synthesis',
|
|
200
|
+
'',
|
|
201
|
+
'You are summarizing patterns observed in past **dismissed** security findings into ONE concise rule per CWE that a code reviewer can apply during the next PR scan to AVOID raising the same false-positive class again.',
|
|
202
|
+
'',
|
|
203
|
+
'### Quality bar for a bullet',
|
|
204
|
+
`- **Positive form**: "Trust X in Y; do not flag Z." not "Past dismissals were noisy."`,
|
|
205
|
+
`- **Specific**: cite a file path, function name, library, or framework feature wherever the example reasons mention one.`,
|
|
206
|
+
`- **Self-contained**: a future reviewer reading ONLY the bullet must understand when to apply it.`,
|
|
207
|
+
`- **≤ ${exports.MAX_BULLET_LEN} characters**. Hard cap; longer bullets will be rejected.`,
|
|
208
|
+
`- **Confidence in [0, 1]**: 0.9+ for "every example agrees on the same root cause", 0.6 for "majority agree", < 0.6 for "mixed signal" (will be dropped — return ONLY high-confidence bullets).`,
|
|
209
|
+
'',
|
|
210
|
+
'### Inputs',
|
|
211
|
+
'',
|
|
212
|
+
];
|
|
213
|
+
for (const b of inputs.buckets) {
|
|
214
|
+
lines.push(`#### ${b.cwe} — ${b.signal_count} signal${b.signal_count === 1 ? '' : 's'}`);
|
|
215
|
+
if (b.example_dismissal_reasons.length === 0) {
|
|
216
|
+
lines.push(' _(no operator-supplied dismissal reasons; signal is from `addressed` outcomes / 👍 feedback only — be conservative)_');
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
lines.push('Example dismissal reasons (operator-supplied; may be terse):');
|
|
220
|
+
for (const r of b.example_dismissal_reasons) {
|
|
221
|
+
lines.push(` - ${r.replace(/\n+/g, ' ')}`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
lines.push('');
|
|
225
|
+
}
|
|
226
|
+
lines.push('### Output');
|
|
227
|
+
lines.push('Return JSON matching the required schema:');
|
|
228
|
+
lines.push('```json');
|
|
229
|
+
lines.push(JSON.stringify({
|
|
230
|
+
bullets: [
|
|
231
|
+
{
|
|
232
|
+
cwe: '<CWE-XXX>',
|
|
233
|
+
bullet: '<≤300-char positive-form rule>',
|
|
234
|
+
confidence: 0.0,
|
|
235
|
+
},
|
|
236
|
+
],
|
|
237
|
+
}, null, 2));
|
|
238
|
+
lines.push('```');
|
|
239
|
+
lines.push('');
|
|
240
|
+
lines.push('Skip any bucket where the dismissal reasons disagree or are too vague to ground a specific rule. It is BETTER to return zero bullets than to emit a bullet the reviewer cannot act on.');
|
|
241
|
+
return lines.join('\n');
|
|
242
|
+
}
|
|
243
|
+
// ---------------------------------------------------------------------------
|
|
244
|
+
// JSON Schema for Claude SDK structured output
|
|
245
|
+
// ---------------------------------------------------------------------------
|
|
246
|
+
exports.LEARNED_GUIDANCE_OUTPUT_SCHEMA = {
|
|
247
|
+
type: 'object',
|
|
248
|
+
required: ['bullets'],
|
|
249
|
+
properties: {
|
|
250
|
+
bullets: {
|
|
251
|
+
type: 'array',
|
|
252
|
+
maxItems: 50,
|
|
253
|
+
items: {
|
|
254
|
+
type: 'object',
|
|
255
|
+
required: ['cwe', 'bullet', 'confidence'],
|
|
256
|
+
properties: {
|
|
257
|
+
cwe: {
|
|
258
|
+
type: 'string',
|
|
259
|
+
minLength: 1,
|
|
260
|
+
maxLength: MAX_CWE_LEN,
|
|
261
|
+
description: 'CWE identifier exactly as provided in the input bucket (e.g. "CWE-79").',
|
|
262
|
+
},
|
|
263
|
+
bullet: {
|
|
264
|
+
type: 'string',
|
|
265
|
+
minLength: 1,
|
|
266
|
+
maxLength: exports.MAX_BULLET_LEN,
|
|
267
|
+
description: 'Positive-form policy rule the pr_reviewer can apply at scan time. Cite file/library/framework when the dismissal reasons do.',
|
|
268
|
+
},
|
|
269
|
+
confidence: {
|
|
270
|
+
type: 'number',
|
|
271
|
+
minimum: 0,
|
|
272
|
+
maximum: 1,
|
|
273
|
+
description: 'Confidence in [0,1]. Bullets below 0.6 are dropped by the parent app.',
|
|
274
|
+
},
|
|
275
|
+
},
|
|
276
|
+
additionalProperties: false,
|
|
277
|
+
},
|
|
278
|
+
},
|
|
279
|
+
},
|
|
280
|
+
additionalProperties: false,
|
|
281
|
+
};
|
|
282
|
+
/** Convenience empty-output shell for tests / agent-side fallback. */
|
|
283
|
+
function emptyLearnedGuidanceOutput() {
|
|
284
|
+
return { bullets: [] };
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=learned_guidance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learned_guidance.js","sourceRoot":"","sources":["../../../src/schemas/learned_guidance.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appsec-agent",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
4
4
|
"description": "TypeScript package for AppSec AI Agent management",
|
|
5
5
|
"author": "Sam Li",
|
|
6
|
-
"date": "
|
|
6
|
+
"date": "May 03 2026",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"main": "dist/src/index.js",
|
|
9
9
|
"types": "dist/src/index.d.ts",
|