@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.
Files changed (139) hide show
  1. package/dist/abnfDiagram-O67JEVCF-DtYFjfqO.js +109 -0
  2. package/dist/agent.d.ts +3 -3
  3. package/dist/agent.js +1171 -73
  4. package/dist/{approval-Bbh_Apwg.js → approval-DWQlDPbY.js} +527 -29
  5. package/dist/arc-8U_6NQWm.js +130 -0
  6. package/dist/architecture-7GRP2DOG-RTw1wpAq.js +4 -0
  7. package/dist/architectureDiagram-NJMV4G6O-XmmXrJAK.js +7473 -0
  8. package/dist/array-DQfpQNY8.js +8 -0
  9. package/dist/blockDiagram-BEXU5L5S-D4yjnCD1.js +2582 -0
  10. package/dist/browser.d.ts +1129 -48
  11. package/dist/browser.js +3562 -278
  12. package/dist/c4Diagram-YGBWAQC7-BLmA_JSd.js +3668 -0
  13. package/dist/channel-CZxxLrG7.js +9 -0
  14. package/dist/chunk-2Q5K7J3B-Ck03gkFR.js +21 -0
  15. package/dist/chunk-3FUC2YCW-tr6jmbQf.js +530 -0
  16. package/dist/chunk-5DYCD2WN-Bt97YGTd.js +58 -0
  17. package/dist/chunk-5VM5RSS4-BBxa48HL.js +21 -0
  18. package/dist/chunk-6AEJRKK7-JXK89I-O.js +14 -0
  19. package/dist/chunk-742MDFTN-CPmgCGwC.js +466 -0
  20. package/dist/chunk-7INBJB4K-C9jq9o66.js +6552 -0
  21. package/dist/chunk-7M6MHVWA-BrKCWcR1.js +4894 -0
  22. package/dist/chunk-7PRAP22T-BHED6GVs.js +95 -0
  23. package/dist/chunk-DUW6YSOI-DoZj78PO.js +19 -0
  24. package/dist/chunk-FOHPRMQF-Dkbp819z.js +27189 -0
  25. package/dist/chunk-GNY47TPC-Bpvq1T49.js +87 -0
  26. package/dist/chunk-GTNCS2PH-CLmh4I2c.js +686 -0
  27. package/dist/chunk-GWA4HPMP-B6vN3fkL.js +95 -0
  28. package/dist/chunk-J5ZVWO5B-Bi_Pcobw.js +26 -0
  29. package/dist/chunk-JWPE2WC7-D1rC79GS.js +12 -0
  30. package/dist/chunk-LNGE3PJU-D5OIoe3Z.js +2582 -0
  31. package/dist/chunk-MBY4JIJT-C34L7a4f.js +2276 -0
  32. package/dist/chunk-NETBCI7D-Cg84k8N8.js +321 -0
  33. package/dist/chunk-O7XYJQB3-B6K0KOSL.js +8846 -0
  34. package/dist/chunk-UA2S7LBM-DxHM29_K.js +612 -0
  35. package/dist/chunk-WEXAMYUT-Ba6jFWhB.js +33 -0
  36. package/dist/chunk-XXDRQBXY-DPbSy4kg.js +12 -0
  37. package/dist/chunk-Y2CYZVJY-U3QOMqrW.js +15 -0
  38. package/dist/chunk-Z7XXMR3K-oLg1h8F3.js +1038 -0
  39. package/dist/chunk-ZIGJFQKS-DqEFBuHR.js +2215 -0
  40. package/dist/classDiagram-v2-NBCMYWYE-BqnOWIUt.js +3845 -0
  41. package/dist/cose-bilkent-JH36ORCC-C0dTAHVK.js +4270 -0
  42. package/dist/cynefin-OW5HDTMX-B2QvgEQj.js +4 -0
  43. package/dist/cynefinDiagram-VND7K2PF-yAWc6Z3W.js +479 -0
  44. package/dist/cytoscape.esm-C64mRh9B.js +28325 -0
  45. package/dist/dagre-6A5THRUB-D0w2W27v.js +4816 -0
  46. package/dist/defaultLocale-B_EoOkSF.js +249 -0
  47. package/dist/diagram-22UHCM2B-DvgzhUzP.js +6115 -0
  48. package/dist/diagram-3UASUU5V-DWgUB-ef.js +795 -0
  49. package/dist/diagram-ATOU4E4O-P1olqwIs.js +553 -0
  50. package/dist/diagram-CDSNMT55-BUlZuLUe.js +402 -0
  51. package/dist/diagram-MLGK6HIB-6w5qmkGt.js +186 -0
  52. package/dist/diagram-MPIPVDR6-DEFiSo8o.js +289 -0
  53. package/dist/dist-UajCDt3n.js +92 -0
  54. package/dist/ebnfDiagram-ZINNZB2B-CI8liCfR.js +123 -0
  55. package/dist/elk-276RUBZZ-3SvW6OAK.js +90034 -0
  56. package/dist/erDiagram-OPXOYQCR-CPTbKhwP.js +2301 -0
  57. package/dist/{eventTypes-CwciaqCU.js → eventTypes-DcTQXSV1.js} +7 -1
  58. package/dist/eventmodeling-NTZA5JFV-BlyuqGp0.js +4 -0
  59. package/dist/flowDiagram-KWPJA3E3-CcUJ6HbV.js +18 -0
  60. package/dist/ganttDiagram-FUAMR5RP-31UjY0KK.js +3939 -0
  61. package/dist/geometry-wx5ZTYzi.js +715 -0
  62. package/dist/gitGraph-4MIJSDKK-ChdVlrk7.js +4 -0
  63. package/dist/gitGraphDiagram-X574FWY7-DKuxJymB.js +1153 -0
  64. package/dist/governance.d.ts +9 -3
  65. package/dist/governance.js +1 -1
  66. package/dist/graphlib-tk9gQYuN.js +4194 -0
  67. package/dist/{index-ad11wflI.d.ts → index-BiO9_XRk.d.ts} +2 -2
  68. package/dist/{index-DQ3-6GFu.d.ts → index-CjwdZQOS.d.ts} +945 -8
  69. package/dist/{index-BDyXe-a5.d.ts → index-YPd8ZSEa.d.ts} +413 -7
  70. package/dist/index.d.ts +4 -4
  71. package/dist/index.js +47 -41
  72. package/dist/info-A6RAGUB7-CxRAt9S9.js +4 -0
  73. package/dist/infoDiagram-VRGFBTTK-pRspGfjZ.js +25 -0
  74. package/dist/init-CMOIWdg-.js +16 -0
  75. package/dist/ishikawaDiagram-OU5B5YK6-DKerAPAg.js +975 -0
  76. package/dist/journeyDiagram-ZHPQQLJL-C4MK-YO5.js +1227 -0
  77. package/dist/kanban-definition-PNTS6WVX-BqsZpMXx.js +1244 -0
  78. package/dist/katex-BcRRvyh_.js +26465 -0
  79. package/dist/kind-Dc8x0HWz.js +110 -0
  80. package/dist/line-LgV8iVMV.js +48 -0
  81. package/dist/linear-BWKR0Tqd.js +393 -0
  82. package/dist/linkedDocument-CIuh_Yp0.js +416 -0
  83. package/dist/mcp.d.ts +2 -2
  84. package/dist/{memoryArtifactStore-D6dLeY55.js → memoryArtifactStore-Bs7glPqm.js} +14 -0
  85. package/dist/mermaid-parser.core-pYR5siSx.js +754 -0
  86. package/dist/mermaid.core-DMtwGCHy.js +1756 -0
  87. package/dist/mindmap-definition-NLK3R4M7-CXbD-myG.js +1312 -0
  88. package/dist/node.d.ts +8 -3
  89. package/dist/node.js +79 -4
  90. package/dist/{openUiLibrary-b0i7F_oZ.js → openUiLibrary-B7j3rLrm.js} +1 -1
  91. package/dist/{openUiSpecLang-CLXJEeRU.js → openUiSpecLang-BSYYnjay.js} +1 -1
  92. package/dist/ordinal-CxA6GHQS.js +84 -0
  93. package/dist/packet-AYTQ26CC-BOm08cxl.js +4 -0
  94. package/dist/path-C27Z2Bjv.js +106 -0
  95. package/dist/pegDiagram-GJSIUBJH-BLGJOewQ.js +115 -0
  96. package/dist/pie-WAS4IAKB-Dvg7glpk.js +4 -0
  97. package/dist/pieDiagram-5QR66LMP-laoaV_PB.js +298 -0
  98. package/dist/processSandboxEntry.js +5 -0
  99. package/dist/quadrantDiagram-O4NWA36T-Db_wFBkT.js +2236 -0
  100. package/dist/radar-RG4KPBEZ-BZDaTu06.js +4 -0
  101. package/dist/railroad-74A4TZTK-C-UhjkOy.js +4 -0
  102. package/dist/railroad-abnf-HS5TGJTU-dUKVA4OS.js +4 -0
  103. package/dist/railroad-ebnf-LZEXJU2U-DzQumk18.js +4 -0
  104. package/dist/railroad-peg-WCYAUIDC-B3vvTWed.js +4 -0
  105. package/dist/railroadDiagram-XR7U4H2S-BY0sTM4X.js +89 -0
  106. package/dist/requirementDiagram-PLB6GJNP-3rkQfEhs.js +2474 -0
  107. package/dist/rough.cjs-AmDd_NQk.js +1395 -0
  108. package/dist/sandboxWorkerEntry.js +5 -0
  109. package/dist/sankeyDiagram-IPEJSGJF-CGAJhyG2.js +3578 -0
  110. package/dist/sequenceDiagram-PO4LG4MO-9FJjFX06.js +5522 -0
  111. package/dist/sizeCapture-INFHLROL-D8PWxdOn.js +56 -0
  112. package/dist/{skillVersionStore-B24Jjjry-v2CCU0Xo.d.ts → skillVersionStore-B24Jjjry-BY1H7Krp.d.ts} +1 -1
  113. package/dist/src-NkhI3UMl.js +2653 -0
  114. package/dist/stateDiagram-v2-GCMORJYK-B0O3wc1-.js +2715 -0
  115. package/dist/swimlanes-2SLR337P-D4EOnrpu.js +6637 -0
  116. package/dist/swimlanesDiagram-TC7HE7FX-BUx29EJ9.js +30 -0
  117. package/dist/testing.d.ts +2 -1
  118. package/dist/testing.js +1 -1
  119. package/dist/timeline-definition-EJHVYXUP-CrgiiB4C.js +1513 -0
  120. package/dist/treeView-Q6P3EWNA-C1by-Gzc.js +4 -0
  121. package/dist/treemap-WGGIJYW6-mC2NZ6ad.js +4 -0
  122. package/dist/{types-Btpdd1y--BcxQ10Fa.d.ts → types-CpDRZ0rA-BM5FI9oN.d.ts} +111 -9
  123. package/dist/ui-react.d.ts +3 -3
  124. package/dist/ui-react.js +3718 -77
  125. package/dist/ui-vue.d.ts +1 -1
  126. package/dist/ui.d.ts +3 -3
  127. package/dist/ui.js +2 -2
  128. package/dist/untrustedText-BIaRvPZK.js +16 -0
  129. package/dist/usecaseDiagram-POWQR4AR-BUt_TQOY.js +14397 -0
  130. package/dist/vennDiagram-UO4OBE2U-CwXr0wjA.js +2808 -0
  131. package/dist/wardley-WFR3VGLG-CVSYjq_S.js +4 -0
  132. package/dist/wardleyDiagram-VNRHLVJA-Cpfd47dQ.js +874 -0
  133. package/dist/{webSkillApi-CsvA69qk.js → webSkillApi-Dy-Zjv0y.js} +1 -1
  134. package/dist/{webskillLitCatalog-W06npwej.js → webskillLitCatalog-D5BCiMCU.js} +1 -1
  135. package/dist/xychartDiagram-PMCCYNJV-e1TeVoc6.js +2704 -0
  136. package/package.json +6 -5
  137. package/dist/kind-DxgS8LM-.js +0 -77
  138. package/dist/linkedDocument-xNXF-z8n.js +0 -94
  139. package/dist/types-DOJI5YC3.js +0 -90
