@native-knowledge/knowledge-sdk 0.1.0-rc.1 → 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 (206) hide show
  1. package/LICENSE +202 -21
  2. package/NOTICE +29 -0
  3. package/README.md +26 -38
  4. package/dist/{types/sdk/agent-entry.d.ts → agent-entry.d.ts} +3 -3
  5. package/dist/agent-entry.js +153 -0
  6. package/dist/{types/sdk/agent-guidance-error.d.ts → agent-guidance-error.d.ts} +1 -1
  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/{types/sdk/index.d.ts → index.d.ts} +15 -14
  11. package/dist/index.js +159 -6570
  12. package/dist/internal/contracts/artifact.js +103 -0
  13. package/dist/internal/contracts/collection-control.js +69 -0
  14. package/dist/internal/contracts/collection.js +174 -0
  15. package/dist/internal/contracts/common.js +16 -0
  16. package/dist/internal/contracts/currentness.js +221 -0
  17. package/dist/internal/contracts/event.js +35 -0
  18. package/dist/internal/contracts/evidence.js +171 -0
  19. package/dist/{types → internal}/contracts/index.d.ts +0 -1
  20. package/dist/internal/contracts/index.js +54 -0
  21. package/dist/internal/contracts/material-capability.js +8 -0
  22. package/dist/internal/contracts/material-carrier.js +15 -0
  23. package/dist/internal/contracts/material-context.js +9 -0
  24. package/dist/internal/contracts/material-read.js +12 -0
  25. package/dist/internal/contracts/observation.js +39 -0
  26. package/dist/internal/contracts/persistence.js +239 -0
  27. package/dist/internal/contracts/project-intent.js +121 -0
  28. package/dist/internal/contracts/projection.js +194 -0
  29. package/dist/internal/contracts/public-reference.js +87 -0
  30. package/dist/internal/contracts/reference-record.js +55 -0
  31. package/dist/internal/contracts/remote-file.js +159 -0
  32. package/dist/internal/contracts/resource-scope.js +38 -0
  33. package/dist/internal/contracts/review-packet.js +61 -0
  34. package/dist/internal/contracts/review-plane.js +89 -0
  35. package/dist/internal/contracts/rich-document.js +184 -0
  36. package/dist/internal/contracts/runtime-compatibility.js +55 -0
  37. package/dist/internal/contracts/runtime.js +68 -0
  38. package/dist/internal/contracts/scheduler.js +256 -0
  39. package/dist/internal/contracts/signal.js +77 -0
  40. package/dist/internal/contracts/source-governance.js +194 -0
  41. package/dist/internal/contracts/source.js +32 -0
  42. package/dist/internal/contracts/tenant-budget.js +34 -0
  43. package/dist/internal/contracts/tenant-collection-request.js +58 -0
  44. package/dist/internal/contracts/tenant-collection.js +66 -0
  45. package/dist/internal/contracts/tenant-currentness.js +26 -0
  46. package/dist/internal/contracts/tenant-management.js +27 -0
  47. package/dist/internal/contracts/tenant-material-api.js +46 -0
  48. package/dist/internal/contracts/tenant-material-json-schema.js +16 -0
  49. package/dist/internal/contracts/tenant-pdf-text.js +13 -0
  50. package/dist/internal/contracts/tenant-project-control.js +19 -0
  51. package/dist/internal/contracts/tenant-public-reference.js +26 -0
  52. package/dist/internal/contracts/tenant-resource-api.js +70 -0
  53. package/dist/internal/contracts/tenant-resource.js +118 -0
  54. package/dist/internal/contracts/tenant-rich-document.js +17 -0
  55. package/dist/internal/contracts/tenant-source-binding.js +33 -0
  56. package/dist/internal/contracts/tenant-source-bridge.js +9 -0
  57. package/dist/internal/contracts/tenant-source-cutover.js +26 -0
  58. package/dist/internal/contracts/tenant-source-document.js +38 -0
  59. package/dist/internal/contracts/tenant-source-lease.js +5 -0
  60. package/dist/internal/contracts/tenant-source.js +83 -0
  61. package/dist/internal/contracts/tenant-web-collection.js +118 -0
  62. package/dist/internal/contracts/tenant-web-content-plan.js +39 -0
  63. package/dist/internal/contracts/tenant-web-content-result.js +15 -0
  64. package/dist/internal/contracts/tenant-web-content.js +16 -0
  65. package/dist/internal/contracts/tenant-web-crawl.js +55 -0
  66. package/dist/internal/contracts/tenant-web-dynamic.js +68 -0
  67. package/dist/internal/contracts/tenant-web-results.js +41 -0
  68. package/dist/internal/contracts/tenant-web-workflow.js +29 -0
  69. package/dist/internal/serving-contracts/agent-catalog.js +56 -0
  70. package/dist/internal/serving-contracts/agent-entry.js +57 -0
  71. package/dist/internal/serving-contracts/agent-guidance-shapes.js +12 -0
  72. package/dist/internal/serving-contracts/agent-input-hints.js +104 -0
  73. package/dist/internal/serving-contracts/body-search.js +16 -0
  74. package/dist/internal/serving-contracts/consumer.js +45 -0
  75. package/dist/internal/serving-contracts/core.js +76 -0
  76. package/dist/internal/serving-contracts/http.js +64 -0
  77. package/dist/{types → internal}/serving-contracts/index.d.ts +1 -0
  78. package/dist/internal/serving-contracts/index.js +25 -0
  79. package/dist/internal/serving-contracts/management.js +15 -0
  80. package/dist/internal/serving-contracts/material-capabilities.js +14 -0
  81. package/dist/internal/serving-contracts/material-index-status.js +5 -0
  82. package/dist/internal/serving-contracts/mcp.js +140 -0
  83. package/dist/internal/serving-contracts/tenant-governance.js +13 -0
  84. package/dist/internal/serving-contracts/tenant-management.js +89 -0
  85. package/dist/internal/serving-contracts/tenant-project.js +39 -0
  86. package/dist/internal/serving-contracts/tenant-runtime.js +37 -0
  87. package/dist/internal/serving-contracts/tenant-session.d.ts +87 -0
  88. package/dist/internal/serving-contracts/tenant-session.js +8 -0
  89. package/dist/internal/serving-contracts/tenant-web-content.js +20 -0
  90. package/dist/internal/serving-contracts/tenant-web-crawl.js +13 -0
  91. package/dist/internal/serving-contracts/tenant-web-dynamic.js +20 -0
  92. package/dist/internal/serving-contracts/tenant-web-workflow.js +36 -0
  93. package/dist/internal/serving-contracts/tenant-web.js +53 -0
  94. package/dist/internal/serving-contracts/tenant-workspace.js +28 -0
  95. package/dist/internal/serving-contracts/workflow.js +37 -0
  96. package/dist/material-stream.js +29 -0
  97. package/dist/{types/sdk/oauth.d.ts → oauth.d.ts} +18 -18
  98. package/dist/oauth.js +539 -0
  99. package/dist/{types/sdk/resource.d.ts → resource.d.ts} +5 -5
  100. package/dist/resource.js +123 -0
  101. package/dist/session.d.ts +4 -0
  102. package/dist/session.js +3 -0
  103. package/dist/tenant-client.d.ts +169 -0
  104. package/dist/tenant-client.js +58 -0
  105. package/dist/{types/sdk/tenant-management.d.ts → tenant-management.d.ts} +6 -6
  106. package/dist/tenant-management.js +149 -0
  107. package/dist/{types/sdk/tenant-project.d.ts → tenant-project.d.ts} +1 -1
  108. package/dist/tenant-project.js +63 -0
  109. package/dist/{types/sdk/tenant-runtime.d.ts → tenant-runtime.d.ts} +1 -1
  110. package/dist/tenant-runtime.js +17 -0
  111. package/dist/{types/sdk/tenant-web-content.d.ts → tenant-web-content.d.ts} +1 -1
  112. package/dist/tenant-web-content.js +70 -0
  113. package/dist/{types/sdk/tenant-web-crawl.d.ts → tenant-web-crawl.d.ts} +1 -1
  114. package/dist/tenant-web-crawl.js +39 -0
  115. package/dist/{types/sdk/tenant-web-dynamic.d.ts → tenant-web-dynamic.d.ts} +1 -1
  116. package/dist/tenant-web-dynamic.js +39 -0
  117. package/dist/{types/sdk/tenant-web-workflow.d.ts → tenant-web-workflow.d.ts} +1 -1
  118. package/dist/tenant-web-workflow.js +63 -0
  119. package/dist/{types/sdk/tenant-web.d.ts → tenant-web.d.ts} +1 -1
  120. package/dist/tenant-web.js +39 -0
  121. package/dist/{types/sdk/tenant-workspace.d.ts → tenant-workspace.d.ts} +1 -1
  122. package/dist/tenant-workspace.js +21 -0
  123. package/dist/token-provider.d.ts +14 -0
  124. package/dist/token-provider.js +21 -0
  125. package/package.json +27 -15
  126. package/dist/types/contracts/resource-transfer.d.ts +0 -24
  127. package/dist/types/sdk/resource-integrity.d.ts +0 -21
  128. package/dist/types/sdk/transport.d.ts +0 -16
  129. /package/dist/{types → internal}/contracts/artifact.d.ts +0 -0
  130. /package/dist/{types → internal}/contracts/collection-control.d.ts +0 -0
  131. /package/dist/{types → internal}/contracts/collection.d.ts +0 -0
  132. /package/dist/{types → internal}/contracts/common.d.ts +0 -0
  133. /package/dist/{types → internal}/contracts/currentness.d.ts +0 -0
  134. /package/dist/{types → internal}/contracts/event.d.ts +0 -0
  135. /package/dist/{types → internal}/contracts/evidence.d.ts +0 -0
  136. /package/dist/{types → internal}/contracts/material-capability.d.ts +0 -0
  137. /package/dist/{types → internal}/contracts/material-carrier.d.ts +0 -0
  138. /package/dist/{types → internal}/contracts/material-context.d.ts +0 -0
  139. /package/dist/{types → internal}/contracts/material-read.d.ts +0 -0
  140. /package/dist/{types → internal}/contracts/observation.d.ts +0 -0
  141. /package/dist/{types → internal}/contracts/persistence.d.ts +0 -0
  142. /package/dist/{types → internal}/contracts/project-intent.d.ts +0 -0
  143. /package/dist/{types → internal}/contracts/projection.d.ts +0 -0
  144. /package/dist/{types → internal}/contracts/public-reference.d.ts +0 -0
  145. /package/dist/{types → internal}/contracts/reference-record.d.ts +0 -0
  146. /package/dist/{types → internal}/contracts/remote-file.d.ts +0 -0
  147. /package/dist/{types → internal}/contracts/resource-scope.d.ts +0 -0
  148. /package/dist/{types → internal}/contracts/review-packet.d.ts +0 -0
  149. /package/dist/{types → internal}/contracts/review-plane.d.ts +0 -0
  150. /package/dist/{types → internal}/contracts/rich-document.d.ts +0 -0
  151. /package/dist/{types → internal}/contracts/runtime-compatibility.d.ts +0 -0
  152. /package/dist/{types → internal}/contracts/runtime.d.ts +0 -0
  153. /package/dist/{types → internal}/contracts/scheduler.d.ts +0 -0
  154. /package/dist/{types → internal}/contracts/signal.d.ts +0 -0
  155. /package/dist/{types → internal}/contracts/source-governance.d.ts +0 -0
  156. /package/dist/{types → internal}/contracts/source.d.ts +0 -0
  157. /package/dist/{types → internal}/contracts/tenant-budget.d.ts +0 -0
  158. /package/dist/{types → internal}/contracts/tenant-collection-request.d.ts +0 -0
  159. /package/dist/{types → internal}/contracts/tenant-collection.d.ts +0 -0
  160. /package/dist/{types → internal}/contracts/tenant-currentness.d.ts +0 -0
  161. /package/dist/{types → internal}/contracts/tenant-management.d.ts +0 -0
  162. /package/dist/{types → internal}/contracts/tenant-material-api.d.ts +0 -0
  163. /package/dist/{types → internal}/contracts/tenant-pdf-text.d.ts +0 -0
  164. /package/dist/{types → internal}/contracts/tenant-project-control.d.ts +0 -0
  165. /package/dist/{types → internal}/contracts/tenant-public-reference.d.ts +0 -0
  166. /package/dist/{types → internal}/contracts/tenant-resource-api.d.ts +0 -0
  167. /package/dist/{types → internal}/contracts/tenant-resource.d.ts +0 -0
  168. /package/dist/{types → internal}/contracts/tenant-rich-document.d.ts +0 -0
  169. /package/dist/{types → internal}/contracts/tenant-source-binding.d.ts +0 -0
  170. /package/dist/{types → internal}/contracts/tenant-source-bridge.d.ts +0 -0
  171. /package/dist/{types → internal}/contracts/tenant-source-cutover.d.ts +0 -0
  172. /package/dist/{types → internal}/contracts/tenant-source-document.d.ts +0 -0
  173. /package/dist/{types → internal}/contracts/tenant-source-lease.d.ts +0 -0
  174. /package/dist/{types → internal}/contracts/tenant-source.d.ts +0 -0
  175. /package/dist/{types → internal}/contracts/tenant-web-collection.d.ts +0 -0
  176. /package/dist/{types → internal}/contracts/tenant-web-content-plan.d.ts +0 -0
  177. /package/dist/{types → internal}/contracts/tenant-web-content-result.d.ts +0 -0
  178. /package/dist/{types → internal}/contracts/tenant-web-content.d.ts +0 -0
  179. /package/dist/{types → internal}/contracts/tenant-web-crawl.d.ts +0 -0
  180. /package/dist/{types → internal}/contracts/tenant-web-dynamic.d.ts +0 -0
  181. /package/dist/{types → internal}/contracts/tenant-web-results.d.ts +0 -0
  182. /package/dist/{types → internal}/contracts/tenant-web-workflow.d.ts +0 -0
  183. /package/dist/{types → internal}/serving-contracts/agent-catalog.d.ts +0 -0
  184. /package/dist/{types → internal}/serving-contracts/agent-entry.d.ts +0 -0
  185. /package/dist/{types → internal}/serving-contracts/agent-guidance-shapes.d.ts +0 -0
  186. /package/dist/{types → internal}/serving-contracts/agent-input-hints.d.ts +0 -0
  187. /package/dist/{types → internal}/serving-contracts/body-search.d.ts +0 -0
  188. /package/dist/{types → internal}/serving-contracts/consumer.d.ts +0 -0
  189. /package/dist/{types → internal}/serving-contracts/core.d.ts +0 -0
  190. /package/dist/{types → internal}/serving-contracts/http.d.ts +0 -0
  191. /package/dist/{types → internal}/serving-contracts/management.d.ts +0 -0
  192. /package/dist/{types → internal}/serving-contracts/material-capabilities.d.ts +0 -0
  193. /package/dist/{types → internal}/serving-contracts/material-index-status.d.ts +0 -0
  194. /package/dist/{types → internal}/serving-contracts/mcp.d.ts +0 -0
  195. /package/dist/{types → internal}/serving-contracts/tenant-governance.d.ts +0 -0
  196. /package/dist/{types → internal}/serving-contracts/tenant-management.d.ts +0 -0
  197. /package/dist/{types → internal}/serving-contracts/tenant-project.d.ts +0 -0
  198. /package/dist/{types → internal}/serving-contracts/tenant-runtime.d.ts +0 -0
  199. /package/dist/{types → internal}/serving-contracts/tenant-web-content.d.ts +0 -0
  200. /package/dist/{types → internal}/serving-contracts/tenant-web-crawl.d.ts +0 -0
  201. /package/dist/{types → internal}/serving-contracts/tenant-web-dynamic.d.ts +0 -0
  202. /package/dist/{types → internal}/serving-contracts/tenant-web-workflow.d.ts +0 -0
  203. /package/dist/{types → internal}/serving-contracts/tenant-web.d.ts +0 -0
  204. /package/dist/{types → internal}/serving-contracts/tenant-workspace.d.ts +0 -0
  205. /package/dist/{types → internal}/serving-contracts/workflow.d.ts +0 -0
  206. /package/dist/{types/sdk/material-stream.d.ts → material-stream.d.ts} +0 -0
