@claudexor/schema 3.20.1 → 3.23.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 (147) hide show
  1. package/dist/agent-capabilities.d.ts +9 -9
  2. package/dist/agent-capabilities.d.ts.map +1 -1
  3. package/dist/agent-capabilities.js +2 -1
  4. package/dist/agent-capabilities.js.map +1 -1
  5. package/dist/command-list.d.ts +108 -37
  6. package/dist/command-list.d.ts.map +1 -1
  7. package/dist/command-list.js +17 -35
  8. package/dist/command-list.js.map +1 -1
  9. package/dist/command-summary.d.ts +8 -0
  10. package/dist/command-summary.d.ts.map +1 -0
  11. package/dist/command-summary.js +33 -0
  12. package/dist/command-summary.js.map +1 -0
  13. package/dist/continuation-admission.d.ts +41 -0
  14. package/dist/continuation-admission.d.ts.map +1 -0
  15. package/dist/continuation-admission.js +136 -0
  16. package/dist/continuation-admission.js.map +1 -0
  17. package/dist/control-operation-responses.d.ts +357 -0
  18. package/dist/control-operation-responses.d.ts.map +1 -1
  19. package/dist/control-operation-responses.js +2 -0
  20. package/dist/control-operation-responses.js.map +1 -1
  21. package/dist/control-run-detail.d.ts +726 -0
  22. package/dist/control-run-detail.d.ts.map +1 -1
  23. package/dist/control-run-execution.js +1 -1
  24. package/dist/control-run-execution.js.map +1 -1
  25. package/dist/control-thread-requests.d.ts +17 -3
  26. package/dist/control-thread-requests.d.ts.map +1 -1
  27. package/dist/control-thread-requests.js +24 -1
  28. package/dist/control-thread-requests.js.map +1 -1
  29. package/dist/control.d.ts +347 -22
  30. package/dist/control.d.ts.map +1 -1
  31. package/dist/control.js +32 -4
  32. package/dist/control.js.map +1 -1
  33. package/dist/credential-profile-snapshot.d.ts +144 -0
  34. package/dist/credential-profile-snapshot.d.ts.map +1 -1
  35. package/dist/credential-profile.d.ts +1 -1
  36. package/dist/credential-profile.js +1 -1
  37. package/dist/daemon-status.d.ts +177 -0
  38. package/dist/daemon-status.d.ts.map +1 -0
  39. package/dist/daemon-status.js +27 -0
  40. package/dist/daemon-status.js.map +1 -0
  41. package/dist/decision.d.ts +12 -0
  42. package/dist/decision.d.ts.map +1 -1
  43. package/dist/effort.d.ts +33 -12
  44. package/dist/effort.d.ts.map +1 -1
  45. package/dist/effort.js +43 -13
  46. package/dist/effort.js.map +1 -1
  47. package/dist/events.d.ts +4 -4
  48. package/dist/events.d.ts.map +1 -1
  49. package/dist/events.js +11 -0
  50. package/dist/events.js.map +1 -1
  51. package/dist/harness.d.ts +16 -9
  52. package/dist/harness.d.ts.map +1 -1
  53. package/dist/harness.js +3 -3
  54. package/dist/index.d.ts +6 -0
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +6 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/mcp-run-result.d.ts +155 -0
  59. package/dist/mcp-run-result.d.ts.map +1 -1
  60. package/dist/mcp-run-result.js +38 -0
  61. package/dist/mcp-run-result.js.map +1 -1
  62. package/dist/project.d.ts +2 -2
  63. package/dist/project.d.ts.map +1 -1
  64. package/dist/project.js +3 -3
  65. package/dist/project.js.map +1 -1
  66. package/dist/quota.d.ts +252 -0
  67. package/dist/quota.d.ts.map +1 -1
  68. package/dist/quota.js +42 -17
  69. package/dist/quota.js.map +1 -1
  70. package/dist/raw.d.ts +1 -1
  71. package/dist/raw.d.ts.map +1 -1
  72. package/dist/raw.js +0 -1
  73. package/dist/raw.js.map +1 -1
  74. package/dist/run-continuation.d.ts +166 -0
  75. package/dist/run-continuation.d.ts.map +1 -0
  76. package/dist/run-continuation.js +65 -0
  77. package/dist/run-continuation.js.map +1 -0
  78. package/dist/run-continuity.d.ts +215 -0
  79. package/dist/run-continuity.d.ts.map +1 -0
  80. package/dist/run-continuity.js +170 -0
  81. package/dist/run-continuity.js.map +1 -0
  82. package/dist/run-facts.d.ts +7 -0
  83. package/dist/run-facts.d.ts.map +1 -1
  84. package/dist/run-list-page.d.ts +74 -0
  85. package/dist/run-list-page.d.ts.map +1 -0
  86. package/dist/run-list-page.js +85 -0
  87. package/dist/run-list-page.js.map +1 -0
  88. package/dist/run-strategy.d.ts +18 -0
  89. package/dist/run-strategy.d.ts.map +1 -1
  90. package/dist/run-strategy.js +15 -0
  91. package/dist/run-strategy.js.map +1 -1
  92. package/dist/status-projection.d.ts +8 -1
  93. package/dist/status-projection.d.ts.map +1 -1
  94. package/dist/status-projection.js +22 -1
  95. package/dist/status-projection.js.map +1 -1
  96. package/dist/telemetry.d.ts +33 -3
  97. package/dist/telemetry.d.ts.map +1 -1
  98. package/dist/telemetry.js +3 -3
  99. package/dist/telemetry.js.map +1 -1
  100. package/dist/thread.d.ts +24 -10
  101. package/dist/thread.d.ts.map +1 -1
  102. package/dist/thread.js +14 -4
  103. package/dist/thread.js.map +1 -1
  104. package/dist/work-report.d.ts +18 -4
  105. package/dist/work-report.d.ts.map +1 -1
  106. package/dist/work-report.js +26 -5
  107. package/dist/work-report.js.map +1 -1
  108. package/generated/AgentCapabilityCatalog.schema.json +5 -4
  109. package/generated/CommandListQuery.schema.json +204 -0
  110. package/generated/ControlCredentialProfilesQueryResponse.schema.json +21 -6
  111. package/generated/ControlCredentialProfilesSnapshotResponse.schema.json +21 -6
  112. package/generated/ControlDaemonStatus.schema.json +150 -0
  113. package/generated/ControlHarnessListResponse.schema.json +1 -1
  114. package/generated/ControlHarnessSettingsPatch.schema.json +1 -1
  115. package/generated/ControlProjectRemoveReceipt.schema.json +1 -1
  116. package/generated/ControlQuotaResponse.schema.json +20 -5
  117. package/generated/ControlRetainedEnvelope.schema.json +63 -0
  118. package/generated/ControlRunAgainDraft.schema.json +17 -1
  119. package/generated/ControlRunDetail.schema.json +406 -1
  120. package/generated/ControlRunListResponse.schema.json +406 -1
  121. package/generated/ControlRunStartRequest.schema.json +17 -1
  122. package/generated/ControlRunSummary.schema.json +406 -1
  123. package/generated/ControlSettingsSnapshot.schema.json +1 -1
  124. package/generated/ControlSettingsUpdateRequest.schema.json +1 -1
  125. package/generated/ControlThread.schema.json +11 -2
  126. package/generated/ControlThreadCreateRequest.schema.json +7 -2
  127. package/generated/ControlThreadDetail.schema.json +25 -3
  128. package/generated/ControlThreadListResponse.schema.json +11 -2
  129. package/generated/ControlThreadTurnRequest.schema.json +4 -0
  130. package/generated/DecisionRecord.schema.json +14 -1
  131. package/generated/EnvelopeCustody.schema.json +195 -0
  132. package/generated/GlobalConfig.schema.json +1 -1
  133. package/generated/HarnessEvent.schema.json +7 -2
  134. package/generated/HarnessManifest.schema.json +1 -1
  135. package/generated/HarnessStatusDto.schema.json +1 -1
  136. package/generated/McpRunHandleResult.schema.json +109 -1
  137. package/generated/McpRunToolResult.schema.json +14 -1
  138. package/generated/RunContinuityReceipt.schema.json +182 -0
  139. package/generated/RunEvent.schema.json +3 -1
  140. package/generated/RunFacts.schema.json +14 -1
  141. package/generated/RunListQuery.schema.json +66 -0
  142. package/generated/RunResumable.schema.json +153 -0
  143. package/generated/RunTelemetry.schema.json +14 -1
  144. package/generated/SessionCapsule.schema.json +78 -0
  145. package/generated/TaskContract.schema.json +1 -1
  146. package/generated/Thread.schema.json +12 -3
  147. package/package.json +2 -2
