@agen-ai/agent-orchestration 0.0.0-stage → 0.4.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 (145) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +413 -2
  3. package/dist/catalog/parse.d.ts +3 -0
  4. package/dist/catalog/parse.js +13 -0
  5. package/dist/catalog/schemas.d.ts +8 -0
  6. package/dist/catalog/schemas.js +78 -0
  7. package/dist/catalog/types.d.ts +53 -0
  8. package/dist/catalog/types.js +0 -0
  9. package/dist/coordinator/admission.d.ts +7 -0
  10. package/dist/coordinator/admission.js +189 -0
  11. package/dist/coordinator/cancel.d.ts +7 -0
  12. package/dist/coordinator/cancel.js +111 -0
  13. package/dist/coordinator/create.d.ts +3 -0
  14. package/dist/coordinator/create.js +87 -0
  15. package/dist/coordinator/parse.d.ts +10 -0
  16. package/dist/coordinator/parse.js +60 -0
  17. package/dist/coordinator/read.d.ts +4 -0
  18. package/dist/coordinator/read.js +267 -0
  19. package/dist/coordinator/recovery.d.ts +4 -0
  20. package/dist/coordinator/recovery.js +24 -0
  21. package/dist/coordinator/shutdown.d.ts +7 -0
  22. package/dist/coordinator/shutdown.js +66 -0
  23. package/dist/coordinator/types.d.ts +154 -0
  24. package/dist/coordinator/types.js +0 -0
  25. package/dist/delivery/calls.d.ts +4 -0
  26. package/dist/delivery/calls.js +34 -0
  27. package/dist/delivery/journal.d.ts +7 -0
  28. package/dist/delivery/journal.js +57 -0
  29. package/dist/delivery/parse.d.ts +4 -0
  30. package/dist/delivery/parse.js +31 -0
  31. package/dist/delivery/recovery.d.ts +3 -0
  32. package/dist/delivery/recovery.js +18 -0
  33. package/dist/delivery/scheduler.d.ts +3 -0
  34. package/dist/delivery/scheduler.js +123 -0
  35. package/dist/delivery/setup.d.ts +7 -0
  36. package/dist/delivery/setup.js +37 -0
  37. package/dist/delivery/types.d.ts +36 -0
  38. package/dist/delivery/types.js +0 -0
  39. package/dist/execution/authority.d.ts +16 -0
  40. package/dist/execution/authority.js +86 -0
  41. package/dist/execution/cleanup.d.ts +3 -0
  42. package/dist/execution/cleanup.js +75 -0
  43. package/dist/execution/control.d.ts +6 -0
  44. package/dist/execution/control.js +231 -0
  45. package/dist/execution/finish.d.ts +6 -0
  46. package/dist/execution/finish.js +49 -0
  47. package/dist/execution/journal.d.ts +19 -0
  48. package/dist/execution/journal.js +28 -0
  49. package/dist/execution/prepare.d.ts +3 -0
  50. package/dist/execution/prepare.js +153 -0
  51. package/dist/execution/scheduler.d.ts +4 -0
  52. package/dist/execution/scheduler.js +136 -0
  53. package/dist/execution/state.d.ts +107 -0
  54. package/dist/execution/state.js +120 -0
  55. package/dist/execution/stream.d.ts +9 -0
  56. package/dist/execution/stream.js +108 -0
  57. package/dist/host/types.d.ts +95 -0
  58. package/dist/host/types.js +0 -0
  59. package/dist/index.d.ts +20 -0
  60. package/dist/index.js +58 -0
  61. package/dist/mcp/bridge.d.ts +4 -0
  62. package/dist/mcp/bridge.js +222 -0
  63. package/dist/mcp/http.d.ts +11 -0
  64. package/dist/mcp/http.js +74 -0
  65. package/dist/mcp/index.d.ts +3 -0
  66. package/dist/mcp/index.js +4 -0
  67. package/dist/mcp/limits.d.ts +10 -0
  68. package/dist/mcp/limits.js +30 -0
  69. package/dist/mcp/protocol.d.ts +50 -0
  70. package/dist/mcp/protocol.js +81 -0
  71. package/dist/mcp/types.d.ts +22 -0
  72. package/dist/mcp/types.js +0 -0
  73. package/dist/policy/matching.d.ts +4 -0
  74. package/dist/policy/matching.js +18 -0
  75. package/dist/policy/parse.d.ts +3 -0
  76. package/dist/policy/parse.js +13 -0
  77. package/dist/policy/resolve.d.ts +7 -0
  78. package/dist/policy/resolve.js +67 -0
  79. package/dist/policy/schemas.d.ts +5 -0
  80. package/dist/policy/schemas.js +59 -0
  81. package/dist/policy/types.d.ts +60 -0
  82. package/dist/policy/types.js +0 -0
  83. package/dist/shared/bounds.d.ts +6 -0
  84. package/dist/shared/bounds.js +88 -0
  85. package/dist/shared/errors.d.ts +9 -0
  86. package/dist/shared/errors.js +27 -0
  87. package/dist/shared/identity.d.ts +6 -0
  88. package/dist/shared/identity.js +32 -0
  89. package/dist/shared/immutable.d.ts +2 -0
  90. package/dist/shared/immutable.js +10 -0
  91. package/dist/shared/limits.d.ts +32 -0
  92. package/dist/shared/limits.js +69 -0
  93. package/dist/shared/operational-errors.d.ts +7 -0
  94. package/dist/shared/operational-errors.js +15 -0
  95. package/dist/shared/schemas.d.ts +11 -0
  96. package/dist/shared/schemas.js +23 -0
  97. package/dist/shared/text.d.ts +2 -0
  98. package/dist/shared/text.js +15 -0
  99. package/dist/store/memory.d.ts +7 -0
  100. package/dist/store/memory.js +215 -0
  101. package/dist/store/pages.d.ts +16 -0
  102. package/dist/store/pages.js +46 -0
  103. package/dist/store/parse.d.ts +5 -0
  104. package/dist/store/parse.js +137 -0
  105. package/dist/store/types.d.ts +219 -0
  106. package/dist/store/types.js +0 -0
  107. package/dist/store-adapter/admission.d.ts +6 -0
  108. package/dist/store-adapter/admission.js +90 -0
  109. package/dist/store-adapter/context.d.ts +20 -0
  110. package/dist/store-adapter/context.js +107 -0
  111. package/dist/store-adapter/delivery.d.ts +15 -0
  112. package/dist/store-adapter/delivery.js +81 -0
  113. package/dist/store-adapter/execution.d.ts +12 -0
  114. package/dist/store-adapter/execution.js +151 -0
  115. package/dist/store-adapter/index.d.ts +7 -0
  116. package/dist/store-adapter/index.js +27 -0
  117. package/dist/store-adapter/lifecycle.d.ts +15 -0
  118. package/dist/store-adapter/lifecycle.js +80 -0
  119. package/dist/store-adapter/plan.d.ts +7 -0
  120. package/dist/store-adapter/plan.js +168 -0
  121. package/dist/store-adapter/types.d.ts +45 -0
  122. package/dist/store-adapter/types.js +0 -0
  123. package/dist/tasks/failure.d.ts +4 -0
  124. package/dist/tasks/failure.js +24 -0
  125. package/dist/tasks/parse.d.ts +18 -0
  126. package/dist/tasks/parse.js +66 -0
  127. package/dist/tasks/schemas.d.ts +47 -0
  128. package/dist/tasks/schemas.js +215 -0
  129. package/dist/tasks/types.d.ts +192 -0
  130. package/dist/tasks/types.js +0 -0
  131. package/dist/tools/create.d.ts +4 -0
  132. package/dist/tools/create.js +69 -0
  133. package/dist/tools/errors.d.ts +4 -0
  134. package/dist/tools/errors.js +35 -0
  135. package/dist/tools/guidance.d.ts +4 -0
  136. package/dist/tools/guidance.js +28 -0
  137. package/dist/tools/handlers.d.ts +4 -0
  138. package/dist/tools/handlers.js +84 -0
  139. package/dist/tools/projection.d.ts +13 -0
  140. package/dist/tools/projection.js +72 -0
  141. package/dist/tools/schemas.d.ts +6 -0
  142. package/dist/tools/schemas.js +93 -0
  143. package/dist/tools/types.d.ts +28 -0
  144. package/dist/tools/types.js +0 -0
  145. package/package.json +64 -3