@@ -0,0 +1,36 @@
1
+ /** Explicit Provider25 operations; earlier registries remain frozen. */
2
+ import { z } from 'zod';
3
+ import { tenantWebWorkflowStatusSchema, tenantWebScheduleSchema, tenantWebControlInputSchema, tenantWebLifecycleReceiptSchema, tenantWebWorkflowJobSchema, tenantWebContentOutcomeSchema, tenantWebJobRefSchema, tenantCollectionCycleSchema, tenantResourceRefSchema, sha256Schema, isoDateTimeSchema, materialTenantIdSchema, tenantStorageKey, resourceDataSchemas } from '../contracts/index.js';
4
+ import { tenantWebContentToolSchemas, tenantWebContentDataSchemas, tenantWebContentWorkspaceToolSchemas, tenantWebContentProviderSchema, tenantWebContentErrorSchema } from './tenant-web-content.js';
5
+ import { tenantWebScopesForInput } from './tenant-web.js';
6
+ import { tenantRuntimeEnvelopeSchema } from './tenant-runtime.js';
7
+ const count = z.number().int().nonnegative().safe(), cursor = z.string().min(1).max(4096), job = z.object({ jobRef: tenantWebJobRefSchema }).strict(), page = job.extend({ after: cursor.optional(), limit: z.number().int().min(1).max(100).default(20) }), schedule = tenantWebScheduleSchema.default({ mode: 'ONCE' }), observation = z.object({ ref: tenantResourceRefSchema, contentHash: sha256Schema, sourceUrl: z.string().url(), observedAt: isoDateTimeSchema }).strict().nullable();
8
+ export const tenantWebWorkflowToolSchemas = {
9
+ tenant_web_collect_preview: tenantWebContentToolSchemas.tenant_web_collect_preview.extend({ schedule }),
10
+ tenant_web_collect_submit: tenantWebContentToolSchemas.tenant_web_collect_submit.extend({ schedule }),
11
+ tenant_web_collect_status: job, tenant_web_collect_results: page, tenant_web_collect_cycles: page,
12
+ tenant_web_collect_control: tenantWebControlInputSchema,
13
+ tenant_web_collect_refresh: job.extend({ requestId: tenantCollectionCycleSchema, expectedEpoch: count }),
14
+ tenant_web_collect_read: job.extend({ kind: z.enum(['ORIGINAL', 'DOM', 'RESULT']), index: count.max(21999), stateIndex: count.max(100).optional() }).refine(v => v.kind === 'DOM' ? v.stateIndex !== undefined : v.stateIndex === undefined),
15
+ tenant_web_collect_index_status: z.object({}).strict(),
16
+ };
17
+ export const tenantWebWorkflowWorkspaceToolSchemas = { ...tenantWebContentWorkspaceToolSchemas, ...tenantWebWorkflowToolSchemas };
18
+ export function tenantWebWorkflowScopesForInput(name, raw) { if (!Object.hasOwn(tenantWebWorkflowToolSchemas, name))
19
+ return tenantWebScopesForInput(name, raw); tenantWebWorkflowToolSchemas[name].parse(raw); return name === 'tenant_web_collect_read' || name === 'tenant_web_collect_index_status' ? ['knowledge.collect', 'knowledge.material.read'] : ['tenant_web_collect_status', 'tenant_web_collect_results', 'tenant_web_collect_cycles'].includes(name) ? ['knowledge.collect'] : ['knowledge.collect', 'knowledge.source.manage']; }
20
+ export const tenantWebWorkflowDataSchemas = {
21
+ tenant_web_collect_preview: tenantWebContentDataSchemas.tenant_web_collect_preview.safeExtend({ schedule: tenantWebScheduleSchema }),
22
+ tenant_web_collect_submit: z.object({ inserted: z.boolean(), job: tenantWebWorkflowStatusSchema }).strict(),
23
+ tenant_web_collect_status: tenantWebWorkflowStatusSchema,
24
+ tenant_web_collect_results: job.extend({ items: z.array(tenantWebContentOutcomeSchema.safeExtend({ original: observation, observation })).max(100), through: count, nextAfter: cursor.nullable(), available: count, terminal: z.boolean() }),
25
+ tenant_web_collect_cycles: job.extend({ rootJobRef: tenantWebJobRefSchema, items: z.array(z.object({ jobRef: tenantWebJobRefSchema, cycle: tenantWebWorkflowJobSchema.shape.cycle, submittedAt: isoDateTimeSchema }).strict()).max(100), through: count, nextAfter: cursor.nullable() }),
26
+ tenant_web_collect_control: z.object({ replayed: z.boolean(), receipt: tenantWebLifecycleReceiptSchema, job: tenantWebWorkflowStatusSchema }).strict(),
27
+ tenant_web_collect_refresh: z.object({ inserted: z.boolean(), job: tenantWebWorkflowStatusSchema }).strict(),
28
+ tenant_web_collect_read: job.extend({ ref: tenantResourceRefSchema, result: resourceDataSchemas.knowledge_resource_read }),
29
+ tenant_web_collect_index_status: resourceDataSchemas.knowledge_resource_index_status,
30
+ };
31
+ export const tenantWebWorkflowErrorSchema = tenantWebContentErrorSchema.extend({ completedPhase: z.enum([...tenantWebContentErrorSchema.shape.completedPhase.unwrap().options, 'WEB_CONTROL_COMMITTED']).optional(), errorCode: z.enum([...tenantWebContentErrorSchema.shape.errorCode.options, 'TENANT_WEB_CONTROL_CONFLICT', 'TENANT_WEB_CANCELLED', 'TENANT_WEB_PAUSED', 'TENANT_WEB_CYCLE_PENDING', 'TENANT_WEB_RUNTIME_OR_DELEGATION_UNAVAILABLE']) }).strict();
32
+ export function tenantWebWorkflowEnvelopeSchema(tool) { return z.object({ schemaVersion: z.literal(2), tenantId: materialTenantIdSchema, tool: z.literal(tool), data: tenantWebWorkflowDataSchemas[tool] }).strict().superRefine((v, c) => { const d = v.data, key = tenantStorageKey(v.tenantId); if ([d.jobRef, d.rootJobRef, d.job?.jobRef, ...(d.items ?? []).map(i => i.jobRef)].some(ref => ref && !ref.startsWith('tenant-web-collection://' + key + '/')) || [d.ref, ...(d.items ?? []).flatMap(i => [i.documentRef, i.original?.ref, i.observation?.ref])].some(ref => ref && !ref.startsWith('tenant-resource://' + key + '/')) || d.result?.item && (d.result.item.ownerTenantId !== v.tenantId || d.result.item.ref !== d.ref))
33
+ c.addIssue({ code: 'custom', message: 'Exact Tenant workflow/result identity required' }); }); }
34
+ export const tenantWebWorkflowInputJsonSchemas = Object.fromEntries(Object.entries(tenantWebWorkflowWorkspaceToolSchemas).map(([n, s]) => [n, z.toJSONSchema(s, { target: 'draft-07' })]));
35
+ export const tenantWebWorkflowOutputJsonSchemas = Object.fromEntries(Object.keys(tenantWebWorkflowWorkspaceToolSchemas).map(n => [n, { type: 'object', oneOf: [z.toJSONSchema(Object.hasOwn(tenantWebWorkflowToolSchemas, n) ? tenantWebWorkflowEnvelopeSchema(n) : tenantRuntimeEnvelopeSchema(n), { target: 'draft-07' }), z.toJSONSchema(tenantWebWorkflowErrorSchema, { target: 'draft-07' })] }]));
36
+ export const tenantWebWorkflowProviderSchema = z.object({ ...tenantWebContentProviderSchema.shape, schemaVersion: z.literal(25), collectionMode: z.literal('EXPLICIT_HOST_WITH_OPT_IN_DUE'), tools: z.array(z.string()).length(Object.keys(tenantWebWorkflowWorkspaceToolSchemas).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'), z.literal('TENANT_PROJECT_CONTEXT_V1'), z.literal('TENANT_RUNTIME_STATUS_V1'), z.literal('TENANT_WEB_COLLECTION_SPEC_V1'), z.literal('TENANT_WEB_CRAWL_V1'), z.literal('TENANT_WEB_DYNAMIC_V1'), z.literal('TENANT_WEB_CONTENT_V1'), z.literal('TENANT_WEB_WORKFLOW_V1')]) }).strict().refine(v => new Set(v.tools).size === Object.keys(tenantWebWorkflowWorkspaceToolSchemas).length && v.tools.every(t => Object.hasOwn(tenantWebWorkflowWorkspaceToolSchemas, t)));
@@ -0,0 +1,53 @@
1
+ /** Provider21 增量能力;17–20 的注册表、默认版本和既有错误合同保持。 */
2
+ import { z } from 'zod';
3
+ import { tenantWebSpecSchema, tenantWebSummarySchema, tenantWebJobRefSchema, tenantWebSpecRevision, tenantCollectionCycleSchema, materialTenantIdSchema, tenantStorageKey, TENANT_WEB_SPEC_CAPABILITY } from '../contracts/index.js';
4
+ import { tenantRuntimeWorkspaceToolSchemas, tenantRuntimeWorkspaceDataSchemas, tenantRuntimeEnvelopeSchema, tenantRuntimeProviderSchema, tenantRuntimeScopesForInput, tenantRuntimeAuthorization } from './tenant-runtime.js';
5
+ import { tenantProjectErrorSchema } from './tenant-project.js';
6
+ import { tenantManagementSafeErrorRef } from './tenant-management.js';
7
+ export const tenantWebToolSchemas = {
8
+ tenant_web_collect_preview: z.object({ spec: tenantWebSpecSchema }).strict(),
9
+ tenant_web_collect_submit: z.object({ requestId: tenantCollectionCycleSchema, spec: tenantWebSpecSchema }).strict(),
10
+ tenant_web_collect_status: z.object({ jobRef: tenantWebJobRefSchema }).strict(),
11
+ };
12
+ export const tenantWebDataSchemas = {
13
+ tenant_web_collect_preview: z.object({ spec: tenantWebSpecSchema, specRevision: tenantWebSummarySchema.shape.specRevision, networkValidated: z.literal(false), budgetReserved: z.literal(false), execution: z.literal('UNAVAILABLE'), reason: z.literal('S2_NOT_IMPLEMENTED'), requirementsState: z.literal('DECLARED_NOT_EVALUATED') }).strict().superRefine((v, ctx) => { if (v.specRevision !== tenantWebSpecRevision(v.spec))
14
+ ctx.addIssue({ code: 'custom', message: 'Preview specification identity mismatch' }); }),
15
+ tenant_web_collect_submit: z.object({ inserted: z.boolean(), job: tenantWebSummarySchema }).strict(),
16
+ tenant_web_collect_status: tenantWebSummarySchema,
17
+ };
18
+ export const tenantWebWorkspaceToolSchemas = { ...tenantRuntimeWorkspaceToolSchemas, ...tenantWebToolSchemas };
19
+ export const tenantWebWorkspaceDataSchemas = { ...tenantRuntimeWorkspaceDataSchemas, ...tenantWebDataSchemas };
20
+ export const tenantWebErrorSchema = tenantProjectErrorSchema.extend({ completedPhase: z.enum([...tenantProjectErrorSchema.shape.completedPhase.unwrap().options, 'WEB_INTENT_PERSISTED']).optional() }).strict();
21
+ export function tenantWebSafeErrorRef(raw, tenantId) {
22
+ if (typeof raw === 'string' && new RegExp('^tenant-web-collection://' + tenantStorageKey(tenantId) + '/[a-f0-9]{64}$').test(raw))
23
+ return raw;
24
+ return tenantManagementSafeErrorRef(raw, tenantId);
25
+ }
26
+ export function tenantWebScopesForInput(name, raw) {
27
+ if (Object.hasOwn(tenantWebToolSchemas, name)) {
28
+ tenantWebToolSchemas[name].parse(raw);
29
+ return name === 'tenant_web_collect_status' ? ['knowledge.collect'] : ['knowledge.source.manage', 'knowledge.collect'];
30
+ }
31
+ return tenantRuntimeScopesForInput(name, raw);
32
+ }
33
+ export function tenantWebAuthorization(name) {
34
+ if (Object.hasOwn(tenantWebToolSchemas, name))
35
+ return { selection: 'FIXED', scopeAlternatives: [name === 'tenant_web_collect_status' ? ['knowledge.collect'] : ['knowledge.source.manage', 'knowledge.collect']] };
36
+ return tenantRuntimeAuthorization(name);
37
+ }
38
+ export function tenantWebEnvelopeSchema(tool) {
39
+ return z.object({ schemaVersion: z.literal(2), tenantId: materialTenantIdSchema, tool: z.literal(tool), data: tenantWebDataSchemas[tool] }).strict().superRefine((value, ctx) => {
40
+ const envelope = value, ref = envelope.data.jobRef ?? envelope.data.job?.jobRef;
41
+ if (ref && !ref.startsWith('tenant-web-collection://' + tenantStorageKey(envelope.tenantId) + '/'))
42
+ ctx.addIssue({ code: 'custom', message: 'Web intent must belong to the exact authenticated Tenant' });
43
+ });
44
+ }
45
+ export const tenantWebInputJsonSchemas = Object.fromEntries(Object.entries(tenantWebWorkspaceToolSchemas).map(([name, schema]) => [name, z.toJSONSchema(schema, { target: 'draft-07' })]));
46
+ export const tenantWebOutputJsonSchemas = Object.fromEntries(Object.keys(tenantWebWorkspaceToolSchemas).map(name => [name, { type: 'object', oneOf: [z.toJSONSchema(Object.hasOwn(tenantWebToolSchemas, name) ? tenantWebEnvelopeSchema(name) : tenantRuntimeEnvelopeSchema(name), { target: 'draft-07' }), z.toJSONSchema(tenantWebErrorSchema, { target: 'draft-07' })] }]));
47
+ export const tenantWebProviderSchema = z.object({ ...tenantRuntimeProviderSchema.shape,
48
+ schemaVersion: z.literal(21), tools: z.array(z.string()).length(Object.keys(tenantWebWorkspaceToolSchemas).length),
49
+ 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'), z.literal('TENANT_PROJECT_CONTEXT_V1'), z.literal('TENANT_RUNTIME_STATUS_V1'), z.literal(TENANT_WEB_SPEC_CAPABILITY)]),
50
+ }).strict().superRefine((value, ctx) => {
51
+ if (new Set(value.tools).size !== Object.keys(tenantWebWorkspaceToolSchemas).length || value.tools.some(name => !Object.hasOwn(tenantWebWorkspaceToolSchemas, name)))
52
+ ctx.addIssue({ code: 'custom', message: 'Provider21 tools must match the exact versioned registry' });
53
+ });
@@ -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,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,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
+ }
@@ -1,10 +1,11 @@
1
- import { type SdkTransportOptions } from './transport.js';
1
+ import { type TokenProvider } from './token-provider.js';
2
2
  import { type MaterialStreamOptions } from './material-stream.js';
3
- import { type KnowledgeMcpProviderContractV12 } from '../serving-contracts/index.js';
4
- import { type KnowledgeMcpProviderContractV11, type MaterialOutboxWindow, type KnowledgeMcpProviderContractV3, type KnowledgeMcpProviderContractV6, type KnowledgeMcpProviderContractV7, type KnowledgeMcpProviderContractV8, type KnowledgeMcpProviderContractV9, type KnowledgeMcpProviderContractV10, type OAuthMaterialPageResponse, type OAuthMaterialRoutePageResponse, type OAuthMaterialPartitionsResponse, type OAuthMaterialPartitionPageResponse, type OAuthMaterialPresentationResponse, type ServingDecision } from '../serving-contracts/index.js';
5
- export interface KnowledgeOAuthFileClientOptions extends SdkTransportOptions {
3
+ import { type KnowledgeMcpProviderContractV12 } from './internal/serving-contracts/index.js';
4
+ import { type KnowledgeMcpProviderContractV11, type MaterialOutboxWindow, type KnowledgeMcpProviderContractV3, type KnowledgeMcpProviderContractV6, type KnowledgeMcpProviderContractV7, type KnowledgeMcpProviderContractV8, type KnowledgeMcpProviderContractV9, type KnowledgeMcpProviderContractV10, type OAuthMaterialPageResponse, type OAuthMaterialRoutePageResponse, type OAuthMaterialPartitionsResponse, type OAuthMaterialPartitionPageResponse, type OAuthMaterialPresentationResponse, type ServingDecision } from './internal/serving-contracts/index.js';
5
+ export interface KnowledgeOAuthFileClientOptions {
6
6
  baseUrl: string;
7
- token: string;
7
+ token?: string;
8
+ tokenProvider?: TokenProvider;
8
9
  projectRef: string;
9
10
  fetchImpl?: typeof fetch;
10
11
  allowInsecureHttp?: boolean;
@@ -23,10 +24,9 @@ export type OAuthFileResult = {
23
24
  error: string;
24
25
  };
25
26
  export declare class KnowledgeOAuthFileClient {
26
- private readonly limits;
27
27
  readonly projectRef: string;
28
28
  private readonly root;
29
- private readonly token;
29
+ private readonly credentials;
30
30
  private readonly fetchImpl;
31
31
  private providerPromise;
32
32
  private materialProviderPromise;
@@ -59,19 +59,19 @@ export declare class KnowledgeOAuthFileClient {
59
59
  sourceProjectKey: string;
60
60
  identityHash: string;
61
61
  kind: string;
62
- classification: "PUBLIC" | "PUBLIC_METADATA" | "TENANT" | "INTERNAL" | "FDE_INTERNAL" | "ACCESS_CONTROLLED" | "UNKNOWN";
62
+ classification: "TENANT" | "PUBLIC" | "PUBLIC_METADATA" | "INTERNAL" | "FDE_INTERNAL" | "ACCESS_CONTROLLED" | "UNKNOWN";
63
63
  mediaType: string;
64
64
  decision: {
65
65
  schemaVersion: 1;
66
66
  action: "ALLOW" | "DENY";
67
- reasonCodes: ("UNAVAILABLE" | "INTEGRITY_MISMATCH" | "NOT_FOUND" | "CONTENT_ACCESS_DENIED" | "UNSUPPORTED_RESOURCE")[];
67
+ reasonCodes: ("NOT_FOUND" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "CONTENT_ACCESS_DENIED" | "UNSUPPORTED_RESOURCE")[];
68
68
  assessedAt: string;
69
69
  };
70
70
  };
71
71
  materialAccess: {
72
72
  schemaVersion: 1;
73
73
  action: "ALLOW" | "DENY";
74
- reasonCodes: ("UNAVAILABLE" | "INTEGRITY_MISMATCH" | "NOT_FOUND" | "CONTENT_ACCESS_DENIED" | "UNSUPPORTED_RESOURCE")[];
74
+ reasonCodes: ("NOT_FOUND" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "CONTENT_ACCESS_DENIED" | "UNSUPPORTED_RESOURCE")[];
75
75
  assessedAt: string;
76
76
  };
77
77
  representation: {
@@ -81,7 +81,7 @@ export declare class KnowledgeOAuthFileClient {
81
81
  contentHash: string | null;
82
82
  mediaType: string;
83
83
  byteLength: number | null;
84
- methods: ("HEAD" | "GET")[];
84
+ methods: ("GET" | "HEAD")[];
85
85
  range: "NONE" | "SINGLE";
86
86
  verification: "ON_READ";
87
87
  verificationChunkBytes: number | null;
@@ -105,19 +105,19 @@ export declare class KnowledgeOAuthFileClient {
105
105
  sourceProjectKey: string;
106
106
  identityHash: string;
107
107
  kind: string;
108
- classification: "PUBLIC" | "PUBLIC_METADATA" | "TENANT" | "INTERNAL" | "FDE_INTERNAL" | "ACCESS_CONTROLLED" | "UNKNOWN";
108
+ classification: "TENANT" | "PUBLIC" | "PUBLIC_METADATA" | "INTERNAL" | "FDE_INTERNAL" | "ACCESS_CONTROLLED" | "UNKNOWN";
109
109
  mediaType: string;
110
110
  decision: {
111
111
  schemaVersion: 1;
112
112
  action: "ALLOW" | "DENY";
113
- reasonCodes: ("UNAVAILABLE" | "INTEGRITY_MISMATCH" | "NOT_FOUND" | "CONTENT_ACCESS_DENIED" | "UNSUPPORTED_RESOURCE")[];
113
+ reasonCodes: ("NOT_FOUND" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "CONTENT_ACCESS_DENIED" | "UNSUPPORTED_RESOURCE")[];
114
114
  assessedAt: string;
115
115
  };
116
116
  };
117
117
  materialAccess: {
118
118
  schemaVersion: 1;
119
119
  action: "ALLOW" | "DENY";
120
- reasonCodes: ("UNAVAILABLE" | "INTEGRITY_MISMATCH" | "NOT_FOUND" | "CONTENT_ACCESS_DENIED" | "UNSUPPORTED_RESOURCE")[];
120
+ reasonCodes: ("NOT_FOUND" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "CONTENT_ACCESS_DENIED" | "UNSUPPORTED_RESOURCE")[];
121
121
  assessedAt: string;
122
122
  };
123
123
  representation: {
@@ -127,7 +127,7 @@ export declare class KnowledgeOAuthFileClient {
127
127
  contentHash: string | null;
128
128
  mediaType: string;
129
129
  byteLength: number | null;
130
- methods: ("HEAD" | "GET")[];
130
+ methods: ("GET" | "HEAD")[];
131
131
  range: "NONE" | "SINGLE";
132
132
  verification: "ON_READ";
133
133
  verificationChunkBytes: number | null;
@@ -166,7 +166,7 @@ export declare class KnowledgeOAuthFileClient {
166
166
  contentHash: string | null;
167
167
  mediaType: string;
168
168
  byteLength: number | null;
169
- methods: ("HEAD" | "GET")[];
169
+ methods: ("GET" | "HEAD")[];
170
170
  range: "NONE" | "SINGLE";
171
171
  verification: "ON_READ";
172
172
  verificationChunkBytes: number | null;
@@ -232,12 +232,12 @@ export declare class KnowledgeOAuthFileClient {
232
232
  sourceProjectKey: string;
233
233
  identityHash: string;
234
234
  kind: string;
235
- classification: "PUBLIC" | "PUBLIC_METADATA" | "TENANT" | "INTERNAL" | "FDE_INTERNAL" | "ACCESS_CONTROLLED" | "UNKNOWN";
235
+ classification: "TENANT" | "PUBLIC" | "PUBLIC_METADATA" | "INTERNAL" | "FDE_INTERNAL" | "ACCESS_CONTROLLED" | "UNKNOWN";
236
236
  mediaType: string;
237
237
  decision: {
238
238
  schemaVersion: 1;
239
239
  action: "ALLOW" | "DENY";
240
- reasonCodes: ("UNAVAILABLE" | "INTEGRITY_MISMATCH" | "NOT_FOUND" | "CONTENT_ACCESS_DENIED" | "UNSUPPORTED_RESOURCE")[];
240
+ reasonCodes: ("NOT_FOUND" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "CONTENT_ACCESS_DENIED" | "UNSUPPORTED_RESOURCE")[];
241
241
  assessedAt: string;
242
242
  };
243
243
  };