@@ -0,0 +1,215 @@
1
+ import { z } from "zod/v3";
2
+ /**
3
+ * Run continuation contract ("continue from the break point"): the serializable
4
+ * DATA shapes shared by the in-run continuation ladder, the `continueFrom` run
5
+ * chain and the thread store's projection. Split out of `harness.ts` for the
6
+ * reason the complexity ratchet exists (INV-124); re-exported through
7
+ * `index.ts`, so every consumer imports it from `@claudexor/schema`.
8
+ *
9
+ * Vocabulary: a CARRIER is how done work reaches the next vendor process; a
10
+ * CAUSE is the typed reason the previous process stopped (copied from the
11
+ * terminal, never inferred from prose); a CAPSULE is the durable per-attempt
12
+ * record of the native vendor session and the concrete file that holds it.
13
+ */
14
+ /** Why the previous process stopped. Typed terminal facts only (INV-049). */
15
+ export declare const ResumableCause: z.ZodEnum<["vendor_limit", "pool_exhausted", "pinned_limit", "transport", "context_exhausted", "wall_clock", "cancelled", "host_restart", "input_required", "other"]>;
16
+ export type ResumableCause = z.infer<typeof ResumableCause>;
17
+ /** How done work reaches the next vendor process. */
18
+ export declare const ContinuityCarrier: z.ZodEnum<["native", "native_moved", "packet", "fresh"]>;
19
+ export type ContinuityCarrier = z.infer<typeof ContinuityCarrier>;
20
+ /** The carriers a stopped run can still be continued with (never `fresh`). */
21
+ export declare const ResumableCarrier: z.ZodEnum<["native", "native_moved", "packet"]>;
22
+ export type ResumableCarrier = z.infer<typeof ResumableCarrier>;
23
+ /** Quality of the typed vendor-limit evidence that ended the work. */
24
+ export declare const LimitEvidence: z.ZodEnum<["window", "unspecified"]>;
25
+ export type LimitEvidence = z.infer<typeof LimitEvidence>;
26
+ export declare const ContinuityIdentityCheck: z.ZodEnum<["matched_before_effects", "mismatch_before_effects", "mismatch_after_possible_effects", "not_applicable"]>;
27
+ export type ContinuityIdentityCheck = z.infer<typeof ContinuityIdentityCheck>;
28
+ export declare const ContinuityInputDelivery: z.ZodEnum<["confirmed", "uncertain", "not_applicable"]>;
29
+ export type ContinuityInputDelivery = z.infer<typeof ContinuityInputDelivery>;
30
+ /**
31
+ * ONE durable record per attempt of the native vendor session: written by the
32
+ * orchestrator when `started` reports a native session id (every try, every
33
+ * envelope kind, standalone runs included), re-located after the try settles
34
+ * (the history file can be written after `started`). The holder is the
35
+ * concrete file `locate` found — a session has one holder at a time; a move
36
+ * copies it into the next account's store and retires the source.
37
+ */
38
+ export declare const SessionCapsule: z.ZodObject<{
39
+ harness: z.ZodString;
40
+ nativeSessionId: z.ZodString;
41
+ holderProfileId: z.ZodNullable<z.ZodString>;
42
+ file: z.ZodNullable<z.ZodString>;
43
+ mtimeMs: z.ZodNullable<z.ZodNumber>;
44
+ sidecars: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
45
+ cwd: z.ZodString;
46
+ requestedModel: z.ZodNullable<z.ZodString>;
47
+ }, "strict", z.ZodTypeAny, {
48
+ harness: string;
49
+ nativeSessionId: string;
50
+ holderProfileId: string | null;
51
+ file: string | null;
52
+ mtimeMs: number | null;
53
+ sidecars: string[];
54
+ cwd: string;
55
+ requestedModel: string | null;
56
+ }, {
57
+ harness: string;
58
+ nativeSessionId: string;
59
+ holderProfileId: string | null;
60
+ file: string | null;
61
+ mtimeMs: number | null;
62
+ sidecars?: string[] | undefined;
63
+ cwd: string;
64
+ requestedModel: string | null;
65
+ }>;
66
+ export type SessionCapsule = z.infer<typeof SessionCapsule>;
67
+ /**
68
+ * Terminal block of a run whose WORK is unfinished and can be continued:
69
+ * present on non-success lifecycles and on `succeeded` runs whose work state
70
+ * is `needs_input`/`incomplete`. Decided by the work outcome, never by the
71
+ * lifecycle word alone. `resetsAt` comes only from a vendor window signal.
72
+ */
73
+ export declare const RunResumable: z.ZodObject<{
74
+ cause: z.ZodEnum<["vendor_limit", "pool_exhausted", "pinned_limit", "transport", "context_exhausted", "wall_clock", "cancelled", "host_restart", "input_required", "other"]>;
75
+ resetsAt: z.ZodNullable<z.ZodString>;
76
+ limitWindow: z.ZodNullable<z.ZodString>;
77
+ limitEvidence: z.ZodNullable<z.ZodEnum<["window", "unspecified"]>>;
78
+ carriers: z.ZodArray<z.ZodEnum<["native", "native_moved", "packet"]>, "many">;
79
+ limitCode: z.ZodNullable<z.ZodString>;
80
+ session: z.ZodNullable<z.ZodObject<{
81
+ harness: z.ZodString;
82
+ nativeSessionId: z.ZodString;
83
+ holderProfileId: z.ZodNullable<z.ZodString>;
84
+ }, "strip", z.ZodTypeAny, {
85
+ harness: string;
86
+ nativeSessionId: string;
87
+ holderProfileId: string | null;
88
+ }, {
89
+ harness: string;
90
+ nativeSessionId: string;
91
+ holderProfileId: string | null;
92
+ }>>;
93
+ workspace: z.ZodObject<{
94
+ kind: z.ZodEnum<["in_place", "retained_envelope", "none"]>;
95
+ root: z.ZodNullable<z.ZodString>;
96
+ }, "strip", z.ZodTypeAny, {
97
+ kind: "in_place" | "none" | "retained_envelope";
98
+ root: string | null;
99
+ }, {
100
+ kind: "in_place" | "none" | "retained_envelope";
101
+ root: string | null;
102
+ }>;
103
+ }, "strict", z.ZodTypeAny, {
104
+ cause: "cancelled" | "context_exhausted" | "host_restart" | "input_required" | "other" | "pinned_limit" | "pool_exhausted" | "transport" | "vendor_limit" | "wall_clock";
105
+ resetsAt: string | null;
106
+ limitWindow: string | null;
107
+ limitEvidence: "unspecified" | "window" | null;
108
+ carriers: ("native" | "native_moved" | "packet")[];
109
+ limitCode: string | null;
110
+ session: {
111
+ harness: string;
112
+ nativeSessionId: string;
113
+ holderProfileId: string | null;
114
+ } | null;
115
+ workspace: {
116
+ kind: "in_place" | "none" | "retained_envelope";
117
+ root: string | null;
118
+ };
119
+ }, {
120
+ cause: "cancelled" | "context_exhausted" | "host_restart" | "input_required" | "other" | "pinned_limit" | "pool_exhausted" | "transport" | "vendor_limit" | "wall_clock";
121
+ resetsAt: string | null;
122
+ limitWindow: string | null;
123
+ limitEvidence: "unspecified" | "window" | null;
124
+ carriers: ("native" | "native_moved" | "packet")[];
125
+ limitCode: string | null;
126
+ session: {
127
+ harness: string;
128
+ nativeSessionId: string;
129
+ holderProfileId: string | null;
130
+ } | null;
131
+ workspace: {
132
+ kind: "in_place" | "none" | "retained_envelope";
133
+ root: string | null;
134
+ };
135
+ }>;
136
+ export type RunResumable = z.infer<typeof RunResumable>;
137
+ /** Per-try receipt of a continued try (event `run.continuity`). */
138
+ export declare const RunContinuityReceipt: z.ZodObject<{
139
+ tryIndex: z.ZodNumber;
140
+ attemptId: z.ZodString;
141
+ carrier: z.ZodEnum<["native", "native_moved", "packet", "fresh"]>;
142
+ cause: z.ZodEnum<["vendor_limit", "pool_exhausted", "pinned_limit", "transport", "context_exhausted", "wall_clock", "cancelled", "host_restart", "input_required", "other"]>;
143
+ from: z.ZodObject<{
144
+ runId: z.ZodString;
145
+ attemptId: z.ZodString;
146
+ profileId: z.ZodNullable<z.ZodString>;
147
+ }, "strip", z.ZodTypeAny, {
148
+ runId: string;
149
+ attemptId: string;
150
+ profileId: string | null;
151
+ }, {
152
+ runId: string;
153
+ attemptId: string;
154
+ profileId: string | null;
155
+ }>;
156
+ to: z.ZodObject<{
157
+ profileId: z.ZodNullable<z.ZodString>;
158
+ }, "strip", z.ZodTypeAny, {
159
+ profileId: string | null;
160
+ }, {
161
+ profileId: string | null;
162
+ }>;
163
+ workspace: z.ZodEnum<["same_root", "different_root"]>;
164
+ memory: z.ZodEnum<["full", "partial", "unknown"]>;
165
+ instructions: z.ZodEnum<["as_sent", "vendor_snapshot"]>;
166
+ reingestedTokens: z.ZodNullable<z.ZodNumber>;
167
+ observedModel: z.ZodNullable<z.ZodString>;
168
+ modelMismatch: z.ZodNullable<z.ZodBoolean>;
169
+ identityCheck: z.ZodEnum<["matched_before_effects", "mismatch_before_effects", "mismatch_after_possible_effects", "not_applicable"]>;
170
+ inputDelivery: z.ZodEnum<["confirmed", "uncertain", "not_applicable"]>;
171
+ }, "strict", z.ZodTypeAny, {
172
+ tryIndex: number;
173
+ attemptId: string;
174
+ carrier: "fresh" | "native" | "native_moved" | "packet";
175
+ cause: "cancelled" | "context_exhausted" | "host_restart" | "input_required" | "other" | "pinned_limit" | "pool_exhausted" | "transport" | "vendor_limit" | "wall_clock";
176
+ from: {
177
+ runId: string;
178
+ attemptId: string;
179
+ profileId: string | null;
180
+ };
181
+ to: {
182
+ profileId: string | null;
183
+ };
184
+ workspace: "different_root" | "same_root";
185
+ memory: "full" | "partial" | "unknown";
186
+ instructions: "as_sent" | "vendor_snapshot";
187
+ reingestedTokens: number | null;
188
+ observedModel: string | null;
189
+ modelMismatch: boolean | null;
190
+ identityCheck: "matched_before_effects" | "mismatch_after_possible_effects" | "mismatch_before_effects" | "not_applicable";
191
+ inputDelivery: "confirmed" | "not_applicable" | "uncertain";
192
+ }, {
193
+ tryIndex: number;
194
+ attemptId: string;
195
+ carrier: "fresh" | "native" | "native_moved" | "packet";
196
+ cause: "cancelled" | "context_exhausted" | "host_restart" | "input_required" | "other" | "pinned_limit" | "pool_exhausted" | "transport" | "vendor_limit" | "wall_clock";
197
+ from: {
198
+ runId: string;
199
+ attemptId: string;
200
+ profileId: string | null;
201
+ };
202
+ to: {
203
+ profileId: string | null;
204
+ };
205
+ workspace: "different_root" | "same_root";
206
+ memory: "full" | "partial" | "unknown";
207
+ instructions: "as_sent" | "vendor_snapshot";
208
+ reingestedTokens: number | null;
209
+ observedModel: string | null;
210
+ modelMismatch: boolean | null;
211
+ identityCheck: "matched_before_effects" | "mismatch_after_possible_effects" | "mismatch_before_effects" | "not_applicable";
212
+ inputDelivery: "confirmed" | "not_applicable" | "uncertain";
213
+ }>;
214
+ export type RunContinuityReceipt = z.infer<typeof RunContinuityReceipt>;
215
+ //# sourceMappingURL=run-continuity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-continuity.d.ts","sourceRoot":"","sources":["../src/run-continuity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B;;;;;;;;;;;GAWG;AAEH,6EAA6E;AAC7E,eAAO,MAAM,cAAc,uKAexB,CAAC;AACJ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D,qDAAqD;AACrD,eAAO,MAAM,iBAAiB,0DAI3B,CAAC;AACJ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,8EAA8E;AAC9E,eAAO,MAAM,gBAAgB,iDAEgD,CAAC;AAC9E,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEhE,sEAAsE;AACtE,eAAO,MAAM,aAAa,sCAIvB,CAAC;AACJ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,eAAO,MAAM,uBAAuB,uHASjC,CAAC;AACJ,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE9E,eAAO,MAAM,uBAAuB,yDAIjC,CAAC;AACJ,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE9E;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BgE,CAAC;AAC5F,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D;;;;;GAKG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CtB,CAAC;AACJ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,mEAAmE;AACnE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4CgE,CAAC;AAClG,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
@@ -0,0 +1,170 @@
1
+ import { z } from "zod/v3";
2
+ import { Id } from "./primitives.js";
3
+ /**
4
+ * Run continuation contract ("continue from the break point"): the serializable
5
+ * DATA shapes shared by the in-run continuation ladder, the `continueFrom` run
6
+ * chain and the thread store's projection. Split out of `harness.ts` for the
7
+ * reason the complexity ratchet exists (INV-124); re-exported through
8
+ * `index.ts`, so every consumer imports it from `@claudexor/schema`.
9
+ *
10
+ * Vocabulary: a CARRIER is how done work reaches the next vendor process; a
11
+ * CAUSE is the typed reason the previous process stopped (copied from the
12
+ * terminal, never inferred from prose); a CAPSULE is the durable per-attempt
13
+ * record of the native vendor session and the concrete file that holds it.
14
+ */
15
+ /** Why the previous process stopped. Typed terminal facts only (INV-049). */
16
+ export const ResumableCause = z
17
+ .enum([
18
+ "vendor_limit",
19
+ "pool_exhausted",
20
+ "pinned_limit",
21
+ "transport",
22
+ "context_exhausted",
23
+ "wall_clock",
24
+ "cancelled",
25
+ "host_restart",
26
+ "input_required",
27
+ "other",
28
+ ])
29
+ .describe("Typed reason the previous process stopped: a vendor limit (next account eligible), the whole pool spent, a pinned account's limit, a transport death (crash, timeout, watchdog), context exhaustion, the wall-clock deadline, a cancel, a daemon/host restart, a model that asked for input, or another typed cause.");
30
+ /** How done work reaches the next vendor process. */
31
+ export const ContinuityCarrier = z
32
+ .enum(["native", "native_moved", "packet", "fresh"])
33
+ .describe("Carrier of a continued try: native (the vendor's own session, same account), native_moved (the session file made visible in the next account's store, then resumed there), packet (a fresh session re-grounded by an evidence index), or fresh (nothing to carry — a replay of the original prompt).");
34
+ /** The carriers a stopped run can still be continued with (never `fresh`). */
35
+ export const ResumableCarrier = z
36
+ .enum(["native", "native_moved", "packet"])
37
+ .describe("A continuity representation still available for a stopped run.");
38
+ /** Quality of the typed vendor-limit evidence that ended the work. */
39
+ export const LimitEvidence = z
40
+ .enum(["window", "unspecified"])
41
+ .describe("window: the vendor named the spent window (a reset instant or a constraint id); unspecified: a typed limit without a window — a bare backoff frame is transport, not a limit.");
42
+ export const ContinuityIdentityCheck = z
43
+ .enum([
44
+ "matched_before_effects",
45
+ "mismatch_before_effects",
46
+ "mismatch_after_possible_effects",
47
+ "not_applicable",
48
+ ])
49
+ .describe("Whether the resumed vendor session was the one requested, judged at the earliest handshake (codex thread/resume before turn/start; claude system/init): matched, mismatch caught before the child could act, mismatch caught after it may have acted, or not applicable (no resume was requested, or a harness without the continuity capability answered with another session id, which is recorded as before).");
50
+ export const ContinuityInputDelivery = z
51
+ .enum(["confirmed", "uncertain", "not_applicable"])
52
+ .describe("Whether the predecessor's last input (its turn prompt or an admitted steering message) is known to be in the vendor history: confirmed, uncertain (carried in the notice as a reference to reconcile, never replayed blindly), or not applicable.");
53
+ /**
54
+ * ONE durable record per attempt of the native vendor session: written by the
55
+ * orchestrator when `started` reports a native session id (every try, every
56
+ * envelope kind, standalone runs included), re-located after the try settles
57
+ * (the history file can be written after `started`). The holder is the
58
+ * concrete file `locate` found — a session has one holder at a time; a move
59
+ * copies it into the next account's store and retires the source.
60
+ */
61
+ export const SessionCapsule = z
62
+ .object({
63
+ harness: Id.describe("Harness that owns the session."),
64
+ nativeSessionId: z.string().min(1).describe("The vendor's own session/thread id."),
65
+ holderProfileId: Id.nullable().describe("Credential profile whose store currently holds the session; null = the harness default store."),
66
+ file: z
67
+ .string()
68
+ .nullable()
69
+ .describe("Absolute path of the located history file (the holder); null until located."),
70
+ mtimeMs: z
71
+ .number()
72
+ .nullable()
73
+ .describe("Modification time of the located file (newest wins on a tie); null until located."),
74
+ sidecars: z
75
+ .array(z.string())
76
+ .default([])
77
+ .describe("Absolute paths of sibling state a move must carry (claude `<sid>/` tool-results and subagents; codex rollout parts)."),
78
+ cwd: z.string().describe("Working directory the session was created under."),
79
+ requestedModel: z
80
+ .string()
81
+ .nullable()
82
+ .describe("The model the spec requested; null = the harness default."),
83
+ })
84
+ .strict()
85
+ .describe("Durable per-attempt record of the native vendor session and its holder file.");
86
+ /**
87
+ * Terminal block of a run whose WORK is unfinished and can be continued:
88
+ * present on non-success lifecycles and on `succeeded` runs whose work state
89
+ * is `needs_input`/`incomplete`. Decided by the work outcome, never by the
90
+ * lifecycle word alone. `resetsAt` comes only from a vendor window signal.
91
+ */
92
+ export const RunResumable = z
93
+ .object({
94
+ cause: ResumableCause,
95
+ resetsAt: z
96
+ .string()
97
+ .nullable()
98
+ .describe("When the spent vendor window reopens, only from a vendor signal; never fabricated."),
99
+ limitWindow: z
100
+ .string()
101
+ .nullable()
102
+ .describe("The vendor's own name for the spent window (e.g. five_hour, seven_day_opus), when known."),
103
+ limitEvidence: LimitEvidence.nullable(),
104
+ carriers: z
105
+ .array(ResumableCarrier)
106
+ .describe("Continuity representations still available (NOT quota readiness; readiness is described by the limit facts)."),
107
+ limitCode: z
108
+ .string()
109
+ .nullable()
110
+ .describe("The typed vendor limit code that ended the work, when any."),
111
+ session: z
112
+ .object({
113
+ harness: Id,
114
+ nativeSessionId: z.string().min(1),
115
+ holderProfileId: Id.nullable(),
116
+ })
117
+ .nullable()
118
+ .describe("The native session a continuation can resume, when one exists."),
119
+ workspace: z
120
+ .object({
121
+ kind: z.enum(["in_place", "retained_envelope", "none"]),
122
+ root: z.string().nullable(),
123
+ })
124
+ .describe("Where the stopped work's tree is: the live root, a retained envelope, or gone."),
125
+ })
126
+ .strict()
127
+ .describe("Terminal facts of a stopped run that can be continued: cause, limit evidence, available carriers, the native session and the workspace.");
128
+ /** Per-try receipt of a continued try (event `run.continuity`). */
129
+ export const RunContinuityReceipt = z
130
+ .object({
131
+ tryIndex: z
132
+ .number()
133
+ .int()
134
+ .nonnegative()
135
+ .describe("Native try within the attempt; joins the receipt to its try."),
136
+ attemptId: Id,
137
+ carrier: ContinuityCarrier,
138
+ cause: ResumableCause,
139
+ from: z.object({
140
+ runId: Id,
141
+ attemptId: Id,
142
+ profileId: Id.nullable(),
143
+ }),
144
+ to: z.object({ profileId: Id.nullable() }),
145
+ workspace: z
146
+ .enum(["same_root", "different_root"])
147
+ .describe("Whether the continued try runs in the predecessor's execution root."),
148
+ memory: z
149
+ .enum(["full", "partial", "unknown"])
150
+ .describe("Its own fact: a native resume carries the whole history (full); a packet re-brief is partial; a native resume that lost history (e.g. a rejected compacted item) is partial/unknown."),
151
+ instructions: z
152
+ .enum(["as_sent", "vendor_snapshot"])
153
+ .describe("as_sent: the successor's instructions equal the predecessor's; vendor_snapshot: they differ, and the vendor may resend its recorded system prompt instead (claude records it on the first request)."),
154
+ reingestedTokens: z
155
+ .number()
156
+ .int()
157
+ .nonnegative()
158
+ .nullable()
159
+ .describe("Input + cache-creation tokens of the first resumed request, when known."),
160
+ observedModel: z
161
+ .string()
162
+ .nullable()
163
+ .describe("THIS try's attested model (never borrowed from another try)."),
164
+ modelMismatch: z.boolean().nullable(),
165
+ identityCheck: ContinuityIdentityCheck,
166
+ inputDelivery: ContinuityInputDelivery,
167
+ })
168
+ .strict()
169
+ .describe("Receipt of one continued try: carrier, cause, accounts, memory, model attestation.");
170
+ //# sourceMappingURL=run-continuity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-continuity.js","sourceRoot":"","sources":["../src/run-continuity.ts"],"names":[],"mappings":"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"}
@@ -232,6 +232,7 @@ export declare const RunFacts: z.ZodObject<{
232
232
  locator?: string | null | undefined;
233
233
  description: string;
234
234
  }>, "many">>;