@@ -1,5 +1,5 @@
1
- import { I as ChatAttachmentKind, Nt as WebSkillErrorCode, S as UiBridge, Z as RemoteUrlPolicy, a as InteractionOrigin, c as InteractionResponse, s as InteractionRequest } from "./types-Btpdd1y--BcxQ10Fa.js";
2
- import { Kn as XlsxTextExtractor, P as DocxTextExtractor, bn as ToolStepReader, j as DataSourceInfo, z as ExternalToolSource } from "./index-BDyXe-a5.js";
1
+ import { L as ChatAttachmentKind, Rt as WebSkillErrorCode, S as UiBridge, a as InteractionOrigin, c as InteractionResponse, nt as RemoteUrlPolicy, s as InteractionRequest, t as Artifact } from "./types-CpDRZ0rA-BM5FI9oN.js";
2
+ import { B as ExternalToolSource, F as DocxTextExtractor, Fn as ToolStepReader, M as DataSourceInfo, kn as ToolCallContext, mt as PptxTextExtractor, pt as PdfTextExtractor, vr as XlsxTextExtractor, xn as SpreadsheetImageBytes } from "./index-YPd8ZSEa.js";
3
3
  //#region ../agent/dist/index.d.ts
4
4
  //#region src/todo/types.d.ts
5
5
  /** 待办条目状态:未开始 / 进行中 / 已完成(FR-3.1) */
@@ -413,6 +413,12 @@ interface PerceivedNode {
413
413
  * 「页面变了不能点到别的东西」由执行前的实时校验承担,不由句柄寿命承担。
414
414
  */
415
415
  ref?: string;
416
+ /**
417
+ * 该节点的像素可读(0.22.0 FR-12.1)——`IMG` / `CANVAS` / `SVG` 三类。
418
+ * 只在 `ref` 存在时出现;模型据它判哪些句柄能交给 `capture_page_image`,
419
+ * 而不是靠猜元素类型先对 `<div>` 试一次。
420
+ */
421
+ capturable?: true;
416
422
  /**
417
423
  * 该节点来自哪个帧(FR-24.4),取值是帧路径的展示串(`frameLabel`)。
418
424
  * **主文档节点不带这个字段**——否则旧宿主的断言会凭空变化。
@@ -1119,15 +1125,19 @@ type PageActionScopeInput = PageActionScope | {
1119
1125
  */
1120
1126
  declare function toActionFrameScopes(scope: PageActionScopeInput): readonly ActionFrameScope[];
1121
1127
  /**
1122
- * 本版的操作集(FR-25.1 / 0.16.0 FR-13.6 / 0.18.0 FR-10.1)。拖拽仍不在内(D64);
1128
+ * 本版的操作集(FR-25.1 / 0.16.0 FR-13.6 / 0.18.0 FR-10.1 / 0.22.0 FR-17.1)。
1123
1129
  * 导航只有 `back` 一个,且它**不接受地址**——可达面被浏览器历史封死(SC-1)。
1124
1130
  *
1125
- * `select`/`set`/`attach`/`scroll` 与既有几个走**同一条** policy 路径,
1131
+ * `drag` 只表达**起点与终点**,没有中途轨迹(0.22.0 FR-17.6 裁定,D64 就此撤销):
1132
+ * 轨迹是实现细节不是意图,能画任意路径等于架空 AC-23.2,而且滑块验证码要的正是轨迹——
1133
+ * 表达不了轨迹,这个动作就天然做不了人机验证绕过。
1134
+ *
1135
+ * 这些动作与既有几个走**同一条** policy 路径,
1126
1136
  * 范围白名单、逐次确认、审计三条硬约束因此天然覆盖到它们——
1127
1137
  * 前提是新动作不绕过 policy 直调执行器(AC-25.4 守这一点)。
1128
1138
  * @experimental
1129
1139
  */
1130
- declare const PAGE_ACTION_KINDS: readonly ["click", "fill", "submit", "select", "set", "attach", "scroll", "back"];
1140
+ declare const PAGE_ACTION_KINDS: readonly ["click", "fill", "submit", "select", "set", "attach", "scroll", "hover", "drag", "back"];
1131
1141
  type PageActionKind = (typeof PAGE_ACTION_KINDS)[number];
1132
1142
  /**
1133
1143
  * `back` 的目标占位(0.16.0 分册 13 §4.1)。
@@ -1145,8 +1155,10 @@ interface PageActionRequest {
1145
1155
  action: PageActionKind;
1146
1156
  /**
1147
1157
  * `fill` 填入的文本;`select` 要选中的选项可访问名;
1148
- * `set` 的目标态(`'true'` | `'false'`);`scroll` 的方向(`'down'` | `'up'`)。
1149
- * `attach` 不用它——文件**始终由用户在确认卡里选**,Agent 传不进本地路径(FR-25.5)。
1158
+ * `set` 的目标态(`'true'` | `'false'`);`scroll` 的方向(`'down'` | `'up'`);
1159
+ * `drag` 的**终点句柄**(另一个 ref,FR-17.4)。
1160
+ * `hover` 与 `attach` 不用它——后者的文件**始终由用户在确认卡里选**,
1161
+ * Agent 传不进本地路径(FR-25.5)。
1150
1162
  */
1151
1163
  value?: string;
1152
1164
  }
@@ -1694,6 +1706,14 @@ interface DownloadedFilePolicyOptions {
1694
1706
  docxExtractor?: DocxTextExtractor;
1695
1707
  /** xlsx → 文本。同上 */
1696
1708
  xlsxExtractor?: XlsxTextExtractor;
1709
+ pptxExtractor?: PptxTextExtractor;
1710
+ /** 超阈值 PDF 的兜底抽取(AC-21.2)。同样必须与手动上传共用一个实现 */
1711
+ pdfExtractor?: PdfTextExtractor;
1712
+ /**
1713
+ * PDF 原件直传的字节上限,量的是 base64 编码后的长度,与上传侧 `loop.maxDocumentBytes` 同源。
1714
+ * 每次读取,设置改完立刻生效;缺省即**不设限**(保持 0.14.0 的直传行为)。
1715
+ */
1716
+ maxDocumentBytes?(): number;
1697
1717
  now?(): string;
1698
1718
  }
1699
1719
  /**
@@ -1712,6 +1732,18 @@ declare class DownloadedFilePolicy {
1712
1732
  get records(): readonly DownloadedFileRecord[];
1713
1733
  list(): Promise<readonly DownloadedFileListing[]>;
1714
1734
  read(id: string): Promise<DownloadedFileReadResult>;
1735
+ /**
1736
+ * 取原始字节,不做形态化(0.21.0 分册 22 · FR-22.4)。
1737
+ *
1738
+ * 授权卡、审计留痕与 `read()` 完全一致——逐单元读文档要的是字节本身,
1739
+ * 但绝不能因此绕过策略:那等于给「读用户本机磁盘」开第二个没有授权的入口。
1740
+ * @experimental
1741
+ */
1742
+ readBytes(id: string): Promise<{
1743
+ entry: DownloadedFileEntry;
1744
+ contentType: string;
1745
+ bytes: Uint8Array;
1746
+ }>;
1715
1747
  }
1716
1748
  //#endregion
1717
1749
  //#region src/downloads/toolSource.d.ts
