page-agent-sdk 3.47.0 → 4.1.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.
@@ -141,7 +141,6 @@ export type SdkEvent =
141
141
  | { type: 'session_restored'; sessionId: string; rounds: number }
142
142
  | { type: 'usage'; round: number; usage: TokenUsage; cumulative: TokenUsage }
143
143
  | { type: 'error'; message: string; severity?: 'recoverable' | 'fatal' | 'observable'; code?: string; context?: unknown }
144
- | { type: 'trace'; spans: TraceSpan[]; metrics: TraceMetrics }
145
144
  | { type: 'context_trimmed'; dropped: { round: number; user: unknown; assistant: unknown[]; steps: unknown[] }[]; vfsResults: Record<string, string>; summary: string; reason: string }
146
145
  | { type: 'focus_chip_click'; path: string; label?: string }
147
146
  | { type: 'focus_change'; focuses: Focus[] };
@@ -269,6 +268,8 @@ export interface SubagentInfo {
269
268
  enabled: boolean;
270
269
  maxDepth: number;
271
270
  maxParallel: number;
271
+ /** 单次委派总时长毫秒(flow-robustness P1#4 反射:undefined → 默认 600000;0 = 关) */
272
+ timeoutMs: number;
272
273
  allowedTools: string[];
273
274
  /** 预声明子 agent 列表(动态:反映 setSubagents/addSubagent/removeSubagent 后的最新) */
274
275
  subagents?: { id: string; description: string }[];
@@ -347,8 +348,6 @@ export interface AgentInfo {
347
348
  };
348
349
  /** 会话级 checkpoint 装载状态(未开启 → undefined) */
349
350
  checkpoints?: { enabled: boolean; auto: boolean; list: CheckpointMeta[] };
350
- /** 结构化追踪(revive-observability-tracing;capabilities.tracing 开时填充,否则 undefined) */
351
- trace?: { spans: TraceSpan[]; metrics: TraceMetrics };
352
351
  /** 上下文构成快照(context-inspector;每轮 wrapModelCall 覆盖;capabilities.contextInspector:false → undefined) */
353
352
  context?: ContextSnapshot;
354
353
  }
@@ -503,6 +502,10 @@ export interface DataOpsOptions {
503
502
  onConflict?: (conflict: ConflictInfo) => Promise<ConflictResolution>;
504
503
  /** 冲突监听字段白名单(任意深度字段名):声明后仅这些字段的值变动触发自动冲突检测(位置不敏感);未声明 = 不开自动检测(仅显式 expectedHash 校验);['*'] = 全字段检测(旧 autoLock 行为) */
505
504
  conflictWatchFields?: string[];
505
+ /**
506
+ * 同轮工具并发上限(createAgent 透传):>1 且 conflictWatchFields 武装时启用 dataOps 闭包级并发写互锁(async mutex,单锁 bind 域)—— 同轮并发双写不再「双双过旧基线、后者静默覆盖前者」;串行/未武装直通 no-op 零行为变化
507
+ */
508
+ maxParallelTools?: number;
506
509
  }
507
510
 
508
511
  /** 数据操作控制器(运行时替换配置;createDataOps 返回的工具数组上以不可枚举属性 `controller` 挂载) */
@@ -568,11 +571,11 @@ export interface SkillRefSpec {
568
571
  doc?: string;
569
572
  getContent?: () => string | Promise<string>;
570
573
  }
571
- /** skill 执行钩子:code(内联 JS)/url(远程,仅 sandbox)二选一;context 默认 sandbox,host 需 skillHostScript */
574
+ /** skill 执行钩子:code(内联 JS)/url(远程,仅 sandbox)二选一;context 默认 sandbox(host 已随 4.1.0 移除,残值落 sandbox 执行) */
572
575
  export interface SkillExecSpec {
573
576
  code?: string;
574
577
  url?: string;
575
- context?: 'sandbox' | 'host';
578
+ context?: 'sandbox';
576
579
  inject?: 'append' | 'prepend';
577
580
  }
578
581
  /** skill 附带工具工厂(返回单个/数组工具,可异步;ctx.signal 运行时中止信号) */
@@ -583,6 +586,8 @@ export type SkillToolFactory = () => any | any[] | Promise<any | any[]>;
583
586
  export interface VerifyCheckContext {
584
587
  messages: any[];
585
588
  state: any;
589
+ /** 结构化日志(debugLogs;render-check 类环境降级留痕用,可缺省) */
590
+ log?: (type: string, data: unknown) => void;
586
591
  }