235
+ unverified_reason: z.ZodOptional<z.ZodEnum<["footer_missing", "footer_not_json", "footer_not_object", "report_missing", "report_malformed", "report_contradictory", "legacy_output_invalid"]>>;
235
236
  }, "strip", z.ZodTypeAny, {
236
237
  state: "completed" | "incomplete" | "needs_input" | "unverified";
237
238
  source: "absent" | "constrained" | "validated";
@@ -240,6 +241,7 @@ export declare const RunFacts: z.ZodObject<{
240
241
  locator: string | null;
241
242
  description: string;
242
243
  }[] | undefined;
244
+ unverified_reason?: "footer_missing" | "footer_not_json" | "footer_not_object" | "legacy_output_invalid" | "report_contradictory" | "report_malformed" | "report_missing" | undefined;
243
245
  }, {
244
246
  state: "completed" | "incomplete" | "needs_input" | "unverified";
245
247
  source: "absent" | "constrained" | "validated";
@@ -248,6 +250,7 @@ export declare const RunFacts: z.ZodObject<{
248
250
  locator?: string | null | undefined;
249
251
  description: string;
250
252
  }[] | undefined;
253
+ unverified_reason?: "footer_missing" | "footer_not_json" | "footer_not_object" | "legacy_output_invalid" | "report_contradictory" | "report_malformed" | "report_missing" | undefined;
251
254
  }>>;
