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.
Files changed (108) hide show
  1. package/README.md +7 -3
  2. package/dist/agent-runtime/admission-lanes.d.ts +35 -0
  3. package/dist/agent-runtime/admission-lanes.d.ts.map +1 -0
  4. package/dist/agent-runtime/coordinator.d.ts +36 -2
  5. package/dist/agent-runtime/coordinator.d.ts.map +1 -1
  6. package/dist/agent-runtime/events.d.ts +7 -0
  7. package/dist/agent-runtime/events.d.ts.map +1 -1
  8. package/dist/agent-runtime/history.d.ts +7 -0
  9. package/dist/agent-runtime/history.d.ts.map +1 -1
  10. package/dist/agent-runtime/models.d.ts +2 -3
  11. package/dist/agent-runtime/models.d.ts.map +1 -1
  12. package/dist/agent-runtime/observability.d.ts.map +1 -1
  13. package/dist/agent-runtime/run-execution.d.ts +31 -0
  14. package/dist/agent-runtime/run-execution.d.ts.map +1 -0
  15. package/dist/agent-runtime/runtime-internals.d.ts +25 -0
  16. package/dist/agent-runtime/runtime-internals.d.ts.map +1 -0
  17. package/dist/agent-runtime/runtime-result.d.ts +11 -0
  18. package/dist/agent-runtime/runtime-result.d.ts.map +1 -0
  19. package/dist/agent-runtime/runtime.d.ts +16 -15
  20. package/dist/agent-runtime/runtime.d.ts.map +1 -1
  21. package/dist/agent-runtime/schemas.d.ts.map +1 -1
  22. package/dist/agent-runtime/store-driver.d.ts.map +1 -1
  23. package/dist/agent-runtime/store.d.ts +9 -2
  24. package/dist/agent-runtime/store.d.ts.map +1 -1
  25. package/dist/agent-runtime/terminal-commit.d.ts.map +1 -1
  26. package/dist/agent-runtime/terminal-status.d.ts +13 -0
  27. package/dist/agent-runtime/terminal-status.d.ts.map +1 -0
  28. package/dist/agent-runtime.d.ts +5 -3
  29. package/dist/agent-runtime.d.ts.map +1 -1
  30. package/dist/agent-runtime.js +211 -156
  31. package/dist/application/activity.d.ts +7 -2
  32. package/dist/application/activity.d.ts.map +1 -1
  33. package/dist/application/grammy.d.ts +6 -0
  34. package/dist/application/grammy.d.ts.map +1 -1
  35. package/dist/application/health.d.ts +9 -2
  36. package/dist/application/health.d.ts.map +1 -1
  37. package/dist/application/kernel.d.ts +49 -3
  38. package/dist/application/kernel.d.ts.map +1 -1
  39. package/dist/application/schemas.d.ts +42 -0
  40. package/dist/application/schemas.d.ts.map +1 -1
  41. package/dist/application-opentelemetry.js +2 -2
  42. package/dist/application.d.ts +3 -3
  43. package/dist/application.d.ts.map +1 -1
  44. package/dist/application.js +16 -8
  45. package/dist/cli.js +6 -6
  46. package/dist/contract/errors.d.ts +6 -0
  47. package/dist/contract/errors.d.ts.map +1 -1
  48. package/dist/contract/index.js +1 -1
  49. package/dist/declaration.d.ts +345 -0
  50. package/dist/declaration.d.ts.map +1 -0
  51. package/dist/declaration.js +183 -0
  52. package/dist/{index-5c8n2123.js → index-1zencgcb.js} +64 -30
  53. package/dist/{index-sa2mbwa7.js → index-2akar0rq.js} +2 -2
  54. package/dist/{index-41wm56v0.js → index-3hn10n4c.js} +1 -1
  55. package/dist/{index-f6pymtqe.js → index-3w74r08v.js} +2 -2
  56. package/dist/{index-7c0gkyvj.js → index-6fbp58g8.js} +2 -2
  57. package/dist/{index-gnvzyw0k.js → index-8es1hrv4.js} +2 -2
  58. package/dist/{index-mgf6cdkm.js → index-8eywc9zv.js} +35 -1
  59. package/dist/{index-3nwng7hs.js → index-8pc5s3pz.js} +4 -4
  60. package/dist/{index-28cqssm3.js → index-9h1vba8n.js} +6 -0
  61. package/dist/{index-0nc0cddp.js → index-a59da114.js} +17 -28
  62. package/dist/{index-s8w2y7kr.js → index-f7521k0x.js} +22 -16
  63. package/dist/{index-y2rb7dwx.js → index-pzyt11ch.js} +5 -1
  64. package/dist/{index-mr617n62.js → index-svqhcrrj.js} +1 -1
  65. package/dist/{index-ps5pxp3h.js → index-v6e8hnkx.js} +7 -1
  66. package/dist/{index-1tkyng3g.js → index-vkk06pv1.js} +1 -9
  67. package/dist/{index-2nzpcfbp.js → index-x8v8b7rc.js} +2 -2
  68. package/dist/index.js +1 -1
  69. package/dist/internal/observability-sink.d.ts.map +1 -1
  70. package/dist/internal/route-pattern.d.ts +9 -0
  71. package/dist/internal/route-pattern.d.ts.map +1 -1
  72. package/dist/node.d.ts +1 -1
  73. package/dist/node.d.ts.map +1 -1
  74. package/dist/node.js +5 -5
  75. package/dist/observability/index.js +5 -5
  76. package/dist/observability/sanitize.d.ts +3 -1
  77. package/dist/observability/sanitize.d.ts.map +1 -1
  78. package/dist/remote.js +3 -3
  79. package/dist/server/error-hook.d.ts +10 -3
  80. package/dist/server/error-hook.d.ts.map +1 -1
  81. package/dist/server/index.d.ts +1 -1
  82. package/dist/server/index.d.ts.map +1 -1
  83. package/dist/server/index.js +9 -12
  84. package/dist/server/middleware/cors.d.ts +5 -2
  85. package/dist/server/middleware/cors.d.ts.map +1 -1
  86. package/dist/server/openapi.d.ts.map +1 -1
  87. package/dist/server/router.d.ts.map +1 -1
  88. package/dist/server/socket-io-config.d.ts +68 -3
  89. package/dist/server/socket-io-config.d.ts.map +1 -1
  90. package/dist/server/socket-io-node.d.ts +1 -1
  91. package/dist/server/socket-io-node.d.ts.map +1 -1
  92. package/dist/server/socket-io.d.ts +1 -1
  93. package/dist/server/socket-io.d.ts.map +1 -1
  94. package/dist/testing/surface-manifest.d.ts.map +1 -1
  95. package/dist/testing.js +8 -10
  96. package/dist/tools/flatten-join.d.ts +2 -0
  97. package/dist/tools/flatten-join.d.ts.map +1 -1
  98. package/dist/tools/flatten.d.ts.map +1 -1
  99. package/dist/tools/mcp-prepare.d.ts +0 -2
  100. package/dist/tools/mcp-prepare.d.ts.map +1 -1
  101. package/dist/tools/runtime-tool.d.ts +0 -3
  102. package/dist/tools/runtime-tool.d.ts.map +1 -1
  103. package/dist/tools/schema.d.ts +0 -4
  104. package/dist/tools/schema.d.ts.map +1 -1
  105. package/dist/tools.js +9 -9
  106. package/llms-full.txt +924 -68
  107. package/llms.txt +1 -0
  108. package/package.json +6 -2
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ToolExecutionControlError,
3
3
  isToolExecutionControlError
