appsec-agent 0.0.1
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/README.md +233 -0
- package/bin/agent-run.js +82 -0
- package/bin/agent-run.ts +1 -0
- package/conf/appsec_agent.yaml +31 -0
- package/dist/agent_actions.d.ts +33 -0
- package/dist/agent_actions.d.ts.map +1 -0
- package/dist/agent_actions.js +221 -0
- package/dist/agent_actions.js.map +1 -0
- package/dist/agent_options.d.ts +35 -0
- package/dist/agent_options.d.ts.map +1 -0
- package/dist/agent_options.js +86 -0
- package/dist/agent_options.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +8 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +100 -0
- package/dist/main.js.map +1 -0
- package/dist/utils.d.ts +62 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +302 -0
- package/dist/utils.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Agent Options Management for AppSec AI Agent
|
|
4
|
+
*
|
|
5
|
+
* Author: Sam Li
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.AgentOptions = void 0;
|
|
9
|
+
class AgentOptions {
|
|
10
|
+
confDict;
|
|
11
|
+
environment;
|
|
12
|
+
toolUsageLog = [];
|
|
13
|
+
constructor(confDict, environment) {
|
|
14
|
+
this.confDict = confDict;
|
|
15
|
+
this.environment = environment;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Tool permission callback to control tool access
|
|
19
|
+
*/
|
|
20
|
+
toolPermissionCallback = async (toolName, inputData, options) => {
|
|
21
|
+
// Log the tool request
|
|
22
|
+
this.toolUsageLog.push({
|
|
23
|
+
tool: toolName,
|
|
24
|
+
input: inputData,
|
|
25
|
+
suggestions: options.suggestions ? JSON.stringify(options.suggestions) : ''
|
|
26
|
+
});
|
|
27
|
+
console.log(`\n🔧 Tool Permission Request: ${toolName}`);
|
|
28
|
+
console.log(` Input: ${JSON.stringify(inputData, null, 2)}`);
|
|
29
|
+
if (options.suggestions) {
|
|
30
|
+
console.log(` Suggestions: ${JSON.stringify(options.suggestions)}`);
|
|
31
|
+
}
|
|
32
|
+
console.log();
|
|
33
|
+
// Auto-approve all tools
|
|
34
|
+
return { behavior: 'allow', updatedInput: inputData };
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Get options for simple query agent
|
|
38
|
+
*/
|
|
39
|
+
getSimpleQueryAgentOptions(role = 'simple_query_agent') {
|
|
40
|
+
const roleConfig = this.confDict[this.environment]?.[role];
|
|
41
|
+
return {
|
|
42
|
+
systemPrompt: roleConfig?.options?.system_prompt || 'You are an AppSec expert assistant.',
|
|
43
|
+
maxTurns: roleConfig?.options?.max_turns || 1
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get options for code reviewer
|
|
48
|
+
*/
|
|
49
|
+
getCodeReviewerOptions(role = 'code_reviewer') {
|
|
50
|
+
const roleConfig = this.confDict[this.environment]?.[role];
|
|
51
|
+
const systemPrompt = roleConfig?.options?.system_prompt ||
|
|
52
|
+
'You are a code reviewer assistant. Review code for security and privacy issues.';
|
|
53
|
+
return {
|
|
54
|
+
agents: {
|
|
55
|
+
'code-reviewer': {
|
|
56
|
+
description: 'Reviews code for best practices and potential security and privacy issues',
|
|
57
|
+
prompt: systemPrompt,
|
|
58
|
+
tools: ['Read', 'Grep', 'Write'],
|
|
59
|
+
model: 'sonnet'
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
permissionMode: 'bypassPermissions'
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get options for threat modeler
|
|
67
|
+
*/
|
|
68
|
+
getThreatModelerOptions(role = 'threat_modeler') {
|
|
69
|
+
const roleConfig = this.confDict[this.environment]?.[role];
|
|
70
|
+
const systemPrompt = roleConfig?.options?.system_prompt ||
|
|
71
|
+
'You are a code reviewer assistant. Perform risk assessment on source code for SOC2 type 2 compliance audit.';
|
|
72
|
+
return {
|
|
73
|
+
agents: {
|
|
74
|
+
'code-reviewer': {
|
|
75
|
+
description: 'Threat modeler agent',
|
|
76
|
+
prompt: systemPrompt,
|
|
77
|
+
tools: ['Read', 'Grep', 'Write', 'Graphviz'],
|
|
78
|
+
model: 'sonnet'
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
permissionMode: 'bypassPermissions' // Skip all approval prompts - tools are pre-approved
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.AgentOptions = AgentOptions;
|
|
86
|
+
//# sourceMappingURL=agent_options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent_options.js","sourceRoot":"","sources":["../src/agent_options.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main entry point exports for AppSec AI Agent
|
|
3
|
+
*
|
|
4
|
+
* Author: Sam Li
|
|
5
|
+
*/
|
|
6
|
+
export { AgentActions, AgentArgs } from './agent_actions';
|
|
7
|
+
export { AgentOptions, ToolUsageLog } from './agent_options';
|
|
8
|
+
export { main } from './main';
|
|
9
|
+
export * from './utils';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,cAAc,SAAS,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Main entry point exports for AppSec AI Agent
|
|
4
|
+
*
|
|
5
|
+
* Author: Sam Li
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
19
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.main = exports.AgentOptions = exports.AgentActions = void 0;
|
|
23
|
+
var agent_actions_1 = require("./agent_actions");
|
|
24
|
+
Object.defineProperty(exports, "AgentActions", { enumerable: true, get: function () { return agent_actions_1.AgentActions; } });
|
|
25
|
+
var agent_options_1 = require("./agent_options");
|
|
26
|
+
Object.defineProperty(exports, "AgentOptions", { enumerable: true, get: function () { return agent_options_1.AgentOptions; } });
|
|
27
|
+
var main_1 = require("./main");
|
|
28
|
+
Object.defineProperty(exports, "main", { enumerable: true, get: function () { return main_1.main; } });
|
|
29
|
+
__exportStar(require("./utils"), exports);
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;AAEH,iDAA0D;AAAjD,6GAAA,YAAY,OAAA;AACrB,iDAA6D;AAApD,6GAAA,YAAY,OAAA;AACrB,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,0CAAwB"}
|
package/dist/main.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAgB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG1D,wBAAsB,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DxE"}
|
package/dist/main.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Main entry point for AppSec AI Agent
|
|
4
|
+
*
|
|
5
|
+
* Author: Sam Li
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.main = main;
|
|
42
|
+
const fs = __importStar(require("fs-extra"));
|
|
43
|
+
const agent_actions_1 = require("./agent_actions");
|
|
44
|
+
const utils_1 = require("./utils");
|
|
45
|
+
async function main(confDict, args) {
|
|
46
|
+
const agentActions = new agent_actions_1.AgentActions(confDict, args.environment, args);
|
|
47
|
+
if (args.role === 'simple_query_agent') {
|
|
48
|
+
console.log('Running Simple Query Agent');
|
|
49
|
+
const readline = require('readline');
|
|
50
|
+
const rl = readline.createInterface({
|
|
51
|
+
input: process.stdin,
|
|
52
|
+
output: process.stdout
|
|
53
|
+
});
|
|
54
|
+
const yourPrompt = await new Promise((resolve) => {
|
|
55
|
+
rl.question('Please enter your query: ', (answer) => {
|
|
56
|
+
rl.close();
|
|
57
|
+
resolve(answer);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
await agentActions.simpleQueryClaudeWithOptions(yourPrompt);
|
|
61
|
+
}
|
|
62
|
+
else if (args.role === 'code_reviewer') {
|
|
63
|
+
console.log('Running Code Review Agent');
|
|
64
|
+
let userPrompt;
|
|
65
|
+
if (args.src_dir) {
|
|
66
|
+
const currentWorkingDir = process.cwd();
|
|
67
|
+
const tmpSrcDir = (0, utils_1.copyProjectSrcDir)(currentWorkingDir, args.src_dir);
|
|
68
|
+
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 ${args.output_file} file under current working directory in ${args.output_format} format.`;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
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 ${args.output_file} file under current working directory in ${args.output_format} format.`;
|
|
72
|
+
}
|
|
73
|
+
await agentActions.codeReviewerWithOptions(userPrompt);
|
|
74
|
+
}
|
|
75
|
+
else if (args.role === 'threat_modeler') {
|
|
76
|
+
console.log('Running Threat Modeler');
|
|
77
|
+
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 ${args.output_file} file under current working directory in ${args.output_format} format.`;
|
|
78
|
+
let tmpSrcDir = null;
|
|
79
|
+
let userPrompt;
|
|
80
|
+
if (args.src_dir) {
|
|
81
|
+
const currentWorkingDir = process.cwd();
|
|
82
|
+
tmpSrcDir = (0, utils_1.copyProjectSrcDir)(currentWorkingDir, args.src_dir);
|
|
83
|
+
userPrompt = `Review the code in the ${tmpSrcDir} directory. ${userPrompt0}`;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
userPrompt = `Review the code in the current working directory. ${userPrompt0}`;
|
|
87
|
+
}
|
|
88
|
+
await agentActions.threatModelerAgentWithOptions(userPrompt);
|
|
89
|
+
// Clean up temporary source code directory
|
|
90
|
+
if (tmpSrcDir && fs.existsSync(tmpSrcDir)) {
|
|
91
|
+
fs.removeSync(tmpSrcDir);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
console.error(`Error: Invalid appsec AI agent role: ${args.role} - refer to 'appsec_agent.yaml' for available roles`);
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
process.exit(0);
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for AppSec AI Agent
|
|
3
|
+
*
|
|
4
|
+
* Author: Sam Li
|
|
5
|
+
*/
|
|
6
|
+
export interface ConfigDict {
|
|
7
|
+
[key: string]: any;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Check if a path is a valid directory
|
|
11
|
+
*/
|
|
12
|
+
export declare function isDirectory(dirName: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Check if a path is a valid file
|
|
15
|
+
*/
|
|
16
|
+
export declare function isFile(fileName: string): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Convert file rows to a list, filtering out comments
|
|
19
|
+
*/
|
|
20
|
+
export declare function fileToList(file: string): string[];
|
|
21
|
+
/**
|
|
22
|
+
* Convert a list to a file, one row at a time
|
|
23
|
+
*/
|
|
24
|
+
export declare function listToFile(list: string[], file: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Convert JSON file content to object
|
|
27
|
+
*/
|
|
28
|
+
export declare function fileToJson(file: string): any;
|
|
29
|
+
/**
|
|
30
|
+
* Convert JSON data to a file
|
|
31
|
+
*/
|
|
32
|
+
export declare function jsonToFile(jsonData: any, file: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Execute shell command and return code, stdout, stderr
|
|
35
|
+
*/
|
|
36
|
+
export declare function runCommand(cmd: string): {
|
|
37
|
+
code: number;
|
|
38
|
+
stdout: string;
|
|
39
|
+
stderr: string;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Get the project root absolute path
|
|
43
|
+
*/
|
|
44
|
+
export declare function getProjectRoot(): string;
|
|
45
|
+
export declare function loadYaml(confFile: string, verbose?: boolean): ConfigDict | null;
|
|
46
|
+
/**
|
|
47
|
+
* Get property value from package.json
|
|
48
|
+
*/
|
|
49
|
+
export declare function getProperty(prop: string): string;
|
|
50
|
+
/**
|
|
51
|
+
* Copy project source code directory to current working directory
|
|
52
|
+
*/
|
|
53
|
+
export declare function copyProjectSrcDir(currentWorkingDir: string, srcDir: string): string;
|
|
54
|
+
/**
|
|
55
|
+
* List all available roles
|
|
56
|
+
*/
|
|
57
|
+
export declare function listRoles(confDict: ConfigDict, environment: string): void;
|
|
58
|
+
/**
|
|
59
|
+
* Print program version info
|
|
60
|
+
*/
|
|
61
|
+
export declare function printVersionInfo(): void;
|
|
62
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMpD;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMhD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAQhE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAQ5C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ/D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAWxF;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAsED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe,GAAG,UAAU,GAAG,IAAI,CA2BtF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAkBnF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAUzE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAKvC"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Utility functions for AppSec AI Agent
|
|
4
|
+
*
|
|
5
|
+
* Author: Sam Li
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.isDirectory = isDirectory;
|
|
42
|
+
exports.isFile = isFile;
|
|
43
|
+
exports.fileToList = fileToList;
|
|
44
|
+
exports.listToFile = listToFile;
|
|
45
|
+
exports.fileToJson = fileToJson;
|
|
46
|
+
exports.jsonToFile = jsonToFile;
|
|
47
|
+
exports.runCommand = runCommand;
|
|
48
|
+
exports.getProjectRoot = getProjectRoot;
|
|
49
|
+
exports.loadYaml = loadYaml;
|
|
50
|
+
exports.getProperty = getProperty;
|
|
51
|
+
exports.copyProjectSrcDir = copyProjectSrcDir;
|
|
52
|
+
exports.listRoles = listRoles;
|
|
53
|
+
exports.printVersionInfo = printVersionInfo;
|
|
54
|
+
const fs = __importStar(require("fs-extra"));
|
|
55
|
+
const path = __importStar(require("path"));
|
|
56
|
+
const yaml = __importStar(require("yaml"));
|
|
57
|
+
const child_process_1 = require("child_process");
|
|
58
|
+
/**
|
|
59
|
+
* Check if a path is a valid directory
|
|
60
|
+
*/
|
|
61
|
+
function isDirectory(dirName) {
|
|
62
|
+
try {
|
|
63
|
+
return fs.existsSync(dirName) && fs.statSync(dirName).isDirectory();
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check if a path is a valid file
|
|
71
|
+
*/
|
|
72
|
+
function isFile(fileName) {
|
|
73
|
+
try {
|
|
74
|
+
return fs.statSync(fileName).isFile();
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Convert file rows to a list, filtering out comments
|
|
82
|
+
*/
|
|
83
|
+
function fileToList(file) {
|
|
84
|
+
const commentPattern = /^#|^\s+#/;
|
|
85
|
+
const myList = [];
|
|
86
|
+
try {
|
|
87
|
+
const content = fs.readFileSync(file, 'utf-8');
|
|
88
|
+
const lines = content.split('\n');
|
|
89
|
+
for (const line of lines) {
|
|
90
|
+
const trimmed = line.trim();
|
|
91
|
+
if (trimmed && !commentPattern.test(trimmed)) {
|
|
92
|
+
myList.push(trimmed);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.error(`Error reading file ${file}:`, error);
|
|
98
|
+
}
|
|
99
|
+
return myList;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Convert a list to a file, one row at a time
|
|
103
|
+
*/
|
|
104
|
+
function listToFile(list, file) {
|
|
105
|
+
try {
|
|
106
|
+
fs.writeFileSync(file, list.join('\n') + '\n');
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
console.error('Error:', error);
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Convert JSON file content to object
|
|
116
|
+
*/
|
|
117
|
+
function fileToJson(file) {
|
|
118
|
+
try {
|
|
119
|
+
const content = fs.readFileSync(file, 'utf-8').replace(/\n/g, '');
|
|
120
|
+
return JSON.parse(content);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
console.error(`Error reading JSON file ${file}:`, error);
|
|
124
|
+
return {};
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Convert JSON data to a file
|
|
129
|
+
*/
|
|
130
|
+
function jsonToFile(jsonData, file) {
|
|
131
|
+
try {
|
|
132
|
+
fs.writeFileSync(file, JSON.stringify(jsonData, null, 4));
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
console.error('Error:', error);
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Execute shell command and return code, stdout, stderr
|
|
142
|
+
*/
|
|
143
|
+
function runCommand(cmd) {
|
|
144
|
+
try {
|
|
145
|
+
const stdout = (0, child_process_1.execSync)(cmd, { encoding: 'utf-8' });
|
|
146
|
+
return { code: 0, stdout, stderr: '' };
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
return {
|
|
150
|
+
code: error.status || 1,
|
|
151
|
+
stdout: error.stdout?.toString() || '',
|
|
152
|
+
stderr: error.stderr?.toString() || error.message || ''
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Get the project root absolute path
|
|
158
|
+
*/
|
|
159
|
+
function getProjectRoot() {
|
|
160
|
+
return path.resolve(__dirname, '..');
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Process environment variable references in YAML
|
|
164
|
+
*/
|
|
165
|
+
function processEnvVars(value) {
|
|
166
|
+
if (typeof value === 'string') {
|
|
167
|
+
const envPattern = /^<%= ENV\['(.*)'\] %>(.*)$/;
|
|
168
|
+
const match = value.match(envPattern);
|
|
169
|
+
if (match) {
|
|
170
|
+
return process.env[match[1]] || match[2] || '';
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
else if (Array.isArray(value)) {
|
|
174
|
+
return value.map(processEnvVars);
|
|
175
|
+
}
|
|
176
|
+
else if (typeof value === 'object' && value !== null) {
|
|
177
|
+
const processed = {};
|
|
178
|
+
for (const [key, val] of Object.entries(value)) {
|
|
179
|
+
processed[key] = processEnvVars(val);
|
|
180
|
+
}
|
|
181
|
+
return processed;
|
|
182
|
+
}
|
|
183
|
+
return value;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Load YAML configuration file
|
|
187
|
+
*/
|
|
188
|
+
/**
|
|
189
|
+
* Expand YAML merge keys (<<: *anchor)
|
|
190
|
+
*/
|
|
191
|
+
function expandMergeKeys(obj) {
|
|
192
|
+
if (obj === null || typeof obj !== 'object') {
|
|
193
|
+
return obj;
|
|
194
|
+
}
|
|
195
|
+
if (Array.isArray(obj)) {
|
|
196
|
+
return obj.map(expandMergeKeys);
|
|
197
|
+
}
|
|
198
|
+
const expanded = {};
|
|
199
|
+
// First, expand all merge keys
|
|
200
|
+
const mergeKeys = [];
|
|
201
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
202
|
+
if (key === '<<') {
|
|
203
|
+
// Handle merge key - can be single object or array
|
|
204
|
+
const mergeValue = Array.isArray(value) ? value : [value];
|
|
205
|
+
mergeKeys.push(...mergeValue.map(expandMergeKeys));
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
expanded[key] = expandMergeKeys(value);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// Merge all merge keys into the expanded object (later keys override earlier ones)
|
|
212
|
+
for (const mergeObj of mergeKeys) {
|
|
213
|
+
if (mergeObj && typeof mergeObj === 'object') {
|
|
214
|
+
Object.assign(expanded, mergeObj);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Finally, apply the non-merge keys (they override merged values)
|
|
218
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
219
|
+
if (key !== '<<') {
|
|
220
|
+
expanded[key] = expandMergeKeys(value);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return expanded;
|
|
224
|
+
}
|
|
225
|
+
function loadYaml(confFile, verbose = false) {
|
|
226
|
+
console.log(`Loading yaml configuration file: ${confFile}`);
|
|
227
|
+
if (!isFile(confFile)) {
|
|
228
|
+
console.error(`Error file not exist: ${confFile}`);
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
try {
|
|
232
|
+
const content = fs.readFileSync(confFile, 'utf-8');
|
|
233
|
+
const parsed = yaml.parse(content);
|
|
234
|
+
// Expand YAML merge keys first
|
|
235
|
+
const withMerges = expandMergeKeys(parsed);
|
|
236
|
+
// Process environment variable references
|
|
237
|
+
const processed = processEnvVars(withMerges);
|
|
238
|
+
if (verbose) {
|
|
239
|
+
console.log('conf_dict:', JSON.stringify(processed, null, 2));
|
|
240
|
+
}
|
|
241
|
+
return processed;
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
console.error(`Error loading YAML file ${confFile}:`, error);
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Get property value from package.json
|
|
250
|
+
*/
|
|
251
|
+
function getProperty(prop) {
|
|
252
|
+
const packageJsonPath = path.join(getProjectRoot(), 'package.json');
|
|
253
|
+
try {
|
|
254
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
255
|
+
return packageJson[prop] || '';
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
return '';
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Copy project source code directory to current working directory
|
|
263
|
+
*/
|
|
264
|
+
function copyProjectSrcDir(currentWorkingDir, srcDir) {
|
|
265
|
+
if (!fs.existsSync(srcDir)) {
|
|
266
|
+
console.error(`Error: Source directory ${srcDir} does not exist`);
|
|
267
|
+
process.exit(1);
|
|
268
|
+
}
|
|
269
|
+
const srcDirList = srcDir.split(path.sep).filter(Boolean);
|
|
270
|
+
const tmpSrcDir = path.join(currentWorkingDir, '.' + srcDirList[srcDirList.length - 1]);
|
|
271
|
+
// Remove existing directory if it exists
|
|
272
|
+
if (fs.existsSync(tmpSrcDir) && fs.statSync(tmpSrcDir).isDirectory()) {
|
|
273
|
+
fs.removeSync(tmpSrcDir);
|
|
274
|
+
}
|
|
275
|
+
console.log(`Copying project source code directory from ${srcDir} to ${tmpSrcDir}`);
|
|
276
|
+
fs.copySync(srcDir, tmpSrcDir);
|
|
277
|
+
return tmpSrcDir;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* List all available roles
|
|
281
|
+
*/
|
|
282
|
+
function listRoles(confDict, environment) {
|
|
283
|
+
console.log('Available roles:');
|
|
284
|
+
if (confDict[environment]) {
|
|
285
|
+
for (const role of Object.keys(confDict[environment])) {
|
|
286
|
+
if (role !== 'options') {
|
|
287
|
+
console.log(`- ${role}`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
console.log();
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Print program version info
|
|
295
|
+
*/
|
|
296
|
+
function printVersionInfo() {
|
|
297
|
+
console.log(`AppSec AI Agent Version: ${getProperty('version')}`);
|
|
298
|
+
console.log(`AppSec AI Agent Release Date: ${getProperty('date') || 'Oct 27 2025'}`);
|
|
299
|
+
console.log(`AppSec AI Agent Author: ${getProperty('author')}`);
|
|
300
|
+
console.log();
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|