@agentvault/agentvault 0.14.30 → 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/README.md +3 -1
- package/dist/account-config.js +60 -0
- package/dist/account-config.js.map +1 -0
- package/dist/channel.d.ts +5 -0
- package/dist/channel.d.ts.map +1 -1
- package/dist/channel.js +3411 -0
- package/dist/channel.js.map +1 -0
- package/dist/cli.js +253 -72006
- package/dist/cli.js.map +1 -7
- package/dist/create-agent.js +314 -0
- package/dist/create-agent.js.map +1 -0
- package/dist/crypto-helpers.js +4 -0
- package/dist/crypto-helpers.js.map +1 -0
- package/dist/doctor.js +415 -0
- package/dist/doctor.js.map +1 -0
- package/dist/fetch-interceptor.js +213 -0
- package/dist/fetch-interceptor.js.map +1 -0
- package/dist/gateway-send.js +114 -0
- package/dist/gateway-send.js.map +1 -0
- package/dist/http-handlers.js +131 -0
- package/dist/http-handlers.js.map +1 -0
- package/dist/index.js +24 -76340
- package/dist/index.js.map +1 -7
- package/dist/mcp-handlers.js +48 -0
- package/dist/mcp-handlers.js.map +1 -0
- package/dist/mcp-server.js +192 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/openclaw-compat.js +94 -0
- package/dist/openclaw-compat.js.map +1 -0
- package/dist/openclaw-entry.d.ts.map +1 -1
- package/dist/openclaw-entry.js +1204 -1414
- package/dist/openclaw-entry.js.map +1 -7
- package/dist/openclaw-plugin.js +297 -0
- package/dist/openclaw-plugin.js.map +1 -0
- package/dist/openclaw-types.js +13 -0
- package/dist/openclaw-types.js.map +1 -0
- package/dist/setup.js +460 -0
- package/dist/setup.js.map +1 -0
- package/dist/skill-invoker.js +100 -0
- package/dist/skill-invoker.js.map +1 -0
- package/dist/skill-manifest.js +249 -0
- package/dist/skill-manifest.js.map +1 -0
- package/dist/skill-telemetry.js +146 -0
- package/dist/skill-telemetry.js.map +1 -0
- package/dist/skills-publish.js +133 -0
- package/dist/skills-publish.js.map +1 -0
- package/dist/state.js +178 -0
- package/dist/state.js.map +1 -0
- package/dist/transport.js +43 -0
- package/dist/transport.js.map +1 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/workspace-handlers.js +177 -0
- package/dist/workspace-handlers.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create an HTTP request handler for MCP routes.
|
|
3
|
+
*
|
|
4
|
+
* Routes:
|
|
5
|
+
* POST /mcp — MCP Streamable HTTP messages
|
|
6
|
+
* GET /mcp — MCP SSE stream (for server-initiated messages)
|
|
7
|
+
* DELETE /mcp — Close MCP session
|
|
8
|
+
*
|
|
9
|
+
* All other paths are passed through to the next handler.
|
|
10
|
+
*/
|
|
11
|
+
export function createMcpHandler(mcpServer, basePath = "/mcp") {
|
|
12
|
+
return (req, res, next) => {
|
|
13
|
+
const url = new URL(req.url ?? "/", `http://${req.headers.host ?? "localhost"}`);
|
|
14
|
+
const pathname = url.pathname;
|
|
15
|
+
// Only handle requests to the MCP path
|
|
16
|
+
if (!pathname.startsWith(basePath)) {
|
|
17
|
+
if (next)
|
|
18
|
+
next();
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (!mcpServer) {
|
|
22
|
+
res.writeHead(503, { "Content-Type": "application/json" });
|
|
23
|
+
res.end(JSON.stringify({ error: "MCP server not initialized" }));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
// Delegate to the MCP server
|
|
27
|
+
mcpServer.handleRequest(req, res).catch((err) => {
|
|
28
|
+
console.error("[MCP] Request handling error:", err);
|
|
29
|
+
if (!res.headersSent) {
|
|
30
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
31
|
+
res.end(JSON.stringify({ error: "Internal MCP error" }));
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Build a status object with MCP info for the /status endpoint.
|
|
38
|
+
*/
|
|
39
|
+
export function getMcpStatus(mcpServer) {
|
|
40
|
+
if (!mcpServer) {
|
|
41
|
+
return { mcp_enabled: false, mcp_skills_count: 0 };
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
mcp_enabled: true,
|
|
45
|
+
mcp_skills_count: mcpServer.skillCount,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=mcp-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-handlers.js","sourceRoot":"","sources":["../src/mcp-handlers.ts"],"names":[],"mappings":"AAQA;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAqC,EACrC,WAAmB,MAAM;IAEzB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAE9B,uCAAuC;QACvC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,IAAI,IAAI;gBAAE,IAAI,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QAED,6BAA6B;QAC7B,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACvD,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;YACpD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACrB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,SAAqC;IAErC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;IACrD,CAAC;IACD,OAAO;QACL,WAAW,EAAE,IAAI;QACjB,gBAAgB,EAAE,SAAS,CAAC,UAAU;KACvC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentVault MCP Server — serves agent skills as MCP tools.
|
|
3
|
+
*
|
|
4
|
+
* Uses Streamable HTTP transport mounted on the plugin's HTTP server.
|
|
5
|
+
* Auth: SPT Bearer tokens validated via POST /capabilities/introspect.
|
|
6
|
+
*
|
|
7
|
+
* Design:
|
|
8
|
+
* - One McpServer instance is created at startup and skills are registered as tools.
|
|
9
|
+
* - Each incoming HTTP request creates a fresh StreamableHTTPServerTransport (stateless mode).
|
|
10
|
+
* - After the transport handles the request, close() is called so the server can
|
|
11
|
+
* accept the next connection (Protocol enforces single-transport at a time).
|
|
12
|
+
*/
|
|
13
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
14
|
+
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
15
|
+
/* -------------------------------------------------------------------------- */
|
|
16
|
+
/* AgentVaultMcpServer */
|
|
17
|
+
/* -------------------------------------------------------------------------- */
|
|
18
|
+
export class AgentVaultMcpServer {
|
|
19
|
+
server;
|
|
20
|
+
skills = new Map();
|
|
21
|
+
opts;
|
|
22
|
+
initialized = false;
|
|
23
|
+
constructor(opts) {
|
|
24
|
+
this.opts = opts;
|
|
25
|
+
this.server = new McpServer({
|
|
26
|
+
name: `agentvault-${opts.agentName}`,
|
|
27
|
+
version: "1.0.0",
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/* ---- Skill registration ------------------------------------------------ */
|
|
31
|
+
/**
|
|
32
|
+
* Register a skill that will be exposed as an MCP tool.
|
|
33
|
+
* Must be called *before* `initialize()`.
|
|
34
|
+
*/
|
|
35
|
+
registerSkill(skill) {
|
|
36
|
+
this.skills.set(skill.name, skill);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Register all skills as MCP tools / resources / prompts.
|
|
40
|
+
* Called lazily on first request if not called explicitly.
|
|
41
|
+
*/
|
|
42
|
+
initialize() {
|
|
43
|
+
if (this.initialized)
|
|
44
|
+
return;
|
|
45
|
+
for (const [name, skill] of this.skills) {
|
|
46
|
+
this.registerToolForSkill(name, skill);
|
|
47
|
+
}
|
|
48
|
+
// Registry resource — lists all registered skills as JSON.
|
|
49
|
+
this.server.resource("skills-registry", "skills://registry", { description: "List of all registered agent skills", mimeType: "application/json" }, async () => {
|
|
50
|
+
const registry = Array.from(this.skills.values()).map((s) => ({
|
|
51
|
+
name: s.name,
|
|
52
|
+
version: s.version,
|
|
53
|
+
description: s.description,
|
|
54
|
+
tags: s.tags,
|
|
55
|
+
sla: s.slaDefinition,
|
|
56
|
+
hasSchema: !!s.inputSchema,
|
|
57
|
+
hasInstructions: !!s.instructions,
|
|
58
|
+
}));
|
|
59
|
+
return {
|
|
60
|
+
contents: [{
|
|
61
|
+
uri: "skills://registry",
|
|
62
|
+
mimeType: "application/json",
|
|
63
|
+
text: JSON.stringify(registry, null, 2),
|
|
64
|
+
}],
|
|
65
|
+
};
|
|
66
|
+
});
|
|
67
|
+
// Skills that carry instructions are also surfaced as MCP prompts.
|
|
68
|
+
for (const [name, skill] of this.skills) {
|
|
69
|
+
if (skill.instructions) {
|
|
70
|
+
this.server.prompt(name, skill.description ?? `Instructions for ${name}`, () => ({
|
|
71
|
+
messages: [{
|
|
72
|
+
role: "user",
|
|
73
|
+
content: { type: "text", text: skill.instructions },
|
|
74
|
+
}],
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
this.initialized = true;
|
|
79
|
+
}
|
|
80
|
+
/* ---- HTTP request handler ---------------------------------------------- */
|
|
81
|
+
/**
|
|
82
|
+
* Handle an incoming HTTP request to the /mcp endpoint.
|
|
83
|
+
*
|
|
84
|
+
* Supports the Streamable HTTP transport protocol:
|
|
85
|
+
* - POST for JSON-RPC messages
|
|
86
|
+
* - GET for SSE notification stream
|
|
87
|
+
* - DELETE for session close
|
|
88
|
+
*
|
|
89
|
+
* Each request gets a fresh stateless transport; after the response is
|
|
90
|
+
* flushed the transport + underlying protocol connection are torn down
|
|
91
|
+
* so the single McpServer instance is ready for the next caller.
|
|
92
|
+
*/
|
|
93
|
+
async handleRequest(req, res) {
|
|
94
|
+
if (!this.initialized) {
|
|
95
|
+
this.initialize();
|
|
96
|
+
}
|
|
97
|
+
// --- Auth: require SPT Bearer token ---
|
|
98
|
+
const authHeader = req.headers.authorization;
|
|
99
|
+
if (!authHeader?.startsWith("Bearer ")) {
|
|
100
|
+
res.writeHead(401, { "Content-Type": "application/json" });
|
|
101
|
+
res.end(JSON.stringify({ error: "Missing or invalid Authorization header" }));
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const token = authHeader.slice(7);
|
|
105
|
+
const valid = await this.validateSpt(token);
|
|
106
|
+
if (!valid) {
|
|
107
|
+
res.writeHead(403, { "Content-Type": "application/json" });
|
|
108
|
+
res.end(JSON.stringify({ error: "Invalid or expired SPT token" }));
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
// --- Stateless transport per request ---
|
|
112
|
+
const transport = new StreamableHTTPServerTransport({
|
|
113
|
+
sessionIdGenerator: undefined, // stateless
|
|
114
|
+
});
|
|
115
|
+
await this.server.connect(transport);
|
|
116
|
+
try {
|
|
117
|
+
await transport.handleRequest(req, res);
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
// Tear down so the McpServer can accept the next connection.
|
|
121
|
+
// transport.close() triggers Protocol._onclose() which clears _transport.
|
|
122
|
+
await transport.close();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/* ---- Private helpers --------------------------------------------------- */
|
|
126
|
+
/**
|
|
127
|
+
* Register a single skill as an MCP tool.
|
|
128
|
+
*
|
|
129
|
+
* The MCP SDK's `tool()` overloads that accept a schema expect Zod types.
|
|
130
|
+
* Since our skill definitions use raw JSON Schema we register without
|
|
131
|
+
* schema validation (name + description + handler) and let the handler
|
|
132
|
+
* receive the raw args object.
|
|
133
|
+
*/
|
|
134
|
+
registerToolForSkill(name, skill) {
|
|
135
|
+
const description = skill.description ?? `AgentVault skill: ${name}`;
|
|
136
|
+
this.server.tool(name, description, async (args) => {
|
|
137
|
+
if (!this.opts.onInvoke) {
|
|
138
|
+
return {
|
|
139
|
+
content: [{ type: "text", text: `Skill "${name}" invoked but no handler registered` }],
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
const result = await this.opts.onInvoke(name, args);
|
|
144
|
+
const text = typeof result === "string" ? result : JSON.stringify(result, null, 2);
|
|
145
|
+
return {
|
|
146
|
+
content: [{ type: "text", text }],
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
151
|
+
return {
|
|
152
|
+
content: [{ type: "text", text: `Error invoking skill "${name}": ${message}` }],
|
|
153
|
+
isError: true,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Validate a Service Provider Token against the AgentVault backend.
|
|
160
|
+
*/
|
|
161
|
+
async validateSpt(token) {
|
|
162
|
+
try {
|
|
163
|
+
const url = `${this.opts.apiUrl}/api/v1/capabilities/introspect`;
|
|
164
|
+
const headers = {
|
|
165
|
+
"Content-Type": "application/json",
|
|
166
|
+
};
|
|
167
|
+
if (this.opts.apiKey) {
|
|
168
|
+
headers["Authorization"] = `Bearer ${this.opts.apiKey}`;
|
|
169
|
+
}
|
|
170
|
+
const resp = await fetch(url, {
|
|
171
|
+
method: "POST",
|
|
172
|
+
headers,
|
|
173
|
+
body: JSON.stringify({ token }),
|
|
174
|
+
});
|
|
175
|
+
if (!resp.ok)
|
|
176
|
+
return false;
|
|
177
|
+
const data = (await resp.json());
|
|
178
|
+
return data.active === true;
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/* ---- Accessors --------------------------------------------------------- */
|
|
185
|
+
get skillCount() {
|
|
186
|
+
return this.skills.size;
|
|
187
|
+
}
|
|
188
|
+
get isInitialized() {
|
|
189
|
+
return this.initialized;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw SDK compatibility layer — dynamic import wrappers with caching.
|
|
3
|
+
*
|
|
4
|
+
* Each wrapper attempts to import a deep SDK module at runtime. If the import
|
|
5
|
+
* fails (older gateway, missing SDK), the function returns a no-op result.
|
|
6
|
+
* Results are cached after the first attempt.
|
|
7
|
+
*
|
|
8
|
+
* IMPORTANT: All imports are guarded by try/catch — the plugin degrades
|
|
9
|
+
* gracefully on older OpenClaw versions.
|
|
10
|
+
*/
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// requestHeartbeatNow — wake agent proactively before outbound sends
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
let _heartbeatFn = null;
|
|
15
|
+
/**
|
|
16
|
+
* Request an immediate heartbeat wake from the OpenClaw gateway.
|
|
17
|
+
* Returns true if the heartbeat API was available and called, false otherwise.
|
|
18
|
+
* Never throws.
|
|
19
|
+
*/
|
|
20
|
+
export async function requestHeartbeatNow(opts) {
|
|
21
|
+
if (_heartbeatFn === null) {
|
|
22
|
+
try {
|
|
23
|
+
// @ts-expect-error — deep SDK import only available when openclaw is installed
|
|
24
|
+
const mod = await import("openclaw/dist/plugin-sdk/infra/heartbeat-wake.js");
|
|
25
|
+
_heartbeatFn = mod.requestHeartbeatNow ?? mod.default?.requestHeartbeatNow ?? false;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
_heartbeatFn = false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (typeof _heartbeatFn === "function") {
|
|
32
|
+
try {
|
|
33
|
+
await _heartbeatFn(opts);
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
let _agentEventFn = null;
|
|
43
|
+
/**
|
|
44
|
+
* Subscribe to agent-level events (tool_use, reasoning_complete, error, etc.).
|
|
45
|
+
* Returns an unsubscribe function, or a no-op if the API is unavailable.
|
|
46
|
+
*/
|
|
47
|
+
export async function onAgentEvent(callback) {
|
|
48
|
+
if (_agentEventFn === null) {
|
|
49
|
+
try {
|
|
50
|
+
// @ts-expect-error — deep SDK import only available when openclaw is installed
|
|
51
|
+
const mod = await import("openclaw/dist/plugin-sdk/infra/agent-events.js");
|
|
52
|
+
_agentEventFn = mod.onAgentEvent ?? mod.default?.onAgentEvent ?? false;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
_agentEventFn = false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (typeof _agentEventFn === "function") {
|
|
59
|
+
try {
|
|
60
|
+
return _agentEventFn(callback);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return () => { };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return () => { };
|
|
67
|
+
}
|
|
68
|
+
let _transcriptFn = null;
|
|
69
|
+
/**
|
|
70
|
+
* Subscribe to session transcript updates for behavioral analysis.
|
|
71
|
+
* Returns an unsubscribe function, or a no-op if the API is unavailable.
|
|
72
|
+
*/
|
|
73
|
+
export async function onSessionTranscriptUpdate(callback) {
|
|
74
|
+
if (_transcriptFn === null) {
|
|
75
|
+
try {
|
|
76
|
+
// @ts-expect-error — deep SDK import only available when openclaw is installed
|
|
77
|
+
const mod = await import("openclaw/dist/plugin-sdk/sessions/transcript-events.js");
|
|
78
|
+
_transcriptFn = mod.onSessionTranscriptUpdate ?? mod.default?.onSessionTranscriptUpdate ?? false;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
_transcriptFn = false;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (typeof _transcriptFn === "function") {
|
|
85
|
+
try {
|
|
86
|
+
return _transcriptFn(callback);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return () => { };
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return () => { };
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=openclaw-compat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-compat.js","sourceRoot":"","sources":["../src/openclaw-compat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,8EAA8E;AAC9E,qEAAqE;AACrE,8EAA8E;AAE9E,IAAI,YAAY,GAAmE,IAAI,CAAC;AAExF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAA0B;IAClE,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,+EAA+E;YAC/E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,kDAAkD,CAAC,CAAC;YAC7E,YAAY,GAAG,GAAG,CAAC,mBAAmB,IAAI,GAAG,CAAC,OAAO,EAAE,mBAAmB,IAAI,KAAK,CAAC;QACtF,CAAC;QAAC,MAAM,CAAC;YACP,YAAY,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAOD,IAAI,aAAa,GAA8D,IAAI,CAAC;AAEpF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAA4B;IAC7D,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,+EAA+E;YAC/E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,gDAAgD,CAAC,CAAC;YAC3E,aAAa,GAAG,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,OAAO,EAAE,YAAY,IAAI,KAAK,CAAC;QACzE,CAAC;QAAC,MAAM,CAAC;YACP,aAAa,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;AAClB,CAAC;AAOD,IAAI,aAAa,GAA8D,IAAI,CAAC;AAEpF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,QAA4B;IAC1E,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,+EAA+E;YAC/E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,wDAAwD,CAAC,CAAC;YACnF,aAAa,GAAG,GAAG,CAAC,yBAAyB,IAAI,GAAG,CAAC,OAAO,EAAE,yBAAyB,IAAI,KAAK,CAAC;QACnG,CAAC;QAAC,MAAM,CAAC;YACP,aAAa,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw-entry.d.ts","sourceRoot":"","sources":["../src/openclaw-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,KAAK,EACV,iBAAiB,EASlB,MAAM,qBAAqB,CAAC;AAsD7B,gFAAgF;AAChF,eAAO,IAAI,oBAAoB,SAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"openclaw-entry.d.ts","sourceRoot":"","sources":["../src/openclaw-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,KAAK,EACV,iBAAiB,EASlB,MAAM,qBAAqB,CAAC;AAsD7B,gFAAgF;AAChF,eAAO,IAAI,oBAAoB,SAAQ,CAAC;AA6CxC,uEAAuE;AACvE,iBAAS,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAS9C;AAED,qFAAqF;AACrF,iBAAS,yBAAyB,CAChC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAcT;AAED,sFAAsF;AACtF,iBAAS,cAAc,CACrB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,CAiBR;AAk1BD,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,cAAc,EAAE,CAAC;;;;;kBAQrD,iBAAiB;;AAJjC,wBAoRE"}
|