4
- } from "./index-sa2mbwa7.js";
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-0nc0cddp.js";
38
- import"./index-7c0gkyvj.js";
39
- import"./index-ps5pxp3h.js";
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-y2rb7dwx.js";
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
- if (options.drainTimeoutMs !== undefined) {
250
- const drained = await waitWithin(drain, options.drainTimeoutMs);
251
- if (drained)
252
- return;
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.drainTimeoutMs === undefined)
257
- return drain;
258
- if (options.forceTimeoutMs === undefined)
259
- return;
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 ?? "text";
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
- content.push({ type: "text", text: `[attachment: ${part.reference}]` });
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
- emitted.add(parsed.eventId);
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/runtime.ts
897
- import {
898
- stepCountIs,
899
- streamText
900
- } from "ai";
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 !== terminalMessageStatus(run.terminalReason)) {
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
- function createAgentRuntime(config) {
1078
- const coordinator = createAgentSessionCoordinator();
1079
- const tickets = new Map;
1080
- const generateId = config.generateId ?? (() => crypto.randomUUID());
1081
- const now = config.now ?? (() => new Date);
1082
- const runtimeEpoch = generateId();
1083
- const admissionLanes = new Map;
1084
- const reserveAdmission = (key, runId) => {
1085
- const existing = admissionLanes.get(key);
1086
- const lane = existing ?? { acceptanceTail: Promise.resolve() };
1087
- if (!existing)
1088
- admissionLanes.set(key, lane);
1089
- if (!lane.head) {
1090
- const admission = { runId, completion: Promise.withResolvers() };
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 (!config.store.scanRecoverablePage) {
1973
- throw new Error("The configured agent store does not support bounded recovery scans");
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.scanRecoverablePage({
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) => coordinator.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 !== terminalMessageStatus2(input.reason)) {
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
- declare const ActivityTokenBrand: unique symbol;
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,QAAA,MAAM,kBAAkB,EAAE,OAAO,MAAiD,CAAC;AACnF,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"}
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 canonical application snapshot. */
16
+ /** Always-readable published projection of the application snapshot. */
17
17
  status(): Response;
18
18
  readiness(): Response;
19
19
  liveness(): Response;
20
20
  }
21
- /** Fetch-clean liveness/readiness response with only the sanitized application snapshot. */
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;AAElD,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,sDAAsD;IACtD,MAAM,IAAI,QAAQ,CAAC;IACnB,SAAS,IAAI,QAAQ,CAAC;IACtB,QAAQ,IAAI,QAAQ,CAAC;CACtB;AAED,4FAA4F;AAC5F,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"}
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"}