oh-my-knowledge 0.0.1 → 0.18.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/LICENSE +21 -0
- package/README.md +537 -332
- package/dist/src/analysis/coverage-analyzer.d.ts +57 -0
- package/dist/src/analysis/coverage-analyzer.d.ts.map +1 -0
- package/dist/src/analysis/coverage-analyzer.js +262 -0
- package/dist/src/analysis/coverage-analyzer.js.map +1 -0
- package/dist/src/analysis/gap-analyzer.d.ts +114 -0
- package/dist/src/analysis/gap-analyzer.d.ts.map +1 -0
- package/dist/src/analysis/gap-analyzer.js +439 -0
- package/dist/src/analysis/gap-analyzer.js.map +1 -0
- package/dist/src/analysis/hedging-classifier.d.ts +34 -0
- package/dist/src/analysis/hedging-classifier.d.ts.map +1 -0
- package/dist/src/analysis/hedging-classifier.js +144 -0
- package/dist/src/analysis/hedging-classifier.js.map +1 -0
- package/dist/src/analysis/report-diagnostics.d.ts +9 -0
- package/dist/src/analysis/report-diagnostics.d.ts.map +1 -0
- package/dist/src/analysis/report-diagnostics.js +631 -0
- package/dist/src/analysis/report-diagnostics.js.map +1 -0
- package/dist/src/authoring/evolver.d.ts +64 -0
- package/dist/src/authoring/evolver.d.ts.map +1 -0
- package/dist/src/authoring/evolver.js +275 -0
- package/dist/src/authoring/evolver.js.map +1 -0
- package/dist/src/authoring/generator.d.ts +13 -0
- package/dist/src/authoring/generator.d.ts.map +1 -0
- package/dist/src/authoring/generator.js +60 -0
- package/dist/src/authoring/generator.js.map +1 -0
- package/dist/src/cli.d.ts +3 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +1004 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/eval-core/cache.d.ts +11 -0
- package/dist/src/eval-core/cache.d.ts.map +1 -0
- package/dist/src/eval-core/cache.js +53 -0
- package/dist/src/eval-core/cache.js.map +1 -0
- package/dist/src/eval-core/ci-gates.d.ts +17 -0
- package/dist/src/eval-core/ci-gates.d.ts.map +1 -0
- package/dist/src/eval-core/ci-gates.js +42 -0
- package/dist/src/eval-core/ci-gates.js.map +1 -0
- package/dist/src/eval-core/dependency-checker.d.ts +37 -0
- package/dist/src/eval-core/dependency-checker.d.ts.map +1 -0
- package/dist/src/eval-core/dependency-checker.js +280 -0
- package/dist/src/eval-core/dependency-checker.js.map +1 -0
- package/dist/src/eval-core/evaluation-execution.d.ts +26 -0
- package/dist/src/eval-core/evaluation-execution.d.ts.map +1 -0
- package/dist/src/eval-core/evaluation-execution.js +196 -0
- package/dist/src/eval-core/evaluation-execution.js.map +1 -0
- package/dist/src/eval-core/evaluation-job.d.ts +48 -0
- package/dist/src/eval-core/evaluation-job.d.ts.map +1 -0
- package/dist/src/eval-core/evaluation-job.js +112 -0
- package/dist/src/eval-core/evaluation-job.js.map +1 -0
- package/dist/src/eval-core/evaluation-reporting.d.ts +28 -0
- package/dist/src/eval-core/evaluation-reporting.d.ts.map +1 -0
- package/dist/src/eval-core/evaluation-reporting.js +123 -0
- package/dist/src/eval-core/evaluation-reporting.js.map +1 -0
- package/dist/src/eval-core/execution-strategy.d.ts +11 -0
- package/dist/src/eval-core/execution-strategy.d.ts.map +1 -0
- package/dist/src/eval-core/execution-strategy.js +121 -0
- package/dist/src/eval-core/execution-strategy.js.map +1 -0
- package/dist/src/eval-core/fact-checker.d.ts +25 -0
- package/dist/src/eval-core/fact-checker.d.ts.map +1 -0
- package/dist/src/eval-core/fact-checker.js +66 -0
- package/dist/src/eval-core/fact-checker.js.map +1 -0
- package/dist/src/eval-core/schema.d.ts +30 -0
- package/dist/src/eval-core/schema.d.ts.map +1 -0
- package/dist/src/eval-core/schema.js +195 -0
- package/dist/src/eval-core/schema.js.map +1 -0
- package/dist/src/eval-core/statistics.d.ts +86 -0
- package/dist/src/eval-core/statistics.d.ts.map +1 -0
- package/dist/src/eval-core/statistics.js +210 -0
- package/dist/src/eval-core/statistics.js.map +1 -0
- package/dist/src/eval-core/task-planner.d.ts +4 -0
- package/dist/src/eval-core/task-planner.d.ts.map +1 -0
- package/dist/src/eval-core/task-planner.js +33 -0
- package/dist/src/eval-core/task-planner.js.map +1 -0
- package/dist/src/eval-workflows/each-evaluation-workflow.d.ts +133 -0
- package/dist/src/eval-workflows/each-evaluation-workflow.d.ts.map +1 -0
- package/dist/src/eval-workflows/each-evaluation-workflow.js +169 -0
- package/dist/src/eval-workflows/each-evaluation-workflow.js.map +1 -0
- package/dist/src/eval-workflows/evaluation-pipeline.d.ts +38 -0
- package/dist/src/eval-workflows/evaluation-pipeline.d.ts.map +1 -0
- package/dist/src/eval-workflows/evaluation-pipeline.js +214 -0
- package/dist/src/eval-workflows/evaluation-pipeline.js.map +1 -0
- package/dist/src/eval-workflows/evaluation-preparation.d.ts +64 -0
- package/dist/src/eval-workflows/evaluation-preparation.d.ts.map +1 -0
- package/dist/src/eval-workflows/evaluation-preparation.js +90 -0
- package/dist/src/eval-workflows/evaluation-preparation.js.map +1 -0
- package/dist/src/eval-workflows/run-evaluation.d.ts +105 -0
- package/dist/src/eval-workflows/run-evaluation.d.ts.map +1 -0
- package/dist/src/eval-workflows/run-evaluation.js +264 -0
- package/dist/src/eval-workflows/run-evaluation.js.map +1 -0
- package/dist/src/executors/anthropic-api.d.ts +3 -0
- package/dist/src/executors/anthropic-api.d.ts.map +1 -0
- package/dist/src/executors/anthropic-api.js +43 -0
- package/dist/src/executors/anthropic-api.js.map +1 -0
- package/dist/src/executors/claude-cli.d.ts +3 -0
- package/dist/src/executors/claude-cli.d.ts.map +1 -0
- package/dist/src/executors/claude-cli.js +103 -0
- package/dist/src/executors/claude-cli.js.map +1 -0
- package/dist/src/executors/claude-sdk-trace.d.ts +10 -0
- package/dist/src/executors/claude-sdk-trace.d.ts.map +1 -0
- package/dist/src/executors/claude-sdk-trace.js +100 -0
- package/dist/src/executors/claude-sdk-trace.js.map +1 -0
- package/dist/src/executors/claude-sdk.d.ts +3 -0
- package/dist/src/executors/claude-sdk.d.ts.map +1 -0
- package/dist/src/executors/claude-sdk.js +160 -0
- package/dist/src/executors/claude-sdk.js.map +1 -0
- package/dist/src/executors/gemini.d.ts +3 -0
- package/dist/src/executors/gemini.d.ts.map +1 -0
- package/dist/src/executors/gemini.js +78 -0
- package/dist/src/executors/gemini.js.map +1 -0
- package/dist/src/executors/index.d.ts +7 -0
- package/dist/src/executors/index.d.ts.map +1 -0
- package/dist/src/executors/index.js +22 -0
- package/dist/src/executors/index.js.map +1 -0
- package/dist/src/executors/openai-api.d.ts +3 -0
- package/dist/src/executors/openai-api.d.ts.map +1 -0
- package/dist/src/executors/openai-api.js +40 -0
- package/dist/src/executors/openai-api.js.map +1 -0
- package/dist/src/executors/openai-cli.d.ts +3 -0
- package/dist/src/executors/openai-cli.d.ts.map +1 -0
- package/dist/src/executors/openai-cli.js +60 -0
- package/dist/src/executors/openai-cli.js.map +1 -0
- package/dist/src/executors/script.d.ts +3 -0
- package/dist/src/executors/script.d.ts.map +1 -0
- package/dist/src/executors/script.js +63 -0
- package/dist/src/executors/script.js.map +1 -0
- package/dist/src/executors/shared.d.ts +117 -0
- package/dist/src/executors/shared.d.ts.map +1 -0
- package/dist/src/executors/shared.js +49 -0
- package/dist/src/executors/shared.js.map +1 -0
- package/dist/src/grading/assertions.d.ts +18 -0
- package/dist/src/grading/assertions.d.ts.map +1 -0
- package/dist/src/grading/assertions.js +239 -0
- package/dist/src/grading/assertions.js.map +1 -0
- package/dist/src/grading/index.d.ts +26 -0
- package/dist/src/grading/index.d.ts.map +1 -0
- package/dist/src/grading/index.js +98 -0
- package/dist/src/grading/index.js.map +1 -0
- package/dist/src/grading/judge.d.ts +13 -0
- package/dist/src/grading/judge.d.ts.map +1 -0
- package/dist/src/grading/judge.js +98 -0
- package/dist/src/grading/judge.js.map +1 -0
- package/dist/src/grading/layered-scores.d.ts +13 -0
- package/dist/src/grading/layered-scores.d.ts.map +1 -0
- package/dist/src/grading/layered-scores.js +62 -0
- package/dist/src/grading/layered-scores.js.map +1 -0
- package/dist/src/inputs/eval-config.d.ts +13 -0
- package/dist/src/inputs/eval-config.d.ts.map +1 -0
- package/dist/src/inputs/eval-config.js +136 -0
- package/dist/src/inputs/eval-config.js.map +1 -0
- package/dist/src/inputs/load-samples.d.ts +16 -0
- package/dist/src/inputs/load-samples.d.ts.map +1 -0
- package/dist/src/inputs/load-samples.js +51 -0
- package/dist/src/inputs/load-samples.js.map +1 -0
- package/dist/src/inputs/mcp-resolver.d.ts +50 -0
- package/dist/src/inputs/mcp-resolver.d.ts.map +1 -0
- package/dist/src/inputs/mcp-resolver.js +307 -0
- package/dist/src/inputs/mcp-resolver.js.map +1 -0
- package/dist/src/inputs/skill-loader.d.ts +18 -0
- package/dist/src/inputs/skill-loader.d.ts.map +1 -0
- package/dist/src/inputs/skill-loader.js +222 -0
- package/dist/src/inputs/skill-loader.js.map +1 -0
- package/dist/src/inputs/url-fetcher.d.ts +19 -0
- package/dist/src/inputs/url-fetcher.d.ts.map +1 -0
- package/dist/src/inputs/url-fetcher.js +241 -0
- package/dist/src/inputs/url-fetcher.js.map +1 -0
- package/dist/src/observability/production-analyzer.d.ts +61 -0
- package/dist/src/observability/production-analyzer.d.ts.map +1 -0
- package/dist/src/observability/production-analyzer.js +183 -0
- package/dist/src/observability/production-analyzer.js.map +1 -0
- package/dist/src/observability/trace-adapter.d.ts +75 -0
- package/dist/src/observability/trace-adapter.d.ts.map +1 -0
- package/dist/src/observability/trace-adapter.js +341 -0
- package/dist/src/observability/trace-adapter.js.map +1 -0
- package/dist/src/renderer/html-renderer.d.ts +9 -0
- package/dist/src/renderer/html-renderer.d.ts.map +1 -0
- package/dist/src/renderer/html-renderer.js +338 -0
- package/dist/src/renderer/html-renderer.js.map +1 -0
- package/dist/src/renderer/layout.d.ts +13 -0
- package/dist/src/renderer/layout.d.ts.map +1 -0
- package/dist/src/renderer/layout.js +476 -0
- package/dist/src/renderer/layout.js.map +1 -0
- package/dist/src/renderer/skill-health-renderer.d.ts +20 -0
- package/dist/src/renderer/skill-health-renderer.d.ts.map +1 -0
- package/dist/src/renderer/skill-health-renderer.js +218 -0
- package/dist/src/renderer/skill-health-renderer.js.map +1 -0
- package/dist/src/renderer/summary.d.ts +21 -0
- package/dist/src/renderer/summary.d.ts.map +1 -0
- package/dist/src/renderer/summary.js +1072 -0
- package/dist/src/renderer/summary.js.map +1 -0
- package/dist/src/renderer/table.d.ts +3 -0
- package/dist/src/renderer/table.d.ts.map +1 -0
- package/dist/src/renderer/table.js +134 -0
- package/dist/src/renderer/table.js.map +1 -0
- package/dist/src/renderer/trends.d.ts +6 -0
- package/dist/src/renderer/trends.d.ts.map +1 -0
- package/dist/src/renderer/trends.js +127 -0
- package/dist/src/renderer/trends.js.map +1 -0
- package/dist/src/server/job-store.d.ts +4 -0
- package/dist/src/server/job-store.d.ts.map +1 -0
- package/dist/src/server/job-store.js +68 -0
- package/dist/src/server/job-store.js.map +1 -0
- package/dist/src/server/report-server.d.ts +16 -0
- package/dist/src/server/report-server.d.ts.map +1 -0
- package/dist/src/server/report-server.js +196 -0
- package/dist/src/server/report-server.js.map +1 -0
- package/dist/src/server/report-store.d.ts +44 -0
- package/dist/src/server/report-store.d.ts.map +1 -0
- package/dist/src/server/report-store.js +190 -0
- package/dist/src/server/report-store.js.map +1 -0
- package/dist/src/types.d.ts +553 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +44 -3
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { extractAgentTrace, isClaudeSdkResultMessage } from './claude-sdk-trace.js';
|
|
5
|
+
import { asErrorLike, buildExecEnv, DEFAULT_TIMEOUT_MS, errorMessage } from './shared.js';
|
|
6
|
+
let sdkQuery = null;
|
|
7
|
+
async function getSdkQuery() {
|
|
8
|
+
if (!sdkQuery) {
|
|
9
|
+
const sdk = await import('@anthropic-ai/claude-agent-sdk');
|
|
10
|
+
sdkQuery = sdk.query;
|
|
11
|
+
}
|
|
12
|
+
return sdkQuery;
|
|
13
|
+
}
|
|
14
|
+
export async function claudeSdkExecutor({ model, system, prompt, cwd, skillDir, timeoutMs = DEFAULT_TIMEOUT_MS, verbose = false }) {
|
|
15
|
+
const start = Date.now();
|
|
16
|
+
const abortController = new AbortController();
|
|
17
|
+
const timer = setTimeout(() => abortController.abort(), timeoutMs);
|
|
18
|
+
const env = buildExecEnv(skillDir);
|
|
19
|
+
const messages = [];
|
|
20
|
+
const messageTimestamps = [];
|
|
21
|
+
try {
|
|
22
|
+
const query = await getSdkQuery();
|
|
23
|
+
const stream = query({
|
|
24
|
+
prompt,
|
|
25
|
+
options: {
|
|
26
|
+
model,
|
|
27
|
+
systemPrompt: system || undefined,
|
|
28
|
+
cwd: cwd || process.cwd(),
|
|
29
|
+
permissionMode: 'bypassPermissions',
|
|
30
|
+
allowDangerouslySkipPermissions: true,
|
|
31
|
+
abortController,
|
|
32
|
+
env,
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
const resultMsgs = [];
|
|
36
|
+
for await (const msg of stream) {
|
|
37
|
+
messages.push(msg);
|
|
38
|
+
messageTimestamps.push(Date.now());
|
|
39
|
+
if (isClaudeSdkResultMessage(msg))
|
|
40
|
+
resultMsgs.push(msg);
|
|
41
|
+
}
|
|
42
|
+
clearTimeout(timer);
|
|
43
|
+
if (verbose) {
|
|
44
|
+
try {
|
|
45
|
+
const debugDir = join(tmpdir(), 'omk-debug');
|
|
46
|
+
try {
|
|
47
|
+
mkdirSync(debugDir, { recursive: true });
|
|
48
|
+
}
|
|
49
|
+
catch { }
|
|
50
|
+
const debugFile = join(debugDir, `claude-sdk-${Date.now()}-${Math.random().toString(36).slice(2, 8)}.json`);
|
|
51
|
+
writeFileSync(debugFile, JSON.stringify(messages, null, 2));
|
|
52
|
+
process.stderr.write(`[omk] debug output → ${debugFile} (${messages.length} messages)\n`);
|
|
53
|
+
}
|
|
54
|
+
catch { }
|
|
55
|
+
}
|
|
56
|
+
if (resultMsgs.length === 0) {
|
|
57
|
+
const durationMs = Date.now() - start;
|
|
58
|
+
process.stderr.write(`[omk] claude-sdk executor: no result message received (${messages.length} messages)\n`);
|
|
59
|
+
return {
|
|
60
|
+
ok: false, error: 'no result message received',
|
|
61
|
+
durationMs, durationApiMs: 0,
|
|
62
|
+
inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheCreationTokens: 0,
|
|
63
|
+
costUSD: 0, output: null, stopReason: 'error', numTurns: 0,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
let output = '';
|
|
67
|
+
let totalInputTokens = 0;
|
|
68
|
+
let totalOutputTokens = 0;
|
|
69
|
+
let totalCacheReadTokens = 0;
|
|
70
|
+
let totalCacheCreationTokens = 0;
|
|
71
|
+
let totalCostUSD = 0;
|
|
72
|
+
let totalDurationApiMs = 0;
|
|
73
|
+
let totalNumTurns = 0;
|
|
74
|
+
let lastSubtype = 'success';
|
|
75
|
+
for (const r of resultMsgs) {
|
|
76
|
+
output += r.result || '';
|
|
77
|
+
// Prefer modelUsage (includes subAgent tokens) over usage (main process only)
|
|
78
|
+
const modelUsage = r.modelUsage;
|
|
79
|
+
if (modelUsage) {
|
|
80
|
+
for (const mu of Object.values(modelUsage)) {
|
|
81
|
+
totalInputTokens += mu.inputTokens || 0;
|
|
82
|
+
totalOutputTokens += mu.outputTokens || 0;
|
|
83
|
+
totalCacheReadTokens += mu.cacheReadInputTokens || 0;
|
|
84
|
+
totalCacheCreationTokens += mu.cacheCreationInputTokens || 0;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
totalInputTokens += r.usage?.input_tokens || 0;
|
|
89
|
+
totalOutputTokens += r.usage?.output_tokens || 0;
|
|
90
|
+
totalCacheReadTokens += r.usage?.cache_read_input_tokens || 0;
|
|
91
|
+
totalCacheCreationTokens += r.usage?.cache_creation_input_tokens || 0;
|
|
92
|
+
}
|
|
93
|
+
totalCostUSD += r.total_cost_usd || 0;
|
|
94
|
+
totalDurationApiMs += r.duration_api_ms || 0;
|
|
95
|
+
totalNumTurns += r.num_turns || 0;
|
|
96
|
+
lastSubtype = r.subtype || lastSubtype;
|
|
97
|
+
}
|
|
98
|
+
const durationMs = resultMsgs[resultMsgs.length - 1].duration_ms || (Date.now() - start);
|
|
99
|
+
const trace = extractAgentTrace(messages, messageTimestamps);
|
|
100
|
+
if (lastSubtype !== 'success') {
|
|
101
|
+
const lastErr = resultMsgs[resultMsgs.length - 1];
|
|
102
|
+
const errMsg = lastErr.errors?.join('; ') || lastErr.subtype;
|
|
103
|
+
process.stderr.write(`[omk] claude-sdk executor: ${lastErr.subtype}: ${errMsg}\n`);
|
|
104
|
+
return {
|
|
105
|
+
ok: false, error: errMsg,
|
|
106
|
+
durationMs,
|
|
107
|
+
durationApiMs: totalDurationApiMs,
|
|
108
|
+
inputTokens: totalInputTokens,
|
|
109
|
+
outputTokens: totalOutputTokens,
|
|
110
|
+
cacheReadTokens: totalCacheReadTokens,
|
|
111
|
+
cacheCreationTokens: totalCacheCreationTokens,
|
|
112
|
+
costUSD: totalCostUSD,
|
|
113
|
+
output: null, stopReason: 'error', numTurns: totalNumTurns,
|
|
114
|
+
fullNumTurns: trace.fullNumTurns,
|
|
115
|
+
numSubAgents: trace.numSubAgents,
|
|
116
|
+
...(trace.turns.length > 0 && { turns: trace.turns }),
|
|
117
|
+
...(trace.toolCalls.length > 0 && { toolCalls: trace.toolCalls }),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
ok: true,
|
|
122
|
+
durationMs,
|
|
123
|
+
durationApiMs: totalDurationApiMs,
|
|
124
|
+
inputTokens: totalInputTokens,
|
|
125
|
+
outputTokens: totalOutputTokens,
|
|
126
|
+
cacheReadTokens: totalCacheReadTokens,
|
|
127
|
+
cacheCreationTokens: totalCacheCreationTokens,
|
|
128
|
+
costUSD: totalCostUSD,
|
|
129
|
+
output,
|
|
130
|
+
stopReason: 'end',
|
|
131
|
+
numTurns: totalNumTurns,
|
|
132
|
+
fullNumTurns: trace.fullNumTurns,
|
|
133
|
+
numSubAgents: trace.numSubAgents,
|
|
134
|
+
...(trace.turns.length > 0 && { turns: trace.turns }),
|
|
135
|
+
...(trace.toolCalls.length > 0 && { toolCalls: trace.toolCalls }),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
clearTimeout(timer);
|
|
140
|
+
const durationMs = Date.now() - start;
|
|
141
|
+
const details = asErrorLike(err);
|
|
142
|
+
const isAbort = details.name === 'AbortError';
|
|
143
|
+
if (isAbort) {
|
|
144
|
+
process.stderr.write(`[omk] claude-sdk executor: timed out after ${timeoutMs / 1000}s\n`);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
process.stderr.write(`[omk] claude-sdk executor error: ${errorMessage(err)}\n`);
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
ok: false,
|
|
151
|
+
error: isAbort ? `execution timed out after ${timeoutMs / 1000}s` : errorMessage(err),
|
|
152
|
+
durationMs, durationApiMs: 0,
|
|
153
|
+
inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheCreationTokens: 0,
|
|
154
|
+
costUSD: 0, output: null,
|
|
155
|
+
stopReason: isAbort ? 'timeout' : 'error',
|
|
156
|
+
numTurns: 0,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=claude-sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-sdk.js","sourceRoot":"","sources":["../../../src/executors/claude-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/executors/gemini.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG7D,wBAAsB,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAA8B,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAuElI"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { DEFAULT_TIMEOUT_MS, errorMessage, parseJson } from './shared.js';
|
|
3
|
+
export async function geminiExecutor({ model, system, prompt, timeoutMs = DEFAULT_TIMEOUT_MS }) {
|
|
4
|
+
const fullPrompt = system ? `${system}\n\n${prompt}` : prompt;
|
|
5
|
+
const start = Date.now();
|
|
6
|
+
try {
|
|
7
|
+
const output = await new Promise((resolve, reject) => {
|
|
8
|
+
const args = [];
|
|
9
|
+
if (model)
|
|
10
|
+
args.push('--model', model);
|
|
11
|
+
const child = spawn('gemini', args, {
|
|
12
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
13
|
+
env: { ...process.env },
|
|
14
|
+
timeout: timeoutMs,
|
|
15
|
+
});
|
|
16
|
+
let stdout = '';
|
|
17
|
+
let stderr = '';
|
|
18
|
+
child.stdout.on('data', (chunk) => { stdout += chunk; });
|
|
19
|
+
child.stderr.on('data', (chunk) => { stderr += chunk; });
|
|
20
|
+
child.on('error', (err) => reject(err));
|
|
21
|
+
child.on('close', (code) => {
|
|
22
|
+
if (code !== 0 && !stdout)
|
|
23
|
+
reject(new Error(stderr || `gemini exited with code ${code}`));
|
|
24
|
+
else
|
|
25
|
+
resolve(stdout);
|
|
26
|
+
});
|
|
27
|
+
child.stdin.write(fullPrompt);
|
|
28
|
+
child.stdin.end();
|
|
29
|
+
});
|
|
30
|
+
const durationMs = Date.now() - start;
|
|
31
|
+
let text = output;
|
|
32
|
+
let inputTokens = 0;
|
|
33
|
+
let outputTokens = 0;
|
|
34
|
+
try {
|
|
35
|
+
const data = parseJson(output);
|
|
36
|
+
if (data.response)
|
|
37
|
+
text = data.response;
|
|
38
|
+
if (data.stats) {
|
|
39
|
+
inputTokens = data.stats.inputTokens || 0;
|
|
40
|
+
outputTokens = data.stats.outputTokens || 0;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
text = output.trim();
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
ok: true,
|
|
48
|
+
durationMs,
|
|
49
|
+
durationApiMs: 0,
|
|
50
|
+
inputTokens,
|
|
51
|
+
outputTokens,
|
|
52
|
+
cacheReadTokens: 0,
|
|
53
|
+
cacheCreationTokens: 0,
|
|
54
|
+
costUSD: 0,
|
|
55
|
+
output: text,
|
|
56
|
+
stopReason: 'end',
|
|
57
|
+
numTurns: 1,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
const durationMs = Date.now() - start;
|
|
62
|
+
return {
|
|
63
|
+
ok: false,
|
|
64
|
+
error: errorMessage(err),
|
|
65
|
+
durationMs,
|
|
66
|
+
durationApiMs: 0,
|
|
67
|
+
inputTokens: 0,
|
|
68
|
+
outputTokens: 0,
|
|
69
|
+
cacheReadTokens: 0,
|
|
70
|
+
cacheCreationTokens: 0,
|
|
71
|
+
costUSD: 0,
|
|
72
|
+
output: null,
|
|
73
|
+
stopReason: 'error',
|
|
74
|
+
numTurns: 0,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../src/executors/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAkB,SAAS,EAAE,MAAM,aAAa,CAAC;AAE1F,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,kBAAkB,EAAiB;IAC3G,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,IAAI,KAAK;gBAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACvC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE;gBAClC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gBAC/B,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;gBACvB,OAAO,EAAE,SAAS;aACnB,CAAC,CAAC;YAEH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAmB,EAAE,EAAE;gBACxC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM;oBAAE,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,2BAA2B,IAAI,EAAE,CAAC,CAAC,CAAC;;oBACrF,OAAO,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC9B,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACtC,IAAI,IAAI,GAAG,MAAM,CAAC;QAClB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS,CAAiB,MAAM,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,QAAQ;gBAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;YACxC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;gBAC1C,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QAED,OAAO;YACL,EAAE,EAAE,IAAI;YACR,UAAU;YACV,aAAa,EAAE,CAAC;YAChB,WAAW;YACX,YAAY;YACZ,eAAe,EAAE,CAAC;YAClB,mBAAmB,EAAE,CAAC;YACtB,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACtC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC;YACxB,UAAU;YACV,aAAa,EAAE,CAAC;YAChB,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,eAAe,EAAE,CAAC;YAClB,mBAAmB,EAAE,CAAC;YACtB,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,OAAO;YACnB,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ExecutorFn } from '../types.js';
|
|
2
|
+
import { extractAgentTrace } from './claude-sdk-trace.js';
|
|
3
|
+
import { createScriptExecutor } from './script.js';
|
|
4
|
+
import { DEFAULT_MODEL, JUDGE_MODEL } from './shared.js';
|
|
5
|
+
export { DEFAULT_MODEL, JUDGE_MODEL, extractAgentTrace, createScriptExecutor };
|
|
6
|
+
export declare function createExecutor(name?: string): ExecutorFn;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/executors/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAI1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAWzD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAC;AAE/E,wBAAgB,cAAc,CAAC,IAAI,GAAE,MAAiB,GAAG,UAAU,CAElE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { anthropicApiExecutor } from './anthropic-api.js';
|
|
2
|
+
import { claudeCliExecutor } from './claude-cli.js';
|
|
3
|
+
import { claudeSdkExecutor } from './claude-sdk.js';
|
|
4
|
+
import { extractAgentTrace } from './claude-sdk-trace.js';
|
|
5
|
+
import { geminiExecutor } from './gemini.js';
|
|
6
|
+
import { openAiApiExecutor } from './openai-api.js';
|
|
7
|
+
import { openAiCliExecutor } from './openai-cli.js';
|
|
8
|
+
import { createScriptExecutor } from './script.js';
|
|
9
|
+
import { DEFAULT_MODEL, JUDGE_MODEL } from './shared.js';
|
|
10
|
+
const EXECUTOR_REGISTRY = {
|
|
11
|
+
claude: claudeCliExecutor,
|
|
12
|
+
'claude-sdk': claudeSdkExecutor,
|
|
13
|
+
openai: openAiCliExecutor,
|
|
14
|
+
gemini: geminiExecutor,
|
|
15
|
+
'anthropic-api': anthropicApiExecutor,
|
|
16
|
+
'openai-api': openAiApiExecutor,
|
|
17
|
+
};
|
|
18
|
+
export { DEFAULT_MODEL, JUDGE_MODEL, extractAgentTrace, createScriptExecutor };
|
|
19
|
+
export function createExecutor(name = 'claude') {
|
|
20
|
+
return EXECUTOR_REGISTRY[name] || createScriptExecutor(name);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/executors/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,iBAAiB,GAA+B;IACpD,MAAM,EAAE,iBAAiB;IACzB,YAAY,EAAE,iBAAiB;IAC/B,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,cAAc;IACtB,eAAe,EAAE,oBAAoB;IACrC,YAAY,EAAE,iBAAiB;CAChC,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAC;AAE/E,MAAM,UAAU,cAAc,CAAC,OAAe,QAAQ;IACpD,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-api.d.ts","sourceRoot":"","sources":["../../../src/executors/openai-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG7D,wBAAsB,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAA8B,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAsCrI"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { asErrorLike, DEFAULT_TIMEOUT_MS, errorMessage } from './shared.js';
|
|
2
|
+
export async function openAiApiExecutor({ model, system, prompt, timeoutMs = DEFAULT_TIMEOUT_MS }) {
|
|
3
|
+
const apiKey = process.env.OPENAI_API_KEY;
|
|
4
|
+
if (!apiKey)
|
|
5
|
+
throw new Error('OPENAI_API_KEY 环境变量未设置');
|
|
6
|
+
const baseUrl = process.env.OPENAI_BASE_URL || 'https://api.openai.com';
|
|
7
|
+
const messages = [];
|
|
8
|
+
if (system)
|
|
9
|
+
messages.push({ role: 'system', content: system });
|
|
10
|
+
messages.push({ role: 'user', content: prompt });
|
|
11
|
+
const start = Date.now();
|
|
12
|
+
try {
|
|
13
|
+
const res = await fetch(`${baseUrl}/v1/chat/completions`, {
|
|
14
|
+
method: 'POST',
|
|
15
|
+
headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${apiKey}` },
|
|
16
|
+
body: JSON.stringify({ model: model || 'gpt-4o', messages }),
|
|
17
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
18
|
+
});
|
|
19
|
+
const data = await res.json();
|
|
20
|
+
const durationMs = Date.now() - start;
|
|
21
|
+
if (!res.ok) {
|
|
22
|
+
return { ok: false, error: data.error?.message || `API error ${res.status}`, durationMs, durationApiMs: 0, inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheCreationTokens: 0, costUSD: 0, output: null, stopReason: 'error', numTurns: 0 };
|
|
23
|
+
}
|
|
24
|
+
const usage = data.usage || {};
|
|
25
|
+
return {
|
|
26
|
+
ok: true, output: data.choices?.[0]?.message?.content || '', durationMs, durationApiMs: 0,
|
|
27
|
+
inputTokens: usage.prompt_tokens || 0, outputTokens: usage.completion_tokens || 0,
|
|
28
|
+
cacheReadTokens: usage.prompt_tokens_details?.cached_tokens || 0, cacheCreationTokens: 0,
|
|
29
|
+
costUSD: 0, stopReason: data.choices?.[0]?.finish_reason || 'unknown', numTurns: 1,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
const durationMs = Date.now() - start;
|
|
34
|
+
const details = asErrorLike(err);
|
|
35
|
+
const stopReason = details.name === 'TimeoutError' ? 'timeout' : 'error';
|
|
36
|
+
const error = details.name === 'TimeoutError' ? `API request timed out after ${timeoutMs / 1000}s` : errorMessage(err);
|
|
37
|
+
return { ok: false, error, durationMs, durationApiMs: 0, inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheCreationTokens: 0, costUSD: 0, output: null, stopReason, numTurns: 0 };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=openai-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-api.js","sourceRoot":"","sources":["../../../src/executors/openai-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,YAAY,EAAkB,MAAM,aAAa,CAAC;AAE5F,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,kBAAkB,EAAiB;IAC9G,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC1C,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAEvD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,wBAAwB,CAAC;IACxE,MAAM,QAAQ,GAA6C,EAAE,CAAC;IAC9D,IAAI,MAAM;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/D,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAEjD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,sBAAsB,EAAE;YACxD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,eAAe,EAAE,UAAU,MAAM,EAAE,EAAE;YACpF,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,QAAQ,EAAE,QAAQ,EAAE,CAAC;YAC5D,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;SACvC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAoB,CAAC;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAEtC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,aAAa,GAAG,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACvP,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/B,OAAO;YACL,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;YACzF,WAAW,EAAE,KAAK,CAAC,aAAa,IAAI,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,iBAAiB,IAAI,CAAC;YACjF,eAAe,EAAE,KAAK,CAAC,qBAAqB,EAAE,aAAa,IAAI,CAAC,EAAE,mBAAmB,EAAE,CAAC;YACxF,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,IAAI,SAAS,EAAE,QAAQ,EAAE,CAAC;SACnF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACtC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;QACzE,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,+BAA+B,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACvH,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAC5L,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-cli.d.ts","sourceRoot":"","sources":["../../../src/executors/openai-cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAY7D,wBAAsB,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAA8B,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAqDrI"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { asErrorLike, DEFAULT_TIMEOUT_MS, errorMessage, execFileAsync, MAX_BUFFER, parseJson, timeoutExecResult, } from './shared.js';
|
|
2
|
+
export async function openAiCliExecutor({ model, system, prompt, timeoutMs = DEFAULT_TIMEOUT_MS }) {
|
|
3
|
+
const args = ['api', 'chat.completions.create', '-m', model || 'gpt-4o'];
|
|
4
|
+
if (system) {
|
|
5
|
+
args.push('-g', 'system', system);
|
|
6
|
+
}
|
|
7
|
+
args.push('-g', 'user', prompt);
|
|
8
|
+
const start = Date.now();
|
|
9
|
+
try {
|
|
10
|
+
const { stdout } = await execFileAsync('openai', args, {
|
|
11
|
+
maxBuffer: MAX_BUFFER,
|
|
12
|
+
timeout: timeoutMs,
|
|
13
|
+
env: { ...process.env },
|
|
14
|
+
});
|
|
15
|
+
const durationMs = Date.now() - start;
|
|
16
|
+
const data = parseJson(stdout);
|
|
17
|
+
const usage = data.usage || {};
|
|
18
|
+
const content = data.choices?.[0]?.message?.content || '';
|
|
19
|
+
const finishReason = data.choices?.[0]?.finish_reason || 'unknown';
|
|
20
|
+
return {
|
|
21
|
+
ok: true,
|
|
22
|
+
durationMs,
|
|
23
|
+
durationApiMs: 0,
|
|
24
|
+
inputTokens: usage.prompt_tokens || 0,
|
|
25
|
+
outputTokens: usage.completion_tokens || 0,
|
|
26
|
+
cacheReadTokens: usage.prompt_tokens_details?.cached_tokens || 0,
|
|
27
|
+
cacheCreationTokens: 0,
|
|
28
|
+
costUSD: 0,
|
|
29
|
+
output: content,
|
|
30
|
+
stopReason: finishReason,
|
|
31
|
+
numTurns: 1,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
const durationMs = Date.now() - start;
|
|
36
|
+
const details = asErrorLike(err);
|
|
37
|
+
if (details.killed)
|
|
38
|
+
return timeoutExecResult(timeoutMs, durationMs);
|
|
39
|
+
let parsed = null;
|
|
40
|
+
try {
|
|
41
|
+
parsed = parseJson(details.stdout || '');
|
|
42
|
+
}
|
|
43
|
+
catch { }
|
|
44
|
+
return {
|
|
45
|
+
ok: false,
|
|
46
|
+
error: parsed?.error?.message || errorMessage(err),
|
|
47
|
+
durationMs,
|
|
48
|
+
durationApiMs: 0,
|
|
49
|
+
inputTokens: 0,
|
|
50
|
+
outputTokens: 0,
|
|
51
|
+
cacheReadTokens: 0,
|
|
52
|
+
cacheCreationTokens: 0,
|
|
53
|
+
costUSD: 0,
|
|
54
|
+
output: null,
|
|
55
|
+
stopReason: 'error',
|
|
56
|
+
numTurns: 0,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=openai-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-cli.js","sourceRoot":"","sources":["../../../src/executors/openai-cli.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,UAAU,EAEV,SAAS,EACT,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,kBAAkB,EAAiB;IAC9G,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,yBAAyB,EAAE,IAAI,EAAE,KAAK,IAAI,QAAQ,CAAC,CAAC;IACzE,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE;YACrD,SAAS,EAAE,UAAU;YACrB,OAAO,EAAE,SAAS;YAClB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;SACxB,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACtC,MAAM,IAAI,GAAG,SAAS,CAAiB,MAAM,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,IAAI,SAAS,CAAC;QACnE,OAAO;YACL,EAAE,EAAE,IAAI;YACR,UAAU;YACV,aAAa,EAAE,CAAC;YAChB,WAAW,EAAE,KAAK,CAAC,aAAa,IAAI,CAAC;YACrC,YAAY,EAAE,KAAK,CAAC,iBAAiB,IAAI,CAAC;YAC1C,eAAe,EAAE,KAAK,CAAC,qBAAqB,EAAE,aAAa,IAAI,CAAC;YAChE,mBAAmB,EAAE,CAAC;YACtB,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,OAAO;YACf,UAAU,EAAE,YAAY;YACxB,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACtC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,OAAO,CAAC,MAAM;YAAE,OAAO,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACpE,IAAI,MAAM,GAA0B,IAAI,CAAC;QACzC,IAAI,CAAC;YAAC,MAAM,GAAG,SAAS,CAAiB,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAC1E,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC;YAClD,UAAU;YACV,aAAa,EAAE,CAAC;YAChB,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,eAAe,EAAE,CAAC;YAClB,mBAAmB,EAAE,CAAC;YACtB,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,OAAO;YACnB,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script.d.ts","sourceRoot":"","sources":["../../../src/executors/script.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,UAAU,EAAiB,MAAM,aAAa,CAAC;AAGzE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAgEhE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { DEFAULT_TIMEOUT_MS } from './shared.js';
|
|
3
|
+
export function createScriptExecutor(command) {
|
|
4
|
+
return async function scriptExecutor({ model, system, prompt, cwd, timeoutMs = DEFAULT_TIMEOUT_MS }) {
|
|
5
|
+
const input = JSON.stringify({ model, system: system || '', prompt });
|
|
6
|
+
const start = Date.now();
|
|
7
|
+
return new Promise((resolve) => {
|
|
8
|
+
const parts = command.match(/(?:[^\s"']+|"[^"]*"|'[^']*')+/g) || [command];
|
|
9
|
+
const cmd = parts[0].replace(/^["']|["']$/g, '');
|
|
10
|
+
const args = parts.slice(1).map((a) => a.replace(/^["']|["']$/g, ''));
|
|
11
|
+
const child = spawn(cmd, args, {
|
|
12
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
13
|
+
env: { ...process.env },
|
|
14
|
+
timeout: timeoutMs,
|
|
15
|
+
...(cwd && { cwd }),
|
|
16
|
+
});
|
|
17
|
+
let stdout = '';
|
|
18
|
+
let stderr = '';
|
|
19
|
+
child.stdout.on('data', (d) => { stdout += d; });
|
|
20
|
+
child.stderr.on('data', (d) => { stderr += d; });
|
|
21
|
+
child.on('error', (err) => {
|
|
22
|
+
resolve({
|
|
23
|
+
ok: false, error: `executor command failed: ${err.message}`,
|
|
24
|
+
durationMs: Date.now() - start, durationApiMs: 0,
|
|
25
|
+
inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheCreationTokens: 0,
|
|
26
|
+
costUSD: 0, output: null, stopReason: 'error', numTurns: 0,
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
child.on('close', (code) => {
|
|
30
|
+
const durationMs = Date.now() - start;
|
|
31
|
+
if (code !== 0) {
|
|
32
|
+
resolve({
|
|
33
|
+
ok: false, error: stderr.trim() || `executor exited with code ${code}`,
|
|
34
|
+
durationMs, durationApiMs: 0,
|
|
35
|
+
inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheCreationTokens: 0,
|
|
36
|
+
costUSD: 0, output: null, stopReason: 'error', numTurns: 0,
|
|
37
|
+
});
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const data = JSON.parse(stdout);
|
|
42
|
+
resolve({
|
|
43
|
+
ok: true, output: data.output || '', durationMs,
|
|
44
|
+
durationApiMs: data.durationApiMs || 0,
|
|
45
|
+
inputTokens: data.inputTokens || 0, outputTokens: data.outputTokens || 0,
|
|
46
|
+
cacheReadTokens: data.cacheReadTokens || 0, cacheCreationTokens: data.cacheCreationTokens || 0,
|
|
47
|
+
costUSD: data.costUSD || 0, stopReason: data.stopReason || 'end', numTurns: data.numTurns || 1,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
resolve({
|
|
52
|
+
ok: true, output: stdout.trim(), durationMs, durationApiMs: 0,
|
|
53
|
+
inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheCreationTokens: 0,
|
|
54
|
+
costUSD: 0, stopReason: 'end', numTurns: 1,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
child.stdin.write(input);
|
|
59
|
+
child.stdin.end();
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script.js","sourceRoot":"","sources":["../../../src/executors/script.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import type { ExecResult } from '../types.js';
|
|
3
|
+
export declare const execFileAsync: typeof execFile.__promisify__;
|
|
4
|
+
export declare const DEFAULT_MODEL = "sonnet";
|
|
5
|
+
export declare const JUDGE_MODEL = "haiku";
|
|
6
|
+
export declare const DEFAULT_TIMEOUT_MS = 120000;
|
|
7
|
+
export declare const MAX_BUFFER: number;
|
|
8
|
+
export interface TokenUsage {
|
|
9
|
+
input_tokens?: number;
|
|
10
|
+
output_tokens?: number;
|
|
11
|
+
cache_read_input_tokens?: number;
|
|
12
|
+
cache_creation_input_tokens?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface ClaudeCliResponse {
|
|
15
|
+
is_error?: boolean;
|
|
16
|
+
duration_ms?: number;
|
|
17
|
+
duration_api_ms?: number;
|
|
18
|
+
usage?: TokenUsage;
|
|
19
|
+
total_cost_usd?: number;
|
|
20
|
+
result?: string;
|
|
21
|
+
stop_reason?: string;
|
|
22
|
+
num_turns?: number;
|
|
23
|
+
}
|
|
24
|
+
export interface OpenAiUsage {
|
|
25
|
+
prompt_tokens?: number;
|
|
26
|
+
completion_tokens?: number;
|
|
27
|
+
prompt_tokens_details?: {
|
|
28
|
+
cached_tokens?: number;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export interface OpenAiResponse {
|
|
32
|
+
usage?: OpenAiUsage;
|
|
33
|
+
choices?: Array<{
|
|
34
|
+
message?: {
|
|
35
|
+
content?: string;
|
|
36
|
+
};
|
|
37
|
+
finish_reason?: string;
|
|
38
|
+
}>;
|
|
39
|
+
error?: {
|
|
40
|
+
message?: string;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export interface GeminiResponse {
|
|
44
|
+
response?: string;
|
|
45
|
+
stats?: {
|
|
46
|
+
inputTokens?: number;
|
|
47
|
+
outputTokens?: number;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export interface AnthropicResponse {
|
|
51
|
+
usage?: TokenUsage;
|
|
52
|
+
content?: Array<{
|
|
53
|
+
text?: string;
|
|
54
|
+
}>;
|
|
55
|
+
stop_reason?: string;
|
|
56
|
+
error?: {
|
|
57
|
+
message?: string;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export interface ClaudeSdkQueryOptions {
|
|
61
|
+
model?: string;
|
|
62
|
+
systemPrompt?: string;
|
|
63
|
+
cwd: string;
|
|
64
|
+
permissionMode: 'bypassPermissions';
|
|
65
|
+
allowDangerouslySkipPermissions: true;
|
|
66
|
+
abortController: AbortController;
|
|
67
|
+
env: NodeJS.ProcessEnv;
|
|
68
|
+
}
|
|
69
|
+
export interface ClaudeSdkQueryInput {
|
|
70
|
+
prompt: string;
|
|
71
|
+
options: ClaudeSdkQueryOptions;
|
|
72
|
+
}
|
|
73
|
+
export interface ClaudeSdkBaseMessage {
|
|
74
|
+
type: string;
|
|
75
|
+
message?: {
|
|
76
|
+
role?: string;
|
|
77
|
+
content?: Array<{
|
|
78
|
+
type: string;
|
|
79
|
+
text?: string;
|
|
80
|
+
id?: string;
|
|
81
|
+
name?: string;
|
|
82
|
+
input?: unknown;
|
|
83
|
+
}>;
|
|
84
|
+
};
|
|
85
|
+
tool_use_id?: string;
|
|
86
|
+
content?: string | Array<{
|
|
87
|
+
type: string;
|
|
88
|
+
text?: string;
|
|
89
|
+
}>;
|
|
90
|
+
is_error?: boolean;
|
|
91
|
+
}
|
|
92
|
+
export interface ClaudeSdkResultMessage extends ClaudeSdkBaseMessage {
|
|
93
|
+
type: 'result';
|
|
94
|
+
result?: string;
|
|
95
|
+
usage?: TokenUsage;
|
|
96
|
+
total_cost_usd?: number;
|
|
97
|
+
duration_api_ms?: number;
|
|
98
|
+
duration_ms?: number;
|
|
99
|
+
num_turns?: number;
|
|
100
|
+
subtype?: string;
|
|
101
|
+
errors?: string[];
|
|
102
|
+
}
|
|
103
|
+
export interface ClaudeSdkModule {
|
|
104
|
+
query: (opts: ClaudeSdkQueryInput) => AsyncIterable<ClaudeSdkBaseMessage>;
|
|
105
|
+
}
|
|
106
|
+
export interface ExecutorErrorLike {
|
|
107
|
+
message?: string;
|
|
108
|
+
name?: string;
|
|
109
|
+
killed?: boolean;
|
|
110
|
+
stdout?: string;
|
|
111
|
+
}
|
|
112
|
+
export declare function asErrorLike(err: unknown): ExecutorErrorLike;
|
|
113
|
+
export declare function errorMessage(err: unknown, fallback?: string): string;
|
|
114
|
+
export declare function parseJson<T>(content: string): T;
|
|
115
|
+
export declare function buildExecEnv(skillDir?: string | null): NodeJS.ProcessEnv;
|
|
116
|
+
export declare function timeoutExecResult(timeoutMs: number, durationMs: number): ExecResult;
|
|
117
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/executors/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAI9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,eAAO,MAAM,aAAa,+BAAsB,CAAC;AAEjD,eAAO,MAAM,aAAa,WAAW,CAAC;AACtC,eAAO,MAAM,WAAW,UAAU,CAAC;AACnC,eAAO,MAAM,kBAAkB,SAAU,CAAC;AAC1C,eAAO,MAAM,UAAU,QAAmB,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,2BAA2B,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACpD;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACzD;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,mBAAmB,CAAC;IACpC,+BAA+B,EAAE,IAAI,CAAC;IACtC,eAAe,EAAE,eAAe,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,qBAAqB,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,KAAK,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,EAAE,CAAC,EAAE,MAAM,CAAC;YACZ,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,KAAK,CAAC,EAAE,OAAO,CAAC;SACjB,CAAC,CAAC;KACJ,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,sBAAuB,SAAQ,oBAAoB;IAClE,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,aAAa,CAAC,oBAAoB,CAAC,CAAC;CAC3E;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAE3D;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,GAAE,MAAwB,GAAG,MAAM,CAGrF;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,CAE/C;AAED,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,UAAU,CAcxE;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,CAenF"}
|