@claudexor/schema 1.0.1 → 2.1.1

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 (278) hide show
  1. package/dist/agent-capabilities.d.ts +102 -30
  2. package/dist/agent-capabilities.d.ts.map +1 -1
  3. package/dist/agent-capabilities.js +49 -18
  4. package/dist/agent-capabilities.js.map +1 -1
  5. package/dist/apply-eligibility.d.ts.map +1 -1
  6. package/dist/apply-eligibility.js +22 -6
  7. package/dist/apply-eligibility.js.map +1 -1
  8. package/dist/attachment.d.ts +117 -52
  9. package/dist/attachment.d.ts.map +1 -1
  10. package/dist/attachment.js +60 -45
  11. package/dist/attachment.js.map +1 -1
  12. package/dist/auth.d.ts +1444 -0
  13. package/dist/auth.d.ts.map +1 -0
  14. package/dist/auth.js +371 -0
  15. package/dist/auth.js.map +1 -0
  16. package/dist/budget.d.ts +147 -18
  17. package/dist/budget.d.ts.map +1 -1
  18. package/dist/budget.js +80 -22
  19. package/dist/budget.js.map +1 -1
  20. package/dist/config.d.ts +829 -135
  21. package/dist/config.d.ts.map +1 -1
  22. package/dist/config.js +195 -41
  23. package/dist/config.js.map +1 -1
  24. package/dist/context.d.ts +6 -6
  25. package/dist/context.d.ts.map +1 -1
  26. package/dist/context.js +31 -7
  27. package/dist/context.js.map +1 -1
  28. package/dist/control-gc.d.ts +185 -0
  29. package/dist/control-gc.d.ts.map +1 -0
  30. package/dist/control-gc.js +81 -0
  31. package/dist/control-gc.js.map +1 -0
  32. package/dist/control-operation-responses.d.ts +1298 -0
  33. package/dist/control-operation-responses.d.ts.map +1 -0
  34. package/dist/control-operation-responses.js +35 -0
  35. package/dist/control-operation-responses.js.map +1 -0
  36. package/dist/control-run-detail.d.ts +556 -247
  37. package/dist/control-run-detail.d.ts.map +1 -1
  38. package/dist/control-run-detail.js +72 -17
  39. package/dist/control-run-detail.js.map +1 -1
  40. package/dist/control-run-retry.d.ts +88 -0
  41. package/dist/control-run-retry.d.ts.map +1 -0
  42. package/dist/control-run-retry.js +40 -0
  43. package/dist/control-run-retry.js.map +1 -0
  44. package/dist/control-run-scope.d.ts +25 -0
  45. package/dist/control-run-scope.d.ts.map +1 -0
  46. package/dist/control-run-scope.js +22 -0
  47. package/dist/control-run-scope.js.map +1 -0
  48. package/dist/control-secret.d.ts +90 -0
  49. package/dist/control-secret.d.ts.map +1 -0
  50. package/dist/control-secret.js +35 -0
  51. package/dist/control-secret.js.map +1 -0
  52. package/dist/control-spec.d.ts +592 -0
  53. package/dist/control-spec.d.ts.map +1 -0
  54. package/dist/control-spec.js +85 -0
  55. package/dist/control-spec.js.map +1 -0
  56. package/dist/control-thread-apply.d.ts +175 -0
  57. package/dist/control-thread-apply.d.ts.map +1 -0
  58. package/dist/control-thread-apply.js +31 -0
  59. package/dist/control-thread-apply.js.map +1 -0
  60. package/dist/control-trust.d.ts +74 -10
  61. package/dist/control-trust.d.ts.map +1 -1
  62. package/dist/control-trust.js +31 -11
  63. package/dist/control-trust.js.map +1 -1
  64. package/dist/control.d.ts +1688 -1334
  65. package/dist/control.d.ts.map +1 -1
  66. package/dist/control.js +592 -333
  67. package/dist/control.js.map +1 -1
  68. package/dist/credential-profile.d.ts +454 -0
  69. package/dist/credential-profile.d.ts.map +1 -0
  70. package/dist/credential-profile.js +140 -0
  71. package/dist/credential-profile.js.map +1 -0
  72. package/dist/decision.d.ts +10 -10
  73. package/dist/decision.d.ts.map +1 -1
  74. package/dist/decision.js +62 -15
  75. package/dist/decision.js.map +1 -1
  76. package/dist/delivery.d.ts +99 -0
  77. package/dist/delivery.d.ts.map +1 -0
  78. package/dist/delivery.js +19 -0
  79. package/dist/delivery.js.map +1 -0
  80. package/dist/events.d.ts +41 -4
  81. package/dist/events.d.ts.map +1 -1
  82. package/dist/events.js +47 -4
  83. package/dist/events.js.map +1 -1
  84. package/dist/gate.d.ts +5 -5
  85. package/dist/gate.d.ts.map +1 -1
  86. package/dist/gate.js +25 -5
  87. package/dist/gate.js.map +1 -1
  88. package/dist/harness.d.ts +775 -237
  89. package/dist/harness.d.ts.map +1 -1
  90. package/dist/harness.js +314 -111
  91. package/dist/harness.js.map +1 -1
  92. package/dist/index.d.ts +19 -0
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.js +19 -0
  95. package/dist/index.js.map +1 -1
  96. package/dist/operation.d.ts +185 -0
  97. package/dist/operation.d.ts.map +1 -0
  98. package/dist/operation.js +50 -0
  99. package/dist/operation.js.map +1 -0
  100. package/dist/orchestrate.d.ts +150 -22
  101. package/dist/orchestrate.d.ts.map +1 -1
  102. package/dist/orchestrate.js +117 -7
  103. package/dist/orchestrate.js.map +1 -1
  104. package/dist/primitives.d.ts.map +1 -1
  105. package/dist/primitives.js +4 -1
  106. package/dist/primitives.js.map +1 -1
  107. package/dist/problem.d.ts +29 -0
  108. package/dist/problem.d.ts.map +1 -0
  109. package/dist/problem.js +17 -0
  110. package/dist/problem.js.map +1 -0
  111. package/dist/project.d.ts +97 -0
  112. package/dist/project.d.ts.map +1 -0
  113. package/dist/project.js +27 -0
  114. package/dist/project.js.map +1 -0
  115. package/dist/quota.d.ts +269 -0
  116. package/dist/quota.d.ts.map +1 -0
  117. package/dist/quota.js +58 -0
  118. package/dist/quota.js.map +1 -0
  119. package/dist/raw.d.ts +195 -0
  120. package/dist/raw.d.ts.map +1 -0
  121. package/dist/raw.js +58 -0
  122. package/dist/raw.js.map +1 -0
  123. package/dist/readiness.d.ts +596 -0
  124. package/dist/readiness.d.ts.map +1 -0
  125. package/dist/readiness.js +87 -0
  126. package/dist/readiness.js.map +1 -0
  127. package/dist/recovery.d.ts +515 -0
  128. package/dist/recovery.d.ts.map +1 -0
  129. package/dist/recovery.js +93 -0
  130. package/dist/recovery.js.map +1 -0
  131. package/dist/request-requirements.d.ts +36 -0
  132. package/dist/request-requirements.d.ts.map +1 -0
  133. package/dist/request-requirements.js +29 -0
  134. package/dist/request-requirements.js.map +1 -0
  135. package/dist/review.d.ts +26 -26
  136. package/dist/review.d.ts.map +1 -1
  137. package/dist/review.js +50 -10
  138. package/dist/review.js.map +1 -1
  139. package/dist/route.d.ts +13 -13
  140. package/dist/route.d.ts.map +1 -1
  141. package/dist/route.js +19 -4
  142. package/dist/route.js.map +1 -1
  143. package/dist/setup.d.ts +9811 -0
  144. package/dist/setup.d.ts.map +1 -0
  145. package/dist/setup.js +475 -0
  146. package/dist/setup.js.map +1 -0
  147. package/dist/spec.d.ts +178 -61
  148. package/dist/spec.d.ts.map +1 -1
  149. package/dist/spec.js +69 -16
  150. package/dist/spec.js.map +1 -1
  151. package/dist/surface-run-controls.d.ts.map +1 -1
  152. package/dist/surface-run-controls.js +25 -21
  153. package/dist/surface-run-controls.js.map +1 -1
  154. package/dist/task.d.ts +1657 -60
  155. package/dist/task.d.ts.map +1 -1
  156. package/dist/task.js +144 -18
  157. package/dist/task.js.map +1 -1
  158. package/dist/telemetry.d.ts +487 -72
  159. package/dist/telemetry.d.ts.map +1 -1
  160. package/dist/telemetry.js +194 -16
  161. package/dist/telemetry.js.map +1 -1
  162. package/dist/thread.d.ts +89 -51
  163. package/dist/thread.d.ts.map +1 -1
  164. package/dist/thread.js +56 -11
  165. package/dist/thread.js.map +1 -1
  166. package/dist/tool-ref.d.ts +45 -0
  167. package/dist/tool-ref.d.ts.map +1 -0
  168. package/dist/tool-ref.js +45 -0
  169. package/dist/tool-ref.js.map +1 -0
  170. package/dist/workproduct.d.ts +3 -3
  171. package/dist/workproduct.d.ts.map +1 -1
  172. package/dist/workproduct.js.map +1 -1
  173. package/dist/workspace.d.ts +3 -3
  174. package/dist/workspace.d.ts.map +1 -1
  175. package/dist/workspace.js +12 -3
  176. package/dist/workspace.js.map +1 -1
  177. package/generated/AgentCapabilityCatalog.schema.json +53 -11
  178. package/generated/BudgetLease.schema.json +55 -6
  179. package/generated/BudgetObservation.schema.json +44 -7
  180. package/generated/ConformanceReport.schema.json +49 -0
  181. package/generated/ControlApplyCheckResponse.schema.json +34 -0
  182. package/generated/ControlArtifactListResponse.schema.json +57 -0
  183. package/generated/ControlAuthReadinessRefreshRequest.schema.json +38 -0
  184. package/generated/ControlAuthReadinessRefreshResponse.schema.json +85 -0
  185. package/generated/ControlCredentialProfileCreateRequest.schema.json +32 -0
  186. package/generated/ControlCredentialProfileCreateResponse.schema.json +142 -0
  187. package/generated/ControlCredentialProfileDeleteResponse.schema.json +107 -0
  188. package/generated/ControlCredentialProfilesResponse.schema.json +155 -0
  189. package/generated/ControlDeliveryResponse.schema.json +136 -0
  190. package/generated/ControlGcReceipt.schema.json +170 -0
  191. package/generated/ControlGcRequest.schema.json +18 -0
  192. package/generated/ControlHandshakeRequest.schema.json +26 -0
  193. package/generated/ControlHandshakeResponse.schema.json +30 -0
  194. package/generated/ControlHarnessListResponse.schema.json +198 -14
  195. package/generated/ControlHarnessModelsResponse.schema.json +19 -0
  196. package/generated/ControlHarnessSettingsPatch.schema.json +9 -12
  197. package/generated/ControlJournalEvent.schema.json +42 -0
  198. package/generated/ControlJournalExportReceipt.schema.json +49 -0
  199. package/generated/ControlJournalInspection.schema.json +149 -0
  200. package/generated/ControlJournalQuarantineReceipt.schema.json +55 -0
  201. package/generated/ControlJournalQuarantineRequest.schema.json +24 -0
  202. package/generated/ControlJournalValidation.schema.json +181 -0
  203. package/generated/ControlOperationCatalog.schema.json +128 -0
  204. package/generated/ControlOperationDescriptor.schema.json +110 -0
  205. package/generated/ControlProblem.schema.json +59 -0
  206. package/generated/ControlProject.schema.json +42 -0
  207. package/generated/ControlProjectListResponse.schema.json +54 -0
  208. package/generated/ControlProjectRegisterRequest.schema.json +19 -0
  209. package/generated/ControlProjectRelinkRequest.schema.json +19 -0
  210. package/generated/ControlQueuedRunInfo.schema.json +4 -2
  211. package/generated/ControlQuotaResponse.schema.json +177 -0
  212. package/generated/ControlResource.schema.json +59 -0
  213. package/generated/ControlRunAgainDraft.schema.json +539 -0
  214. package/generated/ControlRunDetail.schema.json +373 -34
  215. package/generated/ControlRunListResponse.schema.json +968 -0
  216. package/generated/ControlRunRetryResponse.schema.json +54 -0
  217. package/generated/ControlRunStartRequest.schema.json +123 -55
  218. package/generated/ControlRunStartResponse.schema.json +78 -0
  219. package/generated/ControlRunSummary.schema.json +312 -21
  220. package/generated/ControlSecretListResponse.schema.json +8 -14
  221. package/generated/ControlSecretMutationResponse.schema.json +32 -0
  222. package/generated/ControlSecretSetRequest.schema.json +27 -0
  223. package/generated/ControlSettingsSnapshot.schema.json +128 -44
  224. package/generated/ControlSettingsUpdateRequest.schema.json +119 -40
  225. package/generated/ControlSetupJob.schema.json +770 -64
  226. package/generated/ControlSetupJobCreateRequest.schema.json +16 -13
  227. package/generated/ControlSetupJobEvent.schema.json +869 -5
  228. package/generated/ControlSetupJobListFilter.schema.json +35 -0
  229. package/generated/ControlSetupJobListResponse.schema.json +770 -64
  230. package/generated/ControlSetupJobSnapshot.schema.json +878 -0
  231. package/generated/ControlSpecAnswersRequest.schema.json +74 -0
  232. package/generated/ControlSpecQuestionsRequest.schema.json +128 -2
  233. package/generated/ControlSpecSession.schema.json +249 -0
  234. package/generated/ControlSpecSessionListResponse.schema.json +261 -0
  235. package/generated/ControlThread.schema.json +36 -6
  236. package/generated/ControlThreadApplyResponse.schema.json +139 -0
  237. package/generated/ControlThreadCreateRequest.schema.json +6 -2
  238. package/generated/ControlThreadDetail.schema.json +64 -12
  239. package/generated/ControlThreadListResponse.schema.json +36 -6
  240. package/generated/ControlThreadTurnRequest.schema.json +413 -0
  241. package/generated/ControlThreadTurnResponse.schema.json +73 -0
  242. package/generated/ControlThreadUpdateRequest.schema.json +12 -1
  243. package/generated/ControlTrustListResponse.schema.json +6 -0
  244. package/generated/ControlTrustState.schema.json +6 -0
  245. package/generated/ControlTrustUpdateRequest.schema.json +65 -3
  246. package/generated/ControlUploadCreateRequest.schema.json +37 -0
  247. package/generated/ControlUploadFinalizeRequest.schema.json +17 -0
  248. package/generated/ControlUploadStatus.schema.json +40 -0
  249. package/generated/CredentialProfile.schema.json +78 -0
  250. package/generated/CredentialProfileStatus.schema.json +61 -0
  251. package/generated/DecisionRecord.schema.json +6 -3
  252. package/generated/GlobalConfig.schema.json +238 -55
  253. package/generated/HarnessEvent.schema.json +259 -11
  254. package/generated/HarnessManifest.schema.json +96 -14
  255. package/generated/HarnessModel.schema.json +19 -0
  256. package/generated/HarnessStatusDto.schema.json +198 -14
  257. package/generated/OrchestrateContract.schema.json +32 -6
  258. package/generated/OrchestratePlan.schema.json +20 -0
  259. package/generated/OrchestratePlanProgress.schema.json +61 -0
  260. package/generated/PaidBudget.schema.json +42 -0
  261. package/generated/Project.schema.json +45 -0
  262. package/generated/ProjectConfig.schema.json +45 -18
  263. package/generated/RawContextPacket.schema.json +184 -0
  264. package/generated/RawGitPatchEnvelope.schema.json +70 -0
  265. package/generated/RunEvent.schema.json +3 -0
  266. package/generated/RunTelemetry.schema.json +280 -0
  267. package/generated/SecretMetadata.schema.json +4 -7
  268. package/generated/Session.schema.json +14 -0
  269. package/generated/SpecPack.schema.json +118 -7
  270. package/generated/TaskContract.schema.json +224 -30
  271. package/generated/TestCommandInvocation.schema.json +45 -0
  272. package/generated/Thread.schema.json +74 -6
  273. package/generated/ThreadHeadPing.schema.json +40 -0
  274. package/generated/ThreadTurn.schema.json +24 -11
  275. package/generated/TrustConfig.schema.json +77 -0
  276. package/package.json +3 -2
  277. package/generated/ControlSetupJobConfirmRequest.schema.json +0 -18
  278. package/generated/ControlSpecFreezeRequest.schema.json +0 -83
