@webskill/sdk 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent.d.ts +3 -3
- package/dist/agent.js +2442 -3
- package/dist/{dist-ExSQky4C.js → approval-BnLLCOG0.js} +277 -2934
- package/dist/browser.d.ts +327 -8
- package/dist/browser.js +1017 -51
- package/dist/{openUiLibrary-BKXW7Iwx-CWWBVOkE.js → dist-CTsxblSD.js} +496 -28
- package/dist/{echarts-De78wXqV.js → echarts-BE7oV_Dl.js} +1 -1
- package/dist/{env-8cY40DXB-CGnEVZby.js → env-Bj1MI2Ww.js} +1 -1
- package/dist/errors-BDZNpC13.js +22 -0
- package/dist/{eventTypes-FllCrX-Z-DNDeHWoG.js → eventTypes-Y07N8IAC.js} +14 -2
- package/dist/external-_ZRQe-V9.js +53 -0
- package/dist/governance.d.ts +15 -3
- package/dist/governance.js +86 -4
- package/dist/{index-iBm9tJL_.d.ts → index-CQYo4tcT.d.ts} +469 -10
- package/dist/{index-C3XdItd_.d.ts → index-CU2md8R1.d.ts} +26 -18
- package/dist/{index-DkvBhJQy.d.ts → index-Oc3H89TJ.d.ts} +204 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +1001 -5
- package/dist/kind-DxgS8LM-.js +77 -0
- package/dist/linkedDocument-xNXF-z8n.js +94 -0
- package/dist/llm-B7lLH0ZI.js +1767 -0
- package/dist/mcp.d.ts +56 -3
- package/dist/mcp.js +75 -5
- package/dist/memoryArtifactStore-D6dLeY55.js +48 -0
- package/dist/miniChart-owdCdaw-.js +533 -0
- package/dist/node.d.ts +3 -3
- package/dist/node.js +110 -13
- package/dist/openUiLibrary-CY_ADoe0.js +30 -0
- package/dist/openUiSpecLang-DuOCdw9G.js +1849 -0
- package/dist/pathSecurity-B1owvJAF.js +65 -0
- package/dist/processSandboxEntry.js +5 -1
- package/dist/renderResult-D9Q-Vu2x.js +143 -0
- package/dist/{rolldown-runtime-BOF7iYI8.js → rolldown-runtime-BHkdefai.js} +1 -2
- package/dist/sandboxWorkerEntry.js +5 -1
- package/dist/{dist-Bev6i6Ip.js → skill-CAJMsLod.js} +44 -314
- package/dist/{skillVersionStore-D-qHk9ZE-DheTIwAB.d.ts → skillVersionStore-B24Jjjry-C4zomhMZ.d.ts} +14 -2
- package/dist/surface-DVGiCmwq.js +145 -0
- package/dist/testing.d.ts +1 -1
- package/dist/testing.js +64 -3
- package/dist/{types-DLctJep_-B5G4uk2u.d.ts → types-C3V6lAeO-BIf7UB2e.d.ts} +79 -4
- package/dist/types-TUydnxaj.js +78 -0
- package/dist/ui-react.d.ts +12 -5
- package/dist/ui-react.js +128548 -4729
- package/dist/ui-vue.d.ts +1 -1
- package/dist/ui-vue.js +11 -2
- package/dist/ui.d.ts +3 -3
- package/dist/ui.js +1254 -3
- package/dist/urlSafety-CiSuCJvX.js +65 -0
- package/dist/webSkillApi-DOOyz2G5.js +106 -0
- package/dist/{webskillLitCatalog-D_zCqeQF-C9lrvvMr.js → webskillLitCatalog-DSqVFQjK.js} +11 -3
- package/package.json +1 -1
- package/dist/catalogComponents-BgAJN0p8-CYEXSk45.js +0 -124384
- package/dist/client-BCM6Z3yq-qUQNkKrK.js +0 -7787
- package/dist/dist-DqcL6jKO.js +0 -3509
- package/dist/dist-DxyxmXPU-DGC-dpXf.js +0 -5621
- package/dist/dist-GK6dtjRv.js +0 -1493
- package/dist/memoryArtifactStore-52Zn9npI-LbCQaqyx.js +0 -86
- package/dist/stdio-CFMoANJJ-BxrTeXh7.js +0 -31
- package/dist/testing-WPTyXQYt.js +0 -142
- package/dist/types-WovEf4ED-CZSDiiBU.js +0 -6215
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
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-C3V6lAeO-BIf7UB2e.js";
|
|
2
|
+
import { Kn as XlsxTextExtractor, P as DocxTextExtractor, bn as ToolStepReader, j as DataSourceInfo, z as ExternalToolSource } from "./index-Oc3H89TJ.js";
|
|
3
3
|
//#region ../agent/dist/index.d.ts
|
|
4
4
|
//#region src/todo/types.d.ts
|
|
5
5
|
/** 待办条目状态:未开始 / 进行中 / 已完成(FR-3.1) */
|
|
@@ -427,10 +427,17 @@ interface PerceivedNode {
|
|
|
427
427
|
href?: string;
|
|
428
428
|
/**
|
|
429
429
|
* 该节点为何可见(FR-25.6 / AC-G22)。只在**授权面被临时扩大**时出现:
|
|
430
|
-
* `'modal-elevated'` =
|
|
431
|
-
*
|
|
430
|
+
* `'modal-elevated'` = 它在一个由本次已授权操作打开的对话框里,原本不在白名单内;
|
|
431
|
+
* `'inline-frame'` = 它来自一个没有可路由地址的同源嵌套帧(`srcdoc` / `about:blank`),
|
|
432
|
+
* 外壳无法寻址到它,只能由父帧就地内联(分册 16 FR-16.1)。缺省不带该字段。
|
|
432
433
|
*/
|
|
433
|
-
provenance?: 'modal-elevated';
|
|
434
|
+
provenance?: 'modal-elevated' | 'inline-frame';
|
|
435
|
+
/**
|
|
436
|
+
* 该节点的子树在本段里**没有给全**(0.14.0 分册 22 FR-22.3)。
|
|
437
|
+
* 只在分段切分产生的祖先浅副本上出现:告诉模型这不是一个新冒出来的节点,
|
|
438
|
+
* 它的其余子节点在前一段或后一段里。缺省不带该字段。
|
|
439
|
+
*/
|
|
440
|
+
continued?: boolean;
|
|
434
441
|
children?: readonly PerceivedNode[];
|
|
435
442
|
}
|
|
436
443
|
/** 随感知一起下发的一张图像(FR-12.1) @experimental */
|
|
@@ -460,6 +467,24 @@ interface PerceptionCaptureOptions {
|
|
|
460
467
|
*/
|
|
461
468
|
minImageArea?: number;
|
|
462
469
|
}
|
|
470
|
+
/**
|
|
471
|
+
* 本帧范围内发现的一个嵌套帧(0.14.0 分册 16 FR-16.1)。
|
|
472
|
+
*
|
|
473
|
+
* 是**结构化数据**而不是说明文本:外壳要拿它去路由下一次感知,
|
|
474
|
+
* 从一句英文里正则抠地址是两边同时演进就会断的做法。
|
|
475
|
+
*
|
|
476
|
+
* 只上报解析得出 http(s) 绝对地址的帧——地址是外壳做帧匹配的唯一凭据,
|
|
477
|
+
* 无地址的同源帧由 reader 就地内联,不走这条路。
|
|
478
|
+
* @experimental
|
|
479
|
+
*/
|
|
480
|
+
interface NestedFrameRef {
|
|
481
|
+
/** 已按文档基准解析的绝对地址 */
|
|
482
|
+
url: string;
|
|
483
|
+
/** `aria-label` / `title` / `name` / `id` 的首个非空值;都没有则 `'unnamed'` */
|
|
484
|
+
hint: string;
|
|
485
|
+
/** 发现它的那一层帧标识;主文档发现的不带此字段 */
|
|
486
|
+
frame?: string;
|
|
487
|
+
}
|
|
463
488
|
/**
|
|
464
489
|
* reader 的完整产物。只实现文本的 reader 可以继续返回节点数组。
|
|
465
490
|
* @experimental
|
|
@@ -468,6 +493,8 @@ interface PerceptionResult {
|
|
|
468
493
|
nodes: readonly PerceivedNode[];
|
|
469
494
|
/** 被跳过的帧及原因;调用方据此告警(FR-24.2 / FR-24.3) */
|
|
470
495
|
frameNotes?: readonly FrameNote[];
|
|
496
|
+
/** 本次范围内发现、可供外壳继续下钻的嵌套帧(分册 16 FR-16.1) */
|
|
497
|
+
nestedFrames?: readonly NestedFrameRef[];
|
|
471
498
|
images?: readonly PerceivedImage[];
|
|
472
499
|
/** 超出 `maxImages` 而未下发的张数 */
|
|
473
500
|
imagesOmitted?: number;
|
|
@@ -495,6 +522,17 @@ interface PerceptionRecord {
|
|
|
495
522
|
frames?: readonly string[];
|
|
496
523
|
/** 读到的顶层节点数;用于「它读的比我预期的多」这类判断 */
|
|
497
524
|
nodeCount: number;
|
|
525
|
+
/**
|
|
526
|
+
* 整份快照的节点总数(含各层);**每次感知都在**(0.15.0 分册 14 · D-14-2)。
|
|
527
|
+
* 早先它只在分段时出现,于是「没分段」的那些次感知无法回答「模型到底看到了多少」。
|
|
528
|
+
* 与 `segmentPerception()` 的 `nodesTotal` 同源同值(FR-14.2)。
|
|
529
|
+
* `nodeCount` 的语义不动——改它会让所有既有断言与 console 展示静默变义。
|
|
530
|
+
*/
|
|
531
|
+
nodesTotal: number;
|
|
532
|
+
/** 切成了几段;只在分段发生时存在 */
|
|
533
|
+
segments?: number;
|
|
534
|
+
/** 本次直接回喂给模型的那一段承载了多少个节点;只在分段发生时存在 */
|
|
535
|
+
segmentNodeCount?: number;
|
|
498
536
|
/** 本次下发的图像张数,按取像级别分组(只在取像开启时存在) */
|
|
499
537
|
images?: {
|
|
500
538
|
src: number;
|
|
@@ -565,6 +603,35 @@ declare class PagePerceptionPolicy {
|
|
|
565
603
|
}>;
|
|
566
604
|
}
|
|
567
605
|
//#endregion
|
|
606
|
+
//#region src/perception/paging.d.ts
|
|
607
|
+
/**
|
|
608
|
+
* 分段读取的预算与开关(0.14.0 分册 22 FR-22.4)。
|
|
609
|
+
*
|
|
610
|
+
* 两道闸先触发哪个算哪个:`maxNodes` 兜常规页面(空壳多、每个节点很小),
|
|
611
|
+
* `maxChars` 兜「少数节点携带超长文本」的极端情况——只设 `maxNodes` 时,
|
|
612
|
+
* 一个塞满日志的 `<pre>` 就能让 1500 个节点撑到几百 KB。
|
|
613
|
+
* @experimental
|
|
614
|
+
*/
|
|
615
|
+
interface PerceptionPagingBudget {
|
|
616
|
+
/** 缺省 false:不开启时只有地板(FR-22.2),没有游标 */
|
|
617
|
+
enabled: boolean;
|
|
618
|
+
/** 一段最多几个节点(含各层子节点,不是顶层数) */
|
|
619
|
+
maxNodes: number;
|
|
620
|
+
/** 一段序列化后的字符上限 */
|
|
621
|
+
maxChars: number;
|
|
622
|
+
}
|
|
623
|
+
/**
|
|
624
|
+
* 预算缺省值(设计 §10)。**全仓只写这一份**,工具源与测试读同一份——
|
|
625
|
+
* 「断言常量等于它自己」那类假守护正是靠这条避免的。
|
|
626
|
+
*
|
|
627
|
+
* `maxChars` 必须显著小于 `toolResultMaxBytes`(256 000),否则 AC-22.7
|
|
628
|
+
* 「盲切永不触发」守不住。
|
|
629
|
+
*/
|
|
630
|
+
declare const PERCEPTION_PAGING_DEFAULTS: {
|
|
631
|
+
readonly maxNodes: number;
|
|
632
|
+
readonly maxChars: number;
|
|
633
|
+
};
|
|
634
|
+
//#endregion
|
|
568
635
|
//#region src/perception/toolSource.d.ts
|
|
569
636
|
declare const PERCEIVE_PAGE_TOOL = "perceive_page";
|
|
570
637
|
interface PagePerceptionToolSourceOptions {
|
|
@@ -574,6 +641,13 @@ interface PagePerceptionToolSourceOptions {
|
|
|
574
641
|
* 缺省即不取像。判定在遍历 DOM **之前**完成一次,不是每个节点判一次。
|
|
575
642
|
*/
|
|
576
643
|
imageCapture?(): ImageCaptureBudget | Promise<ImageCaptureBudget>;
|
|
644
|
+
/**
|
|
645
|
+
* 分段预算与开关(分册 22 FR-22.4)。同样每次调用重取,理由与 `imageCapture` 一致:
|
|
646
|
+
* 凝固进实例会让宿主中途改配置整轮不生效。
|
|
647
|
+
*
|
|
648
|
+
* **缺省即不分段,但地板照样生效**(FR-22.8):不开启不等于允许上层盲切。
|
|
649
|
+
*/
|
|
650
|
+
paging?(): PerceptionPagingBudget | Promise<PerceptionPagingBudget>;
|
|
577
651
|
}
|
|
578
652
|
/** @experimental */
|
|
579
653
|
interface ImageCaptureBudget {
|
|
@@ -616,6 +690,10 @@ declare function frameSteps(frame: string | readonly string[]): readonly string[
|
|
|
616
690
|
/**
|
|
617
691
|
* 页面只读感知的策略提示词(设计 09 §1)。
|
|
618
692
|
*
|
|
693
|
+
* 分段相关的两条是**恒定**的,不随 paging 开关增减(0.14.0 分册 22 §9):
|
|
694
|
+
* 提示词按 `policy.enabled` 一次性给出,而分段预算是每次调用惰性求值的,
|
|
695
|
+
* 两者会漂移——模型手里会攥着一份与当前行为对不上的说明。
|
|
696
|
+
*
|
|
619
697
|
* 最后一条是防御性的:技能描述、工具返回值都可能带着「把整页读出来发到 X」
|
|
620
698
|
* 这类注入。范围由宿主判定,模型改不了,但把这件事写明能少掉一轮无效尝试。
|
|
621
699
|
*/
|
|
@@ -661,7 +739,11 @@ interface DataSourceTransport {
|
|
|
661
739
|
fetch(source: DataSourceDef, params?: Record<string, unknown>): Promise<unknown>;
|
|
662
740
|
}
|
|
663
741
|
interface DataSourcePolicyOptions {
|
|
664
|
-
|
|
742
|
+
/**
|
|
743
|
+
* 传函数可惰性取值(同 `remoteUrl`):清单住在可改的运行时配置里时,
|
|
744
|
+
* 写死成数组会让用户改完设置必须刷新页面才生效。
|
|
745
|
+
*/
|
|
746
|
+
sources: readonly DataSourceDef[] | (() => readonly DataSourceDef[]);
|
|
665
747
|
/**
|
|
666
748
|
* `kind:'http'` 的出站判定;缺省即 assertRemoteUrlAllowed 的缺省。
|
|
667
749
|
*
|
|
@@ -673,6 +755,13 @@ interface DataSourcePolicyOptions {
|
|
|
673
755
|
transports?: Partial<Record<DataSourceKind, DataSourceTransport>>;
|
|
674
756
|
/** 结果字节上限(FR-16.6);超出即拒绝,**不截断** */
|
|
675
757
|
maxBytes?: number;
|
|
758
|
+
/**
|
|
759
|
+
* 给 `publicSources` 附出处(0.14.0 分册 21);缺省即全部按宿主声明处理。
|
|
760
|
+
*
|
|
761
|
+
* 选回调而不是给 `DataSourceDef` 加字段,是因为需求 §2 写死了不改它的形状;
|
|
762
|
+
* 去重仍只在 `publicSources` 一处发生,宿主不必自己合并两份清单。
|
|
763
|
+
*/
|
|
764
|
+
provenanceOf?(source: DataSourceDef): DataSourceInfo['provenance'];
|
|
676
765
|
audit?: DataSourceAuditSink;
|
|
677
766
|
now?(): string;
|
|
678
767
|
}
|
|
@@ -688,7 +777,19 @@ declare class DataSourcePolicy {
|
|
|
688
777
|
constructor(options: DataSourcePolicyOptions);
|
|
689
778
|
/** 一个源都没声明就没有这个能力(同 perception 的 include 为空) */
|
|
690
779
|
get enabled(): boolean;
|
|
780
|
+
/**
|
|
781
|
+
* 当前声明的源。**id 撞名时保留先声明的那条**(0.14.0 分册 19):
|
|
782
|
+
* 宿主写死的源排在用户配置之前,于是一条用户配置改不了 `current-page` 这类源的目标。
|
|
783
|
+
*/
|
|
691
784
|
get sources(): readonly DataSourceDef[];
|
|
785
|
+
/**
|
|
786
|
+
* 送往引擎与界面的清单(0.14.0 分册 19)。
|
|
787
|
+
*
|
|
788
|
+
* 宿主不得改传 `sources`:`DataSourceDef` 结构上是 `DataSourceInfo` 的超集,
|
|
789
|
+
* 直接赋值类型检查会过,`target` 于是静默地进了模型上下文。
|
|
790
|
+
* @experimental
|
|
791
|
+
*/
|
|
792
|
+
get publicSources(): readonly DataSourceInfo[];
|
|
692
793
|
get records(): readonly DataSourceRecord[];
|
|
693
794
|
fetchData(sourceId: string, params?: Record<string, unknown>): Promise<unknown>;
|
|
694
795
|
}
|
|
@@ -715,6 +816,170 @@ interface HttpDataSourceOptions {
|
|
|
715
816
|
*/
|
|
716
817
|
declare function createHttpDataSourceTransport(options?: HttpDataSourceOptions): DataSourceTransport;
|
|
717
818
|
//#endregion
|
|
819
|
+
//#region src/dataSource/candidates.d.ts
|
|
820
|
+
/** 候选的出处;**随对象记录**,不靠调用方记忆(FR-21.1) */
|
|
821
|
+
type DataSourceProvenance = 'page-declared' | 'tool-projection';
|
|
822
|
+
/**
|
|
823
|
+
* 一条尚不可取数的候选源(FR-21.1)。
|
|
824
|
+
*
|
|
825
|
+
* 它与 `DataSourceDef` 字段同名,但**不是**它的别名:候选层不参与取数,
|
|
826
|
+
* 两者共用一个类型会让「候选可以直接塞进 sources」在类型上成立。
|
|
827
|
+
* @experimental
|
|
828
|
+
*/
|
|
829
|
+
interface DataSourceCandidate {
|
|
830
|
+
id: string;
|
|
831
|
+
kind: DataSourceKind;
|
|
832
|
+
description: string;
|
|
833
|
+
target: string;
|
|
834
|
+
provenance: DataSourceProvenance;
|
|
835
|
+
}
|
|
836
|
+
/**
|
|
837
|
+
* 「记住这个站点的这个源」的存储;粒度键由宿主给(D-21-3)。
|
|
838
|
+
*
|
|
839
|
+
* `scope` 在本包里是不透明串:`@webskill/agent` 不认识 origin 这个概念,
|
|
840
|
+
* 扩展传 `binding.origin()`,别的宿主可以传别的。
|
|
841
|
+
* @experimental
|
|
842
|
+
*/
|
|
843
|
+
interface DataSourceCandidateStore {
|
|
844
|
+
recall(scope: string, id: string): boolean | Promise<boolean>;
|
|
845
|
+
remember(scope: string, id: string): void | Promise<void>;
|
|
846
|
+
forget(scope: string, id: string): void | Promise<void>;
|
|
847
|
+
}
|
|
848
|
+
/** 候选生命周期的留痕(FR-21.7);取数那一类仍走 `DataSourceRecord` @experimental */
|
|
849
|
+
interface DataSourceCandidateRecord {
|
|
850
|
+
/** ISO 8601 */
|
|
851
|
+
at: string;
|
|
852
|
+
event: 'offered' | 'approved' | 'forgotten';
|
|
853
|
+
/** 宿主定义的粒度键;扩展侧即 origin */
|
|
854
|
+
scope: string;
|
|
855
|
+
id?: string;
|
|
856
|
+
/** 批准记录必须带(FR-21.7):只记 id 的话,事后无从知道当时点头的是哪个地址 */
|
|
857
|
+
target?: string;
|
|
858
|
+
kind?: DataSourceKind;
|
|
859
|
+
provenance?: DataSourceProvenance;
|
|
860
|
+
/** 批准方式:`true` 为「已记住」,`false` 为仅当次 */
|
|
861
|
+
remembered?: boolean;
|
|
862
|
+
/** `offered` 专有:本批被接受 / 被丢弃的条数 */
|
|
863
|
+
accepted?: number;
|
|
864
|
+
rejected?: number;
|
|
865
|
+
}
|
|
866
|
+
interface DataSourceCandidateAuditSink {
|
|
867
|
+
record(event: DataSourceCandidateRecord): void | Promise<void>;
|
|
868
|
+
}
|
|
869
|
+
interface DataSourceCandidatePolicyOptions {
|
|
870
|
+
store?: DataSourceCandidateStore;
|
|
871
|
+
audit?: DataSourceCandidateAuditSink;
|
|
872
|
+
/** 一个 scope 最多接受多少条提议;缺省 32 */
|
|
873
|
+
maxCandidates?: number;
|
|
874
|
+
now?(): string;
|
|
875
|
+
}
|
|
876
|
+
/**
|
|
877
|
+
* 候选源策略(分册 21)。
|
|
878
|
+
*
|
|
879
|
+
* **本类不持有任何取数通道,也不引用任何出站 API**(AC-21.13):
|
|
880
|
+
* 页面提议里携带的 `target` 在用户点头之前不可能被请求,
|
|
881
|
+
* 这是结构结论,不是一句 `if (!approved) return`。
|
|
882
|
+
* @experimental
|
|
883
|
+
*/
|
|
884
|
+
declare class DataSourceCandidatePolicy {
|
|
885
|
+
#private;
|
|
886
|
+
constructor(options?: DataSourceCandidatePolicyOptions);
|
|
887
|
+
get records(): readonly DataSourceCandidateRecord[];
|
|
888
|
+
/**
|
|
889
|
+
* 页面提议入表。**同步返回,且不做任何网络动作**。
|
|
890
|
+
*
|
|
891
|
+
* 不触发确认卡:页面每次刷新都会重发一遍提议,
|
|
892
|
+
* 接到弹窗上等于把打断用户的权力交给页面(设计 §4.1)。
|
|
893
|
+
*/
|
|
894
|
+
offer(scope: string, candidates: readonly unknown[], provenance?: DataSourceProvenance): {
|
|
895
|
+
accepted: number;
|
|
896
|
+
rejected: number;
|
|
897
|
+
};
|
|
898
|
+
/** 尚待确认的:已批准的那些不再重复出现在这里 */
|
|
899
|
+
pending(scope: string | undefined): readonly DataSourceCandidate[];
|
|
900
|
+
approve(scope: string, id: string, options?: {
|
|
901
|
+
remember?: boolean;
|
|
902
|
+
}): Promise<void>;
|
|
903
|
+
/** 撤销:立刻回到候选状态,不需要重载页面(FR-21.2) */
|
|
904
|
+
forget(scope: string, id: string): Promise<void>;
|
|
905
|
+
/**
|
|
906
|
+
* 已获批的,投影成既有 `DataSourceDef`(**出处不在其中**:
|
|
907
|
+
* `DataSourceDef` 的形状不改,出处经 `provenanceOf` 单独取)。
|
|
908
|
+
*
|
|
909
|
+
* `undefined` 返回空数组:没绑定 tab 时不是「全部可用」,是「一条都没有」。
|
|
910
|
+
*/
|
|
911
|
+
approved(scope: string | undefined): readonly DataSourceDef[];
|
|
912
|
+
/** 供 `DataSourcePolicy.provenanceOf` 直接接线:不是候选出身的返回 undefined */
|
|
913
|
+
provenanceOf(scope: string | undefined, id: string): DataSourceProvenance | undefined;
|
|
914
|
+
/**
|
|
915
|
+
* 切绑定 tab 时调用。清「待批的」与「当次批准的」,
|
|
916
|
+
* **不动已记住的**——那些通过 `approved(新 scope)` 自然只对新 scope 生效。
|
|
917
|
+
*/
|
|
918
|
+
clearPending(): void;
|
|
919
|
+
/**
|
|
920
|
+
* 从 store 回填已记住的批准。
|
|
921
|
+
*
|
|
922
|
+
* `recall` 是异步端口而 `approved()` 是同步 getter(`DataSourcePolicy.sources` 要求同步),
|
|
923
|
+
* 所以命中与否必须在提议入表时先问一遍,而不是取数时现问。
|
|
924
|
+
*/
|
|
925
|
+
restore(scope: string): Promise<void>;
|
|
926
|
+
}
|
|
927
|
+
//#endregion
|
|
928
|
+
//#region src/pageAction/downloadSignal.d.ts
|
|
929
|
+
/**
|
|
930
|
+
* 操作触发的下载:完成信号(0.15.0 分册 15)。
|
|
931
|
+
*
|
|
932
|
+
* 这一层不含任何浏览器概念。SDK 只定义「窗口什么时候开、什么时候关、结果长什么样」,
|
|
933
|
+
* 「怎么知道下载起来了」全在端口之后——与分册 20 的分工一致。
|
|
934
|
+
*/
|
|
935
|
+
/**
|
|
936
|
+
* 一次页面操作的下载观察窗口。**只在 `act()` 的一次调用里存在**:
|
|
937
|
+
* 返回之后这个对象就不可达,因此窗口之外没有任何代码路径能问到下载(FR-15.2)。
|
|
938
|
+
* @experimental
|
|
939
|
+
*/
|
|
940
|
+
interface ActionDownloadWindow {
|
|
941
|
+
/**
|
|
942
|
+
* 结算并**关闭**窗口,返回窗口内完成的下载次数(没有即 0)。
|
|
943
|
+
*
|
|
944
|
+
* 到预算上限就返回当时已经数到的次数,不丢弃、不抛错——
|
|
945
|
+
* 等待超时不是失败,操作本身的结果照常返回(FR-15.3)。
|
|
946
|
+
*/
|
|
947
|
+
settle(budget: {
|
|
948
|
+
timeoutMs: number;
|
|
949
|
+
}): Promise<number>;
|
|
950
|
+
}
|
|
951
|
+
/**
|
|
952
|
+
* 下载观察窗口的宿主实现(FR-15.2)。**不注入即整条通路不存在**:
|
|
953
|
+
* 不开窗、不留痕,页面操作的结果与本版前逐字一致。
|
|
954
|
+
*
|
|
955
|
+
* 之所以是 `open` / `settle` 一对而不是一个 `waitForDownloads(ms)`:
|
|
956
|
+
* 后者只说了「等多久」,没说「从什么时候开始算」,宿主可以实现成
|
|
957
|
+
* 「返回最近 N 秒内的下载」——那就把用户在别处的下载也算了进来(D-15-4 否掉的 (a))。
|
|
958
|
+
* 窗口的两端由 SDK 说了算,宿主实现里没有自己决定起点的余地。
|
|
959
|
+
* @experimental
|
|
960
|
+
*/
|
|
961
|
+
interface ActionDownloadWatcher {
|
|
962
|
+
/**
|
|
963
|
+
* 在页面操作**执行前**打开窗口。
|
|
964
|
+
* 下载可能在点击返回之前就已经落盘,先执行再开窗会漏掉最快的那一类。
|
|
965
|
+
*/
|
|
966
|
+
open(context: {
|
|
967
|
+
runId?: string;
|
|
968
|
+
}): ActionDownloadWindow | Promise<ActionDownloadWindow>;
|
|
969
|
+
}
|
|
970
|
+
/** 宿主不注入等待上限时的缺省;够覆盖「点击 → 浏览器起下载」的常见延迟 */
|
|
971
|
+
declare const DOWNLOAD_WAIT_DEFAULT_MS = 1500;
|
|
972
|
+
/** 地板:注入 0 会把本能力静默变成永不触发,那是更坏的失败形态 */
|
|
973
|
+
declare const DOWNLOAD_WAIT_MIN_MS = 250;
|
|
974
|
+
/** 天花板:宿主写错一个 0 不该让一轮对话挂十分钟 */
|
|
975
|
+
declare const DOWNLOAD_WAIT_MAX_MS = 10000;
|
|
976
|
+
/**
|
|
977
|
+
* 把宿主注入的等待上限夹进地板与天花板(FR-15.3)。
|
|
978
|
+
* 不注入或注入了非有限数即取缺省——不信任宿主传进来的数是这里存在的全部理由。
|
|
979
|
+
* @experimental
|
|
980
|
+
*/
|
|
981
|
+
declare function clampDownloadWaitMs(ms: number | undefined): number;
|
|
982
|
+
//#endregion
|
|
718
983
|
//#region src/pageAction/types.d.ts
|
|
719
984
|
/**
|
|
720
985
|
* 页面操作的策略层类型(需求 23)。
|
|
@@ -815,6 +1080,14 @@ interface PageActionOutcome {
|
|
|
815
1080
|
navigated?: boolean;
|
|
816
1081
|
/** 变更后的地址;仅 `navigated` 时带 */
|
|
817
1082
|
documentUrl?: string;
|
|
1083
|
+
/**
|
|
1084
|
+
* 本次操作引发的下载**完成**次数(0.15.0 分册 15 · FR-15.1)。
|
|
1085
|
+
* 没有下载时**不带**该字段,与 `navigated` 同口径。
|
|
1086
|
+
*
|
|
1087
|
+
* 只有次数:文件名、大小、类型一律不在这里(D-15-3)——带上就等于开了一条
|
|
1088
|
+
* 绕过 `list_downloaded_files` 确认卡的披露路径。要读内容仍得逐次点头。
|
|
1089
|
+
*/
|
|
1090
|
+
downloadCount?: number;
|
|
818
1091
|
/** 失败原因(英文) */
|
|
819
1092
|
reason?: string;
|
|
820
1093
|
}
|
|
@@ -851,8 +1124,11 @@ interface PageActionRecord {
|
|
|
851
1124
|
name?: string;
|
|
852
1125
|
/** 目标所在的帧;主文档目标不带该字段(FR-24.6) */
|
|
853
1126
|
frame?: string;
|
|
854
|
-
/**
|
|
855
|
-
|
|
1127
|
+
/**
|
|
1128
|
+
* 是否经用户确认;宿主预授权的操作记 `'preauthorized'`,
|
|
1129
|
+
* 命中用户此前「不再询问」的记 `'remembered'`(需求 11 / FR-11.5)。
|
|
1130
|
+
*/
|
|
1131
|
+
approved: boolean | 'preauthorized' | 'remembered';
|
|
856
1132
|
ok: boolean;
|
|
857
1133
|
/** 目标位于本次会话中被提升的模态里(授权面临时扩大,FR-25.6 / AC-G22) */
|
|
858
1134
|
elevated?: boolean;
|
|
@@ -870,6 +1146,24 @@ interface PageActionRecord {
|
|
|
870
1146
|
interface PageActionUi {
|
|
871
1147
|
request(input: InteractionRequest): Promise<InteractionResponse>;
|
|
872
1148
|
}
|
|
1149
|
+
/**
|
|
1150
|
+
* 「不再询问」的记忆端口(需求 11 / FR-11.1)。**存储与粒度归宿主**:
|
|
1151
|
+
* 粒度键通常是 origin,而本包不认识 origin。
|
|
1152
|
+
*
|
|
1153
|
+
* 不注入即完全无记忆:确认卡不出复选框,行为与 0.13.0 逐字一致。
|
|
1154
|
+
* @experimental
|
|
1155
|
+
*/
|
|
1156
|
+
interface PageActionConsent {
|
|
1157
|
+
/** 该目标 + 动作是否已被记住;`true` 即本次不弹卡 */
|
|
1158
|
+
recall(target: PageActionTarget, action: PageActionKind): boolean | Promise<boolean>;
|
|
1159
|
+
/** 用户勾了「不再询问」并允许后写入 */
|
|
1160
|
+
remember(target: PageActionTarget, action: PageActionKind): void | Promise<void>;
|
|
1161
|
+
/**
|
|
1162
|
+
* 复选框旁的文案。宿主不实现即用通用兜底串——
|
|
1163
|
+
* SDK 无权替宿主宣称记住的是「此站点」,写死会在宿主换粒度时变成谎报授权范围。
|
|
1164
|
+
*/
|
|
1165
|
+
describeScope?(target: PageActionTarget, action: PageActionKind): string | undefined;
|
|
1166
|
+
}
|
|
873
1167
|
interface PageActionPolicyOptions {
|
|
874
1168
|
/** 宿主声明的可操作范围;`include` 为空即整个能力不可用 */
|
|
875
1169
|
scope: PageActionScopeInput;
|
|
@@ -884,6 +1178,23 @@ interface PageActionPolicyOptions {
|
|
|
884
1178
|
* 只有宿主显式配置才生效,SDK 不提供任何缺省放行项。
|
|
885
1179
|
*/
|
|
886
1180
|
preauthorized?: readonly PageActionKind[];
|
|
1181
|
+
/**
|
|
1182
|
+
* 「不再询问」的记忆端口(需求 11)。与 `preauthorized` 并列且互不引用:
|
|
1183
|
+
* 前者是宿主装配时写死的静态配置,后者是用户运行期一次一次攒出来的。
|
|
1184
|
+
*/
|
|
1185
|
+
consent?: PageActionConsent;
|
|
1186
|
+
/**
|
|
1187
|
+
* 操作触发的下载观察窗口(0.15.0 分册 15)。**不注入即整条通路不存在**:
|
|
1188
|
+
* 不开窗、不留痕,页面操作的结果与本版前逐字一致(AC-15.5 / AC-15.12)。
|
|
1189
|
+
*/
|
|
1190
|
+
downloadWatcher?: ActionDownloadWatcher;
|
|
1191
|
+
/**
|
|
1192
|
+
* 下载信号的能力开关(`sandbox.downloadedFiles`,D-15-5)。缺省即**关闭**:
|
|
1193
|
+
* `downloadCount` 永不出现。关着时窗口照开,结果只进留痕(D-15-6 / FR-15.7)。
|
|
1194
|
+
*/
|
|
1195
|
+
downloadSignalEnabled?(): boolean;
|
|
1196
|
+
/** 宿主注入的等待上限(毫秒);SDK 夹在地板与天花板之间(FR-15.3)。模型无法影响它 */
|
|
1197
|
+
downloadWaitMs?(): number | undefined;
|
|
887
1198
|
now?(): string;
|
|
888
1199
|
}
|
|
889
1200
|
/**
|
|
@@ -915,7 +1226,9 @@ declare class PageActionPolicy {
|
|
|
915
1226
|
* 只留句柄等于留了一个换次运行就失效的引用;角色与可访问名才是可重放的那部分。
|
|
916
1227
|
*/
|
|
917
1228
|
rememberedTarget(ref: string): PageActionTarget | undefined;
|
|
918
|
-
act(request: PageActionRequest
|
|
1229
|
+
act(request: PageActionRequest, context?: {
|
|
1230
|
+
runId?: string;
|
|
1231
|
+
}): Promise<PageActionOutcome>;
|
|
919
1232
|
}
|
|
920
1233
|
//#endregion
|
|
921
1234
|
//#region src/pageAction/toolSource.d.ts
|
|
@@ -941,4 +1254,150 @@ declare function createPageActionToolSource(options: PageActionToolSourceOptions
|
|
|
941
1254
|
*/
|
|
942
1255
|
declare const PAGE_ACTION_SYSTEM_PROMPT: string;
|
|
943
1256
|
//#endregion
|
|
944
|
-
|
|
1257
|
+
//#region src/downloads/types.d.ts
|
|
1258
|
+
/**
|
|
1259
|
+
* 一条已下载文件的目录项。
|
|
1260
|
+
* @experimental
|
|
1261
|
+
*/
|
|
1262
|
+
interface DownloadedFileEntry {
|
|
1263
|
+
/**
|
|
1264
|
+
* 不透明标识。**不得是路径,也不得可反推出路径**(FR-20.2):
|
|
1265
|
+
* 模型手里只该有一个宿主认得、别人认不出的取件号。
|
|
1266
|
+
*/
|
|
1267
|
+
id: string;
|
|
1268
|
+
name: string;
|
|
1269
|
+
contentType: string;
|
|
1270
|
+
size: number;
|
|
1271
|
+
/** ISO 8601,下载完成时刻 */
|
|
1272
|
+
at: string;
|
|
1273
|
+
}
|
|
1274
|
+
/** `list_downloaded_files` 下发给模型的条目:目录项 + 可读性判定 @experimental */
|
|
1275
|
+
interface DownloadedFileListing extends DownloadedFileEntry {
|
|
1276
|
+
readable: boolean;
|
|
1277
|
+
/** 不可读的原因(英文);可读时不存在 */
|
|
1278
|
+
reason?: string;
|
|
1279
|
+
}
|
|
1280
|
+
/**
|
|
1281
|
+
* 本机下载文件的取件实现(FR-20.1)。**不注入即整条通路不存在**——
|
|
1282
|
+
* 工具不注册,模型看不到它。
|
|
1283
|
+
* @experimental
|
|
1284
|
+
*/
|
|
1285
|
+
interface DownloadedFileReader {
|
|
1286
|
+
list(): Promise<readonly DownloadedFileEntry[]>;
|
|
1287
|
+
/**
|
|
1288
|
+
* 按不透明标识取字节。**`contentType` 必须由本方法重新给出**,
|
|
1289
|
+
* 不复用 `list()` 那次的值:两次调用之间文件可能被替换,
|
|
1290
|
+
* 信 list 的类型等于让「列出时是 csv、读取时是别的东西」这条路存在。
|
|
1291
|
+
*/
|
|
1292
|
+
read(id: string): Promise<{
|
|
1293
|
+
contentType: string;
|
|
1294
|
+
bytes: Uint8Array;
|
|
1295
|
+
}>;
|
|
1296
|
+
}
|
|
1297
|
+
/** 授权动作。列出与读取各自确认,措辞不同(D-20-3) @experimental */
|
|
1298
|
+
type DownloadedFileAction = 'list' | 'read';
|
|
1299
|
+
/**
|
|
1300
|
+
* 「不再询问」的记忆端口(D-20-2)。**存储与粒度归宿主**:
|
|
1301
|
+
* SDK 不认识「下载目录」这个概念,`remember` 记的是什么由装配方决定。
|
|
1302
|
+
*
|
|
1303
|
+
* 不注入即完全无记忆:确认卡不出复选框。
|
|
1304
|
+
* @experimental
|
|
1305
|
+
*/
|
|
1306
|
+
interface DownloadedFileConsent {
|
|
1307
|
+
recall(action: DownloadedFileAction, entry?: DownloadedFileEntry): boolean | Promise<boolean>;
|
|
1308
|
+
remember(action: DownloadedFileAction, entry?: DownloadedFileEntry): void | Promise<void>;
|
|
1309
|
+
/**
|
|
1310
|
+
* 复选框旁的文案。宿主不实现即用通用兜底串——
|
|
1311
|
+
* SDK 无权替宿主宣称记住的是「整个下载目录」,写死会变成谎报授权范围。
|
|
1312
|
+
*/
|
|
1313
|
+
describeScope?(action: DownloadedFileAction, entry?: DownloadedFileEntry): string | undefined;
|
|
1314
|
+
}
|
|
1315
|
+
/** 一次列出或读取的留痕(FR-20.5) @experimental */
|
|
1316
|
+
interface DownloadedFileRecord {
|
|
1317
|
+
at: string;
|
|
1318
|
+
action: DownloadedFileAction;
|
|
1319
|
+
/** `list` 时不存在:审计要回答「模型什么时候看过目录」,抄下整份清单是把一次披露变成两次 */
|
|
1320
|
+
name?: string;
|
|
1321
|
+
size?: number;
|
|
1322
|
+
contentType?: string;
|
|
1323
|
+
approved: boolean | 'remembered';
|
|
1324
|
+
ok: boolean;
|
|
1325
|
+
reason?: string;
|
|
1326
|
+
}
|
|
1327
|
+
/** 读取成功后交给工具层的形态;`kind` 决定它以哪种分片进上下文 @experimental */
|
|
1328
|
+
interface DownloadedFileReadResult {
|
|
1329
|
+
entry: DownloadedFileEntry;
|
|
1330
|
+
/** `read()` 重新给出的类型,不是 `entry.contentType` */
|
|
1331
|
+
contentType: string;
|
|
1332
|
+
kind: ChatAttachmentKind;
|
|
1333
|
+
/** `text` / `document-text`:已按上下文形态格式化并截断 */
|
|
1334
|
+
text?: string;
|
|
1335
|
+
/** `file` / `image`:原始字节 */
|
|
1336
|
+
bytes?: Uint8Array;
|
|
1337
|
+
}
|
|
1338
|
+
//#endregion
|
|
1339
|
+
//#region src/downloads/policy.d.ts
|
|
1340
|
+
/**
|
|
1341
|
+
* 授权卡的最小出口。与 `PageActionUi` 结构相同,宿主传同一个对象即可——
|
|
1342
|
+
* 不复用那个名字是因为「下载文件策略 import 一个叫 PageAction… 的类型」会被读成有依赖关系。
|
|
1343
|
+
* @experimental
|
|
1344
|
+
*/
|
|
1345
|
+
interface ConsentUi {
|
|
1346
|
+
request(input: InteractionRequest): Promise<InteractionResponse>;
|
|
1347
|
+
}
|
|
1348
|
+
interface DownloadedFilePolicyOptions {
|
|
1349
|
+
/** 取件实现。**不注入即整条通路不存在**:`enabled` 为 false,工具不注册(AC-20.1) */
|
|
1350
|
+
reader?: DownloadedFileReader;
|
|
1351
|
+
/**
|
|
1352
|
+
* 授权卡出口。**必填**:引擎的 `#confirm` 在没接 UI 桥时自动放行,
|
|
1353
|
+
* 那条 fail-open 的路对「读用户本机磁盘」不成立。接不上就构造不出策略。
|
|
1354
|
+
*/
|
|
1355
|
+
ui: ConsentUi;
|
|
1356
|
+
/** 能力开关(`sandbox.downloadedFiles`)。每次读取,设置改完立刻生效;缺省即**关闭** */
|
|
1357
|
+
capabilityEnabled?(): boolean;
|
|
1358
|
+
consent?: DownloadedFileConsent;
|
|
1359
|
+
audit?: PageAuditSink;
|
|
1360
|
+
/** 审计事件的 target(缺省 `downloads`) */
|
|
1361
|
+
auditTarget?: string;
|
|
1362
|
+
/** 选中模型能否读图(D-20-7)。缺省即**不能**:不知道就不给看 */
|
|
1363
|
+
imageCapable?(): boolean | Promise<boolean>;
|
|
1364
|
+
/** docx → 文本。必须与手动上传用的是**同一个**抽取器(AC-20.6) */
|
|
1365
|
+
docxExtractor?: DocxTextExtractor;
|
|
1366
|
+
/** xlsx → 文本。同上 */
|
|
1367
|
+
xlsxExtractor?: XlsxTextExtractor;
|
|
1368
|
+
now?(): string;
|
|
1369
|
+
}
|
|
1370
|
+
/**
|
|
1371
|
+
* 读取本机下载文件的策略(0.14.0 分册 20)。
|
|
1372
|
+
*
|
|
1373
|
+
* 三道闸门依次是:宿主有没有接端口并打开开关、用户认不认、文件类型读不读得了。
|
|
1374
|
+
* 模型能表达的只有「列目录」与「读这个取件号」——它没有任何指定路径的入口(AC-20.9)。
|
|
1375
|
+
* @experimental
|
|
1376
|
+
*/
|
|
1377
|
+
declare class DownloadedFilePolicy {
|
|
1378
|
+
#private;
|
|
1379
|
+
constructor(options: DownloadedFilePolicyOptions);
|
|
1380
|
+
/** 端口未注入或开关关闭即整个能力不存在(AC-20.1 / AC-20.2) */
|
|
1381
|
+
get enabled(): boolean;
|
|
1382
|
+
/** 最近的记录(只读展示用),新的在前 */
|
|
1383
|
+
get records(): readonly DownloadedFileRecord[];
|
|
1384
|
+
list(): Promise<readonly DownloadedFileListing[]>;
|
|
1385
|
+
read(id: string): Promise<DownloadedFileReadResult>;
|
|
1386
|
+
}
|
|
1387
|
+
//#endregion
|
|
1388
|
+
//#region src/downloads/toolSource.d.ts
|
|
1389
|
+
declare const LIST_DOWNLOADED_FILES_TOOL = "list_downloaded_files";
|
|
1390
|
+
declare const READ_DOWNLOADED_FILE_TOOL = "read_downloaded_file";
|
|
1391
|
+
interface DownloadedFileToolSourceOptions {
|
|
1392
|
+
policy: DownloadedFilePolicy;
|
|
1393
|
+
}
|
|
1394
|
+
/**
|
|
1395
|
+
* 把下载文件读取接到既有工具协议上。
|
|
1396
|
+
*
|
|
1397
|
+
* 端口未注入或能力开关关闭时 `listToolSpecs()` 返回空数组——
|
|
1398
|
+
* 模型连这两个工具的存在都看不到,而不是看得到再被拒(AC-20.1 / AC-20.2)。
|
|
1399
|
+
* @experimental
|
|
1400
|
+
*/
|
|
1401
|
+
declare function createDownloadedFileToolSource(options: DownloadedFileToolSourceOptions): ExternalToolSource;
|
|
1402
|
+
//#endregion
|
|
1403
|
+
export { PERCEPTION_PAGING_DEFAULTS as $, createHttpDataSourceTransport as $t, DownloadedFileAction as A, SKILL_GENERATION_SYSTEM_PROMPT as At, FrameNote as B, SubAgentRunInput as Bt, DataSourceTransport as C, PerceptionCaptureOptions as Ct, DelegationRequest as D, PerceptionScope as Dt, DelegationOrchestratorOptions as E, PerceptionResult as Et, DownloadedFilePolicyOptions as F, SkillGenerationToolSourceOptions as Ft, ImageCaptureBudget as G, TodoList as Gt, GENERATE_SKILL_TOOL as H, TODO_SYSTEM_PROMPT as Ht, DownloadedFileReadResult as I, SkillGenerator as It, NestedFrameRef as J, TodoStore as Jt, LIST_DOWNLOADED_FILES_TOOL as K, TodoListener as Kt, DownloadedFileReader as L, SkillGeneratorOptions as Lt, DownloadedFileEntry as M, SkillGenerationMessages as Mt, DownloadedFileListing as N, SkillGenerationOutcome as Nt, DelegationResult as O, PerceptionScopeInput as Ot, DownloadedFilePolicy as P, SkillGenerationPolicy as Pt, PERCEIVE_PAGE_TOOL as Q, createDownloadedFileToolSource as Qt, DownloadedFileRecord as R, SkillTraceEvidence as Rt, DataSourceRecord as S, PerceptionAuditSink as St, DelegationOrchestrator as T, PerceptionRecord as Tt, GeneratedSkillDraft as U, TodoEvent as Ut, FrameScope as V, SubAgentRunner as Vt, HttpDataSourceOptions as W, TodoItem as Wt, PAGE_ACTION_SYSTEM_PROMPT as X, clampDownloadWaitMs as Xt, PAGE_ACTION_KINDS as Y, TodoToolSourceOptions as Yt, PAGE_ACTION_TOOL as Z, createDelegationToolSource as Zt, DataSourceDef as _, PagePerceptionReader as _t, DELEGATE_TASK_TOOL as a, frameSteps as an, PageActionPolicy as at, DataSourcePolicyOptions as b, PerceivedImage as bt, DOWNLOAD_WAIT_MAX_MS as c, withDelegationOrigin as cn, PageActionRequest as ct, DataSourceCandidate as d, PageActionTarget as dt, createPageActionToolSource as en, PERCEPTION_SYSTEM_PROMPT as et, DataSourceCandidateAuditSink as f, PageActionToolSourceOptions as ft, DataSourceCandidateStore as g, PagePerceptionPolicyOptions as gt, DataSourceCandidateRecord as h, PagePerceptionPolicy as ht, ConsentUi as i, frameLabel as in, PageActionOutcome as it, DownloadedFileConsent as j, SkillCandidateSink as jt, DelegationToolSourceOptions as k, READ_DOWNLOADED_FILE_TOOL as kt, DOWNLOAD_WAIT_MIN_MS as l, PageActionScope as lt, DataSourceCandidatePolicyOptions as m, PageAuditSink as mt, ActionDownloadWindow as n, createSkillGenerationToolSource as nn, PageActionExecutor as nt, DELEGATION_SYSTEM_PROMPT as o, toActionFrameScopes as on, PageActionPolicyOptions as ot, DataSourceCandidatePolicy as p, PageActionUi as pt, MANAGE_TODO_TOOL as q, TodoStatus as qt, ActionFrameScope as r, createTodoToolSource as rn, PageActionKind as rt, DOWNLOAD_WAIT_DEFAULT_MS as s, toFrameScopes as sn, PageActionRecord as st, ActionDownloadWatcher as t, createPagePerceptionToolSource as tn, PageActionConsent as tt, DataSourceAuditSink as u, PageActionScopeInput as ut, DataSourceKind as v, PagePerceptionToolSourceOptions as vt, DelegationBudget as w, PerceptionPagingBudget as wt, DataSourceProvenance as x, PerceivedNode as xt, DataSourcePolicy as y, ParentBudget as yt, DownloadedFileToolSourceOptions as z, SkillTraceEvidenceStep as zt };
|