@linnlabs/linnkit 0.9.0 → 0.10.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/CHANGELOG.md +13 -0
- package/bin/linnkit.cjs +7 -0
- package/dist/{agentSpec-EkmviZjy.d.cts → agentSpec-Du4Iye0q.d.cts} +16 -1
- package/dist/{agentSpec-EkmviZjy.d.ts → agentSpec-Du4Iye0q.d.ts} +16 -1
- package/dist/cli.cjs +118 -65
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +118 -65
- package/dist/cli.js.map +1 -1
- package/dist/context-manager.cjs +234 -32
- package/dist/context-manager.cjs.map +1 -1
- package/dist/context-manager.d.cts +52 -15
- package/dist/context-manager.d.ts +52 -15
- package/dist/context-manager.js +234 -33
- package/dist/context-manager.js.map +1 -1
- package/dist/{context-trace-HE2qY5Q-.d.cts → context-trace-BHKDS-eq.d.cts} +2 -2
- package/dist/{context-trace-DRi5M4lX.d.ts → context-trace-CHbqHmyE.d.ts} +2 -2
- package/dist/contracts.cjs +3 -1
- package/dist/contracts.cjs.map +1 -1
- package/dist/contracts.d.cts +3 -3
- package/dist/contracts.d.ts +3 -3
- package/dist/contracts.js +3 -1
- package/dist/contracts.js.map +1 -1
- package/dist/{defaultGraphExecutor-BBswR8wn.d.ts → defaultGraphExecutor-B29_qTHy.d.ts} +16 -15
- package/dist/{defaultGraphExecutor-BIjJj7WF.d.cts → defaultGraphExecutor-C2E59v_R.d.cts} +16 -15
- package/dist/{index-BanRABEt.d.cts → index-BAaUP9yU.d.cts} +26 -14
- package/dist/{index-Z8NXKNwI.d.ts → index-BaVpVNi2.d.ts} +26 -14
- package/dist/{index-DO4dQgf2.d.cts → index-BnYCS8Zg.d.cts} +2 -2
- package/dist/{index-CJeWHopy.d.ts → index-C0DAjsdX.d.ts} +2 -2
- package/dist/{index-Dl5PLgAv.d.cts → index-CKQzzZ5Y.d.cts} +2 -2
- package/dist/{index-CHqwkvGp.d.ts → index-D0mKxTR5.d.ts} +2 -2
- package/dist/index.cjs +186 -85
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -10
- package/dist/index.d.ts +10 -10
- package/dist/index.js +186 -85
- package/dist/index.js.map +1 -1
- package/dist/{ports-DnLuKfpE.d.ts → ports-DpPTFhSd.d.ts} +2 -2
- package/dist/{ports-DaatKJXp.d.cts → ports-s-tSp3sB.d.cts} +2 -2
- package/dist/quickstart.cjs +119 -65
- package/dist/quickstart.cjs.map +1 -1
- package/dist/quickstart.d.cts +7 -7
- package/dist/quickstart.d.ts +7 -7
- package/dist/quickstart.js +119 -65
- package/dist/quickstart.js.map +1 -1
- package/dist/{runAgent-CPj_9e58.d.ts → runAgent-C6F-399C.d.ts} +5 -5
- package/dist/{runAgent-HYKlXbVr.d.cts → runAgent-ilEj66Ik.d.cts} +5 -5
- package/dist/{runHandle-D3gPsD7B.d.cts → runHandle-BNOqS-Bl.d.cts} +3 -3
- package/dist/{runHandle-CyXvzgzk.d.ts → runHandle-BdLXOFqF.d.ts} +3 -3
- package/dist/runtime-kernel/events.cjs +1 -0
- package/dist/runtime-kernel/events.cjs.map +1 -1
- package/dist/runtime-kernel/events.d.cts +4 -4
- package/dist/runtime-kernel/events.d.ts +4 -4
- package/dist/runtime-kernel/events.js +1 -0
- package/dist/runtime-kernel/events.js.map +1 -1
- package/dist/runtime-kernel.cjs +181 -82
- package/dist/runtime-kernel.cjs.map +1 -1
- package/dist/runtime-kernel.d.cts +8 -8
- package/dist/runtime-kernel.d.ts +8 -8
- package/dist/runtime-kernel.js +181 -83
- package/dist/runtime-kernel.js.map +1 -1
- package/dist/testkit.cjs +181 -82
- package/dist/testkit.cjs.map +1 -1
- package/dist/testkit.d.cts +8 -8
- package/dist/testkit.d.ts +8 -8
- package/dist/testkit.js +181 -82
- package/dist/testkit.js.map +1 -1
- package/dist/{todo-B1PmDlp3.d.cts → todo-Ca8llpRQ.d.cts} +1 -1
- package/dist/{todo-B1PmDlp3.d.ts → todo-Ca8llpRQ.d.ts} +1 -1
- package/dist/{toolContracts-CLkQmhTG.d.cts → toolContracts-Bm3EZ1UM.d.cts} +13 -2
- package/dist/{toolContracts-Blll0241.d.ts → toolContracts-f8lzZBNa.d.ts} +13 -2
- package/docs/integration/README.md +1 -1
- package/docs/integration/agent-registration-guide.md +1 -1
- package/docs/integration/child-runs.md +4 -1
- package/docs/integration/context-engineering.md +30 -15
- package/docs/integration/context-fences.md +32 -3
- package/docs/integration/llm-provider.md +1 -1
- package/docs/integration/persistence.md +1 -0
- package/docs/integration/run-supervisor.md +3 -0
- package/docs/integration/tool-development-guide.md +7 -5
- package/docs/integration/tool-history.md +43 -17
- package/package.json +4 -3
package/dist/runtime-kernel.js
CHANGED
|
@@ -40,6 +40,7 @@ var Logger = class {
|
|
|
40
40
|
constructor(moduleName) {
|
|
41
41
|
this.moduleName = moduleName;
|
|
42
42
|
}
|
|
43
|
+
moduleName;
|
|
43
44
|
debug(message, data) {
|
|
44
45
|
this.log(0 /* DEBUG */, "debug", message, data);
|
|
45
46
|
}
|
|
@@ -262,6 +263,7 @@ var AgentSpecBudgetPolicy = z.object({
|
|
|
262
263
|
});
|
|
263
264
|
var AgentSpecToolHistoryPolicy = z.object({
|
|
264
265
|
strategy: z.enum(["per-pair", "per-run", "none"]).optional(),
|
|
266
|
+
retentionMode: z.enum(["drop", "compress"]).optional(),
|
|
265
267
|
keepLatestToolPairs: z.number().int().nonnegative().optional(),
|
|
266
268
|
keepLatestRuns: z.number().int().nonnegative().optional(),
|
|
267
269
|
maxInteractionGroups: z.number().int().nonnegative().optional(),
|
|
@@ -1018,6 +1020,17 @@ var logger = new Logger("GraphExecutor");
|
|
|
1018
1020
|
function asLocalRecord(local) {
|
|
1019
1021
|
return local && typeof local === "object" ? { ...local } : {};
|
|
1020
1022
|
}
|
|
1023
|
+
function readNonEmptyString(value) {
|
|
1024
|
+
return typeof value === "string" && value.trim().length > 0 ? value : void 0;
|
|
1025
|
+
}
|
|
1026
|
+
function readRuntimeConversationId(state) {
|
|
1027
|
+
const local = state?.local && typeof state.local === "object" ? state.local : void 0;
|
|
1028
|
+
return readNonEmptyString(local?.conversationId);
|
|
1029
|
+
}
|
|
1030
|
+
function readRuntimeTurnId(state) {
|
|
1031
|
+
const local = state?.local && typeof state.local === "object" ? state.local : void 0;
|
|
1032
|
+
return readNonEmptyString(local?.turnId);
|
|
1033
|
+
}
|
|
1021
1034
|
var GraphExecutor = class {
|
|
1022
1035
|
constructor(checkpointer, config = {}) {
|
|
1023
1036
|
this.checkpointer = checkpointer;
|
|
@@ -1027,6 +1040,7 @@ var GraphExecutor = class {
|
|
|
1027
1040
|
};
|
|
1028
1041
|
this.telemetryPort = config.telemetryPort ?? noopTelemetry;
|
|
1029
1042
|
}
|
|
1043
|
+
checkpointer;
|
|
1030
1044
|
nodes = /* @__PURE__ */ new Map();
|
|
1031
1045
|
ephemeralLocals = /* @__PURE__ */ new Map();
|
|
1032
1046
|
config;
|
|
@@ -1034,8 +1048,8 @@ var GraphExecutor = class {
|
|
|
1034
1048
|
registerNode(node) {
|
|
1035
1049
|
this.nodes.set(node.id, node);
|
|
1036
1050
|
}
|
|
1037
|
-
async peekCheckpoint(
|
|
1038
|
-
return await this.checkpointer.load(
|
|
1051
|
+
async peekCheckpoint(checkpointKey) {
|
|
1052
|
+
return await this.checkpointer.load(checkpointKey);
|
|
1039
1053
|
}
|
|
1040
1054
|
sanitize(state) {
|
|
1041
1055
|
const local = asLocalRecord(state.local);
|
|
@@ -1047,8 +1061,8 @@ var GraphExecutor = class {
|
|
|
1047
1061
|
local
|
|
1048
1062
|
};
|
|
1049
1063
|
}
|
|
1050
|
-
async prime(
|
|
1051
|
-
this.ephemeralLocals.set(
|
|
1064
|
+
async prime(checkpointKey, local, nodeId = "user") {
|
|
1065
|
+
this.ephemeralLocals.set(checkpointKey, { ...local || {} });
|
|
1052
1066
|
const localSansMemory = { ...local || {} };
|
|
1053
1067
|
if ("memory" in localSansMemory) delete localSansMemory.memory;
|
|
1054
1068
|
const state = {
|
|
@@ -1056,10 +1070,10 @@ var GraphExecutor = class {
|
|
|
1056
1070
|
schemaVersion: ENGINE_STATE_SCHEMA_VERSION,
|
|
1057
1071
|
local: localSansMemory
|
|
1058
1072
|
};
|
|
1059
|
-
await this.checkpointer.save(
|
|
1073
|
+
await this.checkpointer.save(checkpointKey, state);
|
|
1060
1074
|
}
|
|
1061
|
-
async setNode(
|
|
1062
|
-
const current = await this.checkpointer.load(
|
|
1075
|
+
async setNode(checkpointKey, nodeId, localPatch) {
|
|
1076
|
+
const current = await this.checkpointer.load(checkpointKey) || {
|
|
1063
1077
|
schemaVersion: ENGINE_STATE_SCHEMA_VERSION,
|
|
1064
1078
|
local: {}
|
|
1065
1079
|
};
|
|
@@ -1070,19 +1084,46 @@ var GraphExecutor = class {
|
|
|
1070
1084
|
schemaVersion: current.schemaVersion ?? ENGINE_STATE_SCHEMA_VERSION,
|
|
1071
1085
|
local: mergedLocal
|
|
1072
1086
|
};
|
|
1073
|
-
await this.checkpointer.save(
|
|
1087
|
+
await this.checkpointer.save(checkpointKey, next);
|
|
1074
1088
|
}
|
|
1075
|
-
async runUntilYield(
|
|
1089
|
+
async runUntilYield(checkpointKey) {
|
|
1076
1090
|
const runId = `run_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
1077
1091
|
let lifecyclePhase = "completed";
|
|
1092
|
+
let initialState = null;
|
|
1093
|
+
try {
|
|
1094
|
+
initialState = await this.loadInitialState(checkpointKey);
|
|
1095
|
+
} catch (err) {
|
|
1096
|
+
lifecyclePhase = "failed";
|
|
1097
|
+
this.telemetryPort.emit({
|
|
1098
|
+
kind: "run_lifecycle",
|
|
1099
|
+
runId,
|
|
1100
|
+
phase: "spawned",
|
|
1101
|
+
scope: {}
|
|
1102
|
+
});
|
|
1103
|
+
this.telemetryPort.emit({
|
|
1104
|
+
kind: "run_lifecycle",
|
|
1105
|
+
runId,
|
|
1106
|
+
phase: lifecyclePhase,
|
|
1107
|
+
scope: {}
|
|
1108
|
+
});
|
|
1109
|
+
throw err;
|
|
1110
|
+
}
|
|
1111
|
+
let lifecycleConversationId = readRuntimeConversationId(initialState);
|
|
1112
|
+
let lifecycleTurnId = readRuntimeTurnId(initialState);
|
|
1078
1113
|
this.telemetryPort.emit({
|
|
1079
1114
|
kind: "run_lifecycle",
|
|
1080
1115
|
runId,
|
|
1081
1116
|
phase: "spawned",
|
|
1082
|
-
scope: {
|
|
1117
|
+
scope: {
|
|
1118
|
+
conversationId: lifecycleConversationId,
|
|
1119
|
+
turnId: lifecycleTurnId
|
|
1120
|
+
}
|
|
1083
1121
|
});
|
|
1084
1122
|
try {
|
|
1085
|
-
|
|
1123
|
+
const result = await this.runUntilYieldInternal(checkpointKey, initialState);
|
|
1124
|
+
lifecycleConversationId = readRuntimeConversationId(result.checkpoint);
|
|
1125
|
+
lifecycleTurnId = readRuntimeTurnId(result.checkpoint);
|
|
1126
|
+
return result;
|
|
1086
1127
|
} catch (err) {
|
|
1087
1128
|
lifecyclePhase = err?.name === "AbortError" ? "cancelled" : "failed";
|
|
1088
1129
|
throw err;
|
|
@@ -1091,17 +1132,23 @@ var GraphExecutor = class {
|
|
|
1091
1132
|
kind: "run_lifecycle",
|
|
1092
1133
|
runId,
|
|
1093
1134
|
phase: lifecyclePhase,
|
|
1094
|
-
scope: {
|
|
1135
|
+
scope: {
|
|
1136
|
+
conversationId: lifecycleConversationId,
|
|
1137
|
+
turnId: lifecycleTurnId
|
|
1138
|
+
}
|
|
1095
1139
|
});
|
|
1096
1140
|
}
|
|
1097
1141
|
}
|
|
1098
|
-
async
|
|
1099
|
-
|
|
1142
|
+
async loadInitialState(checkpointKey) {
|
|
1143
|
+
return await this.checkpointer.load(checkpointKey) || {
|
|
1100
1144
|
nodeId: "user",
|
|
1101
1145
|
schemaVersion: ENGINE_STATE_SCHEMA_VERSION,
|
|
1102
1146
|
local: {}
|
|
1103
1147
|
};
|
|
1104
|
-
|
|
1148
|
+
}
|
|
1149
|
+
async runUntilYieldInternal(checkpointKey, initialState) {
|
|
1150
|
+
let state = initialState;
|
|
1151
|
+
const ephemeral = this.ephemeralLocals.get(checkpointKey) || {};
|
|
1105
1152
|
state = {
|
|
1106
1153
|
...state,
|
|
1107
1154
|
schemaVersion: state.schemaVersion ?? ENGINE_STATE_SCHEMA_VERSION,
|
|
@@ -1130,7 +1177,7 @@ var GraphExecutor = class {
|
|
|
1130
1177
|
const signalRaw = state.local?.signal;
|
|
1131
1178
|
if (isAbortSignal2(signalRaw) && signalRaw.aborted) {
|
|
1132
1179
|
logger.warn("[GraphExecutor] \u6536\u5230 AbortSignal\uFF0C\u7ACB\u5373\u505C\u6B62\u63A8\u7406\u5FAA\u73AF");
|
|
1133
|
-
this.ephemeralLocals.delete(
|
|
1180
|
+
this.ephemeralLocals.delete(checkpointKey);
|
|
1134
1181
|
throwAbortError();
|
|
1135
1182
|
}
|
|
1136
1183
|
const isLastStep = cycleStepCount >= this.config.maxSteps;
|
|
@@ -1178,8 +1225,8 @@ var GraphExecutor = class {
|
|
|
1178
1225
|
checkpointCount
|
|
1179
1226
|
});
|
|
1180
1227
|
const cp2 = this.sanitize(state);
|
|
1181
|
-
await this.checkpointer.save(
|
|
1182
|
-
this.ephemeralLocals.delete(
|
|
1228
|
+
await this.checkpointer.save(checkpointKey, cp2);
|
|
1229
|
+
this.ephemeralLocals.delete(checkpointKey);
|
|
1183
1230
|
return { events: allEvents, checkpoint: cp2, stepCount };
|
|
1184
1231
|
}
|
|
1185
1232
|
logger.info("[GraphExecutor] \u8282\u70B9\u5207\u6362", {
|
|
@@ -1190,18 +1237,18 @@ var GraphExecutor = class {
|
|
|
1190
1237
|
});
|
|
1191
1238
|
const nodeRunStartedAt = Date.now();
|
|
1192
1239
|
const nodeIdForTelemetry = state.nodeId;
|
|
1240
|
+
const conversationIdForTelemetry = readRuntimeConversationId(state);
|
|
1193
1241
|
let result;
|
|
1194
1242
|
try {
|
|
1195
1243
|
result = await node.run(state);
|
|
1196
1244
|
} finally {
|
|
1197
|
-
const turnIdForTelemetry = typeof state.local?.turnId === "string" ? state.local.turnId : void 0;
|
|
1198
1245
|
this.telemetryPort.emit({
|
|
1199
1246
|
kind: "graph_node",
|
|
1200
1247
|
nodeId: nodeIdForTelemetry,
|
|
1201
1248
|
durationMs: Date.now() - nodeRunStartedAt,
|
|
1202
1249
|
scope: {
|
|
1203
|
-
conversationId:
|
|
1204
|
-
turnId:
|
|
1250
|
+
conversationId: conversationIdForTelemetry,
|
|
1251
|
+
turnId: readRuntimeTurnId(state)
|
|
1205
1252
|
}
|
|
1206
1253
|
});
|
|
1207
1254
|
}
|
|
@@ -1240,7 +1287,7 @@ var GraphExecutor = class {
|
|
|
1240
1287
|
});
|
|
1241
1288
|
state = { ...state, nodeId: nextNodeId };
|
|
1242
1289
|
const cp2 = this.sanitize(state);
|
|
1243
|
-
await this.checkpointer.save(
|
|
1290
|
+
await this.checkpointer.save(checkpointKey, cp2);
|
|
1244
1291
|
continue;
|
|
1245
1292
|
}
|
|
1246
1293
|
if (result.kind === "yield") {
|
|
@@ -1251,7 +1298,7 @@ var GraphExecutor = class {
|
|
|
1251
1298
|
checkpointCount
|
|
1252
1299
|
});
|
|
1253
1300
|
const cp2 = this.sanitize(state);
|
|
1254
|
-
await this.checkpointer.save(
|
|
1301
|
+
await this.checkpointer.save(checkpointKey, cp2);
|
|
1255
1302
|
return { events: allEvents, checkpoint: cp2, stepCount };
|
|
1256
1303
|
}
|
|
1257
1304
|
if (result.kind === "pause") {
|
|
@@ -1262,7 +1309,7 @@ var GraphExecutor = class {
|
|
|
1262
1309
|
checkpointCount
|
|
1263
1310
|
});
|
|
1264
1311
|
const cp2 = this.sanitize(state);
|
|
1265
|
-
await this.checkpointer.save(
|
|
1312
|
+
await this.checkpointer.save(checkpointKey, cp2);
|
|
1266
1313
|
return { events: allEvents, checkpoint: cp2, stepCount };
|
|
1267
1314
|
}
|
|
1268
1315
|
}
|
|
@@ -1273,8 +1320,8 @@ var GraphExecutor = class {
|
|
|
1273
1320
|
checkpointCount
|
|
1274
1321
|
});
|
|
1275
1322
|
const cp = this.sanitize(state);
|
|
1276
|
-
await this.checkpointer.save(
|
|
1277
|
-
this.ephemeralLocals.delete(
|
|
1323
|
+
await this.checkpointer.save(checkpointKey, cp);
|
|
1324
|
+
this.ephemeralLocals.delete(checkpointKey);
|
|
1278
1325
|
return { events: allEvents, checkpoint: cp, stepCount };
|
|
1279
1326
|
}
|
|
1280
1327
|
};
|
|
@@ -1471,15 +1518,15 @@ function splitConcatenatedJsonObjects(input) {
|
|
|
1471
1518
|
}
|
|
1472
1519
|
|
|
1473
1520
|
// src/runtime-kernel/graph-engine/tick-pipeline/helpers.ts
|
|
1474
|
-
function
|
|
1521
|
+
function readNonEmptyString2(value) {
|
|
1475
1522
|
if (typeof value !== "string") return void 0;
|
|
1476
1523
|
const trimmed = value.trim();
|
|
1477
1524
|
return trimmed.length > 0 ? trimmed : void 0;
|
|
1478
1525
|
}
|
|
1479
1526
|
function resolveConversationIdForRuntimeEvents(toolContext) {
|
|
1480
|
-
const fromCamel =
|
|
1527
|
+
const fromCamel = readNonEmptyString2(toolContext?.conversationId);
|
|
1481
1528
|
if (fromCamel) return fromCamel;
|
|
1482
|
-
const fromSnake = toolContext ?
|
|
1529
|
+
const fromSnake = toolContext ? readNonEmptyString2(toolContext["conversation_id"]) : void 0;
|
|
1483
1530
|
if (fromSnake) return fromSnake;
|
|
1484
1531
|
return generateMessageId();
|
|
1485
1532
|
}
|
|
@@ -1838,7 +1885,7 @@ var runModelLockMiddleware = async (ctx, stage, next) => {
|
|
|
1838
1885
|
if (stage.id !== "execute_llm") {
|
|
1839
1886
|
return;
|
|
1840
1887
|
}
|
|
1841
|
-
const normalized =
|
|
1888
|
+
const normalized = readNonEmptyString2(ctx.cloudQuotaFallbackAppliedModelId);
|
|
1842
1889
|
if (!normalized) {
|
|
1843
1890
|
return;
|
|
1844
1891
|
}
|
|
@@ -2439,7 +2486,7 @@ function createExecuteLlmStage(dependencies) {
|
|
|
2439
2486
|
streamEventHandler,
|
|
2440
2487
|
ctx.signal,
|
|
2441
2488
|
(fallbackModelId) => {
|
|
2442
|
-
ctx.cloudQuotaFallbackAppliedModelId =
|
|
2489
|
+
ctx.cloudQuotaFallbackAppliedModelId = readNonEmptyString2(fallbackModelId);
|
|
2443
2490
|
},
|
|
2444
2491
|
(info) => {
|
|
2445
2492
|
ctx.modelFallbackAudit = info;
|
|
@@ -2483,7 +2530,7 @@ function createPrepareCallStage(dependencies) {
|
|
|
2483
2530
|
return {
|
|
2484
2531
|
id: "prepare_call",
|
|
2485
2532
|
async run(ctx) {
|
|
2486
|
-
const lockedRunModelId =
|
|
2533
|
+
const lockedRunModelId = readNonEmptyString2(ctx.executorLocal?.runLockedModelId);
|
|
2487
2534
|
const requestedModelId = lockedRunModelId ?? ctx.request.model_id;
|
|
2488
2535
|
ctx.modelId = dependencies.modelResolver.resolveModelId(requestedModelId);
|
|
2489
2536
|
await emitAuditEnvelope(ctx.audit, {
|
|
@@ -2555,7 +2602,7 @@ var GraphAgentExecutor = class {
|
|
|
2555
2602
|
this.llmCaller = dependencies.llmCaller;
|
|
2556
2603
|
this.toolRuntime = dependencies.toolRuntime;
|
|
2557
2604
|
this.contextBuilder = dependencies.contextBuilder;
|
|
2558
|
-
this.cloudQuotaFallbackModelId =
|
|
2605
|
+
this.cloudQuotaFallbackModelId = readNonEmptyString2(dependencies.cloudQuotaFallbackModelId);
|
|
2559
2606
|
this.modelCatalog = dependencies.modelCatalog ?? createEmptyModelCatalog();
|
|
2560
2607
|
this.modelResolver = dependencies.modelResolver ?? new ModelResolver({
|
|
2561
2608
|
modelCatalog: this.modelCatalog
|
|
@@ -2603,7 +2650,7 @@ var GraphAgentExecutor = class {
|
|
|
2603
2650
|
llmMessages: [],
|
|
2604
2651
|
mode: input.request.mode === "chat" ? "chat" : "agent",
|
|
2605
2652
|
conversationId: resolveConversationIdForRuntimeEvents(input.toolContext),
|
|
2606
|
-
turnId:
|
|
2653
|
+
turnId: readNonEmptyString2(input.toolContext?.turnId) ?? `turn_${Date.now()}`,
|
|
2607
2654
|
telemetry: this.telemetryPort,
|
|
2608
2655
|
audit: this.auditPort
|
|
2609
2656
|
};
|
|
@@ -2653,18 +2700,18 @@ function isSummarizationCallbacks(value) {
|
|
|
2653
2700
|
function isGraphSseSink(value) {
|
|
2654
2701
|
return typeof value === "function";
|
|
2655
2702
|
}
|
|
2656
|
-
function
|
|
2703
|
+
function readNonEmptyString3(value) {
|
|
2657
2704
|
if (typeof value !== "string") return void 0;
|
|
2658
2705
|
const trimmed = value.trim();
|
|
2659
2706
|
return trimmed.length > 0 ? trimmed : void 0;
|
|
2660
2707
|
}
|
|
2661
2708
|
function readGraphAgentLocal(local) {
|
|
2662
2709
|
const source = local ?? {};
|
|
2663
|
-
const answerId =
|
|
2710
|
+
const answerId = readNonEmptyString3(source.answerId);
|
|
2664
2711
|
const chunkSeq = Number.isInteger(source.chunkSeq) ? Number(source.chunkSeq) : 0;
|
|
2665
2712
|
return {
|
|
2666
|
-
conversationId:
|
|
2667
|
-
turnId:
|
|
2713
|
+
conversationId: readNonEmptyString3(source.conversationId) ?? "",
|
|
2714
|
+
turnId: readNonEmptyString3(source.turnId),
|
|
2668
2715
|
request: isAgentInvocationRequest(source.request) ? source.request : void 0,
|
|
2669
2716
|
toolContext: isToolExecutionContext(source.toolContext) ? source.toolContext : void 0,
|
|
2670
2717
|
history: isRuntimeEventArray(source.history) ? source.history : [],
|
|
@@ -3429,7 +3476,7 @@ var LlmNode = class {
|
|
|
3429
3476
|
function isRecord8(value) {
|
|
3430
3477
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
3431
3478
|
}
|
|
3432
|
-
function
|
|
3479
|
+
function readNonEmptyString4(value) {
|
|
3433
3480
|
if (typeof value !== "string") {
|
|
3434
3481
|
return void 0;
|
|
3435
3482
|
}
|
|
@@ -3451,7 +3498,7 @@ function resolveFinalAnswerFromToolResult(toolName, parsedResult) {
|
|
|
3451
3498
|
return void 0;
|
|
3452
3499
|
}
|
|
3453
3500
|
if (toolName === "write_report") {
|
|
3454
|
-
const report =
|
|
3501
|
+
const report = readNonEmptyString4(data.report);
|
|
3455
3502
|
if (!report) {
|
|
3456
3503
|
throw new Error("[write_report] \u5DE5\u5177\u8F93\u51FA\u7F3A\u5C11 data.report\uFF08\u5FC5\u987B\u63D0\u4F9B\u5B8C\u6574\u62A5\u544A\u6B63\u6587\uFF09");
|
|
3457
3504
|
}
|
|
@@ -3461,7 +3508,7 @@ function resolveFinalAnswerFromToolResult(toolName, parsedResult) {
|
|
|
3461
3508
|
if (data.success !== true) {
|
|
3462
3509
|
return void 0;
|
|
3463
3510
|
}
|
|
3464
|
-
const finalAnswer =
|
|
3511
|
+
const finalAnswer = readNonEmptyString4(data.final_answer);
|
|
3465
3512
|
if (!finalAnswer) {
|
|
3466
3513
|
throw new Error("[research_run_writer] \u5DE5\u5177\u8F93\u51FA\u7F3A\u5C11 data.final_answer\uFF08success=true \u65F6\u5FC5\u987B\u63D0\u4F9B\u6700\u7EC8\u62A5\u544A\u6B63\u6587\uFF09");
|
|
3467
3514
|
}
|
|
@@ -4006,6 +4053,31 @@ function ensureToolContextRuntimeCapability(params) {
|
|
|
4006
4053
|
function getToolContextRuntimeBinding(context) {
|
|
4007
4054
|
return readBinding(context);
|
|
4008
4055
|
}
|
|
4056
|
+
function copyToolContextRuntimeCapability(source, target) {
|
|
4057
|
+
const sourceBinding = readBinding(source);
|
|
4058
|
+
if (!sourceBinding) {
|
|
4059
|
+
return void 0;
|
|
4060
|
+
}
|
|
4061
|
+
const existingTargetBinding = readBinding(target);
|
|
4062
|
+
if (existingTargetBinding) {
|
|
4063
|
+
exposeCompatibilitySurface(target, existingTargetBinding);
|
|
4064
|
+
return existingTargetBinding;
|
|
4065
|
+
}
|
|
4066
|
+
const targetBinding = createRuntimeBinding({
|
|
4067
|
+
context: target,
|
|
4068
|
+
persistedHistory: () => sourceBinding.getPersistedHistoryEvents(),
|
|
4069
|
+
workingHistory: () => sourceBinding.getWorkingHistoryEvents(),
|
|
4070
|
+
executionMeta: sourceBinding.readExecutionMeta()
|
|
4071
|
+
});
|
|
4072
|
+
Object.defineProperty(target, TOOL_CONTEXT_RUNTIME_BINDING_KEY, {
|
|
4073
|
+
value: targetBinding,
|
|
4074
|
+
enumerable: false,
|
|
4075
|
+
configurable: true,
|
|
4076
|
+
writable: false
|
|
4077
|
+
});
|
|
4078
|
+
exposeCompatibilitySurface(target, targetBinding);
|
|
4079
|
+
return targetBinding;
|
|
4080
|
+
}
|
|
4009
4081
|
function readToolContextWorkingHistory(context) {
|
|
4010
4082
|
if (context.conversationView) {
|
|
4011
4083
|
return context.conversationView.getWorkingHistoryEvents();
|
|
@@ -4857,12 +4929,12 @@ function asRecord(value) {
|
|
|
4857
4929
|
}
|
|
4858
4930
|
return value;
|
|
4859
4931
|
}
|
|
4860
|
-
function summarizeCheckpoint(
|
|
4932
|
+
function summarizeCheckpoint(checkpointKey, state, savedAt) {
|
|
4861
4933
|
const local = asRecord(state.local);
|
|
4862
4934
|
const executorLocal = asRecord(local?.executorLocal);
|
|
4863
4935
|
const pendingToolCalls = local?.pendingToolCalls;
|
|
4864
4936
|
return {
|
|
4865
|
-
|
|
4937
|
+
checkpointKey,
|
|
4866
4938
|
schemaVersion: state.schemaVersion ?? 1,
|
|
4867
4939
|
savedAt,
|
|
4868
4940
|
currentNode: state.nodeId,
|
|
@@ -4881,25 +4953,25 @@ var MemoryCheckpointer = class {
|
|
|
4881
4953
|
local: state.local && typeof state.local === "object" && !Array.isArray(state.local) ? { ...state.local } : state.local
|
|
4882
4954
|
};
|
|
4883
4955
|
}
|
|
4884
|
-
async load(
|
|
4885
|
-
const entry = this.store.get(
|
|
4956
|
+
async load(checkpointKey) {
|
|
4957
|
+
const entry = this.store.get(checkpointKey);
|
|
4886
4958
|
return entry ? this.cloneState(entry.state) : null;
|
|
4887
4959
|
}
|
|
4888
|
-
async save(
|
|
4889
|
-
this.store.set(
|
|
4960
|
+
async save(checkpointKey, state) {
|
|
4961
|
+
this.store.set(checkpointKey, {
|
|
4890
4962
|
state: this.cloneState(state),
|
|
4891
4963
|
savedAt: Date.now()
|
|
4892
4964
|
});
|
|
4893
4965
|
}
|
|
4894
|
-
async clear(
|
|
4895
|
-
this.store.delete(
|
|
4966
|
+
async clear(checkpointKey) {
|
|
4967
|
+
this.store.delete(checkpointKey);
|
|
4896
4968
|
}
|
|
4897
|
-
async peekMeta(
|
|
4898
|
-
const entry = this.store.get(
|
|
4899
|
-
return entry ? summarizeCheckpoint(
|
|
4969
|
+
async peekMeta(checkpointKey) {
|
|
4970
|
+
const entry = this.store.get(checkpointKey);
|
|
4971
|
+
return entry ? summarizeCheckpoint(checkpointKey, entry.state, entry.savedAt) : null;
|
|
4900
4972
|
}
|
|
4901
4973
|
async list(filter = {}) {
|
|
4902
|
-
const summaries = Array.from(this.store.entries()).map(([
|
|
4974
|
+
const summaries = Array.from(this.store.entries()).map(([checkpointKey, entry]) => summarizeCheckpoint(checkpointKey, entry.state, entry.savedAt)).filter((summary) => filter.savedAfter === void 0 ? true : summary.savedAt > filter.savedAfter).sort((left, right) => right.savedAt - left.savedAt);
|
|
4903
4975
|
if (filter.limit === void 0) {
|
|
4904
4976
|
return summaries;
|
|
4905
4977
|
}
|
|
@@ -4971,6 +5043,7 @@ __export(tools_exports, {
|
|
|
4971
5043
|
CommonParameterTypes: () => CommonParameterTypes,
|
|
4972
5044
|
ContextCheckpointTool: () => ContextCheckpointTool,
|
|
4973
5045
|
computeToolIdempotencyKey: () => computeToolIdempotencyKey,
|
|
5046
|
+
copyToolContextRuntimeCapability: () => copyToolContextRuntimeCapability,
|
|
4974
5047
|
createContextCheckpointTool: () => createContextCheckpointTool,
|
|
4975
5048
|
ensureToolContextRuntimeCapability: () => ensureToolContextRuntimeCapability,
|
|
4976
5049
|
findCachedToolOutputByIdempotencyKey: () => findCachedToolOutputByIdempotencyKey,
|
|
@@ -5164,7 +5237,7 @@ function createContextCheckpointTool(options) {
|
|
|
5164
5237
|
function isRecord15(value) {
|
|
5165
5238
|
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
5166
5239
|
}
|
|
5167
|
-
function
|
|
5240
|
+
function readNonEmptyString5(value) {
|
|
5168
5241
|
if (typeof value !== "string") {
|
|
5169
5242
|
return void 0;
|
|
5170
5243
|
}
|
|
@@ -5184,13 +5257,13 @@ function readToolContextUserQuery(context) {
|
|
|
5184
5257
|
if (!context) {
|
|
5185
5258
|
return void 0;
|
|
5186
5259
|
}
|
|
5187
|
-
return
|
|
5260
|
+
return readNonEmptyString5(context["user_query"]);
|
|
5188
5261
|
}
|
|
5189
5262
|
function readToolContextModelId(context) {
|
|
5190
5263
|
if (!context) {
|
|
5191
5264
|
return void 0;
|
|
5192
5265
|
}
|
|
5193
|
-
return
|
|
5266
|
+
return readNonEmptyString5(context["modelId"]);
|
|
5194
5267
|
}
|
|
5195
5268
|
function readToolContextRunContext(context) {
|
|
5196
5269
|
if (!context) {
|
|
@@ -6898,6 +6971,7 @@ var DefaultTokenizerPort = class {
|
|
|
6898
6971
|
constructor(config = {}) {
|
|
6899
6972
|
this.config = config;
|
|
6900
6973
|
}
|
|
6974
|
+
config;
|
|
6901
6975
|
estimateText(text, _modelId) {
|
|
6902
6976
|
return TokenCalculator.estimateTokens(text, {
|
|
6903
6977
|
encoding: this.config.encoding,
|
|
@@ -6925,7 +6999,6 @@ __export(child_runs_exports, {
|
|
|
6925
6999
|
|
|
6926
7000
|
// src/runtime-kernel/child-runs/childToolContext.ts
|
|
6927
7001
|
function createChildRunToolContext(params) {
|
|
6928
|
-
const inheritedConversationId = typeof params.parentToolContext.conversationId === "string" && params.parentToolContext.conversationId.trim().length > 0 ? params.parentToolContext.conversationId.trim() : void 0;
|
|
6929
7002
|
const inheritedContext = stripRuntimeReservedToolContextPatch(params.parentToolContext);
|
|
6930
7003
|
const childToolContext = {
|
|
6931
7004
|
...inheritedContext,
|
|
@@ -6937,7 +7010,7 @@ function createChildRunToolContext(params) {
|
|
|
6937
7010
|
persistedHistory: params.seedHistory,
|
|
6938
7011
|
workingHistory: params.seedHistory,
|
|
6939
7012
|
executionMeta: {
|
|
6940
|
-
conversationId:
|
|
7013
|
+
conversationId: params.conversationId,
|
|
6941
7014
|
turnId: params.turnId,
|
|
6942
7015
|
runId: params.runId,
|
|
6943
7016
|
parentRunId: params.parentRunId
|
|
@@ -7039,6 +7112,8 @@ var FinalAnswerCollector = class {
|
|
|
7039
7112
|
this.conversationId = conversationId;
|
|
7040
7113
|
this.turnId = turnId;
|
|
7041
7114
|
}
|
|
7115
|
+
conversationId;
|
|
7116
|
+
turnId;
|
|
7042
7117
|
answerId;
|
|
7043
7118
|
chunks = [];
|
|
7044
7119
|
chunkCount = 0;
|
|
@@ -7255,7 +7330,7 @@ function readCheckpointHistory(checkpoint) {
|
|
|
7255
7330
|
});
|
|
7256
7331
|
}
|
|
7257
7332
|
async function recoverChildRunEventsFromCheckpoint(params) {
|
|
7258
|
-
const checkpoint = await params.checkpointer.load(params.
|
|
7333
|
+
const checkpoint = await params.checkpointer.load(params.checkpointKey);
|
|
7259
7334
|
const history = readCheckpointHistory(checkpoint);
|
|
7260
7335
|
if (history.length === 0) {
|
|
7261
7336
|
return [];
|
|
@@ -7263,7 +7338,7 @@ async function recoverChildRunEventsFromCheckpoint(params) {
|
|
|
7263
7338
|
if (hasSeedHistoryPrefix(history, params.seedHistory)) {
|
|
7264
7339
|
return history.slice(params.seedHistory.length);
|
|
7265
7340
|
}
|
|
7266
|
-
return history.filter((event) => event.conversation_id === params.
|
|
7341
|
+
return history.filter((event) => event.conversation_id === params.childConversationId);
|
|
7267
7342
|
}
|
|
7268
7343
|
|
|
7269
7344
|
// src/runtime-kernel/child-runs/childRunInvoker.ts
|
|
@@ -7292,6 +7367,7 @@ var ChildRunInvoker = class {
|
|
|
7292
7367
|
agentConfig,
|
|
7293
7368
|
userMessage,
|
|
7294
7369
|
parentToolContext,
|
|
7370
|
+
conversationId,
|
|
7295
7371
|
runId,
|
|
7296
7372
|
parentRunId,
|
|
7297
7373
|
subrunTracePublisher,
|
|
@@ -7300,12 +7376,18 @@ var ChildRunInvoker = class {
|
|
|
7300
7376
|
modelId,
|
|
7301
7377
|
abortSignal
|
|
7302
7378
|
} = config;
|
|
7303
|
-
const
|
|
7379
|
+
const internalCheckpointKey = `internal_${generateMessageId()}`;
|
|
7380
|
+
const runtimeConversationId = resolveChildRunConversationId({
|
|
7381
|
+
explicitConversationId: conversationId,
|
|
7382
|
+
parentToolContext,
|
|
7383
|
+
fallbackConversationId: internalCheckpointKey
|
|
7384
|
+
});
|
|
7304
7385
|
const turnId = `turn_${Date.now()}`;
|
|
7305
|
-
const childRunId = typeof runId === "string" && runId.trim().length > 0 ? runId.trim() :
|
|
7386
|
+
const childRunId = typeof runId === "string" && runId.trim().length > 0 ? runId.trim() : internalCheckpointKey;
|
|
7306
7387
|
const resolvedParentRunId = typeof parentRunId === "string" && parentRunId.trim().length > 0 ? parentRunId.trim() : typeof parentToolContext.runId === "string" && parentToolContext.runId.trim().length > 0 ? parentToolContext.runId.trim() : void 0;
|
|
7307
7388
|
logger13.info(`\u542F\u52A8 child-run: ${agentConfig.id}`, {
|
|
7308
|
-
conversationId:
|
|
7389
|
+
conversationId: runtimeConversationId,
|
|
7390
|
+
checkpointKey: internalCheckpointKey,
|
|
7309
7391
|
maxSteps,
|
|
7310
7392
|
userMessage: userMessage.slice(0, 100) + (userMessage.length > 100 ? "..." : "")
|
|
7311
7393
|
});
|
|
@@ -7366,7 +7448,7 @@ var ChildRunInvoker = class {
|
|
|
7366
7448
|
const seedHistory = Array.isArray(seedHistoryEvents) ? seedHistoryEvents : [];
|
|
7367
7449
|
const childToolContext = createChildRunToolContext({
|
|
7368
7450
|
parentToolContext,
|
|
7369
|
-
|
|
7451
|
+
conversationId: runtimeConversationId,
|
|
7370
7452
|
turnId,
|
|
7371
7453
|
runId: childRunId,
|
|
7372
7454
|
parentRunId: resolvedParentRunId,
|
|
@@ -7375,13 +7457,13 @@ var ChildRunInvoker = class {
|
|
|
7375
7457
|
});
|
|
7376
7458
|
const subrunSseSink = subrunTracePublisher ? createChildRunTraceSink({
|
|
7377
7459
|
publisher: subrunTracePublisher,
|
|
7378
|
-
conversationId:
|
|
7460
|
+
conversationId: runtimeConversationId,
|
|
7379
7461
|
turnId
|
|
7380
7462
|
}) : void 0;
|
|
7381
7463
|
const initialLocal = {
|
|
7382
7464
|
request,
|
|
7383
7465
|
history: seedHistory,
|
|
7384
|
-
conversationId:
|
|
7466
|
+
conversationId: runtimeConversationId,
|
|
7385
7467
|
turnId,
|
|
7386
7468
|
toolContext: childToolContext,
|
|
7387
7469
|
...abortSignal ? { signal: abortSignal } : {},
|
|
@@ -7389,7 +7471,7 @@ var ChildRunInvoker = class {
|
|
|
7389
7471
|
...subrunSseSink ? { sseSink: subrunSseSink } : {},
|
|
7390
7472
|
systemPrompt
|
|
7391
7473
|
};
|
|
7392
|
-
await graphExecutor.prime(
|
|
7474
|
+
await graphExecutor.prime(internalCheckpointKey, initialLocal, "llm");
|
|
7393
7475
|
const allEvents = [];
|
|
7394
7476
|
let stepCount = 0;
|
|
7395
7477
|
let finalAnswer;
|
|
@@ -7401,7 +7483,7 @@ var ChildRunInvoker = class {
|
|
|
7401
7483
|
err.name = "AbortError";
|
|
7402
7484
|
throw err;
|
|
7403
7485
|
}
|
|
7404
|
-
const result = await graphExecutor.runUntilYield(
|
|
7486
|
+
const result = await graphExecutor.runUntilYield(internalCheckpointKey);
|
|
7405
7487
|
appendUniqueEvents(allEvents, result.events);
|
|
7406
7488
|
stepCount = result.stepCount;
|
|
7407
7489
|
if (subrunSseSink && typeof subrunSseSink.finalize === "function") {
|
|
@@ -7435,8 +7517,8 @@ var ChildRunInvoker = class {
|
|
|
7435
7517
|
}
|
|
7436
7518
|
const recoveredEvents = await recoverChildRunEventsFromCheckpoint({
|
|
7437
7519
|
checkpointer,
|
|
7438
|
-
|
|
7439
|
-
|
|
7520
|
+
checkpointKey: internalCheckpointKey,
|
|
7521
|
+
childConversationId: runtimeConversationId,
|
|
7440
7522
|
seedHistory
|
|
7441
7523
|
});
|
|
7442
7524
|
appendUniqueEvents(allEvents, recoveredEvents);
|
|
@@ -7453,7 +7535,7 @@ var ChildRunInvoker = class {
|
|
|
7453
7535
|
stack: err.stack
|
|
7454
7536
|
} : { error: String(err) });
|
|
7455
7537
|
}
|
|
7456
|
-
await checkpointer.clear(
|
|
7538
|
+
await checkpointer.clear(internalCheckpointKey);
|
|
7457
7539
|
return {
|
|
7458
7540
|
success: !error,
|
|
7459
7541
|
runId: childRunId,
|
|
@@ -7466,6 +7548,16 @@ var ChildRunInvoker = class {
|
|
|
7466
7548
|
};
|
|
7467
7549
|
}
|
|
7468
7550
|
};
|
|
7551
|
+
function readNonEmptyString6(value) {
|
|
7552
|
+
if (typeof value !== "string") {
|
|
7553
|
+
return void 0;
|
|
7554
|
+
}
|
|
7555
|
+
const trimmed = value.trim();
|
|
7556
|
+
return trimmed.length > 0 ? trimmed : void 0;
|
|
7557
|
+
}
|
|
7558
|
+
function resolveChildRunConversationId(params) {
|
|
7559
|
+
return readNonEmptyString6(params.explicitConversationId) ?? readNonEmptyString6(params.parentToolContext.conversationId) ?? params.fallbackConversationId;
|
|
7560
|
+
}
|
|
7469
7561
|
function resolveChildRunSystemReminderPolicy(agentConfig) {
|
|
7470
7562
|
const configured = agentConfig.systemReminderPolicy ?? agentConfig.contextPolicy?.systemReminder;
|
|
7471
7563
|
const threshold = agentConfig.stepPolicy?.lastStepsHintThreshold;
|
|
@@ -7656,7 +7748,7 @@ function cloneRunRecord(record) {
|
|
|
7656
7748
|
...record,
|
|
7657
7749
|
iterationBudget: record.iterationBudget ? { ...record.iterationBudget } : void 0,
|
|
7658
7750
|
errorIfAny: record.errorIfAny ? { ...record.errorIfAny } : void 0,
|
|
7659
|
-
metadata: record.metadata ?
|
|
7751
|
+
metadata: record.metadata ? structuredClone(record.metadata) : void 0
|
|
7660
7752
|
};
|
|
7661
7753
|
}
|
|
7662
7754
|
function matchesStatus(candidate, filter) {
|
|
@@ -8068,7 +8160,7 @@ function isTerminalStatus(status) {
|
|
|
8068
8160
|
return status === "completed" || status === "failed" || status === "cancelled";
|
|
8069
8161
|
}
|
|
8070
8162
|
function cloneMetadata(metadata) {
|
|
8071
|
-
return metadata ?
|
|
8163
|
+
return metadata ? structuredClone(metadata) : void 0;
|
|
8072
8164
|
}
|
|
8073
8165
|
function recordToSnapshot(record) {
|
|
8074
8166
|
return {
|
|
@@ -8155,7 +8247,7 @@ var DefaultRunSupervisor = class {
|
|
|
8155
8247
|
startedAt,
|
|
8156
8248
|
updatedAt: startedAt,
|
|
8157
8249
|
iterationBudget: spec.iterationBudget ? { ...spec.iterationBudget } : void 0,
|
|
8158
|
-
metadata: spec.metadata
|
|
8250
|
+
metadata: cloneMetadata(spec.metadata)
|
|
8159
8251
|
};
|
|
8160
8252
|
await this.registryStore.save(record);
|
|
8161
8253
|
const handle = new DefaultRunHandle({
|
|
@@ -8329,12 +8421,13 @@ var DefaultRunSupervisor = class {
|
|
|
8329
8421
|
}
|
|
8330
8422
|
try {
|
|
8331
8423
|
await handle.markRunning({ currentNode: "detached" });
|
|
8424
|
+
const registeredRecord = await this.registryStore.load(handle.runId);
|
|
8332
8425
|
const executorOutcome = await this.executor.execute({
|
|
8333
8426
|
runId: handle.runId,
|
|
8334
|
-
parentRunId:
|
|
8335
|
-
conversationId: spec.conversationId,
|
|
8336
|
-
agentSpec: spec
|
|
8337
|
-
request:
|
|
8427
|
+
parentRunId: handle.parentRunId,
|
|
8428
|
+
conversationId: registeredRecord?.conversationId ?? spec.conversationId,
|
|
8429
|
+
agentSpec: await handle.spec(),
|
|
8430
|
+
request: await handle.request(),
|
|
8338
8431
|
signal: handle.signal,
|
|
8339
8432
|
eventBus: spec.eventBus,
|
|
8340
8433
|
eventStore: spec.eventStore,
|
|
@@ -8343,7 +8436,7 @@ var DefaultRunSupervisor = class {
|
|
|
8343
8436
|
contextFences: spec.contextFences,
|
|
8344
8437
|
wakeSource: spec.wakeSource,
|
|
8345
8438
|
ephemeral: spec.ephemeral,
|
|
8346
|
-
metadata: spec.metadata
|
|
8439
|
+
metadata: cloneMetadata(registeredRecord?.metadata ?? spec.metadata)
|
|
8347
8440
|
});
|
|
8348
8441
|
const outcome = await this.persistExecutorOutcome(handle, executorOutcome);
|
|
8349
8442
|
this.notifyTerminalWaiters(outcome);
|
|
@@ -8407,10 +8500,14 @@ var DefaultRunSupervisor = class {
|
|
|
8407
8500
|
await this.registryStore.save(record);
|
|
8408
8501
|
}
|
|
8409
8502
|
const completedAt = executorOutcome?.completedAt ?? this.now();
|
|
8503
|
+
const fallbackMeta = record ? void 0 : await handle.meta();
|
|
8410
8504
|
const outcome = recordToTerminalOutcome(record ?? {
|
|
8411
8505
|
runId: handle.runId,
|
|
8412
8506
|
parentRunId: handle.parentRunId,
|
|
8413
|
-
|
|
8507
|
+
conversationId: fallbackMeta?.conversationId ?? "",
|
|
8508
|
+
agentSpecId: fallbackMeta?.agentSpecId,
|
|
8509
|
+
status: executorOutcome?.status ?? "completed",
|
|
8510
|
+
startedAt: fallbackMeta?.startedAt ?? completedAt}, completedAt);
|
|
8414
8511
|
const nextOutcome = {
|
|
8415
8512
|
...outcome,
|
|
8416
8513
|
metadata: {
|
|
@@ -8638,6 +8735,7 @@ function createGraphLoopHarness(options) {
|
|
|
8638
8735
|
};
|
|
8639
8736
|
return {
|
|
8640
8737
|
async run() {
|
|
8738
|
+
const checkpointKey = options.conversationId;
|
|
8641
8739
|
const executor = createDefaultGraphExecutor({
|
|
8642
8740
|
llmNode: options.createLlmNode({
|
|
8643
8741
|
llmCaller: options.llmCaller,
|
|
@@ -8666,8 +8764,8 @@ function createGraphLoopHarness(options) {
|
|
|
8666
8764
|
signal: options.signal ?? options.toolContext.abortSignal,
|
|
8667
8765
|
executorLocal
|
|
8668
8766
|
};
|
|
8669
|
-
await executor.prime(
|
|
8670
|
-
const result = await executor.runUntilYield(
|
|
8767
|
+
await executor.prime(checkpointKey, local, "user");
|
|
8768
|
+
const result = await executor.runUntilYield(checkpointKey);
|
|
8671
8769
|
return {
|
|
8672
8770
|
checkpointNodeId: result.checkpoint.nodeId,
|
|
8673
8771
|
stepCount: result.stepCount
|
|
@@ -8676,6 +8774,6 @@ function createGraphLoopHarness(options) {
|
|
|
8676
8774
|
};
|
|
8677
8775
|
}
|
|
8678
8776
|
|
|
8679
|
-
export { AnswerNode, AuditEnvelopePersistenceError, BUILTIN_SYSTEM_REMINDER_TEMPLATES, BUILTIN_SYSTEM_REMINDER_TRIGGERS, BaseTool, CommonParameterTypes, CompositeAuditPort, ContextCheckpointTool, DEFAULT_CONTEXT_CHECKPOINT_TOOL_NAME, DefaultTokenizerPort, ENGINE_ERROR_CODES, ENGINE_STATE_SCHEMA_VERSION, EventBusSubRunTracePublisher, EventStoreAuditPort, FileAuditPort, GraphAgentExecutor, GraphExecutor, LLMPolicyEngine, LlmCaller, LlmNode, MemoryCheckpointer, MemoryEventStore, ModelResolver, SYSTEM_REMINDER_RULES, SystemReminderRegistry, ToolNode, UserNode, WaitUserNode, agentHasToolTrigger, appendStreamingProviderReasoningDetails, applySystemReminders, audit_exports as audit, budgetWarningTrigger, child_run_trace_exports as childRunTrace, child_runs_exports as childRuns, compactProviderReasoningDetails, compactReasoningDetailsInValue, computeToolIdempotencyKey, consoleAudit, contextBudgetWarningTemplate, countToolCallsInCurrentRequest, createCompositeAudit, createConsoleAudit, createContextCheckpointTool, createDefaultGraphExecutor, createDefaultSystemReminderRegistry, createDefaultTokenizerPort, createEventStoreAudit, createFileAudit, createGraphLoopHarness, createMonotonicEventIdFactory, createSystemReminderRules, defaultPolicyEngine, defaultSystemReminderRegistry, emitAuditEnvelope, emitSandboxDecisionAudit, enrichment_exports as enrichment, ensureToolContextRuntimeCapability, events_exports as events, execution_exports as execution, findCachedToolOutputByIdempotencyKey, getToolContextRuntimeBinding, graph_engine_exports as graph, lastStepsHintTemplate, llm_exports as llm, maxStepsForceFinalAnswerTemplate, noopAudit, normalizeToolArgs, periodicTaskstateReflectionTemplate, phaseEqualsTrigger, readContextCheckpointToolName, readNonEmptyStrings, readToolContextModelId, readToolContextPersistedHistory, readToolContextRunContext, readToolContextUserQuery, readToolContextWorkingHistory, remainingStepsLeqTrigger, requestEnricherRegistry, run_context_exports as runContext, run_supervisor_exports as runSupervisor, stepCountModuloTrigger, stripRuntimeReservedToolContextPatch, summarizeCheckpoint, system_reminder_exports as systemReminder, telemetry_exports as telemetry, toDisplayStep, toolCallStreakTemplate, toolCallStreakTrigger, tools_exports as tools };
|
|
8777
|
+
export { AnswerNode, AuditEnvelopePersistenceError, BUILTIN_SYSTEM_REMINDER_TEMPLATES, BUILTIN_SYSTEM_REMINDER_TRIGGERS, BaseTool, CommonParameterTypes, CompositeAuditPort, ContextCheckpointTool, DEFAULT_CONTEXT_CHECKPOINT_TOOL_NAME, DefaultTokenizerPort, ENGINE_ERROR_CODES, ENGINE_STATE_SCHEMA_VERSION, EventBusSubRunTracePublisher, EventStoreAuditPort, FileAuditPort, GraphAgentExecutor, GraphExecutor, LLMPolicyEngine, LlmCaller, LlmNode, MemoryCheckpointer, MemoryEventStore, ModelResolver, SYSTEM_REMINDER_RULES, SystemReminderRegistry, ToolNode, UserNode, WaitUserNode, agentHasToolTrigger, appendStreamingProviderReasoningDetails, applySystemReminders, audit_exports as audit, budgetWarningTrigger, child_run_trace_exports as childRunTrace, child_runs_exports as childRuns, compactProviderReasoningDetails, compactReasoningDetailsInValue, computeToolIdempotencyKey, consoleAudit, contextBudgetWarningTemplate, copyToolContextRuntimeCapability, countToolCallsInCurrentRequest, createCompositeAudit, createConsoleAudit, createContextCheckpointTool, createDefaultGraphExecutor, createDefaultSystemReminderRegistry, createDefaultTokenizerPort, createEventStoreAudit, createFileAudit, createGraphLoopHarness, createMonotonicEventIdFactory, createSystemReminderRules, defaultPolicyEngine, defaultSystemReminderRegistry, emitAuditEnvelope, emitSandboxDecisionAudit, enrichment_exports as enrichment, ensureToolContextRuntimeCapability, events_exports as events, execution_exports as execution, findCachedToolOutputByIdempotencyKey, getToolContextRuntimeBinding, graph_engine_exports as graph, lastStepsHintTemplate, llm_exports as llm, maxStepsForceFinalAnswerTemplate, noopAudit, normalizeToolArgs, periodicTaskstateReflectionTemplate, phaseEqualsTrigger, readContextCheckpointToolName, readNonEmptyStrings, readToolContextModelId, readToolContextPersistedHistory, readToolContextRunContext, readToolContextUserQuery, readToolContextWorkingHistory, remainingStepsLeqTrigger, requestEnricherRegistry, run_context_exports as runContext, run_supervisor_exports as runSupervisor, stepCountModuloTrigger, stripRuntimeReservedToolContextPatch, summarizeCheckpoint, system_reminder_exports as systemReminder, telemetry_exports as telemetry, toDisplayStep, toolCallStreakTemplate, toolCallStreakTrigger, tools_exports as tools };
|
|
8680
8778
|
//# sourceMappingURL=runtime-kernel.js.map
|
|
8681
8779
|
//# sourceMappingURL=runtime-kernel.js.map
|