252
255
  }, "strict", z.ZodTypeAny, {
253
256
  lifecycle: "cancelled" | "failed" | "interrupted" | "succeeded";
@@ -264,6 +267,7 @@ export declare const RunFacts: z.ZodObject<{
264
267
  locator: string | null;
265
268
  description: string;
266
269
  }[] | undefined;
270
+ unverified_reason?: "footer_missing" | "footer_not_json" | "footer_not_object" | "legacy_output_invalid" | "report_contradictory" | "report_malformed" | "report_missing" | undefined;
267
271
  } | undefined;
268
272
  }, {
269
273
  lifecycle: "cancelled" | "failed" | "interrupted" | "succeeded";
@@ -280,6 +284,7 @@ export declare const RunFacts: z.ZodObject<{
280
284
  locator?: string | null | undefined;
281
285
  description: string;
282
286
  }[] | undefined;
287
+ unverified_reason?: "footer_missing" | "footer_not_json" | "footer_not_object" | "legacy_output_invalid" | "report_contradictory" | "report_malformed" | "report_missing" | undefined;
283
288
  } | undefined;
284
289
  }>;
285
290
  deliverable: z.ZodObject<{
@@ -464,6 +469,7 @@ export declare const RunFacts: z.ZodObject<{
464
469
  locator: string | null;
465
470
  description: string;
466
471
  }[] | undefined;
472
+ unverified_reason?: "footer_missing" | "footer_not_json" | "footer_not_object" | "legacy_output_invalid" | "report_contradictory" | "report_malformed" | "report_missing" | undefined;
467
473
  } | undefined;
