@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.
- package/LICENSE +202 -0
- package/NOTICE +29 -0
- package/README.md +34 -2
- package/dist/agent-entry.d.ts +291 -0
- package/dist/agent-entry.js +153 -0
- package/dist/agent-guidance-error.d.ts +15 -0
- package/dist/agent-guidance-error.js +46 -0
- package/dist/auth.d.ts +124 -0
- package/dist/auth.js +165 -0
- package/dist/index.d.ts +290 -0
- package/dist/index.js +166 -0
- package/dist/internal/contracts/artifact.d.ts +120 -0
- package/dist/internal/contracts/artifact.js +103 -0
- package/dist/internal/contracts/collection-control.d.ts +160 -0
- package/dist/internal/contracts/collection-control.js +69 -0
- package/dist/internal/contracts/collection.d.ts +263 -0
- package/dist/internal/contracts/collection.js +174 -0
- package/dist/internal/contracts/common.d.ts +17 -0
- package/dist/internal/contracts/common.js +16 -0
- package/dist/internal/contracts/currentness.d.ts +477 -0
- package/dist/internal/contracts/currentness.js +221 -0
- package/dist/internal/contracts/event.d.ts +60 -0
- package/dist/internal/contracts/event.js +35 -0
- package/dist/internal/contracts/evidence.d.ts +202 -0
- package/dist/internal/contracts/evidence.js +171 -0
- package/dist/internal/contracts/index.d.ts +54 -0
- package/dist/internal/contracts/index.js +54 -0
- package/dist/internal/contracts/material-capability.d.ts +88 -0
- package/dist/internal/contracts/material-capability.js +8 -0
- package/dist/internal/contracts/material-carrier.d.ts +104 -0
- package/dist/internal/contracts/material-carrier.js +15 -0
- package/dist/internal/contracts/material-context.d.ts +28 -0
- package/dist/internal/contracts/material-context.js +9 -0
- package/dist/internal/contracts/material-read.d.ts +152 -0
- package/dist/internal/contracts/material-read.js +12 -0
- package/dist/internal/contracts/observation.d.ts +75 -0
- package/dist/internal/contracts/observation.js +39 -0
- package/dist/internal/contracts/persistence.d.ts +370 -0
- package/dist/internal/contracts/persistence.js +239 -0
- package/dist/internal/contracts/project-intent.d.ts +218 -0
- package/dist/internal/contracts/project-intent.js +121 -0
- package/dist/internal/contracts/projection.d.ts +380 -0
- package/dist/internal/contracts/projection.js +194 -0
- package/dist/internal/contracts/public-reference.d.ts +237 -0
- package/dist/internal/contracts/public-reference.js +87 -0
- package/dist/internal/contracts/reference-record.d.ts +124 -0
- package/dist/internal/contracts/reference-record.js +55 -0
- package/dist/internal/contracts/remote-file.d.ts +128 -0
- package/dist/internal/contracts/remote-file.js +159 -0
- package/dist/internal/contracts/resource-scope.d.ts +40 -0
- package/dist/internal/contracts/resource-scope.js +38 -0
- package/dist/internal/contracts/review-packet.d.ts +274 -0
- package/dist/internal/contracts/review-packet.js +61 -0
- package/dist/internal/contracts/review-plane.d.ts +90 -0
- package/dist/internal/contracts/review-plane.js +89 -0
- package/dist/internal/contracts/rich-document.d.ts +641 -0
- package/dist/internal/contracts/rich-document.js +184 -0
- package/dist/internal/contracts/runtime-compatibility.d.ts +22 -0
- package/dist/internal/contracts/runtime-compatibility.js +55 -0
- package/dist/internal/contracts/runtime.d.ts +59 -0
- package/dist/internal/contracts/runtime.js +68 -0
- package/dist/internal/contracts/scheduler.d.ts +348 -0
- package/dist/internal/contracts/scheduler.js +256 -0
- package/dist/internal/contracts/signal.d.ts +113 -0
- package/dist/internal/contracts/signal.js +77 -0
- package/dist/internal/contracts/source-governance.d.ts +375 -0
- package/dist/internal/contracts/source-governance.js +194 -0
- package/dist/internal/contracts/source.d.ts +62 -0
- package/dist/internal/contracts/source.js +32 -0
- package/dist/internal/contracts/tenant-budget.d.ts +59 -0
- package/dist/internal/contracts/tenant-budget.js +34 -0
- package/dist/internal/contracts/tenant-collection-request.d.ts +209 -0
- package/dist/internal/contracts/tenant-collection-request.js +58 -0
- package/dist/internal/contracts/tenant-collection.d.ts +199 -0
- package/dist/internal/contracts/tenant-collection.js +66 -0
- package/dist/internal/contracts/tenant-currentness.d.ts +117 -0
- package/dist/internal/contracts/tenant-currentness.js +26 -0
- package/dist/internal/contracts/tenant-management.d.ts +286 -0
- package/dist/internal/contracts/tenant-management.js +27 -0
- package/dist/internal/contracts/tenant-material-api.d.ts +584 -0
- package/dist/internal/contracts/tenant-material-api.js +46 -0
- package/dist/internal/contracts/tenant-material-json-schema.js +16 -0
- package/dist/internal/contracts/tenant-pdf-text.d.ts +27 -0
- package/dist/internal/contracts/tenant-pdf-text.js +13 -0
- package/dist/internal/contracts/tenant-project-control.d.ts +94 -0
- package/dist/internal/contracts/tenant-project-control.js +19 -0
- package/dist/internal/contracts/tenant-public-reference.d.ts +179 -0
- package/dist/internal/contracts/tenant-public-reference.js +26 -0
- package/dist/internal/contracts/tenant-resource-api.d.ts +738 -0
- package/dist/internal/contracts/tenant-resource-api.js +70 -0
- package/dist/internal/contracts/tenant-resource.d.ts +298 -0
- package/dist/internal/contracts/tenant-resource.js +118 -0
- package/dist/internal/contracts/tenant-rich-document.d.ts +317 -0
- package/dist/internal/contracts/tenant-rich-document.js +17 -0
- package/dist/internal/contracts/tenant-source-binding.d.ts +44 -0
- package/dist/internal/contracts/tenant-source-binding.js +33 -0
- package/dist/internal/contracts/tenant-source-bridge.d.ts +70 -0
- package/dist/internal/contracts/tenant-source-bridge.js +9 -0
- package/dist/internal/contracts/tenant-source-cutover.d.ts +226 -0
- package/dist/internal/contracts/tenant-source-cutover.js +26 -0
- package/dist/internal/contracts/tenant-source-document.d.ts +163 -0
- package/dist/internal/contracts/tenant-source-document.js +38 -0
- package/dist/internal/contracts/tenant-source-lease.d.ts +1 -0
- package/dist/internal/contracts/tenant-source-lease.js +5 -0
- package/dist/internal/contracts/tenant-source.d.ts +223 -0
- package/dist/internal/contracts/tenant-source.js +83 -0
- package/dist/internal/contracts/tenant-web-collection.d.ts +287 -0
- package/dist/internal/contracts/tenant-web-collection.js +118 -0
- package/dist/internal/contracts/tenant-web-content-plan.d.ts +86 -0
- package/dist/internal/contracts/tenant-web-content-plan.js +39 -0
- package/dist/internal/contracts/tenant-web-content-result.d.ts +63 -0
- package/dist/internal/contracts/tenant-web-content-result.js +15 -0
- package/dist/internal/contracts/tenant-web-content.d.ts +383 -0
- package/dist/internal/contracts/tenant-web-content.js +16 -0
- package/dist/internal/contracts/tenant-web-crawl.d.ts +310 -0
- package/dist/internal/contracts/tenant-web-crawl.js +55 -0
- package/dist/internal/contracts/tenant-web-dynamic.d.ts +698 -0
- package/dist/internal/contracts/tenant-web-dynamic.js +68 -0
- package/dist/internal/contracts/tenant-web-results.d.ts +66 -0
- package/dist/internal/contracts/tenant-web-results.js +41 -0
- package/dist/internal/contracts/tenant-web-workflow.d.ts +494 -0
- package/dist/internal/contracts/tenant-web-workflow.js +29 -0
- package/dist/internal/serving-contracts/agent-catalog.d.ts +70 -0
- package/dist/internal/serving-contracts/agent-catalog.js +56 -0
- package/dist/internal/serving-contracts/agent-entry.d.ts +13148 -0
- package/dist/internal/serving-contracts/agent-entry.js +57 -0
- package/dist/internal/serving-contracts/agent-guidance-shapes.d.ts +263 -0
- package/dist/internal/serving-contracts/agent-guidance-shapes.js +12 -0
- package/dist/internal/serving-contracts/agent-input-hints.d.ts +24 -0
- package/dist/internal/serving-contracts/agent-input-hints.js +104 -0
- package/dist/internal/serving-contracts/body-search.d.ts +231 -0
- package/dist/internal/serving-contracts/body-search.js +16 -0
- package/dist/internal/serving-contracts/consumer.d.ts +989 -0
- package/dist/internal/serving-contracts/consumer.js +45 -0
- package/dist/internal/serving-contracts/core.d.ts +333 -0
- package/dist/internal/serving-contracts/core.js +76 -0
- package/dist/internal/serving-contracts/http.d.ts +2874 -0
- package/dist/internal/serving-contracts/http.js +64 -0
- package/dist/internal/serving-contracts/index.d.ts +24 -0
- package/dist/internal/serving-contracts/index.js +25 -0
- package/dist/internal/serving-contracts/management.d.ts +424 -0
- package/dist/internal/serving-contracts/management.js +15 -0
- package/dist/internal/serving-contracts/material-capabilities.d.ts +508 -0
- package/dist/internal/serving-contracts/material-capabilities.js +14 -0
- package/dist/internal/serving-contracts/material-index-status.d.ts +55 -0
- package/dist/internal/serving-contracts/material-index-status.js +5 -0
- package/dist/internal/serving-contracts/mcp.d.ts +2218 -0
- package/dist/internal/serving-contracts/mcp.js +140 -0
- package/dist/internal/serving-contracts/tenant-governance.d.ts +236 -0
- package/dist/internal/serving-contracts/tenant-governance.js +13 -0
- package/dist/internal/serving-contracts/tenant-management.d.ts +6276 -0
- package/dist/internal/serving-contracts/tenant-management.js +89 -0
- package/dist/internal/serving-contracts/tenant-project.d.ts +7550 -0
- package/dist/internal/serving-contracts/tenant-project.js +39 -0
- package/dist/internal/serving-contracts/tenant-runtime.d.ts +9674 -0
- package/dist/internal/serving-contracts/tenant-runtime.js +37 -0
- package/dist/internal/serving-contracts/tenant-session.d.ts +87 -0
- package/dist/internal/serving-contracts/tenant-session.js +8 -0
- package/dist/internal/serving-contracts/tenant-web-content.d.ts +4606 -0
- package/dist/internal/serving-contracts/tenant-web-content.js +20 -0
- package/dist/internal/serving-contracts/tenant-web-crawl.d.ts +2958 -0
- package/dist/internal/serving-contracts/tenant-web-crawl.js +13 -0
- package/dist/internal/serving-contracts/tenant-web-dynamic.d.ts +3902 -0
- package/dist/internal/serving-contracts/tenant-web-dynamic.js +20 -0
- package/dist/internal/serving-contracts/tenant-web-workflow.d.ts +5750 -0
- package/dist/internal/serving-contracts/tenant-web-workflow.js +36 -0
- package/dist/internal/serving-contracts/tenant-web.d.ts +6418 -0
- package/dist/internal/serving-contracts/tenant-web.js +53 -0
- package/dist/internal/serving-contracts/tenant-workspace.d.ts +6451 -0
- package/dist/internal/serving-contracts/tenant-workspace.js +28 -0
- package/dist/internal/serving-contracts/workflow.d.ts +439 -0
- package/dist/internal/serving-contracts/workflow.js +37 -0
- package/dist/material-stream.d.ts +18 -0
- package/dist/material-stream.js +29 -0
- package/dist/oauth.d.ts +268 -0
- package/dist/oauth.js +539 -0
- package/dist/resource.d.ts +88 -0
- package/dist/resource.js +123 -0
- package/dist/session.d.ts +4 -0
- package/dist/session.js +3 -0
- package/dist/tenant-client.d.ts +169 -0
- package/dist/tenant-client.js +58 -0
- package/dist/tenant-management.d.ts +240 -0
- package/dist/tenant-management.js +149 -0
- package/dist/tenant-project.d.ts +57 -0
- package/dist/tenant-project.js +63 -0
- package/dist/tenant-runtime.d.ts +174 -0
- package/dist/tenant-runtime.js +17 -0
- package/dist/tenant-web-content.d.ts +44 -0
- package/dist/tenant-web-content.js +70 -0
- package/dist/tenant-web-crawl.d.ts +42 -0
- package/dist/tenant-web-crawl.js +39 -0
- package/dist/tenant-web-dynamic.d.ts +42 -0
- package/dist/tenant-web-dynamic.js +39 -0
- package/dist/tenant-web-workflow.d.ts +43 -0
- package/dist/tenant-web-workflow.js +63 -0
- package/dist/tenant-web.d.ts +42 -0
- package/dist/tenant-web.js +39 -0
- package/dist/tenant-workspace.d.ts +36 -0
- package/dist/tenant-workspace.js +21 -0
- package/dist/token-provider.d.ts +14 -0
- package/dist/token-provider.js +21 -0
- package/package.json +45 -3
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { AuthError } from './auth.js';
|
|
2
|
+
import { authorizedFetch, tokenValue } from './token-provider.js';
|
|
3
|
+
/** Provider17 客户端:Tenant 必填,Project/actor/authority 不进入请求上下文。 */
|
|
4
|
+
import { materialTenantIdSchema, tenantResourceRefSchema } from './internal/contracts/index.js';
|
|
5
|
+
import { tenantManagementToolSchemas, tenantManagementEnvelopeSchema, tenantManagementErrorSchema, tenantManagementProviderSchema, tenantManagementSafeErrorRef } from './internal/serving-contracts/index.js';
|
|
6
|
+
import { materialStream } from './material-stream.js';
|
|
7
|
+
export class TenantManagementSdkError extends Error {
|
|
8
|
+
code;
|
|
9
|
+
status;
|
|
10
|
+
completedPhase;
|
|
11
|
+
ref;
|
|
12
|
+
constructor(code, status, details) {
|
|
13
|
+
super(code);
|
|
14
|
+
this.code = code;
|
|
15
|
+
this.status = status;
|
|
16
|
+
this.name = 'TenantManagementSdkError';
|
|
17
|
+
this.completedPhase = details?.completedPhase;
|
|
18
|
+
this.ref = details?.ref;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export class KnowledgeTenantManagementClient {
|
|
22
|
+
options;
|
|
23
|
+
root;
|
|
24
|
+
path;
|
|
25
|
+
fetchImpl;
|
|
26
|
+
constructor(options) {
|
|
27
|
+
this.options = options;
|
|
28
|
+
let url;
|
|
29
|
+
try {
|
|
30
|
+
url = new URL(options.baseUrl);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_BASE_URL_INVALID', 0);
|
|
34
|
+
}
|
|
35
|
+
if (url.username || url.password || url.search || url.hash || !['https:', 'http:'].includes(url.protocol) || url.protocol === 'http:' && options.allowInsecureHttp !== true)
|
|
36
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_BASE_URL_INVALID', 0);
|
|
37
|
+
materialTenantIdSchema.parse(options.expectedTenantId);
|
|
38
|
+
if (!options.tokenProvider && (typeof options.token !== 'string' || !/^[A-Za-z0-9_-]{43}$/.test(options.token)))
|
|
39
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_TOKEN_INVALID', 0);
|
|
40
|
+
this.root = url;
|
|
41
|
+
this.path = url.pathname === '/' ? '' : url.pathname.replace(/\/+$/, '');
|
|
42
|
+
this.fetchImpl = authorizedFetch(options.fetchImpl ?? fetch, options, url.origin);
|
|
43
|
+
}
|
|
44
|
+
protocolVersion() { return 17; }
|
|
45
|
+
url(operation, version = this.protocolVersion()) { return new URL(this.path + (operation === 'provider' ? `/v${version}/provider` : `/v${version}/tenant/` + operation), this.root.origin); }
|
|
46
|
+
async request(url, init = {}) { try {
|
|
47
|
+
return await this.fetchImpl(url, { ...init, headers: { authorization: `Bearer ${await tokenValue(this.options)}`, accept: 'application/json', ...Object.fromEntries(new Headers(init.headers)) }, redirect: 'error' });
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (error instanceof AuthError)
|
|
51
|
+
throw error;
|
|
52
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_TRANSPORT_FAILURE', 0);
|
|
53
|
+
} }
|
|
54
|
+
failure(raw, status) { const failure = tenantManagementErrorSchema.safeParse(raw); if (!failure.success)
|
|
55
|
+
return null; const ref = tenantManagementSafeErrorRef(failure.data.ref, this.options.expectedTenantId); return new TenantManagementSdkError(failure.data.errorCode, status, { ...failure.data, ...(ref ? { ref } : { ref: undefined }) }); }
|
|
56
|
+
async json(response) {
|
|
57
|
+
if (!response.headers.get('content-type')?.toLowerCase().startsWith('application/json') || !response.body) {
|
|
58
|
+
await response.body?.cancel();
|
|
59
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_RESPONSE_INVALID', response.status);
|
|
60
|
+
}
|
|
61
|
+
const reader = response.body.getReader(), chunks = [];
|
|
62
|
+
let bytes = 0;
|
|
63
|
+
try {
|
|
64
|
+
while (true) {
|
|
65
|
+
const part = await reader.read();
|
|
66
|
+
if (part.done)
|
|
67
|
+
break;
|
|
68
|
+
bytes += part.value.length;
|
|
69
|
+
if (bytes > 524288) {
|
|
70
|
+
await reader.cancel();
|
|
71
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_RESULT_TOO_LARGE', response.status);
|
|
72
|
+
}
|
|
73
|
+
chunks.push(Buffer.from(part.value));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
if (error instanceof TenantManagementSdkError)
|
|
78
|
+
throw error;
|
|
79
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_TRANSPORT_FAILURE', response.status);
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
reader.releaseLock();
|
|
83
|
+
}
|
|
84
|
+
let raw;
|
|
85
|
+
try {
|
|
86
|
+
raw = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(Buffer.concat(chunks)));
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_RESPONSE_INVALID', response.status);
|
|
90
|
+
}
|
|
91
|
+
const failure = this.failure(raw, response.status);
|
|
92
|
+
if (failure)
|
|
93
|
+
throw failure;
|
|
94
|
+
if (!response.ok)
|
|
95
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_RESPONSE_INVALID', response.status);
|
|
96
|
+
return raw;
|
|
97
|
+
}
|
|
98
|
+
async tool(name, raw, options = {}) {
|
|
99
|
+
if (!Object.hasOwn(tenantManagementToolSchemas, name))
|
|
100
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_OPERATION_UNSUPPORTED', 0);
|
|
101
|
+
const input = tenantManagementToolSchemas[name].parse(raw), body = JSON.stringify({ tool: name, arguments: input });
|
|
102
|
+
if (Buffer.byteLength(body) > 131072)
|
|
103
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_REQUEST_TOO_LARGE', 0);
|
|
104
|
+
const response = await this.request(this.url('call'), { method: 'POST', headers: { 'content-type': 'application/json' }, body, ...(options.signal ? { signal: options.signal } : {}) }), result = tenantManagementEnvelopeSchema(name).safeParse(await this.json(response));
|
|
105
|
+
if (!result.success)
|
|
106
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_RESPONSE_INVALID', response.status);
|
|
107
|
+
if (result.data.tenantId !== this.options.expectedTenantId)
|
|
108
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_CONTEXT_MISMATCH', response.status);
|
|
109
|
+
return result.data;
|
|
110
|
+
}
|
|
111
|
+
async provider() { const response = await this.request(this.url('provider', 17)), result = tenantManagementProviderSchema.safeParse(await this.json(response)); if (!result.success)
|
|
112
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_RESPONSE_INVALID', response.status); return result.data; }
|
|
113
|
+
guide() { return this.tool('tenant_workflow_guide', {}); }
|
|
114
|
+
plan(ref) { return this.tool('tenant_workflow_plan', { ref }); }
|
|
115
|
+
read(ref) { return this.tool('tenant_knowledge_read', { ref }); }
|
|
116
|
+
snapshot(ref) { return this.tool('tenant_snapshot_status', { ref }); }
|
|
117
|
+
async stream(ref, options = {}) {
|
|
118
|
+
tenantResourceRefSchema.parse(ref);
|
|
119
|
+
const url = this.url('content');
|
|
120
|
+
url.searchParams.set('ref', ref);
|
|
121
|
+
const checked = async (input, init) => { let response; try {
|
|
122
|
+
response = await this.fetchImpl(input, { ...init, redirect: 'error' });
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
if (error instanceof AuthError)
|
|
126
|
+
throw error;
|
|
127
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_TRANSPORT_FAILURE', 0);
|
|
128
|
+
} if (response.status !== 200 && response.status !== 206) {
|
|
129
|
+
await this.json(response);
|
|
130
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_CONTENT_FAILURE', response.status);
|
|
131
|
+
} if (response.headers.get('x-knowledge-tenant-id') !== this.options.expectedTenantId) {
|
|
132
|
+
await response.body?.cancel();
|
|
133
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_CONTEXT_MISMATCH', response.status);
|
|
134
|
+
} return response; };
|
|
135
|
+
try {
|
|
136
|
+
const result = await materialStream(checked, url, await tokenValue(this.options), options);
|
|
137
|
+
if (result.contentClass !== 'ARTIFACT_SNAPSHOT') {
|
|
138
|
+
await result.body?.cancel();
|
|
139
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_RESPONSE_INVALID', result.status);
|
|
140
|
+
}
|
|
141
|
+
return result;
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
if (error instanceof TenantManagementSdkError)
|
|
145
|
+
throw error;
|
|
146
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_CONTENT_FAILURE', 0);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { type TenantProjectToolName, type TenantProjectToolInput, type TenantProjectToolResponse } from './internal/serving-contracts/index.js';
|
|
2
|
+
import { KnowledgeTenantWorkspaceClient } from './tenant-workspace.js';
|
|
3
|
+
import { TenantManagementSdkError } from './tenant-management.js';
|
|
4
|
+
import { type MaterialStreamOptions } from './material-stream.js';
|
|
5
|
+
export declare class KnowledgeTenantProjectClient extends KnowledgeTenantWorkspaceClient {
|
|
6
|
+
protected protocolVersion(): 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25;
|
|
7
|
+
protected failure(raw: unknown, status: number): TenantManagementSdkError<string> | null;
|
|
8
|
+
projectTool<K extends TenantProjectToolName>(name: K, raw: TenantProjectToolInput<K>, options?: {
|
|
9
|
+
signal?: AbortSignal;
|
|
10
|
+
}): Promise<TenantProjectToolResponse<K>>;
|
|
11
|
+
projectProvider(): Promise<{
|
|
12
|
+
provider: "knowledge-v2";
|
|
13
|
+
codeRevision: string;
|
|
14
|
+
authorityVersion: 2;
|
|
15
|
+
context: "TENANT_EXPLICIT_MANAGEMENT_V1";
|
|
16
|
+
managementConfigured: boolean;
|
|
17
|
+
resource: string;
|
|
18
|
+
issuer: string;
|
|
19
|
+
authorizationEndpoint: string;
|
|
20
|
+
tokenEndpoint: string;
|
|
21
|
+
revocationEndpoint: string;
|
|
22
|
+
mcpEndpoint: string;
|
|
23
|
+
callEndpoint: string;
|
|
24
|
+
contentEndpoint: string;
|
|
25
|
+
contentContextHeader: "x-knowledge-tenant-id";
|
|
26
|
+
legacyProviderEndpoint: string;
|
|
27
|
+
protocols: ("2026-07-28" | "2025-06-18")[];
|
|
28
|
+
requestMaxBytes: 131072;
|
|
29
|
+
resultMaxBytes: 524288;
|
|
30
|
+
submissionMaxBytes: 65536;
|
|
31
|
+
inlineContentMaxBytes: 32768;
|
|
32
|
+
contentReadMaxBytes: 16777216;
|
|
33
|
+
collectionMode: "MANUAL_ONLY_OAUTH";
|
|
34
|
+
schemaVersion: 19;
|
|
35
|
+
projectContentEndpoint: string;
|
|
36
|
+
projectContentPolicyHeader: "x-knowledge-authority-policy";
|
|
37
|
+
projectContentProjectHeader: "x-knowledge-project-key";
|
|
38
|
+
projectControlIdentitySchemaVersion: 19;
|
|
39
|
+
tools: string[];
|
|
40
|
+
capabilities: ["TENANT_MANAGEMENT_V1", "TENANT_WORKFLOW_V1", "TENANT_CURRENTNESS_V2", "TENANT_SOURCE_V1", "TENANT_WORKSPACE_METADATA_V1", "TENANT_PROJECT_CONTEXT_V1"];
|
|
41
|
+
}>;
|
|
42
|
+
projectStream(projectKey: string, ref: string, options?: MaterialStreamOptions): Promise<{
|
|
43
|
+
context: {
|
|
44
|
+
tenantId: string;
|
|
45
|
+
projectKey: string;
|
|
46
|
+
policy: "TENANT_PROJECT_SCOPE";
|
|
47
|
+
};
|
|
48
|
+
status: 200 | 206;
|
|
49
|
+
contentClass: string;
|
|
50
|
+
contentHash: string;
|
|
51
|
+
mediaType: string;
|
|
52
|
+
contentLength: number;
|
|
53
|
+
contentRange: string | null;
|
|
54
|
+
body: ReadableStream<Uint8Array> | null;
|
|
55
|
+
verification: "SERVER_VERIFIED_BEFORE_HEADERS";
|
|
56
|
+
}>;
|
|
57
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { tokenValue } from './token-provider.js';
|
|
2
|
+
/** Explicit v19 Project context client; v17/v18 discovery and defaults remain available. */
|
|
3
|
+
import { projectKeySchema, stableUriSchema, tenantProjectOperationRef } from './internal/contracts/index.js';
|
|
4
|
+
import { tenantProjectToolSchemas, tenantProjectEnvelopeSchema, tenantProjectErrorSchema, tenantProjectProviderSchema, tenantManagementSafeErrorRef } from './internal/serving-contracts/index.js';
|
|
5
|
+
import { KnowledgeTenantWorkspaceClient } from './tenant-workspace.js';
|
|
6
|
+
import { TenantManagementSdkError } from './tenant-management.js';
|
|
7
|
+
import { materialStream } from './material-stream.js';
|
|
8
|
+
export class KnowledgeTenantProjectClient extends KnowledgeTenantWorkspaceClient {
|
|
9
|
+
protocolVersion() { return 19; }
|
|
10
|
+
failure(raw, status) { const failure = tenantProjectErrorSchema.safeParse(raw); if (!failure.success)
|
|
11
|
+
return null; const ref = tenantManagementSafeErrorRef(failure.data.ref, this.options.expectedTenantId); return new TenantManagementSdkError(failure.data.errorCode, status, { ...failure.data, ...(ref ? { ref } : { ref: undefined }) }); }
|
|
12
|
+
async projectTool(name, raw, options = {}) {
|
|
13
|
+
if (!Object.hasOwn(tenantProjectToolSchemas, name))
|
|
14
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_OPERATION_UNSUPPORTED', 0);
|
|
15
|
+
const input = tenantProjectToolSchemas[name].parse(raw), body = JSON.stringify({ tool: name, arguments: input });
|
|
16
|
+
if (Buffer.byteLength(body) > 131072)
|
|
17
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_REQUEST_TOO_LARGE', 0);
|
|
18
|
+
const response = await this.request(this.url('call'), { method: 'POST', headers: { 'content-type': 'application/json' }, body, ...(options.signal ? { signal: options.signal } : {}) }), result = tenantProjectEnvelopeSchema(name).safeParse(await this.json(response));
|
|
19
|
+
if (!result.success)
|
|
20
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_RESPONSE_INVALID', response.status);
|
|
21
|
+
if (result.data.tenantId !== this.options.expectedTenantId)
|
|
22
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_CONTEXT_MISMATCH', response.status);
|
|
23
|
+
const data = result.data.data;
|
|
24
|
+
if ('projectKey' in input && data.projectKey !== input.projectKey)
|
|
25
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_CONTEXT_MISMATCH', response.status);
|
|
26
|
+
if ('requestId' in input && input.requestId) {
|
|
27
|
+
const expected = tenantProjectOperationRef(this.options.expectedTenantId, input.requestId);
|
|
28
|
+
if (data.operationRef && data.operationRef !== expected || data.receipt && data.receipt.operationRef !== expected)
|
|
29
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_CONTEXT_MISMATCH', response.status);
|
|
30
|
+
}
|
|
31
|
+
return result.data;
|
|
32
|
+
}
|
|
33
|
+
async projectProvider() { const response = await this.request(this.url('provider', 19)), result = tenantProjectProviderSchema.safeParse(await this.json(response)); if (!result.success)
|
|
34
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_RESPONSE_INVALID', response.status); return result.data; }
|
|
35
|
+
async projectStream(projectKey, ref, options = {}) {
|
|
36
|
+
const checkedProject = projectKeySchema.parse(projectKey), checkedRef = stableUriSchema.parse(ref);
|
|
37
|
+
const url = this.url('content', 19);
|
|
38
|
+
url.pathname = url.pathname.replace(/\/tenant\/content$/, '/project/content');
|
|
39
|
+
url.searchParams.set('projectKey', checkedProject);
|
|
40
|
+
url.searchParams.set('ref', checkedRef);
|
|
41
|
+
const fetchImpl = this.options.fetchImpl ?? fetch;
|
|
42
|
+
const checked = async (input, init) => { let response; try {
|
|
43
|
+
response = await fetchImpl(input, { ...init, redirect: 'error' });
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_TRANSPORT_FAILURE', 0);
|
|
47
|
+
} if (response.status !== 200 && response.status !== 206) {
|
|
48
|
+
await this.json(response);
|
|
49
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_CONTENT_FAILURE', response.status);
|
|
50
|
+
} if (response.headers.get('x-knowledge-tenant-id') !== this.options.expectedTenantId || response.headers.get('x-knowledge-project-key') !== checkedProject || response.headers.get('x-knowledge-authority-policy') !== 'TENANT_PROJECT_SCOPE') {
|
|
51
|
+
await response.body?.cancel();
|
|
52
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_CONTEXT_MISMATCH', response.status);
|
|
53
|
+
} return response; };
|
|
54
|
+
try {
|
|
55
|
+
return { ...await materialStream(checked, url, await tokenValue(this.options), options), context: { tenantId: this.options.expectedTenantId, projectKey: checkedProject, policy: 'TENANT_PROJECT_SCOPE' } };
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
if (error instanceof TenantManagementSdkError)
|
|
59
|
+
throw error;
|
|
60
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_CONTENT_FAILURE', 0);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/** 明确Provider20;仅此新client采用新registry,旧client默认保持原版本。 */
|
|
2
|
+
import { type TenantRuntimeInput } from './internal/serving-contracts/index.js';
|
|
3
|
+
import { KnowledgeTenantProjectClient } from './tenant-project.js';
|
|
4
|
+
export declare class KnowledgeTenantRuntimeClient extends KnowledgeTenantProjectClient {
|
|
5
|
+
protected protocolVersion(): 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25;
|
|
6
|
+
runtimeStatus(raw?: TenantRuntimeInput, options?: {
|
|
7
|
+
signal?: AbortSignal;
|
|
8
|
+
}): Promise<{
|
|
9
|
+
schemaVersion: 2;
|
|
10
|
+
tenantId: string;
|
|
11
|
+
tool: "tenant_runtime_status";
|
|
12
|
+
data: {
|
|
13
|
+
nodeId: string;
|
|
14
|
+
kind: "REQUESTS" | "RESOURCES" | "PROJECTIONS" | "PROJECTS";
|
|
15
|
+
observedAt: string;
|
|
16
|
+
coverage: "OWN_TENANT_METADATA_SAMPLE";
|
|
17
|
+
metadataOnly: true;
|
|
18
|
+
pageState: "UNAVAILABLE" | "READY";
|
|
19
|
+
items: ({
|
|
20
|
+
kind: "REQUESTS";
|
|
21
|
+
requestRef: string;
|
|
22
|
+
batchRef: string;
|
|
23
|
+
admission: "COMPLETED" | "PENDING" | "FAILED" | "STOPPED";
|
|
24
|
+
stopReason: "GRANT_REVOKED" | "DELEGATION_SUPERSEDED" | null;
|
|
25
|
+
executionAuthority: "UNAVAILABLE" | "CURRENT" | "BLOCKED" | "NOT_CONFIGURED" | "NOT_PENDING";
|
|
26
|
+
budgetReason: "READY" | "PAUSED" | "TENANT_UNCONFIGURED" | "HOST_IN_FLIGHT" | "TENANT_IN_FLIGHT" | "WORK_BUDGET" | "TIME_BUDGET" | "WORK_ACTIVE" | null;
|
|
27
|
+
captureRecord: "MISSING" | "UNAVAILABLE" | "PRESENT";
|
|
28
|
+
raw: {
|
|
29
|
+
ref: string;
|
|
30
|
+
contentHash: string | null;
|
|
31
|
+
recordedBytes: number | null;
|
|
32
|
+
manifest: "MISSING" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "PRESENT";
|
|
33
|
+
blob: "MISSING" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "PRESENT_UNVERIFIED";
|
|
34
|
+
contentHashReverified: false;
|
|
35
|
+
catalog: "MISSING" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "NOT_REGISTERED" | "MATCH";
|
|
36
|
+
directory: "MISSING" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "NOT_REGISTERED" | "MATCH";
|
|
37
|
+
search: "MISSING" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "NOT_REGISTERED" | "MATCH";
|
|
38
|
+
};
|
|
39
|
+
derivation: "REGISTERED" | "UNAVAILABLE" | "PENDING" | "NOT_REQUIRED";
|
|
40
|
+
completedPhase: "RAW_REGISTERED" | "DERIVED_REGISTERED" | null;
|
|
41
|
+
process: {
|
|
42
|
+
runtimeNodeId: string;
|
|
43
|
+
workloadId: string;
|
|
44
|
+
runId: string;
|
|
45
|
+
attribution: "COMPLETION_RUN" | "FAILURE_RUN" | "SOURCE_WORKLOAD_LATEST" | "PROJECT_WORKLOAD_LATEST";
|
|
46
|
+
batchMatches: boolean | null;
|
|
47
|
+
outcome: "FAILED" | "SUCCEEDED" | "TIMED_OUT" | "OUTPUT_LIMIT" | "SPAWN_FAILED" | "RECEIPT_MISSING" | null;
|
|
48
|
+
receiptStatus: "BLOCKED" | "PARTIAL" | "FAILED" | "SUCCEEDED" | "SKIPPED" | null;
|
|
49
|
+
durationMs: number | null;
|
|
50
|
+
finishedAt: string;
|
|
51
|
+
category: "NONE" | "OUTPUT_LIMIT" | "TIMEOUT" | "SPAWN_FAILURE" | "V8_HEAP_EXHAUSTED" | "NATIVE_ASSERTION_FAILURE" | "UNCAUGHT_EXCEPTION" | "PROCESS_SIGNAL" | "UNKNOWN_FAILURE" | null;
|
|
52
|
+
peakRssBytes: number | null;
|
|
53
|
+
sampleCount: number | null;
|
|
54
|
+
} | null;
|
|
55
|
+
failureCode?: "TENANT_SOURCE_HTTP_TERMINAL" | null | undefined;
|
|
56
|
+
} | {
|
|
57
|
+
ref: string;
|
|
58
|
+
contentHash: string | null;
|
|
59
|
+
recordedBytes: number | null;
|
|
60
|
+
manifest: "MISSING" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "PRESENT";
|
|
61
|
+
blob: "MISSING" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "PRESENT_UNVERIFIED";
|
|
62
|
+
contentHashReverified: false;
|
|
63
|
+
catalog: "MISSING" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "NOT_REGISTERED" | "MATCH";
|
|
64
|
+
directory: "MISSING" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "NOT_REGISTERED" | "MATCH";
|
|
65
|
+
search: "MISSING" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "NOT_REGISTERED" | "MATCH";
|
|
66
|
+
kind: "RESOURCES";
|
|
67
|
+
} | {
|
|
68
|
+
ref: string;
|
|
69
|
+
contentHash: string | null;
|
|
70
|
+
recordedBytes: number | null;
|
|
71
|
+
manifest: "MISSING" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "PRESENT";
|
|
72
|
+
blob: "MISSING" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "PRESENT_UNVERIFIED";
|
|
73
|
+
contentHashReverified: false;
|
|
74
|
+
catalog: "MISSING" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "NOT_REGISTERED" | "MATCH";
|
|
75
|
+
directory: "MISSING" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "NOT_REGISTERED" | "MATCH";
|
|
76
|
+
search: "MISSING" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "NOT_REGISTERED" | "MATCH";
|
|
77
|
+
kind: "PROJECTIONS";
|
|
78
|
+
expectedManifestRevision: string;
|
|
79
|
+
preparedAt: string;
|
|
80
|
+
} | {
|
|
81
|
+
kind: "PROJECTS";
|
|
82
|
+
projectKey: string;
|
|
83
|
+
lifecycle: "ACTIVE" | "ARCHIVED";
|
|
84
|
+
runtimeState: "UNAVAILABLE" | "AVAILABLE";
|
|
85
|
+
projection: {
|
|
86
|
+
requestedGeneration: number;
|
|
87
|
+
completedGeneration: number;
|
|
88
|
+
pendingGenerationDelta: number;
|
|
89
|
+
} | null;
|
|
90
|
+
checkpointState: "UNAVAILABLE" | "READY" | "EPOCH_MISMATCH";
|
|
91
|
+
directoryThroughSeq: number | null;
|
|
92
|
+
searchThroughSeq: number | null;
|
|
93
|
+
searchObservedMaxSeq: number | null;
|
|
94
|
+
searchSequenceDelta: number | null;
|
|
95
|
+
process: {
|
|
96
|
+
runtimeNodeId: string;
|
|
97
|
+
workloadId: string;
|
|
98
|
+
runId: string;
|
|
99
|
+
attribution: "COMPLETION_RUN" | "FAILURE_RUN" | "SOURCE_WORKLOAD_LATEST" | "PROJECT_WORKLOAD_LATEST";
|
|
100
|
+
batchMatches: boolean | null;
|
|
101
|
+
outcome: "FAILED" | "SUCCEEDED" | "TIMED_OUT" | "OUTPUT_LIMIT" | "SPAWN_FAILED" | "RECEIPT_MISSING" | null;
|
|
102
|
+
receiptStatus: "BLOCKED" | "PARTIAL" | "FAILED" | "SUCCEEDED" | "SKIPPED" | null;
|
|
103
|
+
durationMs: number | null;
|
|
104
|
+
finishedAt: string;
|
|
105
|
+
category: "NONE" | "OUTPUT_LIMIT" | "TIMEOUT" | "SPAWN_FAILURE" | "V8_HEAP_EXHAUSTED" | "NATIVE_ASSERTION_FAILURE" | "UNCAUGHT_EXCEPTION" | "PROCESS_SIGNAL" | "UNKNOWN_FAILURE" | null;
|
|
106
|
+
peakRssBytes: number | null;
|
|
107
|
+
sampleCount: number | null;
|
|
108
|
+
} | null;
|
|
109
|
+
})[];
|
|
110
|
+
nextAfter: string | null;
|
|
111
|
+
sampleCount: number;
|
|
112
|
+
total: null;
|
|
113
|
+
budget: {
|
|
114
|
+
state: "READY";
|
|
115
|
+
scope: "RUNTIME_OWNER_DATA_ROOT";
|
|
116
|
+
windowStart: string;
|
|
117
|
+
windowEnd: string;
|
|
118
|
+
usage: {
|
|
119
|
+
inFlight: number;
|
|
120
|
+
workUnits: number;
|
|
121
|
+
runtimeMs: number;
|
|
122
|
+
};
|
|
123
|
+
limits: {
|
|
124
|
+
tenantId: string;
|
|
125
|
+
maxInFlight: number;
|
|
126
|
+
maxWorkUnits: number;
|
|
127
|
+
maxRuntimeMs: number;
|
|
128
|
+
weight: number;
|
|
129
|
+
paused: boolean;
|
|
130
|
+
};
|
|
131
|
+
maxWaitRounds: number;
|
|
132
|
+
} | {
|
|
133
|
+
state: "UNAVAILABLE" | "NOT_CONFIGURED";
|
|
134
|
+
reason: "CONFIGURATION_REQUIRED" | "TENANT_NOT_CONFIGURED" | "BINDING_MISMATCH" | "STATE_UNAVAILABLE";
|
|
135
|
+
};
|
|
136
|
+
delivery: {
|
|
137
|
+
headSeq: number;
|
|
138
|
+
retainedThroughSeq: number;
|
|
139
|
+
businessOutcome: "NOT_ASSERTED";
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
}>;
|
|
143
|
+
runtimeProvider(): Promise<{
|
|
144
|
+
schemaVersion: 20;
|
|
145
|
+
tools: string[];
|
|
146
|
+
capabilities: ["TENANT_MANAGEMENT_V1", "TENANT_WORKFLOW_V1", "TENANT_CURRENTNESS_V2", "TENANT_SOURCE_V1", "TENANT_WORKSPACE_METADATA_V1", "TENANT_PROJECT_CONTEXT_V1", "TENANT_RUNTIME_STATUS_V1"];
|
|
147
|
+
provider: "knowledge-v2";
|
|
148
|
+
codeRevision: string;
|
|
149
|
+
authorityVersion: 2;
|
|
150
|
+
context: "TENANT_EXPLICIT_MANAGEMENT_V1";
|
|
151
|
+
managementConfigured: boolean;
|
|
152
|
+
resource: string;
|
|
153
|
+
issuer: string;
|
|
154
|
+
authorizationEndpoint: string;
|
|
155
|
+
tokenEndpoint: string;
|
|
156
|
+
revocationEndpoint: string;
|
|
157
|
+
mcpEndpoint: string;
|
|
158
|
+
callEndpoint: string;
|
|
159
|
+
contentEndpoint: string;
|
|
160
|
+
contentContextHeader: "x-knowledge-tenant-id";
|
|
161
|
+
legacyProviderEndpoint: string;
|
|
162
|
+
protocols: ("2026-07-28" | "2025-06-18")[];
|
|
163
|
+
requestMaxBytes: 131072;
|
|
164
|
+
resultMaxBytes: 524288;
|
|
165
|
+
submissionMaxBytes: 65536;
|
|
166
|
+
inlineContentMaxBytes: 32768;
|
|
167
|
+
contentReadMaxBytes: 16777216;
|
|
168
|
+
collectionMode: "MANUAL_ONLY_OAUTH";
|
|
169
|
+
projectContentEndpoint: string;
|
|
170
|
+
projectContentPolicyHeader: "x-knowledge-authority-policy";
|
|
171
|
+
projectContentProjectHeader: "x-knowledge-project-key";
|
|
172
|
+
projectControlIdentitySchemaVersion: 19;
|
|
173
|
+
}>;
|
|
174
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** 明确Provider20;仅此新client采用新registry,旧client默认保持原版本。 */
|
|
2
|
+
import { tenantRuntimeInputSchema, tenantRuntimeStatusEnvelopeSchema, tenantRuntimeProviderSchema } from './internal/serving-contracts/index.js';
|
|
3
|
+
import { KnowledgeTenantProjectClient } from './tenant-project.js';
|
|
4
|
+
import { TenantManagementSdkError } from './tenant-management.js';
|
|
5
|
+
export class KnowledgeTenantRuntimeClient extends KnowledgeTenantProjectClient {
|
|
6
|
+
protocolVersion() { return 20; }
|
|
7
|
+
async runtimeStatus(raw = {}, options = {}) {
|
|
8
|
+
const input = tenantRuntimeInputSchema.parse(raw), response = await this.request(this.url('call', 20), { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ tool: 'tenant_runtime_status', arguments: input }), ...(options.signal ? { signal: options.signal } : {}) }), result = tenantRuntimeStatusEnvelopeSchema.safeParse(await this.json(response));
|
|
9
|
+
if (!result.success)
|
|
10
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_RESPONSE_INVALID', response.status);
|
|
11
|
+
if (result.data.tenantId !== this.options.expectedTenantId)
|
|
12
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_CONTEXT_MISMATCH', response.status);
|
|
13
|
+
return result.data;
|
|
14
|
+
}
|
|
15
|
+
async runtimeProvider() { const response = await this.request(this.url('provider', 20)), result = tenantRuntimeProviderSchema.safeParse(await this.json(response)); if (!result.success)
|
|
16
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_RESPONSE_INVALID', response.status); return result.data; }
|
|
17
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** 显式 Provider24;继承旧入口但不改变其默认发现版本。 */
|
|
2
|
+
import { type TenantWebToolName, type TenantWebContentToolInput, type TenantWebContentToolResponse } from './internal/serving-contracts/index.js';
|
|
3
|
+
import { KnowledgeTenantRuntimeClient } from './tenant-runtime.js';
|
|
4
|
+
import { TenantManagementSdkError } from './tenant-management.js';
|
|
5
|
+
import { type MaterialStreamOptions } from './material-stream.js';
|
|
6
|
+
export declare class KnowledgeTenantWebContentClient extends KnowledgeTenantRuntimeClient {
|
|
7
|
+
protected protocolVersion(): 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25;
|
|
8
|
+
protected failure(raw: unknown, status: number): TenantManagementSdkError<string> | null;
|
|
9
|
+
webTool<K extends TenantWebToolName>(name: K, raw: TenantWebContentToolInput<K>, options?: {
|
|
10
|
+
signal?: AbortSignal;
|
|
11
|
+
}): Promise<TenantWebContentToolResponse<K>>;
|
|
12
|
+
stream(ref: string, options?: MaterialStreamOptions): Promise<import("./material-stream.js").MaterialStreamResponse>;
|
|
13
|
+
webProvider(): Promise<{
|
|
14
|
+
schemaVersion: 24;
|
|
15
|
+
capabilities: ["TENANT_MANAGEMENT_V1", "TENANT_WORKFLOW_V1", "TENANT_CURRENTNESS_V2", "TENANT_SOURCE_V1", "TENANT_WORKSPACE_METADATA_V1", "TENANT_PROJECT_CONTEXT_V1", "TENANT_RUNTIME_STATUS_V1", "TENANT_WEB_COLLECTION_SPEC_V1", "TENANT_WEB_CRAWL_V1", "TENANT_WEB_DYNAMIC_V1", "TENANT_WEB_CONTENT_V1"];
|
|
16
|
+
tools: string[];
|
|
17
|
+
provider: "knowledge-v2";
|
|
18
|
+
codeRevision: string;
|
|
19
|
+
authorityVersion: 2;
|
|
20
|
+
context: "TENANT_EXPLICIT_MANAGEMENT_V1";
|
|
21
|
+
managementConfigured: boolean;
|
|
22
|
+
resource: string;
|
|
23
|
+
issuer: string;
|
|
24
|
+
authorizationEndpoint: string;
|
|
25
|
+
tokenEndpoint: string;
|
|
26
|
+
revocationEndpoint: string;
|
|
27
|
+
mcpEndpoint: string;
|
|
28
|
+
callEndpoint: string;
|
|
29
|
+
contentEndpoint: string;
|
|
30
|
+
contentContextHeader: "x-knowledge-tenant-id";
|
|
31
|
+
legacyProviderEndpoint: string;
|
|
32
|
+
protocols: ("2026-07-28" | "2025-06-18")[];
|
|
33
|
+
requestMaxBytes: 131072;
|
|
34
|
+
resultMaxBytes: 524288;
|
|
35
|
+
submissionMaxBytes: 65536;
|
|
36
|
+
inlineContentMaxBytes: 32768;
|
|
37
|
+
contentReadMaxBytes: 16777216;
|
|
38
|
+
collectionMode: "MANUAL_ONLY_OAUTH";
|
|
39
|
+
projectContentEndpoint: string;
|
|
40
|
+
projectContentPolicyHeader: "x-knowledge-authority-policy";
|
|
41
|
+
projectContentProjectHeader: "x-knowledge-project-key";
|
|
42
|
+
projectControlIdentitySchemaVersion: 19;
|
|
43
|
+
}>;
|
|
44
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { tokenValue } from './token-provider.js';
|
|
2
|
+
/** 显式 Provider24;继承旧入口但不改变其默认发现版本。 */
|
|
3
|
+
import { tenantWebContentToolSchemas, tenantWebContentEnvelopeSchema, tenantWebContentProviderSchema, tenantWebContentErrorSchema, tenantWebSafeErrorRef } from './internal/serving-contracts/index.js';
|
|
4
|
+
import { tenantWebJobRef, parseTenantResourceRef, tenantStorageKey } from './internal/contracts/index.js';
|
|
5
|
+
import { KnowledgeTenantRuntimeClient } from './tenant-runtime.js';
|
|
6
|
+
import { TenantManagementSdkError } from './tenant-management.js';
|
|
7
|
+
import { materialStream } from './material-stream.js';
|
|
8
|
+
export class KnowledgeTenantWebContentClient extends KnowledgeTenantRuntimeClient {
|
|
9
|
+
protocolVersion() { return 24; }
|
|
10
|
+
failure(raw, status) {
|
|
11
|
+
const value = tenantWebContentErrorSchema.safeParse(raw);
|
|
12
|
+
if (!value.success)
|
|
13
|
+
return null;
|
|
14
|
+
const ref = tenantWebSafeErrorRef(value.data.ref, this.options.expectedTenantId);
|
|
15
|
+
return new TenantManagementSdkError(value.data.errorCode, status, { ...value.data, ref });
|
|
16
|
+
}
|
|
17
|
+
async webTool(name, raw, options = {}) {
|
|
18
|
+
if (!Object.hasOwn(tenantWebContentToolSchemas, name))
|
|
19
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_OPERATION_UNSUPPORTED', 0);
|
|
20
|
+
const input = tenantWebContentToolSchemas[name].parse(raw), body = JSON.stringify({ tool: name, arguments: input });
|
|
21
|
+
if (Buffer.byteLength(body) > 131072)
|
|
22
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_REQUEST_TOO_LARGE', 0);
|
|
23
|
+
const response = await this.request(this.url('call', 24), { method: 'POST', headers: { 'content-type': 'application/json' }, body, ...(options.signal ? { signal: options.signal } : {}) });
|
|
24
|
+
const result = tenantWebContentEnvelopeSchema(name).safeParse(await this.json(response));
|
|
25
|
+
if (!result.success)
|
|
26
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_RESPONSE_INVALID', response.status);
|
|
27
|
+
if (result.data.tenantId !== this.options.expectedTenantId)
|
|
28
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_CONTEXT_MISMATCH', response.status);
|
|
29
|
+
const data = result.data.data, actual = data.jobRef ?? data.job?.jobRef;
|
|
30
|
+
const request = input;
|
|
31
|
+
if (request.requestId && actual !== tenantWebJobRef(this.options.expectedTenantId, request.requestId) || request.jobRef && actual !== request.jobRef)
|
|
32
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_CONTEXT_MISMATCH', response.status);
|
|
33
|
+
return result.data;
|
|
34
|
+
}
|
|
35
|
+
async stream(ref, options = {}) {
|
|
36
|
+
const parsed = parseTenantResourceRef(ref);
|
|
37
|
+
if (parsed?.resourceType !== 'source_document')
|
|
38
|
+
return super.stream(ref, options);
|
|
39
|
+
if (parsed.storageKey !== tenantStorageKey(this.options.expectedTenantId))
|
|
40
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_CONTEXT_MISMATCH', 0);
|
|
41
|
+
const url = this.url('content', 24);
|
|
42
|
+
url.searchParams.set('ref', ref);
|
|
43
|
+
const checked = async (input, init) => { const response = await this.request(new URL(String(input)), init); if (response.status !== 200 && response.status !== 206) {
|
|
44
|
+
await this.json(response);
|
|
45
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_CONTENT_FAILURE', response.status);
|
|
46
|
+
} if (response.headers.get('x-knowledge-tenant-id') !== this.options.expectedTenantId || response.headers.get('x-knowledge-authority-policy') !== 'TENANT_NATIVE') {
|
|
47
|
+
await response.body?.cancel();
|
|
48
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_CONTEXT_MISMATCH', response.status);
|
|
49
|
+
} return response; };
|
|
50
|
+
try {
|
|
51
|
+
const result = await materialStream(checked, url, await tokenValue(this.options), options);
|
|
52
|
+
if (result.contentClass !== 'REGISTERED_MATERIAL') {
|
|
53
|
+
await result.body?.cancel();
|
|
54
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_RESPONSE_INVALID', result.status);
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
if (error instanceof TenantManagementSdkError)
|
|
60
|
+
throw error;
|
|
61
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_CONTENT_FAILURE', 0);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async webProvider() {
|
|
65
|
+
const response = await this.request(this.url('provider', 24)), value = tenantWebContentProviderSchema.safeParse(await this.json(response));
|
|
66
|
+
if (!value.success)
|
|
67
|
+
throw new TenantManagementSdkError('TENANT_MANAGEMENT_SDK_RESPONSE_INVALID', response.status);
|
|
68
|
+
return value.data;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/** 显式 Provider22;继承旧入口但不改变其默认发现版本。 */
|
|
2
|
+
import { type TenantWebToolName, type TenantWebToolInput, type TenantWebCrawlToolResponse } from './internal/serving-contracts/index.js';
|
|
3
|
+
import { KnowledgeTenantRuntimeClient } from './tenant-runtime.js';
|
|
4
|
+
import { TenantManagementSdkError } from './tenant-management.js';
|
|
5
|
+
export declare class KnowledgeTenantWebCrawlClient extends KnowledgeTenantRuntimeClient {
|
|
6
|
+
protected protocolVersion(): 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25;
|
|
7
|
+
protected failure(raw: unknown, status: number): TenantManagementSdkError<string> | null;
|
|
8
|
+
webTool<K extends TenantWebToolName>(name: K, raw: TenantWebToolInput<K>, options?: {
|
|
9
|
+
signal?: AbortSignal;
|
|
10
|
+
}): Promise<TenantWebCrawlToolResponse<K>>;
|
|
11
|
+
webProvider(): Promise<{
|
|
12
|
+
schemaVersion: 22;
|
|
13
|
+
capabilities: ["TENANT_MANAGEMENT_V1", "TENANT_WORKFLOW_V1", "TENANT_CURRENTNESS_V2", "TENANT_SOURCE_V1", "TENANT_WORKSPACE_METADATA_V1", "TENANT_PROJECT_CONTEXT_V1", "TENANT_RUNTIME_STATUS_V1", "TENANT_WEB_COLLECTION_SPEC_V1", "TENANT_WEB_CRAWL_V1"];
|
|
14
|
+
tools: string[];
|
|
15
|
+
provider: "knowledge-v2";
|
|
16
|
+
codeRevision: string;
|
|
17
|
+
authorityVersion: 2;
|
|
18
|
+
context: "TENANT_EXPLICIT_MANAGEMENT_V1";
|
|
19
|
+
managementConfigured: boolean;
|
|
20
|
+
resource: string;
|
|
21
|
+
issuer: string;
|
|
22
|
+
authorizationEndpoint: string;
|
|
23
|
+
tokenEndpoint: string;
|
|
24
|
+
revocationEndpoint: string;
|
|
25
|
+
mcpEndpoint: string;
|
|
26
|
+
callEndpoint: string;
|
|
27
|
+
contentEndpoint: string;
|
|
28
|
+
contentContextHeader: "x-knowledge-tenant-id";
|
|
29
|
+
legacyProviderEndpoint: string;
|
|
30
|
+
protocols: ("2026-07-28" | "2025-06-18")[];
|
|
31
|
+
requestMaxBytes: 131072;
|
|
32
|
+
resultMaxBytes: 524288;
|
|
33
|
+
submissionMaxBytes: 65536;
|
|
34
|
+
inlineContentMaxBytes: 32768;
|
|
35
|
+
contentReadMaxBytes: 16777216;
|
|
36
|
+
collectionMode: "MANUAL_ONLY_OAUTH";
|
|
37
|
+
projectContentEndpoint: string;
|
|
38
|
+
projectContentPolicyHeader: "x-knowledge-authority-policy";
|
|
39
|
+
projectContentProjectHeader: "x-knowledge-project-key";
|
|
40
|
+
projectControlIdentitySchemaVersion: 19;
|
|
41
|
+
}>;
|
|
42
|
+
}
|