@webskill/sdk 0.3.0 → 0.5.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 +2 -0
- package/dist/agent.js +867 -0
- package/dist/browser.d.ts +137 -4
- package/dist/browser.js +458 -22
- package/dist/{catalogComponents-C_V39rbF-BOHveMWa.js → catalogComponents-DV7cPpUm-C77AEEx9.js} +477 -157
- package/dist/{dist-rorEJsNi.js → dist-6C03DShK.js} +654 -298
- package/dist/{dist-ZKaM8j06.js → dist-bewtXYlO.js} +1061 -807
- package/dist/governance.d.ts +87 -10
- package/dist/governance.js +194 -24
- package/dist/{index-wiV5X8Rz.d.ts → index-Bsqg4ftU.d.ts} +151 -143
- package/dist/index-D_7ZZjkl.d.ts +411 -0
- package/dist/{index-8d-oEDww.d.ts → index-vBz_FC9w.d.ts} +289 -24
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -2
- package/dist/mcp.d.ts +2 -2
- package/dist/mcp.js +1 -1
- package/dist/memoryArtifactStore-BtOeB_hm-tj3fC5ip.js +78 -0
- package/dist/node.d.ts +8 -4
- package/dist/node.js +1 -1
- package/dist/{openUiLibrary-B8-Cvou9-BbpNTXS3.js → openUiLibrary-W3Ce896k-ClFTRZFs.js} +6 -5
- package/dist/{skillVersionStore-DOEI9ptb-BxbYL70B.d.ts → skillVersionStore-BzLbzFOL-CxwIewHJ.d.ts} +43 -11
- package/dist/{testing-CsrG3XLz.js → testing-DDCJWvgA.js} +7 -5
- package/dist/testing.d.ts +1 -1
- package/dist/testing.js +2 -2
- package/dist/{types-AmKCKJn_-VGabeXK4.d.ts → types-D_hoCri8-BnNPiZCi.d.ts} +111 -72
- package/dist/ui-react.d.ts +352 -20
- package/dist/ui-react.js +3804 -3478
- package/dist/ui-vue.d.ts +1 -1
- package/dist/ui-vue.js +25 -6
- package/dist/ui.d.ts +4 -3
- package/dist/ui.js +3 -3
- package/dist/{webskillLitCatalog-CNaUpasU-BslMcxRZ.js → webskillLitCatalog-_mugzRHx-DiuJpCuf.js} +398 -122
- package/package.json +6 -1
- package/dist/jsonRenderRegistry-9GrWP_hE-U6Do3Kid.js +0 -2468
- package/dist/memoryArtifactStore-C9lFVqPF-yFz6yJj0.js +0 -48
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { m as WebSkillError } from "./dist-8oQRa8Xz.js";
|
|
2
|
+
|
|
3
|
+
//#region ../runtime/dist/memoryArtifactStore-BtOeB_hm.js
|
|
4
|
+
/** 纯文本消息内容的构造快捷方式(引擎内部绝大多数消息仍是纯文本) */
|
|
5
|
+
const textParts = (text) => [{
|
|
6
|
+
type: "text",
|
|
7
|
+
text
|
|
8
|
+
}];
|
|
9
|
+
/** 取出 parts 中的文本(非文本分片在纯文本语境下无法表达,此处按丢弃处理——调用方须先校验) */
|
|
10
|
+
const partsToText = (parts) => (parts ?? []).reduce((acc, part) => part.type === "text" ? acc + part.text : acc, "");
|
|
11
|
+
const isContentPart = (value) => {
|
|
12
|
+
if (typeof value !== "object" || value === null) return false;
|
|
13
|
+
const part = value;
|
|
14
|
+
if (part["type"] === "text") return typeof part["text"] === "string";
|
|
15
|
+
if (part["type"] === "image" || part["type"] === "file") return typeof part["mimeType"] === "string" && typeof part["data"] === "string";
|
|
16
|
+
return false;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* 0.4.0 起 `content` 是 parts 数组。旧的 `string` content 一律拒绝,不做静默转换:
|
|
20
|
+
* 转换会让「模型看到的输入」与「历史记录的输入」悄悄分叉。
|
|
21
|
+
*/
|
|
22
|
+
function validateLlmMessages(messages) {
|
|
23
|
+
messages.forEach((message, index) => {
|
|
24
|
+
if (typeof message.content === "string") throw new WebSkillError("VALIDATION_FAILED", `messages[${index}].content is a string; since schema version 2 it must be an array of content parts. Legacy data is not converted automatically.`);
|
|
25
|
+
if (!Array.isArray(message.content) || !message.content.every(isContentPart)) throw new WebSkillError("VALIDATION_FAILED", `messages[${index}].content is not a valid array of content parts`);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/** provider 不支持某类分片时的统一拒绝:静默丢弃会让模型回答一个它没看见的附件 */
|
|
29
|
+
function rejectUnsupportedPart(part, provider, where) {
|
|
30
|
+
throw new WebSkillError("VALIDATION_FAILED", `${provider} does not support ${part.type} content in ${where} messages`);
|
|
31
|
+
}
|
|
32
|
+
/** 内存 ArtifactStore:测试与浏览器降级用;索引随进程生命周期存在 */
|
|
33
|
+
var MemoryArtifactStore = class {
|
|
34
|
+
#byRun = /* @__PURE__ */ new Map();
|
|
35
|
+
#seq = 0;
|
|
36
|
+
async createTextArtifact(input) {
|
|
37
|
+
return this.#record({
|
|
38
|
+
runId: input.runId,
|
|
39
|
+
path: input.path,
|
|
40
|
+
type: "text",
|
|
41
|
+
size: new TextEncoder().encode(input.content).length,
|
|
42
|
+
mimeType: input.mimeType,
|
|
43
|
+
metadata: input.metadata
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
async createBinaryArtifact(input) {
|
|
47
|
+
return this.#record({
|
|
48
|
+
runId: input.runId,
|
|
49
|
+
path: input.path,
|
|
50
|
+
type: "binary",
|
|
51
|
+
size: input.content.length,
|
|
52
|
+
mimeType: input.mimeType,
|
|
53
|
+
metadata: input.metadata
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
async listArtifacts(runId) {
|
|
57
|
+
return [...this.#byRun.get(runId) ?? []];
|
|
58
|
+
}
|
|
59
|
+
#record(input) {
|
|
60
|
+
const artifact = {
|
|
61
|
+
id: `art-${++this.#seq}`,
|
|
62
|
+
runId: input.runId,
|
|
63
|
+
path: input.path,
|
|
64
|
+
type: input.type,
|
|
65
|
+
mimeType: input.mimeType,
|
|
66
|
+
size: input.size,
|
|
67
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
68
|
+
metadata: input.metadata
|
|
69
|
+
};
|
|
70
|
+
const list = this.#byRun.get(input.runId) ?? [];
|
|
71
|
+
list.push(artifact);
|
|
72
|
+
this.#byRun.set(input.runId, list);
|
|
73
|
+
return artifact;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
//#endregion
|
|
78
|
+
export { validateLlmMessages as a, textParts as i, partsToText as n, rejectUnsupportedPart as r, MemoryArtifactStore as t };
|
package/dist/node.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { a as AuditLog,
|
|
1
|
+
import { I as JsonSchema, N as FileStat, O as ArchiveLimits, P as FileSystemProvider, U as SKILLS_LOCKFILE, W as SKILL_MANIFEST_FILE, Y as SignatureAuditSink, _t as VerifyResult, at as SkillManifest, b as UiBridge, c as InteractionResponse, dt as SkillsLockfile, ht as UnsignedPolicy, it as SkillManagerPort, pt as TrustedKeyStore, s as InteractionRequest, tt as SkillInstallSource, y as RenderResultRequest } from "./types-D_hoCri8-BnNPiZCi.js";
|
|
2
|
+
import { D as FsMemoryStore, E as FsArtifactStore, Ht as WebSkillRuntimeDeps, Nt as ToolResult, Vt as WebSkillRuntime, W as NetworkPolicy, _t as SchemaInferer, d as ApprovalScope, f as BridgeCapabilities, jt as ToolDefinition, qt as createScriptContext, vt as ScriptExecutionContext, yt as ScriptExecutor } from "./index-vBz_FC9w.js";
|
|
3
|
+
import { a as AuditLog, p as CandidateStore, r as ApprovalPolicy, u as CandidateSkill, v as SkillVersionStore } from "./skillVersionStore-BzLbzFOL-CxwIewHJ.js";
|
|
4
4
|
import { n as LlmEnvConfig, s as probeLlmCapabilities, t as LlmCapabilities } from "./env-BPUBZCwJ-4jat_SVG.js";
|
|
5
5
|
import { Readable, Writable } from "node:stream";
|
|
6
6
|
//#region ../node/dist/index.d.ts
|
|
@@ -217,7 +217,11 @@ declare class SkillManager implements SkillManagerPort {
|
|
|
217
217
|
*/
|
|
218
218
|
signature?: {
|
|
219
219
|
trustedKeys?: TrustedKeyStore;
|
|
220
|
-
/**
|
|
220
|
+
/**
|
|
221
|
+
* 未签名包的处置,默认 `warn`(0.4.0 D2 复核后维持)。
|
|
222
|
+
* 收成 `deny` 必须同时注入 `trustedKeys`:空信任库 + deny 的接受集为空,
|
|
223
|
+
* 任何包都装不上。
|
|
224
|
+
*/
|
|
221
225
|
unsigned?: UnsignedPolicy;
|
|
222
226
|
/** 验签结论落审计(governance 的 FsAuditLog 结构上兼容) */
|
|
223
227
|
audit?: SignatureAuditSink;
|
package/dist/node.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { A as parseSkillMarkdown, B as unzipWithLimits, H as verifyManifest, I as resolveArchiveLimits, L as resolveInsideRoot, M as readResponseWithLimit, N as readSkillSignature, O as messageOf, T as isValidSkillName, U as verifySkillSignature, V as validateSkills, _ as atomicWriteText, g as assertSafePathSegment, h as assertRemoteUrlAllowed, j as parseSkillPackManifest, m as WebSkillError, o as SKILLS_LOCKFILE, r as MANIFEST_EXCLUDED_FILES, s as SKILL_MANIFEST_FILE, u as SKILL_PACK_FILE, w as exportSkills, y as buildManifest } from "./dist-8oQRa8Xz.js";
|
|
2
|
-
import {
|
|
2
|
+
import { J as normalizeToolError, N as createScriptContext, O as WebSkillRuntime, W as networkPolicyLibSource, Y as parseBridgeRequest, d as FsMemoryStore, k as bridgeError, o as CapabilityApproval, q as normalizeToolContent, u as FsArtifactStore } from "./dist-6C03DShK.js";
|
|
3
3
|
import { i as probeLlmCapabilities } from "./env--jJB-TSX-04klhTYi.js";
|
|
4
4
|
import { createRequire } from "node:module";
|
|
5
5
|
import { unzipSync, zipSync } from "fflate";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { nt as uiCatalog } from "./dist-bewtXYlO.js";
|
|
2
|
+
import { t as CatalogNode } from "./catalogComponents-DV7cPpUm-C77AEEx9.js";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { Component, Fragment, createContext, useCallback, useContext, useEffect, useInsertionEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -3761,7 +3761,7 @@ function Renderer({ response, library, isStreaming = false, onAction, onStateUpd
|
|
|
3761
3761
|
const FormValidationContext = createContext(null);
|
|
3762
3762
|
|
|
3763
3763
|
//#endregion
|
|
3764
|
-
//#region ../ui-react/dist/openUiLibrary-
|
|
3764
|
+
//#region ../ui-react/dist/openUiLibrary-W3Ce896k.js
|
|
3765
3765
|
const propsFor = (props, container) => container ? props.extend({ children: z.array(z.any()).optional() }) : props;
|
|
3766
3766
|
/**
|
|
3767
3767
|
* catalog 的 OpenUI 投影:`defineComponent` 复用同一份 zod schema 与描述,
|
|
@@ -3773,10 +3773,11 @@ const webskillOpenUiLibrary = createLibrary({
|
|
|
3773
3773
|
name: def.name,
|
|
3774
3774
|
description: def.description,
|
|
3775
3775
|
props: propsFor(def.props, def.children !== void 0),
|
|
3776
|
-
component: ((input) =>
|
|
3776
|
+
component: ((input) => /* @__PURE__ */ jsx(CatalogNode, {
|
|
3777
|
+
name: def.name,
|
|
3777
3778
|
props: input.props,
|
|
3778
3779
|
children: input.renderNode(input.props["children"])
|
|
3779
|
-
})
|
|
3780
|
+
}))
|
|
3780
3781
|
}))
|
|
3781
3782
|
});
|
|
3782
3783
|
const OPEN_UI_COMPONENTS = Object.keys(webskillOpenUiLibrary.components);
|
package/dist/{skillVersionStore-DOEI9ptb-BxbYL70B.d.ts → skillVersionStore-BzLbzFOL-CxwIewHJ.d.ts}
RENAMED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { P as FileSystemProvider,
|
|
2
|
-
//#region ../governance/dist/skillVersionStore-
|
|
1
|
+
import { B as PageQuery, P as FileSystemProvider, Q as SkillCatalogEntry, at as SkillManifest, z as Page } from "./types-D_hoCri8-BnNPiZCi.js";
|
|
2
|
+
//#region ../governance/dist/skillVersionStore-BzLbzFOL.d.ts
|
|
3
3
|
//#region src/types.d.ts
|
|
4
4
|
type CandidateStatus = 'draft' | 'pending-review' | 'approved' | 'published' | 'rejected';
|
|
5
|
-
|
|
5
|
+
/** `generated` 是 0.5.0 的技能自动生成来源(需求 12 号 AC-9.1) */
|
|
6
|
+
type CandidateSource = 'runtime-miss' | 'document' | 'manual' | 'generated';
|
|
6
7
|
type CandidateRisk = 'low' | 'medium' | 'high';
|
|
7
8
|
interface CandidateFile {
|
|
8
9
|
path: string;
|
|
@@ -35,16 +36,32 @@ interface AuditEvent {
|
|
|
35
36
|
/** 本事件规范化载荷 + prevHash 的 sha256 */
|
|
36
37
|
hash?: string;
|
|
37
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* 审计查询的筛选条件。刻意是**具名字段**而不是谓词函数:
|
|
41
|
+
* 谓词无法被存储层用索引优化,下推一个谓词等于把 `.filter()` 换了个位置。
|
|
42
|
+
* @stable
|
|
43
|
+
*/
|
|
44
|
+
interface AuditQueryFilter {
|
|
45
|
+
target?: string;
|
|
46
|
+
type?: string;
|
|
47
|
+
actor?: string;
|
|
48
|
+
/** 含端点(`ts >= since`) */
|
|
49
|
+
since?: string;
|
|
50
|
+
/** 含端点(`ts <= until`) */
|
|
51
|
+
until?: string;
|
|
52
|
+
}
|
|
38
53
|
interface AuditLog {
|
|
39
54
|
append(event: Omit<AuditEvent, 'id' | 'ts'> & {
|
|
40
55
|
id?: string;
|
|
41
56
|
ts?: string;
|
|
42
57
|
}): Promise<AuditEvent>;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
58
|
+
/**
|
|
59
|
+
* 分页查询。方向与会话消息一致:无游标给**最新**一页,`nextCursor` 指向更早的历史。
|
|
60
|
+
*
|
|
61
|
+
* 分页是性能优化,不是绕过完整性检查的通道:本页范围内的 hash 链断裂
|
|
62
|
+
* 必须以 `GOVERNANCE_FAILED` 报出,不得安静地把那一页返回。
|
|
63
|
+
*/
|
|
64
|
+
query(filter?: AuditQueryFilter & PageQuery): Promise<Page<AuditEvent>>;
|
|
48
65
|
}
|
|
49
66
|
interface SkillVersion {
|
|
50
67
|
versionId: string;
|
|
@@ -59,6 +76,8 @@ interface SkillVersion {
|
|
|
59
76
|
type SkillState = 'active' | 'quarantined' | 'deprecated' | 'disabled';
|
|
60
77
|
//#endregion
|
|
61
78
|
//#region src/candidate/candidateStore.d.ts
|
|
79
|
+
/** 候选列表的缺省页长。缺省属于实现,不属于调用方 */
|
|
80
|
+
declare const CANDIDATE_PAGE_SIZE = 50;
|
|
62
81
|
/** 逐文件持久化的候选存储:<managedRoot>/.webskill/candidates/<id>.json */
|
|
63
82
|
declare class CandidateStore {
|
|
64
83
|
#private;
|
|
@@ -68,7 +87,14 @@ declare class CandidateStore {
|
|
|
68
87
|
});
|
|
69
88
|
save(candidate: CandidateSkill): Promise<void>;
|
|
70
89
|
get(id: string): Promise<CandidateSkill>;
|
|
71
|
-
|
|
90
|
+
/**
|
|
91
|
+
* 候选(= 审批队列)分页。`status` 是端口参数而不是上层 `.filter()`:
|
|
92
|
+
* 审批页面只看 `pending-review`,没理由把已发布的候选全部拉过端口。
|
|
93
|
+
* 目录扫描仍是逐文件读(备案 D25),但返回量已由 `limit` 封顶。
|
|
94
|
+
*/
|
|
95
|
+
list(options?: {
|
|
96
|
+
status?: CandidateStatus;
|
|
97
|
+
} & PageQuery): Promise<Page<CandidateSkill>>;
|
|
72
98
|
updateStatus(id: string, status: CandidateStatus, now?: string): Promise<CandidateSkill>;
|
|
73
99
|
}
|
|
74
100
|
/** 硬门禁:仅 published 可转换为 Catalog 条目,否则 APPROVAL_REQUIRED */
|
|
@@ -94,6 +120,8 @@ declare class CompositeApprovalPolicy implements ApprovalPolicy {
|
|
|
94
120
|
}
|
|
95
121
|
//#endregion
|
|
96
122
|
//#region src/versioning/skillVersionStore.d.ts
|
|
123
|
+
/** 版本列表的缺省页长。缺省属于实现,不属于调用方 */
|
|
124
|
+
declare const SKILL_VERSION_PAGE_SIZE = 20;
|
|
97
125
|
/** 版本存储:manifest 快照 + parentVersionId 链;回滚 = 追加新版本(谱系不断)。
|
|
98
126
|
* 保留策略:maxArchivesPerSkill(默认 5)超出时清理最旧版本(json + zip 归档一并删除)。 */
|
|
99
127
|
declare class SkillVersionStore {
|
|
@@ -115,7 +143,11 @@ declare class SkillVersionStore {
|
|
|
115
143
|
}): Promise<SkillVersion>;
|
|
116
144
|
/** 读取版本归档字节(applyRollback 用;未捕获归档的旧版本 → GOVERNANCE_FAILED) */
|
|
117
145
|
readArchive(skillName: string, versionId: string): Promise<Uint8Array>;
|
|
118
|
-
|
|
146
|
+
/**
|
|
147
|
+
* 版本列表分页(方向同 C1:无游标给**最新**一页)。
|
|
148
|
+
* 保留策略与谱系构建走 `#readAll`:它们必须看到全量,不能被分页截断。
|
|
149
|
+
*/
|
|
150
|
+
list(skillName: string, options?: PageQuery): Promise<Page<SkillVersion>>;
|
|
119
151
|
get(skillName: string, versionId: string): Promise<SkillVersion>;
|
|
120
152
|
/** 回滚:基于旧 manifest 追加新版本 + skill.rolled_back 审计 */
|
|
121
153
|
rollback(skillName: string, targetVersionId: string, input: {
|
|
@@ -124,4 +156,4 @@ declare class SkillVersionStore {
|
|
|
124
156
|
}): Promise<SkillVersion>;
|
|
125
157
|
}
|
|
126
158
|
//#endregion
|
|
127
|
-
export { AuditLog as a,
|
|
159
|
+
export { SkillVersion as _, AuditLog as a, CandidateFile as c, CandidateSource as d, CandidateStatus as f, SkillState as g, SKILL_VERSION_PAGE_SIZE as h, AuditEvent as i, CandidateRisk as l, CompositeApprovalPolicy as m, ApprovalDecision as n, AuditQueryFilter as o, CandidateStore as p, ApprovalPolicy as r, CANDIDATE_PAGE_SIZE as s, AlwaysHumanApprovalPolicy as t, CandidateSkill as u, SkillVersionStore as v, candidateToCatalogEntry as y };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { m as WebSkillError } from "./dist-8oQRa8Xz.js";
|
|
2
|
+
import { i as textParts, n as partsToText } from "./memoryArtifactStore-BtOeB_hm-tj3fC5ip.js";
|
|
2
3
|
|
|
3
4
|
//#region ../runtime/dist/testing.js
|
|
4
5
|
/**
|
|
@@ -27,7 +28,7 @@ var MockLlmClient = class {
|
|
|
27
28
|
else if (event.type === "tool-calls") toolCalls = event.toolCalls;
|
|
28
29
|
else if (event.type === "done" && event.content !== void 0) content = event.content;
|
|
29
30
|
return {
|
|
30
|
-
content,
|
|
31
|
+
content: content === "" ? void 0 : textParts(content),
|
|
31
32
|
toolCalls
|
|
32
33
|
};
|
|
33
34
|
}
|
|
@@ -43,11 +44,12 @@ var MockLlmClient = class {
|
|
|
43
44
|
return;
|
|
44
45
|
}
|
|
45
46
|
const response = typeof next === "function" ? await next(input) : next;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
const text = partsToText(response.content);
|
|
48
|
+
if (text !== "") {
|
|
49
|
+
const chunkSize = Math.max(1, Math.ceil(text.length / 3));
|
|
50
|
+
for (let i = 0; i < text.length; i += chunkSize) yield {
|
|
49
51
|
type: "text-delta",
|
|
50
|
-
delta:
|
|
52
|
+
delta: text.slice(i, i + chunkSize)
|
|
51
53
|
};
|
|
52
54
|
}
|
|
53
55
|
if (response.toolCalls?.length) yield {
|
package/dist/testing.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { _ as MemoryStore, b as UiBridge, c as InteractionResponse, l as LlmClient, m as LlmStreamEvent, n as ArtifactStore, p as LlmResponse, s as InteractionRequest, t as Artifact, u as LlmCompleteInput } from "./types-D_hoCri8-BnNPiZCi.js";
|
|
2
2
|
import { a as loadGoogleConfigFromEnv, i as loadAnthropicConfigFromEnv, n as LlmEnvConfig, o as loadLlmConfigFromEnv, r as ProviderEnvConfig } from "./env-BPUBZCwJ-4jat_SVG.js";
|
|
3
3
|
//#region ../runtime/dist/testing.d.ts
|
|
4
4
|
//#region src/llm/mockLlmClient.d.ts
|
package/dist/testing.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as MemoryArtifactStore } from "./memoryArtifactStore-
|
|
1
|
+
import { t as MemoryArtifactStore } from "./memoryArtifactStore-BtOeB_hm-tj3fC5ip.js";
|
|
2
2
|
import { n as loadGoogleConfigFromEnv, r as loadLlmConfigFromEnv, t as loadAnthropicConfigFromEnv } from "./env--jJB-TSX-04klhTYi.js";
|
|
3
|
-
import { n as MockLlmClient, r as MockUiBridge, t as InMemoryStore } from "./testing-
|
|
3
|
+
import { n as MockLlmClient, r as MockUiBridge, t as InMemoryStore } from "./testing-DDCJWvgA.js";
|
|
4
4
|
|
|
5
5
|
export { InMemoryStore, MemoryArtifactStore, MockLlmClient, MockUiBridge, loadAnthropicConfigFromEnv, loadGoogleConfigFromEnv, loadLlmConfigFromEnv };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
//#region ../core/dist/index.d.ts
|
|
2
2
|
//#region src/errors.d.ts
|
|
3
|
-
type WebSkillErrorCode = 'FS_NOT_FOUND' | 'FS_PATH_OUTSIDE_ROOT' | 'SKILL_NOT_FOUND' | 'SKILL_INVALID_METADATA' | 'SKILL_INVALID_NAME' | 'SKILL_DUPLICATE_NAME' | 'SKILL_UNSUPPORTED_SCRIPT' | 'VALIDATION_FAILED' | 'TOOL_NOT_FOUND' | 'TOOL_EXECUTION_FAILED' | 'NETWORK_BLOCKED' | 'TOOL_UNSUPPORTED' | 'TOOL_SCHEMA_UNAVAILABLE' | 'RUN_TIMEOUT' | 'RUN_MAX_TURNS_EXCEEDED' | 'RUN_FAILED' | 'RUN_CANCELLED' | 'RUN_INTERACTION_TIMEOUT' | 'UI_UNAVAILABLE' | 'LLM_UNAVAILABLE' | 'LLM_REQUEST_FAILED' | 'INSTALL_FAILED' | 'UNINSTALL_FAILED' | 'EXPORT_FAILED' | 'INTEGRITY_FAILED' | 'FS_PERMISSION_DENIED' | 'MCP_ENDPOINT_UNAVAILABLE' | 'MCP_TOOL_NOT_FOUND' | 'CANDIDATE_INVALID' | 'APPROVAL_REQUIRED' | 'SKILL_QUARANTINED' | 'SKILL_DISABLED' | 'SKILL_UNKNOWN_ALLOWED_TOOL' | 'SKILL_UNKNOWN_DEPENDENCY' | 'SKILL_CIRCULAR_DEPENDENCY' | 'GOVERNANCE_FAILED' | 'RUN_SNAPSHOT_NOT_FOUND' | 'RUN_SNAPSHOT_EXPIRED' | 'RUN_SNAPSHOT_INCOMPATIBLE' | 'RUN_TRACE_INCOMPATIBLE' | 'SESSION_INCOMPATIBLE' | 'SIGNATURE_MISSING' | 'SIGNATURE_MALFORMED' | 'SIGNATURE_UNTRUSTED_KEY' | 'SIGNATURE_MISMATCH' | 'SIGNATURE_UNSUPPORTED' | 'MCP_STDIO_SPAWN_FAILED' | 'MCP_STDIO_EXITED' | 'MCP_STDIO_TIMEOUT';
|
|
3
|
+
type WebSkillErrorCode = 'FS_NOT_FOUND' | 'FS_PATH_OUTSIDE_ROOT' | 'SKILL_NOT_FOUND' | 'SKILL_INVALID_METADATA' | 'SKILL_INVALID_NAME' | 'SKILL_DUPLICATE_NAME' | 'SKILL_UNSUPPORTED_SCRIPT' | 'VALIDATION_FAILED' | 'TOOL_NOT_FOUND' | 'TOOL_EXECUTION_FAILED' | 'NETWORK_BLOCKED' | 'TOOL_UNSUPPORTED' | 'TOOL_NOT_ALLOWED' | 'TOOL_SCHEMA_UNAVAILABLE' | 'RUN_TIMEOUT' | 'RUN_MAX_TURNS_EXCEEDED' | 'RUN_FAILED' | 'RUN_CANCELLED' | 'RUN_INTERACTION_TIMEOUT' | 'UI_UNAVAILABLE' | 'LLM_UNAVAILABLE' | 'LLM_REQUEST_FAILED' | 'INSTALL_FAILED' | 'UNINSTALL_FAILED' | 'EXPORT_FAILED' | 'INTEGRITY_FAILED' | 'FS_PERMISSION_DENIED' | 'MCP_ENDPOINT_UNAVAILABLE' | 'MCP_TOOL_NOT_FOUND' | 'CANDIDATE_INVALID' | 'APPROVAL_REQUIRED' | 'SKILL_QUARANTINED' | 'SKILL_DISABLED' | 'SKILL_UNKNOWN_ALLOWED_TOOL' | 'SKILL_UNKNOWN_DEPENDENCY' | 'SKILL_CIRCULAR_DEPENDENCY' | 'GOVERNANCE_FAILED' | 'RUN_SNAPSHOT_NOT_FOUND' | 'RUN_SNAPSHOT_EXPIRED' | 'RUN_SNAPSHOT_INCOMPATIBLE' | 'RUN_SNAPSHOT_SCHEMA_UNSUPPORTED' | 'RUN_TRACE_INCOMPATIBLE' | 'SESSION_INCOMPATIBLE' | 'SIGNATURE_MISSING' | 'SIGNATURE_MALFORMED' | 'SIGNATURE_UNTRUSTED_KEY' | 'SIGNATURE_MISMATCH' | 'SIGNATURE_UNSUPPORTED' | 'MCP_STDIO_SPAWN_FAILED' | 'MCP_STDIO_EXITED' | 'MCP_STDIO_TIMEOUT' | 'TS_RESOURCE_URL_REJECTED' | 'TS_TRANSPILER_UNAVAILABLE' | 'TS_TRANSPILE_FAILED' | 'TODO_LIST_INVALID' | 'TODO_ITEM_NOT_FOUND' | 'SKILL_GENERATION_DISABLED' | 'SKILL_GENERATION_LIMIT_EXCEEDED' | 'SKILL_GENERATION_VALIDATION_FAILED' | 'DELEGATION_UNAVAILABLE' | 'DELEGATION_IN_PROGRESS' | 'DELEGATION_BUDGET_EXCEEDED' | 'PREFERENCE_IMPORT_INVALID' | 'PREFERENCE_IMPORT_VERSION_UNSUPPORTED' | 'PREFERENCE_IMPORT_CREDENTIAL_REJECTED' | 'DICTATION_UNAVAILABLE' | 'DICTATION_PERMISSION_DENIED' | 'DICTATION_FAILED' | 'PERCEPTION_NOT_ENABLED' | 'PERCEPTION_FAILED';
|
|
4
4
|
/**
|
|
5
5
|
* 所有公开 API 抛出的结构化错误,code 供上层可编程处理
|
|
6
6
|
* @stable
|
|
@@ -29,6 +29,27 @@ interface JsonSchema {
|
|
|
29
29
|
[key: string]: unknown;
|
|
30
30
|
}
|
|
31
31
|
//#endregion
|
|
32
|
+
//#region src/contracts/pagination.d.ts
|
|
33
|
+
/**
|
|
34
|
+
* 全仓统一的游标分页形状。会话、消息、治理列表共用同一套,
|
|
35
|
+
* 不为每个存储端口各造一种(形状一多,调用方就得为每个端口重写一遍翻页逻辑)。
|
|
36
|
+
*/
|
|
37
|
+
interface PageQuery {
|
|
38
|
+
/**
|
|
39
|
+
* 不透明续读位置,只能来自上一页的 `nextCursor`。
|
|
40
|
+
* 刻意不是数字 offset:追加型存储上并发追加会让 offset 错位,
|
|
41
|
+
* 而不透明串让实现方自己决定编码。
|
|
42
|
+
*/
|
|
43
|
+
cursor?: string;
|
|
44
|
+
/** 本页最多返回多少条;缺省值由**存储实现**决定,不由调用方兜底 */
|
|
45
|
+
limit?: number;
|
|
46
|
+
}
|
|
47
|
+
/** 一页结果。`nextCursor` 缺席即已到末页,不用额外的 `hasMore` 布尔 */
|
|
48
|
+
interface Page<T> {
|
|
49
|
+
items: T[];
|
|
50
|
+
nextCursor?: string;
|
|
51
|
+
}
|
|
52
|
+
//#endregion
|
|
32
53
|
//#region src/skill/manifest.d.ts
|
|
33
54
|
type SkillInstallSource = {
|
|
34
55
|
type: 'local';
|
|
@@ -181,7 +202,12 @@ interface SkillSignature {
|
|
|
181
202
|
signature: string;
|
|
182
203
|
signedAt: string;
|
|
183
204
|
}
|
|
184
|
-
/**
|
|
205
|
+
/**
|
|
206
|
+
* 未签名包的处置策略。默认是 `warn`,0.4.0(D2)复核后维持不变:
|
|
207
|
+
* 默认信任库是空的,`deny` 之下未签名包报 `SIGNATURE_MISSING`、签名再正确也报
|
|
208
|
+
* `SIGNATURE_UNTRUSTED_KEY`——接受集为空,那不是更严的默认值而是恒失败的安装。
|
|
209
|
+
* `deny` 必须与装配好的 `TrustedKeyStore` 成对启用。
|
|
210
|
+
*/
|
|
185
211
|
type UnsignedPolicy = 'allow' | 'warn' | 'deny';
|
|
186
212
|
interface TrustedKey {
|
|
187
213
|
keyId: string;
|
|
@@ -342,6 +368,22 @@ interface RemoteUrlPolicy {
|
|
|
342
368
|
*/
|
|
343
369
|
declare function assertRemoteUrlAllowed(rawUrl: string, policy?: RemoteUrlPolicy): URL;
|
|
344
370
|
//#endregion
|
|
371
|
+
//#region src/ui/types.d.ts
|
|
372
|
+
/**
|
|
373
|
+
* 声明式 UI 的节点:框架无关,技能脚本与 LLM 产出同一形状。
|
|
374
|
+
*
|
|
375
|
+
* 定义放在 core 而不是 ui/runtime:runtime 要用它做结构校验,ui 要用它做 catalog
|
|
376
|
+
* 语义校验,两者互不依赖。`@webskill/ui` 以同名 re-export,公开名不变。
|
|
377
|
+
*/
|
|
378
|
+
interface UiSpecNode {
|
|
379
|
+
/** catalog 中声明过的组件名 */
|
|
380
|
+
component: string;
|
|
381
|
+
props?: Record<string, unknown>;
|
|
382
|
+
children?: UiSpecNode[];
|
|
383
|
+
/** 稳定 id(回放与 action 关联用;交互节点以此作为 actionId) */
|
|
384
|
+
id?: string;
|
|
385
|
+
}
|
|
386
|
+
//#endregion
|
|
345
387
|
//#region src/skill/types.d.ts
|
|
346
388
|
type SkillSource = 'local' | 'mcp' | 'generated' | 'installed';
|
|
347
389
|
/**
|
|
@@ -540,7 +582,7 @@ declare function escapeXml(text: string): string;
|
|
|
540
582
|
declare function renderAvailableSkillsXml(catalog: SkillCatalog): string;
|
|
541
583
|
declare const xmlRenderer: CatalogRenderer;
|
|
542
584
|
//#endregion
|
|
543
|
-
//#region ../runtime/dist/types-
|
|
585
|
+
//#region ../runtime/dist/types-D_hoCri8.d.ts
|
|
544
586
|
//#region src/llm/streamTypes.d.ts
|
|
545
587
|
/** 流式 LLM 事件(OpenAI SSE / Vercel fullStream 统一映射) */
|
|
546
588
|
type LlmStreamEvent = {
|
|
@@ -555,9 +597,26 @@ type LlmStreamEvent = {
|
|
|
555
597
|
};
|
|
556
598
|
//#endregion
|
|
557
599
|
//#region src/llm/types.d.ts
|
|
600
|
+
/**
|
|
601
|
+
* 消息内容分片。二进制一律 base64 内联:引用形态(URL / 句柄)需要生命周期管理,
|
|
602
|
+
* 不属于本批。代价是快照体积。
|
|
603
|
+
*/
|
|
604
|
+
type LlmContentPart = {
|
|
605
|
+
type: 'text';
|
|
606
|
+
text: string;
|
|
607
|
+
} | {
|
|
608
|
+
type: 'image';
|
|
609
|
+
mimeType: string;
|
|
610
|
+
data: string;
|
|
611
|
+
} | {
|
|
612
|
+
type: 'file';
|
|
613
|
+
mimeType: string;
|
|
614
|
+
data: string;
|
|
615
|
+
name?: string;
|
|
616
|
+
};
|
|
558
617
|
interface LlmMessage {
|
|
559
618
|
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
560
|
-
content:
|
|
619
|
+
content: LlmContentPart[];
|
|
561
620
|
/** role=tool 时必填 */
|
|
562
621
|
toolCallId?: string;
|
|
563
622
|
/** role=assistant 发起工具调用时携带 */
|
|
@@ -576,7 +635,7 @@ interface LlmToolCall {
|
|
|
576
635
|
argumentsParseError?: string;
|
|
577
636
|
}
|
|
578
637
|
interface LlmResponse {
|
|
579
|
-
content?:
|
|
638
|
+
content?: LlmContentPart[];
|
|
580
639
|
toolCalls?: LlmToolCall[];
|
|
581
640
|
raw?: unknown;
|
|
582
641
|
}
|
|
@@ -623,7 +682,21 @@ interface ArtifactStore {
|
|
|
623
682
|
}
|
|
624
683
|
//#endregion
|
|
625
684
|
//#region src/interaction/types.d.ts
|
|
685
|
+
/**
|
|
686
|
+
* 交互的发起方标识(FR-11.6)。串行委派下父 agent 与子 agent 都能发起交互,
|
|
687
|
+
* 缺了这个标识用户无法判断弹出来的表单属于哪个子任务。
|
|
688
|
+
* 缺省即父 agent 自己发起。
|
|
689
|
+
* @experimental
|
|
690
|
+
*/
|
|
691
|
+
interface InteractionOrigin {
|
|
692
|
+
/** 展示用标签,通常是子任务标题 */
|
|
693
|
+
label: string;
|
|
694
|
+
/** 关联的待办条目 */
|
|
695
|
+
todoId?: string;
|
|
696
|
+
}
|
|
626
697
|
type InteractionRequest = {
|
|
698
|
+
origin?: InteractionOrigin;
|
|
699
|
+
} & ({
|
|
627
700
|
type: 'ask';
|
|
628
701
|
id: string;
|
|
629
702
|
message: string;
|
|
@@ -656,7 +729,7 @@ type InteractionRequest = {
|
|
|
656
729
|
capability: 'readReference' | 'writeArtifact' | 'confirm';
|
|
657
730
|
message: string;
|
|
658
731
|
details?: unknown;
|
|
659
|
-
};
|
|
732
|
+
});
|
|
660
733
|
interface InteractionResponse {
|
|
661
734
|
id: string;
|
|
662
735
|
value?: unknown;
|
|
@@ -703,14 +776,16 @@ interface RenderResultRequest {
|
|
|
703
776
|
artifacts?: Artifact[];
|
|
704
777
|
}
|
|
705
778
|
/** A user action exposed by a generative UI surface. @experimental */
|
|
706
|
-
interface
|
|
779
|
+
interface UiSpecActionCapability {
|
|
780
|
+
/** Matches the `id` of the interactive node that declares the action. */
|
|
707
781
|
id: string;
|
|
708
|
-
label: string;
|
|
709
782
|
intent: 'submit' | 'cancel' | 'select' | 'download' | 'refresh';
|
|
710
|
-
disabled?: boolean;
|
|
711
783
|
/** Requests that the producing run waits for this action before continuing. @experimental */
|
|
712
784
|
awaitResponse?: boolean;
|
|
713
|
-
/**
|
|
785
|
+
/**
|
|
786
|
+
* Runtime-generated action capability. Kept out of the node tree on purpose:
|
|
787
|
+
* the tree is model-writable, so a nonce carried inside it would be forgeable.
|
|
788
|
+
*/
|
|
714
789
|
nonce?: string;
|
|
715
790
|
}
|
|
716
791
|
/** A runtime-owned request for a user action on a rendered UI surface. @experimental */
|
|
@@ -718,7 +793,7 @@ interface UiSurfaceActionRequest {
|
|
|
718
793
|
runId: string;
|
|
719
794
|
surfaceId: string;
|
|
720
795
|
actionId: string;
|
|
721
|
-
intent:
|
|
796
|
+
intent: UiSpecActionCapability['intent'];
|
|
722
797
|
nonce: string;
|
|
723
798
|
}
|
|
724
799
|
/** A structured action returned by a renderer to the waiting run. @experimental */
|
|
@@ -727,75 +802,26 @@ interface UiSurfaceActionResponse extends UiSurfaceActionRequest {
|
|
|
727
802
|
cancelled?: boolean;
|
|
728
803
|
}
|
|
729
804
|
/** Serializable draft values for forms that belong to one interrupted run. @experimental */
|
|
730
|
-
type
|
|
731
|
-
/** A
|
|
732
|
-
interface
|
|
733
|
-
name: string;
|
|
734
|
-
label: string;
|
|
735
|
-
type: 'text' | 'number' | 'date' | 'textarea' | 'select' | 'multi-select' | 'toggle' | 'file';
|
|
736
|
-
required?: boolean;
|
|
737
|
-
description?: string;
|
|
738
|
-
defaultValue?: unknown;
|
|
739
|
-
options?: Array<{
|
|
740
|
-
label: string;
|
|
741
|
-
value: unknown;
|
|
742
|
-
}>;
|
|
743
|
-
}
|
|
744
|
-
/** Framework-neutral generative UI surface. @experimental */
|
|
745
|
-
type UiSurface = {
|
|
746
|
-
kind: 'form';
|
|
747
|
-
id: string;
|
|
748
|
-
title?: string;
|
|
749
|
-
fields: UiSurfaceFormField[];
|
|
750
|
-
actions: UiSurfaceAction[];
|
|
751
|
-
} | {
|
|
752
|
-
kind: 'chart';
|
|
753
|
-
id: string;
|
|
754
|
-
chart: ChartSpec;
|
|
755
|
-
actions?: UiSurfaceAction[];
|
|
756
|
-
} | {
|
|
757
|
-
kind: 'table';
|
|
758
|
-
id: string;
|
|
759
|
-
columns: string[];
|
|
760
|
-
rows: unknown[][];
|
|
761
|
-
actions?: UiSurfaceAction[];
|
|
762
|
-
} | {
|
|
763
|
-
kind: 'metric';
|
|
764
|
-
id: string;
|
|
765
|
-
label: string;
|
|
766
|
-
value: string | number;
|
|
767
|
-
trend?: 'up' | 'down' | 'neutral';
|
|
768
|
-
} | {
|
|
769
|
-
kind: 'file';
|
|
770
|
-
id: string;
|
|
771
|
-
path: string;
|
|
772
|
-
mimeType?: string;
|
|
773
|
-
size?: number;
|
|
774
|
-
actions?: UiSurfaceAction[];
|
|
775
|
-
} | {
|
|
776
|
-
kind: 'custom';
|
|
777
|
-
id: string;
|
|
778
|
-
component: string;
|
|
779
|
-
props: unknown;
|
|
780
|
-
actions?: UiSurfaceAction[];
|
|
781
|
-
};
|
|
782
|
-
/** A bounded mutation applied to an existing UI surface. @experimental */
|
|
783
|
-
interface UiSurfacePatch {
|
|
805
|
+
type UiSpecDrafts = Record<string, Record<string, unknown>>;
|
|
806
|
+
/** A bounded mutation applied to an existing UI spec tree. @experimental */
|
|
807
|
+
interface UiSpecPatch {
|
|
784
808
|
op: 'replace' | 'merge' | 'append';
|
|
785
809
|
path: string;
|
|
786
810
|
value: unknown;
|
|
787
811
|
}
|
|
788
812
|
/** Incremental lifecycle event for a framework-neutral generative UI surface. @experimental */
|
|
789
|
-
type
|
|
813
|
+
type UiSpecEvent = {
|
|
790
814
|
runId?: string;
|
|
791
815
|
} & ({
|
|
792
816
|
type: 'open';
|
|
793
|
-
|
|
817
|
+
id: string;
|
|
818
|
+
node: UiSpecNode;
|
|
819
|
+
actions?: UiSpecActionCapability[];
|
|
794
820
|
} | {
|
|
795
821
|
type: 'patch';
|
|
796
822
|
id: string;
|
|
797
823
|
revision: number;
|
|
798
|
-
operations:
|
|
824
|
+
operations: UiSpecPatch[];
|
|
799
825
|
} | {
|
|
800
826
|
type: 'complete';
|
|
801
827
|
id: string;
|
|
@@ -810,8 +836,10 @@ type UiSurfaceEvent = {
|
|
|
810
836
|
id: string;
|
|
811
837
|
});
|
|
812
838
|
/** Persisted state of a generative UI surface. @experimental */
|
|
813
|
-
interface
|
|
814
|
-
|
|
839
|
+
interface UiSpecSnapshot {
|
|
840
|
+
id: string;
|
|
841
|
+
node: UiSpecNode;
|
|
842
|
+
actions?: UiSpecActionCapability[];
|
|
815
843
|
revision: number;
|
|
816
844
|
status: 'active' | 'complete' | 'error' | 'cancelled';
|
|
817
845
|
/** Immutable producing run; supplied on open to support session persistence and replay. */
|
|
@@ -834,7 +862,7 @@ interface UiBridge {
|
|
|
834
862
|
/** 定义即可,阶段 7 消费 */
|
|
835
863
|
renderResult?(input: RenderResultRequest): Promise<void>;
|
|
836
864
|
/** Framework-neutral generative UI surface stream. @experimental */
|
|
837
|
-
renderSurface?(event:
|
|
865
|
+
renderSurface?(event: UiSpecEvent): Promise<void>;
|
|
838
866
|
/** Waits for an action declared with awaitResponse; optional for compatibility with legacy bridges. @experimental */
|
|
839
867
|
requestSurfaceAction?(input: UiSurfaceActionRequest): Promise<UiSurfaceActionResponse>;
|
|
840
868
|
/** Best-effort cleanup when a surface action wait times out or is cancelled. @experimental */
|
|
@@ -853,6 +881,17 @@ interface FormField {
|
|
|
853
881
|
label: string;
|
|
854
882
|
value: unknown;
|
|
855
883
|
}>;
|
|
884
|
+
/** 跨会话稳定的字段标识 `<skillName>#<fieldName>`(FR-5.6);缺省表示该字段不参与召回 */
|
|
885
|
+
fieldKey?: string;
|
|
886
|
+
/**
|
|
887
|
+
* 上次填写值(FR-5.9)。**刻意不叫 defaultValue**:渲染器会把 defaultValue 直接填进控件,
|
|
888
|
+
* 而历史值可能是手机号、地址甚至凭据,必须由用户看到后主动采纳。
|
|
889
|
+
* @experimental
|
|
890
|
+
*/
|
|
891
|
+
suggestion?: {
|
|
892
|
+
value: unknown;
|
|
893
|
+
ts: number;
|
|
894
|
+
};
|
|
856
895
|
}
|
|
857
896
|
interface InteractionPolicy {
|
|
858
897
|
/** 缺必填参数策略:默认 'user'(表单问用户),'llm' 回喂自愈 */
|
|
@@ -878,4 +917,4 @@ interface MemoryStore {
|
|
|
878
917
|
transaction?<T>(scope: string, fn: (inner: MemoryStore) => Promise<T>): Promise<T>;
|
|
879
918
|
}
|
|
880
919
|
//#endregion
|
|
881
|
-
export {
|
|
920
|
+
export { SkillDiscovery as $, CryptoKeyLike as A, isValidSkillName as At, PageQuery as B, renderCatalogJson as Bt, UiSpecEvent as C, buildCatalog as Ct, UiSurfaceActionResponse as D, computeDigest as Dt, UiSurfaceActionRequest as E, checkSkillRules as Et, FsTrustedKeyStore as F, parseSkillMarkdown as Ft, SKILL_NAME_MAX_LENGTH as G, unzipWithLimits as Gt, SIGNATURE_SCHEMA_VERSION as H, resolveInsideRoot as Ht, JsonSchema as I, parseSkillPackManifest as It, SKILL_SIGNATURE_FILE as J, verifySkillSignature as Jt, SKILL_NAME_PATTERN as K, validateSkills as Kt, MANIFEST_EXCLUDED_FILES as L, readResponseWithLimit as Lt, DiscoveryResult as M, keyIdOf as Mt, FileStat as N, messageOf as Nt, ArchiveLimits as O, escapeXml as Ot, FileSystemProvider as P, normalizePath as Pt, SkillCatalogEntry as Q, MemoryFS as R, readSkillSignature as Rt, UiSpecDrafts as S, atomicWriteText as St, UiSpecSnapshot as T, checkDependencyCycles as Tt, SKILLS_LOCKFILE as U, signSkill as Ut, RemoteUrlPolicy as V, resolveArchiveLimits as Vt, SKILL_MANIFEST_FILE as W, signaturePayloadBytes as Wt, SignatureVerdict as X, SignatureAuditSink as Y, xmlRenderer as Yt, SkillCatalog as Z, MemoryStore as _, VerifyResult as _t, InteractionOrigin as a, SkillManifest as at, UiBridge as b, assertRemoteUrlAllowed as bt, InteractionResponse as c, SkillReader as ct, LlmContentPart as d, SkillsLockfile as dt, SkillDocument as et, LlmMessage as f, TrustedKey as ft, LlmToolSpec as g, ValidationReport as gt, LlmToolCall as h, UnsignedPolicy as ht, FormField as i, SkillManagerPort as it, DEFAULT_ARCHIVE_LIMITS as j, jsonRenderer as jt, CatalogRenderer as k, exportSkills as kt, LlmClient as l, SkillSignature as lt, LlmStreamEvent as m, UiSpecNode as mt, ArtifactStore as n, SkillIssue as nt, InteractionPolicy as o, SkillMetadata as ot, LlmResponse as p, TrustedKeyStore as pt, SKILL_PACK_FILE as q, verifyManifest as qt, ChartSpec as r, SkillLocation as rt, InteractionRequest as s, SkillPackManifest as st, Artifact as t, SkillInstallSource as tt, LlmCompleteInput as u, SkillSource as ut, RenderBlock as v, WebSkillError as vt, UiSpecPatch as w, buildManifest as wt, UiSpecActionCapability as x, assertSafePathSegment as xt, RenderResultRequest as y, WebSkillErrorCode as yt, Page as z, renderAvailableSkillsXml as zt };
|