@native-knowledge/knowledge-sdk 0.0.0-stage → 0.1.0-rc.2

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 (203) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +29 -0
  3. package/README.md +34 -2
  4. package/dist/agent-entry.d.ts +291 -0
  5. package/dist/agent-entry.js +153 -0
  6. package/dist/agent-guidance-error.d.ts +15 -0
  7. package/dist/agent-guidance-error.js +46 -0
  8. package/dist/auth.d.ts +124 -0
  9. package/dist/auth.js +165 -0
  10. package/dist/index.d.ts +290 -0
  11. package/dist/index.js +166 -0
  12. package/dist/internal/contracts/artifact.d.ts +120 -0
  13. package/dist/internal/contracts/artifact.js +103 -0
  14. package/dist/internal/contracts/collection-control.d.ts +160 -0
  15. package/dist/internal/contracts/collection-control.js +69 -0
  16. package/dist/internal/contracts/collection.d.ts +263 -0
  17. package/dist/internal/contracts/collection.js +174 -0
  18. package/dist/internal/contracts/common.d.ts +17 -0
  19. package/dist/internal/contracts/common.js +16 -0
  20. package/dist/internal/contracts/currentness.d.ts +477 -0
  21. package/dist/internal/contracts/currentness.js +221 -0
  22. package/dist/internal/contracts/event.d.ts +60 -0
  23. package/dist/internal/contracts/event.js +35 -0
  24. package/dist/internal/contracts/evidence.d.ts +202 -0
  25. package/dist/internal/contracts/evidence.js +171 -0
  26. package/dist/internal/contracts/index.d.ts +54 -0
  27. package/dist/internal/contracts/index.js +54 -0
  28. package/dist/internal/contracts/material-capability.d.ts +88 -0
  29. package/dist/internal/contracts/material-capability.js +8 -0
  30. package/dist/internal/contracts/material-carrier.d.ts +104 -0
  31. package/dist/internal/contracts/material-carrier.js +15 -0
  32. package/dist/internal/contracts/material-context.d.ts +28 -0
  33. package/dist/internal/contracts/material-context.js +9 -0
  34. package/dist/internal/contracts/material-read.d.ts +152 -0
  35. package/dist/internal/contracts/material-read.js +12 -0
  36. package/dist/internal/contracts/observation.d.ts +75 -0
  37. package/dist/internal/contracts/observation.js +39 -0
  38. package/dist/internal/contracts/persistence.d.ts +370 -0
  39. package/dist/internal/contracts/persistence.js +239 -0
  40. package/dist/internal/contracts/project-intent.d.ts +218 -0
  41. package/dist/internal/contracts/project-intent.js +121 -0
  42. package/dist/internal/contracts/projection.d.ts +380 -0
  43. package/dist/internal/contracts/projection.js +194 -0
  44. package/dist/internal/contracts/public-reference.d.ts +237 -0
  45. package/dist/internal/contracts/public-reference.js +87 -0
  46. package/dist/internal/contracts/reference-record.d.ts +124 -0
  47. package/dist/internal/contracts/reference-record.js +55 -0
  48. package/dist/internal/contracts/remote-file.d.ts +128 -0
  49. package/dist/internal/contracts/remote-file.js +159 -0
  50. package/dist/internal/contracts/resource-scope.d.ts +40 -0
  51. package/dist/internal/contracts/resource-scope.js +38 -0
  52. package/dist/internal/contracts/review-packet.d.ts +274 -0
  53. package/dist/internal/contracts/review-packet.js +61 -0
  54. package/dist/internal/contracts/review-plane.d.ts +90 -0
  55. package/dist/internal/contracts/review-plane.js +89 -0
  56. package/dist/internal/contracts/rich-document.d.ts +641 -0
  57. package/dist/internal/contracts/rich-document.js +184 -0
  58. package/dist/internal/contracts/runtime-compatibility.d.ts +22 -0
  59. package/dist/internal/contracts/runtime-compatibility.js +55 -0
  60. package/dist/internal/contracts/runtime.d.ts +59 -0
  61. package/dist/internal/contracts/runtime.js +68 -0
  62. package/dist/internal/contracts/scheduler.d.ts +348 -0
  63. package/dist/internal/contracts/scheduler.js +256 -0
  64. package/dist/internal/contracts/signal.d.ts +113 -0
  65. package/dist/internal/contracts/signal.js +77 -0
  66. package/dist/internal/contracts/source-governance.d.ts +375 -0
  67. package/dist/internal/contracts/source-governance.js +194 -0
  68. package/dist/internal/contracts/source.d.ts +62 -0
  69. package/dist/internal/contracts/source.js +32 -0
  70. package/dist/internal/contracts/tenant-budget.d.ts +59 -0
  71. package/dist/internal/contracts/tenant-budget.js +34 -0
  72. package/dist/internal/contracts/tenant-collection-request.d.ts +209 -0
  73. package/dist/internal/contracts/tenant-collection-request.js +58 -0
  74. package/dist/internal/contracts/tenant-collection.d.ts +199 -0
  75. package/dist/internal/contracts/tenant-collection.js +66 -0
  76. package/dist/internal/contracts/tenant-currentness.d.ts +117 -0
  77. package/dist/internal/contracts/tenant-currentness.js +26 -0
  78. package/dist/internal/contracts/tenant-management.d.ts +286 -0
  79. package/dist/internal/contracts/tenant-management.js +27 -0
  80. package/dist/internal/contracts/tenant-material-api.d.ts +584 -0
  81. package/dist/internal/contracts/tenant-material-api.js +46 -0
  82. package/dist/internal/contracts/tenant-material-json-schema.js +16 -0
  83. package/dist/internal/contracts/tenant-pdf-text.d.ts +27 -0
  84. package/dist/internal/contracts/tenant-pdf-text.js +13 -0
  85. package/dist/internal/contracts/tenant-project-control.d.ts +94 -0
  86. package/dist/internal/contracts/tenant-project-control.js +19 -0
  87. package/dist/internal/contracts/tenant-public-reference.d.ts +179 -0
  88. package/dist/internal/contracts/tenant-public-reference.js +26 -0
  89. package/dist/internal/contracts/tenant-resource-api.d.ts +738 -0
  90. package/dist/internal/contracts/tenant-resource-api.js +70 -0
  91. package/dist/internal/contracts/tenant-resource.d.ts +298 -0
  92. package/dist/internal/contracts/tenant-resource.js +118 -0
  93. package/dist/internal/contracts/tenant-rich-document.d.ts +317 -0
  94. package/dist/internal/contracts/tenant-rich-document.js +17 -0
  95. package/dist/internal/contracts/tenant-source-binding.d.ts +44 -0
  96. package/dist/internal/contracts/tenant-source-binding.js +33 -0
  97. package/dist/internal/contracts/tenant-source-bridge.d.ts +70 -0
  98. package/dist/internal/contracts/tenant-source-bridge.js +9 -0
  99. package/dist/internal/contracts/tenant-source-cutover.d.ts +226 -0
  100. package/dist/internal/contracts/tenant-source-cutover.js +26 -0
  101. package/dist/internal/contracts/tenant-source-document.d.ts +163 -0
  102. package/dist/internal/contracts/tenant-source-document.js +38 -0
  103. package/dist/internal/contracts/tenant-source-lease.d.ts +1 -0
  104. package/dist/internal/contracts/tenant-source-lease.js +5 -0
  105. package/dist/internal/contracts/tenant-source.d.ts +223 -0
  106. package/dist/internal/contracts/tenant-source.js +83 -0
  107. package/dist/internal/contracts/tenant-web-collection.d.ts +287 -0
  108. package/dist/internal/contracts/tenant-web-collection.js +118 -0
  109. package/dist/internal/contracts/tenant-web-content-plan.d.ts +86 -0
  110. package/dist/internal/contracts/tenant-web-content-plan.js +39 -0
  111. package/dist/internal/contracts/tenant-web-content-result.d.ts +63 -0
  112. package/dist/internal/contracts/tenant-web-content-result.js +15 -0
  113. package/dist/internal/contracts/tenant-web-content.d.ts +383 -0
  114. package/dist/internal/contracts/tenant-web-content.js +16 -0
  115. package/dist/internal/contracts/tenant-web-crawl.d.ts +310 -0
  116. package/dist/internal/contracts/tenant-web-crawl.js +55 -0
  117. package/dist/internal/contracts/tenant-web-dynamic.d.ts +698 -0
  118. package/dist/internal/contracts/tenant-web-dynamic.js +68 -0
  119. package/dist/internal/contracts/tenant-web-results.d.ts +66 -0
  120. package/dist/internal/contracts/tenant-web-results.js +41 -0
  121. package/dist/internal/contracts/tenant-web-workflow.d.ts +494 -0
  122. package/dist/internal/contracts/tenant-web-workflow.js +29 -0
  123. package/dist/internal/serving-contracts/agent-catalog.d.ts +70 -0
  124. package/dist/internal/serving-contracts/agent-catalog.js +56 -0
  125. package/dist/internal/serving-contracts/agent-entry.d.ts +13148 -0
  126. package/dist/internal/serving-contracts/agent-entry.js +57 -0
  127. package/dist/internal/serving-contracts/agent-guidance-shapes.d.ts +263 -0
  128. package/dist/internal/serving-contracts/agent-guidance-shapes.js +12 -0
  129. package/dist/internal/serving-contracts/agent-input-hints.d.ts +24 -0
  130. package/dist/internal/serving-contracts/agent-input-hints.js +104 -0
  131. package/dist/internal/serving-contracts/body-search.d.ts +231 -0
  132. package/dist/internal/serving-contracts/body-search.js +16 -0
  133. package/dist/internal/serving-contracts/consumer.d.ts +989 -0
  134. package/dist/internal/serving-contracts/consumer.js +45 -0
  135. package/dist/internal/serving-contracts/core.d.ts +333 -0
  136. package/dist/internal/serving-contracts/core.js +76 -0
  137. package/dist/internal/serving-contracts/http.d.ts +2874 -0
  138. package/dist/internal/serving-contracts/http.js +64 -0
  139. package/dist/internal/serving-contracts/index.d.ts +24 -0
  140. package/dist/internal/serving-contracts/index.js +25 -0
  141. package/dist/internal/serving-contracts/management.d.ts +424 -0
  142. package/dist/internal/serving-contracts/management.js +15 -0
  143. package/dist/internal/serving-contracts/material-capabilities.d.ts +508 -0
  144. package/dist/internal/serving-contracts/material-capabilities.js +14 -0
  145. package/dist/internal/serving-contracts/material-index-status.d.ts +55 -0
  146. package/dist/internal/serving-contracts/material-index-status.js +5 -0
  147. package/dist/internal/serving-contracts/mcp.d.ts +2218 -0
  148. package/dist/internal/serving-contracts/mcp.js +140 -0
  149. package/dist/internal/serving-contracts/tenant-governance.d.ts +236 -0
  150. package/dist/internal/serving-contracts/tenant-governance.js +13 -0
  151. package/dist/internal/serving-contracts/tenant-management.d.ts +6276 -0
  152. package/dist/internal/serving-contracts/tenant-management.js +89 -0
  153. package/dist/internal/serving-contracts/tenant-project.d.ts +7550 -0
  154. package/dist/internal/serving-contracts/tenant-project.js +39 -0
  155. package/dist/internal/serving-contracts/tenant-runtime.d.ts +9674 -0
  156. package/dist/internal/serving-contracts/tenant-runtime.js +37 -0
  157. package/dist/internal/serving-contracts/tenant-session.d.ts +87 -0
  158. package/dist/internal/serving-contracts/tenant-session.js +8 -0
  159. package/dist/internal/serving-contracts/tenant-web-content.d.ts +4606 -0
  160. package/dist/internal/serving-contracts/tenant-web-content.js +20 -0
  161. package/dist/internal/serving-contracts/tenant-web-crawl.d.ts +2958 -0
  162. package/dist/internal/serving-contracts/tenant-web-crawl.js +13 -0
  163. package/dist/internal/serving-contracts/tenant-web-dynamic.d.ts +3902 -0
  164. package/dist/internal/serving-contracts/tenant-web-dynamic.js +20 -0
  165. package/dist/internal/serving-contracts/tenant-web-workflow.d.ts +5750 -0
  166. package/dist/internal/serving-contracts/tenant-web-workflow.js +36 -0
  167. package/dist/internal/serving-contracts/tenant-web.d.ts +6418 -0
  168. package/dist/internal/serving-contracts/tenant-web.js +53 -0
  169. package/dist/internal/serving-contracts/tenant-workspace.d.ts +6451 -0
  170. package/dist/internal/serving-contracts/tenant-workspace.js +28 -0
  171. package/dist/internal/serving-contracts/workflow.d.ts +439 -0
  172. package/dist/internal/serving-contracts/workflow.js +37 -0
  173. package/dist/material-stream.d.ts +18 -0
  174. package/dist/material-stream.js +29 -0
  175. package/dist/oauth.d.ts +268 -0
  176. package/dist/oauth.js +539 -0
  177. package/dist/resource.d.ts +88 -0
  178. package/dist/resource.js +123 -0
  179. package/dist/session.d.ts +4 -0
  180. package/dist/session.js +3 -0
  181. package/dist/tenant-client.d.ts +169 -0
  182. package/dist/tenant-client.js +58 -0
  183. package/dist/tenant-management.d.ts +240 -0
  184. package/dist/tenant-management.js +149 -0
  185. package/dist/tenant-project.d.ts +57 -0
  186. package/dist/tenant-project.js +63 -0
  187. package/dist/tenant-runtime.d.ts +174 -0
  188. package/dist/tenant-runtime.js +17 -0
  189. package/dist/tenant-web-content.d.ts +44 -0
  190. package/dist/tenant-web-content.js +70 -0
  191. package/dist/tenant-web-crawl.d.ts +42 -0
  192. package/dist/tenant-web-crawl.js +39 -0
  193. package/dist/tenant-web-dynamic.d.ts +42 -0
  194. package/dist/tenant-web-dynamic.js +39 -0
  195. package/dist/tenant-web-workflow.d.ts +43 -0
  196. package/dist/tenant-web-workflow.js +63 -0
  197. package/dist/tenant-web.d.ts +42 -0
  198. package/dist/tenant-web.js +39 -0
  199. package/dist/tenant-workspace.d.ts +36 -0
  200. package/dist/tenant-workspace.js +21 -0
  201. package/dist/token-provider.d.ts +14 -0
  202. package/dist/token-provider.js +21 -0
  203. package/package.json +45 -3
