@pentoshi/clai 0.5.10 → 0.7.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/dist/agent/context-manager.d.ts +27 -0
- package/dist/agent/context-manager.js +75 -0
- package/dist/agent/context-manager.js.map +1 -0
- package/dist/agent/runner.d.ts +21 -1
- package/dist/agent/runner.js +120 -30
- package/dist/agent/runner.js.map +1 -1
- package/dist/commands/doctor.js +21 -3
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/update.js +11 -2
- package/dist/commands/update.js.map +1 -1
- package/dist/context/manager.d.ts +4 -0
- package/dist/context/manager.js +48 -0
- package/dist/context/manager.js.map +1 -0
- package/dist/index.js +156 -5
- package/dist/index.js.map +1 -1
- package/dist/llm/anthropic.js +29 -38
- package/dist/llm/anthropic.js.map +1 -1
- package/dist/llm/gemini.js +31 -40
- package/dist/llm/gemini.js.map +1 -1
- package/dist/llm/http.d.ts +21 -0
- package/dist/llm/http.js +140 -1
- package/dist/llm/http.js.map +1 -1
- package/dist/llm/ollama.js +18 -27
- package/dist/llm/ollama.js.map +1 -1
- package/dist/llm/router.d.ts +7 -0
- package/dist/llm/router.js +15 -9
- package/dist/llm/router.js.map +1 -1
- package/dist/modes/agent.d.ts +4 -2
- package/dist/modes/agent.js +2 -2
- package/dist/modes/agent.js.map +1 -1
- package/dist/os/pkgmgr.d.ts +7 -1
- package/dist/os/pkgmgr.js +97 -18
- package/dist/os/pkgmgr.js.map +1 -1
- package/dist/prompts/index.d.ts +7 -0
- package/dist/prompts/index.js +12 -4
- package/dist/prompts/index.js.map +1 -1
- package/dist/repl.d.ts +1 -0
- package/dist/repl.js +283 -18
- package/dist/repl.js.map +1 -1
- package/dist/safety/classifier.d.ts +5 -1
- package/dist/safety/classifier.js +254 -29
- package/dist/safety/classifier.js.map +1 -1
- package/dist/safety/patterns.d.ts +48 -1
- package/dist/safety/patterns.js +129 -13
- package/dist/safety/patterns.js.map +1 -1
- package/dist/store/config.d.ts +21 -1
- package/dist/store/config.js +28 -7
- package/dist/store/config.js.map +1 -1
- package/dist/store/history.d.ts +9 -0
- package/dist/store/history.js +58 -1
- package/dist/store/history.js.map +1 -1
- package/dist/store/keys.d.ts +2 -1
- package/dist/store/keys.js +8 -4
- package/dist/store/keys.js.map +1 -1
- package/dist/store/logs.d.ts +7 -0
- package/dist/store/logs.js +39 -1
- package/dist/store/logs.js.map +1 -1
- package/dist/store/project.d.ts +1 -0
- package/dist/store/project.js +34 -7
- package/dist/store/project.js.map +1 -1
- package/dist/store/scope.d.ts +29 -0
- package/dist/store/scope.js +113 -0
- package/dist/store/scope.js.map +1 -0
- package/dist/tools/artifacts.d.ts +9 -0
- package/dist/tools/artifacts.js +38 -0
- package/dist/tools/artifacts.js.map +1 -0
- package/dist/tools/fs.d.ts +6 -2
- package/dist/tools/fs.js +95 -17
- package/dist/tools/fs.js.map +1 -1
- package/dist/tools/http.d.ts +5 -2
- package/dist/tools/http.js +177 -8
- package/dist/tools/http.js.map +1 -1
- package/dist/tools/policies/output-policy.d.ts +13 -0
- package/dist/tools/policies/output-policy.js +56 -0
- package/dist/tools/policies/output-policy.js.map +1 -0
- package/dist/tools/reducers/ffuf.d.ts +6 -0
- package/dist/tools/reducers/ffuf.js +74 -0
- package/dist/tools/reducers/ffuf.js.map +1 -0
- package/dist/tools/reducers/generic.d.ts +2 -0
- package/dist/tools/reducers/generic.js +60 -0
- package/dist/tools/reducers/generic.js.map +1 -0
- package/dist/tools/reducers/gobuster.d.ts +2 -0
- package/dist/tools/reducers/gobuster.js +36 -0
- package/dist/tools/reducers/gobuster.js.map +1 -0
- package/dist/tools/reducers/httpx.d.ts +2 -0
- package/dist/tools/reducers/httpx.js +38 -0
- package/dist/tools/reducers/httpx.js.map +1 -0
- package/dist/tools/reducers/nmap.d.ts +7 -0
- package/dist/tools/reducers/nmap.js +82 -0
- package/dist/tools/reducers/nmap.js.map +1 -0
- package/dist/tools/reducers/nuclei.d.ts +2 -0
- package/dist/tools/reducers/nuclei.js +51 -0
- package/dist/tools/reducers/nuclei.js.map +1 -0
- package/dist/tools/reducers/sqlmap.d.ts +2 -0
- package/dist/tools/reducers/sqlmap.js +39 -0
- package/dist/tools/reducers/sqlmap.js.map +1 -0
- package/dist/tools/reducers/subdomains.d.ts +6 -0
- package/dist/tools/reducers/subdomains.js +31 -0
- package/dist/tools/reducers/subdomains.js.map +1 -0
- package/dist/tools/reducers/types.d.ts +14 -0
- package/dist/tools/reducers/types.js +2 -0
- package/dist/tools/reducers/types.js.map +1 -0
- package/dist/tools/registry.d.ts +1 -1
- package/dist/tools/registry.js +224 -43
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/shell.d.ts +45 -0
- package/dist/tools/shell.js +430 -12
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/validate.d.ts +37 -0
- package/dist/tools/validate.js +144 -0
- package/dist/tools/validate.js.map +1 -0
- package/dist/types.d.ts +8 -0
- package/dist/ui/keys.d.ts +21 -0
- package/dist/ui/keys.js +13 -0
- package/dist/ui/keys.js.map +1 -0
- package/dist/ui/output-pane.d.ts +31 -0
- package/dist/ui/output-pane.js +81 -0
- package/dist/ui/output-pane.js.map +1 -0
- package/dist/ui/tool-output.d.ts +18 -0
- package/dist/ui/tool-output.js +135 -0
- package/dist/ui/tool-output.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
const SEVERITY_ORDER = ["critical", "high", "medium", "low", "info", "unknown"];
|
|
2
|
+
export const nucleiReducer = (raw) => {
|
|
3
|
+
const hits = [];
|
|
4
|
+
for (const line of raw.split(/\r?\n/)) {
|
|
5
|
+
const trimmed = line.trim();
|
|
6
|
+
if (!trimmed.startsWith("{"))
|
|
7
|
+
continue;
|
|
8
|
+
try {
|
|
9
|
+
hits.push(JSON.parse(trimmed));
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
// skip malformed lines
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
if (hits.length === 0) {
|
|
16
|
+
return { summary: "# nuclei — no JSONL hits parsed (pass -jsonl to get structured output)" };
|
|
17
|
+
}
|
|
18
|
+
const bySeverity = new Map();
|
|
19
|
+
for (const hit of hits) {
|
|
20
|
+
const sev = hit.info?.severity?.toLowerCase() ?? "unknown";
|
|
21
|
+
const list = bySeverity.get(sev) ?? [];
|
|
22
|
+
list.push(hit);
|
|
23
|
+
bySeverity.set(sev, list);
|
|
24
|
+
}
|
|
25
|
+
const counts = SEVERITY_ORDER
|
|
26
|
+
.filter((sev) => bySeverity.has(sev))
|
|
27
|
+
.map((sev) => `${sev}=${bySeverity.get(sev).length}`);
|
|
28
|
+
const lines = [
|
|
29
|
+
`# nuclei reduced summary — ${hits.length} hit(s) ${counts.join(" ")}`,
|
|
30
|
+
];
|
|
31
|
+
for (const sev of SEVERITY_ORDER) {
|
|
32
|
+
const list = bySeverity.get(sev);
|
|
33
|
+
if (!list)
|
|
34
|
+
continue;
|
|
35
|
+
lines.push("");
|
|
36
|
+
lines.push(`## ${sev.toUpperCase()} (${list.length})`);
|
|
37
|
+
for (const hit of list.slice(0, 15)) {
|
|
38
|
+
const id = hit["template-id"] ?? hit.template ?? "?";
|
|
39
|
+
const name = hit.info?.name ?? "";
|
|
40
|
+
const matched = hit["matched-at"] ?? hit.matched ?? hit.host ?? "?";
|
|
41
|
+
lines.push(`- ${id}${name ? ` [${name}]` : ""} — ${matched}`);
|
|
42
|
+
}
|
|
43
|
+
if (list.length > 15)
|
|
44
|
+
lines.push(`- ... ${list.length - 15} more`);
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
summary: lines.join("\n"),
|
|
48
|
+
findings: { total: hits.length, bySeverity: Object.fromEntries([...bySeverity.entries()].map(([k, v]) => [k, v.length])) },
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=nuclei.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nuclei.js","sourceRoot":"","sources":["../../../src/tools/reducers/nuclei.ts"],"names":[],"mappings":"AAYA,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAU,CAAC;AAEzF,MAAM,CAAC,MAAM,aAAa,GAAY,CAAC,GAAG,EAAiB,EAAE;IAC3D,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACvC,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAc,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,OAAO,EAAE,wEAAwE,EAAE,CAAC;IAC/F,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;IAClD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,SAAS,CAAC;QAC3D,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,MAAM,GAAG,cAAc;SAC1B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACpC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,MAAM,KAAK,GAAa;QACtB,8BAA8B,IAAI,CAAC,MAAM,WAAW,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;KACvE,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACvD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACpC,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC;YACrD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;YACpE,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;IACD,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QACzB,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;KAC3H,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const INJECTABLE_RE = /Parameter:\s*([^\s(]+)\s*\(([^)]+)\)/g;
|
|
2
|
+
const DBMS_RE = /back-end DBMS:\s*(.+)/i;
|
|
3
|
+
const PAYLOAD_RE = /Payload:\s*(.+)/g;
|
|
4
|
+
export const sqlmapReducer = (raw) => {
|
|
5
|
+
const injectables = [];
|
|
6
|
+
let dbms;
|
|
7
|
+
const payloads = [];
|
|
8
|
+
for (const match of raw.matchAll(INJECTABLE_RE)) {
|
|
9
|
+
injectables.push({ parameter: match[1], place: match[2] });
|
|
10
|
+
}
|
|
11
|
+
const dbmsMatch = DBMS_RE.exec(raw);
|
|
12
|
+
if (dbmsMatch)
|
|
13
|
+
dbms = dbmsMatch[1].trim();
|
|
14
|
+
for (const match of raw.matchAll(PAYLOAD_RE)) {
|
|
15
|
+
payloads.push(match[1].trim());
|
|
16
|
+
if (payloads.length >= 5)
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
if (injectables.length === 0 && !dbms) {
|
|
20
|
+
return { summary: "# sqlmap — no injectable parameters or DBMS detected" };
|
|
21
|
+
}
|
|
22
|
+
const lines = [
|
|
23
|
+
`# sqlmap reduced summary — ${injectables.length} injectable parameter(s)${dbms ? `, DBMS=${dbms}` : ""}`,
|
|
24
|
+
];
|
|
25
|
+
for (const inj of injectables) {
|
|
26
|
+
lines.push(`- ${inj.parameter} (${inj.place})`);
|
|
27
|
+
}
|
|
28
|
+
if (payloads.length > 0) {
|
|
29
|
+
lines.push("");
|
|
30
|
+
lines.push("## Sample payloads");
|
|
31
|
+
for (const payload of payloads)
|
|
32
|
+
lines.push(`- ${payload}`);
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
summary: lines.join("\n"),
|
|
36
|
+
findings: { injectables, dbms, samplePayloads: payloads },
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=sqlmap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlmap.js","sourceRoot":"","sources":["../../../src/tools/reducers/sqlmap.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAuC,CAAC;AAC9D,MAAM,OAAO,GAAG,wBAAwB,CAAC;AACzC,MAAM,UAAU,GAAG,kBAAkB,CAAC;AAEtC,MAAM,CAAC,MAAM,aAAa,GAAY,CAAC,GAAG,EAAiB,EAAE;IAC3D,MAAM,WAAW,GAAgD,EAAE,CAAC;IACpE,IAAI,IAAwB,CAAC;IAC7B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAChD,WAAW,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,SAAS;QAAE,IAAI,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAChC,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC;YAAE,MAAM;IAClC,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACtC,OAAO,EAAE,OAAO,EAAE,sDAAsD,EAAE,CAAC;IAC7E,CAAC;IACD,MAAM,KAAK,GAAa;QACtB,8BAA8B,WAAW,CAAC,MAAM,2BAA2B,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;KAC1G,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,MAAM,OAAO,IAAI,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QACzB,QAAQ,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE;KAC1D,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const DOMAIN_RE = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+$/i;
|
|
2
|
+
/**
|
|
3
|
+
* Reducer for subfinder / amass / sublist3r output. Dedup, normalize,
|
|
4
|
+
* sort. The user can still pull the raw list from the artifact.
|
|
5
|
+
*/
|
|
6
|
+
export const subdomainsReducer = (raw) => {
|
|
7
|
+
const set = new Set();
|
|
8
|
+
for (const line of raw.split(/\r?\n/)) {
|
|
9
|
+
const token = line.trim();
|
|
10
|
+
if (DOMAIN_RE.test(token)) {
|
|
11
|
+
set.add(token.toLowerCase());
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
if (set.size === 0) {
|
|
15
|
+
return { summary: "# subdomains — none parsed from output" };
|
|
16
|
+
}
|
|
17
|
+
const sorted = [...set].sort();
|
|
18
|
+
const preview = sorted.slice(0, 200);
|
|
19
|
+
const lines = [
|
|
20
|
+
`# subdomain enumeration — ${sorted.length} unique domain(s)`,
|
|
21
|
+
...preview,
|
|
22
|
+
];
|
|
23
|
+
if (sorted.length > preview.length) {
|
|
24
|
+
lines.push(`... ${sorted.length - preview.length} more in artifact`);
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
summary: lines.join("\n"),
|
|
28
|
+
findings: { count: sorted.length, sample: preview },
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=subdomains.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subdomains.js","sourceRoot":"","sources":["../../../src/tools/reducers/subdomains.ts"],"names":[],"mappings":"AAEA,MAAM,SAAS,GAAG,oFAAoF,CAAC;AAEvG;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAY,CAAC,GAAG,EAAiB,EAAE;IAC/D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,EAAE,OAAO,EAAE,wCAAwC,EAAE,CAAC;IAC/D,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrC,MAAM,KAAK,GAAa;QACtB,6BAA6B,MAAM,CAAC,MAAM,mBAAmB;QAC7D,GAAG,OAAO;KACX,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,mBAAmB,CAAC,CAAC;IACvE,CAAC;IACD,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QACzB,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;KACpD,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A reducer takes raw tool output and returns a compact, finding-aware
|
|
3
|
+
* summary that the model sees instead of the raw blob. The full raw output
|
|
4
|
+
* still lives in the artifact file for the user to inspect.
|
|
5
|
+
*/
|
|
6
|
+
export interface ReducerOutput {
|
|
7
|
+
summary: string;
|
|
8
|
+
findings?: unknown;
|
|
9
|
+
warnings?: string[];
|
|
10
|
+
}
|
|
11
|
+
export type Reducer = (raw: string, context: {
|
|
12
|
+
command: string;
|
|
13
|
+
argv?: string[] | undefined;
|
|
14
|
+
}) => ReducerOutput;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tools/reducers/types.ts"],"names":[],"mappings":""}
|
package/dist/tools/registry.d.ts
CHANGED
package/dist/tools/registry.js
CHANGED
|
@@ -1,87 +1,146 @@
|
|
|
1
|
-
import { detectSystem } from
|
|
2
|
-
import { detectPackageManager } from
|
|
3
|
-
import { fsList, fsRead, fsSearch, fsWrite } from
|
|
4
|
-
import { httpFetch } from
|
|
5
|
-
import { shellExec } from
|
|
1
|
+
import { detectSystem } from "../os/detect.js";
|
|
2
|
+
import { detectPackageManager, assertSafePackageName } from "../os/pkgmgr.js";
|
|
3
|
+
import { fsList, fsRead, fsSearch, fsWrite } from "./fs.js";
|
|
4
|
+
import { httpFetch } from "./http.js";
|
|
5
|
+
import { shellExec, spawnArgv } from "./shell.js";
|
|
6
|
+
import { classifyToolCall } from "../safety/classifier.js";
|
|
7
|
+
import { loadScope } from "../store/scope.js";
|
|
8
|
+
import { parseHost, parsePortSpec, parseLegacyFlags, profileToNmapArgs, } from "./validate.js";
|
|
6
9
|
function requireString(args, key) {
|
|
7
10
|
const value = args[key];
|
|
8
|
-
if (typeof value !==
|
|
11
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
9
12
|
throw new Error(`Tool argument "${key}" must be a non-empty string`);
|
|
10
13
|
}
|
|
11
14
|
return value;
|
|
12
15
|
}
|
|
13
16
|
function optionalString(args, key) {
|
|
14
17
|
const value = args[key];
|
|
15
|
-
return typeof value ===
|
|
18
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
16
19
|
}
|
|
17
20
|
function optionalNumber(args, key) {
|
|
18
21
|
const value = args[key];
|
|
19
|
-
return typeof value ===
|
|
22
|
+
return typeof value === "number" ? value : undefined;
|
|
20
23
|
}
|
|
21
24
|
export const toolRegistry = {
|
|
22
|
-
async
|
|
23
|
-
return shellExec({
|
|
25
|
+
async "shell.exec"(args, options) {
|
|
26
|
+
return shellExec({
|
|
27
|
+
command: requireString(args, "command"),
|
|
28
|
+
cwd: optionalString(args, "cwd"),
|
|
29
|
+
timeoutMs: optionalNumber(args, "timeoutMs"),
|
|
30
|
+
signal: options?.signal,
|
|
31
|
+
onOutput: options?.onOutput,
|
|
32
|
+
});
|
|
24
33
|
},
|
|
25
|
-
async
|
|
26
|
-
return fsRead(requireString(args,
|
|
34
|
+
async "fs.read"(args) {
|
|
35
|
+
return fsRead(requireString(args, "path"), {
|
|
36
|
+
maxBytes: optionalNumber(args, "maxBytes"),
|
|
37
|
+
});
|
|
27
38
|
},
|
|
28
|
-
async
|
|
29
|
-
return fsWrite(requireString(args,
|
|
39
|
+
async "fs.write"(args) {
|
|
40
|
+
return fsWrite(requireString(args, "path"), requireString(args, "content"));
|
|
30
41
|
},
|
|
31
|
-
async
|
|
32
|
-
return fsList(optionalString(args,
|
|
42
|
+
async "fs.list"(args) {
|
|
43
|
+
return fsList(optionalString(args, "path") ?? process.cwd(), {
|
|
44
|
+
maxEntries: optionalNumber(args, "maxEntries"),
|
|
45
|
+
});
|
|
33
46
|
},
|
|
34
|
-
async
|
|
35
|
-
return fsSearch(requireString(args,
|
|
47
|
+
async "fs.search"(args) {
|
|
48
|
+
return fsSearch(requireString(args, "pattern"), optionalString(args, "path"));
|
|
36
49
|
},
|
|
37
|
-
async
|
|
38
|
-
const tool = requireString(args,
|
|
50
|
+
async "pkg.install"(args, options) {
|
|
51
|
+
const tool = assertSafePackageName(requireString(args, "tool"));
|
|
39
52
|
const pkgmgr = await detectPackageManager();
|
|
40
|
-
|
|
53
|
+
const spec = pkgmgr.installArgv(tool);
|
|
54
|
+
if (!spec) {
|
|
55
|
+
// Unknown manager: fall back to an instructional message instead of
|
|
56
|
+
// executing a malformed shell string.
|
|
57
|
+
return { ok: false, output: pkgmgr.installCommand(tool), exitCode: 1 };
|
|
58
|
+
}
|
|
59
|
+
return spawnArgv({
|
|
60
|
+
command: spec.command,
|
|
61
|
+
argv: spec.argv,
|
|
62
|
+
timeoutMs: 600_000,
|
|
63
|
+
signal: options?.signal,
|
|
64
|
+
onOutput: options?.onOutput,
|
|
65
|
+
});
|
|
41
66
|
},
|
|
42
|
-
async
|
|
43
|
-
const
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
67
|
+
async "net.scan"(args, options) {
|
|
68
|
+
const host = parseHost(requireString(args, "target"));
|
|
69
|
+
const portsRaw = optionalString(args, "ports");
|
|
70
|
+
const ports = portsRaw ? parsePortSpec(portsRaw) : undefined;
|
|
71
|
+
const profile = args.profile &&
|
|
72
|
+
typeof args.profile === "object" &&
|
|
73
|
+
!Array.isArray(args.profile)
|
|
74
|
+
? args.profile
|
|
75
|
+
: undefined;
|
|
76
|
+
const legacyFlags = optionalString(args, "flags");
|
|
77
|
+
const profileArgs = profileToNmapArgs(profile);
|
|
78
|
+
const legacyArgs = legacyFlags ? parseLegacyFlags(legacyFlags) : [];
|
|
79
|
+
const argv = [];
|
|
80
|
+
if (ports)
|
|
81
|
+
argv.push("-p", ports);
|
|
82
|
+
argv.push(...profileArgs, ...legacyArgs, host.value);
|
|
83
|
+
return spawnArgv({
|
|
84
|
+
command: "nmap",
|
|
85
|
+
argv,
|
|
86
|
+
timeoutMs: 300_000,
|
|
87
|
+
signal: options?.signal,
|
|
88
|
+
onOutput: options?.onOutput,
|
|
89
|
+
});
|
|
50
90
|
},
|
|
51
|
-
async
|
|
52
|
-
const headers = args.headers &&
|
|
91
|
+
async "http.fetch"(args) {
|
|
92
|
+
const headers = args.headers &&
|
|
93
|
+
typeof args.headers === "object" &&
|
|
94
|
+
!Array.isArray(args.headers)
|
|
53
95
|
? args.headers
|
|
54
96
|
: undefined;
|
|
55
|
-
return httpFetch(requireString(args,
|
|
56
|
-
method: optionalString(args,
|
|
57
|
-
body: optionalString(args,
|
|
97
|
+
return httpFetch(requireString(args, "url"), {
|
|
98
|
+
method: optionalString(args, "method"),
|
|
99
|
+
body: optionalString(args, "body"),
|
|
58
100
|
headers,
|
|
59
|
-
maxBytes: optionalNumber(args,
|
|
101
|
+
maxBytes: optionalNumber(args, "maxBytes"),
|
|
102
|
+
iOwnThis: args.iOwnThis === true || args.own === true,
|
|
60
103
|
});
|
|
61
104
|
},
|
|
62
105
|
async sysinfo() {
|
|
63
106
|
return { ok: true, output: JSON.stringify(detectSystem(), null, 2) };
|
|
64
107
|
},
|
|
65
|
-
async
|
|
66
|
-
const
|
|
67
|
-
const
|
|
108
|
+
async "pentest.recon"(args, options) {
|
|
109
|
+
const host = parseHost(requireString(args, "target"));
|
|
110
|
+
const steps = [
|
|
111
|
+
{ command: "whois", argv: [host.value] },
|
|
112
|
+
{ command: "dig", argv: [host.value, "ANY", "+noall", "+answer"] },
|
|
113
|
+
{ command: "nmap", argv: ["-sV", "--top-ports", "100", host.value] },
|
|
114
|
+
];
|
|
68
115
|
const outputs = [];
|
|
69
|
-
for (const
|
|
116
|
+
for (const step of steps) {
|
|
70
117
|
if (options?.signal?.aborted)
|
|
71
118
|
break;
|
|
119
|
+
const display = `${step.command} ${step.argv.join(" ")}`;
|
|
72
120
|
// Announce each sub-step so users see progress through long recons.
|
|
73
|
-
options?.onOutput?.(`\n$ ${
|
|
74
|
-
const result = await
|
|
75
|
-
|
|
121
|
+
options?.onOutput?.(`\n$ ${display}\n`, "stdout");
|
|
122
|
+
const result = await spawnArgv({
|
|
123
|
+
command: step.command,
|
|
124
|
+
argv: step.argv,
|
|
125
|
+
timeoutMs: 180_000,
|
|
126
|
+
signal: options?.signal,
|
|
127
|
+
onOutput: options?.onOutput,
|
|
128
|
+
});
|
|
129
|
+
outputs.push(result.output);
|
|
76
130
|
if (options?.signal?.aborted)
|
|
77
131
|
break;
|
|
78
132
|
}
|
|
79
133
|
return {
|
|
80
134
|
ok: !options?.signal?.aborted,
|
|
81
|
-
output: options?.signal?.aborted
|
|
135
|
+
output: options?.signal?.aborted
|
|
136
|
+
? `${outputs.join("\n\n")}\n\nCommand aborted.`.trim()
|
|
137
|
+
: outputs.join("\n\n"),
|
|
82
138
|
exitCode: options?.signal?.aborted ? 130 : 0,
|
|
83
139
|
};
|
|
84
140
|
},
|
|
141
|
+
async "tool.batch"(args, options) {
|
|
142
|
+
return runToolBatch(args, options);
|
|
143
|
+
},
|
|
85
144
|
};
|
|
86
145
|
export function availableToolNames() {
|
|
87
146
|
return Object.keys(toolRegistry);
|
|
@@ -93,4 +152,126 @@ export async function runToolCall(call, options = {}) {
|
|
|
93
152
|
}
|
|
94
153
|
return handler(call.args, options);
|
|
95
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* Tools that `tool.batch` is allowed to invoke. Limited to read-only
|
|
157
|
+
* operations so the batch runner cannot escalate into shell execution
|
|
158
|
+
* or mutating HTTP methods. http.fetch is allowed but downstream
|
|
159
|
+
* GET/HEAD enforcement still happens in the classifier when individual
|
|
160
|
+
* calls are routed.
|
|
161
|
+
*/
|
|
162
|
+
const BATCH_SAFE_TOOLS = new Set([
|
|
163
|
+
"fs.read",
|
|
164
|
+
"fs.list",
|
|
165
|
+
"fs.search",
|
|
166
|
+
"http.fetch",
|
|
167
|
+
"sysinfo",
|
|
168
|
+
]);
|
|
169
|
+
const BATCH_MAX_CALLS = 8;
|
|
170
|
+
const BATCH_DEFAULT_CONCURRENCY = 3;
|
|
171
|
+
const BATCH_MAX_CONCURRENCY = 4;
|
|
172
|
+
function parseBatchCalls(value) {
|
|
173
|
+
if (!Array.isArray(value)) {
|
|
174
|
+
throw new Error("tool.batch expects { calls: [{name, args}, ...] }");
|
|
175
|
+
}
|
|
176
|
+
if (value.length === 0) {
|
|
177
|
+
throw new Error("tool.batch requires at least one call");
|
|
178
|
+
}
|
|
179
|
+
if (value.length > BATCH_MAX_CALLS) {
|
|
180
|
+
throw new Error(`tool.batch accepts at most ${BATCH_MAX_CALLS} calls per invocation`);
|
|
181
|
+
}
|
|
182
|
+
return value.map((entry, index) => {
|
|
183
|
+
if (!entry ||
|
|
184
|
+
typeof entry !== "object" ||
|
|
185
|
+
Array.isArray(entry) ||
|
|
186
|
+
typeof entry.name !== "string" ||
|
|
187
|
+
typeof entry.args !== "object" ||
|
|
188
|
+
entry.args === null) {
|
|
189
|
+
throw new Error(`tool.batch call #${index} must be { name: string, args: object }`);
|
|
190
|
+
}
|
|
191
|
+
const { name, args } = entry;
|
|
192
|
+
if (!BATCH_SAFE_TOOLS.has(name)) {
|
|
193
|
+
throw new Error(`tool.batch refuses to run "${name}" — only read-only tools are allowed (${[...BATCH_SAFE_TOOLS].join(", ")})`);
|
|
194
|
+
}
|
|
195
|
+
return { name, args };
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
async function runWithLimit(items, limit, worker) {
|
|
199
|
+
const queue = items.map((item, index) => ({ item, index }));
|
|
200
|
+
const runners = [];
|
|
201
|
+
for (let n = 0; n < Math.min(limit, queue.length); n += 1) {
|
|
202
|
+
runners.push((async () => {
|
|
203
|
+
while (queue.length > 0) {
|
|
204
|
+
const next = queue.shift();
|
|
205
|
+
if (!next)
|
|
206
|
+
break;
|
|
207
|
+
await worker(next.item, next.index);
|
|
208
|
+
}
|
|
209
|
+
})());
|
|
210
|
+
}
|
|
211
|
+
await Promise.all(runners);
|
|
212
|
+
}
|
|
213
|
+
async function runToolBatch(args, options) {
|
|
214
|
+
const calls = parseBatchCalls(args.calls);
|
|
215
|
+
// Re-classify each child call so confirm/block tools (eg http.fetch POST,
|
|
216
|
+
// public scans without scope) cannot ride in on tool.batch's safe label.
|
|
217
|
+
const scope = await loadScope().catch(() => undefined);
|
|
218
|
+
for (const spec of calls) {
|
|
219
|
+
const decision = classifyToolCall({ name: spec.name, args: spec.args }, { scope });
|
|
220
|
+
if (decision.level !== "safe") {
|
|
221
|
+
throw new Error(`tool.batch refuses ${spec.name}: ${decision.reason} (only safe-classified calls are allowed inside a batch)`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
const concurrency = Math.max(1, Math.min(typeof args.concurrency === "number"
|
|
225
|
+
? Math.floor(args.concurrency)
|
|
226
|
+
: BATCH_DEFAULT_CONCURRENCY, BATCH_MAX_CONCURRENCY));
|
|
227
|
+
const outcomes = new Array(calls.length);
|
|
228
|
+
await runWithLimit(calls, concurrency, async (spec, index) => {
|
|
229
|
+
if (options?.signal?.aborted) {
|
|
230
|
+
outcomes[index] = {
|
|
231
|
+
index,
|
|
232
|
+
name: spec.name,
|
|
233
|
+
ok: false,
|
|
234
|
+
output: "Aborted before execution.",
|
|
235
|
+
exitCode: 130,
|
|
236
|
+
};
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
try {
|
|
240
|
+
const result = await runToolCall({ name: spec.name, args: spec.args },
|
|
241
|
+
// Skip onOutput streaming: batch results are summarized after all
|
|
242
|
+
// members complete to keep the live preview readable.
|
|
243
|
+
{ signal: options?.signal });
|
|
244
|
+
outcomes[index] = {
|
|
245
|
+
index,
|
|
246
|
+
name: spec.name,
|
|
247
|
+
ok: result.ok,
|
|
248
|
+
output: result.output,
|
|
249
|
+
exitCode: result.exitCode,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
outcomes[index] = {
|
|
254
|
+
index,
|
|
255
|
+
name: spec.name,
|
|
256
|
+
ok: false,
|
|
257
|
+
output: "",
|
|
258
|
+
error: error instanceof Error ? error.message : String(error),
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
const allOk = outcomes.every((outcome) => outcome.ok);
|
|
263
|
+
const sections = outcomes.map((outcome) => {
|
|
264
|
+
const status = outcome.ok ? "ok" : "fail";
|
|
265
|
+
const head = `── #${outcome.index + 1} ${outcome.name} [${status}${outcome.exitCode !== undefined ? ` exit=${outcome.exitCode}` : ""}]`;
|
|
266
|
+
const body = outcome.error
|
|
267
|
+
? `error: ${outcome.error}`
|
|
268
|
+
: outcome.output.trim();
|
|
269
|
+
return `${head}\n${body}`;
|
|
270
|
+
});
|
|
271
|
+
return {
|
|
272
|
+
ok: allOk,
|
|
273
|
+
output: sections.join("\n\n"),
|
|
274
|
+
exitCode: allOk ? 0 : 1,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
96
277
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/shell.d.ts
CHANGED
|
@@ -5,5 +5,50 @@ export interface ShellExecArgs {
|
|
|
5
5
|
timeoutMs?: number | undefined;
|
|
6
6
|
signal?: AbortSignal | undefined;
|
|
7
7
|
onOutput?: ((chunk: string, stream: "stdout" | "stderr") => void) | undefined;
|
|
8
|
+
/** Max bytes of output to retain in memory for the model (head+tail). */
|
|
9
|
+
maxModelBytes?: number | undefined;
|
|
10
|
+
/** Max bytes streamed to the artifact file before the child is terminated. */
|
|
11
|
+
maxCaptureBytes?: number | undefined;
|
|
12
|
+
/** Behavior when maxCaptureBytes is exceeded. Defaults to "terminate". */
|
|
13
|
+
onLimit?: "terminate" | "continue" | undefined;
|
|
14
|
+
/** Where to save the raw artifact. When undefined, ~/.clai/outputs is used. */
|
|
15
|
+
artifactPath?: string | undefined;
|
|
16
|
+
/** When true, do not allocate an artifact file (used by tests / dry runs). */
|
|
17
|
+
noArtifact?: boolean | undefined;
|
|
18
|
+
}
|
|
19
|
+
export interface SpawnArgvArgs {
|
|
20
|
+
command: string;
|
|
21
|
+
argv: string[];
|
|
22
|
+
cwd?: string | undefined;
|
|
23
|
+
timeoutMs?: number | undefined;
|
|
24
|
+
signal?: AbortSignal | undefined;
|
|
25
|
+
onOutput?: ((chunk: string, stream: "stdout" | "stderr") => void) | undefined;
|
|
26
|
+
maxModelBytes?: number | undefined;
|
|
27
|
+
maxCaptureBytes?: number | undefined;
|
|
28
|
+
onLimit?: "terminate" | "continue" | undefined;
|
|
29
|
+
artifactPath?: string | undefined;
|
|
30
|
+
noArtifact?: boolean | undefined;
|
|
31
|
+
}
|
|
32
|
+
/** A small ring buffer of recent output lines used as the "tail" summary.
|
|
33
|
+
* Exported only for tests. */
|
|
34
|
+
export declare class RingBuffer {
|
|
35
|
+
private readonly capacity;
|
|
36
|
+
private chunks;
|
|
37
|
+
private bytes;
|
|
38
|
+
constructor(capacity: number);
|
|
39
|
+
push(text: string): void;
|
|
40
|
+
toString(): string;
|
|
41
|
+
size(): number;
|
|
8
42
|
}
|
|
9
43
|
export declare function shellExec(args: ShellExecArgs): Promise<ToolResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Run a child process with `shell: false`, passing argv directly. Use this
|
|
46
|
+
* for any tool that builds command lines from model-provided strings (eg
|
|
47
|
+
* `net.scan`, `pentest.recon`, `pkg.install`). Sharing argv with the OS
|
|
48
|
+
* shell would let a malicious target turn into "; rm -rf /" — `shell: false`
|
|
49
|
+
* + argv prevents that even if the model is adversarial.
|
|
50
|
+
*
|
|
51
|
+
* The capture pipeline (head + ring-tail + artifact + cap-and-kill + stats)
|
|
52
|
+
* is identical to shellExec.
|
|
53
|
+
*/
|
|
54
|
+
export declare function spawnArgv(args: SpawnArgvArgs): Promise<ToolResult>;
|