feat(agent): add claude cli runner

This commit is contained in:
Peter Steinberger
2026-01-09 04:52:37 +01:00
parent 8e27ea7371
commit 9a8fe4d683
5 changed files with 399 additions and 8 deletions

View File

@@ -1,4 +1,5 @@
import crypto from "node:crypto";
import { runClaudeCliAgent } from "../agents/claude-cli-runner.js";
import { lookupContextTokens } from "../agents/context.js";
import {
DEFAULT_CONTEXT_TOKENS,
@@ -422,12 +423,29 @@ export async function runCronIsolatedAgentTurn(params: {
sessionKey: params.sessionKey,
});
const messageProvider = resolvedDelivery.provider;
const claudeResumeId = cronSession.sessionEntry.claudeCliSessionId?.trim();
const fallbackResult = await runWithModelFallback({
cfg: params.cfg,
provider,
model,
run: (providerOverride, modelOverride) =>
runEmbeddedPiAgent({
run: (providerOverride, modelOverride) => {
if (providerOverride === "claude-cli") {
return runClaudeCliAgent({
sessionId: cronSession.sessionEntry.sessionId,
sessionKey: params.sessionKey,
sessionFile,
workspaceDir,
config: params.cfg,
prompt: commandBody,
provider: providerOverride,
model: modelOverride,
thinkLevel,
timeoutMs,
runId: cronSession.sessionEntry.sessionId,
resumeSessionId: claudeResumeId,
});
}
return runEmbeddedPiAgent({
sessionId: cronSession.sessionEntry.sessionId,
sessionKey: params.sessionKey,
messageProvider,
@@ -448,7 +466,8 @@ export async function runCronIsolatedAgentTurn(params: {
(agentCfg?.verboseDefault as "on" | "off" | undefined),
timeoutMs,
runId: cronSession.sessionEntry.sessionId,
}),
});
},
});
runResult = fallbackResult.result;
fallbackProvider = fallbackResult.provider;
@@ -473,6 +492,12 @@ export async function runCronIsolatedAgentTurn(params: {
cronSession.sessionEntry.modelProvider = providerUsed;
cronSession.sessionEntry.model = modelUsed;
cronSession.sessionEntry.contextTokens = contextTokens;
if (providerUsed === "claude-cli") {
const cliSessionId = runResult.meta.agentMeta?.sessionId?.trim();
if (cliSessionId) {
cronSession.sessionEntry.claudeCliSessionId = cliSessionId;
}
}
if (hasNonzeroUsage(usage)) {
const input = usage.input ?? 0;
const output = usage.output ?? 0;