appsec-agent 0.1.3 → 0.2.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 +3 -3
- package/dist/agent_actions.d.ts.map +1 -1
- package/dist/agent_actions.js +108 -210
- package/dist/agent_actions.js.map +1 -1
- package/dist/agent_options.d.ts +1 -1
- package/dist/agent_options.d.ts.map +1 -1
- package/dist/agent_options.js +9 -8
- package/dist/agent_options.js.map +1 -1
- package/dist/blinking_cursor.js +2 -2
- package/dist/blinking_cursor.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +60 -110
- package/dist/main.js.map +1 -1
- package/package.json +2 -2
package/conf/appsec_agent.yaml
CHANGED
|
@@ -12,9 +12,9 @@ default: &default
|
|
|
12
12
|
verbose: True
|
|
13
13
|
code_reviewer:
|
|
14
14
|
options:
|
|
15
|
-
system_prompt: "You are an Application Security (AppSec) expert assistant. You are responsible for performing a thorough code review. List out all the potential security
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
system_prompt: "You are an Application Security (AppSec) expert assistant. You are responsible for performing a thorough code review. List out all the potential security issues found in the code. Provide affected code snippet and security advice and guidance in the code review report."
|
|
16
|
+
output_format: "markdown"
|
|
17
|
+
verbose: True
|
|
18
18
|
threat_modeler:
|
|
19
19
|
options:
|
|
20
20
|
system_prompt: "You are an Application Security (AppSec) expert assistant. You are responsible for performing risk assessment on the source code repository for SOC2 type 2 compliance audit: 1. Start with drawing the ASCII text based Data Flow Diagrm (DFD), with output format as <codebase_data_flow_diagram_text_timestamp>; 2. then proceeding to use STRIDE methodology to perform threat modeling on the DFD, without output report in the format <codebase_threat_model_timestamp>; 3. finally, provide a seperate risk registry report including proposed remediation plan in the format <codebase_risk_registry_text_timestamp>. We're looking for 3 reports in the current working directory as the deliverable."
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent_actions.d.ts","sourceRoot":"","sources":["../src/agent_actions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAOD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,mBAAmB,CAA2B;
|
|
1
|
+
{"version":3,"file":"agent_actions.d.ts","sourceRoot":"","sources":["../src/agent_actions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAOD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,mBAAmB,CAA2B;gBAC1C,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;IAMtE;;OAEG;IACG,4BAA4B,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAiJ/F;;OAEG;IACG,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiElE;;OAEG;IACG,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA6DzE"}
|
package/dist/agent_actions.js
CHANGED
|
@@ -26,241 +26,139 @@ class AgentActions {
|
|
|
26
26
|
const agentOptions = new agent_options_1.AgentOptions(this.confDict, this.environment);
|
|
27
27
|
const options = agentOptions.getSimpleQueryAgentOptions(this.args.role, srcDir);
|
|
28
28
|
// Build prompt with conversation history and source directory context
|
|
29
|
+
const sourceDirContext = srcDir
|
|
30
|
+
? `\n\nContext: There is a source code directory available at ${srcDir}. You can search and read files within this directory to answer questions. The directory is located in the current working directory.\n`
|
|
31
|
+
: '';
|
|
29
32
|
let fullPrompt;
|
|
30
|
-
let sourceDirContext = '';
|
|
31
|
-
// Add source directory context if provided
|
|
32
|
-
if (srcDir) {
|
|
33
|
-
sourceDirContext = `\n\nContext: There is a source code directory available at ${srcDir}. You can search and read files within this directory to answer questions. The directory is located in the current working directory.\n`;
|
|
34
|
-
}
|
|
35
33
|
if (this.conversationHistory.length > 0) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
contextPrompt += `User: ${entry.content}\n`;
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
contextPrompt += `Assistant: ${entry.content}\n`;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
fullPrompt = `${contextPrompt}${sourceDirContext}User: ${yourPrompt}`;
|
|
34
|
+
const contextPrompt = this.conversationHistory
|
|
35
|
+
.map(entry => `${entry.role === 'user' ? 'User' : 'Assistant'}: ${entry.content}`)
|
|
36
|
+
.join('\n');
|
|
37
|
+
fullPrompt = `Previous conversation:\n${contextPrompt}${sourceDirContext}User: ${yourPrompt}`;
|
|
47
38
|
}
|
|
48
39
|
else {
|
|
49
40
|
fullPrompt = `${sourceDirContext}${yourPrompt}`;
|
|
50
41
|
}
|
|
51
|
-
|
|
52
|
-
let
|
|
42
|
+
const cursor = new blinking_cursor_1.BlinkingCursor();
|
|
43
|
+
let cursorStopped = false;
|
|
44
|
+
const stopCursor = () => {
|
|
45
|
+
if (!cursorStopped) {
|
|
46
|
+
cursor.stop();
|
|
47
|
+
cursorStopped = true;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
let accumulatedText = '';
|
|
51
|
+
let hasPrintedHeader = false;
|
|
52
|
+
let hasSeenStreamEvents = false;
|
|
53
|
+
let assistantResponseText = '';
|
|
54
|
+
let finalResult = null;
|
|
55
|
+
const printHeader = () => {
|
|
56
|
+
if (!hasPrintedHeader) {
|
|
57
|
+
console.log(`\nClaude:\n`);
|
|
58
|
+
hasPrintedHeader = true;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
53
61
|
try {
|
|
54
|
-
let accumulatedText = '';
|
|
55
|
-
let hasPrintedHeader = false;
|
|
56
|
-
let hasSeenStreamEvents = false;
|
|
57
|
-
let messageCount = 0;
|
|
58
|
-
let assistantResponseText = '';
|
|
59
|
-
let finalResult = null;
|
|
60
|
-
// Start blinking cursor to show we're waiting for Claude's response
|
|
61
|
-
cursor = new blinking_cursor_1.BlinkingCursor();
|
|
62
62
|
cursor.start();
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if (streamMsg.event?.type === 'content_block_delta' && streamMsg.event.delta?.type === 'text_delta') {
|
|
79
|
-
const deltaText = streamMsg.event.delta.text || '';
|
|
80
|
-
if (deltaText) {
|
|
81
|
-
if (!hasPrintedHeader) {
|
|
82
|
-
console.log(`\nClaude:\n`);
|
|
83
|
-
hasPrintedHeader = true;
|
|
84
|
-
}
|
|
85
|
-
// Accumulate and write streaming deltas directly
|
|
86
|
-
accumulatedText += deltaText;
|
|
87
|
-
assistantResponseText += deltaText;
|
|
88
|
-
process.stdout.write(deltaText);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
// Handle content block start (beginning of new content block)
|
|
92
|
-
else if (streamMsg.event?.type === 'content_block_start') {
|
|
93
|
-
// Stop cursor when content block starts
|
|
94
|
-
if (cursor)
|
|
95
|
-
cursor.stop();
|
|
96
|
-
// Content block is starting - ensure header is printed
|
|
97
|
-
if (!hasPrintedHeader) {
|
|
98
|
-
console.log(`\nClaude:\n`);
|
|
99
|
-
hasPrintedHeader = true;
|
|
100
|
-
}
|
|
101
|
-
// Don't reset accumulatedText here - we want to accumulate ALL text across all blocks
|
|
102
|
-
// Only reset if this is truly a new message (but we can't tell that here)
|
|
103
|
-
// Actually, we should keep accumulating to get the full response
|
|
104
|
-
}
|
|
105
|
-
// Handle message stop (one message/turn is complete, but stream may continue)
|
|
106
|
-
else if (streamMsg.event?.type === 'message_stop') {
|
|
107
|
-
// One message is complete, but the stream may continue with more messages
|
|
108
|
-
// (e.g., after tools execute). Don't treat this as stream end.
|
|
109
|
-
if (hasPrintedHeader && accumulatedText) {
|
|
110
|
-
// This message is done, but more may come
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
// Handle other stream event types we might not be handling
|
|
114
|
-
else if (this.args.verbose) {
|
|
115
|
-
console.error(`[DEBUG] Unhandled stream event type: ${streamMsg.event?.type}`);
|
|
63
|
+
for await (const msg of (0, claude_agent_sdk_1.query)({ prompt: fullPrompt, options })) {
|
|
64
|
+
if (this.args.verbose) {
|
|
65
|
+
console.error(`[DEBUG] Message type: ${msg.type}`);
|
|
66
|
+
}
|
|
67
|
+
if (msg.type === 'stream_event') {
|
|
68
|
+
hasSeenStreamEvents = true;
|
|
69
|
+
stopCursor();
|
|
70
|
+
const streamMsg = msg;
|
|
71
|
+
if (streamMsg.event?.type === 'content_block_delta' && streamMsg.event.delta?.type === 'text_delta') {
|
|
72
|
+
const deltaText = streamMsg.event.delta.text || '';
|
|
73
|
+
if (deltaText) {
|
|
74
|
+
printHeader();
|
|
75
|
+
accumulatedText += deltaText;
|
|
76
|
+
assistantResponseText += deltaText;
|
|
77
|
+
process.stdout.write(deltaText);
|
|
116
78
|
}
|
|
117
79
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
// BUT: When tools are used, there may be more assistant messages after tools complete
|
|
121
|
-
// So we need to handle both cases
|
|
122
|
-
else if (msg.type === 'assistant') {
|
|
123
|
-
// Stop cursor when we receive assistant message
|
|
124
|
-
if (cursor)
|
|
125
|
-
cursor.stop();
|
|
126
|
-
const assistantMsg = msg;
|
|
127
|
-
if (assistantMsg.message.content) {
|
|
128
|
-
for (const block of assistantMsg.message.content) {
|
|
129
|
-
if (block.type === 'text') {
|
|
130
|
-
const currentText = block.text || '';
|
|
131
|
-
if (currentText && currentText.length > 0) {
|
|
132
|
-
// If we haven't seen stream events, print the complete message
|
|
133
|
-
if (!hasSeenStreamEvents) {
|
|
134
|
-
if (!hasPrintedHeader) {
|
|
135
|
-
console.log(`\nClaude:\n`);
|
|
136
|
-
hasPrintedHeader = true;
|
|
137
|
-
}
|
|
138
|
-
console.log(currentText);
|
|
139
|
-
accumulatedText = currentText;
|
|
140
|
-
assistantResponseText = currentText;
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
// If we've seen stream events, this might be additional content after tools
|
|
144
|
-
// Check if this is new content not already accumulated
|
|
145
|
-
if (!currentText.startsWith(accumulatedText) && currentText !== accumulatedText) {
|
|
146
|
-
// This is additional content (e.g., after tools complete)
|
|
147
|
-
const newText = currentText.slice(accumulatedText.length);
|
|
148
|
-
if (newText) {
|
|
149
|
-
process.stdout.write(newText);
|
|
150
|
-
accumulatedText = currentText;
|
|
151
|
-
assistantResponseText = currentText;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
else if (currentText.length > accumulatedText.length) {
|
|
155
|
-
// More content than we've accumulated
|
|
156
|
-
const newText = currentText.slice(accumulatedText.length);
|
|
157
|
-
if (newText) {
|
|
158
|
-
process.stdout.write(newText);
|
|
159
|
-
accumulatedText = currentText;
|
|
160
|
-
assistantResponseText = currentText;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
80
|
+
else if (streamMsg.event?.type === 'content_block_start') {
|
|
81
|
+
printHeader();
|
|
168
82
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
console.error(`Error subtype: ${resultMsg.subtype}`);
|
|
83
|
+
else if (this.args.verbose && streamMsg.event?.type !== 'message_stop') {
|
|
84
|
+
console.error(`[DEBUG] Unhandled stream event type: ${streamMsg.event?.type}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else if (msg.type === 'assistant') {
|
|
88
|
+
stopCursor();
|
|
89
|
+
const assistantMsg = msg;
|
|
90
|
+
for (const block of assistantMsg.message.content || []) {
|
|
91
|
+
if (block.type === 'text' && block.text) {
|
|
92
|
+
const currentText = block.text;
|
|
93
|
+
if (!hasSeenStreamEvents) {
|
|
94
|
+
// No streaming - print the complete message
|
|
95
|
+
printHeader();
|
|
96
|
+
console.log(currentText);
|
|
97
|
+
accumulatedText = currentText;
|
|
98
|
+
assistantResponseText = currentText;
|
|
186
99
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
100
|
+
else if (currentText.length > accumulatedText.length) {
|
|
101
|
+
// Print only new content not yet streamed
|
|
102
|
+
const newText = currentText.startsWith(accumulatedText)
|
|
103
|
+
? currentText.slice(accumulatedText.length)
|
|
104
|
+
: currentText; // Fallback: print entire text if mismatch
|
|
105
|
+
if (newText) {
|
|
106
|
+
process.stdout.write(newText);
|
|
107
|
+
accumulatedText = currentText;
|
|
108
|
+
assistantResponseText = currentText;
|
|
109
|
+
}
|
|
191
110
|
}
|
|
192
111
|
}
|
|
193
|
-
// Debug: log turn count and continue processing (stream may not be done yet)
|
|
194
|
-
if (this.args.verbose) {
|
|
195
|
-
console.error(`[DEBUG] Result: num_turns=${resultMsg.num_turns}, is_error=${resultMsg.is_error}`);
|
|
196
|
-
console.error(`[DEBUG] Continuing to process stream (may have more messages after tools)`);
|
|
197
|
-
}
|
|
198
112
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
113
|
+
}
|
|
114
|
+
else if (msg.type === 'result') {
|
|
115
|
+
stopCursor();
|
|
116
|
+
finalResult = msg;
|
|
117
|
+
if (finalResult.is_error) {
|
|
118
|
+
const errorMsg = finalResult.errors?.[0] || finalResult.error_message || 'Unknown error occurred';
|
|
119
|
+
console.error(`\nError: ${errorMsg}`);
|
|
120
|
+
if (finalResult.subtype) {
|
|
121
|
+
console.error(`Error subtype: ${finalResult.subtype}`);
|
|
205
122
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
// Unknown message type - log it to help debug
|
|
210
|
-
if (this.args.verbose) {
|
|
211
|
-
console.error(`[DEBUG] Received unknown message type: ${msg.type}`);
|
|
212
|
-
console.error(`[DEBUG] Message content:`, JSON.stringify(msg, null, 2));
|
|
123
|
+
if (finalResult.subtype === 'error_max_turns') {
|
|
124
|
+
console.error(`\nNote: The conversation stopped because max_turns (${options.maxTurns || 1}) was reached.`);
|
|
125
|
+
console.error(`To allow the agent to use tools and continue, increase max_turns in the configuration or use the code_reviewer role.`);
|
|
213
126
|
}
|
|
214
127
|
}
|
|
128
|
+
if (this.args.verbose) {
|
|
129
|
+
console.error(`[DEBUG] Result: num_turns=${finalResult.num_turns}, is_error=${finalResult.is_error}`);
|
|
130
|
+
}
|
|
215
131
|
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
}
|
|
222
|
-
// Debug: log total messages processed
|
|
223
|
-
if (this.args.verbose) {
|
|
224
|
-
console.error(`[DEBUG] Total messages processed: ${messageCount}`);
|
|
225
|
-
}
|
|
226
|
-
// Now that the stream is complete, ensure all stdout writes are flushed
|
|
227
|
-
// Use multiple setImmediate calls to ensure the event loop processes all pending writes
|
|
228
|
-
// This is critical when using process.stdout.write() for streaming
|
|
229
|
-
await new Promise(resolve => setImmediate(resolve));
|
|
230
|
-
await new Promise(resolve => setImmediate(resolve));
|
|
231
|
-
// Now that the stream is complete, display the final result (cost, etc.)
|
|
232
|
-
if (finalResult) {
|
|
233
|
-
// Ensure we flush any partial output and add newline
|
|
234
|
-
if (hasPrintedHeader) {
|
|
235
|
-
console.log(); // New line after final output
|
|
132
|
+
else if (msg.type === 'tool_progress') {
|
|
133
|
+
if (this.args.verbose) {
|
|
134
|
+
const toolMsg = msg;
|
|
135
|
+
console.log(`[Tool Progress] ${toolMsg.tool_name}: ${toolMsg.elapsed_time_seconds}s`);
|
|
136
|
+
}
|
|
236
137
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
console.log(`\nCost: $${finalResult.total_cost_usd.toFixed(4)}`);
|
|
138
|
+
else if (this.args.verbose) {
|
|
139
|
+
console.error(`[DEBUG] Unknown message type: ${msg.type}`);
|
|
240
140
|
}
|
|
241
141
|
}
|
|
242
|
-
// One more flush to ensure cost is written before returning
|
|
243
|
-
await new Promise(resolve => setImmediate(resolve));
|
|
244
|
-
// Store the current exchange in conversation history
|
|
245
|
-
this.conversationHistory.push({ role: 'user', content: yourPrompt });
|
|
246
|
-
if (assistantResponseText) {
|
|
247
|
-
this.conversationHistory.push({ role: 'assistant', content: assistantResponseText });
|
|
248
|
-
}
|
|
249
142
|
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
143
|
+
finally {
|
|
144
|
+
stopCursor();
|
|
145
|
+
}
|
|
146
|
+
// Flush stdout writes
|
|
147
|
+
await new Promise(resolve => setImmediate(resolve));
|
|
148
|
+
// Display final result
|
|
149
|
+
if (finalResult) {
|
|
150
|
+
if (hasPrintedHeader) {
|
|
151
|
+
console.log();
|
|
259
152
|
}
|
|
260
|
-
|
|
261
|
-
|
|
153
|
+
if (!finalResult.is_error && finalResult.total_cost_usd && finalResult.total_cost_usd > 0) {
|
|
154
|
+
console.log(`\nCost: $${finalResult.total_cost_usd.toFixed(4)}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// Store conversation history
|
|
158
|
+
this.conversationHistory.push({ role: 'user', content: yourPrompt });
|
|
159
|
+
if (assistantResponseText) {
|
|
160
|
+
this.conversationHistory.push({ role: 'assistant', content: assistantResponseText });
|
|
262
161
|
}
|
|
263
|
-
// Add newline for spacing after response (matching Python version)
|
|
264
162
|
console.log();
|
|
265
163
|
return '';
|
|
266
164
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent_actions.js","sourceRoot":"","sources":["../src/agent_actions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent_actions.js","sourceRoot":"","sources":["../src/agent_actions.ts"],"names":[],"mappings":"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"}
|
package/dist/agent_options.d.ts
CHANGED
|
@@ -33,7 +33,7 @@ export declare class AgentOptions {
|
|
|
33
33
|
*/
|
|
34
34
|
getSimpleQueryAgentOptions(role?: string, srcDir?: string | null): Options;
|
|
35
35
|
/**
|
|
36
|
-
* Get options for code reviewer
|
|
36
|
+
* Get options for security code reviewer
|
|
37
37
|
*/
|
|
38
38
|
getCodeReviewerOptions(role?: string): Options;
|
|
39
39
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent_options.d.ts","sourceRoot":"","sources":["../src/agent_options.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAqC,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACxG,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAsB;gBAE9B,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM;IAKrD;;;OAGG;IACH,eAAe,IAAI,YAAY,EAAE;IAIjC;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;OAEG;IACH,sBAAsB,EAAE,UAAU,CAqBjC;IAED;;OAEG;IACH,0BAA0B,CAAC,IAAI,GAAE,MAA6B,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"agent_options.d.ts","sourceRoot":"","sources":["../src/agent_options.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAqC,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACxG,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAsB;gBAE9B,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM;IAKrD;;;OAGG;IACH,eAAe,IAAI,YAAY,EAAE;IAIjC;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;OAEG;IACH,sBAAsB,EAAE,UAAU,CAqBjC;IAED;;OAEG;IACH,0BAA0B,CAAC,IAAI,GAAE,MAA6B,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IAgBhG;;OAEG;IACH,sBAAsB,CAAC,IAAI,GAAE,MAAwB,GAAG,OAAO;IAkB/D;;OAEG;IACH,uBAAuB,CAAC,IAAI,GAAE,MAAyB,GAAG,OAAO;CAiBlE"}
|
package/dist/agent_options.js
CHANGED
|
@@ -51,7 +51,8 @@ class AgentOptions {
|
|
|
51
51
|
*/
|
|
52
52
|
getSimpleQueryAgentOptions(role = 'simple_query_agent', srcDir) {
|
|
53
53
|
const roleConfig = this.confDict[this.environment]?.[role];
|
|
54
|
-
let systemPrompt = roleConfig?.options?.system_prompt ||
|
|
54
|
+
let systemPrompt = roleConfig?.options?.system_prompt ||
|
|
55
|
+
'You are an Application Security (AppSec) expert assistant. You are responsible for providing security advice and guidance to the user.';
|
|
55
56
|
// Add source directory context to system prompt if provided
|
|
56
57
|
if (srcDir) {
|
|
57
58
|
systemPrompt += ` You have access to a source code directory at ${srcDir} that you can search and read files from to answer questions.`;
|
|
@@ -62,16 +63,16 @@ class AgentOptions {
|
|
|
62
63
|
};
|
|
63
64
|
}
|
|
64
65
|
/**
|
|
65
|
-
* Get options for code reviewer
|
|
66
|
+
* Get options for security code reviewer
|
|
66
67
|
*/
|
|
67
68
|
getCodeReviewerOptions(role = 'code_reviewer') {
|
|
68
69
|
const roleConfig = this.confDict[this.environment]?.[role];
|
|
69
70
|
const systemPrompt = roleConfig?.options?.system_prompt ||
|
|
70
|
-
'You are
|
|
71
|
+
'You are an Application Security (AppSec) expert assistant. You are responsible for performing a thorough code review. List out all the potential security and privacy issues found in the code.';
|
|
71
72
|
return {
|
|
72
73
|
agents: {
|
|
73
74
|
'code-reviewer': {
|
|
74
|
-
description: 'Reviews code for best practices and potential security
|
|
75
|
+
description: 'Reviews code for best practices and potential security issues only',
|
|
75
76
|
prompt: systemPrompt,
|
|
76
77
|
tools: ['Read', 'Grep', 'Write'],
|
|
77
78
|
model: 'sonnet'
|
|
@@ -86,17 +87,17 @@ class AgentOptions {
|
|
|
86
87
|
getThreatModelerOptions(role = 'threat_modeler') {
|
|
87
88
|
const roleConfig = this.confDict[this.environment]?.[role];
|
|
88
89
|
const systemPrompt = roleConfig?.options?.system_prompt ||
|
|
89
|
-
'You are
|
|
90
|
+
'You are an Application Security (AppSec) expert assistant. You are responsible for performing risk assessment on the source code repository for SOC2 type 2 compliance audit using the STRIDE methodology.';
|
|
90
91
|
return {
|
|
91
92
|
agents: {
|
|
92
|
-
'
|
|
93
|
-
description: '
|
|
93
|
+
'threat-modeler': {
|
|
94
|
+
description: 'Performs threat modeling and risk assessment using STRIDE methodology',
|
|
94
95
|
prompt: systemPrompt,
|
|
95
96
|
tools: ['Read', 'Grep', 'Write', 'Graphviz'],
|
|
96
97
|
model: 'sonnet'
|
|
97
98
|
}
|
|
98
99
|
},
|
|
99
|
-
permissionMode: 'bypassPermissions'
|
|
100
|
+
permissionMode: 'bypassPermissions'
|
|
100
101
|
};
|
|
101
102
|
}
|
|
102
103
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent_options.js","sourceRoot":"","sources":["../src/agent_options.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAWH,MAAa,YAAY;IACf,QAAQ,CAAa;IACrB,WAAW,CAAS;IACpB,YAAY,GAAmB,EAAE,CAAC;IAE1C,YAAY,QAAoB,EAAE,WAAmB;QACnD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,sBAAsB,GAAe,KAAK,EACxC,QAAgB,EAChB,SAAkC,EAClC,OAAO,EACoB,EAAE;QAC7B,uBAAuB;QACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE;SAC5E,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,yBAAyB;QACzB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;IACxD,CAAC,CAAA;IAED;;OAEG;IACH,0BAA0B,CAAC,OAAe,oBAAoB,EAAE,MAAsB;QACpF,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,YAAY,GAAG,UAAU,EAAE,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"agent_options.js","sourceRoot":"","sources":["../src/agent_options.ts"],"names":[],"mappings":"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"}
|
package/dist/blinking_cursor.js
CHANGED
|
@@ -28,11 +28,11 @@ class BlinkingCursor {
|
|
|
28
28
|
process.stdout.write('\x1b[?25l'); // Hide cursor
|
|
29
29
|
this.intervalId = setInterval(() => {
|
|
30
30
|
if (this.isVisible) {
|
|
31
|
-
process.stdout.write(`\
|
|
31
|
+
process.stdout.write(`\rClaude is thinking ... ${this.cursorChar}`);
|
|
32
32
|
this.isVisible = false;
|
|
33
33
|
}
|
|
34
34
|
else {
|
|
35
|
-
process.stdout.write(`\
|
|
35
|
+
process.stdout.write(`\rClaude is thinking ... `);
|
|
36
36
|
this.isVisible = true;
|
|
37
37
|
}
|
|
38
38
|
}, this.blinkInterval);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blinking_cursor.js","sourceRoot":"","sources":["../src/blinking_cursor.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH;;;GAGG;AACH,MAAa,cAAc;IACjB,UAAU,GAA0B,IAAI,CAAC;IACzC,SAAS,GAAY,IAAI,CAAC;IACjB,UAAU,GAAG,GAAG,CAAC;IACjB,aAAa,GAAG,GAAG,CAAC,CAAC,eAAe;IAErD;;;OAGG;IACH,KAAK;QACH,2CAA2C;QAC3C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,wBAAwB;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc;QAEjD,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;YACjC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"blinking_cursor.js","sourceRoot":"","sources":["../src/blinking_cursor.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH;;;GAGG;AACH,MAAa,cAAc;IACjB,UAAU,GAA0B,IAAI,CAAC;IACzC,SAAS,GAAY,IAAI,CAAC;IACjB,UAAU,GAAG,GAAG,CAAC;IACjB,aAAa,GAAG,GAAG,CAAC,CAAC,eAAe;IAErD;;;OAGG;IACH,KAAK;QACH,2CAA2C;QAC3C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,wBAAwB;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc;QAEjD,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;YACjC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBACpE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBACnD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACxB,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,oCAAoC;QACpC,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa;YAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc;QACnD,CAAC;IACH,CAAC;CACF;AA7CD,wCA6CC"}
|
package/dist/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAgB,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAgB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAiD1D,wBAAsB,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAwExE"}
|
package/dist/main.js
CHANGED
|
@@ -42,9 +42,51 @@ exports.main = main;
|
|
|
42
42
|
const fs = __importStar(require("fs-extra"));
|
|
43
43
|
const agent_actions_1 = require("./agent_actions");
|
|
44
44
|
const utils_1 = require("./utils");
|
|
45
|
+
/**
|
|
46
|
+
* Validate and copy source directory, exiting on validation failure
|
|
47
|
+
*/
|
|
48
|
+
function validateAndCopySrcDir(srcDir, cwd) {
|
|
49
|
+
if (!(0, utils_1.validateDirectoryPath)(srcDir, true)) {
|
|
50
|
+
const safePath = (0, utils_1.sanitizePathForError)(srcDir);
|
|
51
|
+
console.error(`Error: Invalid source directory path: ${safePath}`);
|
|
52
|
+
console.error('Source directory path must be valid and cannot contain directory traversal sequences.');
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
return (0, utils_1.copyProjectSrcDir)(cwd, srcDir);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Validate output file path, exiting on validation failure
|
|
59
|
+
*/
|
|
60
|
+
function validateOutputFile(outputFile, cwd) {
|
|
61
|
+
const validated = (0, utils_1.validateOutputFilePath)(outputFile, cwd);
|
|
62
|
+
if (!validated) {
|
|
63
|
+
const safePath = (0, utils_1.sanitizePathForError)(outputFile);
|
|
64
|
+
console.error(`Error: Invalid output file path: ${safePath}`);
|
|
65
|
+
console.error('Output file path must be relative to the current working directory and cannot contain directory traversal sequences.');
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
return validated;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Clean up temporary directory if it exists
|
|
72
|
+
*/
|
|
73
|
+
function cleanupTmpDir(tmpDir, verbose = false) {
|
|
74
|
+
if (!tmpDir || !fs.existsSync(tmpDir))
|
|
75
|
+
return;
|
|
76
|
+
try {
|
|
77
|
+
fs.removeSync(tmpDir);
|
|
78
|
+
if (verbose) {
|
|
79
|
+
const safePath = (0, utils_1.sanitizePathForError)(tmpDir);
|
|
80
|
+
console.log(`Cleaned up temporary directory: ${safePath}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
const safePath = (0, utils_1.sanitizePathForError)(tmpDir);
|
|
85
|
+
const errorMessage = error?.message || 'Unknown error';
|
|
86
|
+
console.warn(`Warning: Could not clean up temporary directory ${safePath}: ${errorMessage}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
45
89
|
async function main(confDict, args) {
|
|
46
|
-
// Capture working directory once at the start to avoid race conditions
|
|
47
|
-
// in concurrent contexts (e.g., web applications)
|
|
48
90
|
const currentWorkingDir = process.cwd();
|
|
49
91
|
const agentActions = new agent_actions_1.AgentActions(confDict, args.environment, args);
|
|
50
92
|
if (args.role === 'simple_query_agent') {
|
|
@@ -52,16 +94,8 @@ async function main(confDict, args) {
|
|
|
52
94
|
console.log("(Type '/end' to exit the conversation)\n");
|
|
53
95
|
let tmpSrcDir = null;
|
|
54
96
|
if (args.src_dir) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const safePath = (0, utils_1.sanitizePathForError)(args.src_dir);
|
|
58
|
-
console.error(`Error: Invalid source directory path: ${safePath}`);
|
|
59
|
-
console.error('Source directory path must be valid and cannot contain directory traversal sequences.');
|
|
60
|
-
process.exit(1);
|
|
61
|
-
}
|
|
62
|
-
tmpSrcDir = (0, utils_1.copyProjectSrcDir)(currentWorkingDir, args.src_dir);
|
|
63
|
-
const safeTmpPath = (0, utils_1.sanitizePathForError)(tmpSrcDir);
|
|
64
|
-
console.log(`Source code directory copied to: ${safeTmpPath}`);
|
|
97
|
+
tmpSrcDir = validateAndCopySrcDir(args.src_dir, currentWorkingDir);
|
|
98
|
+
console.log(`Source code directory copied to: ${(0, utils_1.sanitizePathForError)(tmpSrcDir)}`);
|
|
65
99
|
console.log('The agent can search files within this directory to answer your questions.\n');
|
|
66
100
|
}
|
|
67
101
|
const readline = require('readline');
|
|
@@ -69,124 +103,40 @@ async function main(confDict, args) {
|
|
|
69
103
|
input: process.stdin,
|
|
70
104
|
output: process.stdout
|
|
71
105
|
});
|
|
72
|
-
// Continuous conversation loop
|
|
73
106
|
while (true) {
|
|
74
|
-
// Wait for Claude's response to complete before showing next prompt
|
|
75
107
|
const yourPrompt = await new Promise((resolve) => {
|
|
76
|
-
rl.question("Your turn (enter '/end' to exit the conversation): ",
|
|
77
|
-
resolve(answer);
|
|
78
|
-
});
|
|
108
|
+
rl.question("Your turn (enter '/end' to exit the conversation): ", resolve);
|
|
79
109
|
});
|
|
80
|
-
// Check for exit command
|
|
81
110
|
if (yourPrompt.trim().toLowerCase() === '/end') {
|
|
82
111
|
console.log('\nExiting Simple Query Agent. Goodbye!');
|
|
83
112
|
rl.close();
|
|
84
113
|
break;
|
|
85
114
|
}
|
|
86
|
-
|
|
87
|
-
if (!yourPrompt.trim()) {
|
|
115
|
+
if (!yourPrompt.trim())
|
|
88
116
|
continue;
|
|
89
|
-
}
|
|
90
|
-
// Process the query and wait for complete response
|
|
91
|
-
// The method will add proper spacing after the response completes
|
|
92
117
|
await agentActions.simpleQueryClaudeWithOptions(yourPrompt, tmpSrcDir);
|
|
93
|
-
// Ensure stdout is fully flushed and event loop processes all writes
|
|
94
|
-
// before showing next prompt. This prevents the prompt from appearing
|
|
95
|
-
// before streaming output completes.
|
|
96
118
|
await new Promise(resolve => setImmediate(resolve));
|
|
97
119
|
}
|
|
98
|
-
|
|
99
|
-
if (tmpSrcDir && fs.existsSync(tmpSrcDir)) {
|
|
100
|
-
try {
|
|
101
|
-
fs.removeSync(tmpSrcDir);
|
|
102
|
-
const safePath = (0, utils_1.sanitizePathForError)(tmpSrcDir);
|
|
103
|
-
console.log(`Cleaned up temporary directory: ${safePath}`);
|
|
104
|
-
}
|
|
105
|
-
catch (error) {
|
|
106
|
-
const safePath = (0, utils_1.sanitizePathForError)(tmpSrcDir);
|
|
107
|
-
const errorMessage = error?.message || 'Unknown error';
|
|
108
|
-
console.warn(`Warning: Could not clean up temporary directory ${safePath}: ${errorMessage}`);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
120
|
+
cleanupTmpDir(tmpSrcDir, true);
|
|
111
121
|
}
|
|
112
122
|
else if (args.role === 'code_reviewer') {
|
|
113
123
|
console.log('Running Code Review Agent');
|
|
114
|
-
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
console.error(`Error: Invalid output file path: ${safePath}`);
|
|
119
|
-
console.error('Output file path must be relative to the current working directory and cannot contain directory traversal sequences.');
|
|
120
|
-
process.exit(1);
|
|
121
|
-
}
|
|
122
|
-
let userPrompt;
|
|
123
|
-
let tmpSrcDir = null;
|
|
124
|
-
if (args.src_dir) {
|
|
125
|
-
// Validate source directory path
|
|
126
|
-
if (!(0, utils_1.validateDirectoryPath)(args.src_dir, true)) {
|
|
127
|
-
const safePath = (0, utils_1.sanitizePathForError)(args.src_dir);
|
|
128
|
-
console.error(`Error: Invalid source directory path: ${safePath}`);
|
|
129
|
-
console.error('Source directory path must be valid and cannot contain directory traversal sequences.');
|
|
130
|
-
process.exit(1);
|
|
131
|
-
}
|
|
132
|
-
tmpSrcDir = (0, utils_1.copyProjectSrcDir)(currentWorkingDir, args.src_dir);
|
|
133
|
-
userPrompt = `Review the code in the current working directory ${tmpSrcDir}, then provide a report of the potential security and privacy issues found in the code. Please write the review report in the ${validatedOutputFile} file under current working directory in ${args.output_format} format.`;
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
userPrompt = `Review the code in the current working directory, then provide a report of the potential security and privacy issues found in the code. Please write the review report in the ${validatedOutputFile} file under current working directory in ${args.output_format} format.`;
|
|
137
|
-
}
|
|
124
|
+
const outputFile = validateOutputFile(args.output_file || 'code_review_report.md', currentWorkingDir);
|
|
125
|
+
const tmpSrcDir = args.src_dir ? validateAndCopySrcDir(args.src_dir, currentWorkingDir) : null;
|
|
126
|
+
const srcLocation = tmpSrcDir ? `current working directory ${tmpSrcDir}` : 'current working directory';
|
|
127
|
+
const userPrompt = `Review the code in the ${srcLocation}, then provide a report of the potential security issues found in the code. Please write the review report in the ${outputFile} file under current working directory in ${args.output_format} format.`;
|
|
138
128
|
await agentActions.codeReviewerWithOptions(userPrompt);
|
|
139
|
-
|
|
140
|
-
if (tmpSrcDir && fs.existsSync(tmpSrcDir)) {
|
|
141
|
-
try {
|
|
142
|
-
fs.removeSync(tmpSrcDir);
|
|
143
|
-
}
|
|
144
|
-
catch (error) {
|
|
145
|
-
const safePath = (0, utils_1.sanitizePathForError)(tmpSrcDir);
|
|
146
|
-
const errorMessage = error?.message || 'Unknown error';
|
|
147
|
-
console.warn(`Warning: Could not clean up temporary directory ${safePath}: ${errorMessage}`);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
129
|
+
cleanupTmpDir(tmpSrcDir);
|
|
150
130
|
}
|
|
151
131
|
else if (args.role === 'threat_modeler') {
|
|
152
132
|
console.log('Running Threat Modeler');
|
|
153
|
-
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
console.error('Output file path must be relative to the current working directory and cannot contain directory traversal sequences.');
|
|
159
|
-
process.exit(1);
|
|
160
|
-
}
|
|
161
|
-
const userPrompt0 = `Draw the ASCII text based Data Flow Diagram (DFD), with output format as <codebase_data_flow_diagram_text_timestamp>. Then proceeding to use STRIDE methodology to perform threat modeling on the DFD, without output report in the format <codebase_threat_model_timestamp>. Finally, provide a separate risk registry report including proposed remediation plan in the format <codebase_risk_registry_text_timestamp>. We're looking for 3 reports in the current working directory as the deliverable. Please write the threat modeler report in the ${validatedOutputFile} file under current working directory in ${args.output_format} format.`;
|
|
162
|
-
let tmpSrcDir = null;
|
|
163
|
-
let userPrompt;
|
|
164
|
-
if (args.src_dir) {
|
|
165
|
-
// Validate source directory path
|
|
166
|
-
if (!(0, utils_1.validateDirectoryPath)(args.src_dir, true)) {
|
|
167
|
-
const safePath = (0, utils_1.sanitizePathForError)(args.src_dir);
|
|
168
|
-
console.error(`Error: Invalid source directory path: ${safePath}`);
|
|
169
|
-
console.error('Source directory path must be valid and cannot contain directory traversal sequences.');
|
|
170
|
-
process.exit(1);
|
|
171
|
-
}
|
|
172
|
-
tmpSrcDir = (0, utils_1.copyProjectSrcDir)(currentWorkingDir, args.src_dir);
|
|
173
|
-
userPrompt = `Review the code in the ${tmpSrcDir} directory. ${userPrompt0}`;
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
userPrompt = `Review the code in the current working directory. ${userPrompt0}`;
|
|
177
|
-
}
|
|
133
|
+
const outputFile = validateOutputFile(args.output_file || 'threat_model_report.md', currentWorkingDir);
|
|
134
|
+
const tmpSrcDir = args.src_dir ? validateAndCopySrcDir(args.src_dir, currentWorkingDir) : null;
|
|
135
|
+
const srcLocation = tmpSrcDir ? `the ${tmpSrcDir} directory` : 'the current working directory';
|
|
136
|
+
const basePrompt = `Draw the ASCII text based Data Flow Diagram (DFD), with output format as <codebase_data_flow_diagram_text_timestamp>. Then proceeding to use STRIDE methodology to perform threat modeling on the DFD, without output report in the format <codebase_threat_model_timestamp>. Finally, provide a separate risk registry report including proposed remediation plan in the format <codebase_risk_registry_text_timestamp>. We're looking for 3 reports in the current working directory as the deliverable. Please write the threat modeler reportg under the current working directory in ${args.output_format} format.`;
|
|
137
|
+
const userPrompt = `Review the code in ${srcLocation}. ${basePrompt}`;
|
|
178
138
|
await agentActions.threatModelerAgentWithOptions(userPrompt);
|
|
179
|
-
|
|
180
|
-
if (tmpSrcDir && fs.existsSync(tmpSrcDir)) {
|
|
181
|
-
try {
|
|
182
|
-
fs.removeSync(tmpSrcDir);
|
|
183
|
-
}
|
|
184
|
-
catch (error) {
|
|
185
|
-
const safePath = (0, utils_1.sanitizePathForError)(tmpSrcDir);
|
|
186
|
-
const errorMessage = error?.message || 'Unknown error';
|
|
187
|
-
console.warn(`Warning: Could not clean up temporary directory ${safePath}: ${errorMessage}`);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
139
|
+
cleanupTmpDir(tmpSrcDir);
|
|
190
140
|
}
|
|
191
141
|
else {
|
|
192
142
|
console.error(`Error: Invalid appsec AI agent role: ${args.role} - refer to 'appsec_agent.yaml' for available roles`);
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appsec-agent",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "TypeScript package for AppSec AI Agent management",
|
|
5
5
|
"author": "Sam Li",
|
|
6
|
-
"date": "Dec
|
|
6
|
+
"date": "Dec 17 2025",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"main": "dist/index.js",
|
|
9
9
|
"types": "dist/index.d.ts",
|