468
474
  };
469
475
  deliverable: {
@@ -536,6 +542,7 @@ export declare const RunFacts: z.ZodObject<{
536
542
  locator?: string | null | undefined;
537
543
  description: string;
538
544
  }[] | undefined;
545
+ unverified_reason?: "footer_missing" | "footer_not_json" | "footer_not_object" | "legacy_output_invalid" | "report_contradictory" | "report_malformed" | "report_missing" | undefined;
539
546
  } | undefined;
540
547
  };
541
548
  deliverable: {
@@ -1 +1 @@
1
- {"version":3,"file":"run-facts.d.ts","sourceRoot":"","sources":["../src/run-facts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-facts.d.ts","sourceRoot":"","sources":["../src/run-facts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { z } from "zod/v3";
2
+ export interface RunListRecord {
3
+ id: string;
4
+ state: string;
5
+ createdAt?: string;
6
+ }
7
+ export declare const RunListCursor: z.ZodObject<{
8
+ createdAt: z.ZodString;
9
+ id: z.ZodString;
10
+ }, "strict", z.ZodTypeAny, {
11
+ createdAt: string;
12
+ id: string;
13
+ }, {
14
+ createdAt: string;
15
+ id: string;
16
+ }>;
17
+ export type RunListCursor = z.infer<typeof RunListCursor>;
18
+ export declare const RunListQuery: z.ZodObject<{
19
+ limit: z.ZodNumber;
20
+ state: z.ZodNullable<z.ZodEnum<["queued", "running", "succeeded", "failed", "cancelled", "interrupted"]>>;
21
+ cursor: z.ZodNullable<z.ZodObject<{
22
+ createdAt: z.ZodString;
23
+ id: z.ZodString;
24
+ }, "strict", z.ZodTypeAny, {
25
+ createdAt: string;
26
+ id: string;
27
+ }, {
28
+ createdAt: string;
29
+ id: string;
30
+ }>>;
31
+ }, "strict", z.ZodTypeAny, {
32
+ limit: number;
33
+ state: "cancelled" | "failed" | "interrupted" | "queued" | "running" | "succeeded" | null;
34
+ cursor: {
35
+ createdAt: string;
36
+ id: string;
37
+ } | null;
38
+ }, {
39
+ limit: number;
40
+ state: "cancelled" | "failed" | "interrupted" | "queued" | "running" | "succeeded" | null;
41
+ cursor: {
42
+ createdAt: string;
43
+ id: string;
44
+ } | null;
45
+ }>;
46
+ export type RunListQuery = z.infer<typeof RunListQuery>;
47
+ /** Newest-first deterministic order: `(createdAt desc, id desc)`. Records with
48
+ * no `createdAt` sort last (empty string) with `id` as the stable tiebreak, so
49
+ * the traversal is total and duplicate-free even across foreign record shapes. */
50
+ export declare function orderRunRecords<T extends RunListRecord>(records: readonly T[]): T[];
51
+ /**
52
+ * Index of the first record strictly after `cursor` within an already-ordered
53
+ * list. Comparison-based (not id-equality) so a cursor whose record was pruned
54
+ * between pages still resumes at the correct neighbor — no duplicate, no gap.
55
+ */
56
+ export declare function indexAfterCursor(ordered: readonly RunListRecord[], cursor: RunListCursor): number;
57
+ export declare function encodeRunCursor(rec: RunListRecord): string;
58
+ /** Strict opaque-cursor decode: base64url alphabet only, exactly one separator,
59
+ * non-empty id. Anything else is a typed 400 (never a silent full-list fall
60
+ * back), mirroring the QA-061 run-event cursor contract. */
61
+ export declare function decodeRunCursor(raw: string): RunListCursor;
62
+ /**
63
+ * Select one bounded page from the raw daemon records: order newest-first,
64
+ * apply the optional `state` filter, then keyset-slice by cursor + limit. All of
65
+ * it happens on the raw records BEFORE any summary is materialized, so the
66
+ * caller only fingerprints/projects the returned page — work bounded by page
67
+ * size, not total retained records (QA-052).
68
+ */
69
+ export declare function selectRunListPage<T extends RunListRecord>(records: readonly T[], query: RunListQuery): {
70
+ page: T[];
71
+ hasMore: boolean;
72
+ nextCursor: string | null;
73
+ };
74
+ //# sourceMappingURL=run-list-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-list-page.d.ts","sourceRoot":"","sources":["../src/run-list-page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AACD,eAAO,MAAM,aAAa;;;;;;;;;EAAsE,CAAC;AACjG,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAC1D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMd,CAAC;AACZ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAcxD;;kFAEkF;AAClF,wBAAgB,eAAe,CAAC,CAAC,SAAS,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAQnF;AAUD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,CAIjG;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAE1D;AAED;;4DAE4D;AAC5D,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAiB1D;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,aAAa,EACvD,OAAO,EAAE,SAAS,CAAC,EAAE,EACrB,KAAK,EAAE,YAAY,GAClB;IAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAQ5D"}
@@ -0,0 +1,85 @@
1
+ import { z } from "zod/v3";
2
+ import { ControlRunState } from "./control.js";
3
+ export const RunListCursor = z.object({ createdAt: z.string(), id: z.string().min(1) }).strict();
4
+ export const RunListQuery = z
5
+ .object({
6
+ limit: z.number().int().min(1).max(1000),
7
+ state: ControlRunState.nullable(),
8
+ cursor: RunListCursor.nullable(),
9
+ })
10
+ .strict();
11
+ function invalidRunListQuery(message, code) {
12
+ return Object.assign(new Error(message), {
13
+ status: 400,
14
+ code,
15
+ requiredActions: code === "invalid_run_list_cursor" ? ["resnapshot"] : ["retry_with_valid_query"],
16
+ });
17
+ }
18
+ /** Newest-first deterministic order: `(createdAt desc, id desc)`. Records with
19
+ * no `createdAt` sort last (empty string) with `id` as the stable tiebreak, so
20
+ * the traversal is total and duplicate-free even across foreign record shapes. */
21
+ export function orderRunRecords(records) {
22
+ return [...records].sort((a, b) => {
23
+ const ac = a.createdAt ?? "";
24
+ const bc = b.createdAt ?? "";
25
+ if (ac !== bc)
26
+ return ac < bc ? 1 : -1;
27
+ if (a.id !== b.id)
28
+ return a.id < b.id ? 1 : -1;
29
+ return 0;
30
+ });
31
+ }
32
+ /** True when `rec` sorts strictly AFTER the cursor key in newest-first order
33
+ * (i.e. is older, or same instant with a smaller id). */
34
+ function recordSortsAfterCursor(rec, cursor) {
35
+ const rc = rec.createdAt ?? "";
36
+ if (rc !== cursor.createdAt)
37
+ return rc < cursor.createdAt;
38
+ return rec.id < cursor.id;
39
+ }
40
+ /**
41
+ * Index of the first record strictly after `cursor` within an already-ordered
42
+ * list. Comparison-based (not id-equality) so a cursor whose record was pruned
43
+ * between pages still resumes at the correct neighbor — no duplicate, no gap.
44
+ */
45
+ export function indexAfterCursor(ordered, cursor) {
46
+ let i = 0;
47
+ while (i < ordered.length && !recordSortsAfterCursor(ordered[i], cursor))
48
+ i++;
49
+ return i;
50
+ }
51
+ export function encodeRunCursor(rec) {
52
+ return Buffer.from(`${rec.createdAt ?? ""}\0${rec.id}`, "utf8").toString("base64url");
53
+ }
54
+ /** Strict opaque-cursor decode: base64url alphabet only, exactly one separator,
55
+ * non-empty id. Anything else is a typed 400 (never a silent full-list fall
56
+ * back), mirroring the QA-061 run-event cursor contract. */
57
+ export function decodeRunCursor(raw) {
58
+ if (!/^[A-Za-z0-9_-]+$/.test(raw)) {
59
+ throw invalidRunListQuery("cursor is malformed; refetch the run list and resume from its nextCursor", "invalid_run_list_cursor");
60
+ }
61
+ const decoded = Buffer.from(raw, "base64url").toString("utf8");
62
+ const sep = decoded.indexOf("\0");
63
+ const id = sep < 0 ? "" : decoded.slice(sep + 1);
64
+ if (sep < 0 || id.length === 0 || id.includes("\0")) {
65
+ throw invalidRunListQuery("cursor is malformed; refetch the run list and resume from its nextCursor", "invalid_run_list_cursor");
66
+ }
67
+ return { createdAt: decoded.slice(0, sep), id };
68
+ }
69
+ /**
70
+ * Select one bounded page from the raw daemon records: order newest-first,
71
+ * apply the optional `state` filter, then keyset-slice by cursor + limit. All of
72
+ * it happens on the raw records BEFORE any summary is materialized, so the
73
+ * caller only fingerprints/projects the returned page — work bounded by page
74
+ * size, not total retained records (QA-052).
75
+ */
76
+ export function selectRunListPage(records, query) {
77
+ const ordered = orderRunRecords(records);
78
+ const filtered = query.state ? ordered.filter((r) => r.state === query.state) : ordered;
79
+ const start = query.cursor ? indexAfterCursor(filtered, query.cursor) : 0;
80
+ const page = filtered.slice(start, start + query.limit);
81
+ const hasMore = start + page.length < filtered.length;
82
+ const tail = page[page.length - 1];
83
+ return { page, hasMore, nextCursor: hasMore && tail ? encodeRunCursor(tail) : null };
84
+ }
85
+ //# sourceMappingURL=run-list-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-list-page.js","sourceRoot":"","sources":["../src/run-list-page.ts"],"names":[],"mappings":"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"}