@roackb2/heddle 0.0.37 → 0.0.38
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 +2 -0
- package/dist/examples/repo-investigator.js +1 -2
- package/dist/examples/repo-investigator.js.map +1 -1
- package/dist/src/cli/ask.d.ts.map +1 -1
- package/dist/src/cli/ask.js +11 -0
- package/dist/src/cli/ask.js.map +1 -1
- package/dist/src/cli/chat/App.js +43 -27
- package/dist/src/cli/chat/App.js.map +1 -1
- package/dist/src/cli/chat/components/ModelPickerPanel.d.ts +2 -1
- package/dist/src/cli/chat/components/ModelPickerPanel.d.ts.map +1 -1
- package/dist/src/cli/chat/components/ModelPickerPanel.js +8 -4
- package/dist/src/cli/chat/components/ModelPickerPanel.js.map +1 -1
- package/dist/src/cli/chat/debug/tui-debug-snapshot.d.ts +2 -1
- package/dist/src/cli/chat/debug/tui-debug-snapshot.d.ts.map +1 -1
- package/dist/src/cli/chat/debug/tui-debug-snapshot.js +14 -1
- package/dist/src/cli/chat/debug/tui-debug-snapshot.js.map +1 -1
- package/dist/src/cli/chat/hooks/tui-ordinary-turn.d.ts.map +1 -1
- package/dist/src/cli/chat/hooks/tui-ordinary-turn.js +0 -1
- package/dist/src/cli/chat/hooks/tui-ordinary-turn.js.map +1 -1
- package/dist/src/cli/chat/hooks/useApprovalFlow.d.ts.map +1 -1
- package/dist/src/cli/chat/hooks/useApprovalFlow.js +3 -3
- package/dist/src/cli/chat/hooks/useApprovalFlow.js.map +1 -1
- package/dist/src/cli/chat/hooks/useChatPickers.d.ts +6 -3
- package/dist/src/cli/chat/hooks/useChatPickers.d.ts.map +1 -1
- package/dist/src/cli/chat/hooks/useChatPickers.js +17 -4
- package/dist/src/cli/chat/hooks/useChatPickers.js.map +1 -1
- package/dist/src/cli/chat/hooks/useChatSessions.d.ts +1 -1
- package/dist/src/cli/chat/hooks/useChatSessions.d.ts.map +1 -1
- package/dist/src/cli/chat/hooks/useChatSessions.js +23 -20
- package/dist/src/cli/chat/hooks/useChatSessions.js.map +1 -1
- package/dist/src/cli/chat/hooks/usePromptSubmission.d.ts +2 -1
- package/dist/src/cli/chat/hooks/usePromptSubmission.d.ts.map +1 -1
- package/dist/src/cli/chat/hooks/usePromptSubmission.js +4 -1
- package/dist/src/cli/chat/hooks/usePromptSubmission.js.map +1 -1
- package/dist/src/cli/chat/state/local-commands.d.ts +2 -0
- package/dist/src/cli/chat/state/local-commands.d.ts.map +1 -1
- package/dist/src/cli/chat/state/local-commands.js +17 -3
- package/dist/src/cli/chat/state/local-commands.js.map +1 -1
- package/dist/src/cli/chat/submit.d.ts.map +1 -1
- package/dist/src/cli/chat/submit.js +13 -1
- package/dist/src/cli/chat/submit.js.map +1 -1
- package/dist/src/cli/eval/index.d.ts +24 -0
- package/dist/src/cli/eval/index.d.ts.map +1 -0
- package/dist/src/cli/eval/index.js +232 -0
- package/dist/src/cli/eval/index.js.map +1 -0
- package/dist/src/cli/main.js +25 -3
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/cli/remote/control-plane-client.d.ts +5 -1
- package/dist/src/cli/remote/control-plane-client.d.ts.map +1 -1
- package/dist/src/core/agent/mutation-tracking.d.ts +0 -7
- package/dist/src/core/agent/mutation-tracking.d.ts.map +1 -1
- package/dist/src/core/agent/mutation-tracking.js +5 -63
- package/dist/src/core/agent/mutation-tracking.js.map +1 -1
- package/dist/src/core/agent/post-mutation.d.ts +2 -2
- package/dist/src/core/agent/post-mutation.d.ts.map +1 -1
- package/dist/src/core/agent/post-mutation.js +5 -20
- package/dist/src/core/agent/post-mutation.js.map +1 -1
- package/dist/src/core/agent/progress-reminders.d.ts +1 -4
- package/dist/src/core/agent/progress-reminders.d.ts.map +1 -1
- package/dist/src/core/agent/progress-reminders.js +4 -56
- package/dist/src/core/agent/progress-reminders.js.map +1 -1
- package/dist/src/core/agent/run-agent.d.ts.map +1 -1
- package/dist/src/core/agent/run-agent.js +3 -103
- package/dist/src/core/agent/run-agent.js.map +1 -1
- package/dist/src/core/chat/session-submit.d.ts.map +1 -1
- package/dist/src/core/chat/session-submit.js +0 -1
- package/dist/src/core/chat/session-submit.js.map +1 -1
- package/dist/src/core/chat/types.d.ts +1 -0
- package/dist/src/core/chat/types.d.ts.map +1 -1
- package/dist/src/core/config.d.ts +1 -1
- package/dist/src/core/config.d.ts.map +1 -1
- package/dist/src/core/config.js +1 -1
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/eval/agent-runner.d.ts +24 -0
- package/dist/src/core/eval/agent-runner.d.ts.map +1 -0
- package/dist/src/core/eval/agent-runner.js +151 -0
- package/dist/src/core/eval/agent-runner.js.map +1 -0
- package/dist/src/core/eval/case-loader.d.ts +7 -0
- package/dist/src/core/eval/case-loader.d.ts.map +1 -0
- package/dist/src/core/eval/case-loader.js +34 -0
- package/dist/src/core/eval/case-loader.js.map +1 -0
- package/dist/src/core/eval/check-runner.d.ts +8 -0
- package/dist/src/core/eval/check-runner.d.ts.map +1 -0
- package/dist/src/core/eval/check-runner.js +33 -0
- package/dist/src/core/eval/check-runner.js.map +1 -0
- package/dist/src/core/eval/cleanup.d.ts +20 -0
- package/dist/src/core/eval/cleanup.d.ts.map +1 -0
- package/dist/src/core/eval/cleanup.js +42 -0
- package/dist/src/core/eval/cleanup.js.map +1 -0
- package/dist/src/core/eval/git-artifacts.d.ts +26 -0
- package/dist/src/core/eval/git-artifacts.d.ts.map +1 -0
- package/dist/src/core/eval/git-artifacts.js +211 -0
- package/dist/src/core/eval/git-artifacts.js.map +1 -0
- package/dist/src/core/eval/process.d.ts +22 -0
- package/dist/src/core/eval/process.d.ts.map +1 -0
- package/dist/src/core/eval/process.js +65 -0
- package/dist/src/core/eval/process.js.map +1 -0
- package/dist/src/core/eval/progress.d.ts +28 -0
- package/dist/src/core/eval/progress.d.ts.map +1 -0
- package/dist/src/core/eval/progress.js +94 -0
- package/dist/src/core/eval/progress.js.map +1 -0
- package/dist/src/core/eval/report-writer.d.ts +7 -0
- package/dist/src/core/eval/report-writer.d.ts.map +1 -0
- package/dist/src/core/eval/report-writer.js +159 -0
- package/dist/src/core/eval/report-writer.js.map +1 -0
- package/dist/src/core/eval/schema.d.ts +206 -0
- package/dist/src/core/eval/schema.d.ts.map +1 -0
- package/dist/src/core/eval/schema.js +104 -0
- package/dist/src/core/eval/schema.js.map +1 -0
- package/dist/src/core/eval/trace-analyzer.d.ts +6 -0
- package/dist/src/core/eval/trace-analyzer.d.ts.map +1 -0
- package/dist/src/core/eval/trace-analyzer.js +106 -0
- package/dist/src/core/eval/trace-analyzer.js.map +1 -0
- package/dist/src/core/eval/workspace-fixture.d.ts +14 -0
- package/dist/src/core/eval/workspace-fixture.d.ts.map +1 -0
- package/dist/src/core/eval/workspace-fixture.js +235 -0
- package/dist/src/core/eval/workspace-fixture.js.map +1 -0
- package/dist/src/core/llm/model-policy.d.ts +26 -0
- package/dist/src/core/llm/model-policy.d.ts.map +1 -1
- package/dist/src/core/llm/model-policy.js +47 -0
- package/dist/src/core/llm/model-policy.js.map +1 -1
- package/dist/src/core/prompts/system-prompt.d.ts +1 -1
- package/dist/src/core/prompts/system-prompt.d.ts.map +1 -1
- package/dist/src/core/prompts/system-prompt.js +19 -100
- package/dist/src/core/prompts/system-prompt.js.map +1 -1
- package/dist/src/core/runtime/default-tools.d.ts.map +1 -1
- package/dist/src/core/runtime/default-tools.js +0 -2
- package/dist/src/core/runtime/default-tools.js.map +1 -1
- package/dist/src/index.d.ts +0 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +0 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/server/features/control-plane/router.d.ts +5 -1
- package/dist/src/server/features/control-plane/router.d.ts.map +1 -1
- package/dist/src/server/features/control-plane/router.js +16 -2
- package/dist/src/server/features/control-plane/router.js.map +1 -1
- package/dist/src/server/features/control-plane/services/chat-sessions.d.ts +2 -1
- package/dist/src/server/features/control-plane/services/chat-sessions.d.ts.map +1 -1
- package/dist/src/server/features/control-plane/services/chat-sessions.js +9 -3
- package/dist/src/server/features/control-plane/services/chat-sessions.js.map +1 -1
- package/dist/src/server/router.d.ts +5 -1
- package/dist/src/server/router.d.ts.map +1 -1
- package/dist/src/web/assets/{MonacoDiffViewer-DM8Cy5Xf.js → MonacoDiffViewer-DP7GeCEC.js} +1 -1
- package/dist/src/web/assets/index-CYd4sslC.css +2 -0
- package/dist/src/web/assets/index-PUxjg447.js +56 -0
- package/dist/src/web/index.html +2 -2
- package/package.json +7 -2
- package/dist/src/core/tools/report-state.d.ts +0 -3
- package/dist/src/core/tools/report-state.d.ts.map +0 -1
- package/dist/src/core/tools/report-state.js +0 -63
- package/dist/src/core/tools/report-state.js.map +0 -1
- package/dist/src/web/assets/index-BEeN-RT5.css +0 -2
- package/dist/src/web/assets/index-BKDg9H_-.js +0 -56
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
const MUTATION_TOOLS = new Set(['edit_file', 'delete_file', 'move_file', 'run_shell_mutate']);
|
|
3
|
+
const READ_OR_SEARCH_TOOLS = new Set(['read_file', 'list_files', 'search_files', 'run_shell_inspect']);
|
|
4
|
+
export function analyzeTraceFiles(paths) {
|
|
5
|
+
return analyzeTrace(paths.flatMap(readTraceFile));
|
|
6
|
+
}
|
|
7
|
+
export function analyzeTrace(trace) {
|
|
8
|
+
const toolsByName = {};
|
|
9
|
+
const readOrSearchBeforeMutation = [];
|
|
10
|
+
let assistantTurns = 0;
|
|
11
|
+
let toolCalls = 0;
|
|
12
|
+
let toolResults = 0;
|
|
13
|
+
let mutations = 0;
|
|
14
|
+
let approvalsRequested = 0;
|
|
15
|
+
let approvalsResolved = 0;
|
|
16
|
+
let toolErrors = 0;
|
|
17
|
+
let verificationCommandsAfterMutation = 0;
|
|
18
|
+
const verificationCommandDetails = [];
|
|
19
|
+
let firstMutationStep;
|
|
20
|
+
let outcome;
|
|
21
|
+
let summary;
|
|
22
|
+
for (const event of trace) {
|
|
23
|
+
if (event.type === 'assistant.turn') {
|
|
24
|
+
assistantTurns++;
|
|
25
|
+
for (const call of event.toolCalls ?? []) {
|
|
26
|
+
toolCalls++;
|
|
27
|
+
toolsByName[call.tool] = (toolsByName[call.tool] ?? 0) + 1;
|
|
28
|
+
if (READ_OR_SEARCH_TOOLS.has(call.tool) && firstMutationStep === undefined) {
|
|
29
|
+
readOrSearchBeforeMutation.push(summarizeToolInput(call.tool, call.input));
|
|
30
|
+
}
|
|
31
|
+
if (MUTATION_TOOLS.has(call.tool)) {
|
|
32
|
+
mutations++;
|
|
33
|
+
firstMutationStep ??= event.step;
|
|
34
|
+
}
|
|
35
|
+
if (firstMutationStep !== undefined
|
|
36
|
+
&& (call.tool === 'run_shell_mutate' || call.tool === 'run_shell_inspect')
|
|
37
|
+
&& isVerificationCommand(call.input)) {
|
|
38
|
+
verificationCommandsAfterMutation++;
|
|
39
|
+
verificationCommandDetails.push(summarizeToolInput(call.tool, call.input));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if (event.type === 'tool.result') {
|
|
45
|
+
toolResults++;
|
|
46
|
+
if (!event.result.ok) {
|
|
47
|
+
toolErrors++;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (event.type === 'tool.approval_requested') {
|
|
51
|
+
approvalsRequested++;
|
|
52
|
+
}
|
|
53
|
+
if (event.type === 'tool.approval_resolved') {
|
|
54
|
+
approvalsResolved++;
|
|
55
|
+
}
|
|
56
|
+
if (event.type === 'run.finished') {
|
|
57
|
+
outcome = event.outcome;
|
|
58
|
+
summary = event.summary;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
assistantTurns,
|
|
63
|
+
toolCalls,
|
|
64
|
+
toolResults,
|
|
65
|
+
mutations,
|
|
66
|
+
approvalsRequested,
|
|
67
|
+
approvalsResolved,
|
|
68
|
+
toolErrors,
|
|
69
|
+
verificationCommandsAfterMutation,
|
|
70
|
+
verificationCommandDetails: [...new Set(verificationCommandDetails)],
|
|
71
|
+
firstMutationStep,
|
|
72
|
+
outcome,
|
|
73
|
+
summary,
|
|
74
|
+
toolsByName,
|
|
75
|
+
readOrSearchBeforeMutation: [...new Set(readOrSearchBeforeMutation)],
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
export function readTraceFile(path) {
|
|
79
|
+
if (!existsSync(path)) {
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
const parsed = JSON.parse(readFileSync(path, 'utf8'));
|
|
83
|
+
return Array.isArray(parsed) ? parsed.filter(isTraceEvent) : [];
|
|
84
|
+
}
|
|
85
|
+
function isTraceEvent(value) {
|
|
86
|
+
return Boolean(value && typeof value === 'object' && !Array.isArray(value) && typeof value.type === 'string');
|
|
87
|
+
}
|
|
88
|
+
function summarizeToolInput(tool, input) {
|
|
89
|
+
const object = input && typeof input === 'object' && !Array.isArray(input) ? input : undefined;
|
|
90
|
+
const path = object && typeof object.path === 'string' ? object.path : undefined;
|
|
91
|
+
const query = object && typeof object.query === 'string' ? object.query : undefined;
|
|
92
|
+
const command = object && typeof object.command === 'string' ? object.command : undefined;
|
|
93
|
+
return `${tool}:${path ?? query ?? command ?? ''}`.slice(0, 160);
|
|
94
|
+
}
|
|
95
|
+
function isVerificationCommand(input) {
|
|
96
|
+
if (!input || typeof input !== 'object' || Array.isArray(input)) {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
const command = input.command;
|
|
100
|
+
if (typeof command !== 'string') {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
return /\b(yarn|npm|pnpm|vitest|jest|mocha|tsc|eslint|cargo|go|pytest|python|ruff)\b/.test(command)
|
|
104
|
+
&& /\b(test|build|lint|typecheck|check|vitest|tsc|pytest|ruff)\b/.test(command);
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=trace-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-analyzer.js","sourceRoot":"","sources":["../../../../src/core/eval/trace-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { EvalProgressReporter } from './progress.js';
|
|
2
|
+
import type { AgentEvalCase, EvalCheckResult, EvalRunResult } from './schema.js';
|
|
3
|
+
export type PreparedEvalWorkspace = {
|
|
4
|
+
workspaceRoot: string;
|
|
5
|
+
setupResults: EvalCheckResult[];
|
|
6
|
+
fixture: EvalRunResult['fixture'];
|
|
7
|
+
};
|
|
8
|
+
export declare function prepareEvalWorkspace(args: {
|
|
9
|
+
testCase: AgentEvalCase;
|
|
10
|
+
repoRoot: string;
|
|
11
|
+
workRoot?: string;
|
|
12
|
+
progress?: EvalProgressReporter;
|
|
13
|
+
}): Promise<PreparedEvalWorkspace>;
|
|
14
|
+
//# sourceMappingURL=workspace-fixture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-fixture.d.ts","sourceRoot":"","sources":["../../../../src/core/eval/workspace-fixture.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjF,MAAM,MAAM,qBAAqB,GAAG;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;CACnC,CAAC;AAEF,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,QAAQ,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CACjC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA8BjC"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { appendFileSync, cpSync, existsSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join, resolve } from 'node:path';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { runCommand, runShellCommand } from './process.js';
|
|
5
|
+
export async function prepareEvalWorkspace(args) {
|
|
6
|
+
const parent = args.workRoot ? resolve(args.workRoot) : mkdtempSync(join(tmpdir(), 'heddle-eval-'));
|
|
7
|
+
mkdirSync(parent, { recursive: true });
|
|
8
|
+
const workspaceRoot = join(parent, args.testCase.id);
|
|
9
|
+
const fixture = args.testCase.fixture;
|
|
10
|
+
if (fixture.type === 'inline') {
|
|
11
|
+
rmSync(workspaceRoot, { recursive: true, force: true });
|
|
12
|
+
}
|
|
13
|
+
const prepared = fixture.type === 'git-worktree' ?
|
|
14
|
+
await prepareGitWorktreeFixture({
|
|
15
|
+
repoRoot: args.repoRoot,
|
|
16
|
+
workspaceRoot,
|
|
17
|
+
testCase: args.testCase,
|
|
18
|
+
progress: args.progress,
|
|
19
|
+
})
|
|
20
|
+
: await prepareInlineFixture({
|
|
21
|
+
repoRoot: args.repoRoot,
|
|
22
|
+
workspaceRoot,
|
|
23
|
+
testCase: args.testCase,
|
|
24
|
+
progress: args.progress,
|
|
25
|
+
});
|
|
26
|
+
await copyAuthState({
|
|
27
|
+
repoRoot: args.repoRoot,
|
|
28
|
+
workspaceRoot,
|
|
29
|
+
});
|
|
30
|
+
return prepared;
|
|
31
|
+
}
|
|
32
|
+
async function prepareInlineFixture(args) {
|
|
33
|
+
mkdirSync(args.workspaceRoot, { recursive: true });
|
|
34
|
+
const setupResults = await applyEvalSetup({
|
|
35
|
+
workspaceRoot: args.workspaceRoot,
|
|
36
|
+
repoRoot: args.repoRoot,
|
|
37
|
+
testCase: args.testCase,
|
|
38
|
+
progress: args.progress,
|
|
39
|
+
});
|
|
40
|
+
const baselineCommit = await trackProgress(args.progress, {
|
|
41
|
+
phase: 'workspace.baseline',
|
|
42
|
+
message: 'commit inline fixture baseline',
|
|
43
|
+
run: () => initializeGitBaseline(args.workspaceRoot, args.testCase.setup.commitMessage ?? `Initial eval fixture for ${args.testCase.id}`),
|
|
44
|
+
});
|
|
45
|
+
return {
|
|
46
|
+
workspaceRoot: args.workspaceRoot,
|
|
47
|
+
setupResults,
|
|
48
|
+
fixture: {
|
|
49
|
+
type: 'inline',
|
|
50
|
+
baselineCommit,
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
async function prepareGitWorktreeFixture(args) {
|
|
55
|
+
const fixture = args.testCase.fixture;
|
|
56
|
+
if (fixture.type !== 'git-worktree') {
|
|
57
|
+
throw new Error(`Unsupported fixture type for git worktree setup: ${fixture.type}`);
|
|
58
|
+
}
|
|
59
|
+
const sourceRepo = resolve(args.repoRoot, fixture.repo);
|
|
60
|
+
const resolvedRef = await trackProgress(args.progress, {
|
|
61
|
+
phase: 'workspace.resolve-ref',
|
|
62
|
+
message: `resolve target ref ${fixture.ref}`,
|
|
63
|
+
run: () => resolveGitCommit(sourceRepo, fixture.ref),
|
|
64
|
+
});
|
|
65
|
+
await trackProgress(args.progress, {
|
|
66
|
+
phase: 'workspace.cleanup',
|
|
67
|
+
message: 'remove existing dogfood worktree if needed',
|
|
68
|
+
run: () => removeGitWorktree(sourceRepo, args.workspaceRoot),
|
|
69
|
+
});
|
|
70
|
+
await trackProgress(args.progress, {
|
|
71
|
+
phase: 'workspace.worktree',
|
|
72
|
+
message: `create pinned worktree at ${fixture.ref}`,
|
|
73
|
+
run: () => runRequiredGit(sourceRepo, ['worktree', 'add', '--detach', args.workspaceRoot, resolvedRef]),
|
|
74
|
+
});
|
|
75
|
+
const setupResults = await applyEvalSetup({
|
|
76
|
+
workspaceRoot: args.workspaceRoot,
|
|
77
|
+
repoRoot: args.repoRoot,
|
|
78
|
+
testCase: args.testCase,
|
|
79
|
+
progress: args.progress,
|
|
80
|
+
});
|
|
81
|
+
const baselineCommit = await hasGitChanges(args.workspaceRoot) ?
|
|
82
|
+
await trackProgress(args.progress, {
|
|
83
|
+
phase: 'workspace.baseline',
|
|
84
|
+
message: 'commit seeded eval baseline',
|
|
85
|
+
run: () => commitAll(args.workspaceRoot, args.testCase.setup.commitMessage ?? `Eval setup for ${args.testCase.id}`),
|
|
86
|
+
})
|
|
87
|
+
: resolvedRef;
|
|
88
|
+
return {
|
|
89
|
+
workspaceRoot: args.workspaceRoot,
|
|
90
|
+
setupResults,
|
|
91
|
+
fixture: {
|
|
92
|
+
type: 'git-worktree',
|
|
93
|
+
repo: sourceRepo,
|
|
94
|
+
ref: fixture.ref,
|
|
95
|
+
resolvedRef,
|
|
96
|
+
baselineCommit,
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
async function applyEvalSetup(args) {
|
|
101
|
+
for (const [sourceRelativePath, targetRelativePath] of Object.entries(args.testCase.setup.copyFiles ?? {})) {
|
|
102
|
+
const sourcePath = resolve(args.repoRoot, sourceRelativePath);
|
|
103
|
+
const targetPath = join(args.workspaceRoot, targetRelativePath);
|
|
104
|
+
mkdirSync(dirname(targetPath), { recursive: true });
|
|
105
|
+
cpSync(sourcePath, targetPath);
|
|
106
|
+
}
|
|
107
|
+
for (const [relativePath, content] of Object.entries(args.testCase.setup.files ?? {})) {
|
|
108
|
+
const path = join(args.workspaceRoot, relativePath);
|
|
109
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
110
|
+
writeFileSync(path, content, 'utf8');
|
|
111
|
+
}
|
|
112
|
+
const setupResults = [];
|
|
113
|
+
for (const command of args.testCase.setup.commands ?? []) {
|
|
114
|
+
const name = command.name ?? command.command;
|
|
115
|
+
const result = await trackProgress(args.progress, {
|
|
116
|
+
phase: 'workspace.setup-command',
|
|
117
|
+
message: `run setup command: ${name}`,
|
|
118
|
+
heartbeatMessage: `still running setup command: ${name}`,
|
|
119
|
+
run: () => runShellCommand({
|
|
120
|
+
command: command.command,
|
|
121
|
+
cwd: args.workspaceRoot,
|
|
122
|
+
timeoutMs: command.timeoutMs,
|
|
123
|
+
}),
|
|
124
|
+
});
|
|
125
|
+
setupResults.push({
|
|
126
|
+
name,
|
|
127
|
+
command: command.command,
|
|
128
|
+
exitCode: result.exitCode,
|
|
129
|
+
stdout: result.stdout,
|
|
130
|
+
stderr: result.stderr,
|
|
131
|
+
durationMs: result.durationMs,
|
|
132
|
+
passed: result.exitCode === 0 && !result.timedOut,
|
|
133
|
+
timedOut: result.timedOut,
|
|
134
|
+
});
|
|
135
|
+
if (result.exitCode !== 0 || result.timedOut) {
|
|
136
|
+
throw new Error(`Eval setup command failed for ${args.testCase.id}: ${command.command}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return setupResults;
|
|
140
|
+
}
|
|
141
|
+
async function copyAuthState(args) {
|
|
142
|
+
const memorySource = join(args.repoRoot, '.heddle', 'auth.json');
|
|
143
|
+
const memoryTarget = join(args.workspaceRoot, '.heddle', 'auth.json');
|
|
144
|
+
if (existsSync(memorySource) && !existsSync(memoryTarget)) {
|
|
145
|
+
await excludeAuthStateFromGit(args.workspaceRoot);
|
|
146
|
+
mkdirSync(dirname(memoryTarget), { recursive: true });
|
|
147
|
+
cpSync(memorySource, memoryTarget);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async function excludeAuthStateFromGit(workspaceRoot) {
|
|
151
|
+
const result = await runCommand({
|
|
152
|
+
command: 'git',
|
|
153
|
+
args: ['rev-parse', '--git-path', 'info/exclude'],
|
|
154
|
+
cwd: workspaceRoot,
|
|
155
|
+
timeoutMs: 10_000,
|
|
156
|
+
});
|
|
157
|
+
if (result.exitCode !== 0 || result.timedOut) {
|
|
158
|
+
throw new Error(`git rev-parse --git-path info/exclude failed: ${result.stderr || result.stdout}`);
|
|
159
|
+
}
|
|
160
|
+
const excludePath = resolve(workspaceRoot, result.stdout.trim());
|
|
161
|
+
if (!excludePath) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
mkdirSync(dirname(excludePath), { recursive: true });
|
|
165
|
+
appendFileSync(excludePath, '\n/.heddle/auth.json\n', 'utf8');
|
|
166
|
+
}
|
|
167
|
+
async function trackProgress(progress, args) {
|
|
168
|
+
return progress ? await progress.track(args) : await args.run();
|
|
169
|
+
}
|
|
170
|
+
async function initializeGitBaseline(workspaceRoot, message) {
|
|
171
|
+
await runRequiredGit(workspaceRoot, ['init']);
|
|
172
|
+
return await commitAll(workspaceRoot, message, true);
|
|
173
|
+
}
|
|
174
|
+
async function commitAll(workspaceRoot, message, allowEmpty = false) {
|
|
175
|
+
await runRequiredGit(workspaceRoot, ['add', '.']);
|
|
176
|
+
await runRequiredGit(workspaceRoot, [
|
|
177
|
+
'-c',
|
|
178
|
+
'user.name=Heddle Eval',
|
|
179
|
+
'-c',
|
|
180
|
+
'user.email=heddle-eval@example.com',
|
|
181
|
+
'-c',
|
|
182
|
+
'commit.gpgsign=false',
|
|
183
|
+
'commit',
|
|
184
|
+
...(allowEmpty ? ['--allow-empty'] : []),
|
|
185
|
+
'-m',
|
|
186
|
+
message,
|
|
187
|
+
]);
|
|
188
|
+
return await resolveGitCommit(workspaceRoot, 'HEAD');
|
|
189
|
+
}
|
|
190
|
+
async function resolveGitCommit(cwd, ref) {
|
|
191
|
+
const result = await runCommand({
|
|
192
|
+
command: 'git',
|
|
193
|
+
args: ['rev-parse', '--verify', `${ref}^{commit}`],
|
|
194
|
+
cwd,
|
|
195
|
+
timeoutMs: 20_000,
|
|
196
|
+
});
|
|
197
|
+
if (result.exitCode !== 0 || result.timedOut) {
|
|
198
|
+
throw new Error(`git rev-parse failed for ${ref}: ${result.stderr || result.stdout}`);
|
|
199
|
+
}
|
|
200
|
+
return result.stdout.trim();
|
|
201
|
+
}
|
|
202
|
+
async function hasGitChanges(workspaceRoot) {
|
|
203
|
+
const result = await runCommand({
|
|
204
|
+
command: 'git',
|
|
205
|
+
args: ['status', '--porcelain'],
|
|
206
|
+
cwd: workspaceRoot,
|
|
207
|
+
timeoutMs: 20_000,
|
|
208
|
+
});
|
|
209
|
+
if (result.exitCode !== 0 || result.timedOut) {
|
|
210
|
+
throw new Error(`git status --porcelain failed: ${result.stderr || result.stdout}`);
|
|
211
|
+
}
|
|
212
|
+
return result.stdout.trim().length > 0;
|
|
213
|
+
}
|
|
214
|
+
async function removeGitWorktree(repoRoot, workspaceRoot) {
|
|
215
|
+
if (!existsSync(workspaceRoot)) {
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
const result = await runCommand({
|
|
219
|
+
command: 'git',
|
|
220
|
+
args: ['worktree', 'remove', '--force', workspaceRoot],
|
|
221
|
+
cwd: repoRoot,
|
|
222
|
+
timeoutMs: 20_000,
|
|
223
|
+
});
|
|
224
|
+
if (result.exitCode !== 0 || result.timedOut) {
|
|
225
|
+
rmSync(workspaceRoot, { recursive: true, force: true });
|
|
226
|
+
await runRequiredGit(repoRoot, ['worktree', 'prune']);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
async function runRequiredGit(cwd, args) {
|
|
230
|
+
const result = await runCommand({ command: 'git', args, cwd, timeoutMs: 20_000 });
|
|
231
|
+
if (result.exitCode !== 0 || result.timedOut) {
|
|
232
|
+
throw new Error(`git ${args.join(' ')} failed: ${result.stderr || result.stdout}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=workspace-fixture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-fixture.js","sourceRoot":"","sources":["../../../../src/core/eval/workspace-fixture.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,16 @@ import type { ProviderCredentialSource } from '../runtime/api-keys.js';
|
|
|
2
2
|
import type { LlmProvider } from './types.js';
|
|
3
3
|
export type SystemModelPurpose = 'chat-compaction' | 'session-title';
|
|
4
4
|
export type ModelCredentialMode = 'api-key' | 'oauth' | 'missing';
|
|
5
|
+
export type CredentialAwareModelOption = {
|
|
6
|
+
id: string;
|
|
7
|
+
label?: string;
|
|
8
|
+
disabled: boolean;
|
|
9
|
+
disabledReason?: string;
|
|
10
|
+
};
|
|
5
11
|
export declare const OPENAI_API_KEY_COMPACTION_MODEL = "gpt-5.1-codex-mini";
|
|
6
12
|
export declare const OPENAI_OAUTH_SYSTEM_MODEL = "gpt-5.4";
|
|
7
13
|
export declare const ANTHROPIC_COMPACTION_MODEL = "claude-haiku-4-5";
|
|
14
|
+
export declare const OPENAI_OAUTH_MODE_DESCRIPTION = "OAuth mode supports a smaller OpenAI allowlist.";
|
|
8
15
|
export declare function credentialModeFromSource(source: ProviderCredentialSource | undefined): ModelCredentialMode;
|
|
9
16
|
export declare function resolveSystemSelectedModel(args: {
|
|
10
17
|
purpose: SystemModelPurpose;
|
|
@@ -30,5 +37,24 @@ export declare function assertModelCredentialCompatibility(args: {
|
|
|
30
37
|
usageLabel?: string;
|
|
31
38
|
}): void;
|
|
32
39
|
export declare function resolveOpenAiOAuthImageCandidateModels(activeModel: string): string[];
|
|
40
|
+
export declare function buildCredentialAwareModelOption(args: {
|
|
41
|
+
model: string;
|
|
42
|
+
provider: LlmProvider;
|
|
43
|
+
credentialMode?: ModelCredentialMode;
|
|
44
|
+
label?: string;
|
|
45
|
+
}): CredentialAwareModelOption;
|
|
46
|
+
export declare function summarizeCredentialCompatibilityError(args: {
|
|
47
|
+
model: string;
|
|
48
|
+
provider: LlmProvider;
|
|
49
|
+
credentialMode?: ModelCredentialMode;
|
|
50
|
+
}): string | undefined;
|
|
51
|
+
export declare function resolveCompatibleActiveModel(args: {
|
|
52
|
+
activeModel: string;
|
|
53
|
+
provider: LlmProvider;
|
|
54
|
+
credentialMode?: ModelCredentialMode;
|
|
55
|
+
}): {
|
|
56
|
+
model: string;
|
|
57
|
+
warning?: string;
|
|
58
|
+
};
|
|
33
59
|
export declare function formatOpenAiAccountSignInModels(): string;
|
|
34
60
|
//# sourceMappingURL=model-policy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-policy.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/model-policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,eAAe,CAAC;AACrE,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAElE,eAAO,MAAM,+BAA+B,uBAAuB,CAAC;AACpE,eAAO,MAAM,yBAAyB,YAAY,CAAC;AACnD,eAAO,MAAM,0BAA0B,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"model-policy.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/model-policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,eAAe,CAAC;AACrE,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAElE,MAAM,MAAM,0BAA0B,GAAG;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,+BAA+B,uBAAuB,CAAC;AACpE,eAAO,MAAM,yBAAyB,YAAY,CAAC;AACnD,eAAO,MAAM,0BAA0B,qBAAqB,CAAC;AAE7D,eAAO,MAAM,6BAA6B,oDAAoD,CAAC;AAI/F,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,wBAAwB,GAAG,SAAS,GAAG,mBAAmB,CAU1G;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,OAAO,EAAE,kBAAkB,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,mBAAmB,CAAC;CACtC,GAAG,MAAM,CAcT;AAED,wBAAgB,oCAAoC,CAAC,IAAI,EAAE;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,WAAW,CAAC;IACtB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAS9C;AAED,wBAAgB,kCAAkC,CAAC,IAAI,EAAE;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,WAAW,CAAC;IACtB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,QAKA;AAED,wBAAgB,sCAAsC,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAEpF;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,WAAW,CAAC;IACtB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,0BAA0B,CAa7B;AAED,wBAAgB,qCAAqC,CAAC,IAAI,EAAE;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,WAAW,CAAC;IACtB,cAAc,CAAC,EAAE,mBAAmB,CAAC;CACtC,GAAG,MAAM,GAAG,SAAS,CAMrB;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,WAAW,CAAC;IACtB,cAAc,CAAC,EAAE,mBAAmB,CAAC;CACtC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CA4BtC;AAED,wBAAgB,+BAA+B,IAAI,MAAM,CAExD"}
|
|
@@ -3,6 +3,8 @@ import { isOpenAiAccountSignInModel, OPENAI_ACCOUNT_SIGN_IN_MODELS } from './ope
|
|
|
3
3
|
export const OPENAI_API_KEY_COMPACTION_MODEL = 'gpt-5.1-codex-mini';
|
|
4
4
|
export const OPENAI_OAUTH_SYSTEM_MODEL = 'gpt-5.4';
|
|
5
5
|
export const ANTHROPIC_COMPACTION_MODEL = 'claude-haiku-4-5';
|
|
6
|
+
const OPENAI_OAUTH_DISABLED_REASON = 'Not supported';
|
|
7
|
+
export const OPENAI_OAUTH_MODE_DESCRIPTION = 'OAuth mode supports a smaller OpenAI allowlist.';
|
|
6
8
|
const OPENAI_OAUTH_IMAGE_MODEL_PREFERENCES = ['gpt-5.4', 'gpt-5.4-mini'];
|
|
7
9
|
export function credentialModeFromSource(source) {
|
|
8
10
|
if (source?.type === 'oauth') {
|
|
@@ -43,6 +45,51 @@ export function assertModelCredentialCompatibility(args) {
|
|
|
43
45
|
export function resolveOpenAiOAuthImageCandidateModels(activeModel) {
|
|
44
46
|
return uniqueModels([activeModel, ...OPENAI_OAUTH_IMAGE_MODEL_PREFERENCES, ...OPENAI_ACCOUNT_SIGN_IN_MODELS]);
|
|
45
47
|
}
|
|
48
|
+
export function buildCredentialAwareModelOption(args) {
|
|
49
|
+
const compatibility = validateModelCredentialCompatibility({
|
|
50
|
+
model: args.model,
|
|
51
|
+
provider: args.provider,
|
|
52
|
+
credentialMode: args.credentialMode,
|
|
53
|
+
});
|
|
54
|
+
return {
|
|
55
|
+
id: args.model,
|
|
56
|
+
label: args.label,
|
|
57
|
+
disabled: !compatibility.ok,
|
|
58
|
+
disabledReason: compatibility.ok ? undefined : summarizeCredentialCompatibilityError(args),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export function summarizeCredentialCompatibilityError(args) {
|
|
62
|
+
if (args.provider === 'openai' && args.credentialMode === 'oauth' && !isOpenAiAccountSignInModel(args.model)) {
|
|
63
|
+
return OPENAI_OAUTH_DISABLED_REASON;
|
|
64
|
+
}
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
export function resolveCompatibleActiveModel(args) {
|
|
68
|
+
const compatibility = validateModelCredentialCompatibility({
|
|
69
|
+
model: args.activeModel,
|
|
70
|
+
provider: args.provider,
|
|
71
|
+
credentialMode: args.credentialMode,
|
|
72
|
+
});
|
|
73
|
+
if (compatibility.ok) {
|
|
74
|
+
return { model: args.activeModel };
|
|
75
|
+
}
|
|
76
|
+
const fallback = resolveSystemSelectedModel({
|
|
77
|
+
purpose: 'session-title',
|
|
78
|
+
provider: args.provider,
|
|
79
|
+
activeModel: args.activeModel,
|
|
80
|
+
credentialMode: args.credentialMode,
|
|
81
|
+
});
|
|
82
|
+
if (fallback === args.activeModel) {
|
|
83
|
+
return {
|
|
84
|
+
model: args.activeModel,
|
|
85
|
+
warning: `Model ${args.activeModel} is not supported with OpenAI account sign-in. Pick a supported OAuth model with /model set or use API-key mode.`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
model: fallback,
|
|
90
|
+
warning: `Model ${args.activeModel} is not supported with OpenAI account sign-in. Switched to ${fallback} for this session.`,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
46
93
|
export function formatOpenAiAccountSignInModels() {
|
|
47
94
|
return OPENAI_ACCOUNT_SIGN_IN_MODELS.join(', ');
|
|
48
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-policy.js","sourceRoot":"","sources":["../../../../src/core/llm/model-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAE7E,OAAO,EAAE,0BAA0B,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"model-policy.js","sourceRoot":"","sources":["../../../../src/core/llm/model-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Build the system prompt for the agent.
|
|
3
|
-
*
|
|
3
|
+
* Keep it high-level and concise unless stronger steering is clearly needed.
|
|
4
4
|
*/
|
|
5
5
|
export declare function buildSystemPrompt(toolNames: string[], projectContext?: string): string;
|
|
6
6
|
//# sourceMappingURL=system-prompt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../../../src/core/prompts/system-prompt.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../../../src/core/prompts/system-prompt.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAsCtF"}
|