@@ -1729,4 +1761,909 @@ interface DownloadedFileToolSourceOptions {
1729
1761
  */
1730
1762
  declare function createDownloadedFileToolSource(options: DownloadedFileToolSourceOptions): ExternalToolSource;
1731
1763
  //#endregion
1732
- export { NestedFrameRef as $, TAB_WORKSET_MIN_MAX as $t, DelegationRequest as A, withDelegationOrigin as An, PerceptionAuditSink as At, DownloadedFileReader as B, SkillGenerationMessages as Bt, DataSourcePolicyOptions as C, createSkillGenerationToolSource as Cn, PagePerceptionPolicy as Ct, DelegationBudget as D, frameSteps as Dn, ParentBudget as Dt, DataSourceTransport as E, frameLabel as En, PagePerceptionToolSourceOptions as Et, DownloadedFileEntry as F, PerceptionScope as Ft, FrameScope as G, SkillGeneratorOptions as Gt, DownloadedFileToolSourceOptions as H, SkillGenerationPolicy as Ht, DownloadedFileListing as I, PerceptionScopeInput as It, HttpDataSourceOptions as J, SubAgentRunInput as Jt, GENERATE_SKILL_TOOL as K, SkillTraceEvidence as Kt, DownloadedFilePolicy as L, READ_DOWNLOADED_FILE_TOOL as Lt, DelegationToolSourceOptions as M, PerceptionPagingBudget as Mt, DownloadedFileAction as N, PerceptionRecord as Nt, DelegationOrchestrator as O, toActionFrameScopes as On, PerceivedImage as Ot, DownloadedFileConsent as P, PerceptionResult as Pt, MANAGE_TODO_TOOL as Q, TAB_WORKSET_MAX_MAX as Qt, DownloadedFilePolicyOptions as R, SKILL_GENERATION_SYSTEM_PROMPT as Rt, DataSourcePolicy as S, createPagePerceptionToolSource as Sn, PageAuditSink as St, DataSourceRecord as T, createTodoToolSource as Tn, PagePerceptionReader as Tt, FOCUS_PAGE_TAB_TOOL as U, SkillGenerationToolSourceOptions as Ut, DownloadedFileRecord as V, SkillGenerationOutcome as Vt, FrameNote as W, SkillGenerator as Wt, LIST_DOWNLOADED_FILES_TOOL as X, SubtreeRejection as Xt, ImageCaptureBudget as Y, SubAgentRunner as Yt, LIST_PAGE_TABS_TOOL as Z, TAB_WORKSET_DEFAULT_MAX as Zt, DataSourceCandidatePolicyOptions as _, clampWorksetMax as _n, PageActionScope as _t, ActionTabWindow as a, TabWorksetPort as an, PAGE_DOCUMENT_REF as at, DataSourceDef as b, createHttpDataSourceTransport as bn, PageActionToolSourceOptions as bt, DELEGATE_TASK_TOOL as c, TodoItem as cn, PERCEPTION_SYSTEM_PROMPT as ct, DOWNLOAD_WAIT_MAX_MS as d, TodoStatus as dn, PageActionKind as dt, TAB_WORKSET_SYSTEM_PROMPT as en, OpenedPageInfo as et, DOWNLOAD_WAIT_MIN_MS as f, TodoStore as fn, PageActionOutcome as ft, DataSourceCandidatePolicy as g, clampDownloadWaitMs as gn, PageActionRequest as gt, DataSourceCandidateAuditSink as h, WorksetTabView as hn, PageActionRecord as ht, ActionTabWatcher as i, TabWorksetPolicyOptions as in, PAGE_ACTION_TOOL as it, DelegationResult as j, PerceptionCaptureOptions as jt, DelegationOrchestratorOptions as k, toFrameScopes as kn, PerceivedNode as kt, DELEGATION_SYSTEM_PROMPT as l, TodoList as ln, PageActionConsent as lt, DataSourceCandidate as m, WorksetTab as mn, PageActionPolicyOptions as mt, ActionDownloadWindow as n, TabAdmission as nn, PAGE_ACTION_KINDS as nt, CLOSE_PAGE_TAB_TOOL as o, TabWorksetToolSourceOptions as on, PERCEIVE_PAGE_TOOL as ot, DataSourceAuditSink as p, TodoToolSourceOptions as pn, PageActionPolicy as pt, GeneratedSkillDraft as q, SkillTraceEvidenceStep as qt, ActionFrameScope as r, TabWorksetPolicy as rn, PAGE_ACTION_SYSTEM_PROMPT as rt, ConsentUi as s, TodoEvent as sn, PERCEPTION_PAGING_DEFAULTS as st, ActionDownloadWatcher as t, TODO_SYSTEM_PROMPT as tn, OpenedTabSignal as tt, DOWNLOAD_WAIT_DEFAULT_MS as u, TodoListener as un, PageActionExecutor as ut, DataSourceCandidateRecord as v, createDelegationToolSource as vn, PageActionScopeInput as vt, DataSourceProvenance as w, createTabWorksetToolSource as wn, PagePerceptionPolicyOptions as wt, DataSourceKind as x, createPageActionToolSource as xn, PageActionUi as xt, DataSourceCandidateStore as y, createDownloadedFileToolSource as yn, PageActionTarget as yt, DownloadedFileReadResult as z, SkillCandidateSink as zt };
1764
+ //#region src/document/budget.d.ts
1765
+ /**
1766
+ * 单次 `read_document` 调用的批量预算(0.21.0 分册 22 · 设计 §6)。
1767
+ *
1768
+ * **整份文档没有上限**——只要还有单元没读,返回值就带 `next`(FR-22.3)。
1769
+ * 这里限的只是「一次调用投多少」,那是请求体的物理约束,不是策略。
1770
+ * @experimental
1771
+ */
1772
+ interface DocumentReadBudget {
1773
+ /**
1774
+ * 一次调用最多带回多少字符的文本。与感知分页同口径(约 24K token),
1775
+ * 显著小于 `loop.toolResultMaxBytes`(缺省 256 KB)——文本走 tool 消息,是受预算的分片。
1776
+ */
1777
+ textChars: number;
1778
+ /**
1779
+ * 一次调用最多投几张图。图不受 `toolResultMaxBytes` 管(只受每分片 `maxDocumentBytes`),
1780
+ * 但一次投八张已经是几 MB 的请求体;八这个数也与视觉委派的超时口径相配
1781
+ * (委派预算是 `toolTimeoutMs × 张数`,缺省 10 分钟 × 8)。
1782
+ */
1783
+ visionImages: number;
1784
+ }
1785
+ /** @experimental */
1786
+ declare const DOCUMENT_READ_BUDGET: DocumentReadBudget;
1787
+ //#endregion
1788
+ //#region src/document/types.d.ts
1789
+ /**
1790
+ * 文档逐单元读取的四个端口(0.21.0 分册 22;0.22.0 分册 18 添上 pptx)。
1791
+ *
1792
+ * 与既有的 `PdfTextExtractor` / `DocxTextExtractor` / `XlsxTextExtractor` 并存,不替换:
1793
+ * 那条路解决的是「这份文件太大,退而求其次给点文本」,
1794
+ * 这条路解决的是「这份文件必须读完,而且读不出字的地方要看图」。
1795
+ *
1796
+ * 四个端口**各自独立**:只接了 PDF 的宿主照样能用,其余几支自动缺席(FR-22.16)。
1797
+ */
1798
+ /** @experimental */
1799
+ type DocumentFormat = 'pdf' | 'docx' | 'xlsx' | 'pptx';
1800
+ /**
1801
+ * 一次工具调用内打开的 PDF;生命周期不跨调用(续读靠自包含坐标,不存游标)
1802
+ * @experimental
1803
+ */
1804
+ interface PdfDocumentHandle {
1805
+ readonly pageCount: number;
1806
+ /** 该页文本层;没有文本层时返回空串,由可信度判定决定要不要转视觉 */
1807
+ text(page: number): Promise<string>;
1808
+ /** 该页图像对象占页面面积的比例。只给比例不给像素:15% 的判定不需要图像数据 */
1809
+ images(page: number): Promise<readonly PdfPageImage[]>;
1810
+ /** 整页渲染;`data` 是 base64,直接就是 image 分片要的形态 */
1811
+ render(page: number): Promise<RenderedImage>;
1812
+ close(): Promise<void>;
1813
+ }
1814
+ /** @experimental */
1815
+ interface PdfPageImage {
1816
+ /** 占页面面积的比例,0~1 */
1817
+ areaRatio: number;
1818
+ }
1819
+ /** @experimental */
1820
+ interface RenderedImage {
1821
+ mimeType: string;
1822
+ data: string;
1823
+ }
1824
+ /**
1825
+ * PDF → 页(宿主注入 pdfjs)。不注入即 PDF 这一支不存在。
1826
+ * @experimental
1827
+ */
1828
+ interface PdfDocumentReader {
1829
+ open(bytes: Uint8Array): Promise<PdfDocumentHandle>;
1830
+ }
1831
+ /**
1832
+ * 文档拆出来的一块。图片块给的是**已经过阈值筛选**的图——
1833
+ * 阈值判定要读 `wp:extent` / `xdr:twoCellAnchor` 这些格式细节,只能落在端口实现里。
1834
+ * @experimental
1835
+ */
1836
+ type DocumentBlock = {
1837
+ kind: 'text';
1838
+ text: string;
1839
+ } | {
1840
+ kind: 'image';
1841
+ mimeType: string;
1842
+ data: string;
1843
+ } | {
1844
+ kind: 'skipped';
1845
+ reason: 'unsupported-format';
1846
+ format: string;
1847
+ };
1848
+ /**
1849
+ * docx → 块序列。docx **没有页**(分页是 Word 排版时算的,文件里没有),
1850
+ * 所以给的是按文档真实顺序排好的块,坐标是块序号。
1851
+ * @experimental
1852
+ */
1853
+ interface DocxDocumentReader {
1854
+ read(bytes: Uint8Array): Promise<DocxDocumentContent>;
1855
+ }
1856
+ /** @experimental */
1857
+ interface DocxDocumentContent {
1858
+ blocks: readonly DocumentBlock[];
1859
+ }
1860
+ /**
1861
+ * xlsx → 逐表的行序列。图按 `xdr:twoCellAnchor` 的锚点行号插进行流。
1862
+ * @experimental
1863
+ */
1864
+ interface XlsxDocumentReader {
1865
+ read(bytes: Uint8Array): Promise<XlsxDocumentContent>;
1866
+ }
1867
+ /** @experimental */
1868
+ interface XlsxDocumentContent {
1869
+ sheets: readonly XlsxSheetContent[];
1870
+ }
1871
+ /** @experimental */
1872
+ interface XlsxSheetContent {
1873
+ name: string;
1874
+ rows: readonly DocumentBlock[];
1875
+ }
1876
+ /**
1877
+ * pptx → 逐页的块序列。幻灯片**真有页**(不像 docx 的分页是排版算出来的),
1878
+ * 所以坐标是「第几页的第几块」。
1879
+ *
1880
+ * 给的是页上写了什么、插了哪几张图,**不是页面渲染图**:
1881
+ * OOXML 包里没有渲染好的页面,浏览器里也没有 pptx 渲染器。要版式只能退到截屏。
1882
+ * @experimental
1883
+ */
1884
+ interface PptxDocumentReader {
1885
+ read(bytes: Uint8Array): Promise<PptxDocumentContent>;
1886
+ }
1887
+ /** @experimental */
1888
+ interface PptxDocumentContent {
1889
+ slides: readonly PptxSlideContent[];
1890
+ }
1891
+ /** @experimental */
1892
+ interface PptxSlideContent {
1893
+ blocks: readonly DocumentBlock[];
1894
+ }
1895
+ /** 一份可读文档的字节及其来源标识 @experimental */
1896
+ interface DocumentFileBytes {
1897
+ name: string;
1898
+ bytes: Uint8Array;
1899
+ }
1900
+ /**
1901
+ * 按标识取字节。装配方组合两个来源:当前 run 的附件、下载列表(经授权卡)。
1902
+ * 找不到返回 `undefined`,由工具层归因,不静默当空文档。
1903
+ * @experimental
1904
+ */
1905
+ interface DocumentFileSource {
1906
+ read(id: string): Promise<DocumentFileBytes | undefined>;
1907
+ }
1908
+ //#endregion
1909
+ //#region src/document/format.d.ts
1910
+ /**
1911
+ * 格式以字节为准,文件名只作次要线索:改扩展名不该改变我们如何解析它。
1912
+ * 认不出返回 `undefined`,由调用方归因。
1913
+ * @experimental
1914
+ */
1915
+ declare function sniffDocumentFormat(bytes: Uint8Array, name?: string): DocumentFormat | undefined;
1916
+ //#endregion
1917
+ //#region src/document/pdfQuality.d.ts
1918
+ /**
1919
+ * 「这一页抽出来的是不是乱码」的判定(0.21.0 分册 22 · FR-22.2)。
1920
+ *
1921
+ * 判定必须是纯函数:它决定一页走文本还是走渲染,而渲染要烧一次多模态请求。
1922
+ * 靠人眼看一遍不叫判据。
1923
+ */
1924
+ /** 坏字符占可打印字符的比例超过它即判文本层不可信 @experimental */
1925
+ declare const PDF_GARBLED_RATIO = 0.2;
1926
+ /** @experimental */
1927
+ interface PdfTextQuality {
1928
+ /** 参与判定的可打印字符数(不含空白) */
1929
+ printable: number;
1930
+ /** 其中的坏字符数 */
1931
+ garbled: number;
1932
+ /** 文本层是否可信;不可信意味着该页要转视觉 */
1933
+ trustworthy: boolean;
1934
+ }
1935
+ /**
1936
+ * 空白页一律判不可信:它要么是扫描页、要么什么都没有,
1937
+ * 两种情况都该让模型自己看一眼,而不是把一页空气交上去。
1938
+ * @experimental
1939
+ */
1940
+ declare function measurePdfTextQuality(text: string): PdfTextQuality;
1941
+ /** `measurePdfTextQuality(text).trustworthy` 的简写 @experimental */
1942
+ declare function isPdfTextTrustworthy(text: string): boolean;
1943
+ //#endregion
1944
+ //#region src/document/deferral.d.ts
1945
+ /**
1946
+ * 「这张图现在取不取」的唯一判据(0.21.0 分册 26 · FR-26.1)。
1947
+ *
1948
+ * 附件侧(`read_document`)与在线侧(`read_weboffice_document`)共用这一个函数,
1949
+ * 而不是各写一遍 `if`:FR-26.4 要的是同口径,不是碰巧同结论。
1950
+ * @experimental
1951
+ */
1952
+ /** @experimental */
1953
+ type DocumentReadMode = 'auto' | 'vision' | 'images';
1954
+ /**
1955
+ * 图在这一个单元里的地位。
1956
+ *
1957
+ * - `content`:该处文本读不出来(扫描页、纯图块),图**不可替代**,跳过等于这一段空白。
1958
+ * - `illustration`:正文已经读得到,图是补充。
1959
+ * @experimental
1960
+ */
1961
+ type DocumentImageRole = 'content' | 'illustration';
1962
+ /** @experimental */
1963
+ declare function takesImage(mode: DocumentReadMode, role: DocumentImageRole): boolean;
1964
+ /** 本次没取、但回头取得到的图(进返回值的 `deferred`) @experimental */
1965
+ declare function defersImage(mode: DocumentReadMode, role: DocumentImageRole): boolean;
1966
+ /** 入参里的 `mode` 只认这三个字面量,其余一律当 `auto` @experimental */
1967
+ declare function asReadMode(raw: unknown): DocumentReadMode;
1968
+ //#endregion
1969
+ //#region src/document/toolSource.d.ts
1970
+ /** @experimental */
1971
+ declare const READ_DOCUMENT_TOOL = "read_document";
1972
+ /** 大图的门槛:低于它的是页眉 logo、印章、项目符号,投它们等于白烧一次多模态请求 @experimental */
1973
+ declare const PDF_LARGE_IMAGE_RATIO = 0.15;
1974
+ /** @experimental */
1975
+ interface DocumentToolSourceOptions {
1976
+ files: DocumentFileSource;
1977
+ pdf?: PdfDocumentReader;
1978
+ docx?: DocxDocumentReader;
1979
+ xlsx?: XlsxDocumentReader;
1980
+ pptx?: PptxDocumentReader;
1981
+ /** 每次调用重取,宿主改配置立刻生效 */
1982
+ budget?: () => DocumentReadBudget;
1983
+ }
1984
+ /**
1985
+ * 逐单元读文档,读不出字的地方出图(0.21.0 分册 22)。
1986
+ *
1987
+ * 四个端口一个都没接时 `listToolSpecs()` 返回空——模型连这个工具的存在都看不到,
1988
+ * 而不是看得到再被拒(AC-22.2)。
1989
+ * @experimental
1990
+ */
1991
+ declare function createDocumentToolSource(options: DocumentToolSourceOptions): ExternalToolSource;
1992
+ //#endregion
1993
+ //#region src/spreadsheet/toolSource.d.ts
1994
+ declare const EXPORT_SPREADSHEET_TOOL = "export_spreadsheet";
1995
+ interface SpreadsheetToolSourceOptions {
1996
+ /**
1997
+ * 落产物的出口。**不注入即整条通路不存在**:`listToolSpecs()` 返回空数组,
1998
+ * 模型连这个工具的存在都看不到,而不是看得到再被拒。
1999
+ *
2000
+ * 带 `context` 是因为产物属于某一次 run:宿主要拿 `runId` 才能写到对的地方。
2001
+ * `AgentLoop` 调外部工具时总是传它(`agentLoop.ts` 的 `source.call(…, { runId })`)。
2002
+ */
2003
+ writeArtifact?: (path: string, bytes: Uint8Array, mimeType: string, context?: ToolCallContext) => Promise<Artifact>;
2004
+ /**
2005
+ * 图片引用 → 字节。不注入时 `images` 整个字段不进入参 schema,提示词里也不提图——
2006
+ * 与 `writeArtifact` 同一条口径:宿主给不了的能力,模型就不该看得到。
2007
+ *
2008
+ * 解析本身不在这一层:引用能指向本会话哪些东西是宿主的事,工具源知道了就多一份路径面。
2009
+ */
2010
+ resolveImage?: (ref: string, context?: ToolCallContext) => Promise<SpreadsheetImageBytes | undefined>;
2011
+ }
2012
+ /**
2013
+ * 把表格导出接到既有工具协议上。
2014
+ *
2015
+ * 做成 `ExternalToolSource` 而不是 `AgentLoop` 的内置数组(DV-4):本工具需要
2016
+ * `argCaptureTrust` 与 `captureArgs` 两个钩子,内置数组里没有这两个概念。
2017
+ * @experimental
2018
+ */
2019
+ declare function createSpreadsheetToolSource(options: SpreadsheetToolSourceOptions): ExternalToolSource;
2020
+ //#endregion
2021
+ //#region src/template/geometry.d.ts
2022
+ /**
2023
+ * A1 地址与 OOXML 几何换算(0.22.0 分册 42 · 设计 43 §1.6)。
2024
+ *
2025
+ * 环境无关,`@webskill/agent` 里可直接单测——几何算错的后果是图溢出单元格,
2026
+ * 而那只有人肉打开文件才看得见,所以这一层的覆盖要密。
2027
+ */
2028
+ /** 1 px 的 EMU 数(96 DPI) */
2029
+ declare const EMU_PER_PIXEL = 9525;
2030
+ /** 1 磅的 EMU 数 */
2031
+ declare const EMU_PER_POINT = 12700;
2032
+ /** 1 twip 的 EMU 数 */
2033
+ declare const EMU_PER_TWIP = 635;
2034
+ /** 默认字体的最大数字宽度,Excel 列宽换算基准 */
2035
+ declare const MAX_DIGIT_WIDTH = 7;
2036
+ interface CellAddress {
2037
+ /** 0 基 */
2038
+ readonly column: number;
2039
+ /** 0 基 */
2040
+ readonly row: number;
2041
+ }
2042
+ /** @throws WebSkillError 语法不合法 */
2043
+ declare function parseCellAddress(address: string): CellAddress;
2044
+ declare function formatCellAddress({ column, row }: CellAddress): string;
2045
+ interface CellRange {
2046
+ readonly start: CellAddress;
2047
+ readonly end: CellAddress;
2048
+ }
2049
+ /** @throws WebSkillError 语法不合法 */
2050
+ declare function parseCellRange(range: string): CellRange;
2051
+ declare function isRangeTopLeft(range: CellRange, address: CellAddress): boolean;
2052
+ declare function rangeContains(range: CellRange, address: CellAddress): boolean;
2053
+ /** Excel 的列宽单位是字符数,换算成像素(设计 43 §1.6 实测 MDW=7) */
2054
+ declare function columnWidthToPixels(width: number): number;
2055
+ interface Size {
2056
+ readonly width: number;
2057
+ readonly height: number;
2058
+ }
2059
+ /**
2060
+ * 等比缩放进框:宽高同时约束、**取两个比例里的小者**。
2061
+ *
2062
+ * FR-42.11 与 FR-42.19 是同一条口径——xlsx 的合并区和 docx 声明了 `trHeight` 的
2063
+ * 表格行都这么算。框的某一边为 0(未声明高度)时那一边不参与约束。
2064
+ */
2065
+ declare function fitWithin(natural: Size, box: Size): Size;
2066
+ /** PNG / JPEG 的像素尺寸。读文件头,不解码整张图。 */
2067
+ declare function readImageSize(bytes: Uint8Array): Size | undefined;
2068
+ //#endregion
2069
+ //#region src/template/types.d.ts
2070
+ /**
2071
+ * 模板改写的端口契约(0.22.0 分册 42 · 设计 43 §2)。
2072
+ *
2073
+ * 真正拆装 OOXML 的实现在 `@webskill/browser`(要 `DOMParser`),
2074
+ * 这里只声明形状——`@webskill/core` / `@webskill/agent` 保持环境无关。
2075
+ * @experimental
2076
+ */
2077
+ /** @experimental */
2078
+ interface TemplateCellSkeleton {
2079
+ readonly address: string;
2080
+ readonly text: string;
2081
+ /** 在则这格由模板算出,不得填 */
2082
+ readonly formula?: string;
2083
+ }
2084
+ /** @experimental */
2085
+ interface TemplateSheetSkeleton {
2086
+ readonly name: string;
2087
+ readonly range: string;
2088
+ readonly cells: readonly TemplateCellSkeleton[];
2089
+ readonly merges: readonly string[];
2090
+ readonly columnWidths: readonly number[];
2091
+ }
2092
+ /** @experimental */
2093
+ interface XlsxTemplateSkeleton {
2094
+ readonly sheets: readonly TemplateSheetSkeleton[];
2095
+ }
2096
+ /** @experimental */
2097
+ interface TemplateParagraphSkeleton {
2098
+ readonly index: number;
2099
+ readonly text: string;
2100
+ }
2101
+ /** @experimental */
2102
+ interface TemplateTableCellSkeleton {
2103
+ readonly table: number;
2104
+ readonly row: number;
2105
+ readonly column: number;
2106
+ readonly text: string;
2107
+ readonly gridSpan?: number;
2108
+ readonly vMerge?: string;
2109
+ }
2110
+ /** @experimental */
2111
+ interface DocxTemplateSkeleton {
2112
+ readonly paragraphs: readonly TemplateParagraphSkeleton[];
2113
+ readonly cells: readonly TemplateTableCellSkeleton[];
2114
+ }
2115
+ /** @experimental */
2116
+ interface TemplateImageBytes {
2117
+ readonly bytes: Uint8Array;
2118
+ readonly extension: string;
2119
+ readonly contentType: string;
2120
+ }
2121
+ /** @experimental */
2122
+ interface XlsxTemplateFillSpec {
2123
+ readonly rows?: readonly {
2124
+ sheet?: string;
2125
+ at: number;
2126
+ count: number;
2127
+ copyStyleFrom?: number;
2128
+ }[];
2129
+ readonly cells?: readonly {
2130
+ sheet?: string;
2131
+ address: string;
2132
+ value: string;
2133
+ }[];
2134
+ readonly images?: readonly ({
2135
+ sheet?: string;
2136
+ address: string;
2137
+ } & TemplateImageBytes)[];
2138
+ }
2139
+ /** @experimental */
2140
+ interface DocxTemplateFillSpec {
2141
+ readonly texts?: readonly {
2142
+ paragraph?: number;
2143
+ table?: number;
2144
+ row?: number;
2145
+ column?: number;
2146
+ value: string;
2147
+ }[];
2148
+ readonly images?: readonly ({
2149
+ paragraph?: number;
2150
+ table?: number;
2151
+ row?: number;
2152
+ column?: number;
2153
+ } & TemplateImageBytes)[];
2154
+ }
2155
+ /** @experimental */
2156
+ interface XlsxTemplateEngine {
2157
+ read(bytes: Uint8Array): Promise<XlsxTemplateSkeleton>;
2158
+ fill(bytes: Uint8Array, spec: XlsxTemplateFillSpec): Promise<Uint8Array>;
2159
+ }
2160
+ /** @experimental */
2161
+ interface DocxTemplateEngine {
2162
+ read(bytes: Uint8Array): Promise<DocxTemplateSkeleton>;
2163
+ fill(bytes: Uint8Array, spec: DocxTemplateFillSpec): Promise<Uint8Array>;
2164
+ }
2165
+ /** 模板字节的来源,与 `read_document` 同一个出口 @experimental */
2166
+ interface TemplateFileSource {
2167
+ read(id: string, context?: ToolCallContext): Promise<{
2168
+ name: string;
2169
+ bytes: Uint8Array;
2170
+ } | undefined>;
2171
+ }
2172
+ /** @experimental */
2173
+ type TemplateImageResolver = (ref: string, context?: ToolCallContext) => Promise<TemplateImageBytes | undefined>;
2174
+ //#endregion
2175
+ //#region src/template/toolSource.d.ts
2176
+ /** @experimental */
2177
+ declare const INSPECT_TEMPLATE_TOOL = "inspect_template";
2178
+ /** @experimental */
2179
+ declare const FILL_TEMPLATE_TOOL = "fill_template";
2180
+ /**
2181
+ * 骨架预算。模板不是文档,格子数是有限的(实测四份模板 32~56 个),
2182
+ * 但没人能保证用户不传一份两千行的台账进来——超了就截断并明说截了。
2183
+ * @experimental
2184
+ */
2185
+ declare const TEMPLATE_INSPECT_BUDGET: {
2186
+ readonly cells: 400;
2187
+ readonly chars: 20000;
2188
+ };
2189
+ /** @experimental */
2190
+ interface TemplateToolSourceOptions {
2191
+ /** 模板字节的来源,与 `read_document` 共用一个出口 */
2192
+ files: TemplateFileSource;
2193
+ xlsx?: XlsxTemplateEngine;
2194
+ docx?: DocxTemplateEngine;
2195
+ /** 落产物的出口。**不注入即整条通路不存在**:`fill_template` 不出现在工具清单里 */
2196
+ writeArtifact?: (path: string, bytes: Uint8Array, mimeType: string, context?: ToolCallContext) => Promise<Artifact>;
2197
+ /** 图片引用 → 字节。不注入时 `images` 整个字段不进入参 schema,提示词里也不提图 */
2198
+ resolveImage?: TemplateImageResolver;
2199
+ /** 每次调用重取,宿主改配置立刻生效 */
2200
+ budget?: () => {
2201
+ cells: number;
2202
+ chars: number;
2203
+ };
2204
+ /**
2205
+ * 宿主多认的取件号形式,追加到 `template` 的描述后面(例如「在线文档用 `weboffice:<handle>`」)。
2206
+ * 不给就不提——模型不该学会一个这台机器上读不到的号。
2207
+ */
2208
+ idHint?: string;
2209
+ }
2210
+ /**
2211
+ * 照着模板出文件(0.22.0 分册 42)。
2212
+ *
2213
+ * 两个工具而不是一个:模型得先看见模板的坐标,才谈得上决定往哪儿写。
2214
+ * 合成一个工具就只剩两条路——要么让模型盲填,要么每次把整份骨架塞进填值的返回里。
2215
+ * @experimental
2216
+ */
2217
+ declare function createTemplateToolSource(options: TemplateToolSourceOptions): ExternalToolSource;
2218
+ //#endregion
2219
+ //#region src/pageImage/toolSource.d.ts
2220
+ declare const CAPTURE_PAGE_IMAGE_TOOL = "capture_page_image";
2221
+ /** 取像成功:只有引用与事实,**没有字节**(FR-12.2 / AC-G4) @experimental */
2222
+ interface PageImageCapture {
2223
+ /** 形如 `artifact:page-image-1.png`,可直接写进 `AuthoredModel` 图片块的 `ref`(FR-12.7) */
2224
+ artifact: string;
2225
+ width: number;
2226
+ height: number;
2227
+ bytes: number;
2228
+ }
2229
+ /** 取像失败。`reason` 原样来自 `CaptureFailure`,不得二次包装或缩写(FR-12.4) @experimental */
2230
+ interface PageImageFailure {
2231
+ reason: string;
2232
+ triedLevels?: readonly string[];
2233
+ }
2234
+ /** @experimental */
2235
+ type PageImageResult = PageImageCapture | PageImageFailure;
2236
+ /** @experimental */
2237
+ interface PageImageToolSourceOptions {
2238
+ /**
2239
+ * 取像 + 落产物的出口。**不注入即整条通路不存在**:`listToolSpecs()` 返回空数组,
2240
+ * 模型连这个工具的存在都看不到。纯 Web 宿主拿不到宿主页面的 DOM,
2241
+ * 于是在那些宿主上这个工具根本不出现,而不是出现了每次都失败。
2242
+ *
2243
+ * 授权也在这一层:读页面内容已有授权面,本工具必须落进去,不新开第二个入口(FR-12.5)。
2244
+ */
2245
+ capture?: (input: {
2246
+ ref: string;
2247
+ note?: string;
2248
+ }, context?: ToolCallContext) => Promise<PageImageResult>;
2249
+ }
2250
+ /**
2251
+ * 页面取像工具(0.22.0 分册 12)。
2252
+ *
2253
+ * 与 `export_spreadsheet` 同一套 `ExternalToolSource` 范式(FR-12.1),
2254
+ * 不另造第二套注册机制。
2255
+ * @experimental
2256
+ */
2257
+ declare function createPageImageToolSource(options: PageImageToolSourceOptions): ExternalToolSource;
2258
+ //#endregion
2259
+ //#region src/remoteImage/toolSource.d.ts
2260
+ declare const FETCH_REMOTE_IMAGE_TOOL = "fetch_remote_image";
2261
+ /**
2262
+ * 抓取成功。默认只有引用与事实,**没有字节**(与 `capture_page_image` 同一条约束,AC-G4);
2263
+ * 只有模型显式要求看图时宿主才填 `mimeType` / `data`(FR-21.11)。
2264
+ * @experimental
2265
+ */
2266
+ interface RemoteImageFetch {
2267
+ /** 形如 `artifact:remote-image-1.png`,可直接写进 `AuthoredModel` 图片块的 `ref` */
2268
+ artifact: string;
2269
+ width: number;
2270
+ height: number;
2271
+ bytes: number;
2272
+ /** base64 图像数据,仅当入参 `describe` 为真时提供 */
2273
+ data?: string;
2274
+ /** 与 `data` 同进同出 */
2275
+ mimeType?: string;
2276
+ }
2277
+ /**
2278
+ * 抓取失败。`reason` 原样来自 `fetchRemoteImage`,不得二次包装(FR-13.4)。
2279
+ * `kind` 是分类,模型据此决定换 URL、重试还是放弃。
2280
+ * @experimental
2281
+ */
2282
+ interface RemoteImageFetchFailure {
2283
+ reason: string;
2284
+ kind?: string;
2285
+ }
2286
+ /** @experimental */
2287
+ type RemoteImageResult = RemoteImageFetch | RemoteImageFetchFailure;
2288
+ /** @experimental */
2289
+ interface RemoteImageToolSourceOptions {
2290
+ /**
2291
+ * 抓取 + 落产物的出口。**不注入即整条通路不存在**:`listToolSpecs()` 返回空数组。
2292
+ * 纯 Web 宿主受同源策略限制抓不到跨域字节(设计 14 §1),
2293
+ * 在那些宿主上这个工具不出现,而不是出现了每次都失败。
2294
+ *
2295
+ * 授权在这一层,且必须发生在**发请求之前**(AC-13.5)。
2296
+ * `describe` 为真时额外把字节回出来给模型看,抓取仍只发生一次(FR-21.11)。
2297
+ */
2298
+ fetchImage?: (input: {
2299
+ url: string;
2300
+ note?: string;
2301
+ describe?: boolean;
2302
+ }, context?: ToolCallContext) => Promise<RemoteImageResult>;
2303
+ }
2304
+ /**
2305
+ * 外链图片抓取工具(0.22.0 分册 13)。
2306
+ *
2307
+ * 与 `capture_page_image` 同一套范式:模型给出来源、宿主拿字节、回给模型的只有引用。
2308
+ * 三种图片来源(上传、页面、外链)因此在技能那一侧长得一模一样(AC-G1)。
2309
+ * @experimental
2310
+ */
2311
+ declare function createRemoteImageToolSource(options: RemoteImageToolSourceOptions): ExternalToolSource;
2312
+ //#endregion
2313
+ //#region src/dwg/types.d.ts
2314
+ /**
2315
+ * DWG 图纸的端口与几何模型(0.22.0 分册 19)。
2316
+ *
2317
+ * 本文件只声明**形状**:agent 包不解析 DWG,解析由宿主注入
2318
+ * (扩展侧用 `@node-projects/acad-ts`)。与 pptx 端口同构。
2319
+ *
2320
+ * 几何模型的设计前提来自对三份真实图纸的实测(见分册 19 §2.3):
2321
+ * - 块引用必须在实现侧展开并烘焙变换:`2D.dwg` 顶层只有 1129 个实体,
2322
+ * 展开后是 6044 个;不展开投放出来的是一张近乎空白的图。
2323
+ * - 实体一律带 `handle`,它是 diff 的主键(实测 16613/16618 稳定)。
2324
+ * - 只建模二维图元:图纸自带的三维实体是 ACIS,浏览器里镶嵌不了。
2325
+ */
2326
+ /** 二维点。DWG 内部是三维点,二维图元把 Z 丢掉——投放面按 Z 分层,不需要逐点 Z */
2327
+ interface DwgPoint {
2328
+ readonly x: number;
2329
+ readonly y: number;
2330
+ }
2331
+ /** 轴对齐包围盒;相机与自适应缩放都要它 */
2332
+ interface DwgBounds {
2333
+ readonly minX: number;
2334
+ readonly minY: number;
2335
+ readonly maxX: number;
2336
+ readonly maxY: number;
2337
+ }
2338
+ /**
2339
+ * 可绘制的二维图元。
2340
+ *
2341
+ * 归一到这几种形状,是为了让投放面**不必认识 DWG 实体类型**:
2342
+ * Hatch 的边界、Polyline2D、LwPolyline 都塌成折线,Ellipse 与 Arc 各自保留参数式
2343
+ * 表达(塌成折线会在放大时露出棱角,而 CAD 图纸恰恰是要放大看的)。
2344
+ */
2345
+ type DwgGeometry = {
2346
+ readonly kind: 'polyline';
2347
+ readonly points: readonly DwgPoint[];
2348
+ readonly closed: boolean;
2349
+ } | {
2350
+ readonly kind: 'circle';
2351
+ readonly center: DwgPoint;
2352
+ readonly radius: number;
2353
+ } | {
2354
+ readonly kind: 'arc';
2355
+ readonly center: DwgPoint;
2356
+ readonly radius: number;
2357
+ /** 弧度,逆时针;acad-ts 给的就是弧度,不在端口上换算成角度徒增一次转换 */
2358
+ readonly startAngle: number;
2359
+ readonly endAngle: number;
2360
+ } | {
2361
+ readonly kind: 'ellipse';
2362
+ readonly center: DwgPoint;
2363
+ /** 长轴端点相对中心的偏移;短轴由 `ratio` 导出,与 DWG 的表示一致 */
2364
+ readonly majorAxis: DwgPoint;
2365
+ readonly ratio: number;
2366
+ readonly startAngle: number;
2367
+ readonly endAngle: number;
2368
+ } | {
2369
+ readonly kind: 'point';
2370
+ readonly at: DwgPoint;
2371
+ } | {
2372
+ readonly kind: 'text';
2373
+ readonly at: DwgPoint;
2374
+ /** 已剥离 MText 格式控制码的纯文本(`{\fSimSun|b0|i0|c134|p2;餐厅}` → `餐厅`) */
2375
+ readonly text: string;
2376
+ readonly height: number;
2377
+ /** 弧度 */
2378
+ readonly rotation: number;
2379
+ /**
2380
+ * `at` 这个点落在文字的哪个位置(0.22.0 分册 25 FR-25.1)。
2381
+ *
2382
+ * 对齐是文字**几何的固有属性**而非渲染偏好:实测 `大堂立面图.dwg` 的 178 个
2383
+ * MTEXT 里有 96 个是 MiddleCenter,不带这两个字段的话每个接入方都得自己去猜,
2384
+ * 猜错的后果就是文字整体偏出半个字高加半个字宽、溢到方框和圆圈外面。
2385
+ * 省略时按 `left` / `baseline`,即分册 24 的既有行为。
2386
+ */
2387
+ readonly anchorX?: 'left' | 'center' | 'right';
2388
+ readonly anchorY?: 'top' | 'middle' | 'baseline' | 'bottom';
2389
+ /** MText 的换行宽度(世界单位);缺省或为 0 表示不折行 */
2390
+ readonly wrapWidth?: number;
2391
+ /**
2392
+ * 图纸指定的字体(0.22.0 分册 28 FR-28.5)。
2393
+ *
2394
+ * 字号一直来自 `height`,字体族却无处可取,于是每个接入方只能硬写一个。
2395
+ * 实测 `2D.dwg` 的 462 条文字里,129 条走 SHX 笔画字体、74 条走 `simhei.ttf`、
2396
+ * 223 条走 `arial.ttf`——全部画成同一个无衬线体与原图相去甚远。
2397
+ * 样式缺失或字段为空时省略。
2398
+ */
2399
+ readonly font?: DwgFont;
2400
+ };
2401
+ /**
2402
+ * 文字样式指定的字体(0.22.0 分册 28 FR-28.5)。
2403
+ *
2404
+ * 拉丁字体与 CJK 大字体是**两个独立的槽**,可以不同
2405
+ * (实测样式 `TH-STYLE2` 是 `th-rmc` + `th-chnc`),因此不能合并成一个字段。
2406
+ */
2407
+ interface DwgFont {
2408
+ /** 主字体文件名,如 `simhei.ttf` / `th-rmc`;样式未指定时省略 */
2409
+ readonly file?: string;
2410
+ /** CJK 大字体文件名,如 `th-chnc`;只有 SHX 样式才有 */
2411
+ readonly bigFile?: string;
2412
+ /** 宽度因子;1 或缺省表示不横向缩放 */
2413
+ readonly widthFactor?: number;
2414
+ }
2415
+ /**
2416
+ * 填充(0.22.0 分册 23 FR-23.3)。
2417
+ *
2418
+ * 分册 19 只取了填充的**边界**,于是真实图纸里 218 个 HATCH 全变成了空轮廓。
2419
+ * 填充单独建模而不是塑成几何,是因为它**不进指纹**:
2420
+ * 一个图案填充展开后可达 6358 条线段,让它们各自成为一条差异记录,
2421
+ * 明细表会被淢没到不可用(FR-23.3 注 / AC-23.4)。
2422
+ */
2423
+ type DwgFill = {
2424
+ /** 实心填充。多个环按奇偶规则填,带岛的图案才不会把洞填死 */
2425
+ readonly kind: 'solid';
2426
+ readonly loops: readonly (readonly DwgPoint[])[];
2427
+ /**
2428
+ * 环的组合规则(0.22.0 分册 28 FR-28.4)。缺省视同 `'evenodd'`。
2429
+ *
2430
+ * 宽多段线铺出的带面是一组互相重叠的四边形的**并集**,奇偶规则会把
2431
+ * 转角的重叠处异或成洞(实测转角处一行被切成 `5 / 9 / 5` 三截);
2432
+ * 而 HATCH 的环是带岛的**区域**,必须继续用奇偶规则,否则天井会被填实。
2433
+ */
2434
+ readonly rule?: 'evenodd' | 'nonzero';
2435
+ } | {
2436
+ /** 图案填充:`Hatch.explodePattern()` 展开后的线段,四个一组 `x1,y1,x2,y2` */
2437
+ readonly kind: 'pattern';
2438
+ readonly segments: readonly number[];
2439
+ } | {
2440
+ /** 遮罩(WIPEOUT):按边界填背景色。这就是它的语义,不是「不支持」 */
2441
+ readonly kind: 'mask';
2442
+ readonly loops: readonly (readonly DwgPoint[])[];
2443
+ };
2444
+ /**
2445
+ * 一个可绘制的实体。
2446
+ *
2447
+ * `handle` 是 DWG 自带的标识,由实现侧产出;消费方不反向解析几何。
2448
+ */
2449
+ interface DwgEntity {
2450
+ /** DWG 句柄,十六进制字符串。实测在同源另存间稳定 */
2451
+ readonly handle: string;
2452
+ /** 原始实体类型名,如 `Line` / `LwPolyline` / `MText` */
2453
+ readonly kind: string;
2454
+ readonly layer: string;
2455
+ readonly geometry: DwgGeometry | undefined;
2456
+ /** 块属性(ATTRIB)的 tag→value;无属性时为 undefined */
2457
+ readonly attributes?: Readonly<Record<string, string>>;
2458
+ /** 实体色 `#rrggbb`;缺省(ByLayer)时省略,由渲染层回落图层色 */
2459
+ readonly color?: string;
2460
+ readonly fill?: DwgFill;
2461
+ /** 线型的 dash 模式,**世界单位**(绘制时再乘镜头缩放);省略即实线 */
2462
+ readonly dash?: readonly number[];
2463
+ /**
2464
+ * 线宽,单位 0.01 mm(0.22.0 分册 25 FR-25.3)。
2465
+ *
2466
+ * `ByLayer` / `ByBlock` / `Default` 这三种间接值已在解析期解开,拿到的就是实际值;
2467
+ * 解不出来时省略。实测这张图的线宽跨越 `5`(0.05 mm) 到 `50`(0.50 mm) 共十倍,
2468
+ * 不带它就只能把图框、云线与细标注线一律画成同一种粗细。
2469
+ */
2470
+ readonly lineWeight?: number;
2471
+ }
2472
+ /**
2473
+ * 图纸空间里的一个视口(FR-23.2)。
2474
+ *
2475
+ * 它把模型空间的一块区域按相似变换画进图纸上的一个矩形窗口。
2476
+ * 实测 `大堂立面图.dwg` 的 Layout1 有 6 个视口,其中 5 个是 50:1 的立面窗口,
2477
+ * 它们同时也是一份现成的模型空间分区表(分册 23 §2.2)。
2478
+ */
2479
+ interface DwgViewport {
2480
+ /** 图纸空间里的窗口中心与尺寸 */
2481
+ readonly center: DwgPoint;
2482
+ readonly width: number;
2483
+ readonly height: number;
2484
+ /** 窗口里看到的模型空间中心与高度;缩放比 = `height / viewHeight` */
2485
+ readonly viewCenter: DwgPoint;
2486
+ readonly viewHeight: number;
2487
+ /** 视图扭角,弧度 */
2488
+ readonly twistAngle: number;
2489
+ /** 视口级冻结的图层。本图为空,但不实现就是一个会在别的图纸上炸的洞 */
2490
+ readonly frozenLayers: readonly string[];
2491
+ }
2492
+ /**
2493
+ * 图纸上的一个「物件」:一次块引用(0.22.0 分册 37 FR-37.1)。
2494
+ *
2495
+ * 门、窗、家具、洁具、消防栓在图纸里几乎全是以 `INSERT` 存在的,
2496
+ * 块名就是图纸作者亲手声明的「这是一个物件」。解析时块被展开成几何(为了画出来),
2497
+ * 这份清单是展开的同时另收的一份,**不影响渲染**(FR-37.4)。
2498
+ * @experimental
2499
+ */
2500
+ interface DwgComponent {
2501
+ /** 块名。动态块变体已回查源块取真名(FR-37.3) */
2502
+ readonly block: string;
2503
+ /** 插入点,世界坐标(嵌套块已烘焙过外层变换) */
2504
+ readonly at: DwgPoint;
2505
+ /** 旋转角,弧度 */
2506
+ readonly rotation: number;
2507
+ readonly scaleX: number;
2508
+ readonly scaleY: number;
2509
+ readonly layer: string;
2510
+ /** `ATTRIB` 的 tag→value;一个都没有时省略 */
2511
+ readonly attributes?: Readonly<Record<string, string>>;
2512
+ }
2513
+ /**
2514
+ * 一个可切换的视图(FR-23.1):模型空间或一张图纸。
2515
+ *
2516
+ * `id` 用 Layout 名(`Model` / `Layout1`)而不用句柄或序号:
2517
+ * 两份图纸的**同名** Layout 才是业务上「同一张图纸」,对比靠它配对(FR-23.7)。
2518
+ */
2519
+ interface DwgView {
2520
+ readonly id: string;
2521
+ readonly name: string;
2522
+ readonly kind: 'model' | 'layout';
2523
+ readonly entities: readonly DwgEntity[];
2524
+ readonly bounds: DwgBounds;
2525
+ /**
2526
+ * 图纸**自己声明**的范围(0.22.0 分册 29 FR-29.4)。
2527
+ *
2528
+ * 图纸空间取打印窗口(`plotType` 为「窗口」时才有),模型空间取 `$EXTMIN` / `$EXTMAX`。
2529
+ * 与量出来的 `bounds` 并存而不替代:实测 `大堂平面图.dwg` 的模型空间实体盒是
2530
+ * 4.79e10 × 1.89e10,而 `$EXTMIN`/`$EXTMAX` 只有 7.93e8 × 1.09e9——
2531
+ * 差出来的 60 倍是 1311 个原始插入点就在 −3.6e10 的属性,两个数同时在场才看得出来。
2532
+ *
2533
+ * 声明不出来(`plotType` 不是窗口、数值非有限、宽高退化为 0)时省略。
2534
+ */
2535
+ readonly extent?: DwgBounds;
2536
+ readonly viewports: readonly DwgViewport[];
2537
+ /**
2538
+ * 本视图里的构件清单(FR-37.1)。字段缺失是合法状态:
2539
+ * 宿主自己实现的解析器可以不产出它,那时「对比差异」不出现。
2540
+ */
2541
+ readonly components?: readonly DwgComponent[];
2542
+ }
2543
+ interface DwgLayer {
2544
+ readonly name: string;
2545
+ /** `#rrggbb`;实现侧把 DWG 的索引色解析成实际颜色 */
2546
+ readonly color: string;
2547
+ readonly visible: boolean;
2548
+ }
2549
+ /**
2550
+ * 图纸坐标的量纲(0.22.0 FR-31.12),取自图头的 `INSUNITS`。
2551
+ *
2552
+ * `'unitless'` 是图纸自己说不知道,**不是**「默认毫米」:
2553
+ * 猜错一次就是 1000 倍,而且不会有任何提示。
2554
+ */
2555
+ type DwgUnits = 'mm' | 'cm' | 'm' | 'km' | 'in' | 'ft' | 'yd' | 'mi' | 'unitless';
2556
+ /** 解析结果。一份图纸拉平成实体数组 + 图层表 + 元信息 */
2557
+ interface DwgDocumentContent {
2558
+ /** 文件格式版本,如 `AC1021` */
2559
+ readonly version: string;
2560
+ readonly layers: readonly DwgLayer[];
2561
+ /** 模型空间视图的实体(= `views` 里 `kind==='model'` 那一项的别名) */
2562
+ readonly entities: readonly DwgEntity[];
2563
+ readonly bounds: DwgBounds;
2564
+ /** 坐标的量纲(FR-31.12)。字段缺失与 `'unitless'` 同义:量出来的数没有单位 */
2565
+ readonly units?: DwgUnits;
2566
+ /**
2567
+ * 所有可切换的视图(FR-23.1):模型空间 + 每一张图纸。
2568
+ * 空 Layout 也列在这里——隐了会让用户以为图纸里没有这张表(FR-23.2)。
2569
+ *
2570
+ * 可选是为了给不产出图纸空间的解析实现留退路(宿主自己实现 `DwgDocumentReader`
2571
+ * 也是允许的);取用一律走 `dwgViewsOf`,它会补一个模型空间视图。
2572
+ */
2573
+ readonly views?: readonly DwgView[];
2574
+ /** 模型空间视图的构件清单(= `views` 里 `kind==='model'` 那一项的别名) */
2575
+ readonly components?: readonly DwgComponent[];
2576
+ /**
2577
+ * 无法原样呈现的内容,必须显式上报而不是静默丢弃(FR-19.7 / FR-23.6)。
2578
+ * 包括两类:完全没画的(ACIS)与降级画的(图案近似、线型退回实线)。
2579
+ */
2580
+ readonly omissions: readonly DwgOmission[];
2581
+ }
2582
+ interface DwgOmission {
2583
+ readonly kind: string;
2584
+ readonly count: number;
2585
+ readonly reason: 'acis-not-tessellated' | 'unsupported-entity' | 'pattern-approximated' | 'pattern-too-dense' | 'linetype-unavailable';
2586
+ /**
2587
+ * `dropped` = 完全没画;`degraded` = 画了,但不是原样。
2588
+ *
2589
+ * 分册 19 只上报前一类,于是界面上那句「只有 2 个图元不受支持」
2590
+ * 遮住了「218 个填充被降级了」——这比画不出来更有害(FR-23.6)。
2591
+ */
2592
+ readonly severity: 'dropped' | 'degraded';
2593
+ }
2594
+ /** 宿主注入的解析实现 */
2595
+ interface DwgDocumentReader {
2596
+ read(bytes: Uint8Array): Promise<DwgDocumentContent>;
2597
+ }
2598
+ //#endregion
2599
+ //#region src/dwg/toolSource.d.ts
2600
+ declare const VIEW_DWG_TOOL = "view_dwg";
2601
+ /**
2602
+ * `load()` 的另一种返回形态:连文件名一起给(0.22.0 FR-31.1)。
2603
+ *
2604
+ * 图纸到模型手里只有取件号(见 `SYSTEM_PROMPT`),所以 `file` 入参不是文件名;
2605
+ * 真名只有解析取件号的那一侧知道,这是它交出来的唯一通道。 @experimental
2606
+ */
2607
+ interface DwgLoadedDrawing {
2608
+ readonly document: DwgDocumentContent;
2609
+ readonly name?: string;
2610
+ }
2611
+ /** 宿主注入的解析与投放出口 @experimental */
2612
+ interface DwgToolSourceOptions {
2613
+ /**
2614
+ * 把一个文件引用读成几何模型。**不注入即整条通路不存在**——
2615
+ * `listToolSpecs()` 返回空数组,模型看不到这个工具(AC-34.3)。
2616
+ *
2617
+ * 只返回 `DwgDocumentContent` 的宿主行为不变;带上 `name` 才能让投放面显示文件名。
2618
+ */
2619
+ load?: (file: string, context?: ToolCallContext) => Promise<DwgDocumentContent | DwgLoadedDrawing>;
2620
+ /** 投放到查看器。同样由宿主实现:agent 包不认识 `documentSurface` */
2621
+ project?: (input: DwgProjection, context?: ToolCallContext) => Promise<void>;
2622
+ }
2623
+ /** 投放载荷里的一份图纸 @experimental */
2624
+ interface DwgProjectedDrawing {
2625
+ /** 模型传进来的取件号。进告知卡与审计,是**数据来源描述**,不是文件名 */
2626
+ readonly title: string;
2627
+ /** 给人看的文件名(FR-31.2)。宿主的 `load()` 没给名字时为 `undefined` */
2628
+ readonly fileName?: string;
2629
+ readonly document: DwgDocumentContent;
2630
+ }
2631
+ /**
2632
+ * 投放载荷。几何走这里去查看器,**不进模型上下文**。
2633
+ *
2634
+ * 单份与双份同形(§4.2):只看一份时 `drawings` 就是一元素数组。
2635
+ * 留一条「单份专用」旁路会让两条渲染路径各自演化。数组顺序就是初始叠放顺序,第一项在上。
2636
+ * @experimental
2637
+ */
2638
+ interface DwgProjection {
2639
+ readonly drawings: readonly DwgProjectedDrawing[];
2640
+ }
2641
+ /**
2642
+ * DWG 查看工具(0.22.0 分册 19,分册 34 收敛为单工具)。
2643
+ *
2644
+ * 与 `capture_page_image` 同一套 `ExternalToolSource` 范式。
2645
+ * 解析与投放都由宿主注入:本包不认识 `.dwg` 字节,也不认识 `documentSurface`。
2646
+ * @experimental
2647
+ */
2648
+ declare function createDwgToolSource(options: DwgToolSourceOptions): ExternalToolSource;
2649
+ //#endregion
2650
+ //#region src/dwg/views.d.ts
2651
+ /**
2652
+ * 视图取用(0.22.0 分册 23 FR-23.5 / FR-23.7)。
2653
+ *
2654
+ * 单独成文件是因为 diff、导出、投放面三边都要用同一套「哪些视图、按什么配对」,
2655
+ * 各写一份迟早会在某一边把空布局漏掉。
2656
+ */
2657
+ /** 模型空间视图的固定 id。两份图纸靠它配对 */
2658
+ declare const DWG_MODEL_VIEW_ID = "Model";
2659
+ /**
2660
+ * 文档的视图列表。
2661
+ *
2662
+ * 分册 23 之前解析出的文档没有 `views`,给它补一个模型空间视图:
2663
+ * 那时的 `entities` 本来就是模型空间的全部内容,语义对得上。
2664
+ */
2665
+ declare function dwgViewsOf(doc: DwgDocumentContent): readonly DwgView[];
2666
+ /** 按 id 取视图;取不到就退回第一个,而不是什么都没有 */
2667
+ declare function dwgPickView(doc: DwgDocumentContent, viewId: string | undefined): DwgView;
2668
+ //#endregion
2669
+ export { DownloadedFileEntry as $, SkillGenerationToolSourceOptions as $n, createPageImageToolSource as $r, PERCEPTION_PAGING_DEFAULTS as $t, DataSourceRecord as A, PerceptionAuditSink as An, TodoListener as Ar, FILL_TEMPLATE_TOOL as At, DocumentFileSource as B, READ_DOCUMENT_TOOL as Bn, XlsxTemplateEngine as Br, LIST_PAGE_TABS_TOOL as Bt, DataSourceCandidateRecord as C, toActionFrameScopes as Ci, ParentBudget as Cn, TemplateParagraphSkeleton as Cr, DwgView as Ct, DataSourcePolicy as D, PdfTextQuality as Dn, TodoEvent as Dr, EMU_PER_TWIP as Dt, DataSourceKind as E, PdfPageImage as En, TemplateToolSourceOptions as Er, EMU_PER_POINT as Et, DelegationRequest as F, PerceptionScope as Fn, WorksetTab as Fr, GeneratedSkillDraft as Ft, DocumentToolSourceOptions as G, RemoteImageToolSourceOptions as Gn, clampWorksetMax as Gr, OpenedTabSignal as Gt, DocumentImageRole as H, RemoteImageFetch as Hn, XlsxTemplateSkeleton as Hr, MAX_DIGIT_WIDTH as Ht, DelegationResult as I, PerceptionScopeInput as In, WorksetTabView as Ir, HttpDataSourceOptions as It, DocxTemplateEngine as J, Size as Jn, createDocumentToolSource as Jr, PAGE_ACTION_TOOL as Jt, DocxDocumentContent as K, RenderedImage as Kn, columnWidthToPixels as Kr, PAGE_ACTION_KINDS as Kt, DelegationToolSourceOptions as L, PptxDocumentContent as Ln, XlsxDocumentContent as Lr, INSPECT_TEMPLATE_TOOL as Lt, DelegationBudget as M, PerceptionPagingBudget as Mn, TodoStore as Mr, FrameNote as Mt, DelegationOrchestrator as N, PerceptionRecord as Nn, TodoToolSourceOptions as Nr, FrameScope as Nt, DataSourcePolicyOptions as O, PerceivedImage as On, TodoItem as Or, EXPORT_SPREADSHEET_TOOL as Ot, DelegationOrchestratorOptions as P, PerceptionResult as Pn, VIEW_DWG_TOOL as Pr, GENERATE_SKILL_TOOL as Pt, DownloadedFileConsent as Q, SkillGenerationPolicy as Qn, createPageActionToolSource as Qr, PERCEIVE_PAGE_TOOL as Qt, DocumentBlock as R, PptxDocumentReader as Rn, XlsxDocumentReader as Rr, ImageCaptureBudget as Rt, DataSourceCandidatePolicyOptions as S, takesImage as Si, PagePerceptionToolSourceOptions as Sn, TemplateImageResolver as Sr, DwgUnits as St, DataSourceDef as T, withDelegationOrigin as Ti, PdfDocumentReader as Tn, TemplateTableCellSkeleton as Tr, EMU_PER_PIXEL as Tt, DocumentReadBudget as U, RemoteImageFetchFailure as Un, asReadMode as Ur, NestedFrameRef as Ut, DocumentFormat as V, READ_DOWNLOADED_FILE_TOOL as Vn, XlsxTemplateFillSpec as Vr, MANAGE_TODO_TOOL as Vt, DocumentReadMode as W, RemoteImageResult as Wn, clampDownloadWaitMs as Wr, OpenedPageInfo as Wt, DocxTemplateSkeleton as X, SkillGenerationMessages as Xn, createDwgToolSource as Xr, PDF_GARBLED_RATIO as Xt, DocxTemplateFillSpec as Y, SkillCandidateSink as Yn, createDownloadedFileToolSource as Yr, PAGE_DOCUMENT_REF as Yt, DownloadedFileAction as Z, SkillGenerationOutcome as Zn, createHttpDataSourceTransport as Zr, PDF_LARGE_IMAGE_RATIO as Zt, DWG_MODEL_VIEW_ID as _, parseCellAddress as _i, PageImageResult as _n, TabWorksetPort as _r, DwgOmission as _t, ActionTabWindow as a, createTemplateToolSource as ai, PageActionPolicy as an, SubAgentRunInput as ar, DownloadedFileRecord as at, DataSourceCandidateAuditSink as b, readImageSize as bi, PagePerceptionPolicyOptions as bn, TemplateFileSource as br, DwgProjection as bt, CellAddress as c, dwgPickView as ci, PageActionRequest as cn, TAB_WORKSET_DEFAULT_MAX as cr, DwgComponent as ct, DELEGATE_TASK_TOOL as d, formatCellAddress as di, PageActionTarget as dn, TAB_WORKSET_SYSTEM_PROMPT as dr, DwgEntity as dt, createPagePerceptionToolSource as ei, PERCEPTION_SYSTEM_PROMPT as en, SkillGenerator as er, DownloadedFileListing as et, DELEGATION_SYSTEM_PROMPT as f, frameLabel as fi, PageActionToolSourceOptions as fn, TEMPLATE_INSPECT_BUDGET as fr, DwgFill as ft, DOWNLOAD_WAIT_MIN_MS as g, measurePdfTextQuality as gi, PageImageFailure as gn, TabWorksetPolicyOptions as gr, DwgLoadedDrawing as gt, DOWNLOAD_WAIT_MAX_MS as h, isRangeTopLeft as hi, PageImageCapture as hn, TabWorksetPolicy as hr, DwgLayer as ht, ActionTabWatcher as i, createTabWorksetToolSource as ii, PageActionOutcome as in, SpreadsheetToolSourceOptions as ir, DownloadedFileReader as it, DataSourceTransport as j, PerceptionCaptureOptions as jn, TodoStatus as jr, FOCUS_PAGE_TAB_TOOL as jt, DataSourceProvenance as k, PerceivedNode as kn, TodoList as kr, FETCH_REMOTE_IMAGE_TOOL as kt, CellRange as l, dwgViewsOf as li, PageActionScope as ln, TAB_WORKSET_MAX_MAX as lr, DwgDocumentContent as lt, DOWNLOAD_WAIT_DEFAULT_MS as m, isPdfTextTrustworthy as mi, PageAuditSink as mn, TabAdmission as mr, DwgGeometry as mt, ActionDownloadWindow as n, createSkillGenerationToolSource as ni, PageActionExecutor as nn, SkillTraceEvidence as nr, DownloadedFilePolicyOptions as nt, CAPTURE_PAGE_IMAGE_TOOL as o, createTodoToolSource as oi, PageActionPolicyOptions as on, SubAgentRunner as or, DownloadedFileToolSourceOptions as ot, DOCUMENT_READ_BUDGET as p, frameSteps as pi, PageActionUi as pn, TODO_SYSTEM_PROMPT as pr, DwgFont as pt, DocxDocumentReader as q, SKILL_GENERATION_SYSTEM_PROMPT as qn, createDelegationToolSource as qr, PAGE_ACTION_SYSTEM_PROMPT as qt, ActionFrameScope as r, createSpreadsheetToolSource as ri, PageActionKind as rn, SkillTraceEvidenceStep as rr, DownloadedFileReadResult as rt, CLOSE_PAGE_TAB_TOOL as s, defersImage as si, PageActionRecord as sn, SubtreeRejection as sr, DwgBounds as st, ActionDownloadWatcher as t, createRemoteImageToolSource as ti, PageActionConsent as tn, SkillGeneratorOptions as tr, DownloadedFilePolicy as tt, ConsentUi as u, fitWithin as ui, PageActionScopeInput as un, TAB_WORKSET_MIN_MAX as ur, DwgDocumentReader as ut, DataSourceAuditSink as v, parseCellRange as vi, PageImageToolSourceOptions as vn, TabWorksetToolSourceOptions as vr, DwgPoint as vt, DataSourceCandidateStore as w, toFrameScopes as wi, PdfDocumentHandle as wn, TemplateSheetSkeleton as wr, DwgViewport as wt, DataSourceCandidatePolicy as x, sniffDocumentFormat as xi, PagePerceptionReader as xn, TemplateImageBytes as xr, DwgToolSourceOptions as xt, DataSourceCandidate as y, rangeContains as yi, PagePerceptionPolicy as yn, TemplateCellSkeleton as yr, DwgProjectedDrawing as yt, DocumentFileBytes as z, PptxSlideContent as zn, XlsxSheetContent as zr, LIST_DOWNLOADED_FILES_TOOL as zt };