@clappstore/connect 0.2.5 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-client.d.ts +18 -4
- package/dist/agent-client.d.ts.map +1 -1
- package/dist/agent-client.js +147 -21
- package/dist/agent-client.js.map +1 -1
- package/dist/defaults.d.ts +2 -0
- package/dist/defaults.d.ts.map +1 -1
- package/dist/defaults.js +38 -0
- package/dist/defaults.js.map +1 -1
- package/dist/index.js +12 -4
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/agent-client.d.ts
CHANGED
|
@@ -1,14 +1,28 @@
|
|
|
1
1
|
import type { IntentMessage } from "@clapps/core";
|
|
2
2
|
export interface AgentClientOptions {
|
|
3
|
-
|
|
3
|
+
session: string;
|
|
4
4
|
agentToken?: string;
|
|
5
|
+
onError?: (error: Error) => void;
|
|
5
6
|
}
|
|
6
|
-
/**
|
|
7
|
+
/** Communicate with the local OpenClaw agent via ACP (Agent Client Protocol) subprocess */
|
|
7
8
|
export declare class AgentClient {
|
|
8
|
-
private
|
|
9
|
+
private session;
|
|
9
10
|
private agentToken;
|
|
11
|
+
private onError;
|
|
12
|
+
private proc;
|
|
13
|
+
private rl;
|
|
14
|
+
private nextId;
|
|
15
|
+
private pending;
|
|
16
|
+
private started;
|
|
10
17
|
constructor(options: AgentClientOptions);
|
|
11
|
-
/**
|
|
18
|
+
/** Spawn the ACP subprocess and run the initialize + session/load handshake */
|
|
19
|
+
start(): Promise<void>;
|
|
20
|
+
/** Send an intent to the agent via ACP session/prompt */
|
|
12
21
|
sendIntent(intent: IntentMessage): Promise<string>;
|
|
22
|
+
/** Kill the ACP subprocess */
|
|
23
|
+
stop(): void;
|
|
24
|
+
private spawnProcess;
|
|
25
|
+
private handleLine;
|
|
26
|
+
private rpc;
|
|
13
27
|
}
|
|
14
28
|
//# sourceMappingURL=agent-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-client.d.ts","sourceRoot":"","sources":["../src/agent-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-client.d.ts","sourceRoot":"","sources":["../src/agent-client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAOD,2FAA2F;AAC3F,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,kBAAkB;IAMvC,+EAA+E;IACzE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB5B,yDAAyD;IACnD,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBxD,8BAA8B;IAC9B,IAAI,IAAI,IAAI;IAiBZ,OAAO,CAAC,YAAY;IA+CpB,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,GAAG;CAyBZ"}
|
package/dist/agent-client.js
CHANGED
|
@@ -1,33 +1,159 @@
|
|
|
1
|
-
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { createInterface } from "node:readline";
|
|
3
|
+
/** Communicate with the local OpenClaw agent via ACP (Agent Client Protocol) subprocess */
|
|
2
4
|
export class AgentClient {
|
|
3
|
-
|
|
5
|
+
session;
|
|
4
6
|
agentToken;
|
|
7
|
+
onError;
|
|
8
|
+
proc = null;
|
|
9
|
+
rl = null;
|
|
10
|
+
nextId = 1;
|
|
11
|
+
pending = new Map();
|
|
12
|
+
started = false;
|
|
5
13
|
constructor(options) {
|
|
6
|
-
this.
|
|
14
|
+
this.session = options.session;
|
|
7
15
|
this.agentToken = options.agentToken;
|
|
16
|
+
this.onError = options.onError;
|
|
8
17
|
}
|
|
9
|
-
/**
|
|
18
|
+
/** Spawn the ACP subprocess and run the initialize + session/load handshake */
|
|
19
|
+
async start() {
|
|
20
|
+
if (this.started)
|
|
21
|
+
return;
|
|
22
|
+
this.spawnProcess();
|
|
23
|
+
// ACP handshake (must be sequential)
|
|
24
|
+
await this.rpc("initialize", {
|
|
25
|
+
protocolVersion: 1,
|
|
26
|
+
clientInfo: { name: "clapps-connect", version: "1.0.0" },
|
|
27
|
+
clientCapabilities: {},
|
|
28
|
+
});
|
|
29
|
+
await this.rpc("session/load", {
|
|
30
|
+
sessionId: this.session,
|
|
31
|
+
cwd: "/root",
|
|
32
|
+
mcpServers: [],
|
|
33
|
+
});
|
|
34
|
+
this.started = true;
|
|
35
|
+
console.log(`🔌 ACP connected (session: ${this.session})`);
|
|
36
|
+
}
|
|
37
|
+
/** Send an intent to the agent via ACP session/prompt */
|
|
10
38
|
async sendIntent(intent) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
39
|
+
if (!this.proc) {
|
|
40
|
+
throw new Error("AgentClient not started — call start() first");
|
|
41
|
+
}
|
|
42
|
+
const prompt = `[CLAPP_INTENT] ${intent.intent} ${JSON.stringify(intent.payload)}`;
|
|
43
|
+
const result = (await this.rpc("session/prompt", {
|
|
44
|
+
sessionId: this.session,
|
|
45
|
+
prompt: [{ type: "text", text: prompt }],
|
|
46
|
+
}));
|
|
47
|
+
// Extract text from the response
|
|
48
|
+
if (result && typeof result === "object" && "content" in result) {
|
|
49
|
+
const texts = (result.content ?? [])
|
|
50
|
+
.map((c) => c.text)
|
|
51
|
+
.filter(Boolean);
|
|
52
|
+
return texts.join("\n");
|
|
53
|
+
}
|
|
54
|
+
return "";
|
|
55
|
+
}
|
|
56
|
+
/** Kill the ACP subprocess */
|
|
57
|
+
stop() {
|
|
58
|
+
this.started = false;
|
|
59
|
+
this.rl?.close();
|
|
60
|
+
this.rl = null;
|
|
61
|
+
if (this.proc) {
|
|
62
|
+
this.proc.kill("SIGTERM");
|
|
63
|
+
this.proc = null;
|
|
64
|
+
}
|
|
65
|
+
// Reject any pending requests
|
|
66
|
+
for (const [, pending] of this.pending) {
|
|
67
|
+
pending.reject(new Error("AgentClient stopped"));
|
|
68
|
+
}
|
|
69
|
+
this.pending.clear();
|
|
70
|
+
}
|
|
71
|
+
// ---- internals ----
|
|
72
|
+
spawnProcess() {
|
|
73
|
+
const args = ["acp", "--session", this.session];
|
|
15
74
|
if (this.agentToken) {
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
headers,
|
|
21
|
-
body: JSON.stringify({
|
|
22
|
-
message,
|
|
23
|
-
sessionKey: "agent:main:main",
|
|
24
|
-
}),
|
|
75
|
+
args.push("--gateway-token", this.agentToken);
|
|
76
|
+
}
|
|
77
|
+
this.proc = spawn("openclaw", args, {
|
|
78
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
25
79
|
});
|
|
26
|
-
|
|
27
|
-
|
|
80
|
+
this.rl = createInterface({ input: this.proc.stdout });
|
|
81
|
+
this.rl.on("line", (line) => this.handleLine(line));
|
|
82
|
+
this.proc.stderr?.on("data", (chunk) => {
|
|
83
|
+
const msg = chunk.toString().trim();
|
|
84
|
+
if (msg) {
|
|
85
|
+
console.error(`[acp stderr] ${msg}`);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
this.proc.on("exit", (code) => {
|
|
89
|
+
if (this.started) {
|
|
90
|
+
const err = new Error(`ACP process exited unexpectedly (code ${code})`);
|
|
91
|
+
this.onError?.(err);
|
|
92
|
+
// Auto-restart
|
|
93
|
+
this.proc = null;
|
|
94
|
+
this.rl = null;
|
|
95
|
+
// Reject pending requests
|
|
96
|
+
for (const [, pending] of this.pending) {
|
|
97
|
+
pending.reject(err);
|
|
98
|
+
}
|
|
99
|
+
this.pending.clear();
|
|
100
|
+
// Attempt restart after a short delay
|
|
101
|
+
setTimeout(() => {
|
|
102
|
+
if (this.started) {
|
|
103
|
+
console.log("🔄 Restarting ACP subprocess...");
|
|
104
|
+
this.start().catch((e) => this.onError?.(e));
|
|
105
|
+
}
|
|
106
|
+
}, 2000);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
this.proc.on("error", (err) => {
|
|
110
|
+
this.onError?.(err);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
handleLine(line) {
|
|
114
|
+
let msg;
|
|
115
|
+
try {
|
|
116
|
+
msg = JSON.parse(line);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// Not JSON — ignore
|
|
120
|
+
return;
|
|
28
121
|
}
|
|
29
|
-
|
|
30
|
-
|
|
122
|
+
// Ignore notifications (no id field — like session/update)
|
|
123
|
+
if (msg.id == null)
|
|
124
|
+
return;
|
|
125
|
+
const pending = this.pending.get(msg.id);
|
|
126
|
+
if (!pending)
|
|
127
|
+
return;
|
|
128
|
+
this.pending.delete(msg.id);
|
|
129
|
+
if (msg.error) {
|
|
130
|
+
pending.reject(new Error(msg.error.message));
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
pending.resolve(msg.result);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
rpc(method, params) {
|
|
137
|
+
return new Promise((resolve, reject) => {
|
|
138
|
+
if (!this.proc?.stdin?.writable) {
|
|
139
|
+
reject(new Error("ACP process not running"));
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const id = this.nextId++;
|
|
143
|
+
this.pending.set(id, { resolve, reject });
|
|
144
|
+
const request = JSON.stringify({
|
|
145
|
+
jsonrpc: "2.0",
|
|
146
|
+
id,
|
|
147
|
+
method,
|
|
148
|
+
params,
|
|
149
|
+
});
|
|
150
|
+
this.proc.stdin.write(request + "\n", (err) => {
|
|
151
|
+
if (err) {
|
|
152
|
+
this.pending.delete(id);
|
|
153
|
+
reject(err);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
});
|
|
31
157
|
}
|
|
32
158
|
}
|
|
33
159
|
//# sourceMappingURL=agent-client.js.map
|
package/dist/agent-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-client.js","sourceRoot":"","sources":["../src/agent-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-client.js","sourceRoot":"","sources":["../src/agent-client.ts"],"names":[],"mappings":"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"}
|
package/dist/defaults.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export declare function seedDefaults(viewsDir: string, stateDir: string): void;
|
|
2
|
+
/** Check if the agent has an AI provider API key configured and write _status.json */
|
|
3
|
+
export declare function checkAuthStatus(stateDir: string, authPath?: string): void;
|
|
2
4
|
//# sourceMappingURL=defaults.d.ts.map
|
package/dist/defaults.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AA4DA,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAkCrE;AAED,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAmDzE"}
|
package/dist/defaults.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { resolve } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
3
4
|
const DEFAULT_CHAT_APP_MD = `---
|
|
4
5
|
name: Chat
|
|
5
6
|
domain: default
|
|
@@ -80,4 +81,41 @@ export function seedDefaults(viewsDir, stateDir) {
|
|
|
80
81
|
}
|
|
81
82
|
}
|
|
82
83
|
}
|
|
84
|
+
/** Check if the agent has an AI provider API key configured and write _status.json */
|
|
85
|
+
export function checkAuthStatus(stateDir, authPath) {
|
|
86
|
+
const defaultAuthPath = resolve(homedir(), ".openclaw", "agents", "main", "agent", "auth.json");
|
|
87
|
+
const targetPath = authPath ?? defaultAuthPath;
|
|
88
|
+
let setupRequired = true;
|
|
89
|
+
let message = "Your agent needs an AI provider key to respond to messages. SSH into your server and run:\n" +
|
|
90
|
+
'openclaw config set agents.main.auth.anthropic.apiKey "sk-ant-..."';
|
|
91
|
+
try {
|
|
92
|
+
if (existsSync(targetPath)) {
|
|
93
|
+
const raw = readFileSync(targetPath, "utf-8");
|
|
94
|
+
const auth = JSON.parse(raw);
|
|
95
|
+
// Check if there's any non-empty key value in the auth config
|
|
96
|
+
const hasKey = Object.values(auth).some((provider) => {
|
|
97
|
+
if (typeof provider === "object" && provider !== null) {
|
|
98
|
+
return Object.values(provider).some((v) => typeof v === "string" && v.length > 0);
|
|
99
|
+
}
|
|
100
|
+
return typeof provider === "string" && provider.length > 0;
|
|
101
|
+
});
|
|
102
|
+
if (hasKey) {
|
|
103
|
+
setupRequired = false;
|
|
104
|
+
message = "";
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// If we can't read auth.json, assume setup is required
|
|
110
|
+
}
|
|
111
|
+
const statusPath = resolve(stateDir, "_status.json");
|
|
112
|
+
writeFileSync(statusPath, JSON.stringify({
|
|
113
|
+
version: Date.now(),
|
|
114
|
+
timestamp: new Date().toISOString(),
|
|
115
|
+
state: { setupRequired, message },
|
|
116
|
+
}, null, 2), "utf-8");
|
|
117
|
+
if (setupRequired) {
|
|
118
|
+
console.warn("⚠️ No AI provider key configured — _status.json written with setupRequired: true");
|
|
119
|
+
}
|
|
120
|
+
}
|
|
83
121
|
//# sourceMappingURL=defaults.js.map
|
package/dist/defaults.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAUlC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;CAY3B,CAAC;AAEF,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBzB,CAAC;AAEF,MAAM,sBAAsB,GAAa;IACvC,EAAE,EAAE,MAAM;IACV,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,WAAW;IAClB,WAAW,EAAE,qBAAqB;IAClC,MAAM,EAAE,IAAI;CACb,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,QAAgB;IAC7D,+CAA+C;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,aAAa,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,qDAAqD;IACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;IAC3D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,aAAa,CAAC,QAAQ,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,qCAAqC,QAAQ,EAAE,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,MAAM,QAAQ,GAAe,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YACzE,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;YAC/D,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBACtC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACpE,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oEAAoE;YACpE,OAAO,CAAC,IAAI,CAAC,uBAAuB,QAAQ,6BAA6B,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;AACH,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,QAAiB;IACjE,MAAM,eAAe,GAAG,OAAO,CAC7B,OAAO,EAAE,EACT,WAAW,EACX,QAAQ,EACR,MAAM,EACN,OAAO,EACP,WAAW,CACZ,CAAC;IACF,MAAM,UAAU,GAAG,QAAQ,IAAI,eAAe,CAAC;IAE/C,IAAI,aAAa,GAAG,IAAI,CAAC;IACzB,IAAI,OAAO,GACT,6FAA6F;QAC7F,oEAAoE,CAAC;IAEvE,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,8DAA8D;YAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACnD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACtD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAmC,CAAC,CAAC,IAAI,CAC5D,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAC7C,CAAC;gBACJ,CAAC;gBACD,OAAO,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;YACH,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,GAAG,KAAK,CAAC;gBACtB,OAAO,GAAG,EAAE,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uDAAuD;IACzD,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACrD,aAAa,CACX,UAAU,EACV,IAAI,CAAC,SAAS,CAAC;QACb,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;QACnB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE;KAClC,EAAE,IAAI,EAAE,CAAC,CAAC,EACX,OAAO,CACR,CAAC;IACF,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAC;IACpG,CAAC;AACH,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@ import { AgentClient } from "./agent-client.js";
|
|
|
6
6
|
import { IntentPoller } from "./intent-poller.js";
|
|
7
7
|
import { StateWatcher } from "./state-watcher.js";
|
|
8
8
|
import { loadToken, saveToken, CREDENTIALS_PATH } from "./credentials.js";
|
|
9
|
-
import { seedDefaults } from "./defaults.js";
|
|
9
|
+
import { seedDefaults, checkAuthStatus } from "./defaults.js";
|
|
10
10
|
function parseArgs(args) {
|
|
11
11
|
const opts = {};
|
|
12
12
|
for (let i = 0; i < args.length; i++) {
|
|
@@ -53,14 +53,14 @@ async function main() {
|
|
|
53
53
|
const relayUrl = opts.relay ?? "https://clapps.clawlab.app";
|
|
54
54
|
const explicitToken = opts.token;
|
|
55
55
|
const agentId = opts["agent-id"];
|
|
56
|
-
const agentUrl = opts.agent ?? "http://localhost:18789";
|
|
57
56
|
const agentToken = opts["agent-token"];
|
|
57
|
+
const session = opts.session ?? "agent:main:main";
|
|
58
58
|
const stateDir = opts["state-dir"] ??
|
|
59
59
|
resolve(homedir(), ".openclaw", "workspace", "ui", "state");
|
|
60
60
|
const viewsDir = opts["views-dir"] ??
|
|
61
61
|
resolve(homedir(), ".openclaw", "workspace", "ui", "views");
|
|
62
62
|
if (!agentId) {
|
|
63
|
-
console.error("Usage: clapps-connect --agent-id AGENT_ID [--token TOKEN] [--relay URL] [--agent
|
|
63
|
+
console.error("Usage: clapps-connect --agent-id AGENT_ID [--token TOKEN] [--relay URL] [--agent-token TOKEN] [--session SESSION] [--views-dir PATH]");
|
|
64
64
|
process.exit(1);
|
|
65
65
|
}
|
|
66
66
|
console.log(`🔗 Connecting to relay: ${relayUrl}`);
|
|
@@ -68,7 +68,11 @@ async function main() {
|
|
|
68
68
|
// Ensure directories exist
|
|
69
69
|
mkdirSync(stateDir, { recursive: true });
|
|
70
70
|
mkdirSync(viewsDir, { recursive: true });
|
|
71
|
-
const agentClient = new AgentClient({
|
|
71
|
+
const agentClient = new AgentClient({
|
|
72
|
+
session,
|
|
73
|
+
agentToken,
|
|
74
|
+
onError: (err) => console.error("[acp]", err.message),
|
|
75
|
+
});
|
|
72
76
|
const intentPoller = new IntentPoller({
|
|
73
77
|
relayUrl,
|
|
74
78
|
token,
|
|
@@ -110,15 +114,19 @@ async function main() {
|
|
|
110
114
|
catch (err) {
|
|
111
115
|
console.warn(`⚠️ Could not create link: ${err instanceof Error ? err.message : err}`);
|
|
112
116
|
}
|
|
117
|
+
// Start ACP subprocess before accepting intents
|
|
118
|
+
await agentClient.start();
|
|
113
119
|
intentPoller.start();
|
|
114
120
|
stateWatcher.start();
|
|
115
121
|
// Wait for chokidar to finish initial scan, then seed defaults so writes are detected
|
|
116
122
|
await stateWatcher.waitReady();
|
|
117
123
|
seedDefaults(viewsDir, stateDir);
|
|
124
|
+
checkAuthStatus(stateDir);
|
|
118
125
|
// Graceful shutdown
|
|
119
126
|
process.on("SIGINT", async () => {
|
|
120
127
|
console.log("\nShutting down...");
|
|
121
128
|
intentPoller.stop();
|
|
129
|
+
agentClient.stop();
|
|
122
130
|
await stateWatcher.stop();
|
|
123
131
|
process.exit(0);
|
|
124
132
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|