@cydm/pie 1.0.14 → 1.0.15
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/builtin/extensions/ask-user/index.js +3 -2
- package/dist/builtin/extensions/plan-mode/index.js +3 -2
- package/dist/builtin/extensions/subagent/index.js +4 -3
- package/dist/builtin/extensions/todo/index.js +3 -2
- package/dist/chunks/{chunk-EFG2MQFD.js → chunk-55RUSXEA.js} +2 -2
- package/dist/chunks/{chunk-D7NAXU7F.js → chunk-5DA2D3K2.js} +79 -1097
- package/dist/chunks/{chunk-LF5Q7BVU.js → chunk-R5LYKDKA.js} +56 -5
- package/dist/chunks/chunk-VE2HDCNB.js +1029 -0
- package/dist/chunks/{src-LZC56DRG.js → src-6WPNVGT2.js} +2 -1
- package/dist/chunks/test-stream-ZSKNLUEJ.js +94 -0
- package/dist/cli.js +207 -33
- package/package.json +1 -1
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { createRequire as __createRequire } from "node:module"; const require = __createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
EventStream
|
|
4
|
+
} from "./chunk-5DA2D3K2.js";
|
|
5
|
+
import "./chunk-TG2EQLX2.js";
|
|
6
|
+
|
|
7
|
+
// src/app/test-stream.ts
|
|
8
|
+
function createAssistantMessage(model, text, stopReason = "stop", errorMessage) {
|
|
9
|
+
return {
|
|
10
|
+
role: "assistant",
|
|
11
|
+
content: [{ type: "text", text }],
|
|
12
|
+
api: model.api,
|
|
13
|
+
provider: model.provider,
|
|
14
|
+
model: model.id,
|
|
15
|
+
usage: {
|
|
16
|
+
input: 1,
|
|
17
|
+
output: text ? 1 : 0,
|
|
18
|
+
cacheRead: 0,
|
|
19
|
+
cacheWrite: 0,
|
|
20
|
+
totalTokens: text ? 2 : 1,
|
|
21
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 }
|
|
22
|
+
},
|
|
23
|
+
stopReason,
|
|
24
|
+
errorMessage,
|
|
25
|
+
timestamp: Date.now()
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function parseMockStreamSequence(value) {
|
|
29
|
+
const parsed = JSON.parse(value);
|
|
30
|
+
if (!Array.isArray(parsed)) {
|
|
31
|
+
throw new Error("PIE_TEST_MOCK_STREAM_SEQUENCE must be a JSON array");
|
|
32
|
+
}
|
|
33
|
+
return parsed.map((item) => {
|
|
34
|
+
if (!item || typeof item !== "object") {
|
|
35
|
+
throw new Error("PIE_TEST_MOCK_STREAM_SEQUENCE entries must be objects");
|
|
36
|
+
}
|
|
37
|
+
const record = item;
|
|
38
|
+
if (record.type === "error" && typeof record.error === "string") {
|
|
39
|
+
return {
|
|
40
|
+
type: "error",
|
|
41
|
+
error: record.error,
|
|
42
|
+
partialText: typeof record.partialText === "string" ? record.partialText : void 0
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
if (record.type === "text" && typeof record.text === "string") {
|
|
46
|
+
return { type: "text", text: record.text };
|
|
47
|
+
}
|
|
48
|
+
throw new Error("PIE_TEST_MOCK_STREAM_SEQUENCE entries must be text or error steps");
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function createTestStreamFnFromSequenceEnv(value = process.env.PIE_TEST_MOCK_STREAM_SEQUENCE) {
|
|
52
|
+
if (!value) {
|
|
53
|
+
return void 0;
|
|
54
|
+
}
|
|
55
|
+
const steps = parseMockStreamSequence(value);
|
|
56
|
+
let callIndex = 0;
|
|
57
|
+
return async (model) => {
|
|
58
|
+
const step = steps[Math.min(callIndex, steps.length - 1)];
|
|
59
|
+
callIndex += 1;
|
|
60
|
+
const stream = new EventStream(
|
|
61
|
+
(event) => event.type === "done" || event.type === "error",
|
|
62
|
+
(event) => event.type === "done" ? event.message : event.error
|
|
63
|
+
);
|
|
64
|
+
queueMicrotask(() => {
|
|
65
|
+
if (!step) {
|
|
66
|
+
const message2 = createAssistantMessage(model, "");
|
|
67
|
+
stream.push({ type: "done", reason: "stop", message: message2 });
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (step.type === "error") {
|
|
71
|
+
if (step.partialText) {
|
|
72
|
+
const partial = createAssistantMessage(model, step.partialText);
|
|
73
|
+
stream.push({ type: "start", partial });
|
|
74
|
+
stream.push({ type: "text_start", contentIndex: 0, partial });
|
|
75
|
+
stream.push({ type: "text_delta", contentIndex: 0, delta: step.partialText, partial });
|
|
76
|
+
stream.push({ type: "text_end", contentIndex: 0, content: step.partialText, partial });
|
|
77
|
+
}
|
|
78
|
+
const error = createAssistantMessage(model, "", "error", step.error);
|
|
79
|
+
stream.push({ type: "error", reason: "error", error });
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const message = createAssistantMessage(model, step.text);
|
|
83
|
+
stream.push({ type: "start", partial: message });
|
|
84
|
+
stream.push({ type: "text_start", contentIndex: 0, partial: message });
|
|
85
|
+
stream.push({ type: "text_delta", contentIndex: 0, delta: step.text, partial: message });
|
|
86
|
+
stream.push({ type: "text_end", contentIndex: 0, content: step.text, partial: message });
|
|
87
|
+
stream.push({ type: "done", reason: "stop", message });
|
|
88
|
+
});
|
|
89
|
+
return stream;
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
export {
|
|
93
|
+
createTestStreamFnFromSequenceEnv
|
|
94
|
+
};
|
package/dist/cli.js
CHANGED
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
getSettingsPath,
|
|
15
15
|
getThemesDir,
|
|
16
16
|
migrateConfigFromAgentDir
|
|
17
|
-
} from "./chunks/chunk-
|
|
17
|
+
} from "./chunks/chunk-55RUSXEA.js";
|
|
18
18
|
import {
|
|
19
19
|
AGENTS_CONTEXT_FILE_NAME,
|
|
20
20
|
AgentSessionController,
|
|
@@ -52,7 +52,8 @@ import {
|
|
|
52
52
|
selectToolsForRuntimePolicy,
|
|
53
53
|
shouldPreserveExecutionStateForUserText,
|
|
54
54
|
supersedeExecutionState
|
|
55
|
-
} from "./chunks/chunk-
|
|
55
|
+
} from "./chunks/chunk-R5LYKDKA.js";
|
|
56
|
+
import "./chunks/chunk-VE2HDCNB.js";
|
|
56
57
|
import {
|
|
57
58
|
Deref,
|
|
58
59
|
Errors,
|
|
@@ -86,7 +87,7 @@ import {
|
|
|
86
87
|
setLogger,
|
|
87
88
|
sortToolModelCandidatesByCapability,
|
|
88
89
|
type_exports
|
|
89
|
-
} from "./chunks/chunk-
|
|
90
|
+
} from "./chunks/chunk-5DA2D3K2.js";
|
|
90
91
|
import {
|
|
91
92
|
resolveCliProjectRoot
|
|
92
93
|
} from "./chunks/chunk-NTYHFBUA.js";
|
|
@@ -64043,6 +64044,34 @@ function buildCliSystemPrompt(options) {
|
|
|
64043
64044
|
].filter(Boolean).join("\n\n");
|
|
64044
64045
|
}
|
|
64045
64046
|
|
|
64047
|
+
// src/runtime/retry-policy.ts
|
|
64048
|
+
var TRANSIENT_MODEL_ERROR_PATTERN = /overloaded|rate.?limit|too many requests|429|500|502|503|504|service.?unavailable|server error|internal error|connection.?error|connection.?refused|other side closed|fetch failed|upstream.?connect|reset before headers|terminated|retry delay|sse stream aborted|sse stream closed before end|sse stream ended before response completed/i;
|
|
64049
|
+
var USER_ABORT_PATTERN = /request was aborted/i;
|
|
64050
|
+
var CLI_RETRY_MAX_RETRIES = 3;
|
|
64051
|
+
var CLI_RETRY_BASE_DELAY_MS = 2e3;
|
|
64052
|
+
function isCliContextOverflowError(errorMessage3) {
|
|
64053
|
+
return /context length exceeded|context_length_exceeded|maximum context length|maximum context size|too many tokens|input.*too long|prompt.*too long|context window|token limit exceeded|exceeds.{0,20}context/i.test(
|
|
64054
|
+
errorMessage3
|
|
64055
|
+
);
|
|
64056
|
+
}
|
|
64057
|
+
function isCliRetryableError(errorMessage3) {
|
|
64058
|
+
if (isCliContextOverflowError(errorMessage3)) {
|
|
64059
|
+
return false;
|
|
64060
|
+
}
|
|
64061
|
+
if (USER_ABORT_PATTERN.test(errorMessage3)) {
|
|
64062
|
+
return false;
|
|
64063
|
+
}
|
|
64064
|
+
return TRANSIENT_MODEL_ERROR_PATTERN.test(errorMessage3);
|
|
64065
|
+
}
|
|
64066
|
+
function getCliRetryBaseDelayMs() {
|
|
64067
|
+
const override = process.env.PIE_TEST_CLI_RETRY_BASE_DELAY_MS;
|
|
64068
|
+
if (!override) {
|
|
64069
|
+
return CLI_RETRY_BASE_DELAY_MS;
|
|
64070
|
+
}
|
|
64071
|
+
const parsed = Number(override);
|
|
64072
|
+
return Number.isFinite(parsed) && parsed >= 0 ? parsed : CLI_RETRY_BASE_DELAY_MS;
|
|
64073
|
+
}
|
|
64074
|
+
|
|
64046
64075
|
// src/runtime/interactive-context-ui.ts
|
|
64047
64076
|
function calculateContextUsage(host) {
|
|
64048
64077
|
const messages = host.agent?.state.messages ?? [];
|
|
@@ -64266,9 +64295,7 @@ function setupAutocomplete(host) {
|
|
|
64266
64295
|
host.editor.setAutocompleteProvider(provider);
|
|
64267
64296
|
}
|
|
64268
64297
|
function isContextOverflowError(errorMessage3) {
|
|
64269
|
-
return
|
|
64270
|
-
errorMessage3
|
|
64271
|
-
);
|
|
64298
|
+
return isCliContextOverflowError(errorMessage3);
|
|
64272
64299
|
}
|
|
64273
64300
|
function shouldAutoCompact(host, contextTokens, contextWindow) {
|
|
64274
64301
|
if (!host.options.settingsManager.getAutoCompactEnabled()) return false;
|
|
@@ -64277,9 +64304,7 @@ function shouldAutoCompact(host, contextTokens, contextWindow) {
|
|
|
64277
64304
|
return contextTokens > contextWindow - reserveTokens;
|
|
64278
64305
|
}
|
|
64279
64306
|
function isRetryableError(errorMessage3) {
|
|
64280
|
-
return
|
|
64281
|
-
errorMessage3
|
|
64282
|
-
);
|
|
64307
|
+
return isCliRetryableError(errorMessage3);
|
|
64283
64308
|
}
|
|
64284
64309
|
function isInvalidFileReferenceError(errorMessage3) {
|
|
64285
64310
|
return /not the owner of this file|owner of this file|invalid_authentication_error/i.test(
|
|
@@ -64778,9 +64803,9 @@ function createInteractiveAgentSessionController(host) {
|
|
|
64778
64803
|
},
|
|
64779
64804
|
getAutoContinueMessage: () => host.getTodoAutoContinueMessage(),
|
|
64780
64805
|
retry: {
|
|
64781
|
-
isRetryableError: (errorMessage3) => !host._isContextOverflowError(errorMessage3) &&
|
|
64782
|
-
maxRetries:
|
|
64783
|
-
baseDelayMs:
|
|
64806
|
+
isRetryableError: (errorMessage3) => !host._isContextOverflowError(errorMessage3) && isCliRetryableError(errorMessage3),
|
|
64807
|
+
maxRetries: CLI_RETRY_MAX_RETRIES,
|
|
64808
|
+
baseDelayMs: getCliRetryBaseDelayMs()
|
|
64784
64809
|
},
|
|
64785
64810
|
compaction: {
|
|
64786
64811
|
compact: async ({ messages }) => createAutoCompactionResult(host, messages)
|
|
@@ -66739,7 +66764,7 @@ var InteractiveMode = class {
|
|
|
66739
66764
|
if (savedLevel) {
|
|
66740
66765
|
this.thinkingLevel = savedLevel;
|
|
66741
66766
|
}
|
|
66742
|
-
const { Agent } = await import("./chunks/src-
|
|
66767
|
+
const { Agent } = await import("./chunks/src-6WPNVGT2.js");
|
|
66743
66768
|
const activeSession = this.sessionManager.getActiveSession();
|
|
66744
66769
|
this.agent = new Agent({
|
|
66745
66770
|
initialState: {
|
|
@@ -67303,6 +67328,12 @@ function createNoOpExtensionUIContext() {
|
|
|
67303
67328
|
custom: async () => void 0
|
|
67304
67329
|
};
|
|
67305
67330
|
}
|
|
67331
|
+
function readAssistantError(message) {
|
|
67332
|
+
if (message.role !== "assistant") {
|
|
67333
|
+
return "";
|
|
67334
|
+
}
|
|
67335
|
+
return message.errorMessage || "assistant response failed";
|
|
67336
|
+
}
|
|
67306
67337
|
async function loadPrintModeExtensions(params) {
|
|
67307
67338
|
const uiContext = createNoOpExtensionUIContext();
|
|
67308
67339
|
const executionState = new ExecutionStateManager();
|
|
@@ -67400,7 +67431,7 @@ async function runPrintMode(params) {
|
|
|
67400
67431
|
`);
|
|
67401
67432
|
console.log("Assistant: ");
|
|
67402
67433
|
}
|
|
67403
|
-
const { Agent: AgentClass } = await import("./chunks/src-
|
|
67434
|
+
const { Agent: AgentClass } = await import("./chunks/src-6WPNVGT2.js");
|
|
67404
67435
|
let agent;
|
|
67405
67436
|
const printModeExtensions = await loadPrintModeExtensions({
|
|
67406
67437
|
cwd: runtime.cwd,
|
|
@@ -67437,8 +67468,10 @@ async function runPrintMode(params) {
|
|
|
67437
67468
|
tools: printModeTools,
|
|
67438
67469
|
thinkingLevel: "off"
|
|
67439
67470
|
},
|
|
67440
|
-
apiKey: runtime.apiKey
|
|
67471
|
+
apiKey: runtime.apiKey,
|
|
67472
|
+
streamFn: params.streamFn
|
|
67441
67473
|
});
|
|
67474
|
+
const sessionTrace = new SessionTraceWriter(runtime.paths.sessionsDir, runtime.sessionManager);
|
|
67442
67475
|
const agentSessionController = new AgentSessionController({
|
|
67443
67476
|
agent,
|
|
67444
67477
|
sessionManager: runtime.sessionManager,
|
|
@@ -67458,9 +67491,25 @@ async function runPrintMode(params) {
|
|
|
67458
67491
|
systemPrompt: result.systemPrompt ?? context.baseSystemPrompt ?? baseSystemPrompt,
|
|
67459
67492
|
messages: result.messages?.length ? [...context.messages, ...result.messages] : context.messages
|
|
67460
67493
|
};
|
|
67494
|
+
},
|
|
67495
|
+
retry: {
|
|
67496
|
+
isRetryableError: isCliRetryableError,
|
|
67497
|
+
maxRetries: CLI_RETRY_MAX_RETRIES,
|
|
67498
|
+
baseDelayMs: getCliRetryBaseDelayMs()
|
|
67499
|
+
},
|
|
67500
|
+
onEvent: (event) => {
|
|
67501
|
+
sessionTrace.noteRuntimeEvent(event.type, event);
|
|
67502
|
+
if (event.type === "retry_scheduled") {
|
|
67503
|
+
console.error(`Transient request error: ${event.errorMessage}. Retrying in ${event.delayMs / 1e3}s (${event.attempt}/${event.maxRetries}).`);
|
|
67504
|
+
} else if (event.type === "retry_start") {
|
|
67505
|
+
console.error(`Retrying request (${event.attempt}/${event.maxRetries})...`);
|
|
67506
|
+
} else if (event.type === "retry_succeeded") {
|
|
67507
|
+
console.error(`Retry succeeded after ${event.attempts} attempt${event.attempts === 1 ? "" : "s"}.`);
|
|
67508
|
+
} else if (event.type === "retry_exhausted") {
|
|
67509
|
+
console.error(`Request failed after ${event.maxRetries} retries: ${event.errorMessage}`);
|
|
67510
|
+
}
|
|
67461
67511
|
}
|
|
67462
67512
|
});
|
|
67463
|
-
const sessionTrace = new SessionTraceWriter(runtime.paths.sessionsDir, runtime.sessionManager);
|
|
67464
67513
|
sessionTrace.notePendingUserText(params.initialPrompt);
|
|
67465
67514
|
attachAgentEventsToSessionTrace({ agent, trace: sessionTrace });
|
|
67466
67515
|
agent.setTools(wrapToolsWithExtensions(agent.state.tools, printModeExtensions.runner));
|
|
@@ -67470,19 +67519,37 @@ async function runPrintMode(params) {
|
|
|
67470
67519
|
await agentSessionController.prompt(params.initialPrompt, { source: "print" });
|
|
67471
67520
|
sessionTrace.noteDispatchSettled({ mode: "print" });
|
|
67472
67521
|
sessionTrace.noteWaitForIdleStart({ mode: "print" });
|
|
67473
|
-
await agentSessionController.
|
|
67522
|
+
await agentSessionController.waitForSettled();
|
|
67474
67523
|
sessionTrace.noteWaitForIdleSettled({ mode: "print" });
|
|
67475
67524
|
const messages = agent.state.messages;
|
|
67476
67525
|
const lastMessage = messages[messages.length - 1];
|
|
67477
67526
|
let assistantText = "";
|
|
67527
|
+
let assistantError = "";
|
|
67478
67528
|
if (lastMessage?.role === "assistant") {
|
|
67479
67529
|
for (const content of lastMessage.content) {
|
|
67480
67530
|
if (typeof content === "object" && "type" in content && content.type === "text" && "text" in content) {
|
|
67481
67531
|
assistantText += content.text;
|
|
67482
67532
|
}
|
|
67483
67533
|
}
|
|
67534
|
+
if (lastMessage.stopReason === "error" || lastMessage.stopReason === "aborted") {
|
|
67535
|
+
assistantError = readAssistantError(lastMessage);
|
|
67536
|
+
}
|
|
67484
67537
|
}
|
|
67485
|
-
if (
|
|
67538
|
+
if (assistantError) {
|
|
67539
|
+
process.exitCode = 1;
|
|
67540
|
+
if (params.jsonOutput) {
|
|
67541
|
+
console.log(
|
|
67542
|
+
JSON.stringify({
|
|
67543
|
+
ok: false,
|
|
67544
|
+
error: assistantError,
|
|
67545
|
+
sessionId: runtime.sessionManager.getActiveSession()?.id,
|
|
67546
|
+
provider: runtime.provider,
|
|
67547
|
+
modelId: runtime.modelId
|
|
67548
|
+
})
|
|
67549
|
+
);
|
|
67550
|
+
}
|
|
67551
|
+
console.error("Error:", assistantError);
|
|
67552
|
+
} else if (params.jsonOutput) {
|
|
67486
67553
|
console.log(
|
|
67487
67554
|
JSON.stringify({
|
|
67488
67555
|
ok: true,
|
|
@@ -67606,6 +67673,13 @@ function assistantTextFromAgent(agent) {
|
|
|
67606
67673
|
}
|
|
67607
67674
|
return text;
|
|
67608
67675
|
}
|
|
67676
|
+
function assistantErrorFromAgent(agent) {
|
|
67677
|
+
const messages = agent?.state.messages ?? [];
|
|
67678
|
+
const lastMessage = messages[messages.length - 1];
|
|
67679
|
+
if (lastMessage?.role !== "assistant") return "";
|
|
67680
|
+
if (lastMessage.stopReason !== "error" && lastMessage.stopReason !== "aborted") return "";
|
|
67681
|
+
return lastMessage.errorMessage || "assistant response failed";
|
|
67682
|
+
}
|
|
67609
67683
|
function readProgressText(value) {
|
|
67610
67684
|
return typeof value === "string" ? value : "";
|
|
67611
67685
|
}
|
|
@@ -67712,6 +67786,7 @@ async function runJsonEventsMode(params) {
|
|
|
67712
67786
|
let disposeAgentSubscription;
|
|
67713
67787
|
let disposeSemanticSubscription;
|
|
67714
67788
|
let trace;
|
|
67789
|
+
let lastRetryEvent;
|
|
67715
67790
|
const noProgressTimeoutMs = Number(process.env.PIE_JSON_EVENTS_NO_PROGRESS_MS || 6e5);
|
|
67716
67791
|
const mockResponseDelayMs = Number(process.env.PIE_TEST_MOCK_RESPONSE_DELAY_MS || 0);
|
|
67717
67792
|
writeEvent({ type: "agent.ready", sessionId });
|
|
@@ -67729,9 +67804,11 @@ async function runJsonEventsMode(params) {
|
|
|
67729
67804
|
activeTurn.lastActivityAt = Date.now();
|
|
67730
67805
|
}
|
|
67731
67806
|
}
|
|
67732
|
-
function display(chunk) {
|
|
67807
|
+
function display(chunk, options) {
|
|
67733
67808
|
if (!activeTurn || !chunk) return;
|
|
67734
|
-
|
|
67809
|
+
if (options?.appendToSummary !== false) {
|
|
67810
|
+
activeTurn.summary += chunk;
|
|
67811
|
+
}
|
|
67735
67812
|
touch();
|
|
67736
67813
|
writeEvent({
|
|
67737
67814
|
type: "display.output",
|
|
@@ -67747,7 +67824,7 @@ async function runJsonEventsMode(params) {
|
|
|
67747
67824
|
turn.finalized = true;
|
|
67748
67825
|
switch (kind) {
|
|
67749
67826
|
case "completed":
|
|
67750
|
-
writeEvent({ type: "turn.completed", sessionId: turn.sessionId, turnId: turn.turnId, summary: turn.summary.trim() });
|
|
67827
|
+
writeEvent({ type: "turn.completed", sessionId: turn.sessionId, turnId: turn.turnId, summary: (detail ?? turn.summary).trim() });
|
|
67751
67828
|
break;
|
|
67752
67829
|
case "failed":
|
|
67753
67830
|
writeEvent({ type: "turn.failed", sessionId: turn.sessionId, turnId: turn.turnId, error: detail || "turn failed" });
|
|
@@ -67783,7 +67860,7 @@ async function runJsonEventsMode(params) {
|
|
|
67783
67860
|
const progressText = extractJsonEventsToolProgressText(event.partialResult);
|
|
67784
67861
|
if (progressText) {
|
|
67785
67862
|
display(progressText.endsWith("\n") ? progressText : `${progressText}
|
|
67786
|
-
|
|
67863
|
+
`, { appendToSummary: false });
|
|
67787
67864
|
}
|
|
67788
67865
|
}
|
|
67789
67866
|
break;
|
|
@@ -67804,6 +67881,70 @@ async function runJsonEventsMode(params) {
|
|
|
67804
67881
|
break;
|
|
67805
67882
|
}
|
|
67806
67883
|
}
|
|
67884
|
+
function handleControllerEvent(event) {
|
|
67885
|
+
trace?.noteRuntimeEvent(event.type, event);
|
|
67886
|
+
if (!activeTurn || activeTurn.finalized) return;
|
|
67887
|
+
if (event.type === "retry_scheduled") {
|
|
67888
|
+
lastRetryEvent = {
|
|
67889
|
+
attempt: event.attempt,
|
|
67890
|
+
maxRetries: event.maxRetries,
|
|
67891
|
+
delayMs: event.delayMs,
|
|
67892
|
+
error: event.errorMessage
|
|
67893
|
+
};
|
|
67894
|
+
touch();
|
|
67895
|
+
writeEvent({
|
|
67896
|
+
type: "turn.retry.scheduled",
|
|
67897
|
+
sessionId: activeTurn.sessionId,
|
|
67898
|
+
turnId: activeTurn.turnId,
|
|
67899
|
+
attempt: event.attempt,
|
|
67900
|
+
maxRetries: event.maxRetries,
|
|
67901
|
+
delayMs: event.delayMs,
|
|
67902
|
+
error: event.errorMessage
|
|
67903
|
+
});
|
|
67904
|
+
} else if (event.type === "retry_start") {
|
|
67905
|
+
activeTurn.summary = "";
|
|
67906
|
+
lastRetryEvent = {
|
|
67907
|
+
attempt: event.attempt,
|
|
67908
|
+
maxRetries: event.maxRetries,
|
|
67909
|
+
delayMs: lastRetryEvent?.delayMs,
|
|
67910
|
+
error: lastRetryEvent?.error
|
|
67911
|
+
};
|
|
67912
|
+
touch();
|
|
67913
|
+
writeEvent({
|
|
67914
|
+
type: "turn.retry.started",
|
|
67915
|
+
sessionId: activeTurn.sessionId,
|
|
67916
|
+
turnId: activeTurn.turnId,
|
|
67917
|
+
attempt: event.attempt,
|
|
67918
|
+
maxRetries: event.maxRetries,
|
|
67919
|
+
delayMs: lastRetryEvent.delayMs,
|
|
67920
|
+
error: lastRetryEvent.error
|
|
67921
|
+
});
|
|
67922
|
+
} else if (event.type === "retry_succeeded") {
|
|
67923
|
+
touch();
|
|
67924
|
+
writeEvent({
|
|
67925
|
+
type: "turn.retry.succeeded",
|
|
67926
|
+
sessionId: activeTurn.sessionId,
|
|
67927
|
+
turnId: activeTurn.turnId,
|
|
67928
|
+
attempt: event.attempts,
|
|
67929
|
+
maxRetries: lastRetryEvent?.maxRetries ?? CLI_RETRY_MAX_RETRIES,
|
|
67930
|
+
delayMs: lastRetryEvent?.delayMs,
|
|
67931
|
+
error: lastRetryEvent?.error
|
|
67932
|
+
});
|
|
67933
|
+
lastRetryEvent = void 0;
|
|
67934
|
+
} else if (event.type === "retry_exhausted") {
|
|
67935
|
+
touch();
|
|
67936
|
+
writeEvent({
|
|
67937
|
+
type: "turn.retry.exhausted",
|
|
67938
|
+
sessionId: activeTurn.sessionId,
|
|
67939
|
+
turnId: activeTurn.turnId,
|
|
67940
|
+
attempt: lastRetryEvent?.attempt ?? event.maxRetries,
|
|
67941
|
+
maxRetries: event.maxRetries,
|
|
67942
|
+
delayMs: lastRetryEvent?.delayMs,
|
|
67943
|
+
error: event.errorMessage
|
|
67944
|
+
});
|
|
67945
|
+
lastRetryEvent = void 0;
|
|
67946
|
+
}
|
|
67947
|
+
}
|
|
67807
67948
|
async function ensureRuntime() {
|
|
67808
67949
|
if (params.mockResponse !== void 0 || controller) return;
|
|
67809
67950
|
const runtime = params.runtime;
|
|
@@ -67813,7 +67954,7 @@ async function runJsonEventsMode(params) {
|
|
|
67813
67954
|
if (runtime.initialModel.unconfigured) {
|
|
67814
67955
|
return;
|
|
67815
67956
|
}
|
|
67816
|
-
const { Agent: AgentClass } = await import("./chunks/src-
|
|
67957
|
+
const { Agent: AgentClass } = await import("./chunks/src-6WPNVGT2.js");
|
|
67817
67958
|
const jsonModeExtensions = await loadJsonModeExtensions({ runtime, getAgent: () => agent });
|
|
67818
67959
|
const tools = [...runtime.tools, ...jsonModeExtensions.extensionTools];
|
|
67819
67960
|
recordCliCompositionStep(runtime.compositionTrace, {
|
|
@@ -67840,7 +67981,8 @@ async function runJsonEventsMode(params) {
|
|
|
67840
67981
|
tools,
|
|
67841
67982
|
thinkingLevel: "off"
|
|
67842
67983
|
},
|
|
67843
|
-
apiKey: runtime.apiKey
|
|
67984
|
+
apiKey: runtime.apiKey,
|
|
67985
|
+
streamFn: params.streamFn
|
|
67844
67986
|
});
|
|
67845
67987
|
controller = new AgentSessionController({
|
|
67846
67988
|
agent,
|
|
@@ -67858,7 +68000,13 @@ async function runJsonEventsMode(params) {
|
|
|
67858
68000
|
systemPrompt: result?.systemPrompt ?? context.baseSystemPrompt ?? baseSystemPrompt,
|
|
67859
68001
|
messages: result?.messages?.length ? [...context.messages, ...result.messages] : context.messages
|
|
67860
68002
|
};
|
|
67861
|
-
}
|
|
68003
|
+
},
|
|
68004
|
+
retry: {
|
|
68005
|
+
isRetryableError: isCliRetryableError,
|
|
68006
|
+
maxRetries: CLI_RETRY_MAX_RETRIES,
|
|
68007
|
+
baseDelayMs: getCliRetryBaseDelayMs()
|
|
68008
|
+
},
|
|
68009
|
+
onEvent: handleControllerEvent
|
|
67862
68010
|
});
|
|
67863
68011
|
trace = new SessionTraceWriter(runtime.paths.sessionsDir, runtime.sessionManager);
|
|
67864
68012
|
attachAgentEventsToSessionTrace({ agent, trace });
|
|
@@ -67938,7 +68086,7 @@ async function runJsonEventsMode(params) {
|
|
|
67938
68086
|
if (!turn2 || turn2.finalized) return;
|
|
67939
68087
|
if (Date.now() - turn2.lastActivityAt >= noProgressTimeoutMs) {
|
|
67940
68088
|
turn2.stalled = true;
|
|
67941
|
-
|
|
68089
|
+
controller?.abort();
|
|
67942
68090
|
finalize("stalled", "no_progress_timeout");
|
|
67943
68091
|
}
|
|
67944
68092
|
}, Math.max(1e3, Math.min(noProgressTimeoutMs, 1e4)));
|
|
@@ -67949,14 +68097,23 @@ async function runJsonEventsMode(params) {
|
|
|
67949
68097
|
await controller.prompt(message.prompt, { source: "json-events" });
|
|
67950
68098
|
trace?.noteDispatchSettled({ mode: "json-events" });
|
|
67951
68099
|
trace?.noteWaitForIdleStart({ mode: "json-events" });
|
|
67952
|
-
await controller.
|
|
68100
|
+
await controller.waitForSettled();
|
|
67953
68101
|
trace?.noteWaitForIdleSettled({ mode: "json-events" });
|
|
67954
68102
|
if (!activeTurn?.finalized) {
|
|
67955
|
-
const
|
|
68103
|
+
const finalError = assistantErrorFromAgent(agent);
|
|
68104
|
+
if (activeTurn?.interrupted) {
|
|
68105
|
+
finalize("cancelled", "user_interrupt");
|
|
68106
|
+
return;
|
|
68107
|
+
}
|
|
68108
|
+
if (finalError) {
|
|
68109
|
+
finalize("failed", finalError);
|
|
68110
|
+
return;
|
|
68111
|
+
}
|
|
68112
|
+
const text = assistantTextFromAgent(agent);
|
|
67956
68113
|
if (!activeTurn?.summary && text) {
|
|
67957
68114
|
display(text);
|
|
67958
68115
|
}
|
|
67959
|
-
finalize(
|
|
68116
|
+
finalize("completed", text || activeTurn?.summary.trim());
|
|
67960
68117
|
}
|
|
67961
68118
|
} catch (error) {
|
|
67962
68119
|
const messageText = error instanceof Error ? error.message : String(error);
|
|
@@ -68000,7 +68157,7 @@ async function runJsonEventsMode(params) {
|
|
|
68000
68157
|
return;
|
|
68001
68158
|
}
|
|
68002
68159
|
activeTurn.interrupted = true;
|
|
68003
|
-
|
|
68160
|
+
controller?.abort();
|
|
68004
68161
|
if (params.mockResponse !== void 0) {
|
|
68005
68162
|
finalize("cancelled", message.reason || "user_interrupt");
|
|
68006
68163
|
activeTurn = null;
|
|
@@ -68018,7 +68175,7 @@ async function runJsonEventsMode(params) {
|
|
|
68018
68175
|
if (message.type === "shutdown") {
|
|
68019
68176
|
if (activeTurn && !activeTurn.finalized) {
|
|
68020
68177
|
activeTurn.interrupted = true;
|
|
68021
|
-
|
|
68178
|
+
controller?.abort();
|
|
68022
68179
|
finalize("cancelled", message.reason || "shutdown");
|
|
68023
68180
|
}
|
|
68024
68181
|
break;
|
|
@@ -68198,6 +68355,13 @@ async function runWithJsonEventsConsoleIsolation(fn) {
|
|
|
68198
68355
|
console.debug = originalDebug;
|
|
68199
68356
|
}
|
|
68200
68357
|
}
|
|
68358
|
+
async function createCliTestStreamFnFromEnv() {
|
|
68359
|
+
if (!process.env.PIE_TEST_MOCK_STREAM_SEQUENCE) {
|
|
68360
|
+
return void 0;
|
|
68361
|
+
}
|
|
68362
|
+
const { createTestStreamFnFromSequenceEnv } = await import("./chunks/test-stream-ZSKNLUEJ.js");
|
|
68363
|
+
return createTestStreamFnFromSequenceEnv();
|
|
68364
|
+
}
|
|
68201
68365
|
async function startChat(initialPrompt, testCommand) {
|
|
68202
68366
|
const rawOutput = process.argv.includes("--raw-output");
|
|
68203
68367
|
const jsonOutput = process.argv.includes("--json-output");
|
|
@@ -68227,7 +68391,11 @@ async function startChat(initialPrompt, testCommand) {
|
|
|
68227
68391
|
}
|
|
68228
68392
|
throw error;
|
|
68229
68393
|
}
|
|
68230
|
-
await runJsonEventsMode({
|
|
68394
|
+
await runJsonEventsMode({
|
|
68395
|
+
runtime: runtime2,
|
|
68396
|
+
explicitSessionId,
|
|
68397
|
+
streamFn: await createCliTestStreamFnFromEnv()
|
|
68398
|
+
});
|
|
68231
68399
|
});
|
|
68232
68400
|
return;
|
|
68233
68401
|
}
|
|
@@ -68256,7 +68424,13 @@ async function startChat(initialPrompt, testCommand) {
|
|
|
68256
68424
|
throw error;
|
|
68257
68425
|
}
|
|
68258
68426
|
if (initialPrompt) {
|
|
68259
|
-
await runPrintMode({
|
|
68427
|
+
await runPrintMode({
|
|
68428
|
+
initialPrompt,
|
|
68429
|
+
rawOutput,
|
|
68430
|
+
jsonOutput,
|
|
68431
|
+
runtime,
|
|
68432
|
+
streamFn: await createCliTestStreamFnFromEnv()
|
|
68433
|
+
});
|
|
68260
68434
|
process.exit(process.exitCode ?? 0);
|
|
68261
68435
|
return;
|
|
68262
68436
|
}
|