587
592
  export interface VerifyCheckResult {
588
593
  ok: boolean;
@@ -617,8 +622,10 @@ export interface ApprovalOptions {
617
622
  tools?: string[];
618
623
  /** 自定义判定(优先于 tools);返回 true 需确认 */
619
624
  confirm?: (name: string, args: any) => boolean;
620
- /** 超时毫秒(用户未响应自动拒绝);0 = 不超时(默认) */
625
+ /** 超时毫秒(无响应自动拒绝);SDK 装配层默认 30000(响应方调事件的 hold() 接管后不限时);显式 Infinity/负数 = 不超时 */
621
626
  timeoutMs?: number;
627
+ /** 超时自动拒的留痕回调(abort/用户先收口不触发) */
628
+ onAutoReject?: (info: { toolName: string; waitedMs: number }) => void;
622
629
  /** 是否装载 request_human_confirmation 主动确认工具(传 approval 时默认 true;false 关闭) */
623
630
  humanConfirmTool?: boolean;
624
631
  }
@@ -631,14 +638,14 @@ export interface PlanConfirmationRecord {
631
638
  choice: string;
632
639
  viaOptions: true;
633
640
  }
634
- export declare function createHumanConfirmMiddleware(onResolved?: (record: PlanConfirmationRecord) => void): any;
635
- export declare const HUMAN_CONFIRM_TOOL_NAME: string;
636
- /** 大批量变更门禁(bulk-change-guard):量纲 = 现有组件节点数;默认关,须配 approval 才装配 */
637
- export interface BulkGuardOptions {
638
- threshold?: number;
641
+ /** humanConfirm 中间件可选项:timeoutMs 无响应自动拒(超时视同拒绝);onAutoReject 超时留痕回调 */
642
+ export interface HumanConfirmOptions {
639
643
  timeoutMs?: number;
640
- mode?: 'confirm' | 'observe';
644
+ onAutoReject?: (info: { toolName: string; waitedMs: number }) => void;
641
645
  }
646
+ export declare function createHumanConfirmMiddleware(onResolved?: (record: PlanConfirmationRecord) => void, opts?: HumanConfirmOptions): any;
647
+ export declare const HUMAN_CONFIRM_TOOL_NAME: string;
648
+ /** 写触达量纲结果(原 bulk-change-guard 量纲;bulkGuard 已于 4.1.0 移除,函数为 delegateNudge 依赖保留) */
642
649
  export interface WriteScaleResult {
643
650
  count: number;
644
651
  scopes: string[];
@@ -646,19 +653,6 @@ export interface WriteScaleResult {
646
653
  }
647
654
  /** 度量单次写调用触达的现有组件节点数(纯函数:同组件多 patch=1;新增路径不计) */
648
655
  export declare function measureWriteScale(args: unknown, getBind: () => unknown): WriteScaleResult;
649
- /** 中间件工厂参数(getBind/tools/getPlanConfirmation/onEvent;挂起经 ctx.emit approval_request) */
650
- export interface BulkGuardMiddlewareOptions extends BulkGuardOptions {
651
- getBind: () => unknown;
652
- tools?: unknown[];
653
- getPlanConfirmation?: () => { at: number; summary: string } | undefined;
654
- onEvent?: (info: { stage: 'bulk_guard'; decision: 'confirm' | 'observe' | 'exempt-plan' | 'exempt-once' | 'pass' | 'timeout' | 'rejected'; kind: string; count: number }) => void;
655
- }
656
- /** 会话级豁免态(每形态确认过一次本会话放行;reset 钩子接 switch/resetSession) */
657
- export interface BulkGuardState {
658
- confirmedKinds: Set<string>;
659
- reset(): void;
660
- }
661
- export declare function createBulkGuardMiddleware(opts: BulkGuardMiddlewareOptions): any;
662
656
  export interface CheckpointMeta {
663
657
  id: number;
664
658
  label?: string;
@@ -694,6 +688,8 @@ export interface StorageConfig {
694
688
  maxBytesPerSession?: number;
695
689
  evictionWatermark?: number;
696
690
  debounceMs?: number;
691
+ /** flush 单项落盘超时 ms(默认 5000):IDB 事务卡死不拖死 flush 调用方,超时项留待后续 flush/pagehide 重试 */
692
+ flushTimeoutMs?: number;
697
693
  }
698
694
  /** Skill 独立持久化存储配置(与 storage 选项分离) */
699
695
  export interface SkillStoreConfig {
@@ -840,6 +836,10 @@ export interface ChatSdkOptions {
840
836
  maxRetries?: number;
841
837
  /** LLM 流停滞看门狗(fix-hang-and-feedback P1-7):chunk 间隔(含等首个)超此 ms → 中断抛错防 loading 永转。默认 90s;0 = 关闭 */
842
838
  streamStallMs?: number;
839
+ /**
840
+ * per-tool 看门狗:单工具执行超此 ms → 放弃等待,recoverable 错误结果回灌自纠(防集成方工具永不 settle 拖死整轮:loading 永转 + stop 无效)。只对集成方注入工具生效(defineTool / actions / skill 工具工厂 / rag retriever);内置/MCP/委派与 conflict ask 挂起是设计内等待,豁免。默认 120s;0 = 关闭
841
+ */
842
+ toolTimeoutMs?: number;
843
843
  /** token 预算上限(累计 total_tokens 超过 → 停止 agent + emit BUDGET_EXCEEDED;需 capabilities.automation:true) */
844
844
  tokenBudget?: number;
845
845
  /** 单次 invoke 的 token 预算上限(opt-in,默认关):本次 agent 调用累计 total_tokens 超限 → 中断收口(observable emit + 友好文本,已完成部分保留);与 automation 全局 tokenBudget 正交 */
@@ -857,16 +857,14 @@ export interface ChatSdkOptions {
857
857
  /** 模型最大输出(token);顶层声明对 llm 实例场景也生效,缺省按 model 名查表 */
858
858
  maxOutputTokens?: number;
859
859
  /** 子 agent 委派(默认开启;{ enabled: false } 关闭) */
860
- capabilities?: { dataOps?: boolean; fetch?: boolean; planning?: boolean; missionAnchor?: boolean; skills?: boolean; vfs?: boolean; summarization?: boolean; memory?: boolean; subagent?: boolean; verify?: boolean; domInspect?: boolean; inspectEnv?: boolean; draftWrite?: boolean; tracing?: boolean; automation?: boolean; workingMemory?: boolean; focus?: boolean; skillHostScript?: boolean; contextInspector?: boolean; agentCompression?: boolean; preferences?: boolean; bulkGuard?: boolean };
861
- subagent?: { enabled?: boolean; allowedTools?: string[]; systemPrompt?: string; temperature?: number; maxTokens?: number; skills?: SkillSpec[]; llm?: LLMConfig | ChatModelLike; maxDepth?: number; maxParallel?: number; timeoutMs?: number; thinkingMode?: 'simple' | 'deep' };
860
+ capabilities?: { dataOps?: boolean; fetch?: boolean; planning?: boolean; missionAnchor?: boolean; skills?: boolean; vfs?: boolean; summarization?: boolean; memory?: boolean; subagent?: boolean; verify?: boolean; domInspect?: boolean; inspectEnv?: boolean; draftWrite?: boolean; automation?: boolean; workingMemory?: boolean; focus?: boolean; contextInspector?: boolean; agentCompression?: boolean };/** tracing/skillHostScript/preferences/bulkGuard 已于 4.1.0 移除;残键静默忽略 */
861
+ subagent?: { enabled?: boolean; allowedTools?: string[]; systemPrompt?: string; temperature?: number; maxTokens?: number; skills?: SkillSpec[]; llm?: LLMConfig | ChatModelLike; maxDepth?: number; maxParallel?: number; /** 单次委派总时长毫秒(默认 600000=10min;超时 abort 子流 + recoverable 回灌;0 = 不限制) */ timeoutMs?: number; thinkingMode?: 'simple' | 'deep' };
862
862
  /** 预声明子 agent 列表:每个用同主配置方式声明,自动生成 use_<id> 委派工具(与 spawn_agent 共存) */
863
863
  subagents?: SubagentConfig[];
864
864
  /** 自检:agent 返回前跑 check,不通过则 feedback 回灌自纠(默认关闭;需 capabilities.verify:true)。check 省略时默认 createWriteBackCheck 写后读回验证 */
865
865
  verify?: { enabled?: boolean; check?: VerifyCheck; maxAttempts?: number; adversarial?: boolean };
866
866
  /** 人工确认:工具调用前弹确认框,用户「允许/拒绝」后才执行(默认关闭,不传 = 不装) */
867
867
  approval?: ApprovalOptions;
868
- /** 大批量变更门禁(默认关;capabilities.bulkGuard:true 开启,须同时配置 approval 否则 no-op)。量纲 = 现有组件节点数(同组件多 patch 不拦,新增内容不计);超阈挂 approval(自带 timeoutMs 超时自动拒);mode:'observe' 无人值守只留痕 */
869
- bulkGuard?: { threshold?: number; timeoutMs?: number; mode?: 'confirm' | 'observe' };
870
868
  /** 主动征询(默认开启):装载 request_human_confirmation 工具,LLM 在不确定/多方案/高风险时主动征询;false 关闭(types-alignment 补漏) */
871
869
  humanConfirm?: boolean;
872
870
  /** 会话级 checkpoint 回滚(回到上次正常时)。默认关闭;传 true 或 { maxCheckpoints?, auto? } 开启 */
@@ -1140,7 +1138,7 @@ export declare function defineTool(opts: {
1140
1138
  writeCapable?: boolean | ((args: Record<string, unknown>) => boolean);
1141
1139
  }): any;
1142
1140
  export declare function createDataOps(config: DataConfig, opts?: DataOpsOptions): any[];
1143
- /** 整体 set 写入纯函数:schema 校验 + 快照 + merge/替换 + audit。set_data / write(set) / draft_commit 共用。返回 {ok,hash,data} 或 {ok:false,error} */
1141
+ /** 整体 set 写入纯函数:schema 校验 + 快照 + merge/替换 + audit。write(set) / draft_commit 共用。返回 {ok,hash,data} 或 {ok:false,error} */
1144
1142
  export declare function commitSetToBind(args: { bindRef: unknown; value: unknown; schema: any; allowKeys: string[] | null; snapshots: any[]; maxSnapshots: number; audit: (e: any) => void; dryRun?: boolean; op?: 'set' | 'draft_commit'; snapshotLabel?: string }): { ok: true; hash: string; data: unknown; notices: string[] } | { ok: false; error: string };
1145
1143
  export interface LocalWriteBack {
1146
1144
  op: 'set' | 'remove' | 'move' | 'mergeKeys' | 'appendElems';
@@ -1159,34 +1157,6 @@ export interface LocalValidationPlan {
1159
1157
  export declare function validateRootValueLocally(args: { schema: any; allowKeys: string[] | null; value: unknown; bindRef: unknown }): { ok: true; assembly: unknown; wholeParsed: Record<string, unknown> | null; notices: string[] } | { ok: false; error: string; notices: string[] };
1160
1158
  export declare function validateWriteLocally(args: { schema: any; bindRef: unknown; clone: unknown; patches: { op?: string; jsonPath?: string; value?: unknown }[]; schemaErrorMode?: 'zod' | 'schema_invalid'; appendCaptures: { jp: string; elems: unknown[] }[]; moveCaptures: { jp: string; toPath: string; elem: unknown }[]; valueAt?: (jp: string) => unknown }): LocalValidationPlan;
1161
1159
  export declare function applyPatchesToBind(args: { bindRef: unknown; patches: { op?: string; jsonPath?: string; value?: unknown }[]; schema: any; allowKeys: string[] | null; snapshots: any[]; maxSnapshots: number; markDataDirty?: () => void; schemaErrorMode?: 'zod' | 'schema_invalid'; snapshotLabel?: string; dryRun?: boolean; internalAfterWrite?: (bind: any, before: any) => void; protectedCtx?: unknown }): { ok: true; applied: { op: string; jp: string; value: unknown }[]; clone: unknown; notices: string[] } | { ok: false; error: string };
1162
- /** 结构化追踪 span(revive-observability-tracing Phase 3) */
1163
- export type SpanType = 'round' | 'model' | 'tool' | 'compression';
1164
- export type SpanStatus = 'ok' | 'error' | 'timeout';
1165
- export interface TraceSpan {
1166
- id: string;
1167
- parentId?: string;
1168
- name: string;
1169
- type: SpanType;
1170
- startTs: number;
1171
- endTs?: number;
1172
- durationMs?: number;
1173
- status: SpanStatus;
1174
- attributes: Record<string, unknown>;
1175
- }
1176
- export interface TraceMetrics {
1177
- rounds: number;
1178
- totalDurationMs: number;
1179
- avgRoundMs: number;
1180
- toolCalls: number;
1181
- toolFailures: number;
1182
- toolSuccessRate: number;
1183
- modelCalls: number;
1184
- retries: number;
1185
- compressions: number;
1186
- totalTokens?: { prompt: number; completion: number; total: number };
1187
- }
1188
- /** 从 TraceSpan[] 聚合 metrics(纯函数:轮次/延迟/工具成功率/重试/压缩/token) */
1189
- export declare function getTraceMetrics(spans: TraceSpan[]): TraceMetrics;
1190
1160
  // ============ 通用 JSON 操作纯函数(jsonUtils,refactor-module-extraction 从 dataOps 抽离;零依赖,经 ./query subpath 按需引入)============
1191
1161
  export type EditOp = 'set' | 'remove' | 'merge' | 'append';
1192
1162
  export declare const UNSAFE_KEYS: Set<string>;
@@ -1322,7 +1292,6 @@ export type CapabilityFlags = Partial<Record<string, boolean>>;
1322
1292
  export type ResolvedCapabilities = Record<string, boolean>;
1323
1293
  export declare const CAPABILITIES: readonly Capability[];
1324
1294
  /** 已列入移除计划的配置键(config-surface-pruning;warn 一版后移除) */
1325
- export declare const DEPRECATED_CAPABILITIES: Readonly<Record<string, string>>;
1326
1295
  /** 单一解析:集成方原始 caps(Partial)→ 全量 boolean(opt-out 默认开 !==false / opt-in 默认关 ===true;requires 依赖未满足强制关)。参数宽松 Record<string,unknown>(兼容含 subagents 等非 boolean 字段的 caps 对象;只读已知 capability 的 boolean) */
1327
1296
  export declare function resolveCapabilities(caps?: Record<string, unknown>): ResolvedCapabilities;
1328
1297
  export declare function resolveStorage(storage: any): any | null;
@@ -1455,7 +1424,7 @@ export interface JpNode {
1455
1424
  path: string;
1456
1425
  /** 匹配元素值 */
1457
1426
  value: unknown;
1458
- /** 父为数组时的索引(便于后续 edit_data_slot 的 jsonPath 定位) */
1427
+ /** 父为数组时的索引(便于后续 write patch 的 jsonPath 定位) */
1459
1428
  index?: number;
1460
1429
  }
1461
1430
  export interface SearchHit {
@@ -1494,8 +1463,6 @@ export interface SandboxResult {
1494
1463
  * 无 input 传 undefined(skill exec);有 input 作 data 入参(eval_script)。
1495
1464
  */
1496
1465
  export declare function createSandboxRunner(script: string, timeoutMs?: number): (input?: unknown) => Promise<SandboxResult>;
1497
- /** 宿主脚本执行(skill exec context:'host';AsyncFunction 主线程全权,不经静态扫描,需 capabilities.skillHostScript:true) */
1498
- export declare function runHostScript(code: string, timeoutMs?: number): Promise<SandboxResult>;
1499
1466
 
1500
1467
  // ============ 工具报错(结构化 ERROR:{json},供 LLM 排查)============
1501
1468
  export interface ToolErrorInput {
@@ -1640,6 +1607,76 @@ export interface HtmlFormatCheckOptions {
1640
1607
  }
1641
1608
  /** HTML 格式 verify check(beforeReturn 门禁):扫 state.files 代码文件,不通过回灌 feedback 自纠 */
1642
1609
  export declare function createHtmlFormatCheck(opts?: HtmlFormatCheckOptions): VerifyCheck;
1610
+ /** 沙箱采集到的原始渲染信号(console.error / js-error / unhandledrejection / 资源失败 / CSP 违规 / console.warn) */
1611
+ export interface RenderSignal {
1612
+ type: 'console-error' | 'console-warn' | 'js-error' | 'unhandledrejection' | 'resource-error' | 'csp-violation';
1613
+ message: string;
1614
+ source?: string;
1615
+ lineno?: number;
1616
+ }
1617
+ /** 渲染指标(收集窗结束时采集;白屏判定口径 = 内容级:body 子节点数 / scrollHeight / 图片数) */
1618
+ export interface RenderMetrics {
1619
+ bodyChildren: number;
1620
+ scrollHeight: number;
1621
+ imgCount: number;
1622
+ }
1623
+ /** 单组件沙箱渲染的原始结果(未归一;noDom = node/无 DOM 环境标记) */
1624
+ export interface RawRenderResult {
1625
+ handshake: boolean;
1626
+ signals: RenderSignal[];
1627
+ metrics?: RenderMetrics;
1628
+ timedOut?: boolean;
1629
+ noDom?: boolean;
1630
+ }
1631
+ /** 归一后的单组件判定:pass / fail(带 problems)/ unavailable(握手缺失或超时,不算通过防假绿) */
1632
+ export interface RenderVerdict {
1633
+ verdict: 'pass' | 'fail' | 'unavailable';
1634
+ problems: string[];
1635
+ warnings: string[];
1636
+ metrics?: RenderMetrics;
1637
+ reason?: 'handshake-missing' | 'timeout';
1638
+ }
1639
+ /** 渲染自检 VerifyCheck 工厂选项(runner 注入供测试桩用) */
1640
+ export interface HtmlRenderCheckOptions {
1641
+ vfsPrefix?: string;
1642
+ codeField?: string;
1643
+ writablePaths?: string[];
1644
+ runner?: (html: string) => Promise<RawRenderResult>;
1645
+ maxTargets?: number;
1646
+ }
1647
+ /** 渲染自检对象:check 组合进 createHtmlSubagent 的 formatCheck 链;两个注入槽由装配期回填 */
1648
+ export interface HtmlRenderCheck {
1649
+ check: VerifyCheck;
1650
+ setGetController: (g: () => {
1651
+ get?: () => { bind?: unknown } | null | undefined;
1652
+ } | null | undefined) => void;
1653
+ setWritablePaths: (paths: string[]) => void;
1654
+ }
1655
+ /** 沙箱运行参数(活动静默窗/硬上限/指标应答宽限;默认 900ms / 4000ms / 500ms) */
1656
+ export interface SandboxRunOptions {
1657
+ silenceMs?: number;
1658
+ hardCapMs?: number;
1659
+ metricsGraceMs?: number;
1660
+ }
1661
+ /**
1662
+ * 渲染级自检(render-check):本轮触达的 code 资产放沙箱 iframe(srcdoc + sandbox="allow-scripts")独立渲染,
1663
+ * 采集 console.error / window.onerror / unhandledrejection / 资源失败 / 白屏指标 → 归一回灌自纠。
1664
+ * 仅门禁形态(组合进 createHtmlSubagent 的 formatCheck 链);node/无 DOM 自动跳过渲染段保留结构段;
1665
+ * 握手缺失(宿主 CSP 拦沙箱内联脚本)/ 超时 → unavailable 不算通过(零信号 ≠ 通过)。
1666
+ */
1667
+ export declare function createHtmlRenderCheck(opts?: HtmlRenderCheckOptions): HtmlRenderCheck;
1668
+ /** 组合「结构 → 渲染」为单一 VerifyCheck(结构不过短路渲染;runBeforeReturn 不短路,两段必须单 check 内早返回) */
1669
+ export declare function composeStructureThenRender(structure: VerifyCheck, render: VerifyCheck): VerifyCheck;
1670
+ /** 信号归一纯函数:storage 类 SecurityError 降 warn(沙箱假阳性);无失败信号但 body 空 + scrollHeight<10 → 疑似白屏 fail */
1671
+ export declare function normalizeRenderResult(raw: RawRenderResult): RenderVerdict;
1672
+ /** 单组件沙箱渲染(离屏 iframe;用后销毁;node/无 DOM 返回 noDom) */
1673
+ export declare function renderInSandbox(html: string, opts?: SandboxRunOptions): Promise<RawRenderResult>;
1674
+ /** 沙箱 srcdoc 构造(collector 注入文档最前,不改组件原文) */
1675
+ export declare function buildSandboxSrcdoc(html: string, nonce: string): string;
1676
+ /** collector 采集脚本源码(nonce 握手 + 信号上报 + 活动信号 + 指标应答) */
1677
+ export declare function buildCollectorJs(nonce: string): string;
1678
+ /** 累计/销毁的沙箱 iframe 数(测试观察「用后销毁」契约) */
1679
+ export declare function getSandboxLifecycle(): { created: number; destroyed: number };
1643
1680
 
1644
1681
  // checkpoint / dataOps / permissions
1645
1682
  export interface CheckpointDeps { [k: string]: any }