@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,27 @@
1
+ /** Bounded PDF text projection, with real page locators; OCR is a distinct capability. */
2
+ import { z } from 'zod';
3
+ export declare const TENANT_PDF_TEXT_MEDIA_TYPE = "application/vnd.native-knowledge.pdf-text+json";
4
+ export declare const tenantPdfTextSchema: z.ZodObject<{
5
+ schemaVersion: z.ZodLiteral<1>;
6
+ format: z.ZodLiteral<"TENANT_PDF_TEXT_V1">;
7
+ tenantId: z.ZodString;
8
+ parentEvidenceRef: z.ZodString;
9
+ sourceContentHash: z.ZodString;
10
+ sourceByteLength: z.ZodNumber;
11
+ sourceMediaType: z.ZodString;
12
+ sourceUri: z.ZodString;
13
+ observedAt: z.ZodISODateTime;
14
+ extractedAt: z.ZodISODateTime;
15
+ extractor: z.ZodObject<{
16
+ id: z.ZodLiteral<"native-knowledge.pdf-text">;
17
+ version: z.ZodLiteral<"1.0.0">;
18
+ }, z.core.$strict>;
19
+ pages: z.ZodArray<z.ZodObject<{
20
+ page: z.ZodNumber;
21
+ locator: z.ZodString;
22
+ text: z.ZodString;
23
+ }, z.core.$strict>>;
24
+ gaps: z.ZodArray<z.ZodEnum<{
25
+ TENANT_PDF_OCR_REQUIRED: "TENANT_PDF_OCR_REQUIRED";
26
+ }>>;
27
+ }, z.core.$strict>;
@@ -0,0 +1,13 @@
1
+ /** Bounded PDF text projection, with real page locators; OCR is a distinct capability. */
2
+ import { z } from 'zod';
3
+ import { isoDateTimeSchema, sha256Schema } from './common.js';
4
+ import { materialTenantIdSchema } from './material-context.js';
5
+ import { parseTenantResourceRef, tenantStorageKey } from './resource-scope.js';
6
+ export const TENANT_PDF_TEXT_MEDIA_TYPE = 'application/vnd.native-knowledge.pdf-text+json';
7
+ export const tenantPdfTextSchema = z.object({ schemaVersion: z.literal(1), format: z.literal('TENANT_PDF_TEXT_V1'), tenantId: materialTenantIdSchema, parentEvidenceRef: z.string().max(1024), sourceContentHash: sha256Schema, sourceByteLength: z.number().int().min(5).max(8 * 1024 * 1024), sourceMediaType: z.string().min(1).max(256), sourceUri: z.string().url().max(2048), observedAt: isoDateTimeSchema, extractedAt: isoDateTimeSchema, extractor: z.object({ id: z.literal('native-knowledge.pdf-text'), version: z.literal('1.0.0') }).strict(), pages: z.array(z.object({ page: z.number().int().min(1).max(100), locator: z.string().url().max(2080), text: z.string().max(64000) }).strict()).min(1).max(100), gaps: z.array(z.enum(['TENANT_PDF_OCR_REQUIRED'])).max(1) }).strict().superRefine((v, c) => {
8
+ const p = parseTenantResourceRef(v.parentEvidenceRef);
9
+ if (!p || p.storageKey !== tenantStorageKey(v.tenantId) || p.resourceType !== 'evidence')
10
+ c.addIssue({ code: 'custom', message: 'Exact Tenant PDF parent required' });
11
+ if (v.pages.some((p, i) => p.page !== i + 1 || p.locator !== v.sourceUri + '#page=' + p.page) || v.pages.reduce((n, p) => n + p.text.length, 0) > 2000000 || !v.pages.some(p => p.text.trim()) || v.pages.some(p => !p.text.trim()) !== v.gaps.includes('TENANT_PDF_OCR_REQUIRED'))
12
+ c.addIssue({ code: 'custom', message: 'Page identity, text budget or OCR gap mismatch' });
13
+ });
@@ -0,0 +1,94 @@
1
+ /** Project controls select purpose/context; receipts do not own Tenant assets or lifecycle state. */
2
+ import { z } from 'zod';
3
+ import { tenantOperationRef } from './tenant-management.js';
4
+ export declare const tenantProjectScopeChangeSchema: z.ZodObject<{
5
+ requestId: z.ZodString;
6
+ projectKey: z.ZodString;
7
+ expectedRevision: z.ZodString;
8
+ changes: z.ZodObject<{
9
+ mode: z.ZodOptional<z.ZodEnum<{
10
+ TENANT: "TENANT";
11
+ EXPLICIT: "EXPLICIT";
12
+ }>>;
13
+ selectors: z.ZodDefault<z.ZodArray<z.ZodObject<{
14
+ type: z.ZodEnum<{
15
+ SOURCE_PROJECT: "SOURCE_PROJECT";
16
+ REF: "REF";
17
+ }>;
18
+ value: z.ZodString;
19
+ enabled: z.ZodBoolean;
20
+ }, z.core.$strict>>>;
21
+ }, z.core.$strict>;
22
+ }, z.core.$strict>;
23
+ export declare const tenantProjectLifecycleChangeSchema: z.ZodObject<{
24
+ requestId: z.ZodString;
25
+ projectKey: z.ZodString;
26
+ expectedRevision: z.ZodString;
27
+ state: z.ZodEnum<{
28
+ ACTIVE: "ACTIVE";
29
+ ARCHIVED: "ARCHIVED";
30
+ }>;
31
+ }, z.core.$strict>;
32
+ export declare const tenantProjectControlResultSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
33
+ type: z.ZodLiteral<"SCOPE">;
34
+ changed: z.ZodBoolean;
35
+ mode: z.ZodEnum<{
36
+ TENANT: "TENANT";
37
+ EXPLICIT: "EXPLICIT";
38
+ }>;
39
+ revision: z.ZodString;
40
+ }, z.core.$strict>, z.ZodObject<{
41
+ type: z.ZodLiteral<"LIFECYCLE">;
42
+ changed: z.ZodBoolean;
43
+ state: z.ZodEnum<{
44
+ ACTIVE: "ACTIVE";
45
+ ARCHIVED: "ARCHIVED";
46
+ }>;
47
+ revision: z.ZodString;
48
+ }, z.core.$strict>], "type">;
49
+ export declare const tenantProjectControlReceiptSchema: z.ZodObject<{
50
+ schemaVersion: z.ZodLiteral<1>;
51
+ operationRef: z.ZodString;
52
+ tenantId: z.ZodString;
53
+ projectKey: z.ZodString;
54
+ action: z.ZodEnum<{
55
+ SET_SCOPE: "SET_SCOPE";
56
+ SET_LIFECYCLE: "SET_LIFECYCLE";
57
+ }>;
58
+ inputHash: z.ZodString;
59
+ actor: z.ZodObject<{
60
+ tenantId: z.ZodString;
61
+ userId: z.ZodString;
62
+ agentId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
63
+ }, z.core.$strict>;
64
+ authority: z.ZodDiscriminatedUnion<[z.ZodObject<{
65
+ type: z.ZodLiteral<"HOST">;
66
+ }, z.core.$strict>, z.ZodObject<{
67
+ type: z.ZodLiteral<"OAUTH">;
68
+ authorityVersion: z.ZodLiteral<2>;
69
+ clientId: z.ZodString;
70
+ grantId: z.ZodString;
71
+ resource: z.ZodString;
72
+ }, z.core.$strict>], "type">;
73
+ result: z.ZodDiscriminatedUnion<[z.ZodObject<{
74
+ type: z.ZodLiteral<"SCOPE">;
75
+ changed: z.ZodBoolean;
76
+ mode: z.ZodEnum<{
77
+ TENANT: "TENANT";
78
+ EXPLICIT: "EXPLICIT";
79
+ }>;
80
+ revision: z.ZodString;
81
+ }, z.core.$strict>, z.ZodObject<{
82
+ type: z.ZodLiteral<"LIFECYCLE">;
83
+ changed: z.ZodBoolean;
84
+ state: z.ZodEnum<{
85
+ ACTIVE: "ACTIVE";
86
+ ARCHIVED: "ARCHIVED";
87
+ }>;
88
+ revision: z.ZodString;
89
+ }, z.core.$strict>], "type">;
90
+ committedAt: z.ZodISODateTime;
91
+ }, z.core.$strict>;
92
+ export type TenantProjectControlReceipt = z.infer<typeof tenantProjectControlReceiptSchema>;
93
+ export type TenantProjectControlResult = z.infer<typeof tenantProjectControlResultSchema>;
94
+ export { tenantOperationRef as tenantProjectOperationRef };
@@ -0,0 +1,19 @@
1
+ /** Project controls select purpose/context; receipts do not own Tenant assets or lifecycle state. */
2
+ import { z } from 'zod';
3
+ import { sha256Schema, stableUriSchema, isoDateTimeSchema, projectKeySchema } from './common.js';
4
+ import { materialTenantIdSchema, materialProjectScopeInputSchema } from './material-context.js';
5
+ import { knowledgeActorContextSchema } from './project-intent.js';
6
+ import { tenantManagementRequestIdSchema, tenantInvocationAuthoritySchema, tenantOperationRef } from './tenant-management.js';
7
+ import { tenantStorageKey } from './resource-scope.js';
8
+ export const tenantProjectScopeChangeSchema = z.object({ requestId: tenantManagementRequestIdSchema, projectKey: projectKeySchema, expectedRevision: sha256Schema, changes: materialProjectScopeInputSchema }).strict();
9
+ export const tenantProjectLifecycleChangeSchema = z.object({ requestId: tenantManagementRequestIdSchema, projectKey: projectKeySchema, expectedRevision: sha256Schema, state: z.enum(['ACTIVE', 'ARCHIVED']) }).strict();
10
+ export const tenantProjectControlResultSchema = z.discriminatedUnion('type', [
11
+ z.object({ type: z.literal('SCOPE'), changed: z.boolean(), mode: z.enum(['TENANT', 'EXPLICIT']), revision: sha256Schema }).strict(),
12
+ z.object({ type: z.literal('LIFECYCLE'), changed: z.boolean(), state: z.enum(['ACTIVE', 'ARCHIVED']), revision: sha256Schema }).strict(),
13
+ ]);
14
+ export const tenantProjectControlReceiptSchema = z.object({ schemaVersion: z.literal(1), operationRef: stableUriSchema, tenantId: materialTenantIdSchema, projectKey: projectKeySchema, action: z.enum(['SET_SCOPE', 'SET_LIFECYCLE']), inputHash: sha256Schema, actor: knowledgeActorContextSchema, authority: tenantInvocationAuthoritySchema, result: tenantProjectControlResultSchema, committedAt: isoDateTimeSchema }).strict().superRefine((value, ctx) => {
15
+ const prefix = `tenant-operation://${tenantStorageKey(value.tenantId)}/`;
16
+ if (value.actor.tenantId !== value.tenantId || !value.operationRef.startsWith(prefix) || !/^[a-f0-9]{64}$/.test(value.operationRef.slice(prefix.length)) || value.action !== (value.result.type === 'SCOPE' ? 'SET_SCOPE' : 'SET_LIFECYCLE'))
17
+ ctx.addIssue({ code: 'custom', message: 'Project control receipt preserves exact Tenant, action and operation identity' });
18
+ });
19
+ export { tenantOperationRef as tenantProjectOperationRef };
@@ -0,0 +1,179 @@
1
+ /** 原生公共 Reference 候选/receipt 格式3;不改旧 Project release 和 publication wire。 */
2
+ import { z } from 'zod';
3
+ export declare const TENANT_PUBLIC_REFERENCE_LIMITS: {
4
+ readonly records: 256;
5
+ readonly sources: 256;
6
+ readonly totalBytes: number;
7
+ readonly recordBytes: number;
8
+ };
9
+ export declare const tenantPublicReferenceRecordIdentitySchema: z.ZodObject<{
10
+ ref: z.ZodString;
11
+ digest: z.ZodString;
12
+ contentHash: z.ZodString;
13
+ }, z.core.$strict>;
14
+ export declare const tenantPublicReferenceReviewSchema: z.ZodObject<{
15
+ authority: z.ZodLiteral<"AUTHORIZED_PUBLISHER">;
16
+ reviewedAt: z.ZodISODateTime;
17
+ note: z.ZodString;
18
+ approvedSources: z.ZodArray<z.ZodObject<{
19
+ sourceRef: z.ZodString;
20
+ contentHash: z.ZodString;
21
+ }, z.core.$strict>>;
22
+ }, z.core.$strict>;
23
+ export declare const tenantPublicReferencePublishInputSchema: z.ZodObject<{
24
+ schemaVersion: z.ZodLiteral<3>;
25
+ publicationKey: z.ZodString;
26
+ corpusKey: z.ZodString;
27
+ records: z.ZodArray<z.ZodObject<{
28
+ ref: z.ZodString;
29
+ digest: z.ZodString;
30
+ contentHash: z.ZodString;
31
+ }, z.core.$strict>>;
32
+ catalogue: z.ZodObject<{
33
+ countryCode: z.ZodString;
34
+ topicKey: z.ZodString;
35
+ scopeRef: z.ZodString;
36
+ coverage: z.ZodEnum<{
37
+ PARTIAL: "PARTIAL";
38
+ OBSERVED: "OBSERVED";
39
+ }>;
40
+ }, z.core.$strict>;
41
+ review: z.ZodObject<{
42
+ authority: z.ZodLiteral<"AUTHORIZED_PUBLISHER">;
43
+ reviewedAt: z.ZodISODateTime;
44
+ note: z.ZodString;
45
+ approvedSources: z.ZodArray<z.ZodObject<{
46
+ sourceRef: z.ZodString;
47
+ contentHash: z.ZodString;
48
+ }, z.core.$strict>>;
49
+ }, z.core.$strict>;
50
+ }, z.core.$strict>;
51
+ export declare const tenantPublicReferencePublicationBasisSchema: z.ZodObject<{
52
+ schemaVersion: z.ZodLiteral<3>;
53
+ visibility: z.ZodLiteral<"PUBLIC_REFERENCE">;
54
+ source: z.ZodObject<{
55
+ type: z.ZodLiteral<"TENANT">;
56
+ tenantId: z.ZodString;
57
+ }, z.core.$strict>;
58
+ corpusKey: z.ZodString;
59
+ records: z.ZodArray<z.ZodObject<{
60
+ ref: z.ZodString;
61
+ digest: z.ZodString;
62
+ contentHash: z.ZodString;
63
+ }, z.core.$strict>>;
64
+ recordsContentHash: z.ZodString;
65
+ recordsByteLength: z.ZodNumber;
66
+ recordCount: z.ZodNumber;
67
+ recordTypes: z.ZodArray<z.ZodString>;
68
+ sourceCreatedAt: z.ZodISODateTime;
69
+ catalogue: z.ZodObject<{
70
+ countryCode: z.ZodString;
71
+ topicKey: z.ZodString;
72
+ scopeRef: z.ZodString;
73
+ coverage: z.ZodEnum<{
74
+ PARTIAL: "PARTIAL";
75
+ OBSERVED: "OBSERVED";
76
+ }>;
77
+ }, z.core.$strict>;
78
+ review: z.ZodObject<{
79
+ authority: z.ZodLiteral<"AUTHORIZED_PUBLISHER">;
80
+ reviewedAt: z.ZodISODateTime;
81
+ note: z.ZodString;
82
+ approvedSources: z.ZodArray<z.ZodObject<{
83
+ sourceRef: z.ZodString;
84
+ contentHash: z.ZodString;
85
+ }, z.core.$strict>>;
86
+ }, z.core.$strict>;
87
+ publishedAt: z.ZodISODateTime;
88
+ checkedAt: z.ZodISODateTime;
89
+ validUntil: z.ZodISODateTime;
90
+ }, z.core.$strict>;
91
+ export declare function tenantPublicReferencePublicationDigest(raw: z.infer<typeof tenantPublicReferencePublicationBasisSchema>): string;
92
+ export declare const tenantPublicReferencePublicationSchema: z.ZodObject<{
93
+ schemaVersion: z.ZodLiteral<3>;
94
+ visibility: z.ZodLiteral<"PUBLIC_REFERENCE">;
95
+ source: z.ZodObject<{
96
+ type: z.ZodLiteral<"TENANT">;
97
+ tenantId: z.ZodString;
98
+ }, z.core.$strict>;
99
+ corpusKey: z.ZodString;
100
+ records: z.ZodArray<z.ZodObject<{
101
+ ref: z.ZodString;
102
+ digest: z.ZodString;
103
+ contentHash: z.ZodString;
104
+ }, z.core.$strict>>;
105
+ recordsContentHash: z.ZodString;
106
+ recordsByteLength: z.ZodNumber;
107
+ recordCount: z.ZodNumber;
108
+ recordTypes: z.ZodArray<z.ZodString>;
109
+ sourceCreatedAt: z.ZodISODateTime;
110
+ catalogue: z.ZodObject<{
111
+ countryCode: z.ZodString;
112
+ topicKey: z.ZodString;
113
+ scopeRef: z.ZodString;
114
+ coverage: z.ZodEnum<{
115
+ PARTIAL: "PARTIAL";
116
+ OBSERVED: "OBSERVED";
117
+ }>;
118
+ }, z.core.$strict>;
119
+ review: z.ZodObject<{
120
+ authority: z.ZodLiteral<"AUTHORIZED_PUBLISHER">;
121
+ reviewedAt: z.ZodISODateTime;
122
+ note: z.ZodString;
123
+ approvedSources: z.ZodArray<z.ZodObject<{
124
+ sourceRef: z.ZodString;
125
+ contentHash: z.ZodString;
126
+ }, z.core.$strict>>;
127
+ }, z.core.$strict>;
128
+ publishedAt: z.ZodISODateTime;
129
+ checkedAt: z.ZodISODateTime;
130
+ validUntil: z.ZodISODateTime;
131
+ publicationId: z.ZodString;
132
+ publicationRef: z.ZodString;
133
+ }, z.core.$strict>;
134
+ export type TenantPublicReferencePublishInput = z.infer<typeof tenantPublicReferencePublishInputSchema>;
135
+ export type TenantPublicReferencePublication = z.infer<typeof tenantPublicReferencePublicationSchema>;
136
+ export declare const tenantPublicReferenceDirectorySchema: z.ZodObject<{
137
+ schemaVersion: z.ZodLiteral<3>;
138
+ contentClass: z.ZodLiteral<"PUBLIC_REFERENCE_DIRECTORY">;
139
+ coverageProof: z.ZodLiteral<false>;
140
+ items: z.ZodArray<z.ZodObject<{
141
+ publication: z.ZodObject<{
142
+ schemaVersion: z.ZodLiteral<3>;
143
+ validUntil: z.ZodISODateTime;
144
+ publishedAt: z.ZodISODateTime;
145
+ corpusKey: z.ZodString;
146
+ catalogue: z.ZodObject<{
147
+ countryCode: z.ZodString;
148
+ topicKey: z.ZodString;
149
+ scopeRef: z.ZodString;
150
+ coverage: z.ZodEnum<{
151
+ PARTIAL: "PARTIAL";
152
+ OBSERVED: "OBSERVED";
153
+ }>;
154
+ }, z.core.$strict>;
155
+ recordTypes: z.ZodArray<z.ZodString>;
156
+ recordsContentHash: z.ZodString;
157
+ sourceCreatedAt: z.ZodISODateTime;
158
+ checkedAt: z.ZodISODateTime;
159
+ visibility: z.ZodLiteral<"PUBLIC_REFERENCE">;
160
+ recordsByteLength: z.ZodNumber;
161
+ recordCount: z.ZodNumber;
162
+ source: z.ZodObject<{
163
+ type: z.ZodLiteral<"TENANT">;
164
+ tenantId: z.ZodString;
165
+ }, z.core.$strict>;
166
+ publicationId: z.ZodString;
167
+ publicationRef: z.ZodString;
168
+ reviewedAt: z.ZodISODateTime;
169
+ }, z.core.$strict>;
170
+ manifestRequired: z.ZodLiteral<true>;
171
+ availability: z.ZodEnum<{
172
+ STALE: "STALE";
173
+ NOT_YET_PUBLISHED: "NOT_YET_PUBLISHED";
174
+ AVAILABLE: "AVAILABLE";
175
+ }>;
176
+ }, z.core.$strict>>;
177
+ nextAfter: z.ZodNullable<z.ZodString>;
178
+ }, z.core.$strict>;
179
+ export type TenantPublicReferenceDirectory = z.infer<typeof tenantPublicReferenceDirectorySchema>;
@@ -0,0 +1,26 @@
1
+ /** 原生公共 Reference 候选/receipt 格式3;不改旧 Project release 和 publication wire。 */
2
+ import { z } from 'zod';
3
+ import { createHash } from 'node:crypto';
4
+ import { projectKeySchema, sha256Schema, isoDateTimeSchema } from './common.js';
5
+ import { materialTenantIdSchema } from './material-context.js';
6
+ import { tenantResourceRefSchema, parseTenantResourceRef, tenantStorageKey } from './resource-scope.js';
7
+ import { publicReferenceCatalogueScopeSchema, publicReferenceLegacyReviewSchema } from './public-reference.js';
8
+ export const TENANT_PUBLIC_REFERENCE_LIMITS = { records: 256, sources: 256, totalBytes: 16 * 1024 * 1024, recordBytes: 1024 * 1024 };
9
+ export const tenantPublicReferenceRecordIdentitySchema = z.object({ ref: tenantResourceRefSchema, digest: sha256Schema, contentHash: sha256Schema }).strict();
10
+ const records = z.array(tenantPublicReferenceRecordIdentitySchema).min(1).max(TENANT_PUBLIC_REFERENCE_LIMITS.records).superRefine((rows, ctx) => { if (new Set(rows.map(row => row.ref)).size !== rows.length || rows.some(row => parseTenantResourceRef(row.ref)?.resourceType !== 'reference'))
11
+ ctx.addIssue({ code: 'custom', message: 'Unique exact native Reference versions required' }); });
12
+ export const tenantPublicReferenceReviewSchema = publicReferenceLegacyReviewSchema.safeExtend({ approvedSources: z.array(z.object({ sourceRef: tenantResourceRefSchema.refine(ref => parseTenantResourceRef(ref)?.resourceType === 'evidence'), contentHash: sha256Schema }).strict()).min(1).max(TENANT_PUBLIC_REFERENCE_LIMITS.sources) });
13
+ export const tenantPublicReferencePublishInputSchema = z.object({ schemaVersion: z.literal(3), publicationKey: projectKeySchema, corpusKey: projectKeySchema, records, catalogue: publicReferenceCatalogueScopeSchema, review: tenantPublicReferenceReviewSchema }).strict();
14
+ export const tenantPublicReferencePublicationBasisSchema = z.object({ schemaVersion: z.literal(3), visibility: z.literal('PUBLIC_REFERENCE'), source: z.object({ type: z.literal('TENANT'), tenantId: materialTenantIdSchema }).strict(), corpusKey: projectKeySchema, records, recordsContentHash: sha256Schema, recordsByteLength: z.number().int().positive().max(TENANT_PUBLIC_REFERENCE_LIMITS.totalBytes), recordCount: z.number().int().positive().max(TENANT_PUBLIC_REFERENCE_LIMITS.records), recordTypes: z.array(projectKeySchema).min(1).max(128), sourceCreatedAt: isoDateTimeSchema, catalogue: publicReferenceCatalogueScopeSchema, review: tenantPublicReferenceReviewSchema, publishedAt: isoDateTimeSchema, checkedAt: isoDateTimeSchema, validUntil: isoDateTimeSchema }).strict();
15
+ export function tenantPublicReferencePublicationDigest(raw) { return 'sha256:' + createHash('sha256').update(JSON.stringify(tenantPublicReferencePublicationBasisSchema.parse(raw))).digest('hex'); }
16
+ export const tenantPublicReferencePublicationSchema = tenantPublicReferencePublicationBasisSchema.extend({ publicationId: sha256Schema, publicationRef: z.string().regex(/^public-reference:\/\/[a-f0-9]{64}$/) }).strict().superRefine((v, ctx) => {
17
+ const { publicationId, publicationRef, ...basis } = v, key = tenantStorageKey(v.source.tenantId);
18
+ if (publicationId !== tenantPublicReferencePublicationDigest(basis) || publicationRef !== 'public-reference://' + publicationId.slice(7) || v.records.length !== v.recordCount || v.records.some(row => parseTenantResourceRef(row.ref)?.storageKey !== key))
19
+ ctx.addIssue({ code: 'custom', message: 'Tenant publication identity mismatch' });
20
+ if (v.records.some((row, index) => index > 0 && row.ref <= v.records[index - 1].ref) || new Set(v.recordTypes).size !== v.recordTypes.length || v.review.approvedSources.some(row => parseTenantResourceRef(row.sourceRef)?.storageKey !== key))
21
+ ctx.addIssue({ code: 'custom', message: 'Canonical publication records and same-Tenant sources required' });
22
+ if (Date.parse(v.validUntil) <= Date.parse(v.publishedAt) || Date.parse(v.checkedAt) > Date.parse(v.publishedAt) || Date.parse(v.review.reviewedAt) > Date.parse(v.publishedAt) || Date.parse(v.review.reviewedAt) < Math.max(Date.parse(v.sourceCreatedAt), Date.parse(v.checkedAt)))
23
+ ctx.addIssue({ code: 'custom', message: 'Tenant publication chronology invalid' });
24
+ });
25
+ const directoryPublication = z.object({ ...tenantPublicReferencePublicationBasisSchema.shape }).omit({ review: true, records: true }).extend({ publicationId: sha256Schema, publicationRef: tenantPublicReferencePublicationSchema.shape.publicationRef, reviewedAt: isoDateTimeSchema }).strict();
26
+ export const tenantPublicReferenceDirectorySchema = z.object({ schemaVersion: z.literal(3), contentClass: z.literal('PUBLIC_REFERENCE_DIRECTORY'), coverageProof: z.literal(false), items: z.array(z.object({ publication: directoryPublication, manifestRequired: z.literal(true), availability: z.enum(['NOT_YET_PUBLISHED', 'AVAILABLE', 'STALE']) }).strict()).max(100), nextAfter: sha256Schema.nullable() }).strict();