@webskill/sdk 0.20.0 → 0.22.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/abnfDiagram-O67JEVCF-DtYFjfqO.js +109 -0
- package/dist/agent.d.ts +3 -3
- package/dist/agent.js +1171 -73
- package/dist/{approval-Bbh_Apwg.js → approval-DWQlDPbY.js} +527 -29
- package/dist/arc-8U_6NQWm.js +130 -0
- package/dist/architecture-7GRP2DOG-RTw1wpAq.js +4 -0
- package/dist/architectureDiagram-NJMV4G6O-XmmXrJAK.js +7473 -0
- package/dist/array-DQfpQNY8.js +8 -0
- package/dist/blockDiagram-BEXU5L5S-D4yjnCD1.js +2582 -0
- package/dist/browser.d.ts +1129 -48
- package/dist/browser.js +3562 -278
- package/dist/c4Diagram-YGBWAQC7-BLmA_JSd.js +3668 -0
- package/dist/channel-CZxxLrG7.js +9 -0
- package/dist/chunk-2Q5K7J3B-Ck03gkFR.js +21 -0
- package/dist/chunk-3FUC2YCW-tr6jmbQf.js +530 -0
- package/dist/chunk-5DYCD2WN-Bt97YGTd.js +58 -0
- package/dist/chunk-5VM5RSS4-BBxa48HL.js +21 -0
- package/dist/chunk-6AEJRKK7-JXK89I-O.js +14 -0
- package/dist/chunk-742MDFTN-CPmgCGwC.js +466 -0
- package/dist/chunk-7INBJB4K-C9jq9o66.js +6552 -0
- package/dist/chunk-7M6MHVWA-BrKCWcR1.js +4894 -0
- package/dist/chunk-7PRAP22T-BHED6GVs.js +95 -0
- package/dist/chunk-DUW6YSOI-DoZj78PO.js +19 -0
- package/dist/chunk-FOHPRMQF-Dkbp819z.js +27189 -0
- package/dist/chunk-GNY47TPC-Bpvq1T49.js +87 -0
- package/dist/chunk-GTNCS2PH-CLmh4I2c.js +686 -0
- package/dist/chunk-GWA4HPMP-B6vN3fkL.js +95 -0
- package/dist/chunk-J5ZVWO5B-Bi_Pcobw.js +26 -0
- package/dist/chunk-JWPE2WC7-D1rC79GS.js +12 -0
- package/dist/chunk-LNGE3PJU-D5OIoe3Z.js +2582 -0
- package/dist/chunk-MBY4JIJT-C34L7a4f.js +2276 -0
- package/dist/chunk-NETBCI7D-Cg84k8N8.js +321 -0
- package/dist/chunk-O7XYJQB3-B6K0KOSL.js +8846 -0
- package/dist/chunk-UA2S7LBM-DxHM29_K.js +612 -0
- package/dist/chunk-WEXAMYUT-Ba6jFWhB.js +33 -0
- package/dist/chunk-XXDRQBXY-DPbSy4kg.js +12 -0
- package/dist/chunk-Y2CYZVJY-U3QOMqrW.js +15 -0
- package/dist/chunk-Z7XXMR3K-oLg1h8F3.js +1038 -0
- package/dist/chunk-ZIGJFQKS-DqEFBuHR.js +2215 -0
- package/dist/classDiagram-v2-NBCMYWYE-BqnOWIUt.js +3845 -0
- package/dist/cose-bilkent-JH36ORCC-C0dTAHVK.js +4270 -0
- package/dist/cynefin-OW5HDTMX-B2QvgEQj.js +4 -0
- package/dist/cynefinDiagram-VND7K2PF-yAWc6Z3W.js +479 -0
- package/dist/cytoscape.esm-C64mRh9B.js +28325 -0
- package/dist/dagre-6A5THRUB-D0w2W27v.js +4816 -0
- package/dist/defaultLocale-B_EoOkSF.js +249 -0
- package/dist/diagram-22UHCM2B-DvgzhUzP.js +6115 -0
- package/dist/diagram-3UASUU5V-DWgUB-ef.js +795 -0
- package/dist/diagram-ATOU4E4O-P1olqwIs.js +553 -0
- package/dist/diagram-CDSNMT55-BUlZuLUe.js +402 -0
- package/dist/diagram-MLGK6HIB-6w5qmkGt.js +186 -0
- package/dist/diagram-MPIPVDR6-DEFiSo8o.js +289 -0
- package/dist/dist-UajCDt3n.js +92 -0
- package/dist/ebnfDiagram-ZINNZB2B-CI8liCfR.js +123 -0
- package/dist/elk-276RUBZZ-3SvW6OAK.js +90034 -0
- package/dist/erDiagram-OPXOYQCR-CPTbKhwP.js +2301 -0
- package/dist/{eventTypes-CwciaqCU.js → eventTypes-DcTQXSV1.js} +7 -1
- package/dist/eventmodeling-NTZA5JFV-BlyuqGp0.js +4 -0
- package/dist/flowDiagram-KWPJA3E3-CcUJ6HbV.js +18 -0
- package/dist/ganttDiagram-FUAMR5RP-31UjY0KK.js +3939 -0
- package/dist/geometry-wx5ZTYzi.js +715 -0
- package/dist/gitGraph-4MIJSDKK-ChdVlrk7.js +4 -0
- package/dist/gitGraphDiagram-X574FWY7-DKuxJymB.js +1153 -0
- package/dist/governance.d.ts +9 -3
- package/dist/governance.js +1 -1
- package/dist/graphlib-tk9gQYuN.js +4194 -0
- package/dist/{index-ad11wflI.d.ts → index-BiO9_XRk.d.ts} +2 -2
- package/dist/{index-DQ3-6GFu.d.ts → index-CjwdZQOS.d.ts} +945 -8
- package/dist/{index-BDyXe-a5.d.ts → index-YPd8ZSEa.d.ts} +413 -7
- package/dist/index.d.ts +4 -4
- package/dist/index.js +47 -41
- package/dist/info-A6RAGUB7-CxRAt9S9.js +4 -0
- package/dist/infoDiagram-VRGFBTTK-pRspGfjZ.js +25 -0
- package/dist/init-CMOIWdg-.js +16 -0
- package/dist/ishikawaDiagram-OU5B5YK6-DKerAPAg.js +975 -0
- package/dist/journeyDiagram-ZHPQQLJL-C4MK-YO5.js +1227 -0
- package/dist/kanban-definition-PNTS6WVX-BqsZpMXx.js +1244 -0
- package/dist/katex-BcRRvyh_.js +26465 -0
- package/dist/kind-Dc8x0HWz.js +110 -0
- package/dist/line-LgV8iVMV.js +48 -0
- package/dist/linear-BWKR0Tqd.js +393 -0
- package/dist/linkedDocument-CIuh_Yp0.js +416 -0
- package/dist/mcp.d.ts +2 -2
- package/dist/{memoryArtifactStore-D6dLeY55.js → memoryArtifactStore-Bs7glPqm.js} +14 -0
- package/dist/mermaid-parser.core-pYR5siSx.js +754 -0
- package/dist/mermaid.core-DMtwGCHy.js +1756 -0
- package/dist/mindmap-definition-NLK3R4M7-CXbD-myG.js +1312 -0
- package/dist/node.d.ts +8 -3
- package/dist/node.js +79 -4
- package/dist/{openUiLibrary-b0i7F_oZ.js → openUiLibrary-B7j3rLrm.js} +1 -1
- package/dist/{openUiSpecLang-CLXJEeRU.js → openUiSpecLang-BSYYnjay.js} +1 -1
- package/dist/ordinal-CxA6GHQS.js +84 -0
- package/dist/packet-AYTQ26CC-BOm08cxl.js +4 -0
- package/dist/path-C27Z2Bjv.js +106 -0
- package/dist/pegDiagram-GJSIUBJH-BLGJOewQ.js +115 -0
- package/dist/pie-WAS4IAKB-Dvg7glpk.js +4 -0
- package/dist/pieDiagram-5QR66LMP-laoaV_PB.js +298 -0
- package/dist/processSandboxEntry.js +5 -0
- package/dist/quadrantDiagram-O4NWA36T-Db_wFBkT.js +2236 -0
- package/dist/radar-RG4KPBEZ-BZDaTu06.js +4 -0
- package/dist/railroad-74A4TZTK-C-UhjkOy.js +4 -0
- package/dist/railroad-abnf-HS5TGJTU-dUKVA4OS.js +4 -0
- package/dist/railroad-ebnf-LZEXJU2U-DzQumk18.js +4 -0
- package/dist/railroad-peg-WCYAUIDC-B3vvTWed.js +4 -0
- package/dist/railroadDiagram-XR7U4H2S-BY0sTM4X.js +89 -0
- package/dist/requirementDiagram-PLB6GJNP-3rkQfEhs.js +2474 -0
- package/dist/rough.cjs-AmDd_NQk.js +1395 -0
- package/dist/sandboxWorkerEntry.js +5 -0
- package/dist/sankeyDiagram-IPEJSGJF-CGAJhyG2.js +3578 -0
- package/dist/sequenceDiagram-PO4LG4MO-9FJjFX06.js +5522 -0
- package/dist/sizeCapture-INFHLROL-D8PWxdOn.js +56 -0
- package/dist/{skillVersionStore-B24Jjjry-v2CCU0Xo.d.ts → skillVersionStore-B24Jjjry-BY1H7Krp.d.ts} +1 -1
- package/dist/src-NkhI3UMl.js +2653 -0
- package/dist/stateDiagram-v2-GCMORJYK-B0O3wc1-.js +2715 -0
- package/dist/swimlanes-2SLR337P-D4EOnrpu.js +6637 -0
- package/dist/swimlanesDiagram-TC7HE7FX-BUx29EJ9.js +30 -0
- package/dist/testing.d.ts +2 -1
- package/dist/testing.js +1 -1
- package/dist/timeline-definition-EJHVYXUP-CrgiiB4C.js +1513 -0
- package/dist/treeView-Q6P3EWNA-C1by-Gzc.js +4 -0
- package/dist/treemap-WGGIJYW6-mC2NZ6ad.js +4 -0
- package/dist/{types-Btpdd1y--BcxQ10Fa.d.ts → types-CpDRZ0rA-BM5FI9oN.d.ts} +111 -9
- package/dist/ui-react.d.ts +3 -3
- package/dist/ui-react.js +3718 -77
- package/dist/ui-vue.d.ts +1 -1
- package/dist/ui.d.ts +3 -3
- package/dist/ui.js +2 -2
- package/dist/untrustedText-BIaRvPZK.js +16 -0
- package/dist/usecaseDiagram-POWQR4AR-BUt_TQOY.js +14397 -0
- package/dist/vennDiagram-UO4OBE2U-CwXr0wjA.js +2808 -0
- package/dist/wardley-WFR3VGLG-CVSYjq_S.js +4 -0
- package/dist/wardleyDiagram-VNRHLVJA-Cpfd47dQ.js +874 -0
- package/dist/{webSkillApi-CsvA69qk.js → webSkillApi-Dy-Zjv0y.js} +1 -1
- package/dist/{webskillLitCatalog-W06npwej.js → webskillLitCatalog-D5BCiMCU.js} +1 -1
- package/dist/xychartDiagram-PMCCYNJV-e1TeVoc6.js +2704 -0
- package/package.json +6 -5
- package/dist/kind-DxgS8LM-.js +0 -77
- package/dist/linkedDocument-xNXF-z8n.js +0 -94
- package/dist/types-DOJI5YC3.js +0 -90
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Ft as ValidationReport, H as DiscoveryResult, K as FileSystemProvider, Nt as UiSpecNode, O as UiSurfaceActionRequest, Rt as WebSkillErrorCode, S as UiBridge, St as SkillManifest, T as UiSpecEvent, X as JsonSchema, _ as LlmToolSpec, _t as SkillDocument, b as RenderResultRequest, d as LlmContentPart, et as Page, f as LlmMessage, g as LlmToolCall, gt as SkillDiscovery, h as LlmTokenUsage, ht as SkillCatalogEntry, i as FormField, l as LlmClient, m as LlmStreamEvent, mt as SkillCatalog, n as ArtifactStore, nt as RemoteUrlPolicy, o as InteractionPolicy, p as LlmResponse, r as ChartSpec, s as InteractionRequest, t as Artifact, tt as PageQuery, u as LlmCompleteInput, v as MemoryStore, vt as SkillInstallSource, w as UiSpecDrafts, y as RenderBlock } from "./types-CpDRZ0rA-BM5FI9oN.js";
|
|
2
2
|
//#region ../runtime/dist/index.d.ts
|
|
3
3
|
//#region src/llm/parts.d.ts
|
|
4
4
|
/** 纯文本消息内容的构造快捷方式(引擎内部绝大多数消息仍是纯文本) */
|
|
@@ -6,6 +6,97 @@ declare const textParts: (text: string) => LlmContentPart[];
|
|
|
6
6
|
/** 取出 parts 中的文本(非文本分片在纯文本语境下无法表达,此处按丢弃处理——调用方须先校验) */
|
|
7
7
|
declare const partsToText: (parts: readonly LlmContentPart[] | undefined) => string;
|
|
8
8
|
//#endregion
|
|
9
|
+
//#region src/spreadsheet/types.d.ts
|
|
10
|
+
/**
|
|
11
|
+
* 表格导出契约(0.21.0 分册 10 FR-10.2)。
|
|
12
|
+
*
|
|
13
|
+
* 这份契约是**三处同源**的唯一事实源:`export_spreadsheet` 的参数 schema、
|
|
14
|
+
* `context.writeSpreadsheet` 的入参、编码器的输入。
|
|
15
|
+
*/
|
|
16
|
+
/** 单元格取值。`null` / `undefined` / `''` 三者同义,均产出空单元格(DV-3) */
|
|
17
|
+
type SpreadsheetCell = string | number | boolean | null | undefined;
|
|
18
|
+
interface SpreadsheetSheet {
|
|
19
|
+
/** 工作表名。Excel 限制:1–31 字符,且不含 `: \ / ? * [ ]` */
|
|
20
|
+
name: string;
|
|
21
|
+
/** 表头文本。给了就作为首行并加粗;不给则首行即数据 */
|
|
22
|
+
columns?: string[];
|
|
23
|
+
/** 数据行。每行长度不必与 `columns` 相等,短则补空 */
|
|
24
|
+
rows: SpreadsheetCell[][];
|
|
25
|
+
/**
|
|
26
|
+
* 嵌入本表的图片(0.22.0 分册 20 FR-20.1)。逐表独立。
|
|
27
|
+
*
|
|
28
|
+
* **不承载字节**:这份规格是跨沙箱桥的 JSON 契约,字节由 `ref` 解析得到(FR-20.3)。
|
|
29
|
+
*/
|
|
30
|
+
images?: SpreadsheetImage[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 图片锚点。行列按 **Excel 口径从 1 起**,与校验错误信息里的行号同一口径:
|
|
34
|
+
* 存在 `columns` 时表头占第 1 行,数据第 n 行的锚点行号即 `n + 1`(FR-20.4)。
|
|
35
|
+
*/
|
|
36
|
+
interface SpreadsheetImageAnchor {
|
|
37
|
+
row: number;
|
|
38
|
+
column: number;
|
|
39
|
+
}
|
|
40
|
+
interface SpreadsheetImage {
|
|
41
|
+
/**
|
|
42
|
+
* 图片引用。前缀族与投放通道的 `data-webskill-image` 同一套(FR-20.2)——
|
|
43
|
+
* 但**编码器不认识前缀**:它只把 `ref` 交给解析出口,认不认得由解析那一层说了算。
|
|
44
|
+
*/
|
|
45
|
+
ref: string;
|
|
46
|
+
anchor: SpreadsheetImageAnchor;
|
|
47
|
+
/** 显示宽度(px)。锚点所在列的列宽由它推导(FR-20.5) */
|
|
48
|
+
width: number;
|
|
49
|
+
/** 显示高度(px)。锚点所在行的行高由它推导 */
|
|
50
|
+
height: number;
|
|
51
|
+
/** 无障碍描述,写进 xlsx 的 drawing 描述位 */
|
|
52
|
+
alt?: string;
|
|
53
|
+
}
|
|
54
|
+
/** 解析出来的图片字节。`contentType` 决定 xlsx 里 media 条目的扩展名 */
|
|
55
|
+
interface SpreadsheetImageBytes {
|
|
56
|
+
readonly bytes: Uint8Array;
|
|
57
|
+
readonly contentType: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 引用 → 字节的解析出口(FR-20.3)。
|
|
61
|
+
*
|
|
62
|
+
* 由调用方提供,**不写进编码器内部**:编码器至今不认识产物、run 与工具,
|
|
63
|
+
* 0.21.0 AC-10.8「双消费面逐字节相同」靠这一点结构性成立。
|
|
64
|
+
* 解析不到时返回 `undefined`,由编码器归因成带定位的 `VALIDATION_FAILED`(FR-20.9)。
|
|
65
|
+
*/
|
|
66
|
+
type SpreadsheetImageResolver = (ref: string) => Promise<SpreadsheetImageBytes | undefined>;
|
|
67
|
+
interface SpreadsheetSpec {
|
|
68
|
+
sheets: SpreadsheetSheet[];
|
|
69
|
+
}
|
|
70
|
+
/** 规模上限(FR-10.7)。越界一律 `VALIDATION_FAILED`,不静默截断 */
|
|
71
|
+
declare const SPREADSHEET_LIMITS: {
|
|
72
|
+
readonly sheets: 16;
|
|
73
|
+
readonly rowsPerSheet: 10000;
|
|
74
|
+
readonly columnsPerSheet: 256;
|
|
75
|
+
/** Excel 对单个单元格文本的硬限制 */
|
|
76
|
+
readonly charsPerCell: 32767;
|
|
77
|
+
readonly bytes: number;
|
|
78
|
+
/**
|
|
79
|
+
* 单张图片的字节上限(FR-20.6)。在解析后、编码前查,
|
|
80
|
+
* 好过让调用方等整包编码完才被告知超了 16 MB 的总顶。
|
|
81
|
+
*/
|
|
82
|
+
readonly imageBytes: number;
|
|
83
|
+
/** 单表图片张数上限;与行数上限同性质,防止一次编码退化成几千次解析 */
|
|
84
|
+
readonly imagesPerSheet: 2000;
|
|
85
|
+
};
|
|
86
|
+
declare const SPREADSHEET_MIME_TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
|
87
|
+
declare const SPREADSHEET_EXTENSION = ".xlsx";
|
|
88
|
+
/**
|
|
89
|
+
* 本版**不支持**的 xlsx 能力(FR-10.8,备案 D75)。
|
|
90
|
+
*
|
|
91
|
+
* 导出这张表是为了让上层能如实向用户/模型声明缺什么,而不是笼统写「基础支持」——
|
|
92
|
+
* 与 `XLSX_UNEXTRACTED` 同一条口径。
|
|
93
|
+
*
|
|
94
|
+
* `'images'` 已于 0.22.0 分册 20 移出。`'column-widths'` **仍在**:
|
|
95
|
+
* 那一册只让图片锚点所在的行列拿到够用的尺寸,没有开放通用的行高列宽 API(FR-20.5)。
|
|
96
|
+
*/
|
|
97
|
+
declare const XLSX_UNSUPPORTED: readonly ["cell-styles", "fonts-and-colors", "borders", "formulas", "merged-cells", "charts", "comments", "date-and-time-cell-types", "column-widths", "frozen-panes", "auto-filter", "incremental-edit-of-existing-file"];
|
|
98
|
+
type XlsxUnsupportedFeature = (typeof XLSX_UNSUPPORTED)[number];
|
|
99
|
+
//#endregion
|
|
9
100
|
//#region src/tools/types.d.ts
|
|
10
101
|
interface ToolDefinition {
|
|
11
102
|
/** LLM 可见名:脚本工具为 `${skillName}__${scriptName}` */
|
|
@@ -49,13 +140,23 @@ declare const TEXT_BUDGETED_CONTENT_TYPES: ReadonlySet<string>;
|
|
|
49
140
|
*/
|
|
50
141
|
declare const DEFAULT_MAX_DOCUMENT_BYTES = 25600000;
|
|
51
142
|
/**
|
|
52
|
-
* `document-text` 分片的上限(FR-23.4
|
|
143
|
+
* `document-text` 分片的上限(FR-23.4;值由 0.22.0 分册 15 修订)。
|
|
144
|
+
*
|
|
145
|
+
* 它是一道**闸门**,不是配额:抽出来的文本整段进上下文,超了整份拒绝、绝不截断。
|
|
146
|
+
* 抬高它不会让任何一份文档变大,只在「正文落在新旧值之间」时改变行为。
|
|
147
|
+
*
|
|
148
|
+
* 原值 500 KB 的依据是「按英文 4 字节/token 折算 ≈ 128K token,占 200K 窗口的多半」。
|
|
149
|
+
* 那个依据有两处站不住:中文 UTF-8 约 4.5 字节/token,按英文口径设闸对中文偏紧;
|
|
150
|
+
* 而窗口是宿主选的模型决定的,SDK 替宿主假定一个 2026 年初的典型值,
|
|
151
|
+
* 代价由「模型明明装得下却被拒绝」的用户承担——他们从提示里看不出这一点(FR-15.1)。
|
|
53
152
|
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
153
|
+
* 新值之下,超窗口的失败由 provider 报出而不再由 SDK 提前拦截,这是分册 15 有意的取舍:
|
|
154
|
+
* 误拒浪费的是一次**本可成功**的请求,provider 拒收浪费的是一次**必然失败**的请求。
|
|
155
|
+
* SDK 不做请求体总量预检——那需要知道每个 provider 的窗口与分词口径,又回到「替宿主假定」。
|
|
156
|
+
*
|
|
157
|
+
* 取 1024 的整数倍:设置界面按 KB 展示(5 120 000 = 5000 KB)。
|
|
57
158
|
*/
|
|
58
|
-
declare const DEFAULT_MAX_DOCUMENT_TEXT_BYTES =
|
|
159
|
+
declare const DEFAULT_MAX_DOCUMENT_TEXT_BYTES = 5120000;
|
|
59
160
|
/**
|
|
60
161
|
* 单次 fetchData 结果的字节上限(分册 16,FR-16.6):1000 KB。
|
|
61
162
|
* 结构化数据不是文档,量级差一个数量级;超出**只拒不截**——截断的 JSON 解不出来。
|
|
@@ -171,6 +272,18 @@ interface ScriptExecutionContext {
|
|
|
171
272
|
mimeType?: string;
|
|
172
273
|
metadata?: Record<string, unknown>;
|
|
173
274
|
}): Promise<Artifact>;
|
|
275
|
+
/**
|
|
276
|
+
* 把表格规格编码为 xlsx 并写成 run 产物(0.21.0 分册 10 FR-10.4)。
|
|
277
|
+
*
|
|
278
|
+
* 编码跑在**宿主侧**:沙箱产物里没有编码器,桥上传的是规格而不是几百 KB 的
|
|
279
|
+
* `number[]`,产物字节因此也不可能由脚本伪造。
|
|
280
|
+
* `mimeType` 由实现固定,调用方无从覆盖;`options.metadata` 透传给 `writeArtifact`,
|
|
281
|
+
* 所以 `resultCard: false` 对它同样生效。
|
|
282
|
+
* 宿主未装配即整个键不存在(同 fetchData / documentSurface)。 @experimental
|
|
283
|
+
*/
|
|
284
|
+
writeSpreadsheet?(path: string, spec: SpreadsheetSpec, options?: {
|
|
285
|
+
metadata?: Record<string, unknown>;
|
|
286
|
+
}): Promise<Artifact>;
|
|
174
287
|
/**
|
|
175
288
|
* 按**宿主声明的 sourceId** 取数(FR-16.1)。脚本给不了 URL——
|
|
176
289
|
* 目标由宿主在 `DataSourceDef.target` 里写死,这就是「唯一授权面」。
|
|
@@ -501,6 +614,11 @@ declare function createScriptContext(deps: {
|
|
|
501
614
|
* 脚本 `typeof context.documentSurface` 即可探测。
|
|
502
615
|
*/
|
|
503
616
|
documentSurface?: boolean;
|
|
617
|
+
/**
|
|
618
|
+
* 宿主允许技能写表格产物(分册 10 FR-10.4)。传 `false` 与不传同义。
|
|
619
|
+
* 它不是一个新能力,是 `writeArtifact` 的一个便利入口——授权与开关都走那一位(DV-7)。
|
|
620
|
+
*/
|
|
621
|
+
writeSpreadsheet?: boolean;
|
|
504
622
|
/**
|
|
505
623
|
* 本次 run 可读的用户上传文件(分册 17)。传进来的 `read` **已经过授权与预算**:
|
|
506
624
|
* 把守在引擎侧只做一遍,四个执行器才不会各自实现一套而出现不一致。
|
|
@@ -563,6 +681,16 @@ type ExecuteLifecycleData = {
|
|
|
563
681
|
kind: 'surface-action-resumed';
|
|
564
682
|
surfaceId: string;
|
|
565
683
|
actionId: string;
|
|
684
|
+
} |
|
|
685
|
+
/**
|
|
686
|
+
* 视觉委派的逐张进度(分册 26 FR-26.9)。只在委派进行中发,不进 trace:
|
|
687
|
+
* 它是过程指示,不是结果的一部分。`source` 是触发取图的工具名。
|
|
688
|
+
*/
|
|
689
|
+
{
|
|
690
|
+
kind: 'vision-progress';
|
|
691
|
+
source: string;
|
|
692
|
+
done: number;
|
|
693
|
+
total: number;
|
|
566
694
|
};
|
|
567
695
|
/** interact 相位:脚本发起的交互请求,或声明式 surface 上的动作等待 */
|
|
568
696
|
type InteractLifecycleData = {
|
|
@@ -693,6 +821,11 @@ interface AgentLoopConfig {
|
|
|
693
821
|
maxDocumentTextBytes?: number;
|
|
694
822
|
/** `read_linked_document` 的出站准入策略;与脚本取数共用同一个判定(AC-G23) */
|
|
695
823
|
remoteUrl?: RemoteUrlPolicy;
|
|
824
|
+
/**
|
|
825
|
+
* 视觉委派的并发度(默认 2,上限 3,分册 26 FR-26.5)。
|
|
826
|
+
* 越界一律夹取而不报错:这是性能旋钮,配错了应该退化成能用,不是让 run 失败。
|
|
827
|
+
*/
|
|
828
|
+
visionConcurrency?: number;
|
|
696
829
|
}
|
|
697
830
|
/** 技能状态拦截 port(治理装配;无注入默认全放行) */
|
|
698
831
|
interface SkillStateGuard {
|
|
@@ -830,6 +963,38 @@ declare function schemaToForm(schema: JsonSchema, providedArgs?: Record<string,
|
|
|
830
963
|
* 实现在 `browser`,两者的公共下游只有 `core` 与 `runtime`,
|
|
831
964
|
* 而 `runtime/interaction` 已经是 surface 协议的归属地。
|
|
832
965
|
*/
|
|
966
|
+
/**
|
|
967
|
+
* 一张已解析图片的**实测事实**(0.22.0 FR-11.14)。
|
|
968
|
+
*
|
|
969
|
+
* 尺寸只能由宿主侧实测得出,不得取自创作模型里的图片块:块的内容来自模型,
|
|
970
|
+
* 拿它去算预算等于让被限制方自报限额(`{ width: 1 }` 就能把像素维度关掉)。
|
|
971
|
+
* @experimental
|
|
972
|
+
*/
|
|
973
|
+
interface ViewerImageFact {
|
|
974
|
+
/** 图片在创作模型里的引用,进拒绝消息与丢图归因 */
|
|
975
|
+
ref: string;
|
|
976
|
+
/** 实测像素宽 */
|
|
977
|
+
width: number;
|
|
978
|
+
/** 实测像素高 */
|
|
979
|
+
height: number;
|
|
980
|
+
/** 这张图在载荷里占的 UTF-16 code unit 数(即填进 `src` 的 data URL 长度) */
|
|
981
|
+
units: number;
|
|
982
|
+
}
|
|
983
|
+
/**
|
|
984
|
+
* 一张没能进到文档里的图(0.22.0 FR-11.8 / AC-G3)。
|
|
985
|
+
*
|
|
986
|
+
* 三处产生点共用同一个形状:解析、DOCX 编码、PPTX 编码。
|
|
987
|
+
* `alt` 一并带出来,是因为归因要给人看,而 `ref` 对用户是一串无意义的产物名。
|
|
988
|
+
* @experimental
|
|
989
|
+
*/
|
|
990
|
+
interface ImageOmission {
|
|
991
|
+
ref: string;
|
|
992
|
+
alt: string;
|
|
993
|
+
/** 丢在哪一环 */
|
|
994
|
+
stage: 'resolve' | 'encode-docx' | 'encode-pptx';
|
|
995
|
+
/** 英文、可执行:说清楚是什么原因,用户据此判断该重取图还是换一张 */
|
|
996
|
+
reason: string;
|
|
997
|
+
}
|
|
833
998
|
/**
|
|
834
999
|
* 宿主侧的文档投放实现;`@webskill/browser` 的 `createDocumentSurfaceHost` 满足它。
|
|
835
1000
|
*
|
|
@@ -841,10 +1006,20 @@ interface DocumentSurfaceHost {
|
|
|
841
1006
|
open(input: {
|
|
842
1007
|
skillName: string;
|
|
843
1008
|
dataSource: string;
|
|
1009
|
+
/**
|
|
1010
|
+
* `data` 是单向下发给 viewer 的结构化数据(`startViewerShell` 的第三个回调收它)。
|
|
1011
|
+
* 外壳一直支持,只是端口类型此前没暴露;DWG 投放(0.22.0 分册 19)必须走它——
|
|
1012
|
+
* 几万个实体的几何塞进 `html` 等于先序列化成几十兆字符再解析回来。
|
|
1013
|
+
*/
|
|
844
1014
|
document: {
|
|
845
1015
|
html: string;
|
|
846
1016
|
css?: string;
|
|
1017
|
+
data?: unknown;
|
|
847
1018
|
};
|
|
1019
|
+
/** 已填进文档的图片事实;缺省表示这份文档没有图 */
|
|
1020
|
+
images?: readonly ViewerImageFact[];
|
|
1021
|
+
/** 解析阶段丢掉的图;缺省表示一张都没丢 */
|
|
1022
|
+
omissions?: readonly ImageOmission[];
|
|
848
1023
|
}): Promise<void>;
|
|
849
1024
|
}
|
|
850
1025
|
/**
|
|
@@ -1227,8 +1402,22 @@ declare class FsArtifactStore implements ArtifactStore {
|
|
|
1227
1402
|
metadata?: Record<string, unknown>;
|
|
1228
1403
|
}): Promise<Artifact>;
|
|
1229
1404
|
listArtifacts(runId: string): Promise<Artifact[]>;
|
|
1405
|
+
readArtifact(runId: string, path: string): Promise<Uint8Array>;
|
|
1230
1406
|
}
|
|
1231
1407
|
//#endregion
|
|
1408
|
+
//#region src/spreadsheet/encodeSpreadsheet.d.ts
|
|
1409
|
+
/**
|
|
1410
|
+
* 把表格规格编码为 xlsx 字节。
|
|
1411
|
+
*
|
|
1412
|
+
* 纯函数——不认识产物、run 与工具,因此工具、脚本能力、测试三个消费面共用同一份
|
|
1413
|
+
* 实现,AC-10.8「双消费面逐字节相同」是结构性成立的。
|
|
1414
|
+
*
|
|
1415
|
+
* `resolveImage` 是图片引用的解析出口(0.22.0 分册 20 FR-20.3)。它同样不破坏纯函数性:
|
|
1416
|
+
* 给定相同的规格与相同的解析结果,输出逐字节相同。规格里有图片却没给它,是
|
|
1417
|
+
* `VALIDATION_FAILED` 而不是静默出一份缺图的文件(FR-20.9)。
|
|
1418
|
+
*/
|
|
1419
|
+
declare function encodeSpreadsheet(spec: SpreadsheetSpec, resolveImage?: SpreadsheetImageResolver): Promise<Uint8Array>;
|
|
1420
|
+
//#endregion
|
|
1232
1421
|
//#region src/sandbox/bridgeProtocol.d.ts
|
|
1233
1422
|
/** 能力桥 RPC 消息类型 + 入站校验(Worker 沙箱 ↔ 宿主;browser/node 共用单一来源) */
|
|
1234
1423
|
type BridgeRequest = {
|
|
@@ -1257,6 +1446,18 @@ type BridgeRequest = {
|
|
|
1257
1446
|
* 在这里拒绝只能 `return undefined`,而那会丢掉请求 id 使脚本挂到超时。
|
|
1258
1447
|
*/
|
|
1259
1448
|
metadata?: unknown;
|
|
1449
|
+
} |
|
|
1450
|
+
/**
|
|
1451
|
+
* 表格导出(0.21.0 分册 10 FR-10.5)。桥上传的是**规格**不是字节:
|
|
1452
|
+
* 编码器留在宿主侧,沙箱产物里没有它,二进制也不必退化成 number[] 传一遍。
|
|
1453
|
+
*/
|
|
1454
|
+
{
|
|
1455
|
+
kind: 'writeSpreadsheet';
|
|
1456
|
+
id: string;
|
|
1457
|
+
path: string;
|
|
1458
|
+
/** `SpreadsheetSpec` 的 JSON 形态。**不可信载荷**,形状判定在宿主侧的编码器里 */
|
|
1459
|
+
spec: unknown;
|
|
1460
|
+
metadata?: unknown;
|
|
1260
1461
|
} | {
|
|
1261
1462
|
kind: 'confirm';
|
|
1262
1463
|
id: string;
|
|
@@ -1458,11 +1659,22 @@ declare const SUPPORTED_DOCUMENT_MIME: {
|
|
|
1458
1659
|
readonly pdf: "application/pdf";
|
|
1459
1660
|
readonly docx: "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
|
1460
1661
|
readonly xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
|
1662
|
+
readonly pptx: "application/vnd.openxmlformats-officedocument.presentationml.presentation";
|
|
1461
1663
|
};
|
|
1664
|
+
/**
|
|
1665
|
+
* 读到就**只留字节**的类型(0.22.0 FR-19.9b):不抽文本,也不作为 `file` 分片外发,
|
|
1666
|
+
* 模型只拿到取件号。DWG 是第一例——17 MB 图纸 base64 进请求体既烧穿预算又毫无意义,
|
|
1667
|
+
* 几何该交给解析器。服务端常把 `.dwg` 发成 `application/octet-stream`,所以按扩展名兜底。
|
|
1668
|
+
*/
|
|
1669
|
+
declare const BYTES_ONLY_DOCUMENT_MIME: readonly ["image/vnd.dwg", "application/acad", "application/x-acad", "application/dwg", "application/x-dwg", "drawing/dwg"];
|
|
1670
|
+
/** 只按字节留存的判定。`url` 只在 MIME 说不清时用到 @experimental */
|
|
1671
|
+
declare function isBytesOnlyDocument(mime: string, url: string): boolean;
|
|
1462
1672
|
/** docx 抽取实现由宿主注入(`DOMParser` 是浏览器 API,Node 没有;备案 D55) */
|
|
1463
1673
|
type DocxTextExtractor = (bytes: Uint8Array) => Promise<string>;
|
|
1464
1674
|
/** xlsx 抽取实现由宿主注入(0.13.0 FR-12.5;限制与 docx 相同) */
|
|
1465
1675
|
type XlsxTextExtractor = (bytes: Uint8Array) => Promise<string>;
|
|
1676
|
+
/** pptx 抽取实现由宿主注入(0.22.0 分册 18;限制与 docx 相同) */
|
|
1677
|
+
type PptxTextExtractor = (bytes: Uint8Array) => Promise<string>;
|
|
1466
1678
|
/**
|
|
1467
1679
|
* PDF → 文本(0.13.0 FR-22.1)。**只用于直传被端点拒后的回退**,
|
|
1468
1680
|
* 不改变 PDF 默认直传的路径。SDK 不带实现:正确取到文本层要处理
|
|
@@ -1482,6 +1694,70 @@ declare const READ_LINKED_DOCUMENT_TOOL: ToolDefinition;
|
|
|
1482
1694
|
/** 二进制转 base64;`btoa` 只吃 latin1,必须逐字节喂而不是先 decode 成字符串 */
|
|
1483
1695
|
declare function toBase64(bytes: Uint8Array): string;
|
|
1484
1696
|
//#endregion
|
|
1697
|
+
//#region src/engine/visionDelegate.d.ts
|
|
1698
|
+
/**
|
|
1699
|
+
* 视觉委派注入位(0.21.0 分册 17 · FR-17.11a)。
|
|
1700
|
+
*
|
|
1701
|
+
* 形状与 `PdfTextExtractor` 同类:环境无关、不注入即无此能力、逐层透传。
|
|
1702
|
+
* 引擎只负责「什么时候该委派、预算够不够、失败怎么说」,
|
|
1703
|
+
* **选哪个端点、要不要征得用户同意、怎么留痕**全在宿主实现里——
|
|
1704
|
+
* 那些都要读 `RuntimeConfig` 与界面语言,运行时看不见也不该看见。
|
|
1705
|
+
*/
|
|
1706
|
+
/** 交给视觉端点的一张图;`data` 是 base64,与 `LlmImagePart` 同口径 */
|
|
1707
|
+
interface VisionDelegateImage {
|
|
1708
|
+
readonly mimeType: string;
|
|
1709
|
+
readonly data: string;
|
|
1710
|
+
}
|
|
1711
|
+
interface VisionDelegateRequest {
|
|
1712
|
+
/** 本轮要认的全部图。**一次调用**认完,不逐张发(FR-17.3a) */
|
|
1713
|
+
readonly images: readonly VisionDelegateImage[];
|
|
1714
|
+
/**
|
|
1715
|
+
* 当轮任务文本:本轮用户输入。**不含完整对话历史**(FR-17.3b)——
|
|
1716
|
+
* 把历史全带上等于把整段对话也交给了第二个厂商。
|
|
1717
|
+
*/
|
|
1718
|
+
readonly task: string;
|
|
1719
|
+
/** 触发取图的工具名,用于留痕里的「触发来源」(FR-17.6) */
|
|
1720
|
+
readonly source: string;
|
|
1721
|
+
/**
|
|
1722
|
+
* 这张图所属的整批。逐张调用是并发的需要(FR-26.5),但用户看到的是**一次委派**:
|
|
1723
|
+
* 授权卡上的张数得是整批的张数,整批也只该问一次(FR-26.8)。
|
|
1724
|
+
* 缺席时按「这一次调用就是一整批」处理。
|
|
1725
|
+
*/
|
|
1726
|
+
readonly batch?: {
|
|
1727
|
+
readonly id: string;
|
|
1728
|
+
readonly total: number;
|
|
1729
|
+
};
|
|
1730
|
+
/** 本次委派的时间预算,已与父运行剩余时长取小(FR-17.4a) */
|
|
1731
|
+
readonly timeoutMs: number;
|
|
1732
|
+
/** 超时或父 run 被取消时触发;实现必须把它传给底层请求 */
|
|
1733
|
+
readonly signal: AbortSignal;
|
|
1734
|
+
}
|
|
1735
|
+
/**
|
|
1736
|
+
* 委派结果。用判别联合而不是「文本 + 可选字段」:
|
|
1737
|
+
* 面向模型的措辞归引擎统一拼(AGENTS.md §1),宿主只回报发生了什么。
|
|
1738
|
+
*/
|
|
1739
|
+
type VisionDelegateResult = {
|
|
1740
|
+
readonly outcome: 'described';
|
|
1741
|
+
readonly endpoint: string;
|
|
1742
|
+
readonly text: string;
|
|
1743
|
+
} | {
|
|
1744
|
+
readonly outcome: 'declined';
|
|
1745
|
+
} | {
|
|
1746
|
+
readonly outcome: 'failed';
|
|
1747
|
+
readonly reason: string;
|
|
1748
|
+
};
|
|
1749
|
+
interface VisionDelegate {
|
|
1750
|
+
/**
|
|
1751
|
+
* 当前是否需要把工具产出的图交给第二个端点认。
|
|
1752
|
+
* **每次调用时读配置**:用户中途换成支持图像的模型,下一轮就该回到直传。
|
|
1753
|
+
*
|
|
1754
|
+
* 用户同意与否**不在这里判**:在用户作出选择之前不得发出任何请求(FR-17.7b),
|
|
1755
|
+
* 而「问不问」本身取决于有没有图可认——所以同意在 `describe` 里把关。
|
|
1756
|
+
*/
|
|
1757
|
+
applies(): Promise<boolean>;
|
|
1758
|
+
describe(request: VisionDelegateRequest): Promise<VisionDelegateResult>;
|
|
1759
|
+
}
|
|
1760
|
+
//#endregion
|
|
1485
1761
|
//#region src/engine/toolStep.d.ts
|
|
1486
1762
|
/**
|
|
1487
1763
|
* 一次工具调用的**未截断**参数留存(分册 30 / FR-30.2)。
|
|
@@ -1552,6 +1828,27 @@ declare class FsToolStepStore implements ToolStepStore {
|
|
|
1552
1828
|
* **不影响可执行性**——要限制访问的宿主应当使用禁用(各来源自己的 enabled 通道)。
|
|
1553
1829
|
*/
|
|
1554
1830
|
type ToolDisclosure = 'always' | 'on-demand';
|
|
1831
|
+
/**
|
|
1832
|
+
* run 内暂存的一份原始字节(0.22.0 FR-19.9b)。
|
|
1833
|
+
*
|
|
1834
|
+
* 存在的理由:有些文件**字节有用、内容不该进上下文**——DWG 图纸是第一例。
|
|
1835
|
+
* 把它当 `file` 分片 base64 发出去既烧穿预算又毫无意义,几何该交给解析器而不是模型。
|
|
1836
|
+
* 于是 `read_linked_document` 把字节留在这里,只回一个取件号。
|
|
1837
|
+
* @experimental
|
|
1838
|
+
*/
|
|
1839
|
+
interface RunBinaryEntry {
|
|
1840
|
+
readonly name: string;
|
|
1841
|
+
readonly mimeType: string;
|
|
1842
|
+
readonly bytes: Uint8Array;
|
|
1843
|
+
}
|
|
1844
|
+
/**
|
|
1845
|
+
* 取件号 → 字节。**只读**:写入是引擎的事,工具源拿得到写口就会出现
|
|
1846
|
+
* 「谁都能往 run 里塞字节」的第二个事实源。
|
|
1847
|
+
* @experimental
|
|
1848
|
+
*/
|
|
1849
|
+
interface RunBinaryStore {
|
|
1850
|
+
get(id: string): RunBinaryEntry | undefined;
|
|
1851
|
+
}
|
|
1555
1852
|
/**
|
|
1556
1853
|
* 一次工具调用的调用侧上下文(0.14.0 分册 22 FR-22.5)。
|
|
1557
1854
|
*
|
|
@@ -1562,6 +1859,19 @@ type ToolDisclosure = 'always' | 'on-demand';
|
|
|
1562
1859
|
*/
|
|
1563
1860
|
interface ToolCallContext {
|
|
1564
1861
|
readonly runId: string;
|
|
1862
|
+
/**
|
|
1863
|
+
* run 的取消信号(0.21.0 分册 22 · FR-22.15)。`cancel()` 与 `totalTimeoutMs`
|
|
1864
|
+
* 硬期限共用同一个 controller,所以这一个字段两件事都覆盖。
|
|
1865
|
+
*
|
|
1866
|
+
* 加它是因为长跑工具(逐页渲染 PDF 并逐张送多模态识别)在用户点停之后
|
|
1867
|
+
* 没有任何别的办法知道该收手。不读它的工具源行为完全不变。
|
|
1868
|
+
*/
|
|
1869
|
+
readonly signal?: AbortSignal;
|
|
1870
|
+
/**
|
|
1871
|
+
* 本 run 暂存的原始字节(0.22.0 FR-19.9b)。随 run 结束一起丢弃——
|
|
1872
|
+
* 它是「这一轮对话里读到的东西」,不是文件系统。
|
|
1873
|
+
*/
|
|
1874
|
+
readonly binaries?: RunBinaryStore;
|
|
1565
1875
|
}
|
|
1566
1876
|
/**
|
|
1567
1877
|
* 外部工具来源(runtime 扩展点,mcp 包实现并插入)。
|
|
@@ -1747,11 +2057,17 @@ interface AgentLoopDeps {
|
|
|
1747
2057
|
/** docx → 文本;`DOMParser` 是浏览器 API,因此由宿主注入(Node 侧无此能力,备案 D55) */
|
|
1748
2058
|
docxExtractor?: DocxTextExtractor;
|
|
1749
2059
|
xlsxExtractor?: XlsxTextExtractor;
|
|
2060
|
+
pptxExtractor?: PptxTextExtractor;
|
|
1750
2061
|
/**
|
|
1751
2062
|
* PDF → 文本(FR-22.1)。**只在直传被端点拒后用作回退**,不改变 PDF 默认直传。
|
|
1752
2063
|
* 不注入即没有回退能力,失败照报——与 docx / xlsx「不注入即没这个能力」同款。
|
|
1753
2064
|
*/
|
|
1754
2065
|
pdfExtractor?: PdfTextExtractor;
|
|
2066
|
+
/**
|
|
2067
|
+
* 视觉委派(0.21.0 分册 17 · FR-17.11a)。选中模型看不了图时,把**工具产出**的图
|
|
2068
|
+
* 交给第二个端点认一遍。不注入即无此能力,工具产出的图照旧直接投给主模型。
|
|
2069
|
+
*/
|
|
2070
|
+
visionDelegate?: VisionDelegate;
|
|
1755
2071
|
/** 文档读取留痕出口(FR-22.6);不注入即不留痕,装配方要自己承担这个选择 */
|
|
1756
2072
|
documentAudit?: {
|
|
1757
2073
|
append(event: {
|
|
@@ -1765,6 +2081,12 @@ interface AgentLoopDeps {
|
|
|
1765
2081
|
* 投放本身靠用户手势触发,脚本拿到端口也只会得到一个必然被拦的弹窗。
|
|
1766
2082
|
*/
|
|
1767
2083
|
documentSurface?: true;
|
|
2084
|
+
/**
|
|
2085
|
+
* 宿主开放 `context.writeSpreadsheet`(0.21.0 分册 10 FR-10.4)。
|
|
2086
|
+
* 不传即键不存在,技能能提前分支而不是调完才拿到运行时错误;
|
|
2087
|
+
* 开了也仍然要过 `writeArtifact` 的能力开关与授权卡(DV-7)。
|
|
2088
|
+
*/
|
|
2089
|
+
writeSpreadsheet?: true;
|
|
1768
2090
|
/**
|
|
1769
2091
|
* 本次 run 触发消息带上来的用户上传文件(0.15.0 分册 17)。
|
|
1770
2092
|
* 由 `runtime.run(prompt, { uploadFiles })` 逐 run 传入,因此子 run 天然拿不到。
|
|
@@ -1959,8 +2281,11 @@ interface WebSkillRuntimeDeps {
|
|
|
1959
2281
|
docxExtractor?: DocxTextExtractor;
|
|
1960
2282
|
/** xlsx → 文本;不注入即 Excel 工作簿明确报「本环境不支持」(FR-12.5) */
|
|
1961
2283
|
xlsxExtractor?: XlsxTextExtractor;
|
|
2284
|
+
pptxExtractor?: PptxTextExtractor;
|
|
1962
2285
|
/** PDF → 文本;**只在直传被端点拒后做回退**,不注入即没有回退能力(FR-22.1) */
|
|
1963
2286
|
pdfExtractor?: PdfTextExtractor;
|
|
2287
|
+
/** 视觉委派(0.21.0 分册 17 FR-17.11a);不注入即工具产出的图照旧直接投给主模型 */
|
|
2288
|
+
visionDelegate?: VisionDelegate;
|
|
1964
2289
|
/** 文档读取留痕出口(FR-22.6) */
|
|
1965
2290
|
documentAudit?: {
|
|
1966
2291
|
append(event: {
|
|
@@ -1971,6 +2296,8 @@ interface WebSkillRuntimeDeps {
|
|
|
1971
2296
|
};
|
|
1972
2297
|
/** 宿主具备文档投放面(0.15.0 分册 13 FR-13.4);只是能力位,端口本体不进脚本上下文 */
|
|
1973
2298
|
documentSurface?: true;
|
|
2299
|
+
/** 宿主开放 `context.writeSpreadsheet`(0.21.0 分册 10 FR-10.4);授权仍走 writeArtifact 那一位 */
|
|
2300
|
+
writeSpreadsheet?: true;
|
|
1974
2301
|
/** 上传文件读取留痕出口(0.15.0 分册 17 FR-17.7);批准与拒绝都写 */
|
|
1975
2302
|
uploadFileAudit?: {
|
|
1976
2303
|
append(event: {
|
|
@@ -2004,10 +2331,25 @@ declare class WebSkillRuntime {
|
|
|
2004
2331
|
* 既有 runtime.run(prompt) 保持无状态单次语义不变。
|
|
2005
2332
|
* 同 handle 并发 run 经 per-handle 队列串行化(防历史 last-writer-wins 丢轮次);
|
|
2006
2333
|
* maxHistoryMessages(默认取 `DEFAULT_LOOP_LIMITS`)超出时滚动裁剪中段(保留首尾;边界对齐 tool 契约)。
|
|
2334
|
+
*
|
|
2335
|
+
* 配了 `contextWindow` 时另加一道**主动压缩**(分册 20 FR-20.6):按上一轮的真实
|
|
2336
|
+
* `prompt_tokens` 与窗口的比值判定,超阈值就在下一轮发起前把最早的一段摘要掉。
|
|
2337
|
+
* 三个输入(窗口、用量、足够长的历史)缺一不压——不估算、不猜。
|
|
2007
2338
|
*/
|
|
2008
2339
|
createSession(options?: {
|
|
2009
2340
|
sessionId?: string;
|
|
2010
2341
|
maxHistoryMessages?: number;
|
|
2342
|
+
/** 该会话所用模型的上下文窗口(token);缺省即不压缩 */
|
|
2343
|
+
contextWindow?: number;
|
|
2344
|
+
/** 触发比例,默认 `DEFAULT_COMPACTION_THRESHOLD` */
|
|
2345
|
+
compactionThreshold?: number;
|
|
2346
|
+
/** 压缩后至少保留的原文消息数,默认 12,下界 6 */
|
|
2347
|
+
keepRecentMessages?: number;
|
|
2348
|
+
/** 压缩留痕出口(FR-20.8);只在真的压了之后调 */
|
|
2349
|
+
onCompacted?: (info: {
|
|
2350
|
+
removed: number;
|
|
2351
|
+
kept: number;
|
|
2352
|
+
}) => void;
|
|
2011
2353
|
}): RuntimeSessionHandle;
|
|
2012
2354
|
discover(): Promise<DiscoveryResult>;
|
|
2013
2355
|
run(userPrompt: string | readonly LlmContentPart[], options?: {
|
|
@@ -2201,6 +2543,14 @@ interface RunUsageSummary {
|
|
|
2201
2543
|
inputTokens?: number;
|
|
2202
2544
|
/** 各轮 llm.usage 的输出 token 合计;缺省语义同 inputTokens */
|
|
2203
2545
|
outputTokens?: number;
|
|
2546
|
+
/**
|
|
2547
|
+
* **最后一轮** llm.usage 的输入 token:本 run 结束时的上下文水位线(分册 20 FR-20.5)。
|
|
2548
|
+
*
|
|
2549
|
+
* 与 `inputTokens` 不是一回事——后者是各轮相加,一次 run 调三轮就把同一段历史数了三遍,
|
|
2550
|
+
* 回答的是「这次花了多少」;水位线回答的是「上下文占了多少」。历史在 run 内只增不减,
|
|
2551
|
+
* 所以末轮即水位。缺省语义同上。
|
|
2552
|
+
*/
|
|
2553
|
+
lastInputTokens?: number;
|
|
2204
2554
|
}
|
|
2205
2555
|
/**
|
|
2206
2556
|
* 从 run 的 trace 聚合大模型用量(请求次数 + 输入/输出 token)。
|
|
@@ -2348,4 +2698,60 @@ interface RedactedArgs {
|
|
|
2348
2698
|
*/
|
|
2349
2699
|
declare function redactToolStepArgs(args: Record<string, unknown>, schema: JsonSchema | undefined, trust: ToolStepTrust): RedactedArgs;
|
|
2350
2700
|
//#endregion
|
|
2351
|
-
|
|
2701
|
+
//#region src/engine/visionBatch.d.ts
|
|
2702
|
+
/**
|
|
2703
|
+
* 视觉委派的分批并发调度(0.21.0 分册 26 · FR-26.5 ~ FR-26.7)。
|
|
2704
|
+
*
|
|
2705
|
+
* 从 `agentLoop` 里拆出来,是因为它有三条彼此独立的分支——并发、慢降级、失败隔离——
|
|
2706
|
+
* 塞进那个已经三千行的文件里就只能靠端到端测,而这三条恰恰是最需要单独逼出来的。
|
|
2707
|
+
* @experimental
|
|
2708
|
+
*/
|
|
2709
|
+
/** 并发度上限。再高只会让每一张都变慢,同时把端点的速率限制撞穿(FR-26.5) @experimental */
|
|
2710
|
+
declare const VISION_MAX_CONCURRENCY = 3;
|
|
2711
|
+
/** @experimental */
|
|
2712
|
+
declare const VISION_DEFAULT_CONCURRENCY = 2;
|
|
2713
|
+
/**
|
|
2714
|
+
* 超过它就退回串行(FR-26.6)。云端视觉端点单张 3–15 秒,本地 Qwen-VL 一类 20–40 秒;
|
|
2715
|
+
* 越过 25 秒说明端点已经在排队,继续并发只会让第一张有用的描述来得更晚。
|
|
2716
|
+
* @experimental
|
|
2717
|
+
*/
|
|
2718
|
+
declare const VISION_SLOW_THRESHOLD_MS = 25000;
|
|
2719
|
+
/** 配错了应该退化成能用,不是让 run 失败(FR-26.5) @experimental */
|
|
2720
|
+
declare function clampVisionConcurrency(value: unknown): number;
|
|
2721
|
+
/** @experimental */
|
|
2722
|
+
interface VisionBatchOptions {
|
|
2723
|
+
images: readonly VisionDelegateImage[];
|
|
2724
|
+
concurrency: number;
|
|
2725
|
+
slowThresholdMs?: number;
|
|
2726
|
+
/** 单张委派。`index` 只用于报错定位,实现方不必回传 */
|
|
2727
|
+
describe(image: VisionDelegateImage, index: number): Promise<VisionDelegateResult>;
|
|
2728
|
+
/** 每结算一张调一次(FR-26.9),`done` 递增、`total` 恒为总张数 */
|
|
2729
|
+
onProgress?(done: number, total: number): void;
|
|
2730
|
+
/** 父运行取消:置位后不再派发新的一张 */
|
|
2731
|
+
signal?: AbortSignal;
|
|
2732
|
+
now?(): number;
|
|
2733
|
+
}
|
|
2734
|
+
/** @experimental */
|
|
2735
|
+
interface VisionBatchOutcome {
|
|
2736
|
+
/** 与输入等长、逐张对位;`undefined` = 那张没成 */
|
|
2737
|
+
described: (string | undefined)[];
|
|
2738
|
+
/** 端点标识(首个成功的那张给出;一张都没成时缺席) */
|
|
2739
|
+
endpoint?: string;
|
|
2740
|
+
failures: {
|
|
2741
|
+
index: number;
|
|
2742
|
+
reason: string;
|
|
2743
|
+
}[];
|
|
2744
|
+
/** 用户拒绝:对整批有效,剩下的图不再派发 */
|
|
2745
|
+
declined: boolean;
|
|
2746
|
+
}
|
|
2747
|
+
/**
|
|
2748
|
+
* 逐张委派、按并发度并行。
|
|
2749
|
+
*
|
|
2750
|
+
* 第一波结算后测一次墙钟决定要不要降级:测第一波而不是第一张,
|
|
2751
|
+
* 因为并发下第一张返回得早纯属运气,一波的完成时间才反映端点的实际吞吐。
|
|
2752
|
+
* 降级是**单向**的,本次委派内不再回升。
|
|
2753
|
+
* @experimental
|
|
2754
|
+
*/
|
|
2755
|
+
declare function runVisionBatch(options: VisionBatchOptions): Promise<VisionBatchOutcome>;
|
|
2756
|
+
//#endregion
|
|
2757
|
+
export { ImageOmission as $, UserProfileEntry as $n, readProfileEntries as $r, SchemaInferer as $t, DEFAULT_MAX_UPLOAD_FILE_BYTES as A, ToolContent as An, extractChartSpec as Ar, RunResult as At, ExternalToolSource as B, TraceEvent as Bn, isUnsupportedRunSnapshot as Br, RunTraceSummary as Bt, BridgeResponse as C, SpreadsheetSheet as Cn, buildRenderResult as Cr, RedactedArgs as Ct, DEFAULT_MAX_DATA_SOURCE_BYTES as D, TextualToolContent as Dn, diffUserProfile as Dr, RunBinaryEntry as Dt, DEFAULT_LOOP_LIMITS as E, TerminalLifecycleData as En, createWebSkillApi as Er, RouteResult as Et, DocxTextExtractor as F, ToolStepReader as Fn, fromVercelResult as Fr, RunToolCall as Ft, FsRunTraceStore as G, USER_PROFILE_EXPORT_VERSION as Gn, networkUrlHost as Gr, RuntimeSession as Gt, FsArtifactStore as H, TraceRecorder as Hn, mergeCatalogEntries as Hr, RunUsageSummary as Ht, EMPTY_USER_PROFILE as I, ToolStepRecord as In, fromVercelStreamPart as Ir, RunTraceFile as It, FullDisclosureRouter as J, USER_PROFILE_PROMPT_HEADER as Jn, normalizeToolError as Jr, SESSION_SCHEMA_VERSION as Jt, FsSessionStore as K, USER_PROFILE_KEY as Kn, normalizeErrorCode as Kr, RuntimeSessionHandle as Kt, EventBus as L, ToolStepStore as Ln, interruptedToolResult as Lr, RunTraceFilter as Lt, DataSourceInfo as M, ToolDisclosure as Mn, extractUiSpecEvents as Mr, RunSnapshotListEntry as Mt, DocumentSurfaceHost as N, ToolResolution as Nn, findUnpairedToolCalls as Nr, RunSnapshotStore as Nt, DEFAULT_MAX_DOCUMENT_BYTES as O, TodoTraceEvent as On, encodeSpreadsheet as Or, RunBinaryStore as Ot, DocumentSurfacePort as P, ToolResult as Pn, formatSkillScriptManifest as Pr, RunTerminationReason as Pt, HookRunnerOptions as Q, UserProfile as Qn, readBehaviorRecords as Qr, SUPPORTED_DOCUMENT_MIME as Qt, ExecuteLifecycleData as R, ToolStepTrust as Rn, isBytesOnlyDocument as Rr, RunTraceMetrics as Rt, BridgeRequest as S, SpreadsheetImageResolver as Sn, bridgeError as Sr, RUN_TRACE_SCHEMA_VERSION as St, CapabilityMode as T, TEXT_BUDGETED_CONTENT_TYPES as Tn, createScriptContext as Tr, RouteLifecycleData as Tt, FsMemoryStore as U, UNSUPPORTED_DOCUMENT_MESSAGE as Un, mergeProfileEntries as Ur, RuntimePhase as Ut, FS_SESSION_PAGE_SIZE as V, TraceEventType as Vn, listSkillScripts as Vr, RunUploadFiles as Vt, FsRunSnapshotStore as W, UPLOAD_FILES_UNAVAILABLE as Wn, networkPolicyLibSource as Wr, RuntimeRun as Wt, GoogleGenAiClientConfig as X, UnsupportedRunSnapshot as Xn, parseUserProfileExport as Xr, SPREADSHEET_LIMITS as Xt, GoogleGenAiClient as Y, USER_PROFILE_REFINE_PROMPT as Yn, parseBridgeRequest as Yr, SPREADSHEET_EXTENSION as Yt, HookRunner as Z, UploadFileInfo as Zn, partsToText as Zr, SPREADSHEET_MIME_TYPE as Zt, BehaviorRecord as _, toVercelToolSpecs as _i, SkillSuccessReport as _n, XLSX_UNSUPPORTED as _r, READ_LINKED_DOCUMENT_TOOL_NAME as _t, ASK_USER_TOOL as a, runVisionBatch as ai, SerializingMemoryStore as an, VISION_SLOW_THRESHOLD_MS as ar, LifecycleHook as at, BridgeCapabilities as b, SpreadsheetImageAnchor as bn, appendBehaviorRecords as br, READ_SKILL_FILE_TOOL_NAME as bt, AgentLoop as c, schemaToForm as ci, SessionRecord as cn, VisionBatchOptions as cr, LinkedDocumentReader as ct, AnthropicClient as d, summarizeRunUsage as di, SkillIntegrityGuard as dn, VisionDelegateImage as dr, OpenAiCompatibleClient as dt, readUserProfile as ei, ScriptExecutionContext as en, UserProfileExport as er, InstalledSkillManifest as et, AnthropicClientConfig as f, summarizeToolCalls as fi, SkillOutcomeReporter as fn, VisionDelegateRequest as fr, OpenAiCompatibleClientConfig as ft, BYTES_ONLY_DOCUMENT_MIME as g, toRecordDigests as gi, SkillStateGuard as gn, WebSkillRuntimeDeps as gr, READ_LINKED_DOCUMENT_TOOL as gt, BEHAVIOR_RECORDS_KEY as h, toLlmToolSpec as hi, SkillScriptSchemaSource as hn, WebSkillRuntime as hr, ProgressiveRouter as ht, ASK_USER_MAX_FIELDS as i, resolveToolName as ii, SealResult as in, VISION_MAX_CONCURRENCY as ir, LifecycleEventInit as it, DEFAULT_USER_PROFILE_LIMITS as j, ToolDefinition as jn, extractTodoTraceEvents as jr, RunSnapshot as jt, DEFAULT_MAX_DOCUMENT_TEXT_BYTES as k, ToolCallContext as kn, exportUserProfile as kr, RunLimitErrorDetails as kt, AgentLoopConfig as l, scriptToolName as li, SessionStore as ln, VisionBatchOutcome as lr, MAX_TOOL_STEP_ARG_BYTES as lt, ApprovalScope as m, toBase64 as mi, SkillScriptDescriptor as mn, WebSkillApi as mr, PptxTextExtractor as mt, ASK_USER_FIELD_TYPES as n, refineUserProfile as ni, SealOptions as nn, UserProfileLimits as nr, InteractLifecycleData as nt, ASK_USER_TOOL_NAME as o, sampleBehaviorRecords as oi, SessionListPage as on, VercelToolSpec as or, LifecycleHookContext as ot, ApprovalDecision as p, textParts as pi, SkillRouter as pn, VisionDelegateResult as pr, PdfTextExtractor as pt, FsToolStepStore as q, USER_PROFILE_NO_INVENTION_RULE as qn, normalizeToolContent as qr, SENSITIVE_ANNOTATION as qt, ASK_USER_INPUT_SCHEMA as r, renderUserProfileContext as ri, SealRecord as rn, VISION_DEFAULT_CONCURRENCY as rr, LifecycleEvent as rt, ActivateLifecycleData as s, schemaSourceLabel as si, SessionMeta as sn, ViewerImageFact as sr, LifecycleListener as st, ALLOWED_TOOLS_EXCLUSION_REASON as t, redactToolStepArgs as ti, ScriptExecutor as tn, UserProfileImportDiff as tr, IntegrityVerdict as tt, AgentLoopDeps as u, sealToolCallPairs as ui, SkillFailureReport as un, VisionDelegate as ur, NetworkPolicy as ut, BehaviorRecordKind as v, validateUiSpecEvent as vi, SpreadsheetCell as vn, XlsxTextExtractor as vr, READ_SKILL_FILE_INPUT_SCHEMA as vt, CapabilityApproval as w, SpreadsheetSpec as wn, clampVisionConcurrency as wr, RefineUserProfileInput as wt, BridgeCapability as x, SpreadsheetImageBytes as xn, applyUserProfileImport as xr, RUN_SNAPSHOT_SCHEMA_VERSION as xt, BehaviorScene as y, validateUiSpecNode as yi, SpreadsheetImage as yn, XlsxUnsupportedFeature as yr, READ_SKILL_FILE_TOOL as yt, ExternalSkillProvider as z, TraceClock as zn, isNetworkAllowed as zr, RunTraceStore as zt };
|