@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,28 @@
1
+ /** Provider18 adds explicit metadata reads; Provider17 remains the exact original twenty tools. */
2
+ import { z } from 'zod';
3
+ import { tenantResourceRefSchema, tenantSourceIdSchema, collectionRefreshSchema, stableUriSchema, isoDateTimeSchema, materialTenantIdSchema } from '../contracts/index.js';
4
+ import { tenantManagementToolSchemas, tenantManagementDataSchemas, tenantManagementScopesForInput, tenantManagementAuthorization, tenantManagementProviderBaseSchema, tenantManagementErrorSchema } from './tenant-management.js';
5
+ const page = { after: z.string().min(1).max(4096).optional(), limit: z.number().int().min(1).max(100).optional() };
6
+ export const tenantWorkStageSchema = z.enum(['ALL', 'RESEARCH', 'DRAFT', 'READY_FOR_REVIEW', 'REWORK_REQUIRED', 'APPROVED']);
7
+ export const tenantWorkspaceExtraToolSchemas = { tenant_source_inventory: z.object(page).strict(), tenant_work_queue: z.object({ ...page, stage: tenantWorkStageSchema.default('ALL') }).strict() };
8
+ const source = z.object({ sourceId: tenantSourceIdSchema, title: z.string().min(1).max(512).nullable(), revisionRef: stableUriSchema.nullable(), generation: z.number().int().positive().safe().nullable(), paused: z.boolean().nullable(), tenantEnabled: z.boolean().nullable(), refresh: collectionRefreshSchema.nullable(), canonicalState: z.enum(['READY', 'UNAVAILABLE', 'INTEGRITY_MISMATCH']) }).strict();
9
+ const artifact = z.object({ ref: tenantResourceRefSchema, title: z.string().max(512), kind: z.string().max(128).nullable(), status: z.string().max(128).nullable(), version: z.number().int().positive().safe().nullable(), recordedAt: isoDateTimeSchema.nullable(), availability: z.enum(['READY', 'UNAVAILABLE', 'INTEGRITY_MISMATCH']), succession: z.enum(['SUCCESSOR_VISIBLE', 'NO_VISIBLE_SUCCESSOR', 'UNCONFIRMED']) }).strict();
10
+ export const tenantWorkspaceExtraDataSchemas = {
11
+ tenant_source_inventory: z.object({ items: z.array(source).max(100), nextAfter: z.string().max(4096).nullable(), coverage: z.literal('REGISTERED_TENANT_SOURCES') }).strict(),
12
+ tenant_work_queue: z.object({ items: z.array(artifact).max(100), nextAfter: z.string().max(4096).nullable(), stage: tenantWorkStageSchema, candidateCount: z.number().int().min(0).max(100), coverage: z.literal('AUTHORIZED_NATIVE_ARTIFACT_METADATA'), total: z.null() }).strict(),
13
+ };
14
+ export const tenantWorkspaceToolSchemas = { ...tenantManagementToolSchemas, ...tenantWorkspaceExtraToolSchemas };
15
+ export const tenantWorkspaceDataSchemas = { ...tenantManagementDataSchemas, ...tenantWorkspaceExtraDataSchemas };
16
+ export function tenantWorkspaceScopesForInput(name, raw) { if (name === 'tenant_source_inventory') {
17
+ tenantWorkspaceExtraToolSchemas[name].parse(raw);
18
+ return ['knowledge.source.read'];
19
+ } if (name === 'tenant_work_queue') {
20
+ tenantWorkspaceExtraToolSchemas[name].parse(raw);
21
+ return ['knowledge.workflow.read'];
22
+ } return tenantManagementScopesForInput(name, raw); }
23
+ export function tenantWorkspaceAuthorization(name) { return name === 'tenant_source_inventory' || name === 'tenant_work_queue' ? { selection: 'FIXED', scopeAlternatives: [[name === 'tenant_source_inventory' ? 'knowledge.source.read' : 'knowledge.workflow.read']] } : tenantManagementAuthorization(name); }
24
+ export function tenantWorkspaceEnvelopeSchema(tool) { return z.object({ schemaVersion: z.literal(2), tenantId: materialTenantIdSchema, tool: z.literal(tool), data: tenantWorkspaceDataSchemas[tool] }).strict(); }
25
+ export const tenantWorkspaceInputJsonSchemas = Object.fromEntries(Object.entries(tenantWorkspaceToolSchemas).map(([name, schema]) => [name, z.toJSONSchema(schema, { target: 'draft-07' })]));
26
+ export const tenantWorkspaceOutputJsonSchemas = Object.fromEntries(Object.keys(tenantWorkspaceToolSchemas).map(name => [name, { type: 'object', oneOf: [z.toJSONSchema(tenantWorkspaceEnvelopeSchema(name), { target: 'draft-07' }), z.toJSONSchema(tenantManagementErrorSchema, { target: 'draft-07' })] }]));
27
+ export const tenantWorkspaceProviderSchema = tenantManagementProviderBaseSchema.extend({ schemaVersion: z.literal(18), tools: z.array(z.string()).length(Object.keys(tenantWorkspaceToolSchemas).length), capabilities: z.tuple([z.literal('TENANT_MANAGEMENT_V1'), z.literal('TENANT_WORKFLOW_V1'), z.literal('TENANT_CURRENTNESS_V2'), z.literal('TENANT_SOURCE_V1'), z.literal('TENANT_WORKSPACE_METADATA_V1')]) }).strict().superRefine((value, ctx) => { if (new Set(value.tools).size !== Object.keys(tenantWorkspaceToolSchemas).length || value.tools.some(name => !Object.hasOwn(tenantWorkspaceToolSchemas, name)))
28
+ ctx.addIssue({ code: 'custom', message: 'Workspace tools must match the exact version18 contract' }); });
@@ -0,0 +1,439 @@
1
+ /** Agent 的治理合同描述真实状态和下一步,不把写入权限解释为审核或正文权限。 */
2
+ import { z } from 'zod';
3
+ export declare const workflowPlanInputSchema: z.ZodObject<{
4
+ projectRef: z.ZodString;
5
+ ref: z.ZodString;
6
+ }, z.core.$strict>;
7
+ export declare const workflowGuideInputSchema: z.ZodObject<{
8
+ projectRef: z.ZodString;
9
+ }, z.core.$strict>;
10
+ export declare const workflowActionSchema: z.ZodEnum<{
11
+ SUBMIT_REVIEW: "SUBMIT_REVIEW";
12
+ FINALIZE_REVIEW: "FINALIZE_REVIEW";
13
+ PREPARE_SOURCE: "PREPARE_SOURCE";
14
+ REGISTER: "REGISTER";
15
+ }>;
16
+ export declare const workflowAdvanceInputSchema: z.ZodObject<{
17
+ projectRef: z.ZodString;
18
+ ref: z.ZodString;
19
+ action: z.ZodEnum<{
20
+ SUBMIT_REVIEW: "SUBMIT_REVIEW";
21
+ FINALIZE_REVIEW: "FINALIZE_REVIEW";
22
+ PREPARE_SOURCE: "PREPARE_SOURCE";
23
+ REGISTER: "REGISTER";
24
+ }>;
25
+ expectedVersion: z.ZodOptional<z.ZodNumber>;
26
+ actedAt: z.ZodOptional<z.ZodISODateTime>;
27
+ }, z.core.$strict>;
28
+ export declare const agentSubmitInputSchema: z.ZodObject<{
29
+ projectRef: z.ZodString;
30
+ sourceId: z.ZodString;
31
+ contentBase64: z.ZodString;
32
+ mediaType: z.ZodString;
33
+ access: z.ZodDefault<z.ZodEnum<{
34
+ PUBLIC: "PUBLIC";
35
+ TENANT: "TENANT";
36
+ INTERNAL: "INTERNAL";
37
+ FDE_INTERNAL: "FDE_INTERNAL";
38
+ }>>;
39
+ submittedAt: z.ZodOptional<z.ZodISODateTime>;
40
+ freshnessSeconds: z.ZodOptional<z.ZodNumber>;
41
+ }, z.core.$strict>;
42
+ export declare const workflowNextActionSchema: z.ZodObject<{
43
+ id: z.ZodString;
44
+ tool: z.ZodNullable<z.ZodString>;
45
+ arguments: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
46
+ requiredScopes: z.ZodArray<z.ZodString>;
47
+ missingScopes: z.ZodArray<z.ZodString>;
48
+ missingFields: z.ZodArray<z.ZodString>;
49
+ canExecute: z.ZodBoolean;
50
+ automatic: z.ZodBoolean;
51
+ reasonCode: z.ZodString;
52
+ cli: z.ZodObject<{
53
+ command: z.ZodString;
54
+ flags: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
55
+ }, z.core.$strict>;
56
+ http: z.ZodObject<{
57
+ method: z.ZodLiteral<"POST">;
58
+ path: z.ZodLiteral<"/mcp/management">;
59
+ tool: z.ZodNullable<z.ZodString>;
60
+ }, z.core.$strict>;
61
+ }, z.core.$strict>;
62
+ declare const readDecision: z.ZodObject<{
63
+ action: z.ZodEnum<{
64
+ ALLOW: "ALLOW";
65
+ REVIEW_REQUIRED: "REVIEW_REQUIRED";
66
+ DENY: "DENY";
67
+ }>;
68
+ reasonCodes: z.ZodArray<z.ZodString>;
69
+ authority: z.ZodEnum<{
70
+ AUTHENTICATED_READER: "AUTHENTICATED_READER";
71
+ LOCAL_PROFILE_SIMULATION: "LOCAL_PROFILE_SIMULATION";
72
+ }>;
73
+ }, z.core.$strict>;
74
+ export declare const workflowPlanSchema: z.ZodObject<{
75
+ schemaVersion: z.ZodLiteral<1>;
76
+ projectRef: z.ZodString;
77
+ ref: z.ZodString;
78
+ contentHash: z.ZodString;
79
+ kind: z.ZodString;
80
+ version: z.ZodNullable<z.ZodNumber>;
81
+ status: z.ZodUnion<[z.ZodEnum<{
82
+ GENERATED: "GENERATED";
83
+ DRAFT: "DRAFT";
84
+ READY_FOR_REVIEW: "READY_FOR_REVIEW";
85
+ REWORK_REQUIRED: "REWORK_REQUIRED";
86
+ APPROVED: "APPROVED";
87
+ REJECTED: "REJECTED";
88
+ SUPERSEDED: "SUPERSEDED";
89
+ }>, z.ZodEnum<{
90
+ RAW_MATERIAL: "RAW_MATERIAL";
91
+ RAW_EVIDENCE: "RAW_EVIDENCE";
92
+ }>]>;
93
+ productionPhase: z.ZodEnum<{
94
+ REGISTERED: "REGISTERED";
95
+ PERSISTED: "PERSISTED";
96
+ CATALOG_PROJECTED: "CATALOG_PROJECTED";
97
+ }>;
98
+ rawMaterialAvailable: z.ZodNullable<z.ZodBoolean>;
99
+ readiness: z.ZodNullable<z.ZodObject<{
100
+ schemaVersion: z.ZodLiteral<1>;
101
+ profile: z.ZodEnum<{
102
+ HUMAN_ARTICLE_V1: "HUMAN_ARTICLE_V1";
103
+ KNOWLEDGE_CARD_V1: "KNOWLEDGE_CARD_V1";
104
+ }>;
105
+ ready: z.ZodBoolean;
106
+ reasons: z.ZodArray<z.ZodEnum<{
107
+ ROLE_MISMATCH: "ROLE_MISMATCH";
108
+ TITLE_REQUIRED: "TITLE_REQUIRED";
109
+ SUMMARY_REQUIRED: "SUMMARY_REQUIRED";
110
+ TEXT_TOO_SHORT: "TEXT_TOO_SHORT";
111
+ STRUCTURE_TOO_THIN: "STRUCTURE_TOO_THIN";
112
+ SOURCE_EVIDENCE_REQUIRED: "SOURCE_EVIDENCE_REQUIRED";
113
+ CITATION_COVERAGE_REQUIRED: "CITATION_COVERAGE_REQUIRED";
114
+ EVIDENCE_MISMATCH: "EVIDENCE_MISMATCH";
115
+ MEDIA_UNAVAILABLE: "MEDIA_UNAVAILABLE";
116
+ }>>;
117
+ metrics: z.ZodObject<{
118
+ textCharacters: z.ZodNumber;
119
+ blockCount: z.ZodNumber;
120
+ textBlockCount: z.ZodNumber;
121
+ mediaBlockCount: z.ZodNumber;
122
+ sourceEvidenceCount: z.ZodNumber;
123
+ citationCount: z.ZodNumber;
124
+ citedBlockCount: z.ZodNumber;
125
+ }, z.core.$strict>;
126
+ }, z.core.$strict>>;
127
+ reviewRef: z.ZodNullable<z.ZodString>;
128
+ reviewDecision: z.ZodNullable<z.ZodEnum<{
129
+ PASS: "PASS";
130
+ REWORK: "REWORK";
131
+ REJECT: "REJECT";
132
+ }>>;
133
+ support: z.ZodNullable<z.ZodObject<{
134
+ action: z.ZodEnum<{
135
+ ALLOW: "ALLOW";
136
+ REVIEW_REQUIRED: "REVIEW_REQUIRED";
137
+ DENY: "DENY";
138
+ }>;
139
+ reasonCodes: z.ZodArray<z.ZodString>;
140
+ missingEvidenceRefs: z.ZodArray<z.ZodString>;
141
+ }, z.core.$strict>>;
142
+ governedPolicyReady: z.ZodBoolean;
143
+ consumerReadDecision: z.ZodNullable<z.ZodObject<{
144
+ action: z.ZodEnum<{
145
+ ALLOW: "ALLOW";
146
+ REVIEW_REQUIRED: "REVIEW_REQUIRED";
147
+ DENY: "DENY";
148
+ }>;
149
+ reasonCodes: z.ZodArray<z.ZodString>;
150
+ authority: z.ZodEnum<{
151
+ AUTHENTICATED_READER: "AUTHENTICATED_READER";
152
+ LOCAL_PROFILE_SIMULATION: "LOCAL_PROFILE_SIMULATION";
153
+ }>;
154
+ }, z.core.$strict>>;
155
+ externalReady: z.ZodBoolean;
156
+ successorRef: z.ZodNullable<z.ZodString>;
157
+ blockers: z.ZodArray<z.ZodString>;
158
+ nextActions: z.ZodArray<z.ZodObject<{
159
+ id: z.ZodString;
160
+ tool: z.ZodNullable<z.ZodString>;
161
+ arguments: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
162
+ requiredScopes: z.ZodArray<z.ZodString>;
163
+ missingScopes: z.ZodArray<z.ZodString>;
164
+ missingFields: z.ZodArray<z.ZodString>;
165
+ canExecute: z.ZodBoolean;
166
+ automatic: z.ZodBoolean;
167
+ reasonCode: z.ZodString;
168
+ cli: z.ZodObject<{
169
+ command: z.ZodString;
170
+ flags: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
171
+ }, z.core.$strict>;
172
+ http: z.ZodObject<{
173
+ method: z.ZodLiteral<"POST">;
174
+ path: z.ZodLiteral<"/mcp/management">;
175
+ tool: z.ZodNullable<z.ZodString>;
176
+ }, z.core.$strict>;
177
+ }, z.core.$strict>>;
178
+ }, z.core.$strict>;
179
+ export declare const workflowAdvanceResultSchema: z.ZodObject<{
180
+ schemaVersion: z.ZodLiteral<1>;
181
+ action: z.ZodEnum<{
182
+ SUBMIT_REVIEW: "SUBMIT_REVIEW";
183
+ FINALIZE_REVIEW: "FINALIZE_REVIEW";
184
+ PREPARE_SOURCE: "PREPARE_SOURCE";
185
+ REGISTER: "REGISTER";
186
+ }>;
187
+ previousRef: z.ZodString;
188
+ inserted: z.ZodBoolean;
189
+ plan: z.ZodObject<{
190
+ schemaVersion: z.ZodLiteral<1>;
191
+ projectRef: z.ZodString;
192
+ ref: z.ZodString;
193
+ contentHash: z.ZodString;
194
+ kind: z.ZodString;
195
+ version: z.ZodNullable<z.ZodNumber>;
196
+ status: z.ZodUnion<[z.ZodEnum<{
197
+ GENERATED: "GENERATED";
198
+ DRAFT: "DRAFT";
199
+ READY_FOR_REVIEW: "READY_FOR_REVIEW";
200
+ REWORK_REQUIRED: "REWORK_REQUIRED";
201
+ APPROVED: "APPROVED";
202
+ REJECTED: "REJECTED";
203
+ SUPERSEDED: "SUPERSEDED";
204
+ }>, z.ZodEnum<{
205
+ RAW_MATERIAL: "RAW_MATERIAL";
206
+ RAW_EVIDENCE: "RAW_EVIDENCE";
207
+ }>]>;
208
+ productionPhase: z.ZodEnum<{
209
+ REGISTERED: "REGISTERED";
210
+ PERSISTED: "PERSISTED";
211
+ CATALOG_PROJECTED: "CATALOG_PROJECTED";
212
+ }>;
213
+ rawMaterialAvailable: z.ZodNullable<z.ZodBoolean>;
214
+ readiness: z.ZodNullable<z.ZodObject<{
215
+ schemaVersion: z.ZodLiteral<1>;
216
+ profile: z.ZodEnum<{
217
+ HUMAN_ARTICLE_V1: "HUMAN_ARTICLE_V1";
218
+ KNOWLEDGE_CARD_V1: "KNOWLEDGE_CARD_V1";
219
+ }>;
220
+ ready: z.ZodBoolean;
221
+ reasons: z.ZodArray<z.ZodEnum<{
222
+ ROLE_MISMATCH: "ROLE_MISMATCH";
223
+ TITLE_REQUIRED: "TITLE_REQUIRED";
224
+ SUMMARY_REQUIRED: "SUMMARY_REQUIRED";
225
+ TEXT_TOO_SHORT: "TEXT_TOO_SHORT";
226
+ STRUCTURE_TOO_THIN: "STRUCTURE_TOO_THIN";
227
+ SOURCE_EVIDENCE_REQUIRED: "SOURCE_EVIDENCE_REQUIRED";
228
+ CITATION_COVERAGE_REQUIRED: "CITATION_COVERAGE_REQUIRED";
229
+ EVIDENCE_MISMATCH: "EVIDENCE_MISMATCH";
230
+ MEDIA_UNAVAILABLE: "MEDIA_UNAVAILABLE";
231
+ }>>;
232
+ metrics: z.ZodObject<{
233
+ textCharacters: z.ZodNumber;
234
+ blockCount: z.ZodNumber;
235
+ textBlockCount: z.ZodNumber;
236
+ mediaBlockCount: z.ZodNumber;
237
+ sourceEvidenceCount: z.ZodNumber;
238
+ citationCount: z.ZodNumber;
239
+ citedBlockCount: z.ZodNumber;
240
+ }, z.core.$strict>;
241
+ }, z.core.$strict>>;
242
+ reviewRef: z.ZodNullable<z.ZodString>;
243
+ reviewDecision: z.ZodNullable<z.ZodEnum<{
244
+ PASS: "PASS";
245
+ REWORK: "REWORK";
246
+ REJECT: "REJECT";
247
+ }>>;
248
+ support: z.ZodNullable<z.ZodObject<{
249
+ action: z.ZodEnum<{
250
+ ALLOW: "ALLOW";
251
+ REVIEW_REQUIRED: "REVIEW_REQUIRED";
252
+ DENY: "DENY";
253
+ }>;
254
+ reasonCodes: z.ZodArray<z.ZodString>;
255
+ missingEvidenceRefs: z.ZodArray<z.ZodString>;
256
+ }, z.core.$strict>>;
257
+ governedPolicyReady: z.ZodBoolean;
258
+ consumerReadDecision: z.ZodNullable<z.ZodObject<{
259
+ action: z.ZodEnum<{
260
+ ALLOW: "ALLOW";
261
+ REVIEW_REQUIRED: "REVIEW_REQUIRED";
262
+ DENY: "DENY";
263
+ }>;
264
+ reasonCodes: z.ZodArray<z.ZodString>;
265
+ authority: z.ZodEnum<{
266
+ AUTHENTICATED_READER: "AUTHENTICATED_READER";
267
+ LOCAL_PROFILE_SIMULATION: "LOCAL_PROFILE_SIMULATION";
268
+ }>;
269
+ }, z.core.$strict>>;
270
+ externalReady: z.ZodBoolean;
271
+ successorRef: z.ZodNullable<z.ZodString>;
272
+ blockers: z.ZodArray<z.ZodString>;
273
+ nextActions: z.ZodArray<z.ZodObject<{
274
+ id: z.ZodString;
275
+ tool: z.ZodNullable<z.ZodString>;
276
+ arguments: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
277
+ requiredScopes: z.ZodArray<z.ZodString>;
278
+ missingScopes: z.ZodArray<z.ZodString>;
279
+ missingFields: z.ZodArray<z.ZodString>;
280
+ canExecute: z.ZodBoolean;
281
+ automatic: z.ZodBoolean;
282
+ reasonCode: z.ZodString;
283
+ cli: z.ZodObject<{
284
+ command: z.ZodString;
285
+ flags: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
286
+ }, z.core.$strict>;
287
+ http: z.ZodObject<{
288
+ method: z.ZodLiteral<"POST">;
289
+ path: z.ZodLiteral<"/mcp/management">;
290
+ tool: z.ZodNullable<z.ZodString>;
291
+ }, z.core.$strict>;
292
+ }, z.core.$strict>>;
293
+ }, z.core.$strict>;
294
+ }, z.core.$strict>;
295
+ export declare const workflowErrorSchema: z.ZodObject<{
296
+ errorCode: z.ZodString;
297
+ completedPhase: z.ZodOptional<z.ZodEnum<{
298
+ REGISTERED: "REGISTERED";
299
+ VALIDATED: "VALIDATED";
300
+ PERSISTED: "PERSISTED";
301
+ CATALOG_PROJECTED: "CATALOG_PROJECTED";
302
+ }>>;
303
+ ref: z.ZodOptional<z.ZodString>;
304
+ }, z.core.$strict>;
305
+ export declare const workflowToolInputSchemas: {
306
+ readonly knowledge_workflow_guide: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
307
+ projectRef: z.ZodString;
308
+ }, z.core.$strict>>;
309
+ readonly knowledge_workflow_plan: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
310
+ projectRef: z.ZodString;
311
+ ref: z.ZodString;
312
+ }, z.core.$strict>>;
313
+ readonly knowledge_workflow_advance: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
314
+ projectRef: z.ZodString;
315
+ ref: z.ZodString;
316
+ action: z.ZodEnum<{
317
+ SUBMIT_REVIEW: "SUBMIT_REVIEW";
318
+ FINALIZE_REVIEW: "FINALIZE_REVIEW";
319
+ PREPARE_SOURCE: "PREPARE_SOURCE";
320
+ REGISTER: "REGISTER";
321
+ }>;
322
+ expectedVersion: z.ZodOptional<z.ZodNumber>;
323
+ actedAt: z.ZodOptional<z.ZodISODateTime>;
324
+ }, z.core.$strict>>;
325
+ readonly knowledge_agent_submit: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
326
+ projectRef: z.ZodString;
327
+ sourceId: z.ZodString;
328
+ contentBase64: z.ZodString;
329
+ mediaType: z.ZodString;
330
+ access: z.ZodDefault<z.ZodEnum<{
331
+ PUBLIC: "PUBLIC";
332
+ TENANT: "TENANT";
333
+ INTERNAL: "INTERNAL";
334
+ FDE_INTERNAL: "FDE_INTERNAL";
335
+ }>>;
336
+ submittedAt: z.ZodOptional<z.ZodISODateTime>;
337
+ freshnessSeconds: z.ZodOptional<z.ZodNumber>;
338
+ }, z.core.$strict>>;
339
+ };
340
+ export declare const workflowToolScopes: {
341
+ readonly knowledge_workflow_guide: "knowledge.workflow.read";
342
+ readonly knowledge_workflow_plan: "knowledge.workflow.read";
343
+ readonly knowledge_workflow_advance: "knowledge.workflow.read";
344
+ readonly knowledge_agent_submit: "knowledge.material.write";
345
+ };
346
+ export declare const workflowActionScopes: {
347
+ readonly PREPARE_SOURCE: "knowledge.compose";
348
+ readonly SUBMIT_REVIEW: "knowledge.compose";
349
+ readonly FINALIZE_REVIEW: "knowledge.approve";
350
+ readonly REGISTER: "knowledge.material.write";
351
+ };
352
+ export type WorkflowPlan = z.infer<typeof workflowPlanSchema>;
353
+ export type WorkflowNextAction = z.infer<typeof workflowNextActionSchema>;
354
+ export type WorkflowAction = z.infer<typeof workflowActionSchema>;
355
+ export type WorkflowReadDecision = z.infer<typeof readDecision>;
356
+ /** 网络成功和失败共享可发现 schema,阶段包含已经完成注册后的尾部失败。 */
357
+ export declare const agentSubmitResultSchema: z.ZodObject<{
358
+ schemaVersion: z.ZodLiteral<1>;
359
+ production: z.ZodObject<{
360
+ phase: z.ZodEnum<{
361
+ REGISTERED: "REGISTERED";
362
+ CATALOG_PROJECTED: "CATALOG_PROJECTED";
363
+ }>;
364
+ ref: z.ZodString;
365
+ registered: z.ZodBoolean;
366
+ identity: z.ZodEnum<{
367
+ NOT_CONFIGURED: "NOT_CONFIGURED";
368
+ CONFIGURED: "CONFIGURED";
369
+ }>;
370
+ }, z.core.$strict>;
371
+ presentation: z.ZodNullable<z.ZodObject<{
372
+ documentRef: z.ZodString;
373
+ inserted: z.ZodBoolean;
374
+ contentHash: z.ZodString;
375
+ }, z.core.$strict>>;
376
+ evidenceRef: z.ZodString;
377
+ projectRef: z.ZodString;
378
+ contentHash: z.ZodString;
379
+ byteLength: z.ZodNumber;
380
+ inserted: z.ZodBoolean;
381
+ lifecycle: z.ZodLiteral<"QUEUED">;
382
+ contentClass: z.ZodLiteral<"RAW_EVIDENCE">;
383
+ nextStep: z.ZodObject<{
384
+ tool: z.ZodLiteral<"knowledge_workflow_plan">;
385
+ arguments: z.ZodObject<{
386
+ projectRef: z.ZodString;
387
+ ref: z.ZodString;
388
+ }, z.core.$strict>;
389
+ }, z.core.$strict>;
390
+ }, z.core.$strict>;
391
+ export declare const workflowToolOutputSchemas: {
392
+ readonly knowledge_workflow_guide: {
393
+ type: string;
394
+ oneOf: z.core.ZodStandardJSONSchemaPayload<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>[];
395
+ };
396
+ readonly knowledge_workflow_plan: {
397
+ type: string;
398
+ oneOf: z.core.ZodStandardJSONSchemaPayload<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>[];
399
+ };
400
+ readonly knowledge_workflow_advance: {
401
+ type: string;
402
+ oneOf: z.core.ZodStandardJSONSchemaPayload<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>[];
403
+ };
404
+ readonly knowledge_agent_submit: {
405
+ type: string;
406
+ oneOf: z.core.ZodStandardJSONSchemaPayload<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>[];
407
+ };
408
+ };
409
+ /** 同一份模型与参数 schema 供 CLI、MCP guide 和文档示例使用;不给 review 默认 PASS。 */
410
+ export declare function workflowGuide(): {
411
+ schemaVersion: number;
412
+ model: {
413
+ raw: string;
414
+ reviewed: string;
415
+ lifecycle: string[];
416
+ publication: string[];
417
+ };
418
+ rules: string[];
419
+ tools: Record<string, {
420
+ requiredScope: string;
421
+ inputSchema: unknown;
422
+ }>;
423
+ advanceScopes: {
424
+ readonly PREPARE_SOURCE: "knowledge.compose";
425
+ readonly SUBMIT_REVIEW: "knowledge.compose";
426
+ readonly FINALIZE_REVIEW: "knowledge.approve";
427
+ readonly REGISTER: "knowledge.material.write";
428
+ };
429
+ https: {
430
+ method: string;
431
+ path: string;
432
+ body: {
433
+ tool: string;
434
+ arguments: string;
435
+ };
436
+ authorization: string;
437
+ };
438
+ };
439
+ export {};
@@ -0,0 +1,37 @@
1
+ /** Agent 的治理合同描述真实状态和下一步,不把写入权限解释为审核或正文权限。 */
2
+ import { z } from 'zod';
3
+ import { artifactStatusSchema, idSchema, isoDateTimeSchema, publicationReadinessReportSchema, sha256Schema, stableUriSchema } from '../contracts/index.js';
4
+ import { consumerProjectRefSchema } from './consumer.js';
5
+ import { managementToolInputSchemas } from './management.js';
6
+ const project = z.object({ projectRef: consumerProjectRefSchema }).strict();
7
+ export const workflowPlanInputSchema = project.extend({ ref: stableUriSchema }).strict();
8
+ export const workflowGuideInputSchema = project;
9
+ export const workflowActionSchema = z.enum(['PREPARE_SOURCE', 'SUBMIT_REVIEW', 'FINALIZE_REVIEW', 'REGISTER']);
10
+ export const workflowAdvanceInputSchema = workflowPlanInputSchema.extend({ action: workflowActionSchema, expectedVersion: z.number().int().nonnegative().optional(), actedAt: isoDateTimeSchema.optional() }).strict().superRefine((value, ctx) => {
11
+ if (['SUBMIT_REVIEW', 'FINALIZE_REVIEW'].includes(value.action) && (!value.expectedVersion || !value.actedAt))
12
+ ctx.addIssue({ code: 'custom', message: 'transition requires exact expectedVersion and actedAt' });
13
+ });
14
+ export const agentSubmitInputSchema = project.extend({ sourceId: idSchema, contentBase64: z.string().min(1).max(87384), mediaType: z.string().trim().min(1).max(256), access: z.enum(['PUBLIC', 'TENANT', 'INTERNAL', 'FDE_INTERNAL']).default('TENANT'), submittedAt: isoDateTimeSchema.optional(), freshnessSeconds: z.number().int().min(60).max(86400).optional() }).strict();
15
+ const argumentsSchema = z.record(z.string(), z.json());
16
+ export const workflowNextActionSchema = z.object({ id: z.string(), tool: z.string().nullable(), arguments: argumentsSchema, requiredScopes: z.array(z.string()), missingScopes: z.array(z.string()), missingFields: z.array(z.string()), canExecute: z.boolean(), automatic: z.boolean(), reasonCode: z.string(), cli: z.object({ command: z.string(), flags: argumentsSchema }).strict(), http: z.object({ method: z.literal('POST'), path: z.literal('/mcp/management'), tool: z.string().nullable() }).strict() }).strict();
17
+ const readDecision = z.object({ action: z.enum(['ALLOW', 'REVIEW_REQUIRED', 'DENY']), reasonCodes: z.array(z.string()), authority: z.enum(['AUTHENTICATED_READER', 'LOCAL_PROFILE_SIMULATION']) }).strict();
18
+ export const workflowPlanSchema = z.object({ schemaVersion: z.literal(1), projectRef: consumerProjectRefSchema, ref: stableUriSchema, contentHash: sha256Schema, kind: z.string(), version: z.number().int().positive().nullable(), status: artifactStatusSchema.or(z.enum(['RAW_EVIDENCE', 'RAW_MATERIAL'])), productionPhase: z.enum(['PERSISTED', 'CATALOG_PROJECTED', 'REGISTERED']), rawMaterialAvailable: z.boolean().nullable(), readiness: publicationReadinessReportSchema.nullable(), reviewRef: stableUriSchema.nullable(), reviewDecision: z.enum(['PASS', 'REWORK', 'REJECT']).nullable(), support: z.object({ action: z.enum(['ALLOW', 'REVIEW_REQUIRED', 'DENY']), reasonCodes: z.array(z.string()), missingEvidenceRefs: z.array(stableUriSchema) }).strict().nullable(), governedPolicyReady: z.boolean(), consumerReadDecision: readDecision.nullable(), externalReady: z.boolean(), successorRef: stableUriSchema.nullable(), blockers: z.array(z.string()), nextActions: z.array(workflowNextActionSchema).max(70) }).strict();
19
+ export const workflowAdvanceResultSchema = z.object({ schemaVersion: z.literal(1), action: workflowActionSchema, previousRef: stableUriSchema, inserted: z.boolean(), plan: workflowPlanSchema }).strict();
20
+ export const workflowErrorSchema = z.object({ errorCode: z.string(), completedPhase: z.enum(['VALIDATED', 'PERSISTED', 'CATALOG_PROJECTED', 'REGISTERED']).optional(), ref: stableUriSchema.optional() }).strict();
21
+ export const workflowToolInputSchemas = { knowledge_workflow_guide: z.toJSONSchema(workflowGuideInputSchema, { target: 'draft-07' }), knowledge_workflow_plan: z.toJSONSchema(workflowPlanInputSchema, { target: 'draft-07' }), knowledge_workflow_advance: z.toJSONSchema(workflowAdvanceInputSchema, { target: 'draft-07' }), knowledge_agent_submit: z.toJSONSchema(agentSubmitInputSchema, { target: 'draft-07' }) };
22
+ export const workflowToolScopes = { knowledge_workflow_guide: 'knowledge.workflow.read', knowledge_workflow_plan: 'knowledge.workflow.read', knowledge_workflow_advance: 'knowledge.workflow.read', knowledge_agent_submit: 'knowledge.material.write' };
23
+ export const workflowActionScopes = { PREPARE_SOURCE: 'knowledge.compose', SUBMIT_REVIEW: 'knowledge.compose', FINALIZE_REVIEW: 'knowledge.approve', REGISTER: 'knowledge.material.write' };
24
+ /** 网络成功和失败共享可发现 schema,阶段包含已经完成注册后的尾部失败。 */
25
+ export const agentSubmitResultSchema = z.object({ schemaVersion: z.literal(1), production: z.object({ phase: z.enum(['CATALOG_PROJECTED', 'REGISTERED']), ref: stableUriSchema, registered: z.boolean(), identity: z.enum(['CONFIGURED', 'NOT_CONFIGURED']) }).strict(), presentation: z.object({ documentRef: stableUriSchema, inserted: z.boolean(), contentHash: sha256Schema }).strict().nullable(), evidenceRef: stableUriSchema, projectRef: consumerProjectRefSchema, contentHash: sha256Schema, byteLength: z.number().int().min(1).max(65536), inserted: z.boolean(), lifecycle: z.literal('QUEUED'), contentClass: z.literal('RAW_EVIDENCE'), nextStep: z.object({ tool: z.literal('knowledge_workflow_plan'), arguments: workflowPlanInputSchema }).strict() }).strict();
26
+ const guideSchema = z.object({ schemaVersion: z.literal(1), model: z.record(z.string(), z.json()), rules: z.array(z.string()), tools: z.record(z.string(), z.object({ requiredScope: z.string(), inputSchema: z.json() }).strict()), advanceScopes: z.record(z.string(), z.string()), https: z.json() }).strict();
27
+ const output = (success) => ({ type: 'object', oneOf: [z.toJSONSchema(success, { target: 'draft-07' }), z.toJSONSchema(workflowErrorSchema, { target: 'draft-07' })] });
28
+ export const workflowToolOutputSchemas = { knowledge_workflow_guide: output(guideSchema), knowledge_workflow_plan: output(workflowPlanSchema), knowledge_workflow_advance: output(workflowAdvanceResultSchema), knowledge_agent_submit: output(agentSubmitResultSchema) };
29
+ /** 同一份模型与参数 schema 供 CLI、MCP guide 和文档示例使用;不给 review 默认 PASS。 */
30
+ export function workflowGuide() {
31
+ const tools = {};
32
+ for (const [name, schema] of Object.entries(workflowToolInputSchemas))
33
+ tools[name] = { requiredScope: workflowToolScopes[name], inputSchema: schema };
34
+ for (const [name, schema] of Object.entries(managementToolInputSchemas))
35
+ tools[name] = { requiredScope: name === 'knowledge_review' ? 'knowledge.review' : name === 'knowledge_finalize_review' ? 'knowledge.approve' : 'knowledge.compose', inputSchema: schema };
36
+ return { schemaVersion: 1, model: { raw: 'Evidence / Material 保留原字节和 provenance;原文可读不等于结论已审核。', reviewed: 'KNOWLEDGE / INSIGHT', lifecycle: ['DRAFT', 'READY_FOR_REVIEW', 'REVIEW(PASS|REWORK|REJECT)', 'APPROVED|REWORK_REQUIRED|REJECTED'], publication: ['PERSISTED', 'CATALOG_PROJECTED', 'REGISTERED', 'consumer read ALLOW'] }, rules: ['先调用 knowledge_workflow_plan,再执行 canExecute 动作;缺字段由 Agent 补齐并重新计划。', '读取原文、核对引用和适用范围后,获授权 reviewer 显式写 PASS / REWORK / REJECT;不根据写入成功推断 PASS。', 'RESEARCH 先正式合成为 KNOWLEDGE / INSIGHT;Claim Currentness proposal 使用专门审核链。', 'freshnessSeconds 仅为作者在系统内首次保存的精确快照时效,不证明外部网页已复核;同身份重放不延长时效。', 'externalReady 需要注册、治理门通过及当前已鉴权消费者实际 read ALLOW;CLI profile 是模拟。', 'Plan 不提供正文或 Review summary;审核时使用独立 read scope 读取 exact ref。'], tools, advanceScopes: workflowActionScopes, https: { method: 'POST', path: '/mcp/management', body: { tool: 'tool name', arguments: '对应 inputSchema' }, authorization: 'OAuth Bearer + client/project binding;API key 不授予管理权限' } };
37
+ }
@@ -0,0 +1,18 @@
1
+ export interface MaterialStreamOptions {
2
+ range?: string;
3
+ head?: boolean;
4
+ signal?: AbortSignal;
5
+ expectedContentHash?: string;
6
+ }
7
+ export interface MaterialStreamResponse {
8
+ status: 200 | 206;
9
+ contentClass: string;
10
+ contentHash: string;
11
+ mediaType: string;
12
+ contentLength: number;
13
+ contentRange: string | null;
14
+ body: ReadableStream<Uint8Array> | null;
15
+ verification: 'SERVER_VERIFIED_BEFORE_HEADERS';
16
+ }
17
+ /** Streaming does not buffer large payloads; the whole-object hash is not a hash of a Range segment. */
18
+ export declare function materialStream(fetchImpl: typeof fetch, url: URL, token: string, options: MaterialStreamOptions): Promise<MaterialStreamResponse>;
@@ -0,0 +1,29 @@
1
+ /** Streaming does not buffer large payloads; the whole-object hash is not a hash of a Range segment. */
2
+ export async function materialStream(fetchImpl, url, token, options) {
3
+ const requested = options.range ? /^bytes=(\d*)-(\d*)$/.exec(options.range) : null;
4
+ if (options.range && (!requested || !requested[1] && !requested[2] || requested.slice(1).some(part => part !== '' && !Number.isSafeInteger(Number(part))) || !requested[1] && Number(requested[2]) === 0))
5
+ throw new Error('MATERIAL_STREAM_RANGE_INVALID');
6
+ const response = await fetchImpl(url, { method: options.head ? 'HEAD' : 'GET', headers: { authorization: `Bearer ${token}`, accept: 'application/octet-stream', ...(options.range ? { range: options.range } : {}) }, redirect: 'error', ...(options.signal ? { signal: options.signal } : {}) });
7
+ const fail = async (code) => { await response.body?.cancel(); throw new Error(code); };
8
+ if (response.status !== 200 && response.status !== 206)
9
+ return fail(`MATERIAL_STREAM_HTTP_${response.status}`);
10
+ const contentClass = response.headers.get('x-knowledge-content-class');
11
+ if (!contentClass || !['ARTIFACT_SNAPSHOT', 'RAW_EVIDENCE', 'RAW_EVIDENCE_MEDIA', 'REFERENCE_SNAPSHOT', 'REGISTERED_MATERIAL'].includes(contentClass))
12
+ return fail('MATERIAL_STREAM_CLASS_INVALID');
13
+ const hash = response.headers.get('x-knowledge-content-hash'), type = response.headers.get('content-type'), rawLength = response.headers.get('content-length'), contentRange = response.headers.get('content-range');
14
+ if (response.headers.get('x-knowledge-serving-action') !== 'ALLOW' || !hash || !/^sha256:[a-f0-9]{64}$/.test(hash) || !type || rawLength === null || !/^\d+$/.test(rawLength) || !Number.isSafeInteger(Number(rawLength)))
15
+ return fail('MATERIAL_STREAM_DESCRIPTOR_INVALID');
16
+ if (options.expectedContentHash && hash !== options.expectedContentHash)
17
+ return fail('MATERIAL_STREAM_IDENTITY_MISMATCH');
18
+ if (response.status === 206) {
19
+ const parts = /^bytes (\d+)-(\d+)\/(\d+)$/.exec(contentRange ?? '');
20
+ if (!requested || !parts || parts.slice(1).some(part => !Number.isSafeInteger(Number(part))) || Number(parts[1]) > Number(parts[2]) || Number(parts[2]) - Number(parts[1]) + 1 !== Number(rawLength) || Number(parts[2]) >= Number(parts[3]))
21
+ return fail('MATERIAL_STREAM_RANGE_RESPONSE_INVALID');
22
+ const total = Number(parts[3]), start = requested[1] ? Number(requested[1]) : Math.max(0, total - Number(requested[2])), end = requested[1] && requested[2] ? Math.min(total - 1, Number(requested[2])) : total - 1;
23
+ if (start !== Number(parts[1]) || end !== Number(parts[2]))
24
+ return fail('MATERIAL_STREAM_RANGE_RESPONSE_INVALID');
25
+ }
26
+ if (!options.head && !response.body && Number(rawLength) > 0)
27
+ return fail('MATERIAL_STREAM_BODY_MISSING');
28
+ return { status: response.status, contentClass, contentHash: hash, mediaType: type, contentLength: Number(rawLength), contentRange, body: response.body, verification: 'SERVER_VERIFIED_BEFORE_HEADERS' };
29
+ }