@webskill/sdk 0.1.2 → 0.1.4
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/README.md +5 -2
- package/dist/browser.d.ts +2 -2
- package/dist/browser.js +54 -22
- package/dist/{dist-SarUS8EP.js → dist-BVXZF7H_.js} +177 -58
- package/dist/{dist-DRsnVw6A.js → dist-DAn07zHu.js} +452 -11
- package/dist/{dist-DS1sfgHa.js → dist-DvoBsChX.js} +13 -1
- package/dist/{dist-DxGyAznR.js → dist-MTc2KB03.js} +46 -3
- package/dist/governance.d.ts +7 -4
- package/dist/governance.js +19 -4
- package/dist/{index-fjRF4H5o.d.ts → index-BSS3EWY-.d.ts} +48 -2
- package/dist/{index-DkPK44Ji.d.ts → index-npFMt2Zw.d.ts} +27 -5
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/mcp.d.ts +25 -3
- package/dist/mcp.js +58 -13
- package/dist/node.d.ts +4 -4
- package/dist/node.js +4 -4
- package/dist/sandboxWorkerEntry.d.ts +1 -0
- package/dist/sandboxWorkerEntry.js +214 -0
- package/dist/{testing-CbM6rJ-E.js → testing-S8SN9Lc6.js} +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.js +1 -1
- package/dist/{types-CgNC-oQu-Dq_A1yA-.d.ts → types-CgNC-oQu-DYrxhD3z.d.ts} +11 -1
- package/dist/ui-react.d.ts +1 -1
- package/dist/ui-react.js +1 -1
- package/dist/ui-vue.d.ts +1 -1
- package/dist/ui-vue.js +1 -1
- package/dist/ui.d.ts +2 -2
- package/dist/ui.js +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { register } from "node:module";
|
|
2
|
+
import { pathToFileURL } from "node:url";
|
|
3
|
+
import { isMainThread, parentPort, workerData } from "node:worker_threads";
|
|
4
|
+
|
|
5
|
+
//#region ../node/dist/executor/sandboxWorkerEntry.js
|
|
6
|
+
/**
|
|
7
|
+
* D1 沙箱 Worker 入口(loader 文件形式,非内嵌字符串)。
|
|
8
|
+
* 主线程经 workerData 传入任务;脚本源码路径直接 import(.ts 依赖
|
|
9
|
+
* Node>=22.18 原生 type stripping,Worker 内同样生效)。
|
|
10
|
+
* 能力桥 RPC(readReference/writeArtifact/confirm)经 parentPort 消息。
|
|
11
|
+
*
|
|
12
|
+
* 网络与模块管控:
|
|
13
|
+
* - patch globalThis.fetch / globalThis.WebSocket(策略判定函数源码经 workerData
|
|
14
|
+
* 注入,匹配逻辑单一来源在 runtime/sandbox/networkPolicy.ts——Worker 线程不走
|
|
15
|
+
* vitest 别名、也不应反向依赖宿主打包产物,故注入而非 import)。
|
|
16
|
+
* - node: 内置模块 allowlist(module.register resolve 钩子):默认全禁
|
|
17
|
+
* (含 fs/child_process/net 等),执行器配置可显式放行指定模块。
|
|
18
|
+
* 能力面收敛,非安全边界(仍有绕过手段,禁止假定其可隔离不可信脚本)。
|
|
19
|
+
* - 网络阻断时 postMessage {type:'network-blocked', host} → 宿主记 run.warning(URL 脱敏只记 host)。
|
|
20
|
+
*/
|
|
21
|
+
const port = parentPort;
|
|
22
|
+
if (!port || isMainThread) throw new Error("sandboxWorkerEntry must run inside a worker thread");
|
|
23
|
+
const pending = /* @__PURE__ */ new Map();
|
|
24
|
+
let bridgeSeq = 0;
|
|
25
|
+
function callCapability(kind, payload) {
|
|
26
|
+
const request = {
|
|
27
|
+
kind,
|
|
28
|
+
id: `br-${++bridgeSeq}`,
|
|
29
|
+
...payload
|
|
30
|
+
};
|
|
31
|
+
return new Promise((resolve, reject) => {
|
|
32
|
+
pending.set(request.id, {
|
|
33
|
+
resolve,
|
|
34
|
+
reject
|
|
35
|
+
});
|
|
36
|
+
port.postMessage({
|
|
37
|
+
type: "bridge",
|
|
38
|
+
request
|
|
39
|
+
});
|
|
40
|
+
}).then((response) => {
|
|
41
|
+
const r = response;
|
|
42
|
+
if (!r.ok) {
|
|
43
|
+
const err = new Error(r.error?.message ?? "capability call failed");
|
|
44
|
+
err.code = r.error?.code ?? "TOOL_EXECUTION_FAILED";
|
|
45
|
+
throw err;
|
|
46
|
+
}
|
|
47
|
+
return r.value;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
async function loadModule(scriptPath) {
|
|
51
|
+
return await import(`${pathToFileURL(scriptPath).href}?t=${Date.now()}`);
|
|
52
|
+
}
|
|
53
|
+
function post(message) {
|
|
54
|
+
port.postMessage(message);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 裸模块 allowlist 钩子(data: URL 注册):
|
|
58
|
+
* 默认禁止一切 node: 内置模块(含 fs/child_process/process/vm/module/worker_threads 等),
|
|
59
|
+
* 仅 ALLOWED 清单(执行器配置注入)显式放行。网络裸模块语义合并统一:
|
|
60
|
+
* allowlist 为空即全禁(含 node:net/http/https/dgram/tls)。
|
|
61
|
+
*/
|
|
62
|
+
const MODULE_HOOK_SOURCE = `
|
|
63
|
+
var ALLOWED = new Set(%ALLOWED_MODULES%);
|
|
64
|
+
var TOP_BUILTINS = new Set(['assert','async_hooks','buffer','child_process','cluster','console','constants','crypto','dgram','diagnostics_channel','dns','domain','events','fs','http','http2','https','inspector','module','net','os','path','perf_hooks','process','punycode','querystring','readline','repl','sea','sqlite','stream','string_decoder','sys','test','timers','tls','trace_events','tty','url','util','v8','vm','wasi','worker_threads','zlib']);
|
|
65
|
+
function isAllowed(bare, name, top) {
|
|
66
|
+
return ALLOWED.has(bare) || ALLOWED.has(name) || ALLOWED.has('node:' + name) || ALLOWED.has(top) || ALLOWED.has('node:' + top);
|
|
67
|
+
}
|
|
68
|
+
export async function resolve(specifier, context, nextResolve) {
|
|
69
|
+
var bare = specifier.split('?')[0];
|
|
70
|
+
var name = bare.indexOf('node:') === 0 ? bare.slice(5) : bare;
|
|
71
|
+
var top = name.split('/')[0];
|
|
72
|
+
var isBuiltin = bare.indexOf('node:') === 0 || TOP_BUILTINS.has(top);
|
|
73
|
+
if (isBuiltin && !isAllowed(bare, name, top)) {
|
|
74
|
+
var err = new Error('Builtin module import blocked by sandbox module policy: ' + bare);
|
|
75
|
+
err.code = 'TOOL_UNSUPPORTED';
|
|
76
|
+
throw err;
|
|
77
|
+
}
|
|
78
|
+
return nextResolve(specifier, context);
|
|
79
|
+
}
|
|
80
|
+
`;
|
|
81
|
+
function blockedError(host) {
|
|
82
|
+
const err = /* @__PURE__ */ new Error(`Network request blocked by sandbox network policy: ${host}`);
|
|
83
|
+
err.code = "NETWORK_BLOCKED";
|
|
84
|
+
return err;
|
|
85
|
+
}
|
|
86
|
+
/** patch 全局 fetch / WebSocket;注册裸网络模块 denylist(allow-all 之外均启用) */
|
|
87
|
+
function setupNetworkGuards(task) {
|
|
88
|
+
const policy = task.networkPolicy ?? "deny-all";
|
|
89
|
+
if (!task.networkPolicyLib) return;
|
|
90
|
+
const { isNetworkAllowed, networkUrlHost } = new Function(`${task.networkPolicyLib}\nreturn { isNetworkAllowed: isNetworkAllowed, networkUrlHost: networkUrlHost };`)();
|
|
91
|
+
const gate = (rawUrl) => {
|
|
92
|
+
const url = String(rawUrl);
|
|
93
|
+
if (isNetworkAllowed(policy, url)) return null;
|
|
94
|
+
const host = networkUrlHost(url);
|
|
95
|
+
post({
|
|
96
|
+
type: "network-blocked",
|
|
97
|
+
host
|
|
98
|
+
});
|
|
99
|
+
return blockedError(host);
|
|
100
|
+
};
|
|
101
|
+
const originalFetch = globalThis["fetch"];
|
|
102
|
+
if (typeof originalFetch === "function") globalThis["fetch"] = (input, init) => {
|
|
103
|
+
const raw = typeof input === "string" ? input : input instanceof URL ? input.href : input?.url ?? String(input);
|
|
104
|
+
const blocked = gate(raw);
|
|
105
|
+
if (blocked) return Promise.reject(blocked);
|
|
106
|
+
return originalFetch(input, init);
|
|
107
|
+
};
|
|
108
|
+
const OriginalWebSocket = globalThis["WebSocket"];
|
|
109
|
+
if (typeof OriginalWebSocket === "function") globalThis["WebSocket"] = class extends OriginalWebSocket {
|
|
110
|
+
constructor(url, protocols) {
|
|
111
|
+
const blocked = gate(String(url));
|
|
112
|
+
if (blocked) throw blocked;
|
|
113
|
+
super(url, protocols);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
register(`data:text/javascript,${encodeURIComponent(MODULE_HOOK_SOURCE.replace("%ALLOWED_MODULES%", JSON.stringify(task.allowedModules ?? [])))}`);
|
|
117
|
+
}
|
|
118
|
+
async function main() {
|
|
119
|
+
const task = workerData;
|
|
120
|
+
setupNetworkGuards(task);
|
|
121
|
+
port.on("message", (msg) => {
|
|
122
|
+
if (msg?.type === "bridge-response" && msg.response?.id) {
|
|
123
|
+
const entry = pending.get(msg.response.id);
|
|
124
|
+
if (entry) {
|
|
125
|
+
pending.delete(msg.response.id);
|
|
126
|
+
entry.resolve(msg.response);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
if (task.mode === "load") {
|
|
131
|
+
try {
|
|
132
|
+
const mod = await loadModule(task.scriptPath);
|
|
133
|
+
post({
|
|
134
|
+
type: "load-result",
|
|
135
|
+
ok: true,
|
|
136
|
+
definition: {
|
|
137
|
+
description: typeof mod["description"] === "string" ? mod["description"] : void 0,
|
|
138
|
+
inputSchema: mod["inputSchema"] !== void 0 ? mod["inputSchema"] : void 0,
|
|
139
|
+
hasRun: typeof mod["run"] === "function"
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
} catch (e) {
|
|
143
|
+
post({
|
|
144
|
+
type: "load-result",
|
|
145
|
+
ok: false,
|
|
146
|
+
error: {
|
|
147
|
+
code: e?.code ?? "TOOL_EXECUTION_FAILED",
|
|
148
|
+
message: String(e?.message ?? e)
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const stdout = [];
|
|
155
|
+
const stderr = [];
|
|
156
|
+
const originals = {
|
|
157
|
+
log: console.log,
|
|
158
|
+
info: console.info,
|
|
159
|
+
debug: console.debug,
|
|
160
|
+
warn: console.warn,
|
|
161
|
+
error: console.error
|
|
162
|
+
};
|
|
163
|
+
console.log = console.info = console.debug = (...args) => stdout.push(args.map(String).join(" "));
|
|
164
|
+
console.warn = console.error = (...args) => stderr.push(args.map(String).join(" "));
|
|
165
|
+
try {
|
|
166
|
+
const mod = await loadModule(task.scriptPath);
|
|
167
|
+
if (typeof mod["run"] !== "function") throw new Error("Script does not export a run function");
|
|
168
|
+
const context = {
|
|
169
|
+
skillName: task.skillName ?? "",
|
|
170
|
+
runId: task.runId ?? "",
|
|
171
|
+
readReference: (path) => callCapability("readReference", { path }),
|
|
172
|
+
writeArtifact: (path, content, options) => callCapability("writeArtifact", {
|
|
173
|
+
path,
|
|
174
|
+
content: typeof content === "string" ? content : Array.from(content ?? []),
|
|
175
|
+
mimeType: options?.mimeType
|
|
176
|
+
}),
|
|
177
|
+
confirm: (message) => callCapability("confirm", { message })
|
|
178
|
+
};
|
|
179
|
+
const runFn = mod["run"];
|
|
180
|
+
const value = await runFn(task.args ?? {}, context);
|
|
181
|
+
post({
|
|
182
|
+
type: "execute-result",
|
|
183
|
+
ok: true,
|
|
184
|
+
value: value === void 0 ? null : value,
|
|
185
|
+
stdout,
|
|
186
|
+
stderr
|
|
187
|
+
});
|
|
188
|
+
} catch (e) {
|
|
189
|
+
const err = e;
|
|
190
|
+
post({
|
|
191
|
+
type: "execute-result",
|
|
192
|
+
ok: false,
|
|
193
|
+
error: {
|
|
194
|
+
code: err?.code ?? "TOOL_EXECUTION_FAILED",
|
|
195
|
+
message: String(err?.message ?? e)
|
|
196
|
+
},
|
|
197
|
+
stdout,
|
|
198
|
+
stderr
|
|
199
|
+
});
|
|
200
|
+
} finally {
|
|
201
|
+
console.log = originals.log;
|
|
202
|
+
console.info = originals.info;
|
|
203
|
+
console.debug = originals.debug;
|
|
204
|
+
console.warn = originals.warn;
|
|
205
|
+
console.error = originals.error;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
main().then(() => process.exit(0), (e) => {
|
|
209
|
+
console.error(e);
|
|
210
|
+
process.exit(1);
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
//#endregion
|
|
214
|
+
export { };
|
package/dist/testing.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as LlmClient, d as LlmResponse, f as LlmStreamEvent, h as MemoryStore, l as LlmCompleteInput, n as ArtifactStore, o as InteractionRequest, s as InteractionResponse, t as Artifact, v as UiBridge } from "./types-CgNC-oQu-
|
|
1
|
+
import { c as LlmClient, d as LlmResponse, f as LlmStreamEvent, h as MemoryStore, l as LlmCompleteInput, n as ArtifactStore, o as InteractionRequest, s as InteractionResponse, t as Artifact, v as UiBridge } from "./types-CgNC-oQu-DYrxhD3z.js";
|
|
2
2
|
//#region ../runtime/dist/testing.d.ts
|
|
3
3
|
//#region src/llm/mockLlmClient.d.ts
|
|
4
4
|
type MockLlmHandler = (input: LlmCompleteInput) => LlmResponse | Promise<LlmResponse>;
|
package/dist/testing.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { t as MemoryArtifactStore } from "./memoryArtifactStore-C9lFVqPF-yFz6yJj0.js";
|
|
2
|
-
import { n as MockLlmClient, r as MockUiBridge, t as InMemoryStore } from "./testing-
|
|
2
|
+
import { n as MockLlmClient, r as MockUiBridge, t as InMemoryStore } from "./testing-S8SN9Lc6.js";
|
|
3
3
|
|
|
4
4
|
export { InMemoryStore, MemoryArtifactStore, MockLlmClient, MockUiBridge };
|
|
@@ -146,9 +146,19 @@ declare class MemoryFS implements FileSystemProvider {
|
|
|
146
146
|
//#region src/fs/pathSecurity.d.ts
|
|
147
147
|
/** 统一分隔符为 `/`,去除 `.` 段与重复分隔符(不解析 `..`) */
|
|
148
148
|
declare function normalizePath(path: string): string;
|
|
149
|
+
/**
|
|
150
|
+
* 外部标识(runId、candidateId、skillName、versionId 等)作为单一路径段使用前的统一校验:
|
|
151
|
+
* 拒绝空串、`.`、`..`、含 `/` 或 `\`、含 `:`(Windows 盘符/ADS)。
|
|
152
|
+
* 违规抛 FS_PATH_OUTSIDE_ROOT(kind 用于错误消息定位,如 "runId")。
|
|
153
|
+
*/
|
|
154
|
+
declare function assertSafePathSegment(segment: string, kind: string): void;
|
|
149
155
|
/**
|
|
150
156
|
* 将相对路径安全地解析到 root 之内。
|
|
151
157
|
* 拒绝空路径、绝对路径(`/`、`\\`、`C:\` 形式)与任何 `..` 段。
|
|
158
|
+
*
|
|
159
|
+
* 注意:本函数仅做**词法**校验,不解析符号链接——root 内经符号链接指向
|
|
160
|
+
* 外部的目标无法被词法检查拦截(realpath 防护见 NodeFS root 模式与
|
|
161
|
+
* 安装管线的 lstat 符号链接扫描)。
|
|
152
162
|
*/
|
|
153
163
|
declare function resolveInsideRoot(root: string, relativePath: string): string;
|
|
154
164
|
//#endregion
|
|
@@ -536,4 +546,4 @@ interface MemoryStore {
|
|
|
536
546
|
clear(scope?: string): Promise<void>;
|
|
537
547
|
}
|
|
538
548
|
//#endregion
|
|
539
|
-
export {
|
|
549
|
+
export { escapeXml as $, SkillCatalog as A, SkillReader as B, JsonSchema as C, SKILL_NAME_MAX_LENGTH as D, SKILL_MANIFEST_FILE as E, SkillIssue as F, WebSkillError as G, SkillsLockfile as H, SkillLocation as I, buildCatalog as J, WebSkillErrorCode as K, SkillManifest as L, SkillDiscovery as M, SkillDocument as N, SKILL_NAME_PATTERN as O, SkillInstallSource as P, computeDigest as Q, SkillMetadata as R, FileSystemProvider as S, SKILLS_LOCKFILE as T, ValidationReport as U, SkillSource as V, VerifyResult as W, checkDependencyCycles as X, buildManifest as Y, checkSkillRules as Z, RenderResultRequest as _, InteractionPolicy as a, parseSkillPackManifest as at, DiscoveryResult as b, LlmClient as c, resolveInsideRoot as ct, LlmResponse as d, xmlRenderer as dt, exportSkills as et, LlmStreamEvent as f, RenderBlock as g, MemoryStore as h, FormField as i, parseSkillMarkdown as it, SkillCatalogEntry as j, SKILL_PACK_FILE as k, LlmCompleteInput as l, validateSkills as lt, LlmToolSpec as m, ArtifactStore as n, jsonRenderer as nt, InteractionRequest as o, renderAvailableSkillsXml as ot, LlmToolCall as p, assertSafePathSegment as q, ChartSpec as r, normalizePath as rt, InteractionResponse as s, renderCatalogJson as st, Artifact as t, isValidSkillName as tt, LlmMessage as u, verifyManifest as ut, UiBridge as v, MemoryFS as w, FileStat as x, CatalogRenderer as y, SkillPackManifest as z };
|
package/dist/ui-react.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as RenderResultRequest, o as InteractionRequest, s as InteractionResponse, v as UiBridge } from "./types-CgNC-oQu-
|
|
1
|
+
import { _ as RenderResultRequest, o as InteractionRequest, s as InteractionResponse, v as UiBridge } from "./types-CgNC-oQu-DYrxhD3z.js";
|
|
2
2
|
//#region ../ui-react/dist/index.d.ts
|
|
3
3
|
//#region src/bridgeState.d.ts
|
|
4
4
|
/**
|
package/dist/ui-react.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { S as renderMiniMarkdown, m as collectValues, w as shapeInteractionValue, x as renderMiniChart, y as interactionToFormModel } from "./dist-
|
|
1
|
+
import { S as renderMiniMarkdown, m as collectValues, w as shapeInteractionValue, x as renderMiniChart, y as interactionToFormModel } from "./dist-MTc2KB03.js";
|
|
2
2
|
import { useLayoutEffect, useRef, useState, useSyncExternalStore } from "react";
|
|
3
3
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
4
|
|
package/dist/ui-vue.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as RenderResultRequest, o as InteractionRequest, s as InteractionResponse, v as UiBridge } from "./types-CgNC-oQu-
|
|
1
|
+
import { _ as RenderResultRequest, o as InteractionRequest, s as InteractionResponse, v as UiBridge } from "./types-CgNC-oQu-DYrxhD3z.js";
|
|
2
2
|
import { PropType } from "vue";
|
|
3
3
|
//#region ../ui-vue/dist/index.d.ts
|
|
4
4
|
//#region src/bridgeState.d.ts
|
package/dist/ui-vue.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { S as renderMiniMarkdown, m as collectValues, w as shapeInteractionValue, x as renderMiniChart, y as interactionToFormModel } from "./dist-
|
|
1
|
+
import { S as renderMiniMarkdown, m as collectValues, w as shapeInteractionValue, x as renderMiniChart, y as interactionToFormModel } from "./dist-MTc2KB03.js";
|
|
2
2
|
import { defineComponent, h, reactive, ref } from "vue";
|
|
3
3
|
|
|
4
4
|
//#region ../ui-vue/dist/index.js
|
package/dist/ui.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { _ as RenderResultRequest, g as RenderBlock, o as InteractionRequest, r as ChartSpec, s as InteractionResponse, v as UiBridge } from "./types-CgNC-oQu-
|
|
2
|
-
import {
|
|
1
|
+
import { _ as RenderResultRequest, g as RenderBlock, o as InteractionRequest, r as ChartSpec, s as InteractionResponse, v as UiBridge } from "./types-CgNC-oQu-DYrxhD3z.js";
|
|
2
|
+
import { dt as buildRenderResult } from "./index-BSS3EWY-.js";
|
|
3
3
|
//#region ../ui/dist/index.d.ts
|
|
4
4
|
//#region src/model/formModel.d.ts
|
|
5
5
|
interface FormModel {
|
package/dist/ui.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { C as renderRenderResult, D as toVercelToolInvocation, E as toOpenUiLang, S as renderMiniMarkdown, T as toA2uiMessages, _ as fromOpenUiAction, a as CHART_PALETTE, b as renderBlocks, c as OPENUI_SUBMIT_ACTION, d as WEBSKILL_STYLES_CSS, f as WebFormBridge, g as fromA2uiAction, h as ensureStyles, i as A2UI_VERSION, l as VERCEL_INTERACTION_TOOL_NAME, m as collectValues, n as A2UI_CANCEL_ACTION, o as LitRendererBridge, p as chartToTable, r as A2UI_SUBMIT_ACTION, s as OPENUI_CANCEL_ACTION, t as A2UI_BASIC_CATALOG_ID, u as VercelUiBridge, v as fromVercelToolResult, w as shapeInteractionValue, x as renderMiniChart, y as interactionToFormModel } from "./dist-
|
|
1
|
+
import { C as buildRenderResult } from "./dist-DAn07zHu.js";
|
|
2
|
+
import { C as renderRenderResult, D as toVercelToolInvocation, E as toOpenUiLang, S as renderMiniMarkdown, T as toA2uiMessages, _ as fromOpenUiAction, a as CHART_PALETTE, b as renderBlocks, c as OPENUI_SUBMIT_ACTION, d as WEBSKILL_STYLES_CSS, f as WebFormBridge, g as fromA2uiAction, h as ensureStyles, i as A2UI_VERSION, l as VERCEL_INTERACTION_TOOL_NAME, m as collectValues, n as A2UI_CANCEL_ACTION, o as LitRendererBridge, p as chartToTable, r as A2UI_SUBMIT_ACTION, s as OPENUI_CANCEL_ACTION, t as A2UI_BASIC_CATALOG_ID, u as VercelUiBridge, v as fromVercelToolResult, w as shapeInteractionValue, x as renderMiniChart, y as interactionToFormModel } from "./dist-MTc2KB03.js";
|
|
3
3
|
|
|
4
4
|
export { A2UI_BASIC_CATALOG_ID, A2UI_CANCEL_ACTION, A2UI_SUBMIT_ACTION, A2UI_VERSION, CHART_PALETTE, LitRendererBridge, OPENUI_CANCEL_ACTION, OPENUI_SUBMIT_ACTION, VERCEL_INTERACTION_TOOL_NAME, VercelUiBridge, WEBSKILL_STYLES_CSS, WebFormBridge, buildRenderResult, chartToTable, collectValues, ensureStyles, fromA2uiAction, fromOpenUiAction, fromVercelToolResult, interactionToFormModel, renderBlocks, renderMiniChart, renderMiniMarkdown, renderRenderResult, shapeInteractionValue, toA2uiMessages, toOpenUiLang, toVercelToolInvocation };
|