@hblues419/agent-dashboard-core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,13 @@
1
+ import type { OnchainosClient, OnchainosResponse } from "./onchainos.js";
2
+ import type { OpenClawClient } from "./openclaw.js";
3
+ import type { SkillsScanner } from "./skills.js";
4
+ export interface HandlerContext {
5
+ oc: OnchainosClient;
6
+ openclaw?: OpenClawClient;
7
+ skills: SkillsScanner;
8
+ defaultChain: string;
9
+ }
10
+ type Handler = (ctx: HandlerContext, params: Record<string, any>) => Promise<OnchainosResponse>;
11
+ export declare const handlers: Record<string, Handler>;
12
+ export declare function dispatch(ctx: HandlerContext, method: string, params: Record<string, any>): Promise<OnchainosResponse>;
13
+ export {};
@@ -0,0 +1,292 @@
1
+ function fail(msg) {
2
+ return { ok: false, error: { message: msg } };
3
+ }
4
+ const DEFAULT_CHAINS = "ethereum,base,bsc,polygon,arbitrum,optimism,solana,xlayer";
5
+ export const handlers = {
6
+ // Auth
7
+ "wallet.status": async (ctx) => ctx.oc.run(["wallet", "status"]),
8
+ "wallet.login": async (ctx, p) => {
9
+ if (!p.email)
10
+ return fail("email required");
11
+ return ctx.oc.run(["wallet", "login", p.email]);
12
+ },
13
+ "wallet.verify": async (ctx, p) => {
14
+ if (!p.code)
15
+ return fail("code required");
16
+ return ctx.oc.run(["wallet", "verify", p.code]);
17
+ },
18
+ "wallet.logout": async (ctx) => ctx.oc.run(["wallet", "logout"]),
19
+ // Wallet
20
+ "wallet.addresses": async (ctx) => ctx.oc.run(["wallet", "addresses"]),
21
+ "wallet.chains": async (ctx) => ctx.oc.run(["wallet", "chains"]),
22
+ "portfolio.chains": async (ctx) => ctx.oc.run(["portfolio", "chains"]),
23
+ // Portfolio
24
+ "portfolio.overview": async (ctx, p) => {
25
+ if (!p.address)
26
+ return fail("address required");
27
+ return ctx.oc.run(["portfolio", "total-value", "--address", p.address, "--chains", p.chains ?? DEFAULT_CHAINS]);
28
+ },
29
+ "portfolio.tokens": async (ctx, p) => {
30
+ if (!p.address)
31
+ return fail("address required");
32
+ return ctx.oc.run(["portfolio", "all-balances", "--address", p.address, "--chains", p.chains ?? DEFAULT_CHAINS]);
33
+ },
34
+ "portfolio.tokenBalances": async (ctx, p) => {
35
+ if (!p.address || !p.tokens)
36
+ return fail("address and tokens required");
37
+ return ctx.oc.run(["portfolio", "token-balances", "--address", p.address, "--tokens", p.tokens]);
38
+ },
39
+ "portfolio.tokenPrice": async (ctx, p) => {
40
+ if (!p.address)
41
+ return fail("address required");
42
+ return ctx.oc.run(["market", "price", "--chain", p.chain ?? ctx.defaultChain, "--address", p.address]);
43
+ },
44
+ // History
45
+ "wallet.history": async (ctx, p) => {
46
+ const args = ["wallet", "history"];
47
+ if (p.chain)
48
+ args.push("--chain", p.chain);
49
+ if (p.limit)
50
+ args.push("--limit", String(p.limit));
51
+ if (p.page)
52
+ args.push("--page-num", String(p.page));
53
+ if (p.address)
54
+ args.push("--address", p.address);
55
+ return ctx.oc.run(args);
56
+ },
57
+ "wallet.transaction": async (ctx, p) => {
58
+ if (!p.id)
59
+ return fail("id required");
60
+ const kind = p.kind ?? "order";
61
+ const flag = kind === "tx" ? "--tx-hash" : kind === "uop" ? "--uop-hash" : "--order-id";
62
+ const args = ["wallet", "history", flag, p.id];
63
+ if (p.chain)
64
+ args.push("--chain", p.chain);
65
+ return ctx.oc.run(args);
66
+ },
67
+ // PnL
68
+ "pnl.overview": async (ctx, p) => {
69
+ if (!p.address)
70
+ return fail("address required");
71
+ const args = ["market", "portfolio-overview", "--address", p.address, "--chain", p.chain ?? ctx.defaultChain];
72
+ if (p.timeFrame)
73
+ args.push("--time-frame", p.timeFrame);
74
+ return ctx.oc.run(args);
75
+ },
76
+ "pnl.tokens": async (ctx, p) => {
77
+ if (!p.address)
78
+ return fail("address required");
79
+ return ctx.oc.run(["market", "portfolio-recent-pnl", "--address", p.address, "--chain", p.chain ?? ctx.defaultChain]);
80
+ },
81
+ "pnl.history": async (ctx, p) => {
82
+ if (!p.address)
83
+ return fail("address required");
84
+ return ctx.oc.run(["market", "portfolio-dex-history", "--address", p.address, "--chain", p.chain ?? ctx.defaultChain]);
85
+ },
86
+ // Swap
87
+ "swap.chains": async (ctx) => ctx.oc.run(["swap", "chains"]),
88
+ "swap.quote": async (ctx, p) => {
89
+ if (!p.from || !p.to || !p.chain || (!p.readableAmount && !p.amount))
90
+ return fail("from, to, chain, amount required");
91
+ const args = ["swap", "quote", "--from", p.from, "--to", p.to, "--chain", p.chain];
92
+ if (p.readableAmount)
93
+ args.push("--readable-amount", String(p.readableAmount));
94
+ else
95
+ args.push("--amount", String(p.amount));
96
+ if (p.swapMode)
97
+ args.push("--swap-mode", p.swapMode);
98
+ return ctx.oc.run(args);
99
+ },
100
+ "swap.execute": async (ctx, p) => {
101
+ if (!p.from || !p.to || !p.chain || !p.wallet || (!p.readableAmount && !p.amount))
102
+ return fail("from, to, chain, wallet, amount required");
103
+ const args = ["swap", "execute", "--from", p.from, "--to", p.to, "--chain", p.chain, "--wallet", p.wallet];
104
+ if (p.readableAmount)
105
+ args.push("--readable-amount", String(p.readableAmount));
106
+ else
107
+ args.push("--amount", String(p.amount));
108
+ if (p.slippage != null)
109
+ args.push("--slippage", String(p.slippage));
110
+ if (p.gasLevel)
111
+ args.push("--gas-level", p.gasLevel);
112
+ if (p.swapMode)
113
+ args.push("--swap-mode", p.swapMode);
114
+ if (p.gasTokenAddress)
115
+ args.push("--gas-token-address", p.gasTokenAddress);
116
+ if (p.relayerId)
117
+ args.push("--relayer-id", String(p.relayerId));
118
+ if (p.mevProtection)
119
+ args.push("--mev-protection");
120
+ return ctx.oc.run(args, { timeoutMs: 180_000 });
121
+ },
122
+ "swap.liquidity": async (ctx, p) => {
123
+ if (!p.chain)
124
+ return fail("chain required");
125
+ return ctx.oc.run(["swap", "liquidity", "--chain", p.chain]);
126
+ },
127
+ // Send
128
+ "wallet.send": async (ctx, p) => {
129
+ if (!p.recipient || !p.chain || (!p.readableAmount && !p.amount))
130
+ return fail("recipient, chain, amount required");
131
+ const args = ["wallet", "send", "--recipient", p.recipient, "--chain", p.chain];
132
+ if (p.readableAmount)
133
+ args.push("--readable-amount", String(p.readableAmount));
134
+ else
135
+ args.push("--amt", String(p.amount));
136
+ if (p.contractToken)
137
+ args.push("--contract-token", p.contractToken);
138
+ if (p.from)
139
+ args.push("--from", p.from);
140
+ if (p.gasTokenAddress)
141
+ args.push("--gas-token-address", p.gasTokenAddress);
142
+ if (p.relayerId)
143
+ args.push("--relayer-id", String(p.relayerId));
144
+ if (p.force)
145
+ args.push("--force");
146
+ return ctx.oc.run(args, { timeoutMs: 180_000 });
147
+ },
148
+ // Bridge
149
+ "bridge.bridges": async (ctx, p) => {
150
+ const args = ["cross-chain", "bridges"];
151
+ if (p.fromChain)
152
+ args.push("--from-chain", p.fromChain);
153
+ if (p.toChain)
154
+ args.push("--to-chain", p.toChain);
155
+ return ctx.oc.run(args);
156
+ },
157
+ "bridge.tokens": async (ctx, p) => {
158
+ const args = ["cross-chain", "tokens"];
159
+ if (p.fromChain)
160
+ args.push("--from-chain", p.fromChain);
161
+ if (p.toChain)
162
+ args.push("--to-chain", p.toChain);
163
+ return ctx.oc.run(args);
164
+ },
165
+ "bridge.quote": async (ctx, p) => {
166
+ if (!p.fromChain || !p.toChain || !p.from || !p.to || (!p.readableAmount && !p.amount))
167
+ return fail("fromChain, toChain, from, to, amount required");
168
+ const args = ["cross-chain", "quote", "--from-chain", p.fromChain, "--to-chain", p.toChain, "--from", p.from, "--to", p.to];
169
+ if (p.readableAmount)
170
+ args.push("--readable-amount", String(p.readableAmount));
171
+ else
172
+ args.push("--amount", String(p.amount));
173
+ if (p.slippage != null)
174
+ args.push("--slippage", String(p.slippage));
175
+ return ctx.oc.run(args);
176
+ },
177
+ "bridge.execute": async (ctx, p) => {
178
+ if (!p.fromChain || !p.toChain || !p.from || !p.to || !p.wallet || (!p.readableAmount && !p.amount))
179
+ return fail("fromChain, toChain, from, to, wallet, amount required");
180
+ const args = ["cross-chain", "execute", "--from-chain", p.fromChain, "--to-chain", p.toChain, "--from", p.from, "--to", p.to, "--wallet", p.wallet];
181
+ if (p.readableAmount)
182
+ args.push("--readable-amount", String(p.readableAmount));
183
+ else
184
+ args.push("--amount", String(p.amount));
185
+ if (p.slippage != null)
186
+ args.push("--slippage", String(p.slippage));
187
+ if (p.bridgeId)
188
+ args.push("--bridge-id", String(p.bridgeId));
189
+ if (p.receiveAddress)
190
+ args.push("--receive-address", p.receiveAddress);
191
+ return ctx.oc.run(args, { timeoutMs: 240_000 });
192
+ },
193
+ "bridge.status": async (ctx, p) => {
194
+ if (!p.hash)
195
+ return fail("hash required");
196
+ return ctx.oc.run(["cross-chain", "status", "--tx-hash", p.hash]);
197
+ },
198
+ // Security
199
+ "security.approvals": async (ctx, p) => {
200
+ if (!p.address)
201
+ return fail("address required");
202
+ const args = ["security", "approvals", "--address", p.address];
203
+ if (p.chain)
204
+ args.push("--chain", p.chain);
205
+ if (p.limit)
206
+ args.push("--limit", String(p.limit));
207
+ if (p.cursor)
208
+ args.push("--cursor", p.cursor);
209
+ return ctx.oc.run(args);
210
+ },
211
+ "security.tokenScan": async (ctx, p) => {
212
+ const args = ["security", "token-scan"];
213
+ if (p.tokens)
214
+ args.push("--tokens", p.tokens);
215
+ else if (p.address)
216
+ args.push("--address", p.address);
217
+ return ctx.oc.run(args);
218
+ },
219
+ "security.revoke": async (ctx, p) => {
220
+ if (!p.token || !p.chain || !p.inputData)
221
+ return fail("token, chain, inputData required");
222
+ const args = ["wallet", "contract-call", "--to", p.token, "--chain", p.chain, "--input-data", p.inputData];
223
+ if (p.gasTokenAddress)
224
+ args.push("--gas-token-address", p.gasTokenAddress);
225
+ if (p.relayerId)
226
+ args.push("--relayer-id", String(p.relayerId));
227
+ return ctx.oc.run(args, { timeoutMs: 180_000 });
228
+ },
229
+ // Settings
230
+ "settings.gasStation": async (ctx, p) => ctx.oc.run(["wallet", "gas-station", "status", "--chain", p.chain ?? ctx.defaultChain]),
231
+ "settings.gasStationEnable": async (ctx, p) => ctx.oc.run(["wallet", "gas-station", "enable", "--chain", p.chain ?? ctx.defaultChain]),
232
+ "settings.gasStationDisable": async (ctx, p) => ctx.oc.run(["wallet", "gas-station", "disable", "--chain", p.chain ?? ctx.defaultChain]),
233
+ "settings.gasStationDefaultToken": async (ctx, p) => {
234
+ if (!p.chain || !p.gasTokenAddress)
235
+ return fail("chain, gasTokenAddress required");
236
+ return ctx.oc.run(["wallet", "gas-station", "update-default-token", "--chain", p.chain, "--gas-token-address", p.gasTokenAddress]);
237
+ },
238
+ // Skills
239
+ "skills.list": async (ctx) => ({ ok: true, data: ctx.skills.scan() }),
240
+ "skills.get": async (ctx, p) => {
241
+ if (!p.name)
242
+ return fail("name required");
243
+ const skill = ctx.skills.getSkill(p.name);
244
+ if (!skill)
245
+ return fail("Skill not found");
246
+ return { ok: true, data: skill };
247
+ },
248
+ "agent.info": async (ctx) => {
249
+ const info = ctx.skills.scan();
250
+ return { ok: true, data: { platform: info.platform, skillDirs: info.skillDirs, installedCount: info.installedCount, lockedCount: info.lockedCount, openclawAvailable: !!ctx.openclaw } };
251
+ },
252
+ "agent.message": async (ctx, p) => {
253
+ if (!ctx.openclaw)
254
+ return fail("OpenClaw is not configured on this daemon");
255
+ if (!p.message)
256
+ return fail("message required");
257
+ return ctx.openclaw.message({
258
+ message: String(p.message),
259
+ agent: typeof p.agent === "string" ? p.agent : undefined,
260
+ sessionId: typeof p.sessionId === "string" ? p.sessionId : undefined,
261
+ to: typeof p.to === "string" ? p.to : undefined,
262
+ model: typeof p.model === "string" ? p.model : undefined,
263
+ thinking: typeof p.thinking === "string" ? p.thinking : undefined,
264
+ verbose: typeof p.verbose === "string" ? p.verbose : undefined,
265
+ channel: typeof p.channel === "string" ? p.channel : undefined,
266
+ replyTo: typeof p.replyTo === "string" ? p.replyTo : undefined,
267
+ replyChannel: typeof p.replyChannel === "string" ? p.replyChannel : undefined,
268
+ replyAccount: typeof p.replyAccount === "string" ? p.replyAccount : undefined,
269
+ timeoutSeconds: parseOptionalNumber(p.timeoutSeconds),
270
+ deliver: Boolean(p.deliver),
271
+ local: p.local == null ? undefined : Boolean(p.local),
272
+ });
273
+ },
274
+ };
275
+ export async function dispatch(ctx, method, params) {
276
+ const handler = handlers[method];
277
+ if (!handler)
278
+ return fail(`Unknown method: ${method}`);
279
+ try {
280
+ return await handler(ctx, params);
281
+ }
282
+ catch (e) {
283
+ return fail(e.message);
284
+ }
285
+ }
286
+ function parseOptionalNumber(value) {
287
+ if (value == null)
288
+ return undefined;
289
+ const n = Number(value);
290
+ return Number.isFinite(n) ? n : undefined;
291
+ }
292
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from "./handlers.js";
2
+ export * from "./onchainos.js";
3
+ export * from "./openclaw.js";
4
+ export * from "./skills.js";
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export * from "./handlers.js";
2
+ export * from "./onchainos.js";
3
+ export * from "./openclaw.js";
4
+ export * from "./skills.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,18 @@
1
+ export interface OnchainosResponse<T = any> {
2
+ ok: boolean;
3
+ data?: T;
4
+ error?: {
5
+ code?: string;
6
+ message: string;
7
+ };
8
+ notifications?: any[];
9
+ }
10
+ export interface RunOptions {
11
+ timeoutMs?: number;
12
+ }
13
+ export declare class OnchainosClient {
14
+ private binPath;
15
+ constructor(binPath: string);
16
+ run<T = any>(args: string[], opts?: RunOptions): Promise<OnchainosResponse<T>>;
17
+ }
18
+ export declare function runOnchainos<T = any>(binPath: string, args: string[], opts?: RunOptions): Promise<OnchainosResponse<T>>;
@@ -0,0 +1,59 @@
1
+ import { execa } from "execa";
2
+ export class OnchainosClient {
3
+ binPath;
4
+ constructor(binPath) {
5
+ this.binPath = binPath;
6
+ }
7
+ async run(args, opts = {}) {
8
+ try {
9
+ const { stdout } = await execa(this.binPath, args, {
10
+ timeout: opts.timeoutMs ?? 60_000,
11
+ reject: false,
12
+ env: { ...process.env, NO_COLOR: "1" },
13
+ });
14
+ const trimmed = stdout.trim();
15
+ if (!trimmed) {
16
+ return { ok: false, error: { message: "Empty response from onchainos" } };
17
+ }
18
+ try {
19
+ return JSON.parse(trimmed);
20
+ }
21
+ catch {
22
+ const last = extractLastJson(trimmed);
23
+ if (last)
24
+ return last;
25
+ return { ok: false, error: { message: `Non-JSON output: ${trimmed.slice(0, 500)}` } };
26
+ }
27
+ }
28
+ catch (e) {
29
+ return { ok: false, error: { message: e.message } };
30
+ }
31
+ }
32
+ }
33
+ export function runOnchainos(binPath, args, opts = {}) {
34
+ return new OnchainosClient(binPath).run(args, opts);
35
+ }
36
+ function extractLastJson(s) {
37
+ let depth = 0, start = -1, lastValid = null;
38
+ for (let i = 0; i < s.length; i++) {
39
+ if (s[i] === "{") {
40
+ if (depth === 0)
41
+ start = i;
42
+ depth++;
43
+ }
44
+ else if (s[i] === "}") {
45
+ depth--;
46
+ if (depth === 0 && start >= 0) {
47
+ const c = s.slice(start, i + 1);
48
+ try {
49
+ JSON.parse(c);
50
+ lastValid = c;
51
+ }
52
+ catch { }
53
+ start = -1;
54
+ }
55
+ }
56
+ }
57
+ return lastValid ? JSON.parse(lastValid) : null;
58
+ }
59
+ //# sourceMappingURL=onchainos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onchainos.js","sourceRoot":"","sources":["../src/onchainos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAa9B,MAAM,OAAO,eAAe;IACN;IAApB,YAAoB,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;IAAG,CAAC;IAEvC,KAAK,CAAC,GAAG,CAAU,IAAc,EAAE,OAAmB,EAAE;QACtD,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;gBACjD,OAAO,EAAE,IAAI,CAAC,SAAS,IAAI,MAAM;gBACjC,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE;aACvC,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,+BAA+B,EAAE,EAAE,CAAC;YAC5E,CAAC;YAED,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;gBACtC,IAAI,IAAI;oBAAE,OAAO,IAAI,CAAC;gBACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,oBAAoB,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;YACxF,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,EAAG,CAAW,CAAC,OAAO,EAAE,EAAE,CAAC;QACjE,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,IAAc,EACd,OAAmB,EAAE;IAErB,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,CAAI,IAAI,EAAE,IAAI,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,eAAe,CAAC,CAAS;IAChC,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,SAAS,GAAkB,IAAI,CAAC;IAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAAC,IAAI,KAAK,KAAK,CAAC;gBAAE,KAAK,GAAG,CAAC,CAAC;YAAC,KAAK,EAAE,CAAC;QAAC,CAAC;aACrD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACtB,KAAK,EAAE,CAAC;YACR,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChC,IAAI,CAAC;oBAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAAC,SAAS,GAAG,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;gBAC9C,KAAK,GAAG,CAAC,CAAC,CAAC;YACb,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { OnchainosResponse } from "./onchainos.js";
2
+ export interface OpenClawDefaults {
3
+ agent?: string;
4
+ sessionId?: string;
5
+ to?: string;
6
+ local?: boolean;
7
+ }
8
+ export interface OpenClawMessageParams extends OpenClawDefaults {
9
+ message: string;
10
+ model?: string;
11
+ thinking?: string;
12
+ verbose?: string;
13
+ channel?: string;
14
+ replyTo?: string;
15
+ replyChannel?: string;
16
+ replyAccount?: string;
17
+ deliver?: boolean;
18
+ timeoutSeconds?: number;
19
+ }
20
+ export interface NormalizedOpenClawResponse {
21
+ text: string;
22
+ payloads: any[];
23
+ meta?: any;
24
+ deliveryStatus?: any;
25
+ runId?: string;
26
+ raw: any;
27
+ }
28
+ export interface OpenClawRunOptions {
29
+ timeoutMs?: number;
30
+ }
31
+ export declare class OpenClawClient {
32
+ private binPath;
33
+ private defaults;
34
+ constructor(binPath: string, defaults?: OpenClawDefaults);
35
+ message(params: OpenClawMessageParams, opts?: OpenClawRunOptions): Promise<OnchainosResponse<NormalizedOpenClawResponse>>;
36
+ }
@@ -0,0 +1,161 @@
1
+ import { execa } from "execa";
2
+ export class OpenClawClient {
3
+ binPath;
4
+ defaults;
5
+ constructor(binPath, defaults = {}) {
6
+ this.binPath = binPath;
7
+ this.defaults = defaults;
8
+ }
9
+ async message(params, opts = {}) {
10
+ const merged = { ...this.defaults, ...stripUndefined(params) };
11
+ const args = buildAgentArgs(merged);
12
+ try {
13
+ const { stdout, stderr, exitCode } = await execa(this.binPath, args, {
14
+ timeout: opts.timeoutMs ?? ((params.timeoutSeconds ?? 600) + 30) * 1000,
15
+ reject: false,
16
+ env: { ...process.env, NO_COLOR: "1" },
17
+ });
18
+ const trimmed = stdout.trim();
19
+ if (!trimmed) {
20
+ return {
21
+ ok: false,
22
+ error: {
23
+ message: stderr.trim() || `OpenClaw exited with code ${exitCode} and no JSON output`,
24
+ },
25
+ };
26
+ }
27
+ const parsed = parseJsonOutput(trimmed);
28
+ if (!parsed) {
29
+ return { ok: false, error: { message: `Non-JSON output from OpenClaw: ${trimmed.slice(0, 500)}` } };
30
+ }
31
+ return normalizeOpenClawResponse(parsed);
32
+ }
33
+ catch (e) {
34
+ return { ok: false, error: { message: e.message } };
35
+ }
36
+ }
37
+ }
38
+ function stripUndefined(value) {
39
+ return Object.fromEntries(Object.entries(value).filter(([, v]) => v !== undefined));
40
+ }
41
+ function buildAgentArgs(params) {
42
+ if (!params.message) {
43
+ throw new Error("message required");
44
+ }
45
+ if (!params.agent && !params.sessionId && !params.to) {
46
+ throw new Error("agent, sessionId, or to required for OpenClaw agent message");
47
+ }
48
+ const args = ["agent", "--message", params.message, "--json"];
49
+ if (params.agent)
50
+ args.push("--agent", params.agent);
51
+ if (params.sessionId)
52
+ args.push("--session-id", params.sessionId);
53
+ if (params.to)
54
+ args.push("--to", params.to);
55
+ if (params.model)
56
+ args.push("--model", params.model);
57
+ if (params.thinking)
58
+ args.push("--thinking", params.thinking);
59
+ if (params.verbose)
60
+ args.push("--verbose", params.verbose);
61
+ if (params.channel)
62
+ args.push("--channel", params.channel);
63
+ if (params.replyTo)
64
+ args.push("--reply-to", params.replyTo);
65
+ if (params.replyChannel)
66
+ args.push("--reply-channel", params.replyChannel);
67
+ if (params.replyAccount)
68
+ args.push("--reply-account", params.replyAccount);
69
+ if (params.timeoutSeconds != null)
70
+ args.push("--timeout", String(params.timeoutSeconds));
71
+ if (params.deliver)
72
+ args.push("--deliver");
73
+ if (params.local)
74
+ args.push("--local");
75
+ return args;
76
+ }
77
+ function normalizeOpenClawResponse(raw) {
78
+ if (raw?.ok === false) {
79
+ return {
80
+ ok: false,
81
+ error: {
82
+ message: raw.error?.message ?? raw.error ?? "OpenClaw agent message failed",
83
+ code: raw.error?.code,
84
+ },
85
+ };
86
+ }
87
+ const result = raw?.result ?? raw;
88
+ const payloadContainer = raw?.payload ?? result?.payload ?? result;
89
+ const payloads = Array.isArray(payloadContainer?.payloads)
90
+ ? payloadContainer.payloads
91
+ : Array.isArray(result?.payloads)
92
+ ? result.payloads
93
+ : [];
94
+ return {
95
+ ok: true,
96
+ data: {
97
+ text: extractText(payloads),
98
+ payloads,
99
+ meta: raw?.meta ?? result?.meta ?? payloadContainer?.meta,
100
+ deliveryStatus: raw?.deliveryStatus ?? result?.deliveryStatus ?? payloadContainer?.deliveryStatus,
101
+ runId: payloadContainer?.runId ?? result?.runId ?? raw?.runId,
102
+ raw,
103
+ },
104
+ };
105
+ }
106
+ function extractText(payloads) {
107
+ return payloads
108
+ .map((payload) => (typeof payload?.text === "string" ? payload.text : ""))
109
+ .filter(Boolean)
110
+ .join("\n");
111
+ }
112
+ function parseJsonOutput(s) {
113
+ try {
114
+ return JSON.parse(s);
115
+ }
116
+ catch {
117
+ return extractLastJson(s);
118
+ }
119
+ }
120
+ function extractLastJson(s) {
121
+ let depth = 0;
122
+ let start = -1;
123
+ let inString = false;
124
+ let escaped = false;
125
+ let lastValid = null;
126
+ for (let i = 0; i < s.length; i++) {
127
+ const c = s[i];
128
+ if (inString) {
129
+ escaped = c === "\\" && !escaped;
130
+ if (c === "\"" && !escaped)
131
+ inString = false;
132
+ if (c !== "\\")
133
+ escaped = false;
134
+ continue;
135
+ }
136
+ if (c === "\"") {
137
+ inString = true;
138
+ }
139
+ else if (c === "{") {
140
+ if (depth === 0)
141
+ start = i;
142
+ depth++;
143
+ }
144
+ else if (c === "}") {
145
+ depth--;
146
+ if (depth === 0 && start >= 0) {
147
+ const candidate = s.slice(start, i + 1);
148
+ try {
149
+ JSON.parse(candidate);
150
+ lastValid = candidate;
151
+ }
152
+ catch {
153
+ // Keep scanning for a later complete object.
154
+ }
155
+ start = -1;
156
+ }
157
+ }
158
+ }
159
+ return lastValid ? JSON.parse(lastValid) : null;
160
+ }
161
+ //# sourceMappingURL=openclaw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../src/openclaw.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface SkillMeta {
2
+ name: string;
3
+ description: string;
4
+ source: string;
5
+ sourceType: string;
6
+ skillPath: string;
7
+ computedHash: string;
8
+ installed: boolean;
9
+ installDir: string | null;
10
+ }
11
+ export interface AgentInfo {
12
+ platform: string;
13
+ skillDirs: {
14
+ path: string;
15
+ exists: boolean;
16
+ }[];
17
+ installedCount: number;
18
+ lockedCount: number;
19
+ skills: SkillMeta[];
20
+ }
21
+ export declare class SkillsScanner {
22
+ private lockPath;
23
+ private skillDirs;
24
+ constructor(lockPath?: string, skillDirs?: string[]);
25
+ private loadLock;
26
+ scan(): AgentInfo;
27
+ getSkill(name: string): SkillMeta | null;
28
+ }
package/dist/skills.js ADDED
@@ -0,0 +1,121 @@
1
+ import { readdirSync, readFileSync, existsSync, statSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { homedir } from "node:os";
4
+ const SKILL_DIRS = [
5
+ join(homedir(), ".openclaw", "onchainos-skills"),
6
+ join(homedir(), ".claude", "skills"),
7
+ join(homedir(), ".codex", "onchainos-skills"),
8
+ join(homedir(), ".opencode", "onchainos-skills"),
9
+ join(homedir(), ".cursor", "onchainos-skills"),
10
+ ];
11
+ function parseSkillMd(filePath) {
12
+ try {
13
+ const raw = readFileSync(filePath, "utf8");
14
+ const fmMatch = raw.match(/^---\s*\n([\s\S]*?)\n---/);
15
+ if (!fmMatch) {
16
+ const titleMatch = raw.match(/^#\s+(.+)/m);
17
+ return { name: titleMatch?.[1]?.trim(), description: undefined };
18
+ }
19
+ const fm = fmMatch[1];
20
+ const name = fm.match(/^name:\s*(.+)$/m)?.[1]?.trim();
21
+ const desc = fm.match(/^description:\s*(.+)$/m)?.[1]?.trim();
22
+ return { name, description: desc };
23
+ }
24
+ catch {
25
+ return {};
26
+ }
27
+ }
28
+ function scanDir(dir) {
29
+ const found = new Map();
30
+ if (!existsSync(dir))
31
+ return found;
32
+ try {
33
+ for (const entry of readdirSync(dir)) {
34
+ const full = join(dir, entry);
35
+ if (!statSync(full).isDirectory())
36
+ continue;
37
+ const skillMd = join(full, "SKILL.md");
38
+ if (existsSync(skillMd)) {
39
+ found.set(entry, full);
40
+ }
41
+ }
42
+ }
43
+ catch {
44
+ // permission error or similar
45
+ }
46
+ return found;
47
+ }
48
+ export class SkillsScanner {
49
+ lockPath;
50
+ skillDirs;
51
+ constructor(lockPath, skillDirs) {
52
+ this.lockPath = lockPath ?? null;
53
+ this.skillDirs = skillDirs ?? SKILL_DIRS;
54
+ }
55
+ loadLock() {
56
+ if (!this.lockPath || !existsSync(this.lockPath))
57
+ return null;
58
+ try {
59
+ return JSON.parse(readFileSync(this.lockPath, "utf8"));
60
+ }
61
+ catch {
62
+ return null;
63
+ }
64
+ }
65
+ scan() {
66
+ const lock = this.loadLock();
67
+ const dirStatus = this.skillDirs.map((p) => ({ path: p, exists: existsSync(p) }));
68
+ const installedSkills = new Map();
69
+ for (const dir of this.skillDirs) {
70
+ for (const [name, fullPath] of scanDir(dir)) {
71
+ if (!installedSkills.has(name)) {
72
+ installedSkills.set(name, { dir, skillMd: join(fullPath, "SKILL.md") });
73
+ }
74
+ }
75
+ }
76
+ const allNames = new Set([
77
+ ...Object.keys(lock?.skills ?? {}),
78
+ ...installedSkills.keys(),
79
+ ]);
80
+ const skills = [];
81
+ for (const name of allNames) {
82
+ const lockEntry = lock?.skills?.[name];
83
+ const installed = installedSkills.get(name);
84
+ const md = installed ? parseSkillMd(installed.skillMd) : undefined;
85
+ skills.push({
86
+ name: md?.name ?? name,
87
+ description: md?.description ?? "",
88
+ source: lockEntry?.source ?? "local",
89
+ sourceType: lockEntry?.sourceType ?? "filesystem",
90
+ skillPath: lockEntry?.skillPath ?? "",
91
+ computedHash: lockEntry?.computedHash ?? "",
92
+ installed: !!installed,
93
+ installDir: installed?.dir ?? null,
94
+ });
95
+ }
96
+ skills.sort((a, b) => a.name.localeCompare(b.name));
97
+ return {
98
+ platform: detectPlatform(),
99
+ skillDirs: dirStatus,
100
+ installedCount: installedSkills.size,
101
+ lockedCount: Object.keys(lock?.skills ?? {}).length,
102
+ skills,
103
+ };
104
+ }
105
+ getSkill(name) {
106
+ const info = this.scan();
107
+ return info.skills.find((s) => s.name === name) ?? null;
108
+ }
109
+ }
110
+ function detectPlatform() {
111
+ if (existsSync(join(homedir(), ".openclaw")))
112
+ return "openclaw";
113
+ if (existsSync(join(homedir(), ".claude")))
114
+ return "claude-code";
115
+ if (existsSync(join(homedir(), ".codex")))
116
+ return "codex";
117
+ if (existsSync(join(homedir(), ".cursor")))
118
+ return "cursor";
119
+ return "unknown";
120
+ }
121
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAY,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAiClC,MAAM,UAAU,GAAG;IACjB,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,kBAAkB,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,kBAAkB,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,kBAAkB,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,kBAAkB,CAAC;CAC/C,CAAC;AAEF,SAAS,YAAY,CAAC,QAAgB;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC3C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;QACnE,CAAC;QACD,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAC7D,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,GAAW;IAC1B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;gBAAE,SAAS;YAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACvC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,OAAO,aAAa;IAChB,QAAQ,CAAgB;IACxB,SAAS,CAAW;IAE5B,YAAY,QAAiB,EAAE,SAAoB;QACjD,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,UAAU,CAAC;IAC3C,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9D,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,IAAI;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAElF,MAAM,eAAe,GAAG,IAAI,GAAG,EAA4C,CAAC;QAC5E,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjC,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC/B,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS;YAC/B,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC;YAClC,GAAG,eAAe,CAAC,IAAI,EAAE;SAC1B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAEnE,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,EAAE,EAAE,IAAI,IAAI,IAAI;gBACtB,WAAW,EAAE,EAAE,EAAE,WAAW,IAAI,EAAE;gBAClC,MAAM,EAAE,SAAS,EAAE,MAAM,IAAI,OAAO;gBACpC,UAAU,EAAE,SAAS,EAAE,UAAU,IAAI,YAAY;gBACjD,SAAS,EAAE,SAAS,EAAE,SAAS,IAAI,EAAE;gBACrC,YAAY,EAAE,SAAS,EAAE,YAAY,IAAI,EAAE;gBAC3C,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,IAAI;aACnC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpD,OAAO;YACL,QAAQ,EAAE,cAAc,EAAE;YAC1B,SAAS,EAAE,SAAS;YACpB,cAAc,EAAE,eAAe,CAAC,IAAI;YACpC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM;YACnD,MAAM;SACP,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;IAC1D,CAAC;CACF;AAED,SAAS,cAAc;IACrB,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;QAAE,OAAO,UAAU,CAAC;IAChE,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;QAAE,OAAO,aAAa,CAAC;IACjE,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IAC1D,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC5D,OAAO,SAAS,CAAC;AACnB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@hblues419/agent-dashboard-core",
3
+ "publishConfig": {
4
+ "access": "public"
5
+ },
6
+ "version": "0.1.0",
7
+ "description": "Shared core utilities for Agent Dashboard packages.",
8
+ "type": "module",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc"
20
+ },
21
+ "dependencies": {
22
+ "execa": "^9.5.1"
23
+ },
24
+ "devDependencies": {
25
+ "@types/node": "^22.10.1",
26
+ "typescript": "^5.7.2"
27
+ },
28
+ "engines": {
29
+ "node": ">=18"
30
+ }
31
+ }