@jait/gateway 0.1.274 → 0.1.276
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/clawhub/client.d.ts +105 -0
- package/dist/clawhub/client.d.ts.map +1 -0
- package/dist/clawhub/client.js +123 -0
- package/dist/clawhub/client.js.map +1 -0
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +22 -0
- package/dist/db/migrations.js.map +1 -1
- package/dist/db/schema.d.ts +216 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +14 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/foundation.d.ts +4 -1
- package/dist/foundation.d.ts.map +1 -1
- package/dist/foundation.js +2 -0
- package/dist/foundation.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +54 -0
- package/dist/index.js.map +1 -1
- package/dist/plugins/contracts.d.ts +44 -0
- package/dist/plugins/contracts.d.ts.map +1 -1
- package/dist/plugins/contracts.js +9 -0
- package/dist/plugins/contracts.js.map +1 -1
- package/dist/plugins/manager.d.ts +65 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +393 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/manifest.d.ts +69 -0
- package/dist/plugins/manifest.d.ts.map +1 -0
- package/dist/plugins/manifest.js +28 -0
- package/dist/plugins/manifest.js.map +1 -0
- package/dist/plugins/openclaw-adapter.d.ts +42 -0
- package/dist/plugins/openclaw-adapter.d.ts.map +1 -0
- package/dist/plugins/openclaw-adapter.js +236 -0
- package/dist/plugins/openclaw-adapter.js.map +1 -0
- package/dist/routes/chat.d.ts +2 -0
- package/dist/routes/chat.d.ts.map +1 -1
- package/dist/routes/chat.js +26 -3
- package/dist/routes/chat.js.map +1 -1
- package/dist/routes/mcp-server.d.ts.map +1 -1
- package/dist/routes/mcp-server.js +3 -0
- package/dist/routes/mcp-server.js.map +1 -1
- package/dist/routes/plugins.d.ts +16 -0
- package/dist/routes/plugins.d.ts.map +1 -0
- package/dist/routes/plugins.js +84 -0
- package/dist/routes/plugins.js.map +1 -0
- package/dist/routes/skills.d.ts +11 -0
- package/dist/routes/skills.d.ts.map +1 -0
- package/dist/routes/skills.js +39 -0
- package/dist/routes/skills.js.map +1 -0
- package/dist/routes/store.d.ts +21 -0
- package/dist/routes/store.d.ts.map +1 -0
- package/dist/routes/store.js +149 -0
- package/dist/routes/store.js.map +1 -0
- package/dist/routes/threads.d.ts +2 -0
- package/dist/routes/threads.d.ts.map +1 -1
- package/dist/routes/threads.js +9 -1
- package/dist/routes/threads.js.map +1 -1
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +20 -0
- package/dist/server.js.map +1 -1
- package/dist/skills/index.d.ts +71 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +176 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/tools/prompts/prompt-registry.d.ts +3 -0
- package/dist/tools/prompts/prompt-registry.d.ts.map +1 -1
- package/dist/tools/prompts/prompt-registry.js +5 -0
- package/dist/tools/prompts/prompt-registry.js.map +1 -1
- package/package.json +1 -1
- package/web-dist/assets/{_basePickBy-_w8ADSKe.js → _basePickBy-SHIq-9-M.js} +1 -1
- package/web-dist/assets/{_baseUniq-DoTWg3g_.js → _baseUniq-DvuVM3FL.js} +1 -1
- package/web-dist/assets/{arc-EhnKDCZM.js → arc-rRRDxwm9.js} +1 -1
- package/web-dist/assets/{architectureDiagram-2XIMDMQ5-CGSsPfai.js → architectureDiagram-2XIMDMQ5-6Ie8gkit.js} +1 -1
- package/web-dist/assets/{blockDiagram-WCTKOSBZ-BI0bxzbF.js → blockDiagram-WCTKOSBZ-DyFAm0Wv.js} +1 -1
- package/web-dist/assets/{c4Diagram-IC4MRINW-B7Esq86v.js → c4Diagram-IC4MRINW-CFf9-N6D.js} +1 -1
- package/web-dist/assets/channel-C1a8HTQY.js +1 -0
- package/web-dist/assets/{chunk-4BX2VUAB-CiXYSUcF.js → chunk-4BX2VUAB-BXSP-ZXZ.js} +1 -1
- package/web-dist/assets/{chunk-55IACEB6-DLQFD8im.js → chunk-55IACEB6-DZz9Zfm4.js} +1 -1
- package/web-dist/assets/{chunk-FMBD7UC4-DZm4Tm5l.js → chunk-FMBD7UC4-BinqNBeA.js} +1 -1
- package/web-dist/assets/{chunk-JSJVCQXG-Du80znG3.js → chunk-JSJVCQXG-BEkDIiGt.js} +1 -1
- package/web-dist/assets/{chunk-KX2RTZJC-C3G1hqKb.js → chunk-KX2RTZJC-DRvcMdOS.js} +1 -1
- package/web-dist/assets/{chunk-NQ4KR5QH-GHNL_fKu.js → chunk-NQ4KR5QH-D7Qm-vTv.js} +1 -1
- package/web-dist/assets/{chunk-QZHKN3VN-DdFDd2Sp.js → chunk-QZHKN3VN-4EQs-zb4.js} +1 -1
- package/web-dist/assets/{chunk-WL4C6EOR-Bh5yMWT0.js → chunk-WL4C6EOR-C4J0wAQ1.js} +1 -1
- package/web-dist/assets/classDiagram-VBA2DB6C-kXFPuDdZ.js +1 -0
- package/web-dist/assets/classDiagram-v2-RAHNMMFH-kXFPuDdZ.js +1 -0
- package/web-dist/assets/clone-XznVhxYJ.js +1 -0
- package/web-dist/assets/{cose-bilkent-S5V4N54A-BsMcTEg-.js → cose-bilkent-S5V4N54A-pomS5wGN.js} +1 -1
- package/web-dist/assets/{dagre-KLK3FWXG-E0Llm070.js → dagre-KLK3FWXG-B-w30MG4.js} +1 -1
- package/web-dist/assets/{diagram-E7M64L7V-7H43VOx9.js → diagram-E7M64L7V-edXvdd7B.js} +1 -1
- package/web-dist/assets/{diagram-IFDJBPK2-Dy8iZsNw.js → diagram-IFDJBPK2-BJVALpLi.js} +1 -1
- package/web-dist/assets/{diagram-P4PSJMXO-3z8FT-4H.js → diagram-P4PSJMXO-B9llufAx.js} +1 -1
- package/web-dist/assets/{erDiagram-INFDFZHY-CGF2mp1V.js → erDiagram-INFDFZHY-D7r6WG_I.js} +1 -1
- package/web-dist/assets/{flowDiagram-PKNHOUZH-dt-pVRuj.js → flowDiagram-PKNHOUZH-BzOT4Umo.js} +1 -1
- package/web-dist/assets/{ganttDiagram-A5KZAMGK-CA4So_R2.js → ganttDiagram-A5KZAMGK-Cjbc4Lgp.js} +1 -1
- package/web-dist/assets/{gitGraphDiagram-K3NZZRJ6-CSyJ3OFu.js → gitGraphDiagram-K3NZZRJ6-B62CN_CL.js} +1 -1
- package/web-dist/assets/{graph-BDXwNkS1.js → graph-VLok1XGR.js} +1 -1
- package/web-dist/assets/index-BSVKCxiM.css +32 -0
- package/web-dist/assets/{index-B3CNIt2G.js → index-VURYXd1Z.js} +383 -373
- package/web-dist/assets/{infoDiagram-LFFYTUFH-x-RWNcIW.js → infoDiagram-LFFYTUFH-339hVOss.js} +1 -1
- package/web-dist/assets/{ishikawaDiagram-PHBUUO56-0esHI7MO.js → ishikawaDiagram-PHBUUO56-VRStan0c.js} +1 -1
- package/web-dist/assets/{journeyDiagram-4ABVD52K-BM496EwS.js → journeyDiagram-4ABVD52K-C_GmHh2b.js} +1 -1
- package/web-dist/assets/{kanban-definition-K7BYSVSG-YEIVwtYF.js → kanban-definition-K7BYSVSG-CT4QBteH.js} +1 -1
- package/web-dist/assets/{layout-jzHvv-vA.js → layout-BaAZzhOL.js} +1 -1
- package/web-dist/assets/{linear-D_zozBny.js → linear-t_udGhm_.js} +1 -1
- package/web-dist/assets/{mindmap-definition-YRQLILUH-By0PoNnz.js → mindmap-definition-YRQLILUH-DrP8dGq6.js} +1 -1
- package/web-dist/assets/{pieDiagram-SKSYHLDU-CrQAAH7f.js → pieDiagram-SKSYHLDU-CJiUjmMN.js} +1 -1
- package/web-dist/assets/{quadrantDiagram-337W2JSQ-arpVQ9oG.js → quadrantDiagram-337W2JSQ-WSyvax55.js} +1 -1
- package/web-dist/assets/{requirementDiagram-Z7DCOOCP-BXgkFODs.js → requirementDiagram-Z7DCOOCP-ll0s5py9.js} +1 -1
- package/web-dist/assets/{sankeyDiagram-WA2Y5GQK-BDi51cAi.js → sankeyDiagram-WA2Y5GQK-DYrhz3im.js} +1 -1
- package/web-dist/assets/{sequenceDiagram-2WXFIKYE-i39OfAbQ.js → sequenceDiagram-2WXFIKYE-Dp6ZSJqi.js} +1 -1
- package/web-dist/assets/{stateDiagram-RAJIS63D-CNgp8Vs6.js → stateDiagram-RAJIS63D-CfkOX-qK.js} +1 -1
- package/web-dist/assets/stateDiagram-v2-FVOUBMTO-BcJtPvOh.js +1 -0
- package/web-dist/assets/{timeline-definition-YZTLITO2-CBbqCMVi.js → timeline-definition-YZTLITO2-BGgyc2hn.js} +1 -1
- package/web-dist/assets/{treemap-KZPCXAKY-yDy9DP9O.js → treemap-KZPCXAKY-B3S5xd6G.js} +1 -1
- package/web-dist/assets/{vennDiagram-LZ73GAT5-BnZoghxR.js → vennDiagram-LZ73GAT5-n7918zRF.js} +1 -1
- package/web-dist/assets/{xychartDiagram-JWTSCODW-DBzQzD9W.js → xychartDiagram-JWTSCODW-wrqHya8i.js} +1 -1
- package/web-dist/index.html +2 -2
- package/web-dist/assets/channel-CINGP9LA.js +0 -1
- package/web-dist/assets/classDiagram-VBA2DB6C-BKWxO77f.js +0 -1
- package/web-dist/assets/classDiagram-v2-RAHNMMFH-BKWxO77f.js +0 -1
- package/web-dist/assets/clone-BramF8dO.js +0 -1
- package/web-dist/assets/index-DAgf0tm_.css +0 -32
- package/web-dist/assets/stateDiagram-v2-FVOUBMTO-DIScS6y6.js +0 -1
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw compatibility adapter.
|
|
3
|
+
*
|
|
4
|
+
* Loads OpenClaw-format plugins (openclaw.plugin.json + index.ts using
|
|
5
|
+
* definePluginEntry) and bridges them into Jait's plugin system.
|
|
6
|
+
*
|
|
7
|
+
* Supported:
|
|
8
|
+
* - Tool registration (registerTool) → Jait ToolDefinition
|
|
9
|
+
* - Plugin config passthrough
|
|
10
|
+
* - Scoped logging
|
|
11
|
+
*
|
|
12
|
+
* Unsupported registrations (channels, speech providers, CLI backends, etc.)
|
|
13
|
+
* are silently captured so the plugin doesn't throw, but they are not wired
|
|
14
|
+
* into Jait's runtime. They are logged at debug level.
|
|
15
|
+
*/
|
|
16
|
+
import { readdir, readFile, stat } from "node:fs/promises";
|
|
17
|
+
import { join, resolve } from "node:path";
|
|
18
|
+
function createStubApi(manifest, pluginConfig, log) {
|
|
19
|
+
const collected = { tools: [], unsupported: [] };
|
|
20
|
+
const noop = (method) => (...args) => {
|
|
21
|
+
collected.unsupported.push({ method, args });
|
|
22
|
+
log.info(`[openclaw-compat] ${manifest.id}: skipped ${method} (not supported in Jait)`);
|
|
23
|
+
};
|
|
24
|
+
// Build a minimal shape that satisfies OpenClawPluginApi
|
|
25
|
+
const api = {
|
|
26
|
+
id: manifest.id,
|
|
27
|
+
name: manifest.name ?? manifest.id,
|
|
28
|
+
version: manifest.version,
|
|
29
|
+
description: manifest.description,
|
|
30
|
+
source: `openclaw:${manifest.id}`,
|
|
31
|
+
rootDir: undefined, // set later
|
|
32
|
+
registrationMode: "full",
|
|
33
|
+
config: {}, // OpenClaw global config — empty in Jait context
|
|
34
|
+
pluginConfig,
|
|
35
|
+
runtime: {}, // Empty runtime object
|
|
36
|
+
logger: log,
|
|
37
|
+
// ── Supported: tool registration ──────────────────────────────
|
|
38
|
+
registerTool: (tool) => {
|
|
39
|
+
if (typeof tool === "function") {
|
|
40
|
+
// Factory pattern (OpenClawPluginToolFactory)
|
|
41
|
+
try {
|
|
42
|
+
const resolved = tool();
|
|
43
|
+
collected.tools.push(resolved);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
log.warn(`[openclaw-compat] ${manifest.id}: tool factory threw: ${err}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else if (tool && typeof tool === "object" && "name" in tool) {
|
|
50
|
+
collected.tools.push(tool);
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
// ── Unsupported — captured but not wired ──────────────────────
|
|
54
|
+
registerHook: noop("registerHook"),
|
|
55
|
+
registerHttpRoute: noop("registerHttpRoute"),
|
|
56
|
+
registerChannel: noop("registerChannel"),
|
|
57
|
+
registerGatewayMethod: noop("registerGatewayMethod"),
|
|
58
|
+
registerCli: noop("registerCli"),
|
|
59
|
+
registerService: noop("registerService"),
|
|
60
|
+
registerCliBackend: noop("registerCliBackend"),
|
|
61
|
+
registerProvider: noop("registerProvider"),
|
|
62
|
+
registerSpeechProvider: noop("registerSpeechProvider"),
|
|
63
|
+
registerRealtimeTranscriptionProvider: noop("registerRealtimeTranscriptionProvider"),
|
|
64
|
+
registerRealtimeVoiceProvider: noop("registerRealtimeVoiceProvider"),
|
|
65
|
+
registerMediaUnderstandingProvider: noop("registerMediaUnderstandingProvider"),
|
|
66
|
+
registerImageGenerationProvider: noop("registerImageGenerationProvider"),
|
|
67
|
+
registerWebFetchProvider: noop("registerWebFetchProvider"),
|
|
68
|
+
registerWebSearchProvider: noop("registerWebSearchProvider"),
|
|
69
|
+
registerInteractiveHandler: noop("registerInteractiveHandler"),
|
|
70
|
+
onConversationBindingResolved: noop("onConversationBindingResolved"),
|
|
71
|
+
registerCommand: noop("registerCommand"),
|
|
72
|
+
registerContextEngine: noop("registerContextEngine"),
|
|
73
|
+
registerMemoryPromptSection: noop("registerMemoryPromptSection"),
|
|
74
|
+
registerMemoryFlushPlan: noop("registerMemoryFlushPlan"),
|
|
75
|
+
registerMemoryRuntime: noop("registerMemoryRuntime"),
|
|
76
|
+
registerMemoryEmbeddingProvider: noop("registerMemoryEmbeddingProvider"),
|
|
77
|
+
// ── Utility stubs ─────────────────────────────────────────────
|
|
78
|
+
resolvePath: (p) => p,
|
|
79
|
+
on: noop("on"),
|
|
80
|
+
};
|
|
81
|
+
return api;
|
|
82
|
+
}
|
|
83
|
+
/* ------------------------------------------------------------------ */
|
|
84
|
+
/* Convert OpenClaw tool → Jait PluginToolDeclaration */
|
|
85
|
+
/* ------------------------------------------------------------------ */
|
|
86
|
+
function convertTool(_pluginId, tool) {
|
|
87
|
+
return {
|
|
88
|
+
name: tool.name,
|
|
89
|
+
description: tool.description ?? tool.label ?? tool.name,
|
|
90
|
+
parameters: tool.parameters ?? {
|
|
91
|
+
type: "object",
|
|
92
|
+
properties: {},
|
|
93
|
+
},
|
|
94
|
+
tier: "external",
|
|
95
|
+
category: "external",
|
|
96
|
+
risk: "high",
|
|
97
|
+
defaultConsentLevel: "dangerous",
|
|
98
|
+
execute: async (input, _ctx) => {
|
|
99
|
+
const toolCallId = `jait-${Date.now()}`;
|
|
100
|
+
const params = (input && typeof input === "object" ? input : {});
|
|
101
|
+
try {
|
|
102
|
+
const result = await tool.execute(toolCallId, params);
|
|
103
|
+
const text = typeof result === "string" ? result : JSON.stringify(result, null, 2);
|
|
104
|
+
return { ok: true, message: text };
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
108
|
+
return { ok: false, message: `Error: ${msg}` };
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/* ------------------------------------------------------------------ */
|
|
114
|
+
/* Discovery — find openclaw.plugin.json in a directory */
|
|
115
|
+
/* ------------------------------------------------------------------ */
|
|
116
|
+
export async function discoverOpenClawPlugins(extensionsDir) {
|
|
117
|
+
const results = [];
|
|
118
|
+
let entries;
|
|
119
|
+
try {
|
|
120
|
+
entries = await readdir(extensionsDir);
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return results;
|
|
124
|
+
}
|
|
125
|
+
for (const entry of entries) {
|
|
126
|
+
const dir = join(extensionsDir, entry);
|
|
127
|
+
const dirStat = await stat(dir).catch(() => null);
|
|
128
|
+
if (!dirStat?.isDirectory())
|
|
129
|
+
continue;
|
|
130
|
+
const manifestPath = join(dir, "openclaw.plugin.json");
|
|
131
|
+
try {
|
|
132
|
+
const raw = JSON.parse(await readFile(manifestPath, "utf-8"));
|
|
133
|
+
if (!raw.id || typeof raw.id !== "string")
|
|
134
|
+
continue;
|
|
135
|
+
results.push({ manifest: raw, dir });
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// No OpenClaw manifest — skip
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return results;
|
|
142
|
+
}
|
|
143
|
+
/* ------------------------------------------------------------------ */
|
|
144
|
+
/* Convert OpenClaw manifest → Jait manifest (for UI display) */
|
|
145
|
+
/* ------------------------------------------------------------------ */
|
|
146
|
+
export function openclawToJaitManifest(oc, _dir) {
|
|
147
|
+
return {
|
|
148
|
+
id: `openclaw:${oc.id}`,
|
|
149
|
+
displayName: oc.name ?? oc.id,
|
|
150
|
+
version: oc.version ?? "0.0.0",
|
|
151
|
+
description: oc.description,
|
|
152
|
+
author: "OpenClaw",
|
|
153
|
+
main: "index.ts",
|
|
154
|
+
categories: ["openclaw"],
|
|
155
|
+
configSchema: oc.configSchema,
|
|
156
|
+
contributes: {
|
|
157
|
+
tools: oc.contracts?.tools?.map((name) => ({ name, description: name })),
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/* ------------------------------------------------------------------ */
|
|
162
|
+
/* Load a single OpenClaw plugin as a Jait PluginModule */
|
|
163
|
+
/* ------------------------------------------------------------------ */
|
|
164
|
+
export function createOpenClawPluginModule(manifest, dir) {
|
|
165
|
+
const jaitId = `openclaw:${manifest.id}`;
|
|
166
|
+
let disposeCallbacks = [];
|
|
167
|
+
return {
|
|
168
|
+
id: jaitId,
|
|
169
|
+
displayName: manifest.name ?? manifest.id,
|
|
170
|
+
async setup(ctx) {
|
|
171
|
+
const pluginConfig = ctx.getConfig();
|
|
172
|
+
const api = createStubApi(manifest, pluginConfig, ctx.log);
|
|
173
|
+
api.rootDir = dir;
|
|
174
|
+
// Try to import the plugin entry
|
|
175
|
+
// OpenClaw plugins use index.ts or index.js
|
|
176
|
+
const candidates = ["index.ts", "index.js", "index.mjs"];
|
|
177
|
+
let loaded = false;
|
|
178
|
+
for (const candidate of candidates) {
|
|
179
|
+
const entryPath = resolve(dir, candidate);
|
|
180
|
+
try {
|
|
181
|
+
const entryStat = await stat(entryPath).catch(() => null);
|
|
182
|
+
if (!entryStat?.isFile())
|
|
183
|
+
continue;
|
|
184
|
+
const mod = await import(entryPath);
|
|
185
|
+
const definition = mod.default ?? mod.plugin ?? mod;
|
|
186
|
+
if (typeof definition === "function") {
|
|
187
|
+
// Direct function export: (api) => void
|
|
188
|
+
await definition(api);
|
|
189
|
+
loaded = true;
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
192
|
+
else if (definition && typeof definition === "object") {
|
|
193
|
+
if (typeof definition.register === "function") {
|
|
194
|
+
await definition.register(api);
|
|
195
|
+
loaded = true;
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
else if (typeof definition.activate === "function") {
|
|
199
|
+
await definition.activate(api);
|
|
200
|
+
loaded = true;
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch (err) {
|
|
206
|
+
ctx.log.warn(`Failed to load OpenClaw plugin entry ${entryPath}: ${err}`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (!loaded) {
|
|
210
|
+
ctx.log.warn(`OpenClaw plugin ${manifest.id}: no loadable entry found in ${dir}`);
|
|
211
|
+
}
|
|
212
|
+
// Convert collected tools
|
|
213
|
+
const tools = api.tools.map((t) => convertTool(jaitId, t));
|
|
214
|
+
const unsupported = api.unsupported;
|
|
215
|
+
if (unsupported.length > 0) {
|
|
216
|
+
const methods = [...new Set(unsupported.map((u) => u.method))];
|
|
217
|
+
ctx.log.info(`OpenClaw plugin ${manifest.id}: ${tools.length} tool(s) bridged, ` +
|
|
218
|
+
`${unsupported.length} unsupported registration(s) skipped (${methods.join(", ")})`);
|
|
219
|
+
}
|
|
220
|
+
else if (tools.length > 0) {
|
|
221
|
+
ctx.log.info(`OpenClaw plugin ${manifest.id}: ${tools.length} tool(s) bridged`);
|
|
222
|
+
}
|
|
223
|
+
return { tools };
|
|
224
|
+
},
|
|
225
|
+
async dispose() {
|
|
226
|
+
for (const cb of disposeCallbacks) {
|
|
227
|
+
try {
|
|
228
|
+
await cb();
|
|
229
|
+
}
|
|
230
|
+
catch { /* best effort */ }
|
|
231
|
+
}
|
|
232
|
+
disposeCallbacks = [];
|
|
233
|
+
},
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=openclaw-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-adapter.js","sourceRoot":"","sources":["../../src/plugins/openclaw-adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/chat.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ import type { WsControlPlane } from "../ws.js";
|
|
|
13
13
|
import type { SessionStateService } from "../services/session-state.js";
|
|
14
14
|
import type { WorkspaceService } from "../services/workspaces.js";
|
|
15
15
|
import type { ProviderRegistry } from "../providers/registry.js";
|
|
16
|
+
import type { SkillRegistry } from "../skills/index.js";
|
|
16
17
|
export declare function getExternalFileMutationPath(tool: string, args: unknown): string | null;
|
|
17
18
|
export interface ChatRouteDeps {
|
|
18
19
|
db?: JaitDB;
|
|
@@ -26,6 +27,7 @@ export interface ChatRouteDeps {
|
|
|
26
27
|
sessionState?: SessionStateService;
|
|
27
28
|
workspaceService?: WorkspaceService;
|
|
28
29
|
providerRegistry?: ProviderRegistry;
|
|
30
|
+
skillRegistry?: SkillRegistry;
|
|
29
31
|
toolExecutor?: (toolName: string, input: unknown, context: ToolContext, options?: {
|
|
30
32
|
dryRun?: boolean;
|
|
31
33
|
consentTimeoutMs?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/routes/chat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAA4B,MAAM,uBAAuB,CAAC;AACnF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/routes/chat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAA4B,MAAM,uBAAuB,CAAC;AACnF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AA4BjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAmMxD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAyCtF;AA+WD,MAAM,WAAW,aAAa;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,CACb,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,KACtD,OAAO,CAAC,UAAU,CAAC,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,SAAS,EACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,EACjC,iBAAiB,CAAC,EAAE,cAAc,QAsmDnC"}
|
package/dist/routes/chat.js
CHANGED
|
@@ -14,6 +14,7 @@ import { runAgentLoop, retryToolCall, buildTieredToolSchemas, fromOpenAIName, St
|
|
|
14
14
|
import { interventionRunResumeRegistry } from "../services/intervention-run-resume.js";
|
|
15
15
|
import { isValidChatMode, } from "../tools/chat-modes.js";
|
|
16
16
|
import { buildSystemPrompt } from "../tools/prompts/index.js";
|
|
17
|
+
import { formatSkillsForPrompt } from "../skills/index.js";
|
|
17
18
|
function parseUserDisplaySegments(raw) {
|
|
18
19
|
if (!Array.isArray(raw))
|
|
19
20
|
return undefined;
|
|
@@ -479,6 +480,7 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
479
480
|
let sessionStateService;
|
|
480
481
|
let workspaceService;
|
|
481
482
|
let providerRegistry;
|
|
483
|
+
let skillRegistry;
|
|
482
484
|
if (depsOrDb && typeof depsOrDb === "object" && "sessionService" in depsOrDb) {
|
|
483
485
|
const deps = depsOrDb;
|
|
484
486
|
db = deps.db;
|
|
@@ -493,6 +495,7 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
493
495
|
sessionStateService = deps.sessionState;
|
|
494
496
|
workspaceService = deps.workspaceService;
|
|
495
497
|
providerRegistry = deps.providerRegistry;
|
|
498
|
+
skillRegistry = deps.skillRegistry;
|
|
496
499
|
}
|
|
497
500
|
else {
|
|
498
501
|
db = depsOrDb;
|
|
@@ -817,7 +820,7 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
817
820
|
const wsRoot = surfaceRegistry
|
|
818
821
|
? resolveWorkspaceRoot(surfaceRegistry, sessionId, workspaceRecord?.rootPath ?? sessionRecord?.workspacePath)
|
|
819
822
|
: ((workspaceRecord?.rootPath ?? sessionRecord?.workspacePath)?.trim() || process.cwd());
|
|
820
|
-
const promptCtx = { workspaceRoot: wsRoot };
|
|
823
|
+
const promptCtx = { workspaceRoot: wsRoot, skills: skillRegistry?.listEnabled() };
|
|
821
824
|
if (!sessionHistory.has(sessionId)) {
|
|
822
825
|
sessionHistory.set(sessionId, [
|
|
823
826
|
{ role: "system", content: buildSystemPrompt(chatMode, modelEndpoint, promptCtx) },
|
|
@@ -986,6 +989,7 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
986
989
|
// ── Reuse an existing CLI session if one is alive for this Jait session ──
|
|
987
990
|
const cachedCliSession = activeCliSessions.get(sessionId);
|
|
988
991
|
let providerSessionId;
|
|
992
|
+
let isNewCliSession = false;
|
|
989
993
|
if (cachedCliSession && cachedCliSession.providerId === requestProvider && cachedCliSession.runtimeMode === runtimeMode) {
|
|
990
994
|
// Existing session with the same provider — try to reuse it
|
|
991
995
|
providerSessionId = cachedCliSession.providerSessionId;
|
|
@@ -1009,6 +1013,7 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
1009
1013
|
mcpServers,
|
|
1010
1014
|
});
|
|
1011
1015
|
providerSessionId = session.id;
|
|
1016
|
+
isNewCliSession = true;
|
|
1012
1017
|
activeCliSessions.set(sessionId, { providerId: requestProvider, runtimeMode, providerSessionId, provider: cliProvider });
|
|
1013
1018
|
console.log(`[chat/cli] Started new ${requestProvider}/${runtimeMode}${isRemote ? " (remote)" : ""} session ${providerSessionId} for ${sessionId}`);
|
|
1014
1019
|
}
|
|
@@ -1201,9 +1206,18 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
1201
1206
|
break;
|
|
1202
1207
|
}
|
|
1203
1208
|
});
|
|
1209
|
+
// ── Prepend skills context on the first turn of a new CLI session ──
|
|
1210
|
+
let cliContent = content;
|
|
1211
|
+
if (isNewCliSession && skillRegistry) {
|
|
1212
|
+
const enabledSkills = skillRegistry.listEnabled();
|
|
1213
|
+
const skillsBlock = formatSkillsForPrompt(enabledSkills);
|
|
1214
|
+
if (skillsBlock) {
|
|
1215
|
+
cliContent = `${skillsBlock}\n\n${content}`;
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1204
1218
|
// Send the turn — with recovery if the cached session died between messages
|
|
1205
1219
|
try {
|
|
1206
|
-
await cliProvider.sendTurn(providerSessionId,
|
|
1220
|
+
await cliProvider.sendTurn(providerSessionId, cliContent);
|
|
1207
1221
|
}
|
|
1208
1222
|
catch (sendErr) {
|
|
1209
1223
|
// Session likely died (process exited) — start a fresh one
|
|
@@ -1219,7 +1233,16 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
1219
1233
|
providerSessionId = freshSession.id;
|
|
1220
1234
|
activeCliSessions.set(sessionId, { providerId: requestProvider, runtimeMode, providerSessionId, provider: cliProvider });
|
|
1221
1235
|
console.log(`[chat/cli] Recovered with new ${requestProvider}/${runtimeMode} session ${providerSessionId}`);
|
|
1222
|
-
|
|
1236
|
+
// Fresh session — re-inject skills context
|
|
1237
|
+
let recoveryContent = content;
|
|
1238
|
+
if (skillRegistry) {
|
|
1239
|
+
const enabledSkills = skillRegistry.listEnabled();
|
|
1240
|
+
const skillsBlock = formatSkillsForPrompt(enabledSkills);
|
|
1241
|
+
if (skillsBlock) {
|
|
1242
|
+
recoveryContent = `${skillsBlock}\n\n${content}`;
|
|
1243
|
+
}
|
|
1244
|
+
}
|
|
1245
|
+
await cliProvider.sendTurn(providerSessionId, recoveryContent);
|
|
1223
1246
|
}
|
|
1224
1247
|
// Wait for turn completion or error
|
|
1225
1248
|
await new Promise((resolve) => {
|