stitchkit 0.59.4 → 0.60.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/README.md +7 -3
- package/dist/agent-runtime/admission-lanes.d.ts +35 -0
- package/dist/agent-runtime/admission-lanes.d.ts.map +1 -0
- package/dist/agent-runtime/coordinator.d.ts +36 -2
- package/dist/agent-runtime/coordinator.d.ts.map +1 -1
- package/dist/agent-runtime/events.d.ts +7 -0
- package/dist/agent-runtime/events.d.ts.map +1 -1
- package/dist/agent-runtime/history.d.ts +7 -0
- package/dist/agent-runtime/history.d.ts.map +1 -1
- package/dist/agent-runtime/models.d.ts +2 -3
- package/dist/agent-runtime/models.d.ts.map +1 -1
- package/dist/agent-runtime/observability.d.ts.map +1 -1
- package/dist/agent-runtime/run-execution.d.ts +31 -0
- package/dist/agent-runtime/run-execution.d.ts.map +1 -0
- package/dist/agent-runtime/runtime-internals.d.ts +25 -0
- package/dist/agent-runtime/runtime-internals.d.ts.map +1 -0
- package/dist/agent-runtime/runtime-result.d.ts +11 -0
- package/dist/agent-runtime/runtime-result.d.ts.map +1 -0
- package/dist/agent-runtime/runtime.d.ts +16 -15
- package/dist/agent-runtime/runtime.d.ts.map +1 -1
- package/dist/agent-runtime/schemas.d.ts.map +1 -1
- package/dist/agent-runtime/store-driver.d.ts.map +1 -1
- package/dist/agent-runtime/store.d.ts +9 -2
- package/dist/agent-runtime/store.d.ts.map +1 -1
- package/dist/agent-runtime/terminal-commit.d.ts.map +1 -1
- package/dist/agent-runtime/terminal-status.d.ts +13 -0
- package/dist/agent-runtime/terminal-status.d.ts.map +1 -0
- package/dist/agent-runtime.d.ts +5 -3
- package/dist/agent-runtime.d.ts.map +1 -1
- package/dist/agent-runtime.js +211 -156
- package/dist/application/activity.d.ts +7 -2
- package/dist/application/activity.d.ts.map +1 -1
- package/dist/application/grammy.d.ts +6 -0
- package/dist/application/grammy.d.ts.map +1 -1
- package/dist/application/health.d.ts +9 -2
- package/dist/application/health.d.ts.map +1 -1
- package/dist/application/kernel.d.ts +49 -3
- package/dist/application/kernel.d.ts.map +1 -1
- package/dist/application/schemas.d.ts +42 -0
- package/dist/application/schemas.d.ts.map +1 -1
- package/dist/application-opentelemetry.js +2 -2
- package/dist/application.d.ts +3 -3
- package/dist/application.d.ts.map +1 -1
- package/dist/application.js +16 -8
- package/dist/cli.js +6 -6
- package/dist/contract/errors.d.ts +6 -0
- package/dist/contract/errors.d.ts.map +1 -1
- package/dist/contract/index.js +1 -1
- package/dist/declaration.d.ts +345 -0
- package/dist/declaration.d.ts.map +1 -0
- package/dist/declaration.js +183 -0
- package/dist/{index-5c8n2123.js → index-1zencgcb.js} +64 -30
- package/dist/{index-sa2mbwa7.js → index-2akar0rq.js} +2 -2
- package/dist/{index-41wm56v0.js → index-3hn10n4c.js} +1 -1
- package/dist/{index-f6pymtqe.js → index-3w74r08v.js} +2 -2
- package/dist/{index-7c0gkyvj.js → index-6fbp58g8.js} +2 -2
- package/dist/{index-gnvzyw0k.js → index-8es1hrv4.js} +2 -2
- package/dist/{index-mgf6cdkm.js → index-8eywc9zv.js} +35 -1
- package/dist/{index-3nwng7hs.js → index-8pc5s3pz.js} +4 -4
- package/dist/{index-28cqssm3.js → index-9h1vba8n.js} +6 -0
- package/dist/{index-0nc0cddp.js → index-a59da114.js} +17 -28
- package/dist/{index-s8w2y7kr.js → index-f7521k0x.js} +22 -16
- package/dist/{index-y2rb7dwx.js → index-pzyt11ch.js} +5 -1
- package/dist/{index-mr617n62.js → index-svqhcrrj.js} +1 -1
- package/dist/{index-ps5pxp3h.js → index-v6e8hnkx.js} +7 -1
- package/dist/{index-1tkyng3g.js → index-vkk06pv1.js} +1 -9
- package/dist/{index-2nzpcfbp.js → index-x8v8b7rc.js} +2 -2
- package/dist/index.js +1 -1
- package/dist/internal/observability-sink.d.ts.map +1 -1
- package/dist/internal/route-pattern.d.ts +9 -0
- package/dist/internal/route-pattern.d.ts.map +1 -1
- package/dist/node.d.ts +1 -1
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +5 -5
- package/dist/observability/index.js +5 -5
- package/dist/observability/sanitize.d.ts +3 -1
- package/dist/observability/sanitize.d.ts.map +1 -1
- package/dist/remote.js +3 -3
- package/dist/server/error-hook.d.ts +10 -3
- package/dist/server/error-hook.d.ts.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +9 -12
- package/dist/server/middleware/cors.d.ts +5 -2
- package/dist/server/middleware/cors.d.ts.map +1 -1
- package/dist/server/openapi.d.ts.map +1 -1
- package/dist/server/router.d.ts.map +1 -1
- package/dist/server/socket-io-config.d.ts +68 -3
- package/dist/server/socket-io-config.d.ts.map +1 -1
- package/dist/server/socket-io-node.d.ts +1 -1
- package/dist/server/socket-io-node.d.ts.map +1 -1
- package/dist/server/socket-io.d.ts +1 -1
- package/dist/server/socket-io.d.ts.map +1 -1
- package/dist/testing/surface-manifest.d.ts.map +1 -1
- package/dist/testing.js +8 -10
- package/dist/tools/flatten-join.d.ts +2 -0
- package/dist/tools/flatten-join.d.ts.map +1 -1
- package/dist/tools/flatten.d.ts.map +1 -1
- package/dist/tools/mcp-prepare.d.ts +0 -2
- package/dist/tools/mcp-prepare.d.ts.map +1 -1
- package/dist/tools/runtime-tool.d.ts +0 -3
- package/dist/tools/runtime-tool.d.ts.map +1 -1
- package/dist/tools/schema.d.ts +0 -4
- package/dist/tools/schema.d.ts.map +1 -1
- package/dist/tools.js +9 -9
- package/llms-full.txt +924 -68
- package/llms.txt +1 -0
- package/package.json +6 -2
package/dist/agent-runtime.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ToolExecutionControlError,
|
|
3
3
|
isToolExecutionControlError
|
|
4
|
-
} from "./index-
|
|
4
|
+
} from "./index-2akar0rq.js";
|
|
5
5
|
import {
|
|
6
6
|
AgentAssistantPlaceholderSchema,
|
|
7
7
|
AgentControlPartSchema,
|
|
@@ -34,14 +34,14 @@ import"./index-6djpbnda.js";
|
|
|
34
34
|
import"./index-cby4ar3v.js";
|
|
35
35
|
import {
|
|
36
36
|
createBoundedSinkManager
|
|
37
|
-
} from "./index-
|
|
38
|
-
import"./index-
|
|
39
|
-
import"./index-
|
|
37
|
+
} from "./index-a59da114.js";
|
|
38
|
+
import"./index-6fbp58g8.js";
|
|
39
|
+
import"./index-v6e8hnkx.js";
|
|
40
40
|
import"./index-6k1937bx.js";
|
|
41
41
|
import {
|
|
42
42
|
childSpan,
|
|
43
43
|
createTraceContext
|
|
44
|
-
} from "./index-
|
|
44
|
+
} from "./index-pzyt11ch.js";
|
|
45
45
|
import"./index-smpbdg6k.js";
|
|
46
46
|
|
|
47
47
|
// src/agent-runtime/compaction.ts
|
|
@@ -243,21 +243,31 @@ function createAgentSessionCoordinator() {
|
|
|
243
243
|
}
|
|
244
244
|
const active = [...lanes.values()].map((lane) => lane.active).filter((run) => run !== undefined);
|
|
245
245
|
const settlements = active.map((run) => run.settled);
|
|
246
|
+
const outstanding = new Set(settlements);
|
|
247
|
+
for (const settled of settlements) {
|
|
248
|
+
settled.then(() => {
|
|
249
|
+
outstanding.delete(settled);
|
|
250
|
+
});
|
|
251
|
+
}
|
|
246
252
|
const drain = Promise.all(settlements).then(() => {
|
|
247
253
|
return;
|
|
248
254
|
});
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
255
|
+
const finished = () => ({
|
|
256
|
+
settled: outstanding.size === 0,
|
|
257
|
+
timedOut: outstanding.size > 0,
|
|
258
|
+
remaining: outstanding.size
|
|
259
|
+
});
|
|
260
|
+
if (options.gracePeriodMs !== undefined && await waitWithin(drain, options.gracePeriodMs)) {
|
|
261
|
+
return finished();
|
|
253
262
|
}
|
|
254
263
|
for (const run of active)
|
|
255
264
|
run.controller.abort("shutdown");
|
|
256
|
-
if (options.
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
265
|
+
if (options.forceTimeoutMs === undefined) {
|
|
266
|
+
await drain;
|
|
267
|
+
return finished();
|
|
268
|
+
}
|
|
260
269
|
await waitWithin(drain, options.forceTimeoutMs);
|
|
270
|
+
return finished();
|
|
261
271
|
},
|
|
262
272
|
isRunning(key) {
|
|
263
273
|
return lanes.get(key)?.active !== undefined;
|
|
@@ -431,12 +441,16 @@ async function userMessage(message, options) {
|
|
|
431
441
|
});
|
|
432
442
|
continue;
|
|
433
443
|
}
|
|
434
|
-
const fallback = options.unresolvedFile ?? "
|
|
444
|
+
const fallback = options.unresolvedFile ?? "omit";
|
|
435
445
|
if (fallback === "error") {
|
|
436
446
|
throw new Error(`No history file resolver configured for ${part.reference}`);
|
|
437
447
|
}
|
|
438
448
|
if (fallback === "text") {
|
|
439
|
-
|
|
449
|
+
const described = part.filename ?? part.mediaType;
|
|
450
|
+
content.push({
|
|
451
|
+
type: "text",
|
|
452
|
+
text: described ? `[attachment: ${described}]` : "[attachment]"
|
|
453
|
+
});
|
|
440
454
|
}
|
|
441
455
|
}
|
|
442
456
|
if (content.length === 0)
|
|
@@ -693,7 +707,18 @@ function createAgentObservability(config) {
|
|
|
693
707
|
...config.onSinkError && { onSinkError: config.onSinkError },
|
|
694
708
|
...config.onDrop && { onDrop: config.onDrop }
|
|
695
709
|
});
|
|
710
|
+
const DEDUPLICATION_WINDOW = 1e4;
|
|
696
711
|
const emitted = new Set;
|
|
712
|
+
const ring = new Array(DEDUPLICATION_WINDOW).fill(undefined);
|
|
713
|
+
let cursor = 0;
|
|
714
|
+
const remember = (eventId) => {
|
|
715
|
+
emitted.add(eventId);
|
|
716
|
+
const evicted = ring[cursor];
|
|
717
|
+
ring[cursor] = eventId;
|
|
718
|
+
cursor = (cursor + 1) % DEDUPLICATION_WINDOW;
|
|
719
|
+
if (evicted !== undefined)
|
|
720
|
+
emitted.delete(evicted);
|
|
721
|
+
};
|
|
697
722
|
return {
|
|
698
723
|
rootTrace(parent) {
|
|
699
724
|
const trace = parent ? childSpan(parent) : createTraceContext();
|
|
@@ -703,7 +728,7 @@ function createAgentObservability(config) {
|
|
|
703
728
|
const parsed = AgentRunEventSchema.parse(rawEvent);
|
|
704
729
|
if ((config.deduplicate ?? true) && emitted.has(parsed.eventId))
|
|
705
730
|
return;
|
|
706
|
-
|
|
731
|
+
remember(parsed.eventId);
|
|
707
732
|
manager.submit(() => config.includeInternalCause ? parsed : AgentRunEventSchema.omit({ internalCause: true }).parse(parsed));
|
|
708
733
|
},
|
|
709
734
|
flush: () => manager.flush(),
|
|
@@ -893,13 +918,74 @@ function defineAgentProtocol(config) {
|
|
|
893
918
|
parsePart: (input) => AgentMessageSchema.shape.parts.element.parse(input)
|
|
894
919
|
};
|
|
895
920
|
}
|
|
896
|
-
// src/agent-runtime/
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
921
|
+
// src/agent-runtime/admission-lanes.ts
|
|
922
|
+
function createRuntimeAdmissionLanes() {
|
|
923
|
+
const lanes = new Map;
|
|
924
|
+
const admit = (runId) => {
|
|
925
|
+
const admission = { runId, completion: Promise.withResolvers() };
|
|
926
|
+
admission.completion.promise.catch(() => {
|
|
927
|
+
return;
|
|
928
|
+
});
|
|
929
|
+
return admission;
|
|
930
|
+
};
|
|
931
|
+
return {
|
|
932
|
+
reserve(key, runId) {
|
|
933
|
+
const existing = lanes.get(key);
|
|
934
|
+
const lane = existing ?? { acceptanceTail: Promise.resolve() };
|
|
935
|
+
if (!existing)
|
|
936
|
+
lanes.set(key, lane);
|
|
937
|
+
if (!lane.head) {
|
|
938
|
+
lane.head = admit(runId);
|
|
939
|
+
return { lane, admission: lane.head, shouldSchedule: true };
|
|
940
|
+
}
|
|
941
|
+
if (!lane.pending) {
|
|
942
|
+
lane.pending = admit(runId);
|
|
943
|
+
return { lane, admission: lane.pending, shouldSchedule: true };
|
|
944
|
+
}
|
|
945
|
+
return { lane, admission: lane.pending, shouldSchedule: false };
|
|
946
|
+
},
|
|
947
|
+
settle(key, admission) {
|
|
948
|
+
const lane = lanes.get(key);
|
|
949
|
+
if (!lane)
|
|
950
|
+
return;
|
|
951
|
+
if (lane.head?.runId === admission.runId) {
|
|
952
|
+
lane.head = lane.pending;
|
|
953
|
+
lane.pending = undefined;
|
|
954
|
+
} else if (lane.pending?.runId === admission.runId) {
|
|
955
|
+
lane.pending = undefined;
|
|
956
|
+
}
|
|
957
|
+
if (!lane.head && !lane.pending)
|
|
958
|
+
lanes.delete(key);
|
|
959
|
+
},
|
|
960
|
+
async waitForAcceptances(lane) {
|
|
961
|
+
while (true) {
|
|
962
|
+
const tail = lane.acceptanceTail;
|
|
963
|
+
await tail.catch(() => {
|
|
964
|
+
return;
|
|
965
|
+
});
|
|
966
|
+
if (tail === lane.acceptanceTail)
|
|
967
|
+
return;
|
|
968
|
+
}
|
|
969
|
+
}
|
|
970
|
+
};
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
// src/agent-runtime/run-execution.ts
|
|
974
|
+
import { stepCountIs, streamText } from "ai";
|
|
975
|
+
|
|
976
|
+
// src/agent-runtime/runtime-internals.ts
|
|
901
977
|
import { z as z5 } from "zod";
|
|
902
978
|
|
|
979
|
+
// src/agent-runtime/terminal-status.ts
|
|
980
|
+
function assistantStatus(reason) {
|
|
981
|
+
if (reason === "success" || reason === "policy_stop")
|
|
982
|
+
return "completed";
|
|
983
|
+
if (reason === "interrupted" || reason === "cancelled" || reason === "shutdown") {
|
|
984
|
+
return "interrupted";
|
|
985
|
+
}
|
|
986
|
+
return "failed";
|
|
987
|
+
}
|
|
988
|
+
|
|
903
989
|
// src/agent-runtime/terminal-commit.ts
|
|
904
990
|
class AgentRuntimeConflictError extends Error {
|
|
905
991
|
constructor(operation) {
|
|
@@ -912,20 +998,12 @@ function appliedSnapshot(result, operation) {
|
|
|
912
998
|
return result.snapshot;
|
|
913
999
|
throw new AgentRuntimeConflictError(operation);
|
|
914
1000
|
}
|
|
915
|
-
function terminalMessageStatus(reason) {
|
|
916
|
-
if (reason === "success" || reason === "policy_stop")
|
|
917
|
-
return "completed";
|
|
918
|
-
if (reason === "interrupted" || reason === "cancelled" || reason === "shutdown") {
|
|
919
|
-
return "interrupted";
|
|
920
|
-
}
|
|
921
|
-
return "failed";
|
|
922
|
-
}
|
|
923
1001
|
function canonicalTerminal(snapshot, runId, retainedAssistant) {
|
|
924
1002
|
const run = snapshot.runs.find((candidate) => candidate.id === runId);
|
|
925
1003
|
if (!run?.terminalReason)
|
|
926
1004
|
return;
|
|
927
1005
|
const assistant = snapshot.messages.find((message) => message.id === run.assistantMessageId) ?? retainedAssistant;
|
|
928
|
-
if (snapshot.conversationId !== run.conversationId || !assistant || assistant.id !== run.assistantMessageId || assistant.conversationId !== run.conversationId || assistant.runId !== run.id || assistant.role !== "assistant" || assistant.status !==
|
|
1006
|
+
if (snapshot.conversationId !== run.conversationId || !assistant || assistant.id !== run.assistantMessageId || assistant.conversationId !== run.conversationId || assistant.runId !== run.id || assistant.role !== "assistant" || assistant.status !== assistantStatus(run.terminalReason)) {
|
|
929
1007
|
throw new AgentRuntimeConflictError("terminal result projection");
|
|
930
1008
|
}
|
|
931
1009
|
return {
|
|
@@ -999,7 +1077,7 @@ async function commitAgentRunTerminal(input) {
|
|
|
999
1077
|
}
|
|
1000
1078
|
}
|
|
1001
1079
|
|
|
1002
|
-
// src/agent-runtime/runtime.ts
|
|
1080
|
+
// src/agent-runtime/runtime-internals.ts
|
|
1003
1081
|
function findRun(runs, runId) {
|
|
1004
1082
|
const run = runs.find((candidate) => candidate.id === runId);
|
|
1005
1083
|
if (!run)
|
|
@@ -1025,14 +1103,6 @@ function appendText(parts, text) {
|
|
|
1025
1103
|
}
|
|
1026
1104
|
parts.push(AgentMessagePartSchema.parse({ type: "text", text }));
|
|
1027
1105
|
}
|
|
1028
|
-
function assistantStatus(reason) {
|
|
1029
|
-
if (reason === "success" || reason === "policy_stop")
|
|
1030
|
-
return "completed";
|
|
1031
|
-
if (reason === "interrupted" || reason === "cancelled" || reason === "shutdown") {
|
|
1032
|
-
return "interrupted";
|
|
1033
|
-
}
|
|
1034
|
-
return "failed";
|
|
1035
|
-
}
|
|
1036
1106
|
function abortTerminalReason(signal) {
|
|
1037
1107
|
if (signal.reason === "shutdown")
|
|
1038
1108
|
return "shutdown";
|
|
@@ -1074,88 +1144,20 @@ function createIdleDeadline(parent, timeoutMs) {
|
|
|
1074
1144
|
}
|
|
1075
1145
|
};
|
|
1076
1146
|
}
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
const
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
admission.completion.promise.catch(() => {
|
|
1092
|
-
return;
|
|
1093
|
-
});
|
|
1094
|
-
lane.head = admission;
|
|
1095
|
-
return { lane, admission, shouldSchedule: true };
|
|
1096
|
-
}
|
|
1097
|
-
if (!lane.pending) {
|
|
1098
|
-
const admission = { runId, completion: Promise.withResolvers() };
|
|
1099
|
-
admission.completion.promise.catch(() => {
|
|
1100
|
-
return;
|
|
1101
|
-
});
|
|
1102
|
-
lane.pending = admission;
|
|
1103
|
-
return { lane, admission, shouldSchedule: true };
|
|
1104
|
-
}
|
|
1105
|
-
return { lane, admission: lane.pending, shouldSchedule: false };
|
|
1106
|
-
};
|
|
1107
|
-
const settleAdmission = (key, admission) => {
|
|
1108
|
-
const lane = admissionLanes.get(key);
|
|
1109
|
-
if (!lane)
|
|
1110
|
-
return;
|
|
1111
|
-
if (lane.head?.runId === admission.runId) {
|
|
1112
|
-
lane.head = lane.pending;
|
|
1113
|
-
lane.pending = undefined;
|
|
1114
|
-
} else if (lane.pending?.runId === admission.runId) {
|
|
1115
|
-
lane.pending = undefined;
|
|
1116
|
-
}
|
|
1117
|
-
if (!lane.head && !lane.pending)
|
|
1118
|
-
admissionLanes.delete(key);
|
|
1119
|
-
};
|
|
1120
|
-
const waitForAdmissionAcceptances = async (lane) => {
|
|
1121
|
-
while (true) {
|
|
1122
|
-
const tail = lane.acceptanceTail;
|
|
1123
|
-
await tail.catch(() => {
|
|
1124
|
-
return;
|
|
1125
|
-
});
|
|
1126
|
-
if (tail === lane.acceptanceTail)
|
|
1127
|
-
return;
|
|
1128
|
-
}
|
|
1129
|
-
};
|
|
1130
|
-
const checkpointEveryEvents = config.loop?.checkpointEveryEvents ?? 20;
|
|
1131
|
-
const maxSteps = config.loop?.maxSteps ?? 50;
|
|
1132
|
-
const idleTimeoutMs = config.loop?.idleTimeoutMs;
|
|
1133
|
-
if (!Number.isSafeInteger(checkpointEveryEvents) || checkpointEveryEvents < 1) {
|
|
1134
|
-
throw new TypeError("checkpointEveryEvents must be a positive safe integer");
|
|
1135
|
-
}
|
|
1136
|
-
if (!Number.isSafeInteger(maxSteps) || maxSteps < 1) {
|
|
1137
|
-
throw new TypeError("maxSteps must be a positive safe integer");
|
|
1138
|
-
}
|
|
1139
|
-
if (idleTimeoutMs !== undefined && (!Number.isSafeInteger(idleTimeoutMs) || idleTimeoutMs < 1)) {
|
|
1140
|
-
throw new TypeError("idleTimeoutMs must be a positive safe integer");
|
|
1141
|
-
}
|
|
1142
|
-
const policyNames = new Set(["max-steps"]);
|
|
1143
|
-
for (const policy of config.loop?.stopPolicies ?? []) {
|
|
1144
|
-
if (!policy.name || policyNames.has(policy.name)) {
|
|
1145
|
-
throw new TypeError("Agent stop policy names must be non-empty and unique");
|
|
1146
|
-
}
|
|
1147
|
-
policyNames.add(policy.name);
|
|
1148
|
-
}
|
|
1149
|
-
const publish = async (event) => {
|
|
1150
|
-
try {
|
|
1151
|
-
await config.publish?.(event);
|
|
1152
|
-
} catch (error) {
|
|
1153
|
-
try {
|
|
1154
|
-
await config.onPublishError?.({ event, error });
|
|
1155
|
-
} catch {}
|
|
1156
|
-
}
|
|
1157
|
-
};
|
|
1158
|
-
const executeRun = async (input) => {
|
|
1147
|
+
|
|
1148
|
+
// src/agent-runtime/run-execution.ts
|
|
1149
|
+
function createRunExecutor(dependencies) {
|
|
1150
|
+
const {
|
|
1151
|
+
config,
|
|
1152
|
+
publish,
|
|
1153
|
+
runtimeEpoch,
|
|
1154
|
+
generateId,
|
|
1155
|
+
now,
|
|
1156
|
+
checkpointEveryEvents,
|
|
1157
|
+
maxSteps,
|
|
1158
|
+
idleTimeoutMs
|
|
1159
|
+
} = dependencies;
|
|
1160
|
+
return async function executeRun(input) {
|
|
1159
1161
|
const queuedSnapshot = await config.store.loadSnapshot(input.acceptedRun.conversationId);
|
|
1160
1162
|
const queuedRun = findRun(queuedSnapshot.runs, input.acceptedRun.id);
|
|
1161
1163
|
const acquired = appliedSnapshot(await config.store.acquireRun({
|
|
@@ -1699,7 +1701,74 @@ function createAgentRuntime(config) {
|
|
|
1699
1701
|
...terminalPolicyName && { policyName: terminalPolicyName }
|
|
1700
1702
|
};
|
|
1701
1703
|
};
|
|
1704
|
+
}
|
|
1705
|
+
|
|
1706
|
+
// src/agent-runtime/runtime.ts
|
|
1707
|
+
function createAgentRuntime(config) {
|
|
1708
|
+
const coordinator = createAgentSessionCoordinator();
|
|
1709
|
+
const tickets = new Map;
|
|
1710
|
+
const generateId = config.generateId ?? (() => crypto.randomUUID());
|
|
1711
|
+
const now = config.now ?? (() => new Date);
|
|
1712
|
+
const runtimeEpoch = generateId();
|
|
1713
|
+
const admissionLanes = createRuntimeAdmissionLanes();
|
|
1714
|
+
const reserveAdmission = admissionLanes.reserve;
|
|
1715
|
+
const settleAdmission = admissionLanes.settle;
|
|
1716
|
+
const waitForAdmissionAcceptances = admissionLanes.waitForAcceptances;
|
|
1717
|
+
const checkpointEveryEvents = config.loop?.checkpointEveryEvents ?? 20;
|
|
1718
|
+
const maxSteps = config.loop?.maxSteps ?? 50;
|
|
1719
|
+
const idleTimeoutMs = config.loop?.idleTimeoutMs;
|
|
1720
|
+
if (!Number.isSafeInteger(checkpointEveryEvents) || checkpointEveryEvents < 1) {
|
|
1721
|
+
throw new TypeError("checkpointEveryEvents must be a positive safe integer");
|
|
1722
|
+
}
|
|
1723
|
+
if (!Number.isSafeInteger(maxSteps) || maxSteps < 1) {
|
|
1724
|
+
throw new TypeError("maxSteps must be a positive safe integer");
|
|
1725
|
+
}
|
|
1726
|
+
if (idleTimeoutMs !== undefined && (!Number.isSafeInteger(idleTimeoutMs) || idleTimeoutMs < 1)) {
|
|
1727
|
+
throw new TypeError("idleTimeoutMs must be a positive safe integer");
|
|
1728
|
+
}
|
|
1729
|
+
const policyNames = new Set(["max-steps"]);
|
|
1730
|
+
for (const policy of config.loop?.stopPolicies ?? []) {
|
|
1731
|
+
if (!policy.name || policyNames.has(policy.name)) {
|
|
1732
|
+
throw new TypeError("Agent stop policy names must be non-empty and unique");
|
|
1733
|
+
}
|
|
1734
|
+
policyNames.add(policy.name);
|
|
1735
|
+
}
|
|
1736
|
+
const publish = async (event) => {
|
|
1737
|
+
try {
|
|
1738
|
+
await config.publish?.(event);
|
|
1739
|
+
} catch (error) {
|
|
1740
|
+
try {
|
|
1741
|
+
await config.onPublishError?.({ event, error });
|
|
1742
|
+
} catch {}
|
|
1743
|
+
}
|
|
1744
|
+
};
|
|
1745
|
+
const executeRun = createRunExecutor({
|
|
1746
|
+
config,
|
|
1747
|
+
publish,
|
|
1748
|
+
runtimeEpoch,
|
|
1749
|
+
generateId,
|
|
1750
|
+
now,
|
|
1751
|
+
checkpointEveryEvents,
|
|
1752
|
+
maxSteps,
|
|
1753
|
+
...idleTimeoutMs !== undefined && { idleTimeoutMs }
|
|
1754
|
+
});
|
|
1755
|
+
let admissionClosed = false;
|
|
1756
|
+
const closedError = () => new Error("[stitchkit] agent runtime is closed and admits no further work");
|
|
1757
|
+
const refuse = () => {
|
|
1758
|
+
const error = closedError();
|
|
1759
|
+
const accepted = Promise.reject(error);
|
|
1760
|
+
const result = Promise.reject(error);
|
|
1761
|
+
accepted.catch(() => {
|
|
1762
|
+
return;
|
|
1763
|
+
});
|
|
1764
|
+
result.catch(() => {
|
|
1765
|
+
return;
|
|
1766
|
+
});
|
|
1767
|
+
return { accepted, result };
|
|
1768
|
+
};
|
|
1702
1769
|
const resume = (rawInput) => {
|
|
1770
|
+
if (admissionClosed)
|
|
1771
|
+
return refuse();
|
|
1703
1772
|
const context = config.protocol.parseContext(rawInput.context);
|
|
1704
1773
|
const accepted = Promise.withResolvers();
|
|
1705
1774
|
const result = Promise.withResolvers();
|
|
@@ -1729,6 +1798,14 @@ function createAgentRuntime(config) {
|
|
|
1729
1798
|
};
|
|
1730
1799
|
return {
|
|
1731
1800
|
submit(rawInput) {
|
|
1801
|
+
if (admissionClosed) {
|
|
1802
|
+
const refused = refuse();
|
|
1803
|
+
const admission = Promise.reject(closedError());
|
|
1804
|
+
admission.catch(() => {
|
|
1805
|
+
return;
|
|
1806
|
+
});
|
|
1807
|
+
return { ...refused, admission };
|
|
1808
|
+
}
|
|
1732
1809
|
const metadata = rawInput.metadata === undefined ? undefined : config.protocol.parseInputMetadata(rawInput.metadata);
|
|
1733
1810
|
const input = {
|
|
1734
1811
|
conversationId: rawInput.conversationId,
|
|
@@ -1810,6 +1887,8 @@ function createAgentRuntime(config) {
|
|
|
1810
1887
|
context,
|
|
1811
1888
|
conversationId: input.conversationId
|
|
1812
1889
|
});
|
|
1890
|
+
if (admissionClosed)
|
|
1891
|
+
throw closedError();
|
|
1813
1892
|
const acceptance = await config.store.acceptInputAndAssignRun({
|
|
1814
1893
|
idempotencyKey: input.idempotencyKey,
|
|
1815
1894
|
input: userMessage2,
|
|
@@ -1969,9 +2048,8 @@ function createAgentRuntime(config) {
|
|
|
1969
2048
|
return requested;
|
|
1970
2049
|
},
|
|
1971
2050
|
async recover(options) {
|
|
1972
|
-
if (
|
|
1973
|
-
throw
|
|
1974
|
-
}
|
|
2051
|
+
if (admissionClosed)
|
|
2052
|
+
throw closedError();
|
|
1975
2053
|
const pageSize = options.pageSize ?? 100;
|
|
1976
2054
|
const maxRuns = options.maxRuns ?? 1000;
|
|
1977
2055
|
if (!Number.isSafeInteger(pageSize) || pageSize < 1 || pageSize > 1000) {
|
|
@@ -1982,8 +2060,8 @@ function createAgentRuntime(config) {
|
|
|
1982
2060
|
}
|
|
1983
2061
|
const outcomes = [];
|
|
1984
2062
|
let cursor;
|
|
1985
|
-
while (outcomes.length < maxRuns && !options.signal?.aborted) {
|
|
1986
|
-
const page = await config.store.
|
|
2063
|
+
while (outcomes.length < maxRuns && !options.signal?.aborted && !admissionClosed) {
|
|
2064
|
+
const page = await config.store.scanRecoverable({
|
|
1987
2065
|
...cursor && { cursor },
|
|
1988
2066
|
limit: Math.min(pageSize, maxRuns - outcomes.length)
|
|
1989
2067
|
});
|
|
@@ -2072,7 +2150,10 @@ function createAgentRuntime(config) {
|
|
|
2072
2150
|
return outcomes;
|
|
2073
2151
|
},
|
|
2074
2152
|
stop: (conversationKey, reason) => coordinator.stop(conversationKey, reason),
|
|
2075
|
-
close: (options) =>
|
|
2153
|
+
close: (options) => {
|
|
2154
|
+
admissionClosed = true;
|
|
2155
|
+
return coordinator.close(options);
|
|
2156
|
+
}
|
|
2076
2157
|
};
|
|
2077
2158
|
}
|
|
2078
2159
|
// src/agent-runtime/store.ts
|
|
@@ -2271,14 +2352,6 @@ function terminalState(reason) {
|
|
|
2271
2352
|
return "abandoned";
|
|
2272
2353
|
return "failed";
|
|
2273
2354
|
}
|
|
2274
|
-
function terminalMessageStatus2(reason) {
|
|
2275
|
-
if (reason === "success" || reason === "policy_stop")
|
|
2276
|
-
return "completed";
|
|
2277
|
-
if (reason === "interrupted" || reason === "cancelled" || reason === "shutdown") {
|
|
2278
|
-
return "interrupted";
|
|
2279
|
-
}
|
|
2280
|
-
return "failed";
|
|
2281
|
-
}
|
|
2282
2355
|
function applied(current, input, effects) {
|
|
2283
2356
|
return {
|
|
2284
2357
|
outcome: "applied",
|
|
@@ -2439,7 +2512,7 @@ function reduceStore(current, operation) {
|
|
|
2439
2512
|
}
|
|
2440
2513
|
if (operation.type === "terminal" && run) {
|
|
2441
2514
|
const input = operation.input;
|
|
2442
|
-
if (run.revision !== input.expectedRevision || run.state !== "running" && run.state !== "interrupt_requested" || run.ownerId !== input.ownerId || input.fencingToken !== undefined && run.fencingToken !== input.fencingToken || input.assistant.runId !== run.id || input.assistant.id !== run.assistantMessageId || input.assistant.conversationId !== run.conversationId || input.assistant.role !== "assistant" || input.assistant.status !==
|
|
2515
|
+
if (run.revision !== input.expectedRevision || run.state !== "running" && run.state !== "interrupt_requested" || run.ownerId !== input.ownerId || input.fencingToken !== undefined && run.fencingToken !== input.fencingToken || input.assistant.runId !== run.id || input.assistant.id !== run.assistantMessageId || input.assistant.conversationId !== run.conversationId || input.assistant.role !== "assistant" || input.assistant.status !== assistantStatus(input.reason)) {
|
|
2443
2516
|
return conflict(run.revision);
|
|
2444
2517
|
}
|
|
2445
2518
|
const next = AgentRunSchema.parse({
|
|
@@ -2645,26 +2718,7 @@ function createAgentRuntimeStore(driver) {
|
|
|
2645
2718
|
type: "compact",
|
|
2646
2719
|
input: ReplaceCompactedRangeSchema.parse(input)
|
|
2647
2720
|
}),
|
|
2648
|
-
async scanRecoverable() {
|
|
2649
|
-
const snapshots = [];
|
|
2650
|
-
const seenConversationIds = new Set;
|
|
2651
|
-
let cursor;
|
|
2652
|
-
do {
|
|
2653
|
-
const page = AgentRecoverablePageSchema.parse(await driver.scanRecoverable({
|
|
2654
|
-
...cursor && { cursor },
|
|
2655
|
-
limit: 100
|
|
2656
|
-
}));
|
|
2657
|
-
const conversationIds = [
|
|
2658
|
-
...new Set(page.items.map((item) => item.conversationId))
|
|
2659
|
-
].filter((conversationId) => !seenConversationIds.has(conversationId));
|
|
2660
|
-
for (const conversationId of conversationIds)
|
|
2661
|
-
seenConversationIds.add(conversationId);
|
|
2662
|
-
snapshots.push(...await Promise.all(conversationIds.map(loadSnapshot)));
|
|
2663
|
-
cursor = page.nextCursor;
|
|
2664
|
-
} while (cursor !== undefined);
|
|
2665
|
-
return snapshots;
|
|
2666
|
-
},
|
|
2667
|
-
async scanRecoverablePage(input) {
|
|
2721
|
+
async scanRecoverable(input) {
|
|
2668
2722
|
const parsed = AgentRecoverableScanInputSchema.parse(input);
|
|
2669
2723
|
return AgentRecoverablePageSchema.parse(await driver.scanRecoverable(parsed));
|
|
2670
2724
|
}
|
|
@@ -2863,6 +2917,7 @@ export {
|
|
|
2863
2917
|
AgentRunSchema,
|
|
2864
2918
|
AgentRunStateEventSchema,
|
|
2865
2919
|
AgentRunStateSchema,
|
|
2920
|
+
AgentRuntimeConflictError,
|
|
2866
2921
|
AgentRuntimeEventCursorSchema,
|
|
2867
2922
|
AgentRuntimeEventSchema,
|
|
2868
2923
|
AgentRuntimeHeadSchema,
|
|
@@ -37,7 +37,13 @@ export declare const ActivityLiveStateSchema: z.ZodEnum<{
|
|
|
37
37
|
queued: "queued";
|
|
38
38
|
}>;
|
|
39
39
|
export type ActivityLiveState = z.infer<typeof ActivityLiveStateSchema>;
|
|
40
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Exported because `ActivityToken` is part of a public interface a consumer must
|
|
42
|
+
* be able to implement — a test double, a decorator. A brand nobody outside the
|
|
43
|
+
* module can spell makes `ActivityProjection` unimplementable, which is a
|
|
44
|
+
* stronger guarantee than intended.
|
|
45
|
+
*/
|
|
46
|
+
export declare const ActivityTokenBrand: unique symbol;
|
|
41
47
|
export interface ActivityToken {
|
|
42
48
|
readonly [ActivityTokenBrand]: true;
|
|
43
49
|
}
|
|
@@ -66,5 +72,4 @@ export interface ActivityProjection<TStage extends string> {
|
|
|
66
72
|
subscribe(listener: (snapshot: ActivitySnapshot) => void | Promise<void>): () => void;
|
|
67
73
|
}
|
|
68
74
|
export declare function createActivityProjection<const TStages extends readonly string[]>(config: ActivityProjectionConfig<TStages>): ActivityProjection<TStages[number]>;
|
|
69
|
-
export {};
|
|
70
75
|
//# sourceMappingURL=activity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../src/application/activity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,eAAO,MAAM,gBAAgB,aAA6B,CAAC;AAC3D,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,eAAO,MAAM,qBAAqB,aAA6B,CAAC;AAChE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,2BAA2B;;;;;;mBAS3B,CAAC;AACd,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAYhF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;mBAWtB,CAAC;AACd,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,uBAAuB;;;EAA+B,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,
|
|
1
|
+
{"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../src/application/activity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,eAAO,MAAM,gBAAgB,aAA6B,CAAC;AAC3D,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,eAAO,MAAM,qBAAqB,aAA6B,CAAC;AAChE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,2BAA2B;;;;;;mBAS3B,CAAC;AACd,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAYhF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;mBAWtB,CAAC;AACd,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,uBAAuB;;;EAA+B,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,OAAO,MAAiD,CAAC;AAC1F,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB,CAAC,MAAM,SAAS,MAAM;IACvD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;CACnC;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;CACrC;AAED,MAAM,WAAW,wBAAwB,CAAC,OAAO,SAAS,SAAS,MAAM,EAAE;IACzE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,iBAAiB,CAAC,CAAC,OAAO,EAAE,iCAAiC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtF;AAED,MAAM,WAAW,kBAAkB,CAAC,MAAM,SAAS,MAAM;IACvD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,iBAAiB,GAAG,aAAa,CAAC;IAC9D,UAAU,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;IAClF,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;IACpC,WAAW,IAAI,gBAAgB,CAAC;IAChC,iFAAiF;IACjF,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC;CACvF;AA8BD,wBAAgB,wBAAwB,CAAC,KAAK,CAAC,OAAO,SAAS,SAAS,MAAM,EAAE,EAC9E,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,GACxC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAoHrC"}
|
|
@@ -23,6 +23,12 @@ export interface GrammyWebhookResource<C extends Context> {
|
|
|
23
23
|
readonly resource: ManagedResource;
|
|
24
24
|
handleUpdate(update: GrammyUpdate<C>, webhookReplyEnvelope?: WebhookReplyEnvelope): Promise<void>;
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Deliberately NOT in `STITCH_ERROR_STATUS`: that registry is the generic core's
|
|
28
|
+
* (→ ADR 0002), and a provider name has no place in a union every consumer
|
|
29
|
+
* imports. This code travels as itself through a partial `codeMap`, exactly the
|
|
30
|
+
* way a code the project threw does.
|
|
31
|
+
*/
|
|
26
32
|
export declare class GrammyWebhookUnavailableError extends Error {
|
|
27
33
|
readonly code = "GRAMMY_WEBHOOK_NOT_ACCEPTING";
|
|
28
34
|
constructor();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grammy.d.ts","sourceRoot":"","sources":["../../src/application/grammy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC3F,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAMzE,MAAM,WAAW,2BAA2B,CAAC,CAAC,SAAS,OAAO;IAC5D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAcD,iEAAiE;AACjE,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,OAAO,EACrD,MAAM,EAAE,2BAA2B,CAAC,CAAC,CAAC,GACrC,eAAe,CAiEjB;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9F,MAAM,WAAW,2BAA2B,CAAC,CAAC,SAAS,OAAO;IAC5D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,OAAO;IACtD,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,YAAY,CACV,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,oBAAoB,CAAC,EAAE,oBAAoB,GAC1C,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED,qBAAa,6BAA8B,SAAQ,KAAK;IACtD,QAAQ,CAAC,IAAI,kCAAkC;IAE/C,cAGC;CACF;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,OAAO,EAC3D,MAAM,EAAE,2BAA2B,CAAC,CAAC,CAAC,GACrC,qBAAqB,CAAC,CAAC,CAAC,CAiE1B"}
|
|
1
|
+
{"version":3,"file":"grammy.d.ts","sourceRoot":"","sources":["../../src/application/grammy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC3F,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAMzE,MAAM,WAAW,2BAA2B,CAAC,CAAC,SAAS,OAAO;IAC5D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAcD,iEAAiE;AACjE,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,OAAO,EACrD,MAAM,EAAE,2BAA2B,CAAC,CAAC,CAAC,GACrC,eAAe,CAiEjB;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9F,MAAM,WAAW,2BAA2B,CAAC,CAAC,SAAS,OAAO;IAC5D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,OAAO;IACtD,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,YAAY,CACV,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,oBAAoB,CAAC,EAAE,oBAAoB,GAC1C,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED;;;;;GAKG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;IACtD,QAAQ,CAAC,IAAI,kCAAkC;IAE/C,cAGC;CACF;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,OAAO,EAC3D,MAAM,EAAE,2BAA2B,CAAC,CAAC,CAAC,GACrC,qBAAqB,CAAC,CAAC,CAAC,CAiE1B"}
|
|
@@ -13,12 +13,19 @@ export declare const ApplicationOperationalHandlersOptionsSchema: z.ZodObject<{
|
|
|
13
13
|
}, z.core.$strip>;
|
|
14
14
|
export type ApplicationOperationalHandlersOptions = z.input<typeof ApplicationOperationalHandlersOptionsSchema>;
|
|
15
15
|
export interface ApplicationOperationalHandlers {
|
|
16
|
-
/** Always-readable
|
|
16
|
+
/** Always-readable published projection of the application snapshot. */
|
|
17
17
|
status(): Response;
|
|
18
18
|
readiness(): Response;
|
|
19
19
|
liveness(): Response;
|
|
20
20
|
}
|
|
21
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* Fetch-clean liveness/readiness response carrying the published projection.
|
|
23
|
+
*
|
|
24
|
+
* Never the raw snapshot: it names every resource, its `dependsOn` edges, the
|
|
25
|
+
* process epoch and live admission counters, and these handlers are documented
|
|
26
|
+
* for public mounting. The full snapshot stays available in-process through
|
|
27
|
+
* `getSnapshot()`.
|
|
28
|
+
*/
|
|
22
29
|
export declare function createApplicationHealthHandler(application: Pick<ApplicationHandle, 'getSnapshot'>, options: ApplicationHealthHandlerOptions): () => Response;
|
|
23
30
|
/** Compose the canonical status and probe handlers without introducing another state model. */
|
|
24
31
|
export declare function createApplicationOperationalHandlers(application: Pick<ApplicationHandle, 'getSnapshot'>, options?: ApplicationOperationalHandlersOptions): ApplicationOperationalHandlers;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/application/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/application/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAGlD,eAAO,MAAM,qCAAqC;;;;;;iBAGhD,CAAC;AACH,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CACnD,OAAO,qCAAqC,CAC7C,CAAC;AAEF,eAAO,MAAM,2CAA2C;;iBAEtD,CAAC;AACH,MAAM,MAAM,qCAAqC,GAAG,CAAC,CAAC,KAAK,CACzD,OAAO,2CAA2C,CACnD,CAAC;AAEF,MAAM,WAAW,8BAA8B;IAC7C,wEAAwE;IACxE,MAAM,IAAI,QAAQ,CAAC;IACnB,SAAS,IAAI,QAAQ,CAAC;IACtB,QAAQ,IAAI,QAAQ,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,EACnD,OAAO,EAAE,+BAA+B,GACvC,MAAM,QAAQ,CAahB;AAED,+FAA+F;AAC/F,wBAAgB,oCAAoC,CAClD,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,EACnD,OAAO,GAAE,qCAA0C,GAClD,8BAA8B,CAahC"}
|