@@ -0,0 +1,87 @@
1
+ import { z } from "zod";
2
+ import { AdapterStatus, ConformanceCheck, HarnessManifest } from "./harness.js";
3
+ import { AuthSourceReadiness } from "./auth.js";
4
+ /**
5
+ * ONE display-ready readiness check (W4.7 sol #18): the daemon normalizes raw
6
+ * doctor probes, auth-source readiness, and the configured-model verdict into
7
+ * this typed list so every surface (Settings, Onboarding, AuthSheet) renders
8
+ * the SAME rows — icon from `status`, name from `title`, evidence from
9
+ * `detail` — and never parses strings or matches id substrings again. Raw
10
+ * checks/reasons stay on the DTO for "copy raw" evidence.
11
+ */
12
+ export const ReadinessCheckDto = z
13
+ .object({
14
+ id: z.string().describe("Stable machine id of the check (adapter probe id or auth source)."),
15
+ kind: z
16
+ .enum(["binary", "auth", "smoke", "model", "probe"])
17
+ .describe("What KIND of readiness this is: binary presence, credential source, isolated smoke, configured-model validity, or a generic capability probe."),
18
+ title: z.string().describe("Human display name of the check."),
19
+ status: z.enum(["pass", "fail", "skip"]).describe("Outcome; skip = not run / not applicable."),
20
+ detail: z
21
+ .string()
22
+ .nullable()
23
+ .default(null)
24
+ .describe("Redacted human-readable evidence for the outcome."),
25
+ })
26
+ .describe("One display-ready readiness check row (daemon-normalized).");
27
+ export const HarnessStatusDto = z
28
+ .object({
29
+ id: z.string().describe("Harness id."),
30
+ status: AdapterStatus,
31
+ manifest: HarnessManifest.nullable()
32
+ .optional()
33
+ .describe("The harness's declared manifest, when available."),
34
+ enabledIntents: z
35
+ .array(z.string())
36
+ .default([])
37
+ .describe("Intents the gateway will route to this harness."),
38
+ /** Intents this harness is ACTUALLY routable for right now: enabledIntents
39
+ * gated by doctor readiness (a degraded/unauth'd harness routes nothing).
40
+ * The SERVER-side availability truth — surfaces read this field and never
41
+ * re-derive availability from status+intents business logic (R8). */
42
+ routableIntents: z
43
+ .array(z.string())
44
+ .default([])
45
+ .describe("Intents the harness is actually routable for right now (doctor-gated); the server-side availability truth surfaces must read instead of re-deriving."),
46
+ disabledIntents: z.array(z.string()).default([]).describe("Intents the doctor disabled."),
47
+ checks: z.array(ConformanceCheck).default([]).describe("Doctor probe results."),
48
+ reasons: z
49
+ .array(z.string())
50
+ .default([])
51
+ .describe("Human-readable reasons for degraded/unavailable status."),
52
+ authSources: z
53
+ .array(AuthSourceReadiness)
54
+ .default([])
55
+ .describe("Doctor-backed readiness by authentication source; an empty array means readiness was not reported."),
56
+ /** Daemon-normalized display list (W4.7): what surfaces RENDER. Derived
57
+ * from checks + authSources + configuredModelCheck by one producer. */
58
+ readiness: z
59
+ .array(ReadinessCheckDto)
60
+ .default([])
61
+ .describe("Display-ready readiness checks, daemon-normalized from the raw evidence."),
62
+ /** The user's configured per-harness default model, if any. */
63
+ configuredModel: z
64
+ .string()
65
+ .nullable()
66
+ .default(null)
67
+ .describe("The user's configured per-harness default model, if any."),
68
+ /** Strict truth-source check of `configuredModel`: null when no model
69
+ * is configured; a rejection carries the actionable message so UIs render
70
+ * the same honesty `claudexor doctor` prints. */
71
+ configuredModelCheck: z
72
+ .object({
73
+ status: z
74
+ .enum(["ok", "rejected"])
75
+ .describe("Whether the configured model passes the strict truth-source check."),
76
+ message: z
77
+ .string()
78
+ .nullable()
79
+ .default(null)
80
+ .describe("Actionable rejection message, when rejected."),
81
+ })
82
+ .nullable()
83
+ .default(null)
84
+ .describe("Strict truth-source check of configuredModel; null when no model is configured."),
85
+ })
86
+ .describe("Doctor-backed status row for one harness: status, intents, checks, and configured-model validity.");
87
+ //# sourceMappingURL=readiness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readiness.js","sourceRoot":"","sources":["../src/readiness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,515 @@
1
+ import { z } from "zod";
2
+ export declare const JournalRecoveryLocation: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
3
+ kind: z.ZodLiteral<"byte">;
4
+ byteOffset: z.ZodNumber;
5
+ }, "strict", z.ZodTypeAny, {
6
+ kind: "byte";
7
+ byteOffset: number;
8
+ }, {
9
+ kind: "byte";
10
+ byteOffset: number;
11
+ }>, z.ZodObject<{
12
+ kind: z.ZodLiteral<"cursor">;
13
+ epoch: z.ZodString;
14
+ seq: z.ZodNumber;
15
+ }, "strict", z.ZodTypeAny, {
16
+ kind: "cursor";
17
+ seq: number;
18
+ epoch: string;
19
+ }, {
20
+ kind: "cursor";
21
+ seq: number;
22
+ epoch: string;
23
+ }>]>;
24
+ export declare const ControlJournalRecoveryState: z.ZodDiscriminatedUnion<"status", [z.ZodObject<{
25
+ status: z.ZodLiteral<"ready">;
26
+ discardedTailBytes: z.ZodNumber;
27
+ }, "strict", z.ZodTypeAny, {
28
+ status: "ready";
29
+ discardedTailBytes: number;
30
+ }, {
31
+ status: "ready";
32
+ discardedTailBytes: number;
33
+ }>, z.ZodObject<{
34
+ status: z.ZodLiteral<"recovery_required">;
35
+ location: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
36
+ kind: z.ZodLiteral<"byte">;
37
+ byteOffset: z.ZodNumber;
38
+ }, "strict", z.ZodTypeAny, {
39
+ kind: "byte";
40
+ byteOffset: number;
41
+ }, {
42
+ kind: "byte";
43
+ byteOffset: number;
44
+ }>, z.ZodObject<{
45
+ kind: z.ZodLiteral<"cursor">;
46
+ epoch: z.ZodString;
47
+ seq: z.ZodNumber;
48
+ }, "strict", z.ZodTypeAny, {
49
+ kind: "cursor";
50
+ seq: number;
51
+ epoch: string;
52
+ }, {
53
+ kind: "cursor";
54
+ seq: number;
55
+ epoch: string;
56
+ }>]>;
57
+ reason: z.ZodString;
58
+ discardedTailBytes: z.ZodNumber;
59
+ }, "strict", z.ZodTypeAny, {
60
+ status: "recovery_required";
61
+ reason: string;
62
+ discardedTailBytes: number;
63
+ location: {
64
+ kind: "byte";
65
+ byteOffset: number;
66
+ } | {
67
+ kind: "cursor";
68
+ seq: number;
69
+ epoch: string;
70
+ };
71
+ }, {
72
+ status: "recovery_required";
73
+ reason: string;
74
+ discardedTailBytes: number;
75
+ location: {
76
+ kind: "byte";
77
+ byteOffset: number;
78
+ } | {
79
+ kind: "cursor";
80
+ seq: number;
81
+ epoch: string;
82
+ };
83
+ }>]>;
84
+ export declare const ControlJournalInspection: z.ZodEffects<z.ZodObject<{
85
+ readonly schemaVersion: z.ZodLiteral<1>;
86
+ readonly partition: z.ZodString;
87
+ readonly generation: z.ZodNumber;
88
+ readonly status: z.ZodEnum<["ready", "recovery_required"]>;
89
+ readonly recovery: z.ZodDiscriminatedUnion<"status", [z.ZodObject<{
90
+ status: z.ZodLiteral<"ready">;
91
+ discardedTailBytes: z.ZodNumber;
92
+ }, "strict", z.ZodTypeAny, {
93
+ status: "ready";
94
+ discardedTailBytes: number;
95
+ }, {
96
+ status: "ready";
97
+ discardedTailBytes: number;
98
+ }>, z.ZodObject<{
99
+ status: z.ZodLiteral<"recovery_required">;
100
+ location: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
101
+ kind: z.ZodLiteral<"byte">;
102
+ byteOffset: z.ZodNumber;
103
+ }, "strict", z.ZodTypeAny, {
104
+ kind: "byte";
105
+ byteOffset: number;
106
+ }, {
107
+ kind: "byte";
108
+ byteOffset: number;
109
+ }>, z.ZodObject<{
110
+ kind: z.ZodLiteral<"cursor">;
111
+ epoch: z.ZodString;
112
+ seq: z.ZodNumber;
113
+ }, "strict", z.ZodTypeAny, {
114
+ kind: "cursor";
115
+ seq: number;
116
+ epoch: string;
117
+ }, {
118
+ kind: "cursor";
119
+ seq: number;
120
+ epoch: string;
121
+ }>]>;
122
+ reason: z.ZodString;
123
+ discardedTailBytes: z.ZodNumber;
124
+ }, "strict", z.ZodTypeAny, {
125
+ status: "recovery_required";
126
+ reason: string;
127
+ discardedTailBytes: number;
128
+ location: {
129
+ kind: "byte";
130
+ byteOffset: number;
131
+ } | {
132
+ kind: "cursor";
133
+ seq: number;
134
+ epoch: string;
135
+ };
136
+ }, {
137
+ status: "recovery_required";
138
+ reason: string;
139
+ discardedTailBytes: number;
140
+ location: {
141
+ kind: "byte";
142
+ byteOffset: number;
143
+ } | {
144
+ kind: "cursor";
145
+ seq: number;
146
+ epoch: string;
147
+ };
148
+ }>]>;
149
+ readonly fingerprint: z.ZodString;
150
+ readonly observedAt: z.ZodString;
151
+ readonly evidenceRefs: z.ZodArray<z.ZodString, "many">;
152
+ }, "strict", z.ZodTypeAny, {
153
+ status: "ready" | "recovery_required";
154
+ observedAt: string;
155
+ schemaVersion: 1;
156
+ evidenceRefs: string[];
157
+ recovery: {
158
+ status: "ready";
159
+ discardedTailBytes: number;
160
+ } | {
161
+ status: "recovery_required";
162
+ reason: string;
163
+ discardedTailBytes: number;
164
+ location: {
165
+ kind: "byte";
166
+ byteOffset: number;
167
+ } | {
168
+ kind: "cursor";
169
+ seq: number;
170
+ epoch: string;
171
+ };
172
+ };
173
+ partition: string;
174
+ generation: number;
175
+ fingerprint: string;
176
+ }, {
177
+ status: "ready" | "recovery_required";
178
+ observedAt: string;
179
+ schemaVersion: 1;
180
+ evidenceRefs: string[];
181
+ recovery: {
182
+ status: "ready";
183
+ discardedTailBytes: number;
184
+ } | {
185
+ status: "recovery_required";
186
+ reason: string;
187
+ discardedTailBytes: number;
188
+ location: {
189
+ kind: "byte";
190
+ byteOffset: number;
191
+ } | {
192
+ kind: "cursor";
193
+ seq: number;
194
+ epoch: string;
195
+ };
196
+ };
197
+ partition: string;
198
+ generation: number;
199
+ fingerprint: string;
200
+ }>, {
201
+ status: "ready" | "recovery_required";
202
+ observedAt: string;
203
+ schemaVersion: 1;
204
+ evidenceRefs: string[];
205
+ recovery: {
206
+ status: "ready";
207
+ discardedTailBytes: number;
208
+ } | {
209
+ status: "recovery_required";
210
+ reason: string;
211
+ discardedTailBytes: number;
212
+ location: {
213
+ kind: "byte";
214
+ byteOffset: number;
215
+ } | {
216
+ kind: "cursor";
217
+ seq: number;
218
+ epoch: string;
219
+ };
220
+ };
221
+ partition: string;
222
+ generation: number;
223
+ fingerprint: string;
224
+ }, {
225
+ status: "ready" | "recovery_required";
226
+ observedAt: string;
227
+ schemaVersion: 1;
228
+ evidenceRefs: string[];
229
+ recovery: {
230
+ status: "ready";
231
+ discardedTailBytes: number;
232
+ } | {
233
+ status: "recovery_required";
234
+ reason: string;
235
+ discardedTailBytes: number;
236
+ location: {
237
+ kind: "byte";
238
+ byteOffset: number;
239
+ } | {
240
+ kind: "cursor";
241
+ seq: number;
242
+ epoch: string;
243
+ };
244
+ };
245
+ partition: string;
246
+ generation: number;
247
+ fingerprint: string;
248
+ }>;
249
+ export type ControlJournalInspection = z.infer<typeof ControlJournalInspection>;
250
+ export declare const ControlJournalValidation: z.ZodEffects<z.ZodObject<{
251
+ projectionStatus: z.ZodArray<z.ZodObject<{
252
+ name: z.ZodString;
253
+ status: z.ZodEnum<["valid", "invalid"]>;
254
+ detail: z.ZodNullable<z.ZodString>;
255
+ }, "strict", z.ZodTypeAny, {
256
+ status: "valid" | "invalid";
257
+ detail: string | null;
258
+ name: string;
259
+ }, {
260
+ status: "valid" | "invalid";
261
+ detail: string | null;
262
+ name: string;
263
+ }>, "many">;
264
+ schemaVersion: z.ZodLiteral<1>;
265
+ partition: z.ZodString;
266
+ generation: z.ZodNumber;
267
+ status: z.ZodEnum<["ready", "recovery_required"]>;
268
+ recovery: z.ZodDiscriminatedUnion<"status", [z.ZodObject<{
269
+ status: z.ZodLiteral<"ready">;
270
+ discardedTailBytes: z.ZodNumber;
271
+ }, "strict", z.ZodTypeAny, {
272
+ status: "ready";
273
+ discardedTailBytes: number;
274
+ }, {
275
+ status: "ready";
276
+ discardedTailBytes: number;
277
+ }>, z.ZodObject<{
278
+ status: z.ZodLiteral<"recovery_required">;
279
+ location: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
280
+ kind: z.ZodLiteral<"byte">;
281
+ byteOffset: z.ZodNumber;
282
+ }, "strict", z.ZodTypeAny, {
283
+ kind: "byte";
284
+ byteOffset: number;
285
+ }, {
286
+ kind: "byte";
287
+ byteOffset: number;
288
+ }>, z.ZodObject<{
289
+ kind: z.ZodLiteral<"cursor">;
290
+ epoch: z.ZodString;
291
+ seq: z.ZodNumber;
292
+ }, "strict", z.ZodTypeAny, {
293
+ kind: "cursor";
294
+ seq: number;
295
+ epoch: string;
296
+ }, {
297
+ kind: "cursor";
298
+ seq: number;
299
+ epoch: string;
300
+ }>]>;
301
+ reason: z.ZodString;
302
+ discardedTailBytes: z.ZodNumber;
303
+ }, "strict", z.ZodTypeAny, {
304
+ status: "recovery_required";
305
+ reason: string;
306
+ discardedTailBytes: number;
307
+ location: {
308
+ kind: "byte";
309
+ byteOffset: number;
310
+ } | {
311
+ kind: "cursor";
312
+ seq: number;
313
+ epoch: string;
314
+ };
315
+ }, {
316
+ status: "recovery_required";
317
+ reason: string;
318
+ discardedTailBytes: number;
319
+ location: {
320
+ kind: "byte";
321
+ byteOffset: number;
322
+ } | {
323
+ kind: "cursor";
324
+ seq: number;
325
+ epoch: string;
326
+ };
327
+ }>]>;
328
+ fingerprint: z.ZodString;
329
+ observedAt: z.ZodString;
330
+ evidenceRefs: z.ZodArray<z.ZodString, "many">;
331
+ }, "strict", z.ZodTypeAny, {
332
+ status: "ready" | "recovery_required";
333
+ observedAt: string;
334
+ schemaVersion: 1;
335
+ evidenceRefs: string[];
336
+ recovery: {
337
+ status: "ready";
338
+ discardedTailBytes: number;
339
+ } | {
340
+ status: "recovery_required";
341
+ reason: string;
342
+ discardedTailBytes: number;
343
+ location: {
344
+ kind: "byte";
345
+ byteOffset: number;
346
+ } | {
347
+ kind: "cursor";
348
+ seq: number;
349
+ epoch: string;
350
+ };
351
+ };
352
+ partition: string;
353
+ generation: number;
354
+ fingerprint: string;
355
+ projectionStatus: {
356
+ status: "valid" | "invalid";
357
+ detail: string | null;
358
+ name: string;
359
+ }[];
360
+ }, {
361
+ status: "ready" | "recovery_required";
362
+ observedAt: string;
363
+ schemaVersion: 1;
364
+ evidenceRefs: string[];
365
+ recovery: {
366
+ status: "ready";
367
+ discardedTailBytes: number;
368
+ } | {
369
+ status: "recovery_required";
370
+ reason: string;
371
+ discardedTailBytes: number;
372
+ location: {
373
+ kind: "byte";
374
+ byteOffset: number;
375
+ } | {
376
+ kind: "cursor";
377
+ seq: number;
378
+ epoch: string;
379
+ };
380
+ };
381
+ partition: string;
382
+ generation: number;
383
+ fingerprint: string;
384
+ projectionStatus: {
385
+ status: "valid" | "invalid";
386
+ detail: string | null;
387
+ name: string;
388
+ }[];
389
+ }>, {
390
+ status: "ready" | "recovery_required";
391
+ observedAt: string;
392
+ schemaVersion: 1;
393
+ evidenceRefs: string[];
394
+ recovery: {
395
+ status: "ready";
396
+ discardedTailBytes: number;
397
+ } | {
398
+ status: "recovery_required";
399
+ reason: string;
400
+ discardedTailBytes: number;
401
+ location: {
402
+ kind: "byte";
403
+ byteOffset: number;
404
+ } | {
405
+ kind: "cursor";
406
+ seq: number;
407
+ epoch: string;
408
+ };
409
+ };
410
+ partition: string;
411
+ generation: number;
412
+ fingerprint: string;
413
+ projectionStatus: {
414
+ status: "valid" | "invalid";
415
+ detail: string | null;
416
+ name: string;
417
+ }[];
418
+ }, {
419
+ status: "ready" | "recovery_required";
420
+ observedAt: string;
421
+ schemaVersion: 1;
422
+ evidenceRefs: string[];
423
+ recovery: {
424
+ status: "ready";
425
+ discardedTailBytes: number;
426
+ } | {
427
+ status: "recovery_required";
428
+ reason: string;
429
+ discardedTailBytes: number;
430
+ location: {
431
+ kind: "byte";
432
+ byteOffset: number;
433
+ } | {
434
+ kind: "cursor";
435
+ seq: number;
436
+ epoch: string;
437
+ };
438
+ };
439
+ partition: string;
440
+ generation: number;
441
+ fingerprint: string;
442
+ projectionStatus: {
443
+ status: "valid" | "invalid";
444
+ detail: string | null;
445
+ name: string;
446
+ }[];
447
+ }>;
448
+ export type ControlJournalValidation = z.infer<typeof ControlJournalValidation>;
449
+ export declare const ControlJournalExportReceipt: z.ZodObject<{
450
+ schemaVersion: z.ZodLiteral<1>;
451
+ exportId: z.ZodString;
452
+ partition: z.ZodString;
453
+ fingerprint: z.ZodString;
454
+ bundlePath: z.ZodString;
455
+ manifestSha256: z.ZodString;
456
+ createdAt: z.ZodString;
457
+ }, "strict", z.ZodTypeAny, {
458
+ schemaVersion: 1;
459
+ createdAt: string;
460
+ partition: string;
461
+ fingerprint: string;
462
+ exportId: string;
463
+ bundlePath: string;
464
+ manifestSha256: string;
465
+ }, {
466
+ schemaVersion: 1;
467
+ createdAt: string;
468
+ partition: string;
469
+ fingerprint: string;
470
+ exportId: string;
471
+ bundlePath: string;
472
+ manifestSha256: string;
473
+ }>;
474
+ export type ControlJournalExportReceipt = z.infer<typeof ControlJournalExportReceipt>;
475
+ export declare const ControlJournalQuarantineRequest: z.ZodObject<{
476
+ expectedFingerprint: z.ZodString;
477
+ confirmation: z.ZodLiteral<"quarantine_and_start_fresh">;
478
+ }, "strict", z.ZodTypeAny, {
479
+ expectedFingerprint: string;
480
+ confirmation: "quarantine_and_start_fresh";
481
+ }, {
482
+ expectedFingerprint: string;
483
+ confirmation: "quarantine_and_start_fresh";
484
+ }>;
485
+ export type ControlJournalQuarantineRequest = z.infer<typeof ControlJournalQuarantineRequest>;
486
+ export declare const ControlJournalQuarantineReceipt: z.ZodObject<{
487
+ schemaVersion: z.ZodLiteral<1>;
488
+ operationId: z.ZodString;
489
+ partition: z.ZodString;
490
+ previousFingerprint: z.ZodString;
491
+ quarantineArtifactId: z.ZodString;
492
+ quarantinePath: z.ZodString;
493
+ newEpoch: z.ZodString;
494
+ completedAt: z.ZodString;
495
+ }, "strict", z.ZodTypeAny, {
496
+ schemaVersion: 1;
497
+ completedAt: string;
498
+ partition: string;
499
+ operationId: string;
500
+ previousFingerprint: string;
501
+ quarantineArtifactId: string;
502
+ quarantinePath: string;
503
+ newEpoch: string;
504
+ }, {
505
+ schemaVersion: 1;
506
+ completedAt: string;
507
+ partition: string;
508
+ operationId: string;
509
+ previousFingerprint: string;
510
+ quarantineArtifactId: string;
511
+ quarantinePath: string;
512
+ newEpoch: string;
513
+ }>;
514
+ export type ControlJournalQuarantineReceipt = z.infer<typeof ControlJournalQuarantineReceipt>;
515
+ //# sourceMappingURL=recovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;IASlC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAYtC,CAAC;AA6BH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGQ,CAAC;AAC9C,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAEhF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcQ,CAAC;AAC9C,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAEhF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;EAU7B,CAAC;AACZ,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEtF,eAAO,MAAM,+BAA+B;;;;;;;;;EAKjC,CAAC;AACZ,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAE9F,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWjC,CAAC;AACZ,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC"}
@@ -0,0 +1,93 @@
1
+ import { z } from "zod";
2
+ const Sha256Hex = z.string().regex(/^[a-f0-9]{64}$/);
3
+ const Timestamp = z.string().datetime({ offset: true });
4
+ const JournalPartition = z.string().trim().min(1).max(256);
5
+ export const JournalRecoveryLocation = z.discriminatedUnion("kind", [
6
+ z.object({ kind: z.literal("byte"), byteOffset: z.number().int().nonnegative() }).strict(),
7
+ z
8
+ .object({
9
+ kind: z.literal("cursor"),
10
+ epoch: z.string().min(1),
11
+ seq: z.number().int().nonnegative(),
12
+ })
13
+ .strict(),
14
+ ]);
15
+ export const ControlJournalRecoveryState = z.discriminatedUnion("status", [
16
+ z
17
+ .object({ status: z.literal("ready"), discardedTailBytes: z.number().int().nonnegative() })
18
+ .strict(),
19
+ z
20
+ .object({
21
+ status: z.literal("recovery_required"),
22
+ location: JournalRecoveryLocation,
23
+ reason: z.string().min(1),
24
+ discardedTailBytes: z.number().int().nonnegative(),
25
+ })
26
+ .strict(),
27
+ ]);
28
+ const JournalInspectionFields = {
29
+ schemaVersion: z.literal(1),
30
+ partition: JournalPartition,
31
+ generation: z.number().int().nonnegative(),
32
+ status: z.enum(["ready", "recovery_required"]),
33
+ recovery: ControlJournalRecoveryState,
34
+ fingerprint: Sha256Hex,
35
+ observedAt: Timestamp,
36
+ evidenceRefs: z.array(z.string().min(1)).min(1),
37
+ };
38
+ function requireMatchingRecoveryStatus(value, context) {
39
+ if (value.status !== value.recovery.status) {
40
+ context.addIssue({
41
+ code: z.ZodIssueCode.custom,
42
+ path: ["status"],
43
+ message: "inspection status must match recovery status",
44
+ });
45
+ }
46
+ }
47
+ export const ControlJournalInspection = z
48
+ .object(JournalInspectionFields)
49
+ .strict()
50
+ .superRefine(requireMatchingRecoveryStatus);
51
+ export const ControlJournalValidation = z
52
+ .object({
53
+ ...JournalInspectionFields,
54
+ projectionStatus: z.array(z
55
+ .object({
56
+ name: z.string().min(1),
57
+ status: z.enum(["valid", "invalid"]),
58
+ detail: z.string().nullable(),
59
+ })
60
+ .strict()),
61
+ })
62
+ .strict()
63
+ .superRefine(requireMatchingRecoveryStatus);
64
+ export const ControlJournalExportReceipt = z
65
+ .object({
66
+ schemaVersion: z.literal(1),
67
+ exportId: z.string().min(1),
68
+ partition: JournalPartition,
69
+ fingerprint: Sha256Hex,
70
+ bundlePath: z.string().min(1),
71
+ manifestSha256: Sha256Hex,
72
+ createdAt: Timestamp,
73
+ })
74
+ .strict();
75
+ export const ControlJournalQuarantineRequest = z
76
+ .object({
77
+ expectedFingerprint: Sha256Hex,
78
+ confirmation: z.literal("quarantine_and_start_fresh"),
79
+ })
80
+ .strict();
81
+ export const ControlJournalQuarantineReceipt = z
82
+ .object({
83
+ schemaVersion: z.literal(1),
84
+ operationId: z.string().uuid(),
85
+ partition: JournalPartition,
86
+ previousFingerprint: Sha256Hex,
87
+ quarantineArtifactId: z.string().min(1),
88
+ quarantinePath: z.string().min(1),
89
+ newEpoch: z.string().min(1),
90
+ completedAt: Timestamp,
91
+ })
92
+ .strict();
93
+ //# sourceMappingURL=recovery.js.map