@action-llama/action-llama 0.27.4 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/credential-setup.d.ts +0 -1
- package/dist/agents/credential-setup.d.ts.map +1 -1
- package/dist/agents/credential-setup.js +2 -23
- package/dist/agents/credential-setup.js.map +1 -1
- package/dist/agents/prompt.js +1 -1
- package/dist/agents/prompt.js.map +1 -1
- package/dist/agents/scheduler-tools.d.ts +40 -0
- package/dist/agents/scheduler-tools.d.ts.map +1 -0
- package/dist/agents/scheduler-tools.js +178 -0
- package/dist/agents/scheduler-tools.js.map +1 -0
- package/dist/agents/transport-runner.d.ts +95 -0
- package/dist/agents/transport-runner.d.ts.map +1 -0
- package/dist/agents/transport-runner.js +653 -0
- package/dist/agents/transport-runner.js.map +1 -0
- package/dist/build-info.json +1 -1
- package/dist/cli/commands/add.d.ts +1 -0
- package/dist/cli/commands/add.d.ts.map +1 -1
- package/dist/cli/commands/add.js +24 -9
- package/dist/cli/commands/add.js.map +1 -1
- package/dist/cli/commands/agent.d.ts +0 -3
- package/dist/cli/commands/agent.d.ts.map +1 -1
- package/dist/cli/commands/agent.js +3 -67
- package/dist/cli/commands/agent.js.map +1 -1
- package/dist/cli/commands/logs.d.ts.map +1 -1
- package/dist/cli/commands/logs.js +2 -3
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/cli/main.js +1 -30
- package/dist/cli/main.js.map +1 -1
- package/dist/control/routes/dashboard-api.js +1 -1
- package/dist/control/routes/dashboard-api.js.map +1 -1
- package/dist/control/routes/log-helpers.d.ts +4 -4
- package/dist/control/routes/log-helpers.d.ts.map +1 -1
- package/dist/control/routes/log-helpers.js +12 -7
- package/dist/control/routes/log-helpers.js.map +1 -1
- package/dist/control/routes/log-summary.d.ts.map +1 -1
- package/dist/control/routes/log-summary.js +22 -9
- package/dist/control/routes/log-summary.js.map +1 -1
- package/dist/control/routes/logs.d.ts.map +1 -1
- package/dist/control/routes/logs.js +10 -10
- package/dist/control/routes/logs.js.map +1 -1
- package/dist/docker/providers/index.d.ts +0 -4
- package/dist/docker/providers/index.d.ts.map +1 -1
- package/dist/docker/providers/index.js +0 -38
- package/dist/docker/providers/index.js.map +1 -1
- package/dist/execution/execution.d.ts +0 -1
- package/dist/execution/execution.d.ts.map +1 -1
- package/dist/execution/execution.js +5 -9
- package/dist/execution/execution.js.map +1 -1
- package/dist/execution/index.d.ts +1 -11
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/index.js +1 -8
- package/dist/execution/index.js.map +1 -1
- package/dist/execution/runner-setup.d.ts +6 -11
- package/dist/execution/runner-setup.d.ts.map +1 -1
- package/dist/execution/runner-setup.js +18 -14
- package/dist/execution/runner-setup.js.map +1 -1
- package/dist/execution/runtime-factory.d.ts +1 -15
- package/dist/execution/runtime-factory.d.ts.map +1 -1
- package/dist/execution/runtime-factory.js +1 -18
- package/dist/execution/runtime-factory.js.map +1 -1
- package/dist/frontend/assets/{index-a78B5S5H.js → index-DnSu-8Kw.js} +1 -1
- package/dist/frontend/assets/index-DnSu-8Kw.js.map +1 -0
- package/dist/frontend/index.html +1 -1
- package/dist/gateway/index.d.ts +1 -1
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +6 -47
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/routes/system.d.ts +1 -4
- package/dist/gateway/routes/system.d.ts.map +1 -1
- package/dist/gateway/routes/system.js +3 -8
- package/dist/gateway/routes/system.js.map +1 -1
- package/dist/gateway/stores.d.ts +0 -4
- package/dist/gateway/stores.d.ts.map +1 -1
- package/dist/gateway/stores.js +2 -10
- package/dist/gateway/stores.js.map +1 -1
- package/dist/gateway/types.d.ts +0 -13
- package/dist/gateway/types.d.ts.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +11 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/models/providers/custom.d.ts.map +1 -1
- package/dist/models/providers/custom.js +3 -2
- package/dist/models/providers/custom.js.map +1 -1
- package/dist/models/providers/openai.d.ts.map +1 -1
- package/dist/models/providers/openai.js +3 -2
- package/dist/models/providers/openai.js.map +1 -1
- package/dist/scheduler/gateway-setup.d.ts +0 -2
- package/dist/scheduler/gateway-setup.d.ts.map +1 -1
- package/dist/scheduler/gateway-setup.js +2 -11
- package/dist/scheduler/gateway-setup.js.map +1 -1
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +95 -55
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/validation.js +1 -1
- package/dist/scheduler/validation.js.map +1 -1
- package/dist/scheduler/watcher.d.ts +2 -8
- package/dist/scheduler/watcher.d.ts.map +1 -1
- package/dist/scheduler/watcher.js +7 -104
- package/dist/scheduler/watcher.js.map +1 -1
- package/dist/shared/config/load-agent.js +2 -2
- package/dist/shared/config/load-agent.js.map +1 -1
- package/dist/shared/config/load-project.js +2 -2
- package/dist/shared/config/load-project.js.map +1 -1
- package/dist/shared/config/types.d.ts +10 -2
- package/dist/shared/config/types.d.ts.map +1 -1
- package/dist/shared/constants.d.ts +1 -1
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js +2 -2
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/credential-refs.js +1 -1
- package/dist/shared/credential-refs.js.map +1 -1
- package/dist/shared/paths.d.ts.map +1 -1
- package/dist/shared/paths.js +2 -2
- package/dist/shared/paths.js.map +1 -1
- package/dist/shared/validation.js +1 -1
- package/dist/shared/validation.js.map +1 -1
- package/dist/transport/docker-exec.d.ts +41 -0
- package/dist/transport/docker-exec.d.ts.map +1 -0
- package/dist/transport/docker-exec.js +331 -0
- package/dist/transport/docker-exec.js.map +1 -0
- package/dist/transport/host-user.d.ts +37 -0
- package/dist/transport/host-user.d.ts.map +1 -0
- package/dist/transport/host-user.js +232 -0
- package/dist/transport/host-user.js.map +1 -0
- package/dist/transport/index.d.ts +8 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +7 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/memory.d.ts +35 -0
- package/dist/transport/memory.d.ts.map +1 -0
- package/dist/transport/memory.js +110 -0
- package/dist/transport/memory.js.map +1 -0
- package/dist/transport/operations.d.ts +68 -0
- package/dist/transport/operations.d.ts.map +1 -0
- package/dist/transport/operations.js +164 -0
- package/dist/transport/operations.js.map +1 -0
- package/dist/transport/ssh.d.ts +43 -0
- package/dist/transport/ssh.d.ts.map +1 -0
- package/dist/transport/ssh.js +225 -0
- package/dist/transport/ssh.js.map +1 -0
- package/dist/transport/transport.d.ts +59 -0
- package/dist/transport/transport.d.ts.map +1 -0
- package/dist/transport/transport.js +29 -0
- package/dist/transport/transport.js.map +1 -0
- package/package.json +1 -1
- package/dist/agents/container-entry.d.ts +0 -31
- package/dist/agents/container-entry.d.ts.map +0 -1
- package/dist/agents/container-entry.js +0 -302
- package/dist/agents/container-entry.js.map +0 -1
- package/dist/agents/container-runner.d.ts +0 -59
- package/dist/agents/container-runner.d.ts.map +0 -1
- package/dist/agents/container-runner.js +0 -472
- package/dist/agents/container-runner.js.map +0 -1
- package/dist/agents/harness/claude-cli-harness.d.ts +0 -15
- package/dist/agents/harness/claude-cli-harness.d.ts.map +0 -1
- package/dist/agents/harness/claude-cli-harness.js +0 -240
- package/dist/agents/harness/claude-cli-harness.js.map +0 -1
- package/dist/agents/harness/consumer.d.ts +0 -31
- package/dist/agents/harness/consumer.d.ts.map +0 -1
- package/dist/agents/harness/consumer.js +0 -161
- package/dist/agents/harness/consumer.js.map +0 -1
- package/dist/agents/harness/factory.d.ts +0 -9
- package/dist/agents/harness/factory.d.ts.map +0 -1
- package/dist/agents/harness/factory.js +0 -25
- package/dist/agents/harness/factory.js.map +0 -1
- package/dist/agents/harness/index.d.ts +0 -9
- package/dist/agents/harness/index.d.ts.map +0 -1
- package/dist/agents/harness/index.js +0 -5
- package/dist/agents/harness/index.js.map +0 -1
- package/dist/agents/harness/pi-harness.d.ts +0 -18
- package/dist/agents/harness/pi-harness.d.ts.map +0 -1
- package/dist/agents/harness/pi-harness.js +0 -259
- package/dist/agents/harness/pi-harness.js.map +0 -1
- package/dist/agents/harness/types.d.ts +0 -57
- package/dist/agents/harness/types.d.ts.map +0 -1
- package/dist/agents/harness/types.js +0 -2
- package/dist/agents/harness/types.js.map +0 -1
- package/dist/agents/session-loop.d.ts +0 -36
- package/dist/agents/session-loop.d.ts.map +0 -1
- package/dist/agents/session-loop.js +0 -216
- package/dist/agents/session-loop.js.map +0 -1
- package/dist/agents/signals.d.ts +0 -34
- package/dist/agents/signals.d.ts.map +0 -1
- package/dist/agents/signals.js +0 -122
- package/dist/agents/signals.js.map +0 -1
- package/dist/cli/commands/claude.d.ts +0 -4
- package/dist/cli/commands/claude.d.ts.map +0 -1
- package/dist/cli/commands/claude.js +0 -6
- package/dist/cli/commands/claude.js.map +0 -1
- package/dist/cli/commands/run-agent.d.ts +0 -14
- package/dist/cli/commands/run-agent.d.ts.map +0 -1
- package/dist/cli/commands/run-agent.js +0 -270
- package/dist/cli/commands/run-agent.js.map +0 -1
- package/dist/docker/cloud-run-runtime.d.ts +0 -48
- package/dist/docker/cloud-run-runtime.d.ts.map +0 -1
- package/dist/docker/cloud-run-runtime.js +0 -490
- package/dist/docker/cloud-run-runtime.js.map +0 -1
- package/dist/docker/image.d.ts +0 -19
- package/dist/docker/image.d.ts.map +0 -1
- package/dist/docker/image.js +0 -111
- package/dist/docker/image.js.map +0 -1
- package/dist/execution/call-dispatcher.d.ts +0 -11
- package/dist/execution/call-dispatcher.d.ts.map +0 -1
- package/dist/execution/call-dispatcher.js +0 -75
- package/dist/execution/call-dispatcher.js.map +0 -1
- package/dist/execution/container-registry.d.ts +0 -42
- package/dist/execution/container-registry.d.ts.map +0 -1
- package/dist/execution/container-registry.js +0 -76
- package/dist/execution/container-registry.js.map +0 -1
- package/dist/execution/image-builder.d.ts +0 -48
- package/dist/execution/image-builder.d.ts.map +0 -1
- package/dist/execution/image-builder.js +0 -155
- package/dist/execution/image-builder.js.map +0 -1
- package/dist/execution/routes/calls.d.ts +0 -18
- package/dist/execution/routes/calls.d.ts.map +0 -1
- package/dist/execution/routes/calls.js +0 -74
- package/dist/execution/routes/calls.js.map +0 -1
- package/dist/execution/routes/locks.d.ts +0 -10
- package/dist/execution/routes/locks.d.ts.map +0 -1
- package/dist/execution/routes/locks.js +0 -166
- package/dist/execution/routes/locks.js.map +0 -1
- package/dist/execution/routes/shutdown.d.ts +0 -5
- package/dist/execution/routes/shutdown.d.ts.map +0 -1
- package/dist/execution/routes/shutdown.js +0 -24
- package/dist/execution/routes/shutdown.js.map +0 -1
- package/dist/execution/routes/signals.d.ts +0 -12
- package/dist/execution/routes/signals.d.ts.map +0 -1
- package/dist/execution/routes/signals.js +0 -123
- package/dist/execution/routes/signals.js.map +0 -1
- package/dist/execution/types.d.ts +0 -23
- package/dist/execution/types.d.ts.map +0 -1
- package/dist/execution/types.js +0 -2
- package/dist/execution/types.js.map +0 -1
- package/dist/frontend/assets/index-a78B5S5H.js.map +0 -1
- package/dist/gateway/routes/execution.d.ts +0 -24
- package/dist/gateway/routes/execution.d.ts.map +0 -1
- package/dist/gateway/routes/execution.js +0 -13
- package/dist/gateway/routes/execution.js.map +0 -1
- package/dist/scheduler/orphan-recovery.d.ts +0 -25
- package/dist/scheduler/orphan-recovery.d.ts.map +0 -1
- package/dist/scheduler/orphan-recovery.js +0 -144
- package/dist/scheduler/orphan-recovery.js.map +0 -1
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pi agent harness — wraps @mariozechner/pi-coding-agent into the
|
|
3
|
-
* AgentHarness interface with model-fallback and circuit breaker.
|
|
4
|
-
*/
|
|
5
|
-
import { getModel } from "@mariozechner/pi-ai";
|
|
6
|
-
import { AuthStorage, createAgentSession, SessionManager, createCodingTools, } from "@mariozechner/pi-coding-agent";
|
|
7
|
-
import { sessionStatsToUsage } from "../../shared/usage.js";
|
|
8
|
-
import { selectAvailableModels, isRateLimitError } from "../model-fallback.js";
|
|
9
|
-
import { extractTurnEndError } from "../turn-end-error.js";
|
|
10
|
-
const MAX_PASSES = 3;
|
|
11
|
-
const DEFAULT_BACKOFF_MS = 30_000;
|
|
12
|
-
const MAX_BACKOFF_MS = 300_000;
|
|
13
|
-
export class PiHarness {
|
|
14
|
-
opts;
|
|
15
|
-
session = null;
|
|
16
|
-
constructor(opts) {
|
|
17
|
-
this.opts = opts;
|
|
18
|
-
}
|
|
19
|
-
async *run(prompt, runOpts) {
|
|
20
|
-
const { models, circuitBreaker, resourceLoader, settingsManager, providerKeys } = this.opts;
|
|
21
|
-
const { cwd } = runOpts;
|
|
22
|
-
let anyModelSucceeded = false;
|
|
23
|
-
for (let pass = 0; pass <= MAX_PASSES; pass++) {
|
|
24
|
-
const availableModels = selectAvailableModels(models, circuitBreaker);
|
|
25
|
-
let modelSucceeded = false;
|
|
26
|
-
for (const modelConfig of availableModels) {
|
|
27
|
-
const llmModel = getModel(modelConfig.provider, modelConfig.model);
|
|
28
|
-
yield {
|
|
29
|
-
type: "log",
|
|
30
|
-
level: "info",
|
|
31
|
-
message: "creating agent session",
|
|
32
|
-
data: { model: modelConfig.model, thinking: modelConfig.thinkingLevel },
|
|
33
|
-
};
|
|
34
|
-
const authStorage = AuthStorage.create();
|
|
35
|
-
const providerKey = providerKeys?.get(modelConfig.provider);
|
|
36
|
-
if (providerKey) {
|
|
37
|
-
authStorage.setRuntimeApiKey(modelConfig.provider, providerKey);
|
|
38
|
-
}
|
|
39
|
-
const { session } = await createAgentSession({
|
|
40
|
-
cwd,
|
|
41
|
-
model: llmModel,
|
|
42
|
-
thinkingLevel: modelConfig.thinkingLevel,
|
|
43
|
-
authStorage,
|
|
44
|
-
resourceLoader,
|
|
45
|
-
tools: createCodingTools(cwd, {}),
|
|
46
|
-
sessionManager: SessionManager.inMemory(),
|
|
47
|
-
settingsManager,
|
|
48
|
-
});
|
|
49
|
-
this.session = session;
|
|
50
|
-
// Collect events via callback into a queue that the async generator drains
|
|
51
|
-
const eventQueue = [];
|
|
52
|
-
let eventCount = 0;
|
|
53
|
-
const pendingCmds = new Map();
|
|
54
|
-
let lastStopReason;
|
|
55
|
-
let pendingToolStarts = 0;
|
|
56
|
-
session.subscribe((event) => {
|
|
57
|
-
eventCount++;
|
|
58
|
-
// Non-update events → debug log
|
|
59
|
-
if (event.type !== "message_update") {
|
|
60
|
-
const extra = { eventType: event.type, eventCount, raw: event };
|
|
61
|
-
if (event.type === "message_start" || event.type === "message_end") {
|
|
62
|
-
extra.role = event.role || event.message?.role;
|
|
63
|
-
extra.content = JSON.stringify(event.content || event.message?.content || []).slice(0, 500);
|
|
64
|
-
// Pi library doesn't expose stopReason on message_end events directly.
|
|
65
|
-
// Try multiple paths: direct field, nested in message, or from the API response.
|
|
66
|
-
const sr = event.stopReason || event.stop_reason
|
|
67
|
-
|| event.message?.stopReason || event.message?.stop_reason
|
|
68
|
-
|| event.message?.stop_reason;
|
|
69
|
-
if (sr) {
|
|
70
|
-
extra.stopReason = sr;
|
|
71
|
-
lastStopReason = String(sr);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
// agent_end fires when the entire prompt() call completes.
|
|
75
|
-
// This is our best signal that the model stopped.
|
|
76
|
-
if (event.type === "agent_end") {
|
|
77
|
-
// If we have pending tool starts without matching ends, the session
|
|
78
|
-
// ended with orphaned tool calls — the model returned end_turn mid-execution.
|
|
79
|
-
if (pendingToolStarts > 0) {
|
|
80
|
-
extra.orphanedToolCalls = pendingToolStarts;
|
|
81
|
-
}
|
|
82
|
-
// Infer stop reason: if the pi library doesn't surface it,
|
|
83
|
-
// we can at least distinguish "end_turn" (no pending tools) from
|
|
84
|
-
// "interrupted" (orphaned tools).
|
|
85
|
-
if (!lastStopReason) {
|
|
86
|
-
lastStopReason = pendingToolStarts > 0 ? "end_turn (orphaned tools)" : "end_turn";
|
|
87
|
-
}
|
|
88
|
-
// Emit as a synthetic message_end so the consumer captures lastStopReason
|
|
89
|
-
eventQueue.push({
|
|
90
|
-
type: "log",
|
|
91
|
-
level: "debug",
|
|
92
|
-
message: "conversation.event",
|
|
93
|
-
data: { eventType: "message_end", stopReason: lastStopReason, role: "assistant", inferred: true },
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
if (event.type === "turn_end") {
|
|
97
|
-
extra.turnResult = JSON.stringify(event).slice(0, 500);
|
|
98
|
-
const errorMessage = extractTurnEndError(event);
|
|
99
|
-
if (errorMessage)
|
|
100
|
-
extra.errorMessage = errorMessage;
|
|
101
|
-
}
|
|
102
|
-
eventQueue.push({ type: "log", level: "debug", message: "conversation.event", data: extra });
|
|
103
|
-
// Emit context-usage at each turn_end using getContextUsage() (most reliable source)
|
|
104
|
-
if (event.type === "turn_end") {
|
|
105
|
-
try {
|
|
106
|
-
const ctx = session.getContextUsage?.();
|
|
107
|
-
if (ctx && ctx.percent != null) {
|
|
108
|
-
eventQueue.push({
|
|
109
|
-
type: "log",
|
|
110
|
-
level: "info",
|
|
111
|
-
message: "context-usage",
|
|
112
|
-
data: {
|
|
113
|
-
contextPercent: Math.round(ctx.percent * 10) / 10,
|
|
114
|
-
contextWindow: ctx.contextWindow,
|
|
115
|
-
contextTokens: ctx.tokens,
|
|
116
|
-
},
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
catch { /* context usage not available yet */ }
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
// Error events — extract errorMessage from the AssistantMessage if available
|
|
124
|
-
if (event.type === "error") {
|
|
125
|
-
const err = event.error;
|
|
126
|
-
const errorMsg = err?.errorMessage
|
|
127
|
-
|| (typeof err === "string" ? err : null)
|
|
128
|
-
|| event.message
|
|
129
|
-
|| JSON.stringify(event);
|
|
130
|
-
eventQueue.push({
|
|
131
|
-
type: "log",
|
|
132
|
-
level: "error",
|
|
133
|
-
message: "session error",
|
|
134
|
-
data: { error: String(errorMsg), stopReason: err?.stopReason },
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
// Text deltas
|
|
138
|
-
if (event.type === "message_update" && event.assistantMessageEvent?.type === "text_delta") {
|
|
139
|
-
eventQueue.push({ type: "text_delta", delta: event.assistantMessageEvent.delta, raw: event });
|
|
140
|
-
}
|
|
141
|
-
// Tool execution events
|
|
142
|
-
if (event.type === "tool_execution_start") {
|
|
143
|
-
pendingToolStarts++;
|
|
144
|
-
const cmd = String(event.args?.command || "");
|
|
145
|
-
if (event.toolName === "bash") {
|
|
146
|
-
pendingCmds.set(event.toolCallId, cmd);
|
|
147
|
-
}
|
|
148
|
-
eventQueue.push({
|
|
149
|
-
type: "tool_start",
|
|
150
|
-
toolName: event.toolName,
|
|
151
|
-
toolCallId: event.toolCallId,
|
|
152
|
-
command: cmd || undefined,
|
|
153
|
-
raw: event,
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
if (event.type === "tool_execution_end") {
|
|
157
|
-
pendingToolStarts = Math.max(0, pendingToolStarts - 1);
|
|
158
|
-
const resultStr = typeof event.result === "string"
|
|
159
|
-
? event.result
|
|
160
|
-
: JSON.stringify(event.result);
|
|
161
|
-
pendingCmds.delete(event.toolCallId);
|
|
162
|
-
eventQueue.push({
|
|
163
|
-
type: "tool_end",
|
|
164
|
-
toolName: event.toolName,
|
|
165
|
-
toolCallId: event.toolCallId,
|
|
166
|
-
result: resultStr,
|
|
167
|
-
isError: !!event.isError,
|
|
168
|
-
raw: event,
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
try {
|
|
173
|
-
const promptPromise = session.prompt(prompt);
|
|
174
|
-
// Drain the event queue while waiting for prompt to complete
|
|
175
|
-
while (true) {
|
|
176
|
-
// Yield any queued events
|
|
177
|
-
while (eventQueue.length > 0) {
|
|
178
|
-
yield eventQueue.shift();
|
|
179
|
-
}
|
|
180
|
-
// Check if prompt is done (race with a short delay)
|
|
181
|
-
const done = await Promise.race([
|
|
182
|
-
promptPromise.then(() => true),
|
|
183
|
-
new Promise((r) => setTimeout(() => r(false), 50)),
|
|
184
|
-
]);
|
|
185
|
-
if (done) {
|
|
186
|
-
// Yield remaining events
|
|
187
|
-
while (eventQueue.length > 0) {
|
|
188
|
-
yield eventQueue.shift();
|
|
189
|
-
}
|
|
190
|
-
break;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
circuitBreaker.recordSuccess(modelConfig.provider, modelConfig.model);
|
|
194
|
-
yield {
|
|
195
|
-
type: "log",
|
|
196
|
-
level: "info",
|
|
197
|
-
message: "prompt returned",
|
|
198
|
-
data: { eventCount },
|
|
199
|
-
};
|
|
200
|
-
// Emit usage
|
|
201
|
-
const sessionStats = session.getSessionStats();
|
|
202
|
-
const usage = sessionStatsToUsage(sessionStats);
|
|
203
|
-
yield { type: "usage", usage };
|
|
204
|
-
session.dispose();
|
|
205
|
-
this.session = null;
|
|
206
|
-
modelSucceeded = true;
|
|
207
|
-
anyModelSucceeded = true;
|
|
208
|
-
break;
|
|
209
|
-
}
|
|
210
|
-
catch (promptErr) {
|
|
211
|
-
const msg = String(promptErr?.message || promptErr || "");
|
|
212
|
-
if (isRateLimitError(msg)) {
|
|
213
|
-
circuitBreaker.recordFailure(modelConfig.provider, modelConfig.model);
|
|
214
|
-
yield {
|
|
215
|
-
type: "log",
|
|
216
|
-
level: "warn",
|
|
217
|
-
message: "rate limited, trying next model",
|
|
218
|
-
data: { provider: modelConfig.provider, model: modelConfig.model },
|
|
219
|
-
};
|
|
220
|
-
session.dispose();
|
|
221
|
-
this.session = null;
|
|
222
|
-
continue;
|
|
223
|
-
}
|
|
224
|
-
session.dispose();
|
|
225
|
-
this.session = null;
|
|
226
|
-
throw promptErr;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
if (modelSucceeded)
|
|
230
|
-
break;
|
|
231
|
-
if (pass < MAX_PASSES) {
|
|
232
|
-
const delayMs = Math.min(DEFAULT_BACKOFF_MS * Math.pow(2, pass), MAX_BACKOFF_MS);
|
|
233
|
-
yield {
|
|
234
|
-
type: "log",
|
|
235
|
-
level: "warn",
|
|
236
|
-
message: "all models exhausted, backing off",
|
|
237
|
-
data: { pass: pass + 1, delayMs },
|
|
238
|
-
};
|
|
239
|
-
await new Promise((r) => setTimeout(r, delayMs));
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
const allModelsExhausted = !anyModelSucceeded;
|
|
243
|
-
if (allModelsExhausted) {
|
|
244
|
-
yield {
|
|
245
|
-
type: "log",
|
|
246
|
-
level: "error",
|
|
247
|
-
message: "all models exhausted across all retry passes — every model was rate-limited or overloaded",
|
|
248
|
-
};
|
|
249
|
-
}
|
|
250
|
-
yield { type: "exit", aborted: false, allModelsExhausted };
|
|
251
|
-
}
|
|
252
|
-
dispose() {
|
|
253
|
-
if (this.session) {
|
|
254
|
-
this.session.dispose();
|
|
255
|
-
this.session = null;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
//# sourceMappingURL=pi-harness.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pi-harness.js","sourceRoot":"","sources":["../../../src/agents/harness/pi-harness.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Swappable agent harness interface.
|
|
3
|
-
*
|
|
4
|
-
* Each harness implementation (Pi, Claude CLI) converts its native event
|
|
5
|
-
* stream into a common `HarnessEvent` iterable that callers consume
|
|
6
|
-
* without knowing which harness is running.
|
|
7
|
-
*/
|
|
8
|
-
import type { TokenUsage } from "../../shared/usage.js";
|
|
9
|
-
import type { HarnessConfig, HarnessType } from "../../shared/config.js";
|
|
10
|
-
export type HarnessEvent = HarnessLogEvent | HarnessTextDeltaEvent | HarnessToolStartEvent | HarnessToolEndEvent | HarnessUsageEvent | HarnessExitEvent;
|
|
11
|
-
export interface HarnessLogEvent {
|
|
12
|
-
type: "log";
|
|
13
|
-
level: "info" | "debug" | "warn" | "error";
|
|
14
|
-
message: string;
|
|
15
|
-
data?: Record<string, any>;
|
|
16
|
-
}
|
|
17
|
-
export interface HarnessTextDeltaEvent {
|
|
18
|
-
type: "text_delta";
|
|
19
|
-
delta: string;
|
|
20
|
-
raw?: unknown;
|
|
21
|
-
}
|
|
22
|
-
export interface HarnessToolStartEvent {
|
|
23
|
-
type: "tool_start";
|
|
24
|
-
toolName: string;
|
|
25
|
-
toolCallId: string;
|
|
26
|
-
/** For bash tools, the command being run */
|
|
27
|
-
command?: string;
|
|
28
|
-
raw?: unknown;
|
|
29
|
-
}
|
|
30
|
-
export interface HarnessToolEndEvent {
|
|
31
|
-
type: "tool_end";
|
|
32
|
-
toolName: string;
|
|
33
|
-
toolCallId: string;
|
|
34
|
-
result: string;
|
|
35
|
-
isError: boolean;
|
|
36
|
-
raw?: unknown;
|
|
37
|
-
}
|
|
38
|
-
export interface HarnessUsageEvent {
|
|
39
|
-
type: "usage";
|
|
40
|
-
usage: TokenUsage;
|
|
41
|
-
}
|
|
42
|
-
export interface HarnessExitEvent {
|
|
43
|
-
type: "exit";
|
|
44
|
-
aborted: boolean;
|
|
45
|
-
allModelsExhausted: boolean;
|
|
46
|
-
}
|
|
47
|
-
export interface HarnessRunOpts {
|
|
48
|
-
cwd: string;
|
|
49
|
-
/** Environment variables passed to the agent process / SDK auth */
|
|
50
|
-
env?: Record<string, string>;
|
|
51
|
-
}
|
|
52
|
-
export interface AgentHarness {
|
|
53
|
-
run(prompt: string, opts: HarnessRunOpts): AsyncIterable<HarnessEvent>;
|
|
54
|
-
dispose(): void;
|
|
55
|
-
}
|
|
56
|
-
export type { HarnessConfig, HarnessType };
|
|
57
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agents/harness/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAMzE,MAAM,MAAM,YAAY,GACpB,eAAe,GACf,qBAAqB,GACrB,qBAAqB,GACrB,mBAAmB,GACnB,iBAAiB,GACjB,gBAAgB,CAAC;AAErB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAMD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IACvE,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agents/harness/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import type { ModelConfig } from "../shared/config.js";
|
|
2
|
-
import type { TokenUsage } from "../shared/usage.js";
|
|
3
|
-
import { ModelCircuitBreaker } from "./model-fallback.js";
|
|
4
|
-
export interface SessionLoopOpts {
|
|
5
|
-
models: ModelConfig[];
|
|
6
|
-
circuitBreaker: ModelCircuitBreaker;
|
|
7
|
-
cwd: string;
|
|
8
|
-
resourceLoader: any;
|
|
9
|
-
settingsManager: any;
|
|
10
|
-
/** Provider API key map (used by container / host-user mode) */
|
|
11
|
-
providerKeys?: Map<string, string>;
|
|
12
|
-
log: (level: string, msg: string, data?: Record<string, any>) => void;
|
|
13
|
-
onUnrecoverableAbort?: () => void;
|
|
14
|
-
}
|
|
15
|
-
export interface SessionLoopResult {
|
|
16
|
-
outputText: string;
|
|
17
|
-
usage?: TokenUsage;
|
|
18
|
-
unrecoverableErrors: number;
|
|
19
|
-
aborted: boolean;
|
|
20
|
-
allModelsExhausted: boolean;
|
|
21
|
-
/** The stop_reason from the final message_end event (e.g. "end_turn", "max_tokens"). */
|
|
22
|
-
lastStopReason?: string;
|
|
23
|
-
/** The last few tool calls with their error status, for terminal-state diagnostics. */
|
|
24
|
-
lastToolResults: Array<{
|
|
25
|
-
tool: string;
|
|
26
|
-
cmd?: string;
|
|
27
|
-
isError: boolean;
|
|
28
|
-
}>;
|
|
29
|
-
/** Tool calls that started but never completed — session ended mid-execution. */
|
|
30
|
-
orphanedToolCalls: Array<{
|
|
31
|
-
tool: string;
|
|
32
|
-
cmd?: string;
|
|
33
|
-
}>;
|
|
34
|
-
}
|
|
35
|
-
export declare function runSessionLoop(prompt: string, opts: SessionLoopOpts): Promise<SessionLoopResult>;
|
|
36
|
-
//# sourceMappingURL=session-loop.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-loop.d.ts","sourceRoot":"","sources":["../../src/agents/session-loop.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAA2C,MAAM,qBAAqB,CAAC;AAInG,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,cAAc,EAAE,mBAAmB,CAAC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,GAAG,CAAC;IACpB,eAAe,EAAE,GAAG,CAAC;IACrB,gEAAgE;IAChE,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IACtE,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,wFAAwF;IACxF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uFAAuF;IACvF,eAAe,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACzE,iFAAiF;IACjF,iBAAiB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1D;AAgBD,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,iBAAiB,CAAC,CAyM5B"}
|
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared model-fallback + session-creation + event-subscription loop.
|
|
3
|
-
*
|
|
4
|
-
* Used by container-entry.ts and cli/commands/run-agent.ts to avoid
|
|
5
|
-
* duplicating the ~150-line session loop across both entry points.
|
|
6
|
-
*/
|
|
7
|
-
import { getModel } from "@mariozechner/pi-ai";
|
|
8
|
-
import { AuthStorage, createAgentSession, SessionManager, createCodingTools, } from "@mariozechner/pi-coding-agent";
|
|
9
|
-
import { sessionStatsToUsage } from "../shared/usage.js";
|
|
10
|
-
import { selectAvailableModels, isRateLimitError } from "./model-fallback.js";
|
|
11
|
-
import { isUnrecoverableError, UNRECOVERABLE_THRESHOLD } from "../shared/errors.js";
|
|
12
|
-
import { extractTurnEndError } from "./turn-end-error.js";
|
|
13
|
-
const MAX_PASSES = 3;
|
|
14
|
-
const DEFAULT_BACKOFF_MS = 30_000;
|
|
15
|
-
const MAX_BACKOFF_MS = 300_000;
|
|
16
|
-
function extractToolResultText(result) {
|
|
17
|
-
try {
|
|
18
|
-
const parsed = JSON.parse(result);
|
|
19
|
-
if (parsed?.content?.[0]?.text)
|
|
20
|
-
return String(parsed.content[0].text);
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
// Fall back to raw result.
|
|
24
|
-
}
|
|
25
|
-
return result;
|
|
26
|
-
}
|
|
27
|
-
export async function runSessionLoop(prompt, opts) {
|
|
28
|
-
const { models, circuitBreaker, cwd, resourceLoader, settingsManager, providerKeys, log, onUnrecoverableAbort } = opts;
|
|
29
|
-
const pendingCmds = new Map();
|
|
30
|
-
let outputText = "";
|
|
31
|
-
let currentTurnText = "";
|
|
32
|
-
let eventCount = 0;
|
|
33
|
-
let unrecoverableErrors = 0;
|
|
34
|
-
let aborted = false;
|
|
35
|
-
let anyModelSucceeded = false;
|
|
36
|
-
let usage;
|
|
37
|
-
let lastStopReason;
|
|
38
|
-
const lastToolResults = [];
|
|
39
|
-
const activeToolCalls = new Map();
|
|
40
|
-
for (let pass = 0; pass <= MAX_PASSES; pass++) {
|
|
41
|
-
const availableModels = selectAvailableModels(models, circuitBreaker);
|
|
42
|
-
let modelSucceeded = false;
|
|
43
|
-
for (const modelConfig of availableModels) {
|
|
44
|
-
const llmModel = getModel(modelConfig.provider, modelConfig.model);
|
|
45
|
-
const modelThinking = modelConfig.thinkingLevel;
|
|
46
|
-
log("info", "creating agent session", { model: modelConfig.model, thinking: modelThinking });
|
|
47
|
-
const authStorage = AuthStorage.create();
|
|
48
|
-
const providerKey = providerKeys?.get(modelConfig.provider);
|
|
49
|
-
if (providerKey) {
|
|
50
|
-
authStorage.setRuntimeApiKey(modelConfig.provider, providerKey);
|
|
51
|
-
}
|
|
52
|
-
const { session } = await createAgentSession({
|
|
53
|
-
cwd,
|
|
54
|
-
model: llmModel,
|
|
55
|
-
thinkingLevel: modelThinking,
|
|
56
|
-
authStorage,
|
|
57
|
-
resourceLoader,
|
|
58
|
-
tools: createCodingTools(cwd, {}),
|
|
59
|
-
sessionManager: SessionManager.inMemory(),
|
|
60
|
-
settingsManager,
|
|
61
|
-
});
|
|
62
|
-
session.subscribe((event) => {
|
|
63
|
-
eventCount++;
|
|
64
|
-
if (event.type !== "message_update") {
|
|
65
|
-
const extra = { eventType: event.type, eventCount, raw: event };
|
|
66
|
-
if (event.type === "message_start" || event.type === "message_end") {
|
|
67
|
-
extra.role = event.role || event.message?.role;
|
|
68
|
-
extra.content = JSON.stringify(event.content || event.message?.content || []).slice(0, 500);
|
|
69
|
-
extra.stopReason = event.stopReason || event.stop_reason;
|
|
70
|
-
}
|
|
71
|
-
if (event.type === "turn_end") {
|
|
72
|
-
extra.turnResult = JSON.stringify(event).slice(0, 500);
|
|
73
|
-
const errorMessage = extractTurnEndError(event);
|
|
74
|
-
if (errorMessage)
|
|
75
|
-
extra.errorMessage = errorMessage;
|
|
76
|
-
}
|
|
77
|
-
log("debug", "conversation.event", extra);
|
|
78
|
-
// Emit context-usage at each turn_end using getContextUsage() (most reliable source)
|
|
79
|
-
if (event.type === "turn_end") {
|
|
80
|
-
try {
|
|
81
|
-
const ctx = session.getContextUsage?.();
|
|
82
|
-
if (ctx && ctx.percent != null) {
|
|
83
|
-
log("info", "context-usage", {
|
|
84
|
-
contextPercent: Math.round(ctx.percent * 10) / 10,
|
|
85
|
-
contextWindow: ctx.contextWindow,
|
|
86
|
-
contextTokens: ctx.tokens,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
catch { /* context usage not available yet */ }
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
if (event.type === "error") {
|
|
94
|
-
const err = event.error;
|
|
95
|
-
const errorMsg = err?.errorMessage
|
|
96
|
-
|| (typeof err === "string" ? err : null)
|
|
97
|
-
|| event.message
|
|
98
|
-
|| JSON.stringify(event);
|
|
99
|
-
log("error", "session error", { error: String(errorMsg), stopReason: err?.stopReason });
|
|
100
|
-
}
|
|
101
|
-
if (event.type === "message_update") {
|
|
102
|
-
if (event.assistantMessageEvent?.type === "text_delta") {
|
|
103
|
-
const delta = event.assistantMessageEvent.delta;
|
|
104
|
-
outputText += delta;
|
|
105
|
-
currentTurnText += delta;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
if (event.type === "message_end") {
|
|
109
|
-
const sr = event.stopReason || event.stop_reason;
|
|
110
|
-
if (sr)
|
|
111
|
-
lastStopReason = String(sr);
|
|
112
|
-
if (currentTurnText.trim()) {
|
|
113
|
-
log("info", "conversation.message", {
|
|
114
|
-
kind: "conversation",
|
|
115
|
-
role: event.role || event.message?.role || "assistant",
|
|
116
|
-
stopReason: sr,
|
|
117
|
-
text: currentTurnText.trim(),
|
|
118
|
-
raw: event,
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
currentTurnText = "";
|
|
122
|
-
}
|
|
123
|
-
if (event.type === "tool_execution_start") {
|
|
124
|
-
const cmd = String(event.args?.command || "");
|
|
125
|
-
pendingCmds.set(event.toolCallId, cmd);
|
|
126
|
-
activeToolCalls.set(event.toolCallId, { tool: event.toolName, cmd });
|
|
127
|
-
log("info", "conversation.tool_call", {
|
|
128
|
-
kind: "conversation",
|
|
129
|
-
tool: event.toolName,
|
|
130
|
-
toolCallId: event.toolCallId,
|
|
131
|
-
cmd,
|
|
132
|
-
raw: event,
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
if (event.type === "tool_execution_end") {
|
|
136
|
-
const resultStr = typeof event.result === "string"
|
|
137
|
-
? event.result
|
|
138
|
-
: JSON.stringify(event.result);
|
|
139
|
-
const originCmd = pendingCmds.get(event.toolCallId);
|
|
140
|
-
pendingCmds.delete(event.toolCallId);
|
|
141
|
-
const resultText = extractToolResultText(resultStr);
|
|
142
|
-
log(event.isError ? "error" : "info", "conversation.tool_result", {
|
|
143
|
-
kind: "conversation",
|
|
144
|
-
tool: event.toolName,
|
|
145
|
-
toolCallId: event.toolCallId,
|
|
146
|
-
cmd: originCmd,
|
|
147
|
-
result: resultStr,
|
|
148
|
-
resultText,
|
|
149
|
-
isError: event.isError,
|
|
150
|
-
raw: event,
|
|
151
|
-
});
|
|
152
|
-
activeToolCalls.delete(event.toolCallId);
|
|
153
|
-
lastToolResults.push({ tool: event.toolName, cmd: originCmd, isError: event.isError });
|
|
154
|
-
if (lastToolResults.length > 3)
|
|
155
|
-
lastToolResults.shift();
|
|
156
|
-
if (event.isError) {
|
|
157
|
-
if (isUnrecoverableError(resultText)) {
|
|
158
|
-
unrecoverableErrors++;
|
|
159
|
-
if (unrecoverableErrors >= UNRECOVERABLE_THRESHOLD) {
|
|
160
|
-
log("error", "Aborting: repeated auth/permission failures — check credentials");
|
|
161
|
-
aborted = true;
|
|
162
|
-
if (onUnrecoverableAbort)
|
|
163
|
-
onUnrecoverableAbort();
|
|
164
|
-
session.dispose();
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
try {
|
|
171
|
-
await session.prompt(prompt);
|
|
172
|
-
circuitBreaker.recordSuccess(modelConfig.provider, modelConfig.model);
|
|
173
|
-
log("info", "prompt returned", { eventCount, resultType: typeof undefined });
|
|
174
|
-
const sessionStats = session.getSessionStats();
|
|
175
|
-
usage = sessionStatsToUsage(sessionStats);
|
|
176
|
-
log("info", "token-usage", {
|
|
177
|
-
inputTokens: usage.inputTokens,
|
|
178
|
-
outputTokens: usage.outputTokens,
|
|
179
|
-
cacheReadTokens: usage.cacheReadTokens,
|
|
180
|
-
cacheWriteTokens: usage.cacheWriteTokens,
|
|
181
|
-
totalTokens: usage.totalTokens,
|
|
182
|
-
cost: usage.cost,
|
|
183
|
-
turnCount: usage.turnCount,
|
|
184
|
-
});
|
|
185
|
-
session.dispose();
|
|
186
|
-
modelSucceeded = true;
|
|
187
|
-
anyModelSucceeded = true;
|
|
188
|
-
break;
|
|
189
|
-
}
|
|
190
|
-
catch (promptErr) {
|
|
191
|
-
const msg = String(promptErr?.message || promptErr || "");
|
|
192
|
-
if (isRateLimitError(msg)) {
|
|
193
|
-
circuitBreaker.recordFailure(modelConfig.provider, modelConfig.model);
|
|
194
|
-
log("warn", "rate limited, trying next model", { provider: modelConfig.provider, model: modelConfig.model });
|
|
195
|
-
session.dispose();
|
|
196
|
-
continue;
|
|
197
|
-
}
|
|
198
|
-
session.dispose();
|
|
199
|
-
throw promptErr;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
if (modelSucceeded)
|
|
203
|
-
break;
|
|
204
|
-
if (pass < MAX_PASSES) {
|
|
205
|
-
const delayMs = Math.min(DEFAULT_BACKOFF_MS * Math.pow(2, pass), MAX_BACKOFF_MS);
|
|
206
|
-
log("warn", "all models exhausted, backing off", { pass: pass + 1, delayMs });
|
|
207
|
-
await new Promise((r) => setTimeout(r, delayMs));
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
const allModelsExhausted = !anyModelSucceeded && !aborted;
|
|
211
|
-
if (allModelsExhausted) {
|
|
212
|
-
log("error", "all models exhausted across all retry passes — every model was rate-limited or overloaded");
|
|
213
|
-
}
|
|
214
|
-
return { outputText, usage, unrecoverableErrors, aborted, allModelsExhausted, lastStopReason, lastToolResults, orphanedToolCalls: Array.from(activeToolCalls.values()) };
|
|
215
|
-
}
|
|
216
|
-
//# sourceMappingURL=session-loop.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-loop.js","sourceRoot":"","sources":["../../src/agents/session-loop.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,iBAAiB,GAClB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAuB,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACnG,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AA4B1D,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B,SAAS,qBAAqB,CAAC,MAAc;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,IAAqB;IAErB,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,GAAG,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC;IAEvH,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,eAAe,GAAG,EAAE,CAAC;IACzB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAC5B,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,IAAI,KAA6B,CAAC;IAClC,IAAI,cAAkC,CAAC;IACvC,MAAM,eAAe,GAA4D,EAAE,CAAC;IACpF,MAAM,eAAe,GAAG,IAAI,GAAG,EAA0C,CAAC;IAE1E,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;QAC9C,MAAM,eAAe,GAAG,qBAAqB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACtE,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,KAAK,MAAM,WAAW,IAAI,eAAe,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAe,EAAE,WAAW,CAAC,KAAY,CAAC,CAAC;YACjF,MAAM,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC;YAEhD,GAAG,CAAC,MAAM,EAAE,wBAAwB,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;YAE7F,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,WAAW,GAAG,YAAY,EAAE,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC5D,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,CAAC,gBAAgB,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAClE,CAAC;YAEC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC;gBAC3C,GAAG;gBACH,KAAK,EAAE,QAAQ;gBACf,aAAa,EAAE,aAAa;gBAC5B,WAAW;gBACX,cAAc;gBACd,KAAK,EAAE,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC;gBACjC,cAAc,EAAE,cAAc,CAAC,QAAQ,EAAE;gBACzC,eAAe;aAChB,CAAC,CAAC;YAEL,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC1B,UAAU,EAAE,CAAC;gBACb,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;oBACpC,MAAM,KAAK,GAAwB,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;oBACrF,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;wBACnE,KAAK,CAAC,IAAI,GAAI,KAAa,CAAC,IAAI,IAAK,KAAa,CAAC,OAAO,EAAE,IAAI,CAAC;wBACjE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAE,KAAa,CAAC,OAAO,IAAK,KAAa,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;wBAC9G,KAAK,CAAC,UAAU,GAAI,KAAa,CAAC,UAAU,IAAK,KAAa,CAAC,WAAW,CAAC;oBAC7E,CAAC;oBACD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;wBAC9B,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;wBACvD,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;wBAChD,IAAI,YAAY;4BAAE,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;oBACtD,CAAC;oBACD,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAC;oBAE1C,qFAAqF;oBACrF,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;wBAC9B,IAAI,CAAC;4BACH,MAAM,GAAG,GAAI,OAAe,CAAC,eAAe,EAAE,EAAE,CAAC;4BACjD,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;gCAC/B,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE;oCAC3B,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE;oCACjD,aAAa,EAAE,GAAG,CAAC,aAAa;oCAChC,aAAa,EAAE,GAAG,CAAC,MAAM;iCAC1B,CAAC,CAAC;4BACL,CAAC;wBACH,CAAC;wBAAC,MAAM,CAAC,CAAC,qCAAqC,CAAC,CAAC;oBACnD,CAAC;gBACH,CAAC;gBACD,IAAK,KAAa,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBACpC,MAAM,GAAG,GAAI,KAAa,CAAC,KAAK,CAAC;oBACjC,MAAM,QAAQ,GAAG,GAAG,EAAE,YAAY;2BAC7B,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;2BACrC,KAAa,CAAC,OAAO;2BACtB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAC3B,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;gBAC1F,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;oBACpC,IAAI,KAAK,CAAC,qBAAqB,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;wBACvD,MAAM,KAAK,GAAG,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC;wBAChD,UAAU,IAAI,KAAK,CAAC;wBACpB,eAAe,IAAI,KAAK,CAAC;oBAC3B,CAAC;gBACH,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBACjC,MAAM,EAAE,GAAI,KAAa,CAAC,UAAU,IAAK,KAAa,CAAC,WAAW,CAAC;oBACnE,IAAI,EAAE;wBAAE,cAAc,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;oBACpC,IAAI,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC;wBAC3B,GAAG,CAAC,MAAM,EAAE,sBAAsB,EAAE;4BAClC,IAAI,EAAE,cAAc;4BACpB,IAAI,EAAG,KAAa,CAAC,IAAI,IAAK,KAAa,CAAC,OAAO,EAAE,IAAI,IAAI,WAAW;4BACxE,UAAU,EAAE,EAAE;4BACd,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE;4BAC5B,GAAG,EAAE,KAAK;yBACX,CAAC,CAAC;oBACL,CAAC;oBACD,eAAe,GAAG,EAAE,CAAC;gBAEvB,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;oBAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;oBAC9C,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;oBACvC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;oBACrE,GAAG,CAAC,MAAM,EAAE,wBAAwB,EAAE;wBACpC,IAAI,EAAE,cAAc;wBACpB,IAAI,EAAE,KAAK,CAAC,QAAQ;wBACpB,UAAU,EAAE,KAAK,CAAC,UAAU;wBAC5B,GAAG;wBACH,GAAG,EAAE,KAAK;qBACX,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;oBACxC,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;wBAChD,CAAC,CAAC,KAAK,CAAC,MAAM;wBACd,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBACjC,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBACpD,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBACrC,MAAM,UAAU,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;oBAEpD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,0BAA0B,EAAE;wBAChE,IAAI,EAAE,cAAc;wBACpB,IAAI,EAAE,KAAK,CAAC,QAAQ;wBACpB,UAAU,EAAE,KAAK,CAAC,UAAU;wBAC5B,GAAG,EAAE,SAAS;wBACd,MAAM,EAAE,SAAS;wBACjB,UAAU;wBACV,OAAO,EAAE,KAAK,CAAC,OAAO;wBACtB,GAAG,EAAE,KAAK;qBACX,CAAC,CAAC;oBAEH,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBACzC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBACvF,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;wBAAE,eAAe,CAAC,KAAK,EAAE,CAAC;oBAExD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;wBAClB,IAAI,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAC;4BACrC,mBAAmB,EAAE,CAAC;4BACtB,IAAI,mBAAmB,IAAI,uBAAuB,EAAE,CAAC;gCACnD,GAAG,CAAC,OAAO,EAAE,iEAAiE,CAAC,CAAC;gCAChF,OAAO,GAAG,IAAI,CAAC;gCACf,IAAI,oBAAoB;oCAAE,oBAAoB,EAAE,CAAC;gCACjD,OAAO,CAAC,OAAO,EAAE,CAAC;4BACpB,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC7B,cAAc,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;gBAEtE,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,SAAS,EAAE,CAAC,CAAC;gBAE7E,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;gBAC/C,KAAK,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;gBAC1C,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE;oBACzB,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;oBAChC,eAAe,EAAE,KAAK,CAAC,eAAe;oBACtC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;oBACxC,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC3B,CAAC,CAAC;gBAEH,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClB,cAAc,GAAG,IAAI,CAAC;gBACtB,iBAAiB,GAAG,IAAI,CAAC;gBACzB,MAAM;YACR,CAAC;YAAC,OAAO,SAAc,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,OAAO,IAAI,SAAS,IAAI,EAAE,CAAC,CAAC;gBAC1D,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC1B,cAAc,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;oBACtE,GAAG,CAAC,MAAM,EAAE,iCAAiC,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC7G,OAAO,CAAC,OAAO,EAAE,CAAC;oBAClB,SAAS;gBACX,CAAC;gBACD,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,SAAS,CAAC;YAClB,CAAC;QACH,CAAC;QAED,IAAI,cAAc;YAAE,MAAM;QAE1B,IAAI,IAAI,GAAG,UAAU,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC;YACjF,GAAG,CAAC,MAAM,EAAE,mCAAmC,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9E,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,MAAM,kBAAkB,GAAG,CAAC,iBAAiB,IAAI,CAAC,OAAO,CAAC;IAC1D,IAAI,kBAAkB,EAAE,CAAC;QACvB,GAAG,CAAC,OAAO,EAAE,2FAA2F,CAAC,CAAC;IAC5G,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;AAC3K,CAAC"}
|