@nexrall/code-core 1.4.74 → 1.4.76
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 +4 -3
- package/dist/agent/askOnce.d.ts +10 -0
- package/dist/agent/askOnce.d.ts.map +1 -1
- package/dist/agent/askOnce.js +10 -2
- package/dist/agent/planMode.d.ts.map +1 -1
- package/dist/agent/planMode.js +16 -3
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/permissions/autoMode.d.ts +89 -0
- package/dist/permissions/autoMode.d.ts.map +1 -0
- package/dist/permissions/autoMode.js +346 -0
- package/dist/permissions/rules.d.ts +6 -0
- package/dist/permissions/rules.d.ts.map +1 -1
- package/dist/permissions/rules.js +33 -0
- package/dist/plugins/eval.d.ts +199 -0
- package/dist/plugins/eval.d.ts.map +1 -0
- package/dist/plugins/eval.js +470 -0
- package/package.json +1 -1
|
@@ -33,15 +33,22 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.managedSettingsPath = managedSettingsPath;
|
|
36
37
|
exports.setSessionRules = setSessionRules;
|
|
37
38
|
exports.setSessionSettings = setSessionSettings;
|
|
38
39
|
exports.getSessionSettings = getSessionSettings;
|
|
39
40
|
exports.loadSettings = loadSettings;
|
|
41
|
+
exports.matchedAllowRule = matchedAllowRule;
|
|
42
|
+
exports.isBroadAllowRule = isBroadAllowRule;
|
|
40
43
|
exports.evaluatePermission = evaluatePermission;
|
|
41
44
|
const fs = __importStar(require("fs"));
|
|
42
45
|
const path = __importStar(require("path"));
|
|
43
46
|
const os = __importStar(require("os"));
|
|
44
47
|
function managedSettingsPath() {
|
|
48
|
+
// Tests (and a sandboxed doctor run) point this at a fixture. Checked first so it
|
|
49
|
+
// can never be shadowed by a real machine-level file.
|
|
50
|
+
if (process.env.NEXRALL_MANAGED_SETTINGS)
|
|
51
|
+
return process.env.NEXRALL_MANAGED_SETTINGS;
|
|
45
52
|
if (process.platform === 'darwin')
|
|
46
53
|
return '/Library/Application Support/Nexrall/managed-settings.json';
|
|
47
54
|
if (process.platform === 'win32')
|
|
@@ -258,6 +265,32 @@ function ruleMatches(rule, tool, input, workDir, opts) {
|
|
|
258
265
|
return true;
|
|
259
266
|
return matchValues(tool, input, workDir).some((v) => matchPattern(pattern, v));
|
|
260
267
|
}
|
|
268
|
+
/** The first ALLOW rule that matches this call, or null. S20's classifier gate
|
|
269
|
+
* reads this to tell a NARROW pre-approval (wins, no review) from a BROAD one
|
|
270
|
+
* (suspended while the classifier is on — see isBroadAllowRule). */
|
|
271
|
+
function matchedAllowRule(rules, tool, input, workDir) {
|
|
272
|
+
return rules.allow.find((r) => ruleMatches(r, tool, input, workDir, { forAllow: true })) ?? null;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Is this allow rule a BLANKET pre-approval ("anything this tool can do")?
|
|
276
|
+
* Those stop meaning anything once an auto-mode classifier exists: `Bash(*)`
|
|
277
|
+
* is exactly the rule a prompt-injected agent would wish for, and CC suspends
|
|
278
|
+
* the same set in their auto mode. Broad = bare tool name / `(*)`, or a bash
|
|
279
|
+
* rule that hands control to an interpreter (`Bash(python:*)`, `node -e`…).
|
|
280
|
+
* Narrow rules (`Bash(npm run test:*)`, `Read(src/**)`) keep resolving first.
|
|
281
|
+
*/
|
|
282
|
+
const INTERPRETER_HEADS = /^(?:\S*\/)?(python3?|node|bun|deno|ruby|perl|php|bash|sh|zsh|fish|pwsh|powershell|osascript|cmd)(\s|:|$)/i;
|
|
283
|
+
function isBroadAllowRule(rule) {
|
|
284
|
+
const { tool, pattern } = parseRule(rule);
|
|
285
|
+
if (pattern === null || pattern === '' || pattern === '*')
|
|
286
|
+
return true;
|
|
287
|
+
const isBashRule = ['bash', 'run_command', 'execute_command', 'Bash'].includes(tool);
|
|
288
|
+
if (!isBashRule)
|
|
289
|
+
return false;
|
|
290
|
+
if (!/[*:]$/.test(pattern))
|
|
291
|
+
return false;
|
|
292
|
+
return INTERPRETER_HEADS.test(pattern.replace(/[:*]+$/, '').trim());
|
|
293
|
+
}
|
|
261
294
|
/**
|
|
262
295
|
* Evaluate a tool call against merged rules. Returns the matching decision, or
|
|
263
296
|
* null when no rule applies (caller decides the default, usually "ask").
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
export declare const EVAL_SCHEMA_VERSION = 1;
|
|
2
|
+
/** CC's default: each case runs three times. */
|
|
3
|
+
export declare const EVAL_DEFAULT_RUNS = 3;
|
|
4
|
+
export declare const EVAL_MAX_RUNS = 50;
|
|
5
|
+
export declare const EVAL_DEFAULT_THRESHOLD = 1;
|
|
6
|
+
export declare const EVAL_DEFAULT_MAX_TURNS = 10;
|
|
7
|
+
export declare const EVAL_DEFAULT_TIMEOUT_S = 300;
|
|
8
|
+
/** CC caps both; larger values are refused, not clamped silently. */
|
|
9
|
+
export declare const EVAL_MAX_TURNS_CEILING = 200;
|
|
10
|
+
export declare const EVAL_MAX_TIMEOUT_S = 3600;
|
|
11
|
+
export type GraderType = 'regex' | 'tool_used' | 'tool_order' | 'file_exists' | 'llm' | 'baseline';
|
|
12
|
+
/**
|
|
13
|
+
* Which arm a grader scores in.
|
|
14
|
+
* · 'both' (default) — counted for the plugin arm AND the no-plugin baseline.
|
|
15
|
+
* · 'with-only' — counted only when the plugin was loaded (CC's rule for the
|
|
16
|
+
* two-arm runs: a grader that can only pass WITH the plugin must not drag
|
|
17
|
+
* the baseline down).
|
|
18
|
+
*/
|
|
19
|
+
export type GraderArm = 'both' | 'with-only';
|
|
20
|
+
export interface EvalGrader {
|
|
21
|
+
/** File name inside graders/, for reporting. */
|
|
22
|
+
file: string;
|
|
23
|
+
type: GraderType;
|
|
24
|
+
weight: number;
|
|
25
|
+
arm: GraderArm;
|
|
26
|
+
pattern?: string;
|
|
27
|
+
flags?: string;
|
|
28
|
+
/** 'contains' (default) | 'not_contains' | 'count:<n>' */
|
|
29
|
+
match?: string;
|
|
30
|
+
/** 'last_message' (default) | 'trace' | 'file' */
|
|
31
|
+
target?: string;
|
|
32
|
+
/** target 'file': project-relative path or glob to read. */
|
|
33
|
+
pathPattern?: string;
|
|
34
|
+
tool?: string;
|
|
35
|
+
inputMatch?: string;
|
|
36
|
+
min?: number;
|
|
37
|
+
max?: number;
|
|
38
|
+
before?: string;
|
|
39
|
+
after?: string;
|
|
40
|
+
path?: string;
|
|
41
|
+
exists?: boolean;
|
|
42
|
+
criteria?: string;
|
|
43
|
+
/** llm: 'last_message' (default) | 'trace'. */
|
|
44
|
+
focus?: string;
|
|
45
|
+
/** baseline: the reference transcript file (case-relative). */
|
|
46
|
+
baselineFile?: string;
|
|
47
|
+
}
|
|
48
|
+
export interface EvalCase {
|
|
49
|
+
name: string;
|
|
50
|
+
dir: string;
|
|
51
|
+
prompt: string;
|
|
52
|
+
runs: number;
|
|
53
|
+
maxTurns: number;
|
|
54
|
+
timeoutSeconds: number;
|
|
55
|
+
allowedTools: string[];
|
|
56
|
+
tags: string[];
|
|
57
|
+
expectedOutcome?: string;
|
|
58
|
+
graders: EvalGrader[];
|
|
59
|
+
}
|
|
60
|
+
export interface DiscoveredSuite {
|
|
61
|
+
cases: EvalCase[];
|
|
62
|
+
/** Case dirs that failed to parse — reported, never silently dropped. */
|
|
63
|
+
errors: Array<{
|
|
64
|
+
dir: string;
|
|
65
|
+
error: string;
|
|
66
|
+
}>;
|
|
67
|
+
}
|
|
68
|
+
/** One tool call as the child's stream reported it. */
|
|
69
|
+
export interface EvalToolCall {
|
|
70
|
+
tool: string;
|
|
71
|
+
input: unknown;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* What ONE run produced. `readFile` resolves a project-relative path or glob
|
|
75
|
+
* against the run's workspace — the caller owns the filesystem, so the graders
|
|
76
|
+
* stay pure.
|
|
77
|
+
*/
|
|
78
|
+
export interface EvalRunTrace {
|
|
79
|
+
lastMessage: string;
|
|
80
|
+
toolCalls: EvalToolCall[];
|
|
81
|
+
files: string[];
|
|
82
|
+
readFile: (relOrGlob: string) => string | null;
|
|
83
|
+
/** USD when the server reported it; null = unreported (never invented). */
|
|
84
|
+
costUsd: number | null;
|
|
85
|
+
tokens: number;
|
|
86
|
+
exitCode: number;
|
|
87
|
+
error?: string;
|
|
88
|
+
}
|
|
89
|
+
export interface GraderVerdict {
|
|
90
|
+
passed: boolean;
|
|
91
|
+
why: string;
|
|
92
|
+
}
|
|
93
|
+
/** The injected model call for llm/baseline graders. null = could not judge. */
|
|
94
|
+
export type EvalJudge = (args: {
|
|
95
|
+
criteria: string;
|
|
96
|
+
focusText: string;
|
|
97
|
+
baselineText?: string;
|
|
98
|
+
}) => Promise<boolean | null>;
|
|
99
|
+
export interface CaseRunOutcome {
|
|
100
|
+
arm: 'with' | 'without';
|
|
101
|
+
run: number;
|
|
102
|
+
score: number;
|
|
103
|
+
graderResults: Array<{
|
|
104
|
+
file: string;
|
|
105
|
+
type: GraderType;
|
|
106
|
+
weight: number;
|
|
107
|
+
passed: boolean;
|
|
108
|
+
why: string;
|
|
109
|
+
}>;
|
|
110
|
+
costUsd: number | null;
|
|
111
|
+
costReported: boolean;
|
|
112
|
+
durationMs: number;
|
|
113
|
+
error?: string;
|
|
114
|
+
}
|
|
115
|
+
export interface CaseOutcome {
|
|
116
|
+
name: string;
|
|
117
|
+
with: CaseRunOutcome[];
|
|
118
|
+
without: CaseRunOutcome[];
|
|
119
|
+
withScore: number | null;
|
|
120
|
+
withoutScore: number | null;
|
|
121
|
+
delta: number | null;
|
|
122
|
+
passed: boolean;
|
|
123
|
+
}
|
|
124
|
+
export interface EvalReport {
|
|
125
|
+
schemaVersion: number;
|
|
126
|
+
plugin: string;
|
|
127
|
+
startedAt: number;
|
|
128
|
+
durationMs: number;
|
|
129
|
+
threshold: number;
|
|
130
|
+
runs: number;
|
|
131
|
+
judgeModel?: string;
|
|
132
|
+
partial?: boolean;
|
|
133
|
+
partialReason?: string;
|
|
134
|
+
cases: CaseOutcome[];
|
|
135
|
+
errors: Array<{
|
|
136
|
+
dir: string;
|
|
137
|
+
error: string;
|
|
138
|
+
}>;
|
|
139
|
+
aggregates: {
|
|
140
|
+
casesPassed: number;
|
|
141
|
+
casesTotal: number;
|
|
142
|
+
overallScore: number;
|
|
143
|
+
meanDelta: number | null;
|
|
144
|
+
};
|
|
145
|
+
costUsd: number;
|
|
146
|
+
costMissing: number;
|
|
147
|
+
}
|
|
148
|
+
/** `[a, b]` / `a, b` / `a` → ['a','b'] — the two shapes real files use. */
|
|
149
|
+
export declare function parseList(value: string | undefined): string[];
|
|
150
|
+
/**
|
|
151
|
+
* One grader file → EvalGrader. Throws on anything that would make the grader
|
|
152
|
+
* silently unscorable (unknown type, missing pattern/tool/path, bad count).
|
|
153
|
+
*/
|
|
154
|
+
export declare function parseGraderFile(file: string, raw: string): EvalGrader;
|
|
155
|
+
/** One case directory → EvalCase. See the header for the layout. */
|
|
156
|
+
export declare function parseEvalCase(dir: string): EvalCase;
|
|
157
|
+
/** Every case under `<pluginDir>/evals` (the results dir is never a case). */
|
|
158
|
+
export declare function discoverEvalCases(pluginDir: string): DiscoveredSuite;
|
|
159
|
+
/** The text a grader's target names. Exposed for tests and the report's `why`. */
|
|
160
|
+
export declare function targetText(g: EvalGrader, trace: EvalRunTrace): string | null;
|
|
161
|
+
/**
|
|
162
|
+
* Score ONE grader over ONE run. Async because llm/baseline call the judge.
|
|
163
|
+
* A grader that cannot be evaluated FAILS (with the reason in `why`) — it must
|
|
164
|
+
* never pass by accident, or a broken suite would look green.
|
|
165
|
+
*/
|
|
166
|
+
export declare function evaluateGrader(g: EvalGrader, trace: EvalRunTrace, judge: EvalJudge | undefined): Promise<GraderVerdict>;
|
|
167
|
+
/** Which graders count in an arm: with-only graders never score the baseline. */
|
|
168
|
+
export declare function gradersForArm(graders: EvalGrader[], arm: 'with' | 'without'): EvalGrader[];
|
|
169
|
+
/** Score one run: weighted fraction of its graders that passed. */
|
|
170
|
+
export declare function scoreRun(graders: EvalGrader[], trace: EvalRunTrace, judge: EvalJudge | undefined, arm: 'with' | 'without'): Promise<{
|
|
171
|
+
score: number;
|
|
172
|
+
results: CaseRunOutcome['graderResults'];
|
|
173
|
+
}>;
|
|
174
|
+
/**
|
|
175
|
+
* Fold run outcomes into the report. Case score = mean of the plugin-arm run
|
|
176
|
+
* scores; `delta` = with − without (null when the baseline did not run).
|
|
177
|
+
* A case PASSES at ≥ threshold (CC's default: every grader, every run).
|
|
178
|
+
*/
|
|
179
|
+
export declare function aggregateReport(i: {
|
|
180
|
+
plugin: string;
|
|
181
|
+
startedAt: number;
|
|
182
|
+
durationMs: number;
|
|
183
|
+
threshold: number;
|
|
184
|
+
runs: number;
|
|
185
|
+
judgeModel?: string;
|
|
186
|
+
cases: Array<{
|
|
187
|
+
name: string;
|
|
188
|
+
with: CaseRunOutcome[];
|
|
189
|
+
without: CaseRunOutcome[];
|
|
190
|
+
}>;
|
|
191
|
+
errors: Array<{
|
|
192
|
+
dir: string;
|
|
193
|
+
error: string;
|
|
194
|
+
}>;
|
|
195
|
+
partial?: {
|
|
196
|
+
reason: string;
|
|
197
|
+
};
|
|
198
|
+
}): EvalReport;
|
|
199
|
+
//# sourceMappingURL=eval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../src/plugins/eval.ts"],"names":[],"mappings":"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"}
|