@vextlabs/theron-cli 0.3.0 → 0.4.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/dist/api.d.ts +8 -0
- package/dist/api.js +3 -0
- package/dist/api.js.map +1 -1
- package/dist/auth.js +51 -1
- package/dist/auth.js.map +1 -1
- package/dist/banner.js +3 -2
- package/dist/banner.js.map +1 -1
- package/dist/checkpoints.d.ts +32 -0
- package/dist/checkpoints.js +61 -0
- package/dist/checkpoints.js.map +1 -0
- package/dist/index.js +59 -4
- package/dist/index.js.map +1 -1
- package/dist/input.d.ts +61 -0
- package/dist/input.js +574 -0
- package/dist/input.js.map +1 -0
- package/dist/profiles/index.js +5 -0
- package/dist/profiles/index.js.map +1 -1
- package/dist/profiles/methodologies/operate_domains.d.ts +8 -0
- package/dist/profiles/methodologies/operate_domains.js +1239 -0
- package/dist/profiles/methodologies/operate_domains.js.map +1 -0
- package/dist/profiles/seeds.js +57 -36
- package/dist/profiles/seeds.js.map +1 -1
- package/dist/receipt.d.ts +17 -0
- package/dist/receipt.js +46 -0
- package/dist/receipt.js.map +1 -0
- package/dist/render.d.ts +4 -1
- package/dist/render.js +95 -28
- package/dist/render.js.map +1 -1
- package/dist/repl.d.ts +8 -1
- package/dist/repl.js +420 -62
- package/dist/repl.js.map +1 -1
- package/dist/sessions.d.ts +14 -0
- package/dist/sessions.js +100 -0
- package/dist/sessions.js.map +1 -1
- package/dist/ship.d.ts +2 -0
- package/dist/ship.js +62 -0
- package/dist/ship.js.map +1 -0
- package/dist/skills/catalog.d.ts +13 -0
- package/dist/skills/catalog.js +86 -0
- package/dist/skills/catalog.js.map +1 -0
- package/dist/tools/bash.js +81 -14
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.js +21 -1
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/glob.js +4 -1
- package/dist/tools/glob.js.map +1 -1
- package/dist/tools/grep.d.ts +5 -0
- package/dist/tools/grep.js +101 -2
- package/dist/tools/grep.js.map +1 -1
- package/dist/tools/index.d.ts +22 -0
- package/dist/tools/index.js +177 -41
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/ls.d.ts +3 -0
- package/dist/tools/ls.js +23 -12
- package/dist/tools/ls.js.map +1 -1
- package/dist/tools/multiedit.d.ts +12 -0
- package/dist/tools/multiedit.js +79 -0
- package/dist/tools/multiedit.js.map +1 -0
- package/dist/tools/stoa.d.ts +1 -1
- package/dist/tools/stoa.js +7 -3
- package/dist/tools/stoa.js.map +1 -1
- package/dist/tools/task.d.ts +9 -0
- package/dist/tools/task.js +166 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/todowrite.d.ts +12 -0
- package/dist/tools/todowrite.js +38 -0
- package/dist/tools/todowrite.js.map +1 -0
- package/dist/tools/webfetch.d.ts +6 -0
- package/dist/tools/webfetch.js +98 -0
- package/dist/tools/webfetch.js.map +1 -0
- package/dist/tools/websearch.d.ts +7 -0
- package/dist/tools/websearch.js +83 -0
- package/dist/tools/websearch.js.map +1 -0
- package/dist/tools/write.js +17 -1
- package/dist/tools/write.js.map +1 -1
- package/dist/verifiers/confidence_marked.d.ts +2 -0
- package/dist/verifiers/confidence_marked.js +49 -0
- package/dist/verifiers/confidence_marked.js.map +1 -0
- package/dist/verifiers/disclaimer_gate.d.ts +2 -0
- package/dist/verifiers/disclaimer_gate.js +57 -0
- package/dist/verifiers/disclaimer_gate.js.map +1 -0
- package/dist/verifiers/index.d.ts +5 -0
- package/dist/verifiers/index.js +20 -7
- package/dist/verifiers/index.js.map +1 -1
- package/dist/verifiers/lint.js +4 -3
- package/dist/verifiers/lint.js.map +1 -1
- package/dist/verifiers/promoted_kernels.d.ts +8 -0
- package/dist/verifiers/promoted_kernels.js +190 -0
- package/dist/verifiers/promoted_kernels.js.map +1 -0
- package/dist/verifiers/source_gate.js +2 -3
- package/dist/verifiers/source_gate.js.map +1 -1
- package/dist/verifiers/test_smoke.js +30 -0
- package/dist/verifiers/test_smoke.js.map +1 -1
- package/dist/verifiers/types.d.ts +3 -0
- package/package.json +4 -2
- package/skills/README.md +123 -0
- package/skills/ab-test.md +89 -0
- package/skills/api-design.md +175 -0
- package/skills/architecture-design.md +185 -0
- package/skills/business-case.md +77 -0
- package/skills/causal-inference.md +77 -0
- package/skills/clinical-guideline.md +98 -0
- package/skills/code-review.md +98 -0
- package/skills/cold-outreach.md +268 -0
- package/skills/competitive-teardown.md +223 -0
- package/skills/component-spec.md +121 -0
- package/skills/content-calendar.md +280 -0
- package/skills/contract-review.md +155 -0
- package/skills/data-analysis.md +187 -0
- package/skills/debug.md +91 -0
- package/skills/design-audit.md +121 -0
- package/skills/differential-diagnosis.md +79 -0
- package/skills/discovery-call.md +206 -0
- package/skills/edit-pass.md +80 -0
- package/skills/engineering-calc.md +101 -0
- package/skills/estimate.md +70 -0
- package/skills/experiment-design.md +105 -0
- package/skills/fact-check.md +82 -0
- package/skills/financial-model.md +104 -0
- package/skills/grant-proposal.md +93 -0
- package/skills/harmony-analysis.md +93 -0
- package/skills/hypothesis-generation.md +99 -0
- package/skills/incident-response.md +134 -0
- package/skills/interview-loop.md +62 -0
- package/skills/job-scorecard.md +92 -0
- package/skills/kb-article.md +174 -0
- package/skills/launch-plan.md +85 -0
- package/skills/lease-review.md +93 -0
- package/skills/lesson-plan.md +198 -0
- package/skills/literature-review.md +69 -0
- package/skills/market-entry.md +137 -0
- package/skills/market-sizing.md +159 -0
- package/skills/meta-analysis.md +140 -0
- package/skills/migrate.md +117 -0
- package/skills/optimize.md +88 -0
- package/skills/options-strategy.md +166 -0
- package/skills/peer-review.md +96 -0
- package/skills/pentest-plan.md +193 -0
- package/skills/pitch-review.md +132 -0
- package/skills/plan.md +88 -0
- package/skills/policy-brief.md +124 -0
- package/skills/positioning.md +192 -0
- package/skills/postmortem.md +168 -0
- package/skills/prd.md +105 -0
- package/skills/prioritize.md +162 -0
- package/skills/proof.md +91 -0
- package/skills/property-underwrite.md +159 -0
- package/skills/recipe-develop.md +109 -0
- package/skills/red-team.md +142 -0
- package/skills/refactor.md +58 -0
- package/skills/reflection-session.md +115 -0
- package/skills/regulatory-compliance.md +136 -0
- package/skills/reproduce.md +87 -0
- package/skills/runbook.md +344 -0
- package/skills/security-audit.md +154 -0
- package/skills/seo-brief.md +201 -0
- package/skills/sql-query.md +161 -0
- package/skills/story-craft.md +163 -0
- package/skills/tdd.md +59 -0
- package/skills/term-sheet.md +298 -0
- package/skills/theory-of-change.md +88 -0
- package/skills/threat-model.md +104 -0
- package/skills/ticket-triage.md +200 -0
- package/skills/tolerance-analysis.md +149 -0
- package/skills/training-program.md +151 -0
- package/skills/translate.md +64 -0
- package/skills/unit-economics.md +238 -0
- package/skills/valuation.md +112 -0
- package/skills/write-tests.md +77 -0
package/dist/tools/bash.js
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
// Bash tool — runs a shell command and returns combined stdout/stderr.
|
|
2
2
|
// Captured incrementally so we can stream long-running output.
|
|
3
3
|
import { spawn } from "node:child_process";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { writeFileSync } from "node:fs";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
import { randomBytes } from "node:crypto";
|
|
8
|
+
import { sha256Hex, receiptLocalAction } from "../receipt.js";
|
|
4
9
|
const DEFAULT_TIMEOUT_MS = 120_000;
|
|
5
10
|
const MAX_TIMEOUT_MS = 600_000;
|
|
11
|
+
// When combined output exceeds this many chars, spill the full content to a
|
|
12
|
+
// temp file and return only a preview. Matches THERON_COMPLETE_GUIDE §2.2.
|
|
13
|
+
const SPILL_THRESHOLD = 30_000;
|
|
14
|
+
// Absolute hard ceiling for in-memory buffering (safety guard against runaway
|
|
15
|
+
// output). Beyond this we do still truncate — but the spill file will contain
|
|
16
|
+
// everything up to this limit.
|
|
17
|
+
const BUFFER_HARD_CEILING = 150_000;
|
|
6
18
|
export async function execBash(args, ctx) {
|
|
7
19
|
const timeout = Math.min(Math.max(args.timeout ?? DEFAULT_TIMEOUT_MS, 1000), MAX_TIMEOUT_MS);
|
|
8
20
|
return await new Promise((resolve) => {
|
|
@@ -14,27 +26,35 @@ export async function execBash(args, ctx) {
|
|
|
14
26
|
let stdout = "";
|
|
15
27
|
let stderr = "";
|
|
16
28
|
let killedByTimeout = false;
|
|
29
|
+
let killedBySignal = false;
|
|
17
30
|
let bytes = 0;
|
|
18
|
-
|
|
31
|
+
// Honor the turn-scoped abort signal (Ctrl-C mid-turn). When the
|
|
32
|
+
// signal fires we SIGKILL the child immediately rather than waiting
|
|
33
|
+
// for the timeout.
|
|
34
|
+
if (ctx.signal) {
|
|
35
|
+
if (ctx.signal.aborted) {
|
|
36
|
+
proc.kill("SIGKILL");
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
ctx.signal.addEventListener("abort", () => {
|
|
40
|
+
killedBySignal = true;
|
|
41
|
+
proc.kill("SIGKILL");
|
|
42
|
+
}, { once: true });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
19
45
|
proc.stdout?.on("data", (d) => {
|
|
20
46
|
const s = d.toString("utf-8");
|
|
21
47
|
bytes += s.length;
|
|
22
|
-
if (
|
|
23
|
-
|
|
24
|
-
stdout += s.slice(0, cap - stdout.length);
|
|
25
|
-
return;
|
|
48
|
+
if (stdout.length < BUFFER_HARD_CEILING) {
|
|
49
|
+
stdout += s.slice(0, BUFFER_HARD_CEILING - stdout.length);
|
|
26
50
|
}
|
|
27
|
-
stdout += s;
|
|
28
51
|
});
|
|
29
52
|
proc.stderr?.on("data", (d) => {
|
|
30
53
|
const s = d.toString("utf-8");
|
|
31
54
|
bytes += s.length;
|
|
32
|
-
if (
|
|
33
|
-
|
|
34
|
-
stderr += s.slice(0, cap - stderr.length);
|
|
35
|
-
return;
|
|
55
|
+
if (stderr.length < BUFFER_HARD_CEILING) {
|
|
56
|
+
stderr += s.slice(0, BUFFER_HARD_CEILING - stderr.length);
|
|
36
57
|
}
|
|
37
|
-
stderr += s;
|
|
38
58
|
});
|
|
39
59
|
const timer = setTimeout(() => {
|
|
40
60
|
killedByTimeout = true;
|
|
@@ -42,11 +62,58 @@ export async function execBash(args, ctx) {
|
|
|
42
62
|
}, timeout);
|
|
43
63
|
proc.on("close", (code) => {
|
|
44
64
|
clearTimeout(timer);
|
|
45
|
-
const head = `$ ${args.command}\n[exit ${code ?? "?"}${killedByTimeout ? ", killed by timeout" : ""}, ${bytes}b]`;
|
|
65
|
+
const head = `$ ${args.command}\n[exit ${code ?? "?"}${killedByTimeout ? ", killed by timeout" : ""}${killedBySignal ? ", killed by user cancel" : ""}, ${bytes}b]`;
|
|
46
66
|
const out = stdout.trim() ? `\n--- stdout ---\n${stdout}` : "";
|
|
47
67
|
const err = stderr.trim() ? `\n--- stderr ---\n${stderr}` : "";
|
|
48
|
-
const
|
|
49
|
-
|
|
68
|
+
const combined = `${head}${out}${err}`;
|
|
69
|
+
// Spill-to-file when output exceeds SPILL_THRESHOLD so the model gets a
|
|
70
|
+
// preview + a path it can Read, rather than a silently truncated blob.
|
|
71
|
+
let result;
|
|
72
|
+
if (bytes > SPILL_THRESHOLD) {
|
|
73
|
+
let spillPath = null;
|
|
74
|
+
try {
|
|
75
|
+
const tag = randomBytes(6).toString("hex");
|
|
76
|
+
spillPath = join(tmpdir(), `theron-bash-${tag}.log`);
|
|
77
|
+
const hardTruncNote = bytes > BUFFER_HARD_CEILING
|
|
78
|
+
? `\n[Note: output exceeded hard buffer ceiling of ${BUFFER_HARD_CEILING} chars; content beyond that limit was not captured]\n`
|
|
79
|
+
: "";
|
|
80
|
+
writeFileSync(spillPath, combined + hardTruncNote, "utf-8");
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// Temp-write failed — fall back to returning what we have, with the
|
|
84
|
+
// standard truncation note so the caller is not silently misled.
|
|
85
|
+
spillPath = null;
|
|
86
|
+
}
|
|
87
|
+
const preview = combined.slice(0, SPILL_THRESHOLD);
|
|
88
|
+
if (spillPath !== null) {
|
|
89
|
+
result =
|
|
90
|
+
preview +
|
|
91
|
+
`\n\n[output truncated -- full output (${bytes} bytes) saved to ${spillPath}; Read that file to see all of it]`;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// Fallback: spill write failed, return truncated inline.
|
|
95
|
+
result = combined.slice(0, SPILL_THRESHOLD) + "\n[output truncated to maxBytes]";
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
result = combined;
|
|
100
|
+
}
|
|
101
|
+
// Mint a STOA receipt for this shell execution. Fail-open: if the
|
|
102
|
+
// receipt POST fails, `result` is returned unmodified.
|
|
103
|
+
const outputSha256 = sha256Hex(stdout + stderr);
|
|
104
|
+
receiptLocalAction(ctx.apiUrl, ctx.apiKey, "local_bash", {
|
|
105
|
+
command: args.command,
|
|
106
|
+
cwd: ctx.cwd,
|
|
107
|
+
exit_code: code ?? null,
|
|
108
|
+
output_sha256: outputSha256,
|
|
109
|
+
}).then((verifyUrl) => {
|
|
110
|
+
if (verifyUrl) {
|
|
111
|
+
resolve(result + "\nsigned -- verify: " + verifyUrl);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
resolve(result);
|
|
115
|
+
}
|
|
116
|
+
}).catch(() => resolve(result));
|
|
50
117
|
});
|
|
51
118
|
proc.on("error", (err) => {
|
|
52
119
|
clearTimeout(timer);
|
package/dist/tools/bash.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,+DAA+D;AAE/D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/edit.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
// Edit tool — exact-substring replacement.
|
|
2
2
|
import { promises as fs } from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
|
+
import { sha256Hex, receiptLocalAction } from "../receipt.js";
|
|
5
|
+
import { pushCheckpoint } from "../checkpoints.js";
|
|
4
6
|
export async function execEdit(args, ctx) {
|
|
5
7
|
const target = path.isAbsolute(args.file_path)
|
|
6
8
|
? args.file_path
|
|
@@ -15,6 +17,13 @@ export async function execEdit(args, ctx) {
|
|
|
15
17
|
if (args.old_string === args.new_string) {
|
|
16
18
|
return `[error] old_string === new_string — nothing to change.`;
|
|
17
19
|
}
|
|
20
|
+
// Snapshot the pre-edit content so /rewind can restore it. We already
|
|
21
|
+
// have `original` in hand, so we skip a second read and call pushCheckpoint
|
|
22
|
+
// directly (always infallible).
|
|
23
|
+
try {
|
|
24
|
+
pushCheckpoint(target, original);
|
|
25
|
+
}
|
|
26
|
+
catch { /* never throws, but guard anyway */ }
|
|
18
27
|
let replaced;
|
|
19
28
|
let count = 0;
|
|
20
29
|
if (args.replace_all) {
|
|
@@ -36,7 +45,18 @@ export async function execEdit(args, ctx) {
|
|
|
36
45
|
replaced = original.slice(0, idx) + args.new_string + original.slice(idx + args.old_string.length);
|
|
37
46
|
count = 1;
|
|
38
47
|
}
|
|
48
|
+
const preSha256 = sha256Hex(original);
|
|
39
49
|
await fs.writeFile(target, replaced, "utf-8");
|
|
40
|
-
|
|
50
|
+
const postSha256 = sha256Hex(replaced);
|
|
51
|
+
const baseResult = `Edited ${target}: ${count} replacement${count === 1 ? "" : "s"}`;
|
|
52
|
+
// Mint a STOA receipt for this edit. Fail-open: if the receipt POST
|
|
53
|
+
// fails, the base result is returned unmodified.
|
|
54
|
+
const verifyUrl = await receiptLocalAction(ctx.apiUrl, ctx.apiKey, "local_edit", {
|
|
55
|
+
path: target,
|
|
56
|
+
pre_sha256: preSha256,
|
|
57
|
+
post_sha256: postSha256,
|
|
58
|
+
replace_all: args.replace_all ?? false,
|
|
59
|
+
}).catch(() => null);
|
|
60
|
+
return verifyUrl ? baseResult + "\nsigned -- verify: " + verifyUrl : baseResult;
|
|
41
61
|
}
|
|
42
62
|
//# sourceMappingURL=edit.js.map
|
package/dist/tools/edit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAE3C,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/glob.js
CHANGED
|
@@ -12,11 +12,14 @@ export async function execGlob(args, ctx) {
|
|
|
12
12
|
const root = args.path
|
|
13
13
|
? (path.isAbsolute(args.path) ? args.path : path.resolve(ctx.cwd, args.path))
|
|
14
14
|
: ctx.cwd;
|
|
15
|
+
// Enable dot-file matching when the pattern explicitly starts with a dot
|
|
16
|
+
// or contains a dotfile segment (e.g. ".github/**", ".env*").
|
|
17
|
+
const dotPattern = /(?:^|\/)\./.test(args.pattern);
|
|
15
18
|
const matches = await fg(args.pattern, {
|
|
16
19
|
cwd: root,
|
|
17
20
|
absolute: true,
|
|
18
21
|
onlyFiles: true,
|
|
19
|
-
dot:
|
|
22
|
+
dot: dotPattern,
|
|
20
23
|
ignore: ["**/node_modules/**", "**/.git/**", "**/dist/**", "**/build/**", "**/.next/**", "**/.vercel/**"],
|
|
21
24
|
suppressErrors: true,
|
|
22
25
|
});
|
package/dist/tools/glob.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/tools/glob.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAEjE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,WAAW,CAAC;AAQ3B,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAc,EAAE,GAAgB;IAC7D,yEAAyE;IACzE,sEAAsE;IACtE,wEAAwE;IACxE,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACnE,OAAO,kHAAkH,CAAC;IAC5H,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;QACpB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAEZ,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE;QACrC,GAAG,EAAE,IAAI;QACT,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,IAAI;QACf,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/tools/glob.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAEjE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,WAAW,CAAC;AAQ3B,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAc,EAAE,GAAgB;IAC7D,yEAAyE;IACzE,sEAAsE;IACtE,wEAAwE;IACxE,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACnE,OAAO,kHAAkH,CAAC;IAC5H,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;QACpB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAEZ,yEAAyE;IACzE,8DAA8D;IAC9D,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEnD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE;QACrC,GAAG,EAAE,IAAI;QACT,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,IAAI;QACf,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,CAAC,oBAAoB,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC;QACzG,cAAc,EAAE,IAAI;KACrB,CAAC,CAAC;IAEH,wDAAwD;IACxD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACpC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3B,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,mBAAmB,IAAI,CAAC,OAAO,OAAO,IAAI,GAAG,CAAC;IAC7E,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,MAAM,GAAG,GAAG,4BAA4B,CAAC,CAAC,CAAC,EAAE,CAAC;IACjG,OAAO,GAAG,KAAK,GAAG,QAAQ,EAAE,CAAC;AAC/B,CAAC"}
|
package/dist/tools/grep.d.ts
CHANGED
|
@@ -4,6 +4,11 @@ interface GrepArgs {
|
|
|
4
4
|
path?: string;
|
|
5
5
|
glob?: string;
|
|
6
6
|
case_insensitive?: boolean;
|
|
7
|
+
output_mode?: "content" | "files_with_matches" | "count";
|
|
8
|
+
context_lines?: number;
|
|
9
|
+
type?: string;
|
|
10
|
+
multiline?: boolean;
|
|
11
|
+
fixed_strings?: boolean;
|
|
7
12
|
}
|
|
8
13
|
export declare function execGrep(args: GrepArgs, ctx: ToolContext): Promise<string>;
|
|
9
14
|
export {};
|
package/dist/tools/grep.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// scan. Prefer ripgrep because the user may have huge repos.
|
|
3
3
|
import { spawn } from "node:child_process";
|
|
4
4
|
import path from "node:path";
|
|
5
|
+
import fs from "node:fs";
|
|
5
6
|
export async function execGrep(args, ctx) {
|
|
6
7
|
if (typeof args.pattern !== "string" || args.pattern === "") {
|
|
7
8
|
return '[Grep error] missing required "pattern". Retry with e.g. {"pattern":"startCheckout","glob":"*.ts"}.';
|
|
@@ -9,14 +10,21 @@ export async function execGrep(args, ctx) {
|
|
|
9
10
|
const root = args.path
|
|
10
11
|
? (path.isAbsolute(args.path) ? args.path : path.resolve(ctx.cwd, args.path))
|
|
11
12
|
: ctx.cwd;
|
|
13
|
+
const outputMode = args.output_mode ?? "content";
|
|
12
14
|
const rgArgs = [
|
|
13
|
-
"--line-number",
|
|
14
15
|
"--no-heading",
|
|
15
16
|
"--with-filename",
|
|
16
17
|
"--max-count", "200",
|
|
17
18
|
"--max-columns", "400",
|
|
18
19
|
...(args.case_insensitive ? ["-i"] : []),
|
|
20
|
+
...(args.fixed_strings ? ["-F"] : []),
|
|
21
|
+
...(args.multiline ? ["--multiline", "--multiline-dotall"] : ["--line-number"]),
|
|
22
|
+
...(args.context_lines && args.context_lines > 0 ? ["-C", String(args.context_lines)] : []),
|
|
23
|
+
...(args.type ? ["--type", args.type] : []),
|
|
19
24
|
...(args.glob ? ["--glob", args.glob] : []),
|
|
25
|
+
// output mode
|
|
26
|
+
...(outputMode === "files_with_matches" ? ["--files-with-matches"] : []),
|
|
27
|
+
...(outputMode === "count" ? ["--count"] : []),
|
|
20
28
|
"--",
|
|
21
29
|
args.pattern,
|
|
22
30
|
root,
|
|
@@ -53,12 +61,17 @@ export async function execGrep(args, ctx) {
|
|
|
53
61
|
});
|
|
54
62
|
}
|
|
55
63
|
async function fallbackGrep(args, ctx) {
|
|
64
|
+
const outputMode = args.output_mode ?? "content";
|
|
65
|
+
// For file/count modes, do a Node-based recursive walk
|
|
66
|
+
if (outputMode === "files_with_matches" || outputMode === "count") {
|
|
67
|
+
return nodeFallbackGrep(args, ctx);
|
|
68
|
+
}
|
|
56
69
|
return await new Promise((resolve) => {
|
|
57
70
|
const grepArgs = [
|
|
58
71
|
"-rn",
|
|
59
|
-
"--include=*",
|
|
60
72
|
"--binary-files=without-match",
|
|
61
73
|
...(args.case_insensitive ? ["-i"] : []),
|
|
74
|
+
...(args.fixed_strings ? ["-F"] : []),
|
|
62
75
|
"--",
|
|
63
76
|
args.pattern,
|
|
64
77
|
args.path || ".",
|
|
@@ -70,4 +83,90 @@ async function fallbackGrep(args, ctx) {
|
|
|
70
83
|
proc.on("error", (err) => resolve(`[grep unavailable: ${err.message}]`));
|
|
71
84
|
});
|
|
72
85
|
}
|
|
86
|
+
function nodeFallbackGrep(args, ctx) {
|
|
87
|
+
const outputMode = args.output_mode ?? "content";
|
|
88
|
+
const root = args.path
|
|
89
|
+
? (path.isAbsolute(args.path) ? args.path : path.resolve(ctx.cwd, args.path))
|
|
90
|
+
: ctx.cwd;
|
|
91
|
+
const flags = args.case_insensitive ? "i" : "";
|
|
92
|
+
let re;
|
|
93
|
+
try {
|
|
94
|
+
if (args.fixed_strings) {
|
|
95
|
+
re = new RegExp(args.pattern.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), flags);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
re = new RegExp(args.pattern, flags);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return `[Grep error] invalid pattern: ${args.pattern}`;
|
|
103
|
+
}
|
|
104
|
+
// Glob filter: convert glob to a regex for path matching
|
|
105
|
+
let globRe = null;
|
|
106
|
+
if (args.glob) {
|
|
107
|
+
// Convert glob pattern to regex: ** crosses dirs, * matches within a segment
|
|
108
|
+
const escaped = args.glob
|
|
109
|
+
.replace(/[.+^${}()|[\]\\]/g, "\\$&")
|
|
110
|
+
.replace(/\*\*/g, "\x00") // placeholder
|
|
111
|
+
.replace(/\*/g, "[^/]*")
|
|
112
|
+
.replace(/\x00/g, ".*");
|
|
113
|
+
globRe = new RegExp(`(^|/)${escaped}$`, "i");
|
|
114
|
+
}
|
|
115
|
+
const results = [];
|
|
116
|
+
function walk(dir) {
|
|
117
|
+
let entries;
|
|
118
|
+
try {
|
|
119
|
+
entries = fs.readdirSync(dir);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
for (const name of entries) {
|
|
125
|
+
if (name === "node_modules" || name === ".git" || name === "dist" || name === "build")
|
|
126
|
+
continue;
|
|
127
|
+
const full = path.join(dir, name);
|
|
128
|
+
let stat;
|
|
129
|
+
try {
|
|
130
|
+
stat = fs.statSync(full);
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
if (stat.isDirectory()) {
|
|
136
|
+
walk(full);
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
const rel = path.relative(root, full);
|
|
140
|
+
if (globRe && !globRe.test(rel) && !globRe.test(name))
|
|
141
|
+
continue;
|
|
142
|
+
let content;
|
|
143
|
+
try {
|
|
144
|
+
content = fs.readFileSync(full, "utf-8");
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
if (!re.test(content))
|
|
150
|
+
continue;
|
|
151
|
+
if (outputMode === "files_with_matches") {
|
|
152
|
+
results.push(full);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
// count
|
|
156
|
+
const lines = content.split("\n");
|
|
157
|
+
let cnt = 0;
|
|
158
|
+
for (const line of lines) {
|
|
159
|
+
if (re.test(line))
|
|
160
|
+
cnt++;
|
|
161
|
+
}
|
|
162
|
+
if (cnt > 0)
|
|
163
|
+
results.push(`${full}:${cnt}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
walk(root);
|
|
168
|
+
if (results.length === 0)
|
|
169
|
+
return `[no matches for "${args.pattern}"]`;
|
|
170
|
+
return results.join("\n");
|
|
171
|
+
}
|
|
73
172
|
//# sourceMappingURL=grep.js.map
|
package/dist/tools/grep.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grep.js","sourceRoot":"","sources":["../../src/tools/grep.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,6DAA6D;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"grep.js","sourceRoot":"","sources":["../../src/tools/grep.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/** Minimal skill shape (mirrors MarkdownSkill from the SDK). */
|
|
2
|
+
interface _SkillEntry {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
body: string;
|
|
6
|
+
allowedTools?: string[];
|
|
7
|
+
source: string;
|
|
8
|
+
}
|
|
9
|
+
/** Called by repl.ts after loadAllMarkdownSkills() resolves. */
|
|
10
|
+
export declare function setLoadedSkills(skills: _SkillEntry[]): void;
|
|
1
11
|
export interface ToolDef {
|
|
2
12
|
/** OpenAI-compatible function tool definition. */
|
|
3
13
|
type: "function";
|
|
@@ -26,6 +36,17 @@ export interface ToolContext {
|
|
|
26
36
|
maxBytes: number;
|
|
27
37
|
/** Skip per-tool confirmation prompts (--yes mode). */
|
|
28
38
|
yolo: boolean;
|
|
39
|
+
/** API base URL used for chat + receipts (e.g. "https://theron.tryvext.com").
|
|
40
|
+
* Sourced from THERON_API_URL env var or ~/.theron/credentials via loadCredentials(). */
|
|
41
|
+
apiUrl: string;
|
|
42
|
+
/** Bearer token from ~/.theron/credentials or THERON_API_KEY env var,
|
|
43
|
+
* or undefined when the user has not logged in. Receipts are minted
|
|
44
|
+
* unsigned when absent -- fail-open. */
|
|
45
|
+
apiKey: string | undefined;
|
|
46
|
+
/** Optional abort signal. When aborted, long-running tools (Bash) should
|
|
47
|
+
* terminate immediately. Set by the REPL's per-turn AbortController so
|
|
48
|
+
* Ctrl-C during a streaming turn cancels without exiting the process. */
|
|
49
|
+
signal?: AbortSignal;
|
|
29
50
|
}
|
|
30
51
|
export declare const TOOL_REGISTRY: Record<string, ToolExecutor>;
|
|
31
52
|
export declare const TOOL_SCHEMAS: ToolDef[];
|
|
@@ -38,3 +59,4 @@ export declare const MUTATING_TOOLS: ReadonlySet<string>;
|
|
|
38
59
|
* Filtering the schema makes the model LESS likely to even attempt a
|
|
39
60
|
* write; the executor-side deny in repl.ts is the actual guarantee. */
|
|
40
61
|
export declare const READONLY_TOOL_SCHEMAS: ToolDef[];
|
|
62
|
+
export {};
|