@@ -0,0 +1,159 @@
1
+ import { z } from 'zod';
2
+ import { idSchema, isoDateTimeSchema, projectKeySchema, schemaVersionSchema, sha256Schema, stableUriSchema } from './common.js';
3
+ export const remoteArchiveFormatSchema = z.enum(['TAR_GZ', 'ZIP']);
4
+ export const remoteManifestFormatSchema = z.enum(['FILES_V1', 'LEGACY_PAGES_V1']);
5
+ export const remoteBundlePathSchema = z.string().trim().min(1).max(1024).superRefine((value, ctx) => {
6
+ if (value.includes('\0') || value.includes('\\') || value.startsWith('/') || value.endsWith('/')) {
7
+ ctx.addIssue({ code: 'custom', message: 'remote bundle member path must be a relative file path' });
8
+ return;
9
+ }
10
+ const parts = value.split('/');
11
+ if (parts.some((part) => !part || part === '.' || part === '..')) {
12
+ ctx.addIssue({ code: 'custom', message: 'remote bundle member path must not contain empty, dot or parent segments' });
13
+ }
14
+ });
15
+ export const remoteFileBundleDeclarationSchema = z.object({
16
+ schemaVersion: schemaVersionSchema,
17
+ projectKey: projectKeySchema,
18
+ artifactSha256: sha256Schema,
19
+ byteLength: z.number().int().positive(),
20
+ archiveFormat: remoteArchiveFormatSchema,
21
+ manifestPath: remoteBundlePathSchema,
22
+ manifestSha256: sha256Schema,
23
+ artifactKind: idSchema,
24
+ familyId: idSchema,
25
+ targetId: idSchema,
26
+ jurisdiction: z.string().trim().min(1).max(128).nullable(),
27
+ sourceWorker: idSchema,
28
+ remoteArtifactRef: stableUriSchema.nullable(),
29
+ declaredAt: isoDateTimeSchema,
30
+ }).strict();
31
+ export const remoteFileManifestEntrySchema = z.object({
32
+ path: remoteBundlePathSchema,
33
+ sha256: sha256Schema,
34
+ byteLength: z.number().int().nonnegative(),
35
+ mediaType: z.string().trim().min(1).max(256).nullable().default(null),
36
+ sourceUrl: z.string().url().max(2048).nullable().default(null),
37
+ }).strict();
38
+ export const remoteFileBundleManifestSchema = z.object({
39
+ schemaVersion: schemaVersionSchema,
40
+ projectKey: projectKeySchema,
41
+ artifactKind: idSchema,
42
+ familyId: idSchema,
43
+ targetId: idSchema,
44
+ jurisdiction: z.string().trim().min(1).max(128).nullable(),
45
+ generatedAt: isoDateTimeSchema,
46
+ files: z.array(remoteFileManifestEntrySchema).min(1).max(10000),
47
+ }).strict().superRefine((value, ctx) => {
48
+ const seen = new Set();
49
+ value.files.forEach((entry, index) => {
50
+ if (seen.has(entry.path))
51
+ ctx.addIssue({ code: 'custom', path: ['files', index, 'path'], message: 'duplicate manifest file path' });
52
+ seen.add(entry.path);
53
+ });
54
+ });
55
+ export const remoteVerifiedFileSchema = z.object({
56
+ path: remoteBundlePathSchema,
57
+ contentHash: sha256Schema,
58
+ byteLength: z.number().int().nonnegative(),
59
+ mediaType: z.string().trim().min(1).max(256).nullable(),
60
+ sourceUrl: z.string().url().max(2048).nullable(),
61
+ }).strict();
62
+ export const remoteFileVerificationReceiptSchema = z.object({
63
+ schemaVersion: schemaVersionSchema,
64
+ verificationRef: stableUriSchema,
65
+ projectKey: projectKeySchema,
66
+ declarationDigest: sha256Schema,
67
+ artifactSha256: sha256Schema,
68
+ byteLength: z.number().int().positive(),
69
+ archiveFormat: remoteArchiveFormatSchema,
70
+ manifestPath: remoteBundlePathSchema,
71
+ manifestSha256: sha256Schema,
72
+ manifestFormat: remoteManifestFormatSchema,
73
+ manifestGeneratedAt: isoDateTimeSchema.nullable(),
74
+ artifactKind: idSchema,
75
+ familyId: idSchema,
76
+ targetId: idSchema,
77
+ jurisdiction: z.string().trim().min(1).max(128).nullable(),
78
+ sourceWorker: idSchema,
79
+ remoteArtifactRef: stableUriSchema.nullable(),
80
+ verifierNodeId: idSchema,
81
+ verifiedAt: isoDateTimeSchema,
82
+ files: z.array(remoteVerifiedFileSchema).min(1).max(10000),
83
+ }).strict().superRefine((value, ctx) => {
84
+ const expected = `remote-file-verification://${value.projectKey}/${value.artifactSha256.slice('sha256:'.length)}`;
85
+ if (value.verificationRef !== expected)
86
+ ctx.addIssue({ code: 'custom', path: ['verificationRef'], message: 'verificationRef must match project and artifact hash' });
87
+ const seen = new Set();
88
+ value.files.forEach((entry, index) => {
89
+ if (seen.has(entry.path))
90
+ ctx.addIssue({ code: 'custom', path: ['files', index, 'path'], message: 'duplicate verified file path' });
91
+ seen.add(entry.path);
92
+ });
93
+ });
94
+ export const remoteFileProjectSourceBindingSchema = z.object({
95
+ schemaVersion: schemaVersionSchema,
96
+ bindingRef: stableUriSchema,
97
+ verificationRef: stableUriSchema,
98
+ projectKey: projectKeySchema,
99
+ artifactSha256: sha256Schema,
100
+ projectRef: stableUriSchema,
101
+ projectIntentRef: stableUriSchema,
102
+ sourceId: idSchema,
103
+ sourceRef: stableUriSchema,
104
+ sourceRevisionId: sha256Schema,
105
+ sourceRevisionRef: stableUriSchema,
106
+ projectSourceTargetId: sha256Schema,
107
+ boundAt: isoDateTimeSchema,
108
+ }).strict().superRefine((value, ctx) => {
109
+ const artifactDigest = value.artifactSha256.slice('sha256:'.length);
110
+ const revisionDigest = value.sourceRevisionId.slice('sha256:'.length);
111
+ const expectedVerification = `remote-file-verification://${value.projectKey}/${artifactDigest}`;
112
+ const expectedBinding = `remote-file-source-binding://${value.projectKey}/${artifactDigest}/${revisionDigest}`;
113
+ const expectedSource = `project-source://${value.projectKey}/${value.sourceId}`;
114
+ const expectedRevision = `${expectedSource}/v/${revisionDigest}`;
115
+ if (value.verificationRef !== expectedVerification)
116
+ ctx.addIssue({ code: 'custom', path: ['verificationRef'], message: 'verificationRef must match project and artifact hash' });
117
+ if (value.bindingRef !== expectedBinding)
118
+ ctx.addIssue({ code: 'custom', path: ['bindingRef'], message: 'bindingRef must match project, artifact hash and source revision' });
119
+ if (value.sourceRef !== expectedSource)
120
+ ctx.addIssue({ code: 'custom', path: ['sourceRef'], message: 'sourceRef must match project and source id' });
121
+ if (value.sourceRevisionRef !== expectedRevision)
122
+ ctx.addIssue({ code: 'custom', path: ['sourceRevisionRef'], message: 'sourceRevisionRef must match source and revision id' });
123
+ });
124
+ export const remoteFileIngestReceiptSchema = z.object({
125
+ schemaVersion: schemaVersionSchema,
126
+ ingestRef: stableUriSchema,
127
+ verificationRef: stableUriSchema,
128
+ projectKey: projectKeySchema,
129
+ artifactSha256: sha256Schema,
130
+ sourceBindingRef: stableUriSchema.optional(),
131
+ consumerKey: idSchema,
132
+ resultRefs: z.array(stableUriSchema).min(1).max(256),
133
+ ingestedAt: isoDateTimeSchema,
134
+ }).strict().superRefine((value, ctx) => {
135
+ const digest = value.artifactSha256.slice('sha256:'.length);
136
+ const expectedVerification = `remote-file-verification://${value.projectKey}/${digest}`;
137
+ let sourceRevisionDigest = null;
138
+ if (value.sourceBindingRef) {
139
+ const prefix = `remote-file-source-binding://${value.projectKey}/${digest}/`;
140
+ if (!value.sourceBindingRef.startsWith(prefix))
141
+ ctx.addIssue({ code: 'custom', path: ['sourceBindingRef'], message: 'sourceBindingRef must match project and artifact hash' });
142
+ else {
143
+ const candidate = value.sourceBindingRef.slice(prefix.length);
144
+ if (!/^[a-f0-9]{64}$/.test(candidate))
145
+ ctx.addIssue({ code: 'custom', path: ['sourceBindingRef'], message: 'sourceBindingRef must end with source revision digest' });
146
+ else
147
+ sourceRevisionDigest = candidate;
148
+ }
149
+ }
150
+ const expectedIngest = sourceRevisionDigest
151
+ ? `remote-file-ingest://${value.projectKey}/${digest}/${encodeURIComponent(value.consumerKey)}/${sourceRevisionDigest}`
152
+ : `remote-file-ingest://${value.projectKey}/${digest}/${encodeURIComponent(value.consumerKey)}`;
153
+ if (value.verificationRef !== expectedVerification)
154
+ ctx.addIssue({ code: 'custom', path: ['verificationRef'], message: 'verificationRef must match project and artifact hash' });
155
+ if (value.ingestRef !== expectedIngest)
156
+ ctx.addIssue({ code: 'custom', path: ['ingestRef'], message: 'ingestRef must match project, artifact hash, consumer and optional source binding' });
157
+ if (new Set(value.resultRefs).size !== value.resultRefs.length)
158
+ ctx.addIssue({ code: 'custom', path: ['resultRefs'], message: 'resultRefs must be unique' });
159
+ });
@@ -0,0 +1,40 @@
1
+ import { z } from 'zod';
2
+ export declare const resourceScopeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
3
+ type: z.ZodLiteral<"TENANT">;
4
+ tenantId: z.ZodString;
5
+ }, z.core.$strict>, z.ZodObject<{
6
+ type: z.ZodLiteral<"PROJECT">;
7
+ tenantId: z.ZodString;
8
+ projectKey: z.ZodString;
9
+ }, z.core.$strict>], "type">;
10
+ export type ResourceScope = z.infer<typeof resourceScopeSchema>;
11
+ export declare const materialAuthorityPolicySchema: z.ZodEnum<{
12
+ LEGACY_PROJECT: "LEGACY_PROJECT";
13
+ TENANT_NATIVE: "TENANT_NATIVE";
14
+ TENANT_PROJECT_SCOPE: "TENANT_PROJECT_SCOPE";
15
+ }>;
16
+ export type MaterialAuthorityPolicy = z.infer<typeof materialAuthorityPolicySchema>;
17
+ export declare function tenantStorageKey(tenantId: string): string;
18
+ export declare const tenantResourceIdentitySchema: z.ZodObject<{
19
+ tenantId: z.ZodString;
20
+ resourceType: z.ZodString;
21
+ resourceId: z.ZodString;
22
+ version: z.ZodNumber;
23
+ }, z.core.$strict>;
24
+ export type TenantResourceIdentity = z.infer<typeof tenantResourceIdentitySchema>;
25
+ export declare function tenantResourceRefs(input: TenantResourceIdentity): {
26
+ identityRef: string;
27
+ ref: string;
28
+ };
29
+ /** 必须精确匹配规范身份;URL 的容错正规化不能改变对象定位。 */
30
+ export declare function parseTenantResourceRef(ref: string): Omit<TenantResourceIdentity, 'tenantId'> & {
31
+ storageKey: string;
32
+ } | null;
33
+ export declare const tenantResourceRefSchema: z.ZodString;
34
+ export declare const TENANT_CORE_CAPABILITIES: {
35
+ readonly resource: "TENANT_RESOURCE_V1";
36
+ readonly authority: "TENANT_AUTHORITY_V1";
37
+ readonly source: "TENANT_SOURCE_V1";
38
+ readonly workflow: "TENANT_WORKFLOW_V1";
39
+ readonly budget: "TENANT_BUDGET_V1";
40
+ };
@@ -0,0 +1,38 @@
1
+ /** 存储/执行范围显式区分租户与历史项目;范围本身不是授权凭据。 */
2
+ import { createHash } from 'node:crypto';
3
+ import { z } from 'zod';
4
+ import { projectKeySchema, stableUriSchema } from './common.js';
5
+ import { materialTenantIdSchema } from './material-context.js';
6
+ export const resourceScopeSchema = z.discriminatedUnion('type', [
7
+ z.object({ type: z.literal('TENANT'), tenantId: materialTenantIdSchema }).strict(),
8
+ z.object({ type: z.literal('PROJECT'), tenantId: materialTenantIdSchema, projectKey: projectKeySchema }).strict(),
9
+ ]);
10
+ export const materialAuthorityPolicySchema = z.enum(['LEGACY_PROJECT', 'TENANT_NATIVE', 'TENANT_PROJECT_SCOPE']);
11
+ export function tenantStorageKey(tenantId) {
12
+ return createHash('sha256').update(materialTenantIdSchema.parse(tenantId), 'utf8').digest('hex');
13
+ }
14
+ export const tenantResourceIdentitySchema = z.object({
15
+ tenantId: materialTenantIdSchema,
16
+ resourceType: z.string().regex(/^[a-z][a-z0-9._-]{0,63}$/),
17
+ resourceId: z.string().min(1).max(128).regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/),
18
+ version: z.number().int().positive().safe(),
19
+ }).strict();
20
+ export function tenantResourceRefs(input) {
21
+ const value = tenantResourceIdentitySchema.parse(input);
22
+ const identityRef = `tenant-resource://${tenantStorageKey(value.tenantId)}/${value.resourceType}/${value.resourceId}`;
23
+ return { identityRef, ref: `${identityRef}/v/${value.version}` };
24
+ }
25
+ /** 必须精确匹配规范身份;URL 的容错正规化不能改变对象定位。 */
26
+ export function parseTenantResourceRef(ref) {
27
+ if (typeof ref !== 'string' || ref.length > 2048)
28
+ return null;
29
+ const match = /^tenant-resource:\/\/([a-f0-9]{64})\/([a-z][a-z0-9._-]{0,63})\/([A-Za-z0-9][A-Za-z0-9._-]{0,127})\/v\/([1-9][0-9]*)$/.exec(ref);
30
+ if (!match)
31
+ return null;
32
+ const version = Number(match[4]);
33
+ if (!Number.isSafeInteger(version))
34
+ return null;
35
+ return { storageKey: match[1], resourceType: match[2], resourceId: match[3], version };
36
+ }
37
+ export const tenantResourceRefSchema = stableUriSchema.refine(value => parseTenantResourceRef(value) !== null, 'Noncanonical tenant resource ref');
38
+ export const TENANT_CORE_CAPABILITIES = { resource: 'TENANT_RESOURCE_V1', authority: 'TENANT_AUTHORITY_V1', source: 'TENANT_SOURCE_V1', workflow: 'TENANT_WORKFLOW_V1', budget: 'TENANT_BUDGET_V1' };
@@ -0,0 +1,274 @@
1
+ import { z } from 'zod';
2
+ export declare const reviewPacketEvidenceSchema: z.ZodObject<{
3
+ evidenceRef: z.ZodString;
4
+ evidenceId: z.ZodString;
5
+ sourceId: z.ZodString;
6
+ sourceIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
7
+ projectRef: z.ZodOptional<z.ZodString>;
8
+ sourceRevisionRef: z.ZodOptional<z.ZodString>;
9
+ collectionBatchRef: z.ZodOptional<z.ZodString>;
10
+ collectionTaskId: z.ZodOptional<z.ZodString>;
11
+ canonicalUri: z.ZodOptional<z.ZodString>;
12
+ observedAt: z.ZodISODateTime;
13
+ access: z.ZodEnum<{
14
+ PUBLIC: "PUBLIC";
15
+ PUBLIC_METADATA: "PUBLIC_METADATA";
16
+ TENANT: "TENANT";
17
+ INTERNAL: "INTERNAL";
18
+ FDE_INTERNAL: "FDE_INTERNAL";
19
+ ACCESS_CONTROLLED: "ACCESS_CONTROLLED";
20
+ UNKNOWN: "UNKNOWN";
21
+ }>;
22
+ contentHash: z.ZodString;
23
+ mediaType: z.ZodOptional<z.ZodString>;
24
+ byteLength: z.ZodOptional<z.ZodNumber>;
25
+ currentness: z.ZodOptional<z.ZodObject<{
26
+ schemaVersion: z.ZodLiteral<1>;
27
+ subjectRef: z.ZodString;
28
+ subjectKind: z.ZodEnum<{
29
+ SOURCE: "SOURCE";
30
+ EVIDENCE: "EVIDENCE";
31
+ ARTIFACT: "ARTIFACT";
32
+ }>;
33
+ projectRef: z.ZodOptional<z.ZodString>;
34
+ sourceRevisionRef: z.ZodOptional<z.ZodString>;
35
+ basisRef: z.ZodDefault<z.ZodNullable<z.ZodString>>;
36
+ state: z.ZodEnum<{
37
+ UNKNOWN: "UNKNOWN";
38
+ DUE: "DUE";
39
+ CURRENT: "CURRENT";
40
+ STALE: "STALE";
41
+ BLOCKED: "BLOCKED";
42
+ }>;
43
+ action: z.ZodEnum<{
44
+ ALLOW: "ALLOW";
45
+ REVIEW_REQUIRED: "REVIEW_REQUIRED";
46
+ DENY: "DENY";
47
+ }>;
48
+ assessedAt: z.ZodISODateTime;
49
+ observedAt: z.ZodDefault<z.ZodNullable<z.ZodISODateTime>>;
50
+ lastSuccessAt: z.ZodDefault<z.ZodNullable<z.ZodISODateTime>>;
51
+ lastAttemptAt: z.ZodDefault<z.ZodNullable<z.ZodISODateTime>>;
52
+ dueAt: z.ZodDefault<z.ZodNullable<z.ZodISODateTime>>;
53
+ staleAt: z.ZodDefault<z.ZodNullable<z.ZodISODateTime>>;
54
+ ageSeconds: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
55
+ reasonCode: z.ZodEnum<{
56
+ CURRENT_WITHIN_CADENCE: "CURRENT_WITHIN_CADENCE";
57
+ REFRESH_DUE: "REFRESH_DUE";
58
+ STALE_AFTER_THRESHOLD: "STALE_AFTER_THRESHOLD";
59
+ SOURCE_BLOCKED: "SOURCE_BLOCKED";
60
+ SOURCE_CONTENT_CHANGED: "SOURCE_CONTENT_CHANGED";
61
+ NO_SUCCESSFUL_OBSERVATION: "NO_SUCCESSFUL_OBSERVATION";
62
+ }>;
63
+ policy: z.ZodObject<{
64
+ schemaVersion: z.ZodLiteral<1>;
65
+ dueAfterSeconds: z.ZodNumber;
66
+ staleAfterSeconds: z.ZodNumber;
67
+ staleAction: z.ZodDefault<z.ZodEnum<{
68
+ ALLOW: "ALLOW";
69
+ REVIEW_REQUIRED: "REVIEW_REQUIRED";
70
+ DENY: "DENY";
71
+ }>>;
72
+ unknownAction: z.ZodDefault<z.ZodEnum<{
73
+ ALLOW: "ALLOW";
74
+ REVIEW_REQUIRED: "REVIEW_REQUIRED";
75
+ DENY: "DENY";
76
+ }>>;
77
+ blockedAction: z.ZodDefault<z.ZodEnum<{
78
+ ALLOW: "ALLOW";
79
+ REVIEW_REQUIRED: "REVIEW_REQUIRED";
80
+ DENY: "DENY";
81
+ }>>;
82
+ }, z.core.$strict>;
83
+ }, z.core.$strict>>;
84
+ attachment: z.ZodObject<{
85
+ evidenceRef: z.ZodString;
86
+ contentHash: z.ZodString;
87
+ mediaType: z.ZodString;
88
+ byteLength: z.ZodNullable<z.ZodNumber>;
89
+ modality: z.ZodEnum<{
90
+ TEXT: "TEXT";
91
+ PDF: "PDF";
92
+ IMAGE: "IMAGE";
93
+ AUDIO: "AUDIO";
94
+ VIDEO: "VIDEO";
95
+ BINARY: "BINARY";
96
+ }>;
97
+ reviewMode: z.ZodEnum<{
98
+ TEXT_NATIVE: "TEXT_NATIVE";
99
+ MULTIMODAL_NATIVE: "MULTIMODAL_NATIVE";
100
+ EXTERNAL_EXTRACTOR_REQUIRED: "EXTERNAL_EXTRACTOR_REQUIRED";
101
+ }>;
102
+ instruction: z.ZodEnum<{
103
+ READ_ORIGINAL_TEXT: "READ_ORIGINAL_TEXT";
104
+ INSPECT_ORIGINAL_DOCUMENT: "INSPECT_ORIGINAL_DOCUMENT";
105
+ INSPECT_ORIGINAL_IMAGE: "INSPECT_ORIGINAL_IMAGE";
106
+ LISTEN_TO_ORIGINAL_AUDIO: "LISTEN_TO_ORIGINAL_AUDIO";
107
+ INSPECT_ORIGINAL_VIDEO: "INSPECT_ORIGINAL_VIDEO";
108
+ USE_APPROVED_EXTERNAL_EXTRACTOR: "USE_APPROVED_EXTERNAL_EXTRACTOR";
109
+ }>;
110
+ rawBytesEmbedded: z.ZodLiteral<false>;
111
+ materializationRequired: z.ZodLiteral<true>;
112
+ reviewHints: z.ZodOptional<z.ZodObject<{
113
+ pageRanges: z.ZodDefault<z.ZodArray<z.ZodObject<{
114
+ startPage: z.ZodNumber;
115
+ endPage: z.ZodNumber;
116
+ }, z.core.$strict>>>;
117
+ timeRanges: z.ZodDefault<z.ZodArray<z.ZodObject<{
118
+ startMs: z.ZodNumber;
119
+ endMs: z.ZodNumber;
120
+ }, z.core.$strict>>>;
121
+ frameTimestampsMs: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
122
+ }, z.core.$strict>>;
123
+ }, z.core.$strict>;
124
+ }, z.core.$strict>;
125
+ export declare const reviewPacketSchema: z.ZodObject<{
126
+ schemaVersion: z.ZodLiteral<1>;
127
+ packetType: z.ZodLiteral<"KNOWLEDGE_REVIEW_PACKET">;
128
+ projectKey: z.ZodString;
129
+ projectRef: z.ZodOptional<z.ZodString>;
130
+ sourceEvent: z.ZodObject<{
131
+ eventId: z.ZodString;
132
+ type: z.ZodEnum<{
133
+ SOURCE_CHANGED: "SOURCE_CHANGED";
134
+ BOUNDARY_RISK: "BOUNDARY_RISK";
135
+ CURRENTNESS_RISK: "CURRENTNESS_RISK";
136
+ }>;
137
+ createdAt: z.ZodISODateTime;
138
+ runtimeNodeId: z.ZodOptional<z.ZodString>;
139
+ sourceRef: z.ZodOptional<z.ZodString>;
140
+ sourceRevisionRef: z.ZodOptional<z.ZodString>;
141
+ collectionBatchRef: z.ZodOptional<z.ZodString>;
142
+ contentHash: z.ZodOptional<z.ZodString>;
143
+ }, z.core.$strict>;
144
+ evidence: z.ZodArray<z.ZodObject<{
145
+ evidenceRef: z.ZodString;
146
+ evidenceId: z.ZodString;
147
+ sourceId: z.ZodString;
148
+ sourceIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
149
+ projectRef: z.ZodOptional<z.ZodString>;
150
+ sourceRevisionRef: z.ZodOptional<z.ZodString>;
151
+ collectionBatchRef: z.ZodOptional<z.ZodString>;
152
+ collectionTaskId: z.ZodOptional<z.ZodString>;
153
+ canonicalUri: z.ZodOptional<z.ZodString>;
154
+ observedAt: z.ZodISODateTime;
155
+ access: z.ZodEnum<{
156
+ PUBLIC: "PUBLIC";
157
+ PUBLIC_METADATA: "PUBLIC_METADATA";
158
+ TENANT: "TENANT";
159
+ INTERNAL: "INTERNAL";
160
+ FDE_INTERNAL: "FDE_INTERNAL";
161
+ ACCESS_CONTROLLED: "ACCESS_CONTROLLED";
162
+ UNKNOWN: "UNKNOWN";
163
+ }>;
164
+ contentHash: z.ZodString;
165
+ mediaType: z.ZodOptional<z.ZodString>;
166
+ byteLength: z.ZodOptional<z.ZodNumber>;
167
+ currentness: z.ZodOptional<z.ZodObject<{
168
+ schemaVersion: z.ZodLiteral<1>;
169
+ subjectRef: z.ZodString;
170
+ subjectKind: z.ZodEnum<{
171
+ SOURCE: "SOURCE";
172
+ EVIDENCE: "EVIDENCE";
173
+ ARTIFACT: "ARTIFACT";
174
+ }>;
175
+ projectRef: z.ZodOptional<z.ZodString>;
176
+ sourceRevisionRef: z.ZodOptional<z.ZodString>;
177
+ basisRef: z.ZodDefault<z.ZodNullable<z.ZodString>>;
178
+ state: z.ZodEnum<{
179
+ UNKNOWN: "UNKNOWN";
180
+ DUE: "DUE";
181
+ CURRENT: "CURRENT";
182
+ STALE: "STALE";
183
+ BLOCKED: "BLOCKED";
184
+ }>;
185
+ action: z.ZodEnum<{
186
+ ALLOW: "ALLOW";
187
+ REVIEW_REQUIRED: "REVIEW_REQUIRED";
188
+ DENY: "DENY";
189
+ }>;
190
+ assessedAt: z.ZodISODateTime;
191
+ observedAt: z.ZodDefault<z.ZodNullable<z.ZodISODateTime>>;
192
+ lastSuccessAt: z.ZodDefault<z.ZodNullable<z.ZodISODateTime>>;
193
+ lastAttemptAt: z.ZodDefault<z.ZodNullable<z.ZodISODateTime>>;
194
+ dueAt: z.ZodDefault<z.ZodNullable<z.ZodISODateTime>>;
195
+ staleAt: z.ZodDefault<z.ZodNullable<z.ZodISODateTime>>;
196
+ ageSeconds: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
197
+ reasonCode: z.ZodEnum<{
198
+ CURRENT_WITHIN_CADENCE: "CURRENT_WITHIN_CADENCE";
199
+ REFRESH_DUE: "REFRESH_DUE";
200
+ STALE_AFTER_THRESHOLD: "STALE_AFTER_THRESHOLD";
201
+ SOURCE_BLOCKED: "SOURCE_BLOCKED";
202
+ SOURCE_CONTENT_CHANGED: "SOURCE_CONTENT_CHANGED";
203
+ NO_SUCCESSFUL_OBSERVATION: "NO_SUCCESSFUL_OBSERVATION";
204
+ }>;
205
+ policy: z.ZodObject<{
206
+ schemaVersion: z.ZodLiteral<1>;
207
+ dueAfterSeconds: z.ZodNumber;
208
+ staleAfterSeconds: z.ZodNumber;
209
+ staleAction: z.ZodDefault<z.ZodEnum<{
210
+ ALLOW: "ALLOW";
211
+ REVIEW_REQUIRED: "REVIEW_REQUIRED";
212
+ DENY: "DENY";
213
+ }>>;
214
+ unknownAction: z.ZodDefault<z.ZodEnum<{
215
+ ALLOW: "ALLOW";
216
+ REVIEW_REQUIRED: "REVIEW_REQUIRED";
217
+ DENY: "DENY";
218
+ }>>;
219
+ blockedAction: z.ZodDefault<z.ZodEnum<{
220
+ ALLOW: "ALLOW";
221
+ REVIEW_REQUIRED: "REVIEW_REQUIRED";
222
+ DENY: "DENY";
223
+ }>>;
224
+ }, z.core.$strict>;
225
+ }, z.core.$strict>>;
226
+ attachment: z.ZodObject<{
227
+ evidenceRef: z.ZodString;
228
+ contentHash: z.ZodString;
229
+ mediaType: z.ZodString;
230
+ byteLength: z.ZodNullable<z.ZodNumber>;
231
+ modality: z.ZodEnum<{
232
+ TEXT: "TEXT";
233
+ PDF: "PDF";
234
+ IMAGE: "IMAGE";
235
+ AUDIO: "AUDIO";
236
+ VIDEO: "VIDEO";
237
+ BINARY: "BINARY";
238
+ }>;
239
+ reviewMode: z.ZodEnum<{
240
+ TEXT_NATIVE: "TEXT_NATIVE";
241
+ MULTIMODAL_NATIVE: "MULTIMODAL_NATIVE";
242
+ EXTERNAL_EXTRACTOR_REQUIRED: "EXTERNAL_EXTRACTOR_REQUIRED";
243
+ }>;
244
+ instruction: z.ZodEnum<{
245
+ READ_ORIGINAL_TEXT: "READ_ORIGINAL_TEXT";
246
+ INSPECT_ORIGINAL_DOCUMENT: "INSPECT_ORIGINAL_DOCUMENT";
247
+ INSPECT_ORIGINAL_IMAGE: "INSPECT_ORIGINAL_IMAGE";
248
+ LISTEN_TO_ORIGINAL_AUDIO: "LISTEN_TO_ORIGINAL_AUDIO";
249
+ INSPECT_ORIGINAL_VIDEO: "INSPECT_ORIGINAL_VIDEO";
250
+ USE_APPROVED_EXTERNAL_EXTRACTOR: "USE_APPROVED_EXTERNAL_EXTRACTOR";
251
+ }>;
252
+ rawBytesEmbedded: z.ZodLiteral<false>;
253
+ materializationRequired: z.ZodLiteral<true>;
254
+ reviewHints: z.ZodOptional<z.ZodObject<{
255
+ pageRanges: z.ZodDefault<z.ZodArray<z.ZodObject<{
256
+ startPage: z.ZodNumber;
257
+ endPage: z.ZodNumber;
258
+ }, z.core.$strict>>>;
259
+ timeRanges: z.ZodDefault<z.ZodArray<z.ZodObject<{
260
+ startMs: z.ZodNumber;
261
+ endMs: z.ZodNumber;
262
+ }, z.core.$strict>>>;
263
+ frameTimestampsMs: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
264
+ }, z.core.$strict>>;
265
+ }, z.core.$strict>;
266
+ }, z.core.$strict>>;
267
+ reviewPolicy: z.ZodObject<{
268
+ semanticSynthesisRequired: z.ZodLiteral<true>;
269
+ rawChunkApprovalForbidden: z.ZodLiteral<true>;
270
+ highRiskAutoApprovalForbidden: z.ZodLiteral<true>;
271
+ decisions: z.ZodTuple<[z.ZodLiteral<"PASS">, z.ZodLiteral<"REWORK">, z.ZodLiteral<"REJECT">], null>;
272
+ }, z.core.$strict>;
273
+ }, z.core.$strict>;
274
+ export type ReviewPacket = z.infer<typeof reviewPacketSchema>;
@@ -0,0 +1,61 @@
1
+ import { z } from 'zod';
2
+ import { accessClassificationSchema, idSchema, isoDateTimeSchema, projectKeySchema, schemaVersionSchema, sha256Schema, stableUriSchema, } from './common.js';
3
+ import { currentnessAssessmentSchema } from './currentness.js';
4
+ import { evidenceReviewAttachmentSchema } from './evidence.js';
5
+ export const reviewPacketEvidenceSchema = z.object({
6
+ evidenceRef: stableUriSchema,
7
+ evidenceId: idSchema,
8
+ sourceId: idSchema,
9
+ sourceIds: z.array(idSchema).max(64).default([]),
10
+ projectRef: stableUriSchema.optional(),
11
+ sourceRevisionRef: stableUriSchema.optional(),
12
+ collectionBatchRef: stableUriSchema.optional(),
13
+ collectionTaskId: idSchema.optional(),
14
+ canonicalUri: stableUriSchema.optional(),
15
+ observedAt: isoDateTimeSchema,
16
+ access: accessClassificationSchema,
17
+ contentHash: sha256Schema,
18
+ mediaType: z.string().trim().min(1).max(256).optional(),
19
+ byteLength: z.number().int().nonnegative().optional(),
20
+ currentness: currentnessAssessmentSchema.optional(),
21
+ attachment: evidenceReviewAttachmentSchema,
22
+ }).strict().superRefine((value, ctx) => {
23
+ if (value.attachment.evidenceRef !== value.evidenceRef)
24
+ ctx.addIssue({ code: 'custom', path: ['attachment', 'evidenceRef'], message: 'attachment evidenceRef must match evidence row' });
25
+ if (value.attachment.contentHash !== value.contentHash)
26
+ ctx.addIssue({ code: 'custom', path: ['attachment', 'contentHash'], message: 'attachment contentHash must match evidence row' });
27
+ if (value.mediaType && value.attachment.mediaType !== value.mediaType.toLowerCase())
28
+ ctx.addIssue({ code: 'custom', path: ['attachment', 'mediaType'], message: 'attachment mediaType must match evidence row' });
29
+ if (value.byteLength !== undefined && value.attachment.byteLength !== value.byteLength)
30
+ ctx.addIssue({ code: 'custom', path: ['attachment', 'byteLength'], message: 'attachment byteLength must match evidence row' });
31
+ });
32
+ export const reviewPacketSchema = z.object({
33
+ schemaVersion: schemaVersionSchema,
34
+ packetType: z.literal('KNOWLEDGE_REVIEW_PACKET'),
35
+ projectKey: projectKeySchema,
36
+ projectRef: stableUriSchema.optional(),
37
+ sourceEvent: z.object({
38
+ eventId: idSchema,
39
+ type: z.enum(['SOURCE_CHANGED', 'BOUNDARY_RISK', 'CURRENTNESS_RISK']),
40
+ createdAt: isoDateTimeSchema,
41
+ runtimeNodeId: idSchema.optional(),
42
+ sourceRef: stableUriSchema.optional(),
43
+ sourceRevisionRef: stableUriSchema.optional(),
44
+ collectionBatchRef: stableUriSchema.optional(),
45
+ contentHash: sha256Schema.optional(),
46
+ }).strict(),
47
+ evidence: z.array(reviewPacketEvidenceSchema).max(256),
48
+ reviewPolicy: z.object({
49
+ semanticSynthesisRequired: z.literal(true),
50
+ rawChunkApprovalForbidden: z.literal(true),
51
+ highRiskAutoApprovalForbidden: z.literal(true),
52
+ decisions: z.tuple([z.literal('PASS'), z.literal('REWORK'), z.literal('REJECT')]),
53
+ }).strict(),
54
+ }).strict().superRefine((value, ctx) => {
55
+ if (value.projectRef)
56
+ for (let i = 0; i < value.evidence.length; i += 1) {
57
+ const row = value.evidence[i];
58
+ if (row.projectRef && row.projectRef !== value.projectRef)
59
+ ctx.addIssue({ code: 'custom', path: ['evidence', i, 'projectRef'], message: 'Evidence projectRef must match packet projectRef' });
60
+ }
61
+ });
@@ -0,0 +1,90 @@
1
+ import { z } from 'zod';
2
+ export declare const reviewPlaneStageSchema: z.ZodEnum<{
3
+ REVIEWED: "REVIEWED";
4
+ PROGRAM: "PROGRAM";
5
+ INBOX: "INBOX";
6
+ USER_APPROVED: "USER_APPROVED";
7
+ PROMOTION_RECEIPTS: "PROMOTION_RECEIPTS";
8
+ GUIDES: "GUIDES";
9
+ REJECTED_SUPERSEDED: "REJECTED_SUPERSEDED";
10
+ }>;
11
+ export declare const reviewPlaneWorkspaceSchema: z.ZodObject<{
12
+ schemaVersion: z.ZodLiteral<1>;
13
+ projectKey: z.ZodString;
14
+ provider: z.ZodLiteral<"GOOGLE_DRIVE">;
15
+ rootPath: z.ZodString;
16
+ folders: z.ZodObject<{
17
+ PROGRAM: z.ZodString;
18
+ INBOX: z.ZodString;
19
+ REVIEWED: z.ZodString;
20
+ USER_APPROVED: z.ZodString;
21
+ PROMOTION_RECEIPTS: z.ZodString;
22
+ GUIDES: z.ZodOptional<z.ZodString>;
23
+ REJECTED_SUPERSEDED: z.ZodString;
24
+ }, z.core.$strict>;
25
+ }, z.core.$strict>;
26
+ export declare const reviewPlaneApprovalSchema: z.ZodObject<{
27
+ schemaVersion: z.ZodLiteral<1>;
28
+ approvalId: z.ZodString;
29
+ projectKey: z.ZodString;
30
+ sourceProvider: z.ZodLiteral<"GOOGLE_DRIVE">;
31
+ sourcePath: z.ZodString;
32
+ sourceFileId: z.ZodNullable<z.ZodString>;
33
+ sourceContentHash: z.ZodString;
34
+ sourceArtifactRef: z.ZodNullable<z.ZodString>;
35
+ reviewedAt: z.ZodISODateTime;
36
+ approvedAt: z.ZodISODateTime;
37
+ decision: z.ZodLiteral<"PASS">;
38
+ approvalAuthority: z.ZodLiteral<"EXPLICIT_HUMAN">;
39
+ hostDisposition: z.ZodEnum<{
40
+ APPROVED_RESEARCH: "APPROVED_RESEARCH";
41
+ APPROVED_KNOWLEDGE: "APPROVED_KNOWLEDGE";
42
+ APPROVED_INSIGHT: "APPROVED_INSIGHT";
43
+ }>;
44
+ targetArtifactId: z.ZodString;
45
+ targetVersion: z.ZodNumber;
46
+ targetTitle: z.ZodString;
47
+ mediaType: z.ZodString;
48
+ observedAt: z.ZodNullable<z.ZodISODateTime>;
49
+ validUntil: z.ZodNullable<z.ZodISODateTime>;
50
+ access: z.ZodEnum<{
51
+ PUBLIC: "PUBLIC";
52
+ PUBLIC_METADATA: "PUBLIC_METADATA";
53
+ TENANT: "TENANT";
54
+ INTERNAL: "INTERNAL";
55
+ FDE_INTERNAL: "FDE_INTERNAL";
56
+ ACCESS_CONTROLLED: "ACCESS_CONTROLLED";
57
+ UNKNOWN: "UNKNOWN";
58
+ }>;
59
+ evidenceRefs: z.ZodArray<z.ZodString>;
60
+ approvalEvidenceRefs: z.ZodArray<z.ZodString>;
61
+ supersedesRef: z.ZodNullable<z.ZodString>;
62
+ }, z.core.$strict>;
63
+ export declare const reviewPlanePromotionReceiptSchema: z.ZodObject<{
64
+ schemaVersion: z.ZodLiteral<1>;
65
+ projectKey: z.ZodString;
66
+ approvalId: z.ZodString;
67
+ sourcePath: z.ZodString;
68
+ sourceFileId: z.ZodNullable<z.ZodString>;
69
+ sourceContentHash: z.ZodString;
70
+ promotedAt: z.ZodISODateTime;
71
+ targetKind: z.ZodEnum<{
72
+ SIGNAL_GENERATION: "SIGNAL_GENERATION";
73
+ RESEARCH: "RESEARCH";
74
+ REVIEW: "REVIEW";
75
+ KNOWLEDGE: "KNOWLEDGE";
76
+ INSIGHT: "INSIGHT";
77
+ }>;
78
+ draftRef: z.ZodString;
79
+ readyRef: z.ZodString;
80
+ reviewRef: z.ZodString;
81
+ approvedRef: z.ZodString;
82
+ approvedContentHash: z.ZodString;
83
+ exactBytesVerified: z.ZodLiteral<true>;
84
+ humanApprovalVerified: z.ZodLiteral<true>;
85
+ automaticPromotion: z.ZodLiteral<false>;
86
+ }, z.core.$strict>;
87
+ export type ReviewPlaneStage = z.infer<typeof reviewPlaneStageSchema>;
88
+ export type ReviewPlaneWorkspace = z.infer<typeof reviewPlaneWorkspaceSchema>;
89
+ export type ReviewPlaneApproval = z.infer<typeof reviewPlaneApprovalSchema>;
90
+ export type ReviewPlanePromotionReceipt = z.infer<typeof reviewPlanePromotionReceiptSchema>;