@webskill/sdk 0.10.0 → 0.11.0
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/dist/agent.d.ts +3 -2
- package/dist/agent.js +3 -1102
- package/dist/browser.d.ts +258 -11
- package/dist/browser.js +758 -46
- package/dist/{catalogComponents-DTcYfpLQ-CcoOaz-Z.js → catalogComponents-BFoqpT1v-CjUBZ3bc.js} +253 -14
- package/dist/{dist-BViUeszk.js → dist-B-cOu08W.js} +526 -76
- package/dist/{dist-1OFC-zax.js → dist-DTHZS2k1.js} +520 -28
- package/dist/dist-qnlI2Iup.js +1280 -0
- package/dist/{eventTypes-s2uwAcLG-Go3l_dUe.js → eventTypes-FllCrX-Z-DNDeHWoG.js} +6 -2
- package/dist/governance.d.ts +7 -3
- package/dist/governance.js +1 -1
- package/dist/{index-DtFdMKBX.d.ts → index-D3mONFHD.d.ts} +220 -7
- package/dist/{index-B0QPLWPZ.d.ts → index-DACk2_XZ.d.ts} +110 -7
- package/dist/{index-BF4E1a9j.d.ts → index-DWbs58LF.d.ts} +227 -14
- package/dist/index.d.ts +4 -4
- package/dist/index.js +3 -3
- package/dist/mcp.d.ts +35 -7
- package/dist/mcp.js +88 -21
- package/dist/node.d.ts +3 -3
- package/dist/node.js +52 -2
- package/dist/{openUiLibrary-CIrV--Ad-B8zG_91e.js → openUiLibrary-D5u8oIvx-BLOAQCho.js} +3 -3
- package/dist/processSandboxEntry.js +6 -0
- package/dist/sandboxWorkerEntry.js +6 -0
- package/dist/{skillVersionStore-D-qHk9ZE-DBsYYCWn.d.ts → skillVersionStore-D-qHk9ZE-BcmFLykd.d.ts} +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/{types-CrRcT-LM-DZAp8sWv.d.ts → types-C26b05fW-CdrRCRDb.d.ts} +20 -4
- package/dist/ui-react.d.ts +2 -2
- package/dist/ui-react.js +28 -10
- package/dist/ui-vue.d.ts +1 -1
- package/dist/ui-vue.js +2 -2
- package/dist/ui.d.ts +4 -4
- package/dist/ui.js +3 -3
- package/dist/{webskillLitCatalog-BJrphK0y-SGmRXaaO.js → webskillLitCatalog-DME6PBkV-CmYNLlIT.js} +135 -16
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region ../governance/dist/eventTypes-
|
|
1
|
+
//#region ../governance/dist/eventTypes-FllCrX-Z.js
|
|
2
2
|
/**
|
|
3
3
|
* 审计事件类型常量(FR-13.4)。
|
|
4
4
|
*
|
|
@@ -39,7 +39,11 @@ const AUDIT_EVENT_TYPES = {
|
|
|
39
39
|
candidateApproved: "candidate.approved",
|
|
40
40
|
candidateRejected: "candidate.rejected",
|
|
41
41
|
pagePerceived: "page.perceived",
|
|
42
|
-
pageAction: "page.action"
|
|
42
|
+
pageAction: "page.action",
|
|
43
|
+
documentRead: "document.read",
|
|
44
|
+
documentSurfaceOpen: "document.surface.open",
|
|
45
|
+
/** 脚本按宿主声明的数据源取数(分册 16);被拒也记,否则反复试探看不见 */
|
|
46
|
+
dataFetched: "data.fetch"
|
|
43
47
|
};
|
|
44
48
|
/** 稳定展示序:筛选下拉与文档表格都从这里取,不各自维护一份顺序 */
|
|
45
49
|
const AUDIT_EVENT_TYPE_LIST = Object.values(AUDIT_EVENT_TYPES);
|
package/dist/governance.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { R as FileSystemProvider, S as UiBridge, U as Page, W as PageQuery, f as LlmMessage, it as SkillCatalogEntry, l as LlmClient, ot as SkillDocument, ut as SkillManagerPort } from "./types-
|
|
2
|
-
import {
|
|
3
|
-
import { _ as SkillState, a as AuditLog, b as SkillVersionStore, c as CandidateFile, d as CandidateSkill, f as CandidateSource, g as SKILL_VERSION_PAGE_SIZE, h as CompositeApprovalPolicy, i as AuditEvent, l as CandidatePage, m as CandidateStore, n as ApprovalDecision, o as AuditQueryFilter, p as CandidateStatus, r as ApprovalPolicy, s as CANDIDATE_PAGE_SIZE, t as AlwaysHumanApprovalPolicy, u as CandidateRisk, v as SkillVersion, x as candidateToCatalogEntry, y as SkillVersionPage } from "./skillVersionStore-D-qHk9ZE-
|
|
1
|
+
import { R as FileSystemProvider, S as UiBridge, U as Page, W as PageQuery, f as LlmMessage, it as SkillCatalogEntry, l as LlmClient, ot as SkillDocument, ut as SkillManagerPort } from "./types-C26b05fW-CdrRCRDb.js";
|
|
2
|
+
import { At as RuntimeRun, En as WebSkillRuntime, J as IntegrityVerdict, Jt as SkillOutcomeReporter, Qt as SkillStateGuard, qt as SkillIntegrityGuard } from "./index-D3mONFHD.js";
|
|
3
|
+
import { _ as SkillState, a as AuditLog, b as SkillVersionStore, c as CandidateFile, d as CandidateSkill, f as CandidateSource, g as SKILL_VERSION_PAGE_SIZE, h as CompositeApprovalPolicy, i as AuditEvent, l as CandidatePage, m as CandidateStore, n as ApprovalDecision, o as AuditQueryFilter, p as CandidateStatus, r as ApprovalPolicy, s as CANDIDATE_PAGE_SIZE, t as AlwaysHumanApprovalPolicy, u as CandidateRisk, v as SkillVersion, x as candidateToCatalogEntry, y as SkillVersionPage } from "./skillVersionStore-D-qHk9ZE-BcmFLykd.js";
|
|
4
4
|
//#region ../governance/dist/index.d.ts
|
|
5
5
|
//#region src/candidate/candidateNormalizer.d.ts
|
|
6
6
|
/** 剥 markdown fence 与 <think> 块、截取首尾 {};非对象 → CANDIDATE_INVALID */
|
|
@@ -207,6 +207,10 @@ declare const AUDIT_EVENT_TYPES: {
|
|
|
207
207
|
readonly candidateRejected: "candidate.rejected";
|
|
208
208
|
readonly pagePerceived: "page.perceived";
|
|
209
209
|
readonly pageAction: "page.action";
|
|
210
|
+
readonly documentRead: "document.read";
|
|
211
|
+
readonly documentSurfaceOpen: "document.surface.open";
|
|
212
|
+
/** 脚本按宿主声明的数据源取数(分册 16);被拒也记,否则反复试探看不见 */
|
|
213
|
+
readonly dataFetched: "data.fetch";
|
|
210
214
|
};
|
|
211
215
|
type AuditEventType = (typeof AUDIT_EVENT_TYPES)[keyof typeof AUDIT_EVENT_TYPES];
|
|
212
216
|
/** 稳定展示序:筛选下拉与文档表格都从这里取,不各自维护一份顺序 */
|
package/dist/governance.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { M as messageOf, _ as assertSafePathSegment, h as WebSkillError, k as isValidSkillName, v as atomicWriteText } from "./dist-Bev6i6Ip.js";
|
|
2
2
|
import { a as textParts, n as partsToText } from "./memoryArtifactStore-52Zn9npI-LbCQaqyx.js";
|
|
3
|
-
import { n as AUDIT_EVENT_TYPE_LIST, t as AUDIT_EVENT_TYPES } from "./eventTypes-
|
|
3
|
+
import { n as AUDIT_EVENT_TYPE_LIST, t as AUDIT_EVENT_TYPES } from "./eventTypes-FllCrX-Z-DNDeHWoG.js";
|
|
4
4
|
|
|
5
5
|
//#region ../governance/dist/index.js
|
|
6
6
|
const invalid = (message, details) => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { B as JsonSchema, I as DiscoveryResult, O as UiSurfaceActionRequest, R as FileSystemProvider, S as UiBridge, St as ValidationReport, T as UiSpecEvent, Tt as WebSkillErrorCode, U as Page, W as PageQuery, _ as LlmToolSpec, at as SkillDiscovery, b as RenderResultRequest, bt as UiSpecNode, d as LlmContentPart, dt as SkillManifest, f as LlmMessage, g as LlmToolCall, h as LlmTokenUsage, i as FormField, it as SkillCatalogEntry, l as LlmClient, m as LlmStreamEvent, n as ArtifactStore, o as InteractionPolicy, ot as SkillDocument, p as LlmResponse, r as ChartSpec, rt as SkillCatalog, s as InteractionRequest, st as SkillInstallSource, t as Artifact, u as LlmCompleteInput, v as MemoryStore, w as UiSpecDrafts, y as RenderBlock } from "./types-
|
|
1
|
+
import { B as JsonSchema, G as RemoteUrlPolicy, I as DiscoveryResult, O as UiSurfaceActionRequest, R as FileSystemProvider, S as UiBridge, St as ValidationReport, T as UiSpecEvent, Tt as WebSkillErrorCode, U as Page, W as PageQuery, _ as LlmToolSpec, at as SkillDiscovery, b as RenderResultRequest, bt as UiSpecNode, d as LlmContentPart, dt as SkillManifest, f as LlmMessage, g as LlmToolCall, h as LlmTokenUsage, i as FormField, it as SkillCatalogEntry, l as LlmClient, m as LlmStreamEvent, n as ArtifactStore, o as InteractionPolicy, ot as SkillDocument, p as LlmResponse, r as ChartSpec, rt as SkillCatalog, s as InteractionRequest, st as SkillInstallSource, t as Artifact, u as LlmCompleteInput, v as MemoryStore, w as UiSpecDrafts, y as RenderBlock } from "./types-C26b05fW-CdrRCRDb.js";
|
|
2
2
|
//#region ../runtime/dist/index.d.ts
|
|
3
3
|
//#region src/llm/parts.d.ts
|
|
4
4
|
/** 纯文本消息内容的构造快捷方式(引擎内部绝大多数消息仍是纯文本) */
|
|
@@ -22,6 +22,45 @@ type TextualToolContent = {
|
|
|
22
22
|
text?: string;
|
|
23
23
|
data?: unknown;
|
|
24
24
|
};
|
|
25
|
+
/**
|
|
26
|
+
* 参与 `toolResultMaxBytes` 截断的分片类型(FR-23.3)。**判据的单一来源。**
|
|
27
|
+
*
|
|
28
|
+
* 白名单而不是黑名单:黑名单式下新加的分片默认「参与截断」,
|
|
29
|
+
* 漏改一处就会把一份 PDF 截成坏文件、把 docx 文本腰斩,而且没有任何报错。
|
|
30
|
+
* 白名单式下新分片默认**不参与**,要受文本预算约束必须显式加进来。
|
|
31
|
+
* @experimental
|
|
32
|
+
*/
|
|
33
|
+
declare const TEXT_BUDGETED_CONTENT_TYPES: ReadonlySet<string>;
|
|
34
|
+
/**
|
|
35
|
+
* `file` 分片的上限(FR-23.4),量的是**实际上线的 base64 长度**而不是解码后的字节——
|
|
36
|
+
* provider 的限额算的是请求载荷。
|
|
37
|
+
*
|
|
38
|
+
* 2026-08-14 查证的三家上限:
|
|
39
|
+
* | provider | 上限 | 出处 |
|
|
40
|
+
* | --------- | --------------------------------------- | ----------------------- |
|
|
41
|
+
* | Anthropic | **32 MB**(**整个请求载荷**)、600 页 | PDF support / 请求大小 |
|
|
42
|
+
* | OpenAI | 单文件 50 MB,全部文件合计 50 MB | File inputs / 使用须知 |
|
|
43
|
+
* | Gemini | 50 MB 或 1000 页(内联与 Files API 同) | 文档理解 / 技术详情 |
|
|
44
|
+
*
|
|
45
|
+
* 取最小值 Anthropic 的 32 MB。它是**整个请求**的额度,不是文档单独的额度,
|
|
46
|
+
* 所以再留出余量给系统提示词、catalog(约 34 KB)、历史消息与其余分片。
|
|
47
|
+
* 25 000 KB base64 ≈ 18.75 MB 原始 PDF。取 1024 的整数倍:设置界面按 KB 展示,
|
|
48
|
+
* 十进制的 24 000 000 会显示成 23437.5 这种读不出来的数。
|
|
49
|
+
*/
|
|
50
|
+
declare const DEFAULT_MAX_DOCUMENT_BYTES = 25600000;
|
|
51
|
+
/**
|
|
52
|
+
* `document-text` 分片的上限(FR-23.4)。
|
|
53
|
+
*
|
|
54
|
+
* 约束来自**上下文窗口**而不是请求大小:抽出来的文本要整段进上下文。
|
|
55
|
+
* 按英文约 4 字节/token 折算,500 KB ≈ 128K token,占 200K 窗口的多半,
|
|
56
|
+
* 给历史消息与模型的回答留下其余。
|
|
57
|
+
*/
|
|
58
|
+
declare const DEFAULT_MAX_DOCUMENT_TEXT_BYTES = 512000;
|
|
59
|
+
/**
|
|
60
|
+
* 单次 fetchData 结果的字节上限(分册 16,FR-16.6):1000 KB。
|
|
61
|
+
* 结构化数据不是文档,量级差一个数量级;超出**只拒不截**——截断的 JSON 解不出来。
|
|
62
|
+
*/
|
|
63
|
+
declare const DEFAULT_MAX_DATA_SOURCE_BYTES = 1024000;
|
|
25
64
|
/**
|
|
26
65
|
* 工具结果的内容分片(0.6.0 §1.1)。
|
|
27
66
|
* `image` 分片不参与 `toolResultMaxBytes` 截断——那份预算是给文本的,
|
|
@@ -35,6 +74,27 @@ type ToolContent = TextualToolContent | {
|
|
|
35
74
|
data: string;
|
|
36
75
|
id: string;
|
|
37
76
|
text?: undefined;
|
|
77
|
+
} |
|
|
78
|
+
/** 原样直通给模型的文档(PDF 等),受 `maxDocumentBytes` 约束 @experimental */
|
|
79
|
+
{
|
|
80
|
+
type: 'file';
|
|
81
|
+
mimeType: string;
|
|
82
|
+
data: string;
|
|
83
|
+
name?: string;
|
|
84
|
+
id: string;
|
|
85
|
+
text?: undefined;
|
|
86
|
+
} |
|
|
87
|
+
/**
|
|
88
|
+
* 从文档里抽出来的文本(docx 等),受 `maxDocumentTextBytes` 约束。
|
|
89
|
+
* 它**就是**文本,但与普通工具文本分开计预算:混算会出现
|
|
90
|
+
* 「PDF 读全了、Word 只读了一半」这种无法解释的差异。
|
|
91
|
+
* @experimental
|
|
92
|
+
*/
|
|
93
|
+
{
|
|
94
|
+
type: 'document-text';
|
|
95
|
+
text: string;
|
|
96
|
+
name?: string;
|
|
97
|
+
id: string;
|
|
38
98
|
};
|
|
39
99
|
interface ToolResult {
|
|
40
100
|
ok: boolean;
|
|
@@ -51,9 +111,19 @@ interface ScriptExecutionContext {
|
|
|
51
111
|
skillName: string;
|
|
52
112
|
runId: string;
|
|
53
113
|
readReference(relativePath: string): Promise<string>;
|
|
114
|
+
/** 读技能自己的 `assets/`;与 readReference 共用路径断言,不得跨目录 @experimental */
|
|
115
|
+
readAsset?(relativePath: string): Promise<string>;
|
|
116
|
+
/** `assets/` 的典型内容是图片/字体/数据包,纯文本出口不够 @experimental */
|
|
117
|
+
readAssetBinary?(relativePath: string): Promise<Uint8Array>;
|
|
54
118
|
writeArtifact(path: string, content: string | Uint8Array, options?: {
|
|
55
119
|
mimeType?: string;
|
|
56
120
|
}): Promise<Artifact>;
|
|
121
|
+
/**
|
|
122
|
+
* 按**宿主声明的 sourceId** 取数(FR-16.1)。脚本给不了 URL——
|
|
123
|
+
* 目标由宿主在 `DataSourceDef.target` 里写死,这就是「唯一授权面」。
|
|
124
|
+
* 宿主未装配即不存在(同 readAsset / confirm)。 @experimental
|
|
125
|
+
*/
|
|
126
|
+
fetchData?(sourceId: string, params?: Record<string, unknown>): Promise<unknown>;
|
|
57
127
|
/** 脚本主动请求人在环确认;策略见 InteractionPolicy.confirmations */
|
|
58
128
|
confirm?(message: string): Promise<boolean>;
|
|
59
129
|
/** 宿主侧降级 warning 出口(网络阻断等;引擎接线到 run.warning trace) */
|
|
@@ -329,14 +399,18 @@ declare const READ_SKILL_FILE_TOOL: ToolDefinition;
|
|
|
329
399
|
//#endregion
|
|
330
400
|
//#region src/tools/askUserTool.d.ts
|
|
331
401
|
declare const ASK_USER_TOOL_NAME = "ask_user";
|
|
402
|
+
/** 一次 `ask_user` 能收的字段数上限(FR-11.3 裁决值),可由 `AgentLoopConfig` 覆盖 */
|
|
403
|
+
declare const ASK_USER_MAX_FIELDS = 20;
|
|
404
|
+
/** `fields[].type`:`FormField['type']` 的八种。`multi-select` 不在其中——它的值是数组(FR-11.1b) */
|
|
405
|
+
declare const ASK_USER_FIELD_TYPES: readonly ["text", "number", "boolean", "select", "textarea", "file", "password", "date"];
|
|
332
406
|
declare const ASK_USER_INPUT_SCHEMA: JsonSchema;
|
|
333
407
|
/** 内建工具:LLM 信息不足时主动向用户提问;仅当配置了 UiBridge 时注册 */
|
|
334
408
|
declare const ASK_USER_TOOL: ToolDefinition;
|
|
335
409
|
//#endregion
|
|
336
410
|
//#region src/tools/scriptContext.d.ts
|
|
337
411
|
/**
|
|
338
|
-
* 脚本执行上下文:只暴露 readReference / writeArtifact
|
|
339
|
-
*
|
|
412
|
+
* 脚本执行上下文:只暴露 readReference / readAsset / readAssetBinary / writeArtifact
|
|
413
|
+
* 四个显式能力,不暴露 fs 本体(沙箱语义,对齐 deferred-items D1)。
|
|
340
414
|
*/
|
|
341
415
|
declare function createScriptContext(deps: {
|
|
342
416
|
fs: FileSystemProvider;
|
|
@@ -346,6 +420,12 @@ declare function createScriptContext(deps: {
|
|
|
346
420
|
runId: string;
|
|
347
421
|
/** 提供时暴露 context.confirm(由引擎按交互策略实现) */
|
|
348
422
|
confirm?: (message: string) => Promise<boolean>;
|
|
423
|
+
/**
|
|
424
|
+
* 提供时暴露 context.fetchData(引擎按 DataSourcePolicy 实现,FR-16.1)。
|
|
425
|
+
* 宿主没声明数据源就整个键不存在——脚本 `typeof context.fetchData` 即可探测,
|
|
426
|
+
* 不给「存在但永远失败」的假出口。
|
|
427
|
+
*/
|
|
428
|
+
fetchData?: (sourceId: string, params?: Record<string, unknown>) => Promise<unknown>;
|
|
349
429
|
/** 宿主侧降级 warning 出口(网络阻断等;引擎接线到 run.warning trace) */
|
|
350
430
|
onWarning?: (message: string) => void;
|
|
351
431
|
/** writeArtifact 创建产物后的回调(引擎记录新产物 ID,执行后单次 listArtifacts 过滤) */
|
|
@@ -416,6 +496,11 @@ type InteractLifecycleData = {
|
|
|
416
496
|
/** complete / fail:终态原因 */
|
|
417
497
|
interface TerminalLifecycleData {
|
|
418
498
|
reason: RunTerminationReason;
|
|
499
|
+
/**
|
|
500
|
+
* 失败时的具体说明(`RuntimeRun.error.message`)。`reason` 只有七种取值,
|
|
501
|
+
* 说不出「哪个上限、哪个模型、本轮带了文档」这类唯一能指导下一步的信息。
|
|
502
|
+
*/
|
|
503
|
+
detail?: string;
|
|
419
504
|
}
|
|
420
505
|
interface LifecycleEventBase {
|
|
421
506
|
runId: string;
|
|
@@ -502,6 +587,23 @@ interface AgentLoopConfig {
|
|
|
502
587
|
* 不设上限的话,模型会一路猜到 maxTurns 用完,用户等到最后拿到的还是一句失败。
|
|
503
588
|
*/
|
|
504
589
|
maxUnknownToolRetries?: number;
|
|
590
|
+
/**
|
|
591
|
+
* 一次 `ask_user` 能收的字段数上限(默认 20,FR-11.3)。超出即拒绝整次调用,
|
|
592
|
+
* **不截断**——截断会让模型以为字段全收到了。
|
|
593
|
+
*/
|
|
594
|
+
askUserMaxFields?: number;
|
|
595
|
+
/**
|
|
596
|
+
* `file` 分片的 base64 长度上限(默认 `DEFAULT_MAX_DOCUMENT_BYTES`,FR-23.4)。
|
|
597
|
+
* 超出即**拒绝并说明**:截断一份 PDF 等于给模型一份坏文件。
|
|
598
|
+
*/
|
|
599
|
+
maxDocumentBytes?: number;
|
|
600
|
+
/**
|
|
601
|
+
* `document-text` 分片的字节上限(默认 `DEFAULT_MAX_DOCUMENT_TEXT_BYTES`,FR-23.4)。
|
|
602
|
+
* 同样拒绝而不截断:截半份内容给模型,而它不知道自己少看了什么。
|
|
603
|
+
*/
|
|
604
|
+
maxDocumentTextBytes?: number;
|
|
605
|
+
/** `read_linked_document` 的出站准入策略;与脚本取数共用同一个判定(AC-G23) */
|
|
606
|
+
remoteUrl?: RemoteUrlPolicy;
|
|
505
607
|
}
|
|
506
608
|
/** 技能状态拦截 port(治理装配;无注入默认全放行) */
|
|
507
609
|
interface SkillStateGuard {
|
|
@@ -999,6 +1101,16 @@ type BridgeRequest = {
|
|
|
999
1101
|
kind: 'readReference';
|
|
1000
1102
|
id: string;
|
|
1001
1103
|
path: string;
|
|
1104
|
+
} | {
|
|
1105
|
+
kind: 'readAsset';
|
|
1106
|
+
id: string;
|
|
1107
|
+
path: string;
|
|
1108
|
+
} |
|
|
1109
|
+
/** 回值走 `number[]`:进程沙箱的桥是 JSON stdio,与 writeArtifact 同口径 */
|
|
1110
|
+
{
|
|
1111
|
+
kind: 'readAssetBinary';
|
|
1112
|
+
id: string;
|
|
1113
|
+
path: string;
|
|
1002
1114
|
} | {
|
|
1003
1115
|
kind: 'writeArtifact';
|
|
1004
1116
|
id: string;
|
|
@@ -1009,6 +1121,13 @@ type BridgeRequest = {
|
|
|
1009
1121
|
kind: 'confirm';
|
|
1010
1122
|
id: string;
|
|
1011
1123
|
message: string;
|
|
1124
|
+
} |
|
|
1125
|
+
/** 取数只传宿主声明的 sourceId;**脚本给不了 URL**(FR-16.2 的唯一授权面) */
|
|
1126
|
+
{
|
|
1127
|
+
kind: 'fetchData';
|
|
1128
|
+
id: string;
|
|
1129
|
+
sourceId: string;
|
|
1130
|
+
params?: Record<string, unknown>;
|
|
1012
1131
|
};
|
|
1013
1132
|
interface BridgeResponse {
|
|
1014
1133
|
id: string;
|
|
@@ -1026,11 +1145,18 @@ interface BridgeResponse {
|
|
|
1026
1145
|
type CapabilityMode = boolean | 'require-approval';
|
|
1027
1146
|
/** 授权粒度:'once-per-run'(默认,run 内同类能力批准一次)/ 'every-call'(每次调用都问) */
|
|
1028
1147
|
type ApprovalScope = 'once-per-run' | 'every-call';
|
|
1029
|
-
/**
|
|
1148
|
+
/** 能力独立开关;缺省全开,显式 false 即关闭(TOOL_UNSUPPORTED) */
|
|
1030
1149
|
interface BridgeCapabilities {
|
|
1031
1150
|
readReference?: CapabilityMode;
|
|
1151
|
+
/** 同时管 readAsset 与 readAssetBinary;与 readReference 分开是为了审计可区分 */
|
|
1152
|
+
readAsset?: CapabilityMode;
|
|
1032
1153
|
writeArtifact?: CapabilityMode;
|
|
1033
1154
|
confirm?: CapabilityMode;
|
|
1155
|
+
/**
|
|
1156
|
+
* 脚本取数(FR-16.1)。**缺省关**——与其余能力相反:
|
|
1157
|
+
* 它会出网,缺省开等于让任何技能默认拥有出站能力。
|
|
1158
|
+
*/
|
|
1159
|
+
fetchData?: CapabilityMode;
|
|
1034
1160
|
}
|
|
1035
1161
|
/** 入站校验:非法 kind / 缺 id / 缺字段 → undefined(调用方忽略并记 warning) */
|
|
1036
1162
|
declare function parseBridgeRequest(data: unknown): BridgeRequest | undefined;
|
|
@@ -1086,8 +1212,8 @@ declare function normalizeToolError(code: unknown, message: string): {
|
|
|
1086
1212
|
};
|
|
1087
1213
|
//#endregion
|
|
1088
1214
|
//#region src/sandbox/approval.d.ts
|
|
1089
|
-
/**
|
|
1090
|
-
type BridgeCapability = 'readReference' | 'writeArtifact' | 'confirm';
|
|
1215
|
+
/** 桥消息对应的四类能力(readAsset 同时覆盖文本与二进制读取) */
|
|
1216
|
+
type BridgeCapability = 'readReference' | 'readAsset' | 'writeArtifact' | 'confirm' | 'fetchData';
|
|
1091
1217
|
/** allowed 放行;denied 用户拒绝/无法询问;disabled 能力关闭(两者都回 TOOL_UNSUPPORTED,仅消息不同) */
|
|
1092
1218
|
type ApprovalDecision = 'allowed' | 'denied' | 'disabled';
|
|
1093
1219
|
/**
|
|
@@ -1143,6 +1269,52 @@ interface TodoTraceEvent {
|
|
|
1143
1269
|
*/
|
|
1144
1270
|
declare function extractTodoTraceEvents(data: unknown): TodoTraceEvent[];
|
|
1145
1271
|
//#endregion
|
|
1272
|
+
//#region src/tools/linkedDocument.d.ts
|
|
1273
|
+
/**
|
|
1274
|
+
* 读取页面上链接指向的文档(分册 22)。
|
|
1275
|
+
*
|
|
1276
|
+
* 与脚本侧的 `fetchData` **分工明确**,两者不得互相蚕食:
|
|
1277
|
+
* - `fetchData`:技能脚本按宿主声明的 sourceId 取**业务数据**,目标宿主写死;
|
|
1278
|
+
* - 本工具:模型读**页面上出现的链接**指向的文档,目标来自感知结果。
|
|
1279
|
+
*
|
|
1280
|
+
* 共同点是准入判定必须共用 `assertRemoteUrlAllowed`(AC-G23),不得各写一套。
|
|
1281
|
+
*/
|
|
1282
|
+
/** 宿主提供的文档取数实现;不注入即整个工具不注册 @experimental */
|
|
1283
|
+
interface LinkedDocumentReader {
|
|
1284
|
+
/**
|
|
1285
|
+
* 宿主页面的 origin,用于同源判定。
|
|
1286
|
+
*
|
|
1287
|
+
* **缺省即一律按跨源处理**(DV-10):拿不到 origin 时保守到「每次都问」,
|
|
1288
|
+
* 而不是保守到「都不问」。Node 宿主没有页面 origin,因此总是要确认。
|
|
1289
|
+
*/
|
|
1290
|
+
readonly origin?: string;
|
|
1291
|
+
read(url: string): Promise<{
|
|
1292
|
+
mimeType: string;
|
|
1293
|
+
bytes: Uint8Array;
|
|
1294
|
+
}>;
|
|
1295
|
+
}
|
|
1296
|
+
declare const READ_LINKED_DOCUMENT_TOOL_NAME = "read_linked_document";
|
|
1297
|
+
/**
|
|
1298
|
+
* 能直接给模型用的 MIME。其余一律拒绝并列出这份清单——
|
|
1299
|
+
* 「尽力而为地猜格式」会让模型收到乱码却以为读成功了。
|
|
1300
|
+
*/
|
|
1301
|
+
declare const SUPPORTED_DOCUMENT_MIME: {
|
|
1302
|
+
readonly pdf: "application/pdf";
|
|
1303
|
+
readonly docx: "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
|
1304
|
+
};
|
|
1305
|
+
/** docx 抽取实现由宿主注入(`DOMParser` 是浏览器 API,Node 没有;备案 D55) */
|
|
1306
|
+
type DocxTextExtractor = (bytes: Uint8Array) => Promise<string>;
|
|
1307
|
+
/** 引擎侧固定流程(§2.3)用到的错误文案,集中一处便于判据引用 */
|
|
1308
|
+
declare const UNSUPPORTED_DOCUMENT_MESSAGE: string;
|
|
1309
|
+
/**
|
|
1310
|
+
* 内建工具:读页面链接指向的文档。
|
|
1311
|
+
*
|
|
1312
|
+
* **始终注册**(只要宿主装配了 reader):docx 与纯文本这条路对所有模型成立。
|
|
1313
|
+
* PDF 目标在模型不支持文档时**取数后拒绝**,而不是入口就拦 ——
|
|
1314
|
+
* 入口拦会误伤 docx,它抽成文本后根本不需要文档能力。
|
|
1315
|
+
*/
|
|
1316
|
+
declare const READ_LINKED_DOCUMENT_TOOL: ToolDefinition;
|
|
1317
|
+
//#endregion
|
|
1146
1318
|
//#region src/engine/external.d.ts
|
|
1147
1319
|
/**
|
|
1148
1320
|
* 外部工具来源(runtime 扩展点,mcp 包实现并插入)。
|
|
@@ -1278,6 +1450,27 @@ interface AgentLoopDeps {
|
|
|
1278
1450
|
schemaInferer?: SchemaInferer;
|
|
1279
1451
|
/** 缺省 MemoryArtifactStore */
|
|
1280
1452
|
artifactStore?: ArtifactStore;
|
|
1453
|
+
/**
|
|
1454
|
+
* 宿主声明的数据源取数入口(分册 16)。注入后脚本上下文才有 `fetchData`。
|
|
1455
|
+
* 策略本体(`DataSourcePolicy`)住在 `@webskill/agent`,它依赖 runtime,
|
|
1456
|
+
* 所以这里只收一个函数,不收策略对象——否则依赖方向反了。
|
|
1457
|
+
*/
|
|
1458
|
+
fetchData?: (sourceId: string, params?: Record<string, unknown>) => Promise<unknown>;
|
|
1459
|
+
/**
|
|
1460
|
+
* 页面链接文档的读取实现(分册 22)。不注入即 `read_linked_document` 不注册——
|
|
1461
|
+
* 模型连这个工具的存在都看不到,而不是看得到再被拒。
|
|
1462
|
+
*/
|
|
1463
|
+
linkedDocuments?: LinkedDocumentReader;
|
|
1464
|
+
/** docx → 文本;`DOMParser` 是浏览器 API,因此由宿主注入(Node 侧无此能力,备案 D55) */
|
|
1465
|
+
docxExtractor?: DocxTextExtractor;
|
|
1466
|
+
/** 文档读取留痕出口(FR-22.6);不注入即不留痕,装配方要自己承担这个选择 */
|
|
1467
|
+
documentAudit?: {
|
|
1468
|
+
append(event: {
|
|
1469
|
+
type: string;
|
|
1470
|
+
target: string;
|
|
1471
|
+
data?: Record<string, unknown>;
|
|
1472
|
+
}): Promise<unknown>;
|
|
1473
|
+
};
|
|
1281
1474
|
fs: FileSystemProvider;
|
|
1282
1475
|
/** name → skillRoot(来自发现结果) */
|
|
1283
1476
|
skillIndex: Map<string, string>;
|
|
@@ -1423,6 +1616,26 @@ interface WebSkillRuntimeDeps {
|
|
|
1423
1616
|
skillIntegrityGuard?: SkillIntegrityGuard;
|
|
1424
1617
|
/** F1 技能执行失败上报 port(治理 SkillStatePolicy.toSkillOutcomeReporter 装配;无注入即关闭) */
|
|
1425
1618
|
skillOutcomeReporter?: SkillOutcomeReporter;
|
|
1619
|
+
/**
|
|
1620
|
+
* 宿主声明的数据源取数入口(分册 16);注入后脚本上下文才有 `fetchData`。
|
|
1621
|
+
* 通常由 `@webskill/agent` 的 `DataSourcePolicy.fetchData` 绑定过来。
|
|
1622
|
+
*/
|
|
1623
|
+
fetchData?: (sourceId: string, params?: Record<string, unknown>) => Promise<unknown>;
|
|
1624
|
+
/**
|
|
1625
|
+
* 读页面链接指向的文档(分册 22);不注入即 `read_linked_document` 不注册。
|
|
1626
|
+
* 实现住在 `@webskill/browser`(docx 抽取要 `DOMParser`),由宿主装配。
|
|
1627
|
+
*/
|
|
1628
|
+
linkedDocuments?: LinkedDocumentReader;
|
|
1629
|
+
/** docx → 文本;不注入即 Word 文档明确报「本环境不支持」(FR-23.8) */
|
|
1630
|
+
docxExtractor?: DocxTextExtractor;
|
|
1631
|
+
/** 文档读取留痕出口(FR-22.6) */
|
|
1632
|
+
documentAudit?: {
|
|
1633
|
+
append(event: {
|
|
1634
|
+
type: string;
|
|
1635
|
+
target: string;
|
|
1636
|
+
data?: Record<string, unknown>;
|
|
1637
|
+
}): Promise<unknown>;
|
|
1638
|
+
};
|
|
1426
1639
|
}
|
|
1427
1640
|
/**
|
|
1428
1641
|
* runtime 门面:组合 discovery / router / agent loop / lifecycle
|
|
@@ -1754,4 +1967,4 @@ declare class FsSessionStore<TMessage = unknown> implements SessionStore<TMessag
|
|
|
1754
1967
|
delete(id: string): Promise<void>;
|
|
1755
1968
|
}
|
|
1756
1969
|
//#endregion
|
|
1757
|
-
export {
|
|
1970
|
+
export { LifecycleHookContext as $, normalizeToolError as $n, SkillSuccessReport as $t, DocxTextExtractor as A, bridgeError as An, RuntimeRun as At, FsRunTraceStore as B, formatSkillScriptManifest as Bn, SealResult as Bt, CapabilityApproval as C, UserProfileLimits as Cn, RunTraceFile as Ct, DEFAULT_MAX_DOCUMENT_BYTES as D, WebSkillRuntimeDeps as Dn, RunTraceSummary as Dt, DEFAULT_MAX_DATA_SOURCE_BYTES as E, WebSkillRuntime as En, RunTraceStore as Et, ExternalToolSource as F, exportUserProfile as Fn, SchemaInferer as Ft, HookRunner as G, isUnsupportedRunSnapshot as Gn, SessionStore as Gt, FullDisclosureRouter as H, fromVercelStreamPart as Hn, SessionListPage as Ht, FS_SESSION_PAGE_SIZE as I, extractChartSpec as In, ScriptExecutionContext as It, IntegrityVerdict as J, mergeProfileEntries as Jn, SkillOutcomeReporter as Jt, HookRunnerOptions as K, listSkillScripts as Kn, SkillFailureReport as Kt, FsArtifactStore as L, extractTodoTraceEvents as Ln, ScriptExecutor as Lt, EventBus as M, createScriptContext as Mn, RuntimeSessionHandle as Mt, ExecuteLifecycleData as N, createWebSkillApi as Nn, SESSION_SCHEMA_VERSION as Nt, DEFAULT_MAX_DOCUMENT_TEXT_BYTES as O, appendBehaviorRecords as On, RunUsageSummary as Ot, ExternalSkillProvider as P, diffUserProfile as Pn, SUPPORTED_DOCUMENT_MIME as Pt, LifecycleHook as Q, normalizeToolContent as Qn, SkillStateGuard as Qt, FsMemoryStore as R, extractUiSpecEvents as Rn, SealOptions as Rt, BridgeResponse as S, UserProfileImportDiff as Sn, RunToolCall as St, DEFAULT_LOOP_LIMITS as T, WebSkillApi as Tn, RunTraceMetrics as Tt, GoogleGenAiClient as U, interruptedToolResult as Un, SessionMeta as Ut, FsSessionStore as V, fromVercelResult as Vn, SerializingMemoryStore as Vt, GoogleGenAiClientConfig as W, isNetworkAllowed as Wn, SessionRecord as Wt, LifecycleEvent as X, networkUrlHost as Xn, SkillScriptDescriptor as Xt, InteractLifecycleData as Y, networkPolicyLibSource as Yn, SkillRouter as Yt, LifecycleEventInit as Z, normalizeErrorCode as Zn, SkillScriptSchemaSource as Zt, BehaviorRecordKind as _, USER_PROFILE_REFINE_PROMPT as _n, toLlmToolSpec as _r, RunResult as _t, ASK_USER_TOOL as a, ToolDefinition as an, readUserProfile as ar, ProgressiveRouter as at, BridgeCapability as b, UserProfileEntry as bn, validateUiSpecEvent as br, RunSnapshotStore as bt, AgentLoop as c, TraceClock as cn, resolveToolName as cr, READ_SKILL_FILE_INPUT_SCHEMA as ct, AnthropicClient as d, TraceRecorder as dn, schemaToForm as dr, RUN_SNAPSHOT_SCHEMA_VERSION as dt, TEXT_BUDGETED_CONTENT_TYPES as en, parseBridgeRequest as er, LifecycleListener as et, AnthropicClientConfig as f, UNSUPPORTED_DOCUMENT_MESSAGE as fn, scriptToolName as fr, RUN_TRACE_SCHEMA_VERSION as ft, BehaviorRecord as g, USER_PROFILE_PROMPT_HEADER as gn, textParts as gr, RunLimitErrorDetails as gt, BEHAVIOR_RECORDS_KEY as h, USER_PROFILE_NO_INVENTION_RULE as hn, summarizeToolCalls as hr, RouteResult as ht, ASK_USER_MAX_FIELDS as i, ToolContent as in, readProfileEntries as ir, OpenAiCompatibleClientConfig as it, EMPTY_USER_PROFILE as j, buildRenderResult as jn, RuntimeSession as jt, DEFAULT_USER_PROFILE_LIMITS as k, applyUserProfileImport as kn, RuntimePhase as kt, AgentLoopConfig as l, TraceEvent as ln, sampleBehaviorRecords as lr, READ_SKILL_FILE_TOOL as lt, ApprovalScope as m, USER_PROFILE_KEY as mn, summarizeRunUsage as mr, RouteLifecycleData as mt, ASK_USER_FIELD_TYPES as n, TextualToolContent as nn, partsToText as nr, NetworkPolicy as nt, ASK_USER_TOOL_NAME as o, ToolResolution as on, refineUserProfile as or, READ_LINKED_DOCUMENT_TOOL as ot, ApprovalDecision as p, USER_PROFILE_EXPORT_VERSION as pn, sealToolCallPairs as pr, RefineUserProfileInput as pt, InstalledSkillManifest as q, mergeCatalogEntries as qn, SkillIntegrityGuard as qt, ASK_USER_INPUT_SCHEMA as r, TodoTraceEvent as rn, readBehaviorRecords as rr, OpenAiCompatibleClient as rt, ActivateLifecycleData as s, ToolResult as sn, renderUserProfileContext as sr, READ_LINKED_DOCUMENT_TOOL_NAME as st, ALLOWED_TOOLS_EXCLUSION_REASON as t, TerminalLifecycleData as tn, parseUserProfileExport as tr, LinkedDocumentReader as tt, AgentLoopDeps as u, TraceEventType as un, schemaSourceLabel as ur, READ_SKILL_FILE_TOOL_NAME as ut, BehaviorScene as v, UnsupportedRunSnapshot as vn, toRecordDigests as vr, RunSnapshot as vt, CapabilityMode as w, VercelToolSpec as wn, RunTraceFilter as wt, BridgeRequest as x, UserProfileExport as xn, validateUiSpecNode as xr, RunTerminationReason as xt, BridgeCapabilities as y, UserProfile as yn, toVercelToolSpecs as yr, RunSnapshotListEntry as yt, FsRunSnapshotStore as z, findUnpairedToolCalls as zn, SealRecord as zt };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { B as JsonSchema, C as UiSpecActionCapability, D as UiSpecSnapshot, S as UiBridge, b as RenderResultRequest, bt as UiSpecNode, c as InteractionResponse, r as ChartSpec, s as InteractionRequest, y as RenderBlock } from "./types-
|
|
2
|
-
import {
|
|
1
|
+
import { B as JsonSchema, C as UiSpecActionCapability, D as UiSpecSnapshot, S as UiBridge, b as RenderResultRequest, bt as UiSpecNode, c as InteractionResponse, r as ChartSpec, s as InteractionRequest, y as RenderBlock } from "./types-C26b05fW-CdrRCRDb.js";
|
|
2
|
+
import { F as ExternalToolSource } from "./index-D3mONFHD.js";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { ComponentType, ReactNode } from "react";
|
|
5
5
|
//#region ../ui/dist/index.d.ts
|
|
@@ -16,7 +16,7 @@ interface ControlModel {
|
|
|
16
16
|
name: string;
|
|
17
17
|
label: string;
|
|
18
18
|
/** `password` 在不支持它的渲染档里必须**不渲染**,退化成文本框等于明文显示 */
|
|
19
|
-
control: 'text' | 'number' | 'boolean' | 'select' | 'textarea' | 'file' | 'password';
|
|
19
|
+
control: 'text' | 'number' | 'boolean' | 'select' | 'textarea' | 'file' | 'password' | 'date';
|
|
20
20
|
required?: boolean;
|
|
21
21
|
description?: string;
|
|
22
22
|
defaultValue?: unknown;
|
|
@@ -153,6 +153,47 @@ interface EchartHandle {
|
|
|
153
153
|
*/
|
|
154
154
|
declare function mountEchart(container: HTMLElement): EchartHandle;
|
|
155
155
|
//#endregion
|
|
156
|
+
//#region src/viewer/presetComponents.d.ts
|
|
157
|
+
/**
|
|
158
|
+
* viewer 的宿主预置组件(0.11.0 分册 18 FR-18.5 / 分册 19)。
|
|
159
|
+
*
|
|
160
|
+
* 技能**不写 JS**:文档 HTML 里只留占位,由这里挂载真实组件。
|
|
161
|
+
* 交互只落在图表上——表格排序的例子已作废(分册 29 §2 登记 #13)。
|
|
162
|
+
*
|
|
163
|
+
* 三条硬约束:
|
|
164
|
+
* - props 用 **catalog 自己的 zod schema** 解析,同形因此是机制上成立的,
|
|
165
|
+
* 不是靠一句「记得同步」的注释(FR-19.2);
|
|
166
|
+
* - 值一律经 `textContent` 落地,**永不** `innerHTML`(FR-19.4 / AC-19.5);
|
|
167
|
+
* - 白名单外的名字只渲染降级提示,**不触发任何按名 import**(FR-19.3)。
|
|
168
|
+
*/
|
|
169
|
+
/** 占位元素的属性名,模板与挂载方共用(FR-19.1 的契约) */
|
|
170
|
+
declare const VIEWER_COMPONENT_ATTR = "data-webskill-component";
|
|
171
|
+
declare const VIEWER_PROPS_ATTR = "data-webskill-props";
|
|
172
|
+
/** 降级提示的标记;模板 CSS 与判据都认这个属性,不认某个 class 名 */
|
|
173
|
+
declare const VIEWER_FALLBACK_ATTR = "data-webskill-fallback";
|
|
174
|
+
/** 文档面可用的组件白名单(FR-19.3)。字面量数组——不接受任何按名动态加载 */
|
|
175
|
+
declare const DOCUMENT_COMPONENTS: readonly ["Chart", "Table", "Metric", "Gauge", "KeyValue"];
|
|
176
|
+
type DocumentComponentName = (typeof DOCUMENT_COMPONENTS)[number];
|
|
177
|
+
interface ViewerComponentsHandle {
|
|
178
|
+
dispose(): void;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* 扫描 `root` 下的占位并挂载预置组件。
|
|
182
|
+
*
|
|
183
|
+
* 逐个占位独立处理:一个坏占位只降级它自己,不会让整篇文档变空白。
|
|
184
|
+
*/
|
|
185
|
+
declare function mountViewerComponents(root: ParentNode): ViewerComponentsHandle;
|
|
186
|
+
//#endregion
|
|
187
|
+
//#region src/catalog/gauge.d.ts
|
|
188
|
+
/**
|
|
189
|
+
* `Gauge` 的百分比换算(0.11.0 分册 19 FR-19.2)。
|
|
190
|
+
*
|
|
191
|
+
* catalog 的 React `SpecGauge` 与文档面的预置组件都读这一份:
|
|
192
|
+
* 换算里有两个容易各写各的判断——`max === min` 时不能除零、越界值要夹紧——
|
|
193
|
+
* 两处各写一遍就会在边界值上给出不同的条。
|
|
194
|
+
*/
|
|
195
|
+
declare function gaugePercent(value: number, min: number, max: number): number;
|
|
196
|
+
//#endregion
|
|
156
197
|
//#region src/web/webFormBridge.d.ts
|
|
157
198
|
/**
|
|
158
199
|
* 框架无关原生 DOM 的 UiBridge:request 渲染表单并返回 Promise
|
|
@@ -236,7 +277,15 @@ interface UiSpecDegradation {
|
|
|
236
277
|
kind: 'prop-dropped' | 'node-dropped' | 'unknown-component' | 'constraint-ignored' | 'condition-invalid';
|
|
237
278
|
component: string;
|
|
238
279
|
detail: string;
|
|
280
|
+
/**
|
|
281
|
+
* 稳定降级码,供上层可编程处理(AC-13.4)。
|
|
282
|
+
* 只有**策略性**拒绝才有码;纯粹的类型不匹配没有,那种只需要 detail。
|
|
283
|
+
* 组件在自己的 zod 里用 `codedError()` 声明,sanitize 自动提取——不维护组件名单。
|
|
284
|
+
*/
|
|
285
|
+
code?: UiSpecDegradationCode;
|
|
239
286
|
}
|
|
287
|
+
/** 稳定降级码。新增成员即新增公开契约,须登记。 */
|
|
288
|
+
type UiSpecDegradationCode = 'IMAGE_SRC_NOT_ALLOWED';
|
|
240
289
|
interface UiSpecSanitization {
|
|
241
290
|
/** `undefined` 表示连根节点都救不回来 */
|
|
242
291
|
node: UiSpecNode | undefined;
|
|
@@ -294,10 +343,64 @@ declare const UI_CATALOG_GROUPS: {
|
|
|
294
343
|
};
|
|
295
344
|
/**
|
|
296
345
|
* catalog 系统提示的体积上限(UTF-8 字节,FR-6.6)。
|
|
297
|
-
*
|
|
298
|
-
*
|
|
346
|
+
*
|
|
347
|
+
* **0.11.0 起只是 `CATALOG_PROMPT_MAX` 的别名**:旧值 20 480 相对实际 7 788 宽了 2.6 倍,
|
|
348
|
+
* 拦不住任何东西;且它只量提示词,漏掉了 `render_ui` 入参 Schema 那约两分之一的成本。
|
|
349
|
+
* @deprecated 用 `CATALOG_PROMPT_MAX` / `CATALOG_SCHEMA_MAX`(`./budget`)。
|
|
299
350
|
*/
|
|
300
|
-
declare const UI_CATALOG_PROMPT_BUDGET_BYTES
|
|
351
|
+
declare const UI_CATALOG_PROMPT_BUDGET_BYTES: number;
|
|
352
|
+
//#endregion
|
|
353
|
+
//#region src/catalog/budget.d.ts
|
|
354
|
+
/**
|
|
355
|
+
* catalog 请求体积上限(0.11.0 分册 14 / AC-G20)的**数字单一来源**。
|
|
356
|
+
*
|
|
357
|
+
* 度量与报错格式在 `scripts/catalogBudget.mjs`(`check:contracts` 与 vitest 共用);
|
|
358
|
+
* 那边不重复这些数字,一律从本模块读——两处各写一份阈值就等于没有阈值。
|
|
359
|
+
*
|
|
360
|
+
* catalog 进入每一次 LLM 请求的有两处:系统提示词 `toPrompt()` 与
|
|
361
|
+
* `render_ui` 入参 `toJsonSchema()`。只量前者会漏掉约 2/3 的成本。
|
|
362
|
+
*
|
|
363
|
+
* **超阈值的处置是砍组件或收窄枚举取值,不是抬高这里的数字。**
|
|
364
|
+
*/
|
|
365
|
+
/**
|
|
366
|
+
* 预算阶段。分册 12 是本版最后一处 catalog 增量(分册 11 只把 `date` 加进
|
|
367
|
+
* 已有的 `Field.type`,分册 23 不碰 catalog),故在此切到 `'final'`:
|
|
368
|
+
* 阈值收紧到实测终态 + 余量,且余量小于一个平均组件的成本
|
|
369
|
+
* ——余量大于一个组件,等于默许下一版无声塞进一个。
|
|
370
|
+
*/
|
|
371
|
+
declare const CATALOG_BUDGET_STAGE: 'entry' | 'final';
|
|
372
|
+
/**
|
|
373
|
+
* 阈值 = **已落地实测** + 余量,余量须小于一个平均组件的成本。
|
|
374
|
+
*
|
|
375
|
+
* 2026-08-14 实测终态(分册 12 落地后):prompt 12 744 / schema 21 470,30 个组件。
|
|
376
|
+
* 平均组件成本 prompt 425 / schema 716。
|
|
377
|
+
* 当前余量 prompt 256 / schema 330,均小于一个平均组件——再加一个组件必红。
|
|
378
|
+
*
|
|
379
|
+
* ⚠️ **本版这两个数字被上调过两次**,两次都由需求方裁决并改写了需求文档
|
|
380
|
+
* (分册 29 §2 范围订正 第 7 条与 §2.2),不是实现阶段自行放宽:
|
|
381
|
+
*
|
|
382
|
+
* 1. 11 200 → 12 200 / 20 500 → 21 200:分册 13 组件描述由短改长。
|
|
383
|
+
* `example` 是既有护栏的硬要求(`catalog.test.ts` 与 `catalogMatrix.test.tsx`
|
|
384
|
+
* 逐个组件校验并四档渲染),靠省掉示例腾出的空间收不回来。
|
|
385
|
+
* 2. 12 200 → 13 000 / 21 200 → 21 800:分册 12 的 `Split` 实测 490 + 694,
|
|
386
|
+
* 超出计划增量(403 + 1 047)的 prompt 侧。需求方裁定
|
|
387
|
+
* 「描述要长,可用性大于预算阈值」——收紧措辞可省回 158 字节,
|
|
388
|
+
* 但砍的正是各组件「何时改用 X」的辨析句,即选型准确率本身。
|
|
389
|
+
*
|
|
390
|
+
* 两次上调合计把单请求成本从 21.7 KB 抬到约 34.2 KB。
|
|
391
|
+
* **AC-G20 原文「超了砍组件、不抬阈值」已被推翻,但仅限本版;
|
|
392
|
+
* 后续再撞顶仍须回到需求方,不得沿用本版作为先例。**
|
|
393
|
+
*/
|
|
394
|
+
declare const CATALOG_PROMPT_MAX = 13000;
|
|
395
|
+
declare const CATALOG_SCHEMA_MAX = 21800;
|
|
396
|
+
/**
|
|
397
|
+
* **尚未落地**的计划增量。本版已无剩余 catalog 增量,故归零;
|
|
398
|
+
* `CATALOG_BUDGET_STAGE` 同时切到 `'final'`,余量改由「小于一个平均组件」判定。
|
|
399
|
+
*/
|
|
400
|
+
declare const PLANNED_INCREMENT: {
|
|
401
|
+
readonly prompt: 0;
|
|
402
|
+
readonly schema: 0;
|
|
403
|
+
};
|
|
301
404
|
//#endregion
|
|
302
405
|
//#region src/catalog/formScopes.d.ts
|
|
303
406
|
/** 声明树里一个 `Form` 的提交作用域。@experimental */
|
|
@@ -769,4 +872,4 @@ interface LoadedOpenUiPeers {
|
|
|
769
872
|
*/
|
|
770
873
|
declare function loadOpenUiPeers(): Promise<LoadedOpenUiPeers>;
|
|
771
874
|
//#endregion
|
|
772
|
-
export {
|
|
875
|
+
export { UiCatalogToolSourceOptions as $, resolveColumnWidths as $t, FormModel as A, collectSpecActions as At, RENDER_UI_TOOL as B, gaugePercent as Bt, DESCRIBE_UI_PRESET_TOOL as C, a2uiComponentShapes as Ct, EvaluateFieldConditionOptions as D, chartToTable as Dt, EchartHandle as E, chartSpecFromProps as Et, MAX_CONDITION_DEPTH as F, evaluateFieldCondition as Ft, UI_CATALOG_GROUPS as G, mountEchart as Gt, SPEC_TABLE_MIN_COLUMN_WIDTH as H, interactionToUiSpec as Ht, NormalizedColumnWidths as I, fromA2uiSpecAction as It, UI_PRESET_NAMES as J, qualifyFieldName as Jt, UI_CATALOG_PROMPT_BUDGET_BYTES as K, mountViewerComponents as Kt, OpenUiRendererProps as L, fromA2uiSurfaceAction as Lt, InteractionTexts as M, createUiCatalogToolSource as Mt, JsonRenderSpec as N, defineUiCatalog as Nt, FieldCondition as O, collectFormScopes as Ot, LoadedOpenUiPeers as P, ensureStyles as Pt, UiCatalogPromptOptions as Q, renderRenderResult as Qt, OpenUiRuntime as R, fromUiSurfaceActionDispatch as Rt, DEFAULT_SURFACE_FORM_TEXTS as S, a2uiComponentSchema as St, DocumentComponentName as T, buildA2uiCatalogDefinition as Tt, SpecColumnMeta as U, loadOpenUiPeers as Ut, SPEC_TABLE_MIN_COLUMN_VAR as V, interactionToFormModel as Vt, SurfaceFormTexts as W, loadWebSkillLitCatalog as Wt, UiCatalog as X, renderMiniChart as Xt, UiActionDef as Y, renderBlocks as Yt, UiCatalogInput as Z, renderMiniMarkdown as Zt, CHART_PALETTE as _, WEBSKILL_A2UI_CATALOG_ID as _t, A2UI_SURFACE_ACTION as a, toJsonRenderSpec as an, UiSpecDegradationCode as at, ControlModel as b, WebFormBridge as bt, A2uiCatalogDefinition as c, toVercelToolInvocation as cn, UiSpecValidation as ct, A2uiMessage as d, VIEWER_COMPONENT_ATTR as dt, resolveInteractionTexts as en, UiComponentDef as et, A2uiSpecActionEvent as f, VIEWER_FALLBACK_ATTR as ft, CATALOG_SCHEMA_MAX as g, ViewerComponentsHandle as gt, CATALOG_PROMPT_MAX as h, VercelUiBridge as ht, A2UI_SPEC_FORM_PATH as i, toA2uiSurfaceAction as in, UiSpecDegradation as it, InteractionSpecLabels as j, collectValues as jt, FieldConditionResult as k, collectScopedValues as kt, A2uiCatalogHandle as l, uiCatalog as ln, UiSurfaceActionDispatch as lt, CATALOG_BUDGET_STAGE as m, VercelToolInvocation as mt, A2UI_COMMON_TYPES as n, shapeInteractionValue as nn, UiPreset as nt, A2UI_VERSION as o, toOpenUiSpecLang as on, UiSpecIssue as ot, A2uiSpecMessageOptions as p, VIEWER_PROPS_ATTR as pt, UI_PRESETS as q, normalizeColumnWidths as qt, A2UI_SPEC_ACTION as r, toA2uiSpecMessages as rn, UiPresetName as rt, A2uiCatalogComponent as s, toUiSurfaceActionDispatch as sn, UiSpecSanitization as st, A2UI_BASIC_CATALOG_ID as t, resolveSurfaceFormTexts as tn, UiFormScope as tt, A2uiComponentShape as u, uiPreset as un, VERCEL_INTERACTION_TOOL_NAME as ut, CollectedValues as v, WEBSKILL_STYLES_CSS as vt, DOCUMENT_COMPONENTS as w, applySuggestion as wt, DEFAULT_INTERACTION_TEXTS as x, ZodRuntime as xt, ColumnWidthsRejection as y, WEBSKILL_SURFACE_ACTION as yt, PLANNED_INCREMENT as z, fromVercelToolResult as zt };
|