@@ -0,0 +1,168 @@
1
+ import { failDelegation } from "../shared/operational-errors.js";
2
+ import { copyBoundedDelegationData } from "../shared/bounds.js";
3
+ import { delegationInputDigest } from "../shared/identity.js";
4
+ import { freezeDelegationData } from "../shared/immutable.js";
5
+ import { DELEGATION_CRITICAL_SLOTS, DELEGATION_RUN_RESERVATION_BYTES, parseDelegationLimits } from "../shared/limits.js";
6
+ import { parseDelegationStoreCommand } from "../store/parse.js";
7
+ import { parseDelegationRunRecord, parseDelegationTaskRecord } from "../tasks/parse.js";
8
+ import { admitRun } from "./admission.js";
9
+ import { deriveTask, same } from "./context.js";
10
+ import { dispatchIntent, operationReceipt, requestState } from "./execution.js";
11
+ import { cancelRun, observeRun, retireRecovery, settle } from "./lifecycle.js";
12
+ import { delivery, duplicateDelivery } from "./delivery.js";
13
+ function operationKind(command) {
14
+ if (command.kind === "admit" || command.kind === "cancel") return command.kind;
15
+ if (command.kind === "dispatch_intent") return command.operationKind;
16
+ if (command.kind === "request_state" && command.state === "resolution_intended") return "request_resolution";
17
+ return void 0;
18
+ }
19
+ function duplicate(command, current) {
20
+ if (command.kind === "delivery_claim" || command.kind === "delivery_receipt") return duplicateDelivery(command, current);
21
+ const prior = current.operation;
22
+ const kind = operationKind(command);
23
+ if (prior && (prior.inputDigest !== command.inputDigest || kind && prior.kind !== kind || command.kind !== "admit" && (prior.taskId !== command.taskId || prior.runId !== command.runId))) {
24
+ failDelegation("operation_conflict", "The operation identity has different retained input or ownership.");
25
+ }
26
+ if (prior && command.kind === "operation_receipt" && prior.disposition === command.disposition) {
27
+ if (prior.requestState !== command.requestState || prior.message !== command.message) {
28
+ failDelegation("operation_conflict", "The final receipt identity has different retained content.");
29
+ }
30
+ return { ...prior.receipt, duplicate: true };
31
+ }
32
+ if (prior && kind && !(command.kind === "dispatch_intent" && command.attempt === 2 && prior.attempts !== 2)) {
33
+ return { ...prior.receipt, duplicate: true };
34
+ }
35
+ if (command.kind === "cancel") {
36
+ const canonical = current.criticalOperations.find((operation) => operation.kind === "cancel");
37
+ if (canonical) failDelegation("operation_conflict", `Cancellation already uses operation ${canonical.operationId}; retry that exact identity.`);
38
+ }
39
+ const run = current.runs.find((entry) => entry.runId === command.runId);
40
+ if (command.kind === "settle" && run?.finalization) {
41
+ if (run.finalization.operationId !== command.operationId || run.finalization.inputDigest !== command.inputDigest) {
42
+ failDelegation("operation_conflict", "A final outcome already has its canonical settlement.");
43
+ }
44
+ return {
45
+ duplicate: true,
46
+ status: "settled",
47
+ taskId: command.taskId,
48
+ taskRevision: run.finalization.taskRevision,
49
+ runId: run.runId,
50
+ runRevision: run.finalization.runRevision,
51
+ operationId: command.operationId,
52
+ ...current.notification ? { notificationId: current.notification.envelope.notificationId } : {}
53
+ };
54
+ }
55
+ if (command.kind === "observe" && run && command.observation.index <= run.observationIndex) {
56
+ if (!(current.observation && same(current.observation, command.observation)) && !(command.observation.index === run.observationIndex && run.lastObservationDigest === delegationInputDigest(command.observation))) {
57
+ failDelegation("operation_conflict", "An observation index has different or unavailable retained input.");
58
+ }
59
+ return {
60
+ duplicate: true,
61
+ status: current.observation?.kind === "omitted" || !current.observation ? "omitted" : "recorded",
62
+ taskId: run.taskId,
63
+ taskRevision: current.task.revision,
64
+ runId: run.runId,
65
+ runRevision: run.revision
66
+ };
67
+ }
68
+ if (command.kind === "retire_recovery" && current.task?.retirement) {
69
+ if (current.task.retirement.operationId !== command.operationId || current.task.retirement.inputDigest !== command.inputDigest) {
70
+ failDelegation("operation_conflict", "Retirement already has a different canonical operation.");
71
+ }
72
+ return { duplicate: true, status: "retired", taskId: command.taskId, taskRevision: current.task.revision };
73
+ }
74
+ return void 0;
75
+ }
76
+ function planDelegationStoreCommit(input) {
77
+ const command = parseDelegationStoreCommand(input.command);
78
+ const { current } = input;
79
+ if (!current.owner || current.storeId !== command.owner.storeId || !same(current.owner, command.owner)) {
80
+ failDelegation("owner_lost", "The store owner fence is no longer current.");
81
+ }
82
+ parseDelegationLimits(current.limits);
83
+ const { capacity, limits } = current;
84
+ if (Object.values(capacity).some((count) => !Number.isSafeInteger(count) || count < 0) || capacity.tasks > limits.maxTasks || capacity.runs > limits.maxRuns || capacity.tasks > capacity.runs || capacity.activeRuns > limits.maxActiveRuns || capacity.queuedRuns > limits.maxQueuedRuns || capacity.activeRuns + capacity.queuedRuns > capacity.runs || capacity.retainedInputBytes > limits.maxRetainedInputBytes || capacity.observationBytes > limits.maxRetainedObservationBytes || capacity.ordinaryOperations > limits.maxOrdinaryOperations || capacity.reservedBytes !== capacity.runs * DELEGATION_RUN_RESERVATION_BYTES || capacity.criticalSlots !== capacity.runs * DELEGATION_CRITICAL_SLOTS) {
85
+ failDelegation("store_failed", "The store capacity counters or configured reservations are inconsistent.");
86
+ }
87
+ if (current.runs.length > current.limits.maxRunsPerTask || current.criticalOperations.length > 4 || current.runs.some((run2) => run2.taskId !== command.taskId) || current.task && current.task.taskId !== command.taskId) failDelegation("store_failed", "The command snapshot is inconsistent.");
88
+ const retry = duplicate(command, current);
89
+ if (retry) return freezeDelegationData({ mutations: [], receipt: retry });
90
+ if ((current.task?.revision ?? 0) !== command.expectedTaskRevision) failDelegation("stale_revision", "The task revision changed.");
91
+ const retainedRun = current.runs.find((run2) => run2.runId === command.runId);
92
+ if (command.kind !== "admit" && command.kind !== "retire_recovery" && (!retainedRun || retainedRun.revision !== command.expectedRunRevision)) failDelegation("stale_revision", "The run revision changed.");
93
+ if (!current.task && command.kind !== "admit") failDelegation("stale_revision", "The task is unavailable.");
94
+ const newTask = command.kind === "admit" ? {
95
+ storeId: current.storeId,
96
+ taskId: command.taskId,
97
+ parent: command.admission.parent,
98
+ ...command.admission.ancestorTaskId ? { ancestorTaskId: command.admission.ancestorTaskId } : {},
99
+ depth: command.admission.depth,
100
+ policyCeilingRef: command.admission.policyCeiling.ceilingId,
101
+ completionPolicy: command.admission.completionPolicy,
102
+ state: "active",
103
+ revision: 1,
104
+ latestRunId: command.admission.runId,
105
+ runCount: 0,
106
+ createdAt: command.admission.createdAt
107
+ } : void 0;
108
+ const task = current.task ? { ...current.task, revision: current.task.revision + 1 } : newTask;
109
+ const run = retainedRun ? { ...retainedRun, revision: retainedRun.revision + 1 } : void 0;
110
+ const context = {
111
+ command,
112
+ current,
113
+ task,
114
+ run,
115
+ capacity: { ...current.capacity },
116
+ mutations: [],
117
+ receipt: {
118
+ duplicate: false,
119
+ status: "recorded",
120
+ taskId: task.taskId,
121
+ taskRevision: task.revision,
122
+ ...run ? { runId: run.runId, runRevision: run.revision } : {},
123
+ operationId: command.operationId
124
+ }
125
+ };
126
+ switch (command.kind) {
127
+ case "admit":
128
+ admitRun(context, command);
129
+ break;
130
+ case "dispatch_intent":
131
+ dispatchIntent(context, command);
132
+ break;
133
+ case "operation_receipt":
134
+ operationReceipt(context, command);
135
+ break;
136
+ case "observe":
137
+ observeRun(context, command);
138
+ break;
139
+ case "request_state":
140
+ requestState(context, command);
141
+ break;
142
+ case "cancel":
143
+ cancelRun(context, command);
144
+ break;
145
+ case "settle":
146
+ settle(context, command);
147
+ break;
148
+ case "delivery_claim":
149
+ case "delivery_receipt":
150
+ delivery(context, command);
151
+ break;
152
+ case "retire_recovery":
153
+ retireRecovery(context, command);
154
+ break;
155
+ }
156
+ deriveTask(context);
157
+ context.mutations.push({ kind: "task", value: parseDelegationTaskRecord(context.task) });
158
+ if (context.run) context.mutations.push({ kind: "run", value: parseDelegationRunRecord(context.run) });
159
+ context.mutations.push({ kind: "capacity", value: context.capacity });
160
+ const mutations = context.mutations.map((mutation) => {
161
+ const finalized = mutation.kind === "operation" ? { ...mutation, value: { ...mutation.value, receipt: context.receipt } } : mutation;
162
+ return copyBoundedDelegationData(finalized);
163
+ });
164
+ return freezeDelegationData({ mutations, receipt: context.receipt });
165
+ }
166
+ export {
167
+ planDelegationStoreCommit
168
+ };
@@ -0,0 +1,45 @@
1
+ import type { DelegationLimits } from "../shared/limits.js";
2
+ import type { DelegationCommitReceipt, DelegationOperationRecord, DelegationStoreCapacity } from "../store/types.js";
3
+ import type { DelegationNotificationRecord, DelegationOwnerToken, DelegationPolicyCeiling, DelegationRunRecord, DelegationTaskObservation, DelegationTaskRecord } from "../tasks/types.js";
4
+ export interface DelegationStoreCommitCurrent {
5
+ readonly storeId: string;
6
+ readonly owner?: DelegationOwnerToken;
7
+ readonly limits: DelegationLimits;
8
+ readonly capacity: DelegationStoreCapacity;
9
+ readonly task?: DelegationTaskRecord;
10
+ readonly runs: readonly DelegationRunRecord[];
11
+ readonly operation?: DelegationOperationRecord;
12
+ readonly criticalOperations: readonly DelegationOperationRecord[];
13
+ readonly notification?: DelegationNotificationRecord;
14
+ readonly ceiling?: DelegationPolicyCeiling;
15
+ readonly observation?: DelegationTaskObservation;
16
+ readonly omissionObservation?: DelegationTaskObservation;
17
+ readonly runIdExists?: boolean;
18
+ }
19
+ export type DelegationStoreRowMutation = Readonly<{
20
+ kind: "task";
21
+ value: DelegationTaskRecord;
22
+ }> | Readonly<{
23
+ kind: "run";
24
+ value: DelegationRunRecord;
25
+ }> | Readonly<{
26
+ kind: "operation";
27
+ value: DelegationOperationRecord;
28
+ }> | Readonly<{
29
+ kind: "observation";
30
+ value: DelegationTaskObservation;
31
+ }> | Readonly<{
32
+ kind: "notification";
33
+ value: DelegationNotificationRecord;
34
+ }> | Readonly<{
35
+ kind: "ceiling";
36
+ value: DelegationPolicyCeiling;
37
+ }> | Readonly<{
38
+ kind: "capacity";
39
+ value: DelegationStoreCapacity;
40
+ }>;
41
+ export interface DelegationStoreCommitPlan {
42
+ readonly mutations: readonly DelegationStoreRowMutation[];
43
+ readonly receipt: DelegationCommitReceipt;
44
+ }
45
+ //# sourceMappingURL=types.d.ts.map
File without changes
@@ -0,0 +1,4 @@
1
+ import type { AgentError } from "@agen-ai/agent-protocol";
2
+ import type { DelegationPublicFailure } from "./types.js";
3
+ export declare function projectDelegationFailure(error?: AgentError): DelegationPublicFailure;
4
+ //# sourceMappingURL=failure.d.ts.map
@@ -0,0 +1,24 @@
1
+ import { delegationDataBytes } from "../shared/identity.js";
2
+ import { DELEGATION_FAILURE_BYTES } from "../shared/limits.js";
3
+ import { fitDelegationText } from "../shared/text.js";
4
+ function projectDelegationFailure(error) {
5
+ if (!error) return {
6
+ category: "unknown",
7
+ code: "child_failed",
8
+ message: "The managed child reported an unsuccessful terminal outcome.",
9
+ recovery: { kind: "unknown" }
10
+ };
11
+ const hint = error.recovery;
12
+ const recovery = hint.kind === "retry" ? { kind: hint.kind, ...hint.notBefore === void 0 ? {} : { notBefore: hint.notBefore } } : hint.kind === "user_action" ? { kind: hint.kind, action: hint.action } : { kind: hint.kind };
13
+ const failure = { category: error.category, code: error.code, recovery };
14
+ if (recovery.kind === "retry" && delegationDataBytes({ ...failure, message: "" }) > DELEGATION_FAILURE_BYTES) {
15
+ failure.recovery = { kind: "retry" };
16
+ }
17
+ return { ...failure, message: fitDelegationText(
18
+ error.message,
19
+ (message) => delegationDataBytes({ ...failure, message }) <= DELEGATION_FAILURE_BYTES
20
+ ) };
21
+ }
22
+ export {
23
+ projectDelegationFailure
24
+ };
@@ -0,0 +1,18 @@
1
+ import type { DelegationTargetReference } from "../catalog/types.js";
2
+ import type { DelegationCompletionEnvelope, DelegationHistoricalRequest, DelegationNotificationRecord, DelegationOwnerToken, DelegationParentScope, DelegationPolicyCeiling, DelegationResultReference, DelegationRunOutcome, DelegationRunRecord, DelegationTaskObservation, DelegationTaskRecord } from "./types.js";
3
+ export declare const parseDelegationParentScope: (input: unknown) => DelegationParentScope;
4
+ export declare const parseDelegationOwnerToken: (input: unknown) => DelegationOwnerToken;
5
+ export declare const parseDelegationTaskRecord: (input: unknown) => DelegationTaskRecord;
6
+ export declare const parseDelegationRunRecord: (input: unknown) => DelegationRunRecord;
7
+ export declare const parseDelegationRunOutcome: (input: unknown) => DelegationRunOutcome;
8
+ export declare const parseDelegationResultReference: (input: unknown) => DelegationResultReference;
9
+ export declare const parseDelegationTaskObservation: (input: unknown) => DelegationTaskObservation;
10
+ export declare const parseDelegationHistoricalRequest: (input: unknown) => DelegationHistoricalRequest;
11
+ export declare const parseDelegationCompletionEnvelope: (input: unknown) => DelegationCompletionEnvelope;
12
+ export declare const parseDelegationNotificationRecord: (input: unknown) => DelegationNotificationRecord;
13
+ export declare function parseDelegationPolicyCeiling(input: unknown): DelegationPolicyCeiling;
14
+ export declare function createDelegationPolicyCeiling(input: {
15
+ readonly origin: DelegationParentScope;
16
+ readonly targets: readonly DelegationTargetReference[];
17
+ }): DelegationPolicyCeiling;
18
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1,66 @@
1
+ import { z } from "zod/v4";
2
+ import { copyBoundedDelegationData } from "../shared/bounds.js";
3
+ import { delegationSchemaError, invalidDelegationData } from "../shared/errors.js";
4
+ import { delegationCanonicalJson, delegationInputDigest } from "../shared/identity.js";
5
+ import { freezeDelegationData } from "../shared/immutable.js";
6
+ import {
7
+ CompletionEnvelopeSchema,
8
+ HistoricalRequestSchema,
9
+ NotificationSchema,
10
+ ObservationSchema,
11
+ OwnerTokenSchema,
12
+ ParentScopeSchema,
13
+ PolicyCeilingSchema,
14
+ ResultReferenceSchema,
15
+ RunOutcomeSchema,
16
+ RunRecordSchema,
17
+ TargetReferenceSchema,
18
+ TaskRecordSchema
19
+ } from "./schemas.js";
20
+ function parse(schema, input) {
21
+ const captured = copyBoundedDelegationData(input);
22
+ const parsed = schema.safeParse(captured);
23
+ if (!parsed.success) return delegationSchemaError(parsed.error, captured);
24
+ return freezeDelegationData(parsed.data);
25
+ }
26
+ const parseDelegationParentScope = (input) => parse(ParentScopeSchema, input);
27
+ const parseDelegationOwnerToken = (input) => parse(OwnerTokenSchema, input);
28
+ const parseDelegationTaskRecord = (input) => parse(TaskRecordSchema, input);
29
+ const parseDelegationRunRecord = (input) => parse(RunRecordSchema, input);
30
+ const parseDelegationRunOutcome = (input) => parse(RunOutcomeSchema, input);
31
+ const parseDelegationResultReference = (input) => parse(ResultReferenceSchema, input);
32
+ const parseDelegationTaskObservation = (input) => parse(ObservationSchema, input);
33
+ const parseDelegationHistoricalRequest = (input) => parse(HistoricalRequestSchema, input);
34
+ const parseDelegationCompletionEnvelope = (input) => parse(CompletionEnvelopeSchema, input);
35
+ const parseDelegationNotificationRecord = (input) => parse(NotificationSchema, input);
36
+ function parseDelegationPolicyCeiling(input) {
37
+ const value = parse(PolicyCeilingSchema, input);
38
+ const keys = value.targets.map(delegationCanonicalJson);
39
+ if (new Set(keys).size !== keys.length || keys.some((key, index) => index > 0 && keys[index - 1] >= key) || value.ceilingId !== delegationInputDigest({ origin: value.origin, targets: value.targets })) {
40
+ return invalidDelegationData("invalid_ceiling", [], "Policy ceilings require sorted unique exact references and their canonical digest.");
41
+ }
42
+ return value;
43
+ }
44
+ function createDelegationPolicyCeiling(input) {
45
+ const captured = parse(z.strictObject({ origin: ParentScopeSchema, targets: z.array(TargetReferenceSchema).max(1e3) }), input);
46
+ const origin = captured.origin;
47
+ const targets = [...captured.targets].sort((left, right) => {
48
+ const a = delegationCanonicalJson(left), b = delegationCanonicalJson(right);
49
+ return a < b ? -1 : a > b ? 1 : 0;
50
+ });
51
+ return parseDelegationPolicyCeiling({ origin, targets, ceilingId: delegationInputDigest({ origin, targets }) });
52
+ }
53
+ export {
54
+ createDelegationPolicyCeiling,
55
+ parseDelegationCompletionEnvelope,
56
+ parseDelegationHistoricalRequest,
57
+ parseDelegationNotificationRecord,
58
+ parseDelegationOwnerToken,
59
+ parseDelegationParentScope,
60
+ parseDelegationPolicyCeiling,
61
+ parseDelegationResultReference,
62
+ parseDelegationRunOutcome,
63
+ parseDelegationRunRecord,
64
+ parseDelegationTaskObservation,
65
+ parseDelegationTaskRecord
66
+ };
@@ -0,0 +1,47 @@
1
+ import { z } from "zod/v4";
2
+ import type { DelegationCompletionEnvelope, DelegationHistoricalRequest, DelegationNotificationRecord, DelegationOwnerToken, DelegationParentScope, DelegationPolicyCeiling, DelegationPublicFailure, DelegationRunOutcome, DelegationRunRecord, DelegationTaskObservation, DelegationTaskRecord } from "./types.js";
3
+ export declare const StoreIdSchema: z.ZodUUID;
4
+ export declare const OpaqueIdSchema: z.ZodString;
5
+ export declare const DigestSchema: z.ZodString;
6
+ export declare const AtSchema: z.ZodISODateTime;
7
+ export declare const CountSchema: z.ZodNumber;
8
+ export declare const CompletionPolicySchema: z.ZodEnum<{
9
+ collect: "collect";
10
+ next_turn: "next_turn";
11
+ automatic: "automatic";
12
+ }>;
13
+ export declare const RunPhaseSchema: z.ZodEnum<{
14
+ queued: "queued";
15
+ preparing: "preparing";
16
+ running: "running";
17
+ waiting: "waiting";
18
+ settled: "settled";
19
+ }>;
20
+ export declare const ParentScopeSchema: z.ZodType<DelegationParentScope>;
21
+ export declare const OwnerTokenSchema: z.ZodType<DelegationOwnerToken>;
22
+ export declare const TargetReferenceSchema: z.ZodObject<{
23
+ catalogId: z.ZodString;
24
+ catalogRevision: z.ZodNumber;
25
+ targetId: z.ZodString;
26
+ targetRevision: z.ZodNumber;
27
+ sourceId: z.ZodString;
28
+ sourceRevision: z.ZodNumber;
29
+ }, z.core.$strict>;
30
+ export declare const PolicyCeilingSchema: z.ZodType<DelegationPolicyCeiling>;
31
+ export declare const HistoricalRequestSchema: z.ZodType<DelegationHistoricalRequest>;
32
+ export declare const ResultReferenceSchema: z.ZodObject<{
33
+ id: z.ZodString;
34
+ kind: z.ZodEnum<{
35
+ artifact: "artifact";
36
+ host_result: "host_result";
37
+ }>;
38
+ digest: z.ZodOptional<z.ZodString>;
39
+ }, z.core.$strict>;
40
+ export declare const PublicFailureSchema: z.ZodType<DelegationPublicFailure>;
41
+ export declare const RunOutcomeSchema: z.ZodType<DelegationRunOutcome>;
42
+ export declare const TaskRecordSchema: z.ZodType<DelegationTaskRecord>;
43
+ export declare const RunRecordSchema: z.ZodType<DelegationRunRecord>;
44
+ export declare const ObservationSchema: z.ZodType<DelegationTaskObservation>;
45
+ export declare const CompletionEnvelopeSchema: z.ZodType<DelegationCompletionEnvelope>;
46
+ export declare const NotificationSchema: z.ZodType<DelegationNotificationRecord>;
47
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1,215 @@
1
+ import { AgentFailureCategorySchema, AgentRecoveryHintSchema, AgentTurnInputContentSchema } from "@agen-ai/agent-protocol/zod";
2
+ import { z } from "zod/v4";
3
+ import { delegationDataBytes } from "../shared/identity.js";
4
+ import { DELEGATION_FAILURE_BYTES } from "../shared/limits.js";
5
+ import { CanonicalIdSchema, RevisionSchema } from "../shared/schemas.js";
6
+ const StoreIdSchema = z.uuid();
7
+ const OpaqueIdSchema = CanonicalIdSchema.max(128).refine((value) => new TextEncoder().encode(value).byteLength <= 128);
8
+ const DigestSchema = z.string().regex(/^[a-f0-9]{64}$/u);
9
+ const AtSchema = z.iso.datetime();
10
+ const CountSchema = z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER);
11
+ const CompletionPolicySchema = z.enum(["collect", "next_turn", "automatic"]);
12
+ const RunPhaseSchema = z.enum(["queued", "preparing", "running", "waiting", "settled"]);
13
+ const ParentScopeSchema = z.strictObject({
14
+ parentId: OpaqueIdSchema,
15
+ scopeId: OpaqueIdSchema,
16
+ revision: RevisionSchema
17
+ });
18
+ const OwnerTokenSchema = z.strictObject({
19
+ storeId: StoreIdSchema,
20
+ epoch: RevisionSchema,
21
+ nonce: StoreIdSchema
22
+ });
23
+ const TargetReferenceSchema = z.strictObject({
24
+ catalogId: CanonicalIdSchema,
25
+ catalogRevision: RevisionSchema,
26
+ targetId: CanonicalIdSchema,
27
+ targetRevision: RevisionSchema,
28
+ sourceId: CanonicalIdSchema,
29
+ sourceRevision: RevisionSchema
30
+ });
31
+ const PolicyCeilingSchema = z.strictObject({
32
+ ceilingId: DigestSchema,
33
+ origin: ParentScopeSchema,
34
+ targets: z.array(TargetReferenceSchema).max(1e3)
35
+ });
36
+ const HistoricalRequestSchema = z.strictObject({
37
+ requestId: CanonicalIdSchema,
38
+ requestKind: z.enum(["approval", "elicitation"]),
39
+ openedAt: AtSchema,
40
+ expiresAt: AtSchema.optional(),
41
+ state: z.enum(["waiting", "resolution_intended", "resolved", "unavailable"])
42
+ });
43
+ const ResultReferenceSchema = z.strictObject({ id: CanonicalIdSchema, kind: z.enum(["artifact", "host_result"]), digest: DigestSchema.optional() }).refine((value) => delegationDataBytes(value) <= 256, "Result reference exceeds 256 bytes.");
44
+ const PublicFailureSchema = z.strictObject({
45
+ category: AgentFailureCategorySchema,
46
+ code: z.string().min(1).max(128).regex(/^(?:\S|\S[\s\S]*\S)$/u),
47
+ message: z.string().max(DELEGATION_FAILURE_BYTES),
48
+ recovery: AgentRecoveryHintSchema.refine(
49
+ (hint) => hint.kind !== "wait_for_quota" || hint.quota === void 0,
50
+ "Parent-visible recovery cannot contain child quota identity."
51
+ )
52
+ }).refine((value) => delegationDataBytes(value) <= DELEGATION_FAILURE_BYTES, "Failure exceeds 2 KiB of canonical JSON.");
53
+ const RunOutcomeSchema = z.discriminatedUnion("kind", [
54
+ z.strictObject({ kind: z.literal("succeeded"), result: z.strictObject({
55
+ text: z.string().max(8192).refine((value) => new TextEncoder().encode(value).byteLength <= 8192),
56
+ truncated: z.boolean(),
57
+ references: z.array(ResultReferenceSchema).max(8)
58
+ }).refine((value) => delegationDataBytes(value) <= 8192, "Result summary exceeds 8 KiB of canonical JSON.") }),
59
+ z.strictObject({ kind: z.literal("failed"), error: PublicFailureSchema }),
60
+ z.strictObject({ kind: z.literal("canceled"), confirmation: z.enum(["not_dispatched", "provider_terminal"]) }),
61
+ z.strictObject({ kind: z.literal("recovery_required"), reason: z.enum([
62
+ "executor_lost",
63
+ "dispatch_uncertain",
64
+ "request_executor_lost",
65
+ "steering_uncertain",
66
+ "cancellation_uncertain",
67
+ "storage_failed"
68
+ ]) })
69
+ ]);
70
+ const TaskRecordSchema = z.strictObject({
71
+ storeId: StoreIdSchema,
72
+ taskId: StoreIdSchema,
73
+ parent: ParentScopeSchema,
74
+ ancestorTaskId: StoreIdSchema.optional(),
75
+ depth: RevisionSchema,
76
+ policyCeilingRef: DigestSchema,
77
+ completionPolicy: CompletionPolicySchema,
78
+ state: z.enum(["active", "settled", "recovery_required", "retired"]),
79
+ revision: RevisionSchema,
80
+ latestRunId: StoreIdSchema,
81
+ runCount: RevisionSchema,
82
+ createdAt: AtSchema,
83
+ retiredAt: AtSchema.optional(),
84
+ retirement: z.strictObject({ operationId: StoreIdSchema, inputDigest: DigestSchema, reason: z.string().max(1e3) }).optional()
85
+ });
86
+ const RunRecordSchema = z.strictObject({
87
+ taskId: StoreIdSchema,
88
+ runId: StoreIdSchema,
89
+ ordinal: RevisionSchema,
90
+ previousRunId: StoreIdSchema.optional(),
91
+ continuationMode: z.enum(["next_turn", "follow_up"]).optional(),
92
+ admissionOperationId: StoreIdSchema,
93
+ admittedTarget: TargetReferenceSchema,
94
+ appliedTarget: TargetReferenceSchema.optional(),
95
+ admittedPolicyRevision: RevisionSchema,
96
+ admittedOriginPolicyRevision: RevisionSchema,
97
+ input: AgentTurnInputContentSchema,
98
+ ownerEpoch: RevisionSchema,
99
+ phase: RunPhaseSchema,
100
+ revision: RevisionSchema,
101
+ createdAt: AtSchema,
102
+ deadlineAt: AtSchema,
103
+ queuedStartDeadlineAt: AtSchema,
104
+ dispatch: z.enum(["none", "intended", "delegated"]),
105
+ preparation: z.enum(["none", "intended", "completed", "uncertain"]),
106
+ cancelRequested: z.boolean(),
107
+ pendingRequest: HistoricalRequestSchema.optional(),
108
+ outcome: RunOutcomeSchema.optional(),
109
+ settledAt: AtSchema.optional(),
110
+ observationIndex: CountSchema,
111
+ observationCount: CountSchema,
112
+ observationBytes: CountSchema,
113
+ omittedObservations: CountSchema,
114
+ ordinaryOperationCount: CountSchema,
115
+ lastObservationDigest: DigestSchema.optional(),
116
+ recoveryReason: z.enum(["executor_lost", "dispatch_uncertain", "request_executor_lost", "steering_uncertain", "cancellation_uncertain", "storage_failed"]).optional(),
117
+ finalization: z.strictObject({
118
+ operationId: StoreIdSchema,
119
+ inputDigest: DigestSchema,
120
+ taskRevision: CountSchema,
121
+ runRevision: CountSchema
122
+ }).optional()
123
+ }).superRefine((value, context) => {
124
+ if (value.previousRunId !== void 0 !== (value.continuationMode !== void 0)) {
125
+ context.addIssue({ code: "custom", path: ["continuationMode"], message: "A continuation mode requires exactly one previous run reference." });
126
+ }
127
+ if (value.phase === "settled" !== (value.outcome !== void 0) || value.phase === "settled" !== (value.settledAt !== void 0)) {
128
+ context.addIssue({ code: "custom", path: ["phase"], message: "A settled run requires exactly one final outcome and timestamp." });
129
+ }
130
+ if (delegationDataBytes(value) > 65536 || delegationDataBytes(value.input) > 24576 || value.input.parts.reduce((count, part) => count + (part.type === "text" ? part.text.length : 0), 0) > 16e3) {
131
+ context.addIssue({ code: "custom", path: ["input"], message: "Internal run records require a bounded complete row and admitted input." });
132
+ }
133
+ });
134
+ const ObservationSchema = z.strictObject({
135
+ storeId: StoreIdSchema,
136
+ taskId: StoreIdSchema,
137
+ runId: StoreIdSchema,
138
+ index: RevisionSchema,
139
+ at: AtSchema,
140
+ kind: z.enum(["state", "text", "request", "omitted"]),
141
+ phase: RunPhaseSchema.optional(),
142
+ text: z.string().max(8192).optional(),
143
+ request: HistoricalRequestSchema.optional(),
144
+ omitted: RevisionSchema.optional()
145
+ }).refine((value) => delegationDataBytes(value) <= 8192, "Canonical observation exceeds 8 KiB.");
146
+ const CompletionEnvelopeSchema = z.strictObject({
147
+ storeId: StoreIdSchema,
148
+ notificationId: StoreIdSchema,
149
+ taskId: StoreIdSchema,
150
+ runId: StoreIdSchema,
151
+ parent: ParentScopeSchema,
152
+ policy: CompletionPolicySchema,
153
+ settledAt: AtSchema,
154
+ expiresAt: AtSchema,
155
+ outcome: RunOutcomeSchema
156
+ }).refine((value) => delegationDataBytes(value) <= 12288, "Completion envelope exceeds 12 KiB.");
157
+ const deliveryCommit = z.strictObject({
158
+ operationId: StoreIdSchema,
159
+ inputDigest: DigestSchema,
160
+ commandDigest: DigestSchema,
161
+ attemptId: StoreIdSchema,
162
+ attempt: RevisionSchema,
163
+ ownerEpoch: RevisionSchema,
164
+ receipt: z.strictObject({
165
+ duplicate: z.boolean(),
166
+ status: z.enum(["queued", "preparing", "running", "waiting", "settled", "recorded", "omitted", "retired"]),
167
+ taskId: StoreIdSchema,
168
+ taskRevision: RevisionSchema,
169
+ runId: StoreIdSchema.optional(),
170
+ runRevision: RevisionSchema.optional(),
171
+ operationId: StoreIdSchema.optional(),
172
+ notificationId: StoreIdSchema.optional()
173
+ })
174
+ }).refine((value) => delegationDataBytes(value) <= 2048, "Delivery bookkeeping exceeds its reserved slot.");
175
+ const NotificationSchema = z.strictObject({
176
+ envelope: CompletionEnvelopeSchema,
177
+ revision: RevisionSchema,
178
+ state: z.enum(["collectible", "pending", "claimed", "accepted", "rejected", "expired", "dismissed"]),
179
+ claim: z.strictObject({ ownerEpoch: RevisionSchema, attemptId: StoreIdSchema }).optional(),
180
+ attempts: CountSchema,
181
+ retryAt: AtSchema.optional(),
182
+ inboxId: OpaqueIdSchema.optional(),
183
+ acceptedAt: AtSchema.optional(),
184
+ reason: z.string().max(1e3).optional(),
185
+ delivery: z.strictObject({ claim: deliveryCommit.optional(), receipt: deliveryCommit.optional() }).optional()
186
+ }).superRefine((value, context) => {
187
+ if (value.state === "claimed" !== (value.claim !== void 0)) {
188
+ context.addIssue({ code: "custom", path: ["claim"], message: "Only a claimed notification retains an active owner claim." });
189
+ }
190
+ if (delegationDataBytes({ outcome: value.envelope.outcome, notification: value }) > 32768) {
191
+ context.addIssue({ code: "custom", path: [], message: "Notification and outcome exceed their final reservation." });
192
+ }
193
+ });
194
+ export {
195
+ AtSchema,
196
+ CompletionEnvelopeSchema,
197
+ CompletionPolicySchema,
198
+ CountSchema,
199
+ DigestSchema,
200
+ HistoricalRequestSchema,
201
+ NotificationSchema,
202
+ ObservationSchema,
203
+ OpaqueIdSchema,
204
+ OwnerTokenSchema,
205
+ ParentScopeSchema,
206
+ PolicyCeilingSchema,
207
+ PublicFailureSchema,
208
+ ResultReferenceSchema,
209
+ RunOutcomeSchema,
210
+ RunPhaseSchema,
211
+ RunRecordSchema,
212
+ StoreIdSchema,
213
+ TargetReferenceSchema,
214
+ TaskRecordSchema
215
+ };