@openclaw-cloud/agent-controller 2.0.0 → 2.2.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/bin/agent-controller.js +11 -2
- package/dist/commands/bootstrap.js +3 -28
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/commands/channel-server.d.ts +17 -0
- package/dist/commands/channel-server.js +71 -0
- package/dist/commands/channel-server.js.map +1 -0
- package/dist/config-file.js +6 -0
- package/dist/config-file.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.js +20 -0
- package/dist/config.js.map +1 -1
- package/dist/connection.js +11 -0
- package/dist/connection.js.map +1 -1
- package/dist/handlers/board-handler.js +56 -20
- package/dist/handlers/board-handler.js.map +1 -1
- package/dist/handlers/chat.d.ts +17 -0
- package/dist/handlers/chat.js +93 -0
- package/dist/handlers/chat.js.map +1 -1
- package/dist/handlers/memory.d.ts +6 -0
- package/dist/handlers/memory.js +100 -13
- package/dist/handlers/memory.js.map +1 -1
- package/dist/index.js +47 -4
- package/dist/index.js.map +1 -1
- package/dist/providers/claude-code/channel-server.d.ts +60 -0
- package/dist/providers/claude-code/channel-server.js +155 -0
- package/dist/providers/claude-code/channel-server.js.map +1 -0
- package/dist/providers/claude-code/index.d.ts +68 -0
- package/dist/providers/claude-code/index.js +280 -0
- package/dist/providers/claude-code/index.js.map +1 -0
- package/dist/providers/claude-code/login-flow.d.ts +26 -0
- package/dist/providers/claude-code/login-flow.js +135 -0
- package/dist/providers/claude-code/login-flow.js.map +1 -0
- package/dist/providers/claude-code/settings-writer.d.ts +29 -0
- package/dist/providers/claude-code/settings-writer.js +94 -0
- package/dist/providers/claude-code/settings-writer.js.map +1 -0
- package/dist/providers/claude-code/socket-bridge.d.ts +98 -0
- package/dist/providers/claude-code/socket-bridge.js +301 -0
- package/dist/providers/claude-code/socket-bridge.js.map +1 -0
- package/dist/providers/claude-code/spawn-claude.d.ts +48 -0
- package/dist/providers/claude-code/spawn-claude.js +108 -0
- package/dist/providers/claude-code/spawn-claude.js.map +1 -0
- package/dist/providers/index.d.ts +3 -1
- package/dist/providers/index.js +16 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/utils/agent-controller-bin.d.ts +8 -0
- package/dist/utils/agent-controller-bin.js +58 -0
- package/dist/utils/agent-controller-bin.js.map +1 -0
- package/dist/utils/anthropic-auth.d.ts +25 -0
- package/dist/utils/anthropic-auth.js +13 -0
- package/dist/utils/anthropic-auth.js.map +1 -0
- package/dist/utils/apply-config.d.ts +28 -0
- package/dist/utils/apply-config.js +226 -0
- package/dist/utils/apply-config.js.map +1 -1
- package/dist/utils/claude-env.js +9 -4
- package/dist/utils/claude-env.js.map +1 -1
- package/dist/utils/config-merge-paths.d.ts +21 -0
- package/dist/utils/config-merge-paths.js +27 -0
- package/dist/utils/config-merge-paths.js.map +1 -0
- package/dist/utils/write-workspace-files.d.ts +15 -0
- package/dist/utils/write-workspace-files.js +48 -0
- package/dist/utils/write-workspace-files.js.map +1 -0
- package/package.json +1 -1
package/dist/handlers/chat.js
CHANGED
|
@@ -1,6 +1,60 @@
|
|
|
1
1
|
import { getProvider } from '../providers/index.js';
|
|
2
|
+
import { ClaudeCodeProvider } from '../providers/claude-code/index.js';
|
|
2
3
|
import { toErrorMessage } from '../utils/response.js';
|
|
3
4
|
import { logCollector } from '../connection.js';
|
|
5
|
+
const pendingClaudeChats = new Map();
|
|
6
|
+
/** Test-only: wipe any tracked in-flight claude-code chat sends. */
|
|
7
|
+
export function __resetClaudeChatRegistry() {
|
|
8
|
+
pendingClaudeChats.clear();
|
|
9
|
+
}
|
|
10
|
+
function resolvePendingClaudeChat(sessionKey) {
|
|
11
|
+
if (!sessionKey)
|
|
12
|
+
return;
|
|
13
|
+
const pending = pendingClaudeChats.get(sessionKey);
|
|
14
|
+
if (!pending)
|
|
15
|
+
return;
|
|
16
|
+
pendingClaudeChats.delete(sessionKey);
|
|
17
|
+
logCollector?.push('command_completed', 'info', 'chat_send completed', {
|
|
18
|
+
commandId: pending.commandId,
|
|
19
|
+
durationMs: Date.now() - pending.startMs,
|
|
20
|
+
sessionKey,
|
|
21
|
+
provider: 'claude-code',
|
|
22
|
+
});
|
|
23
|
+
// Clear the typing indicator — Claude has produced its reply.
|
|
24
|
+
Promise.resolve(pending.publish({ type: 'chat_typing', agentId: pending.agentId, state: false })).catch(() => { });
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Register a one-shot reply publisher with the claude-code provider. Called
|
|
28
|
+
* at startup from `main()` once the provider is configured. The publisher
|
|
29
|
+
* receives Claude's async `reply` / `edit_message` tool calls and publishes
|
|
30
|
+
* them to the chat channel via the supplied callback (typically a wrapper
|
|
31
|
+
* around `api.publishResponse` that emits `chat_response`).
|
|
32
|
+
*/
|
|
33
|
+
export function registerClaudeReplyPublisher(provider, publish) {
|
|
34
|
+
provider.setReplyPublisher((reply, tool, meta) => {
|
|
35
|
+
const sessionKey = typeof meta.chat_id === 'string' ? meta.chat_id : undefined;
|
|
36
|
+
const payload = {
|
|
37
|
+
type: tool === 'edit_message' ? 'chat_edit' : 'chat_response',
|
|
38
|
+
correlationId: typeof meta.message_id === 'string' ? meta.message_id : undefined,
|
|
39
|
+
sessionKey,
|
|
40
|
+
text: reply.text,
|
|
41
|
+
source: typeof meta.source === 'string' ? meta.source : undefined,
|
|
42
|
+
};
|
|
43
|
+
try {
|
|
44
|
+
void publish(payload);
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
logCollector?.push('claude_reply_publish_failed', 'warn', `reply publish failed: ${toErrorMessage(err)}`);
|
|
48
|
+
}
|
|
49
|
+
// Pair the reply with its originating chat_send (if any): clears the
|
|
50
|
+
// typing indicator and logs `command_completed`. Only `reply` (final)
|
|
51
|
+
// closes the command; `edit_message` is an intermediate progress update
|
|
52
|
+
// and must not clear typing.
|
|
53
|
+
if (tool === 'reply') {
|
|
54
|
+
resolvePendingClaudeChat(sessionKey);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
4
58
|
export async function handleChatListSessions(command, publish) {
|
|
5
59
|
logCollector?.push('command_received', 'info', `Command: ${command.type}`, {
|
|
6
60
|
commandId: command.id,
|
|
@@ -106,9 +160,41 @@ export async function handleChatSend(command, publish, agentId) {
|
|
|
106
160
|
text: '',
|
|
107
161
|
error: 'Chat provider not available',
|
|
108
162
|
});
|
|
163
|
+
await publish({ type: 'chat_typing', agentId, state: false }).catch(() => { });
|
|
109
164
|
return;
|
|
110
165
|
}
|
|
111
166
|
try {
|
|
167
|
+
// claude-code: if a login is pending, treat the next message as the auth
|
|
168
|
+
// code instead of a chat message. Acknowledge via chat_response.
|
|
169
|
+
if (provider instanceof ClaudeCodeProvider && provider.getPendingLoginUrl()) {
|
|
170
|
+
const accepted = provider.submitLoginCode(text);
|
|
171
|
+
const ack = accepted
|
|
172
|
+
? 'Login code received — finishing authentication…'
|
|
173
|
+
: 'No login prompt is waiting right now.';
|
|
174
|
+
logCollector?.push('command_completed', 'info', `${command.type} completed`, {
|
|
175
|
+
commandId: command.id,
|
|
176
|
+
durationMs: Date.now() - startMs,
|
|
177
|
+
sessionKey,
|
|
178
|
+
loginCodeSubmitted: accepted,
|
|
179
|
+
});
|
|
180
|
+
await publish({ type: 'chat_response', correlationId, sessionKey, text: ack }).catch(() => { });
|
|
181
|
+
await publish({ type: 'chat_typing', agentId, state: false }).catch(() => { });
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
// CLAUDE-CODE TYPING: ClaudeCodeProvider.sendMessage returns immediately
|
|
185
|
+
// and never invokes onDone — replies arrive async via the reply publisher.
|
|
186
|
+
// Register this command as "pending" so the publisher can clear typing
|
|
187
|
+
// and emit `command_completed` when Claude's first reply arrives.
|
|
188
|
+
const isClaudeCode = provider instanceof ClaudeCodeProvider;
|
|
189
|
+
if (isClaudeCode) {
|
|
190
|
+
pendingClaudeChats.set(sessionKey, {
|
|
191
|
+
commandId: command.id,
|
|
192
|
+
agentId,
|
|
193
|
+
sessionKey,
|
|
194
|
+
startMs,
|
|
195
|
+
publish,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
112
198
|
await provider.sendMessage({
|
|
113
199
|
sessionKey,
|
|
114
200
|
text,
|
|
@@ -124,13 +210,17 @@ export async function handleChatSend(command, publish, agentId) {
|
|
|
124
210
|
sessionKey,
|
|
125
211
|
});
|
|
126
212
|
await publish({ type: 'chat_response', correlationId, sessionKey, text: finalText }).catch(() => { });
|
|
213
|
+
await publish({ type: 'chat_typing', agentId, state: false }).catch(() => { });
|
|
127
214
|
},
|
|
128
215
|
onError: async (error) => {
|
|
129
216
|
logCollector?.push('command_failed', 'error', `${command.type} failed: ${error}`, {
|
|
130
217
|
commandId: command.id,
|
|
131
218
|
durationMs: Date.now() - startMs,
|
|
132
219
|
});
|
|
220
|
+
// Release any pending claude-code entry so it doesn't linger.
|
|
221
|
+
pendingClaudeChats.delete(sessionKey);
|
|
133
222
|
await publish({ type: 'chat_response', correlationId, sessionKey, text: '', error }).catch(() => { });
|
|
223
|
+
await publish({ type: 'chat_typing', agentId, state: false }).catch(() => { });
|
|
134
224
|
},
|
|
135
225
|
});
|
|
136
226
|
}
|
|
@@ -139,6 +229,8 @@ export async function handleChatSend(command, publish, agentId) {
|
|
|
139
229
|
commandId: command.id,
|
|
140
230
|
durationMs: Date.now() - startMs,
|
|
141
231
|
});
|
|
232
|
+
// Clear any claude-code pending entry to prevent stale tracking.
|
|
233
|
+
pendingClaudeChats.delete(sessionKey);
|
|
142
234
|
await publish({
|
|
143
235
|
type: 'chat_response',
|
|
144
236
|
correlationId,
|
|
@@ -146,6 +238,7 @@ export async function handleChatSend(command, publish, agentId) {
|
|
|
146
238
|
text: '',
|
|
147
239
|
error: toErrorMessage(err),
|
|
148
240
|
}).catch(() => { });
|
|
241
|
+
await publish({ type: 'chat_typing', agentId, state: false }).catch(() => { });
|
|
149
242
|
}
|
|
150
243
|
}
|
|
151
244
|
//# sourceMappingURL=chat.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/handlers/chat.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/handlers/chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import type { AgentCommand, AgentResponse } from '../types.js';
|
|
2
2
|
import type { KnowledgeGraphManager } from '../utils/knowledge-graph.js';
|
|
3
|
+
/**
|
|
4
|
+
* Forward KnowledgeGraphManager 'delta' events to the structured log stream so
|
|
5
|
+
* we can correlate WS broadcast with backend receipt. Call once at startup
|
|
6
|
+
* (idempotent per manager — caller is responsible for not double-wiring).
|
|
7
|
+
*/
|
|
8
|
+
export declare function wireMemoryDeltaLogging(manager: KnowledgeGraphManager): void;
|
|
3
9
|
/**
|
|
4
10
|
* Create WS command handlers for memory operations.
|
|
5
11
|
* All 9 handlers delegate to the shared KnowledgeGraphManager instance.
|
package/dist/handlers/memory.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { logCollector } from '../connection.js';
|
|
2
|
+
import { toErrorMessage } from '../utils/response.js';
|
|
1
3
|
// ---------------------------------------------------------------------------
|
|
2
|
-
//
|
|
4
|
+
// Helpers
|
|
3
5
|
// ---------------------------------------------------------------------------
|
|
4
6
|
function ok(cmd, data) {
|
|
5
7
|
return {
|
|
@@ -9,6 +11,91 @@ function ok(cmd, data) {
|
|
|
9
11
|
data: data,
|
|
10
12
|
};
|
|
11
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Compute a compact payload-shape summary for logs. NEVER logs values —
|
|
16
|
+
* only counts / top-level shape, so we can't leak observation contents.
|
|
17
|
+
*/
|
|
18
|
+
function payloadShape(cmd) {
|
|
19
|
+
const p = (cmd.payload ?? {});
|
|
20
|
+
const shape = {};
|
|
21
|
+
const entities = p.entities;
|
|
22
|
+
if (Array.isArray(entities))
|
|
23
|
+
shape.entityCount = entities.length;
|
|
24
|
+
const relations = p.relations;
|
|
25
|
+
if (Array.isArray(relations))
|
|
26
|
+
shape.relationCount = relations.length;
|
|
27
|
+
const observations = p.observations;
|
|
28
|
+
if (Array.isArray(observations))
|
|
29
|
+
shape.observationCount = observations.length;
|
|
30
|
+
const deletions = p.deletions;
|
|
31
|
+
if (Array.isArray(deletions))
|
|
32
|
+
shape.deletionCount = deletions.length;
|
|
33
|
+
const entityNames = p.entityNames;
|
|
34
|
+
if (Array.isArray(entityNames))
|
|
35
|
+
shape.entityNameCount = entityNames.length;
|
|
36
|
+
const names = p.names;
|
|
37
|
+
if (Array.isArray(names))
|
|
38
|
+
shape.nameCount = names.length;
|
|
39
|
+
return shape;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Wrap a memory handler with structured lifecycle logs:
|
|
43
|
+
* memory_cmd_received → memory_cmd_persisting → memory_cmd_completed | memory_cmd_failed
|
|
44
|
+
* The `received`/`persisting` logs fire BEFORE disk I/O so that a hang during
|
|
45
|
+
* atomic write leaves the last-known state in backend-visible logs.
|
|
46
|
+
*/
|
|
47
|
+
function instrument(type, fn) {
|
|
48
|
+
return async (cmd) => {
|
|
49
|
+
const started = Date.now();
|
|
50
|
+
const shape = payloadShape(cmd);
|
|
51
|
+
logCollector?.push('memory_cmd_received', 'info', `memory ${type} received`, {
|
|
52
|
+
commandId: cmd.id,
|
|
53
|
+
type,
|
|
54
|
+
...shape,
|
|
55
|
+
});
|
|
56
|
+
logCollector?.push('memory_cmd_persisting', 'info', `memory ${type} persisting`, {
|
|
57
|
+
commandId: cmd.id,
|
|
58
|
+
type,
|
|
59
|
+
...shape,
|
|
60
|
+
});
|
|
61
|
+
try {
|
|
62
|
+
const res = await fn(cmd);
|
|
63
|
+
logCollector?.push('memory_cmd_completed', 'info', `memory ${type} completed`, {
|
|
64
|
+
commandId: cmd.id,
|
|
65
|
+
type,
|
|
66
|
+
durationMs: Date.now() - started,
|
|
67
|
+
...shape,
|
|
68
|
+
});
|
|
69
|
+
return res;
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
logCollector?.push('memory_cmd_failed', 'error', `memory ${type} failed: ${toErrorMessage(err)}`, {
|
|
73
|
+
commandId: cmd.id,
|
|
74
|
+
type,
|
|
75
|
+
durationMs: Date.now() - started,
|
|
76
|
+
error: toErrorMessage(err),
|
|
77
|
+
...shape,
|
|
78
|
+
});
|
|
79
|
+
throw err;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Forward KnowledgeGraphManager 'delta' events to the structured log stream so
|
|
85
|
+
* we can correlate WS broadcast with backend receipt. Call once at startup
|
|
86
|
+
* (idempotent per manager — caller is responsible for not double-wiring).
|
|
87
|
+
*/
|
|
88
|
+
export function wireMemoryDeltaLogging(manager) {
|
|
89
|
+
manager.on('delta', (delta) => {
|
|
90
|
+
let count = 0;
|
|
91
|
+
if (Array.isArray(delta.data))
|
|
92
|
+
count = delta.data.length;
|
|
93
|
+
logCollector?.push('memory_delta', 'debug', `memory delta ${delta.action}`, {
|
|
94
|
+
action: delta.action,
|
|
95
|
+
count,
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
}
|
|
12
99
|
// ---------------------------------------------------------------------------
|
|
13
100
|
// Handler factory
|
|
14
101
|
// ---------------------------------------------------------------------------
|
|
@@ -18,24 +105,24 @@ function ok(cmd, data) {
|
|
|
18
105
|
*/
|
|
19
106
|
export function createMemoryHandlers(manager) {
|
|
20
107
|
return {
|
|
21
|
-
memory_create_entities: async (cmd) => ok(cmd, await manager.createEntities(cmd.payload.entities)),
|
|
22
|
-
memory_create_relations: async (cmd) => ok(cmd, await manager.createRelations(cmd.payload.relations)),
|
|
23
|
-
memory_add_observations: async (cmd) => ok(cmd, await manager.addObservations(cmd.payload.observations)),
|
|
24
|
-
memory_delete_entities: async (cmd) => {
|
|
108
|
+
memory_create_entities: instrument('memory_create_entities', async (cmd) => ok(cmd, await manager.createEntities(cmd.payload.entities))),
|
|
109
|
+
memory_create_relations: instrument('memory_create_relations', async (cmd) => ok(cmd, await manager.createRelations(cmd.payload.relations))),
|
|
110
|
+
memory_add_observations: instrument('memory_add_observations', async (cmd) => ok(cmd, await manager.addObservations(cmd.payload.observations))),
|
|
111
|
+
memory_delete_entities: instrument('memory_delete_entities', async (cmd) => {
|
|
25
112
|
await manager.deleteEntities(cmd.payload.entityNames);
|
|
26
113
|
return ok(cmd, {});
|
|
27
|
-
},
|
|
28
|
-
memory_delete_observations: async (cmd) => {
|
|
114
|
+
}),
|
|
115
|
+
memory_delete_observations: instrument('memory_delete_observations', async (cmd) => {
|
|
29
116
|
await manager.deleteObservations(cmd.payload.deletions);
|
|
30
117
|
return ok(cmd, {});
|
|
31
|
-
},
|
|
32
|
-
memory_delete_relations: async (cmd) => {
|
|
118
|
+
}),
|
|
119
|
+
memory_delete_relations: instrument('memory_delete_relations', async (cmd) => {
|
|
33
120
|
await manager.deleteRelations(cmd.payload.relations);
|
|
34
121
|
return ok(cmd, {});
|
|
35
|
-
},
|
|
36
|
-
memory_read_graph: async (cmd) => ok(cmd, manager.readGraph()),
|
|
37
|
-
memory_search_nodes: async (cmd) => ok(cmd, manager.searchNodes(cmd.payload.query)),
|
|
38
|
-
memory_open_nodes: async (cmd) => ok(cmd, manager.openNodes(cmd.payload.names)),
|
|
122
|
+
}),
|
|
123
|
+
memory_read_graph: instrument('memory_read_graph', async (cmd) => ok(cmd, manager.readGraph())),
|
|
124
|
+
memory_search_nodes: instrument('memory_search_nodes', async (cmd) => ok(cmd, manager.searchNodes(cmd.payload.query))),
|
|
125
|
+
memory_open_nodes: instrument('memory_open_nodes', async (cmd) => ok(cmd, manager.openNodes(cmd.payload.names))),
|
|
39
126
|
};
|
|
40
127
|
}
|
|
41
128
|
//# sourceMappingURL=memory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/handlers/memory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/handlers/memory.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -8,28 +8,47 @@ import { createAgentApi } from './api.js';
|
|
|
8
8
|
import { BoardHandler } from './handlers/board-handler.js';
|
|
9
9
|
import { McpBoardClient } from './mcp-client.js';
|
|
10
10
|
import { configureProvider, createProvider, getProvider } from './providers/index.js';
|
|
11
|
+
import { ClaudeCodeProvider } from './providers/claude-code/index.js';
|
|
12
|
+
import { registerClaudeReplyPublisher } from './handlers/chat.js';
|
|
11
13
|
import { DEBUG } from './debug.js';
|
|
12
14
|
import { getBackendUrl } from './utils/env.js';
|
|
13
15
|
import { config, requireConfig } from './config.js';
|
|
14
16
|
import { createLockFile } from './lockfile.js';
|
|
15
|
-
import { applyBootstrapConfig } from './utils/apply-config.js';
|
|
17
|
+
import { applyBootstrapConfig, applyMergeableConfig } from './utils/apply-config.js';
|
|
16
18
|
import { KnowledgeGraphManager } from './utils/knowledge-graph.js';
|
|
17
19
|
import { startMemoryMcpServer } from './memory-mcp-server.js';
|
|
20
|
+
import { wireMemoryDeltaLogging } from './handlers/memory.js';
|
|
18
21
|
import { toErrorMessage } from './utils/response.js';
|
|
19
22
|
const _require = createRequire(import.meta.url);
|
|
20
23
|
const { version: CONTROLLER_VERSION } = _require(join(dirname(fileURLToPath(import.meta.url)), '../package.json'));
|
|
21
|
-
/** On startup, fetch latest config from bootstrap API and apply
|
|
24
|
+
/** On startup, fetch latest config from bootstrap API and apply.
|
|
25
|
+
*
|
|
26
|
+
* - vm / k8s → full `applyBootstrapConfig` (writes openclaw.json,
|
|
27
|
+
* auth-profiles.json, ~/.claude/settings.json, .env, restarts gateway).
|
|
28
|
+
* - standalone / undefined → `applyMergeableConfig` does a SCOPED merge of
|
|
29
|
+
* allowlisted safe-additive sections (mcpServers, tools.media.*, etc.)
|
|
30
|
+
* into the user's existing openclaw.json. Local values always win on
|
|
31
|
+
* conflict, and auth-profiles.json / .env / gateway are left untouched.
|
|
32
|
+
*/
|
|
22
33
|
async function refreshConfigFromBootstrap() {
|
|
23
34
|
const backendUrl = config.backendUrl;
|
|
24
35
|
const agentToken = config.agentToken;
|
|
25
36
|
const agentId = config.agentId;
|
|
26
37
|
if (!backendUrl || !agentToken || !agentId)
|
|
27
38
|
return;
|
|
39
|
+
const deployType = config.agentDeployType;
|
|
40
|
+
const managedDeploy = deployType === 'vm' || deployType === 'k8s';
|
|
28
41
|
try {
|
|
29
42
|
const api = createAgentApi(backendUrl, agentToken);
|
|
30
43
|
const data = await api.agentBootstrap(agentId);
|
|
31
|
-
|
|
32
|
-
|
|
44
|
+
if (managedDeploy) {
|
|
45
|
+
await applyBootstrapConfig(data);
|
|
46
|
+
console.log(`[startup] Config refreshed from bootstrap API (deployType=${deployType})`);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
await applyMergeableConfig(data);
|
|
50
|
+
console.log(`[startup] Scoped merge of mergeable config sections applied (deployType=${deployType ?? 'standalone'}); local config preserved on conflict`);
|
|
51
|
+
}
|
|
33
52
|
}
|
|
34
53
|
catch (err) {
|
|
35
54
|
console.error('[startup] Failed to refresh config from bootstrap:', err instanceof Error ? err.message : err);
|
|
@@ -128,6 +147,8 @@ export async function main() {
|
|
|
128
147
|
version: CONTROLLER_VERSION,
|
|
129
148
|
knowledgeGraphManager,
|
|
130
149
|
});
|
|
150
|
+
// Wire structured delta logs AFTER createConnection() so logCollector is set.
|
|
151
|
+
wireMemoryDeltaLogging(knowledgeGraphManager);
|
|
131
152
|
// Configure agent provider
|
|
132
153
|
const providerType = config.agentProvider;
|
|
133
154
|
const gatewayWsUrl = config.gatewayWsUrl;
|
|
@@ -150,6 +171,28 @@ export async function main() {
|
|
|
150
171
|
});
|
|
151
172
|
console.log('Mock provider configured');
|
|
152
173
|
}
|
|
174
|
+
else if (providerType === 'claude-code') {
|
|
175
|
+
const provider = createProvider('claude-code', {
|
|
176
|
+
workspaceDir: config.claudeWorkspaceDir,
|
|
177
|
+
anthropicApiKey: config.anthropicApiKey,
|
|
178
|
+
anthropicAuthToken: config.anthropicAuthToken,
|
|
179
|
+
claudeCodeOauthToken: config.claudeCodeOauthToken,
|
|
180
|
+
backendUrl,
|
|
181
|
+
agentToken: token,
|
|
182
|
+
});
|
|
183
|
+
configureProvider(provider);
|
|
184
|
+
// Wire the reply publisher: Claude's async reply tool calls are published
|
|
185
|
+
// to the backend as `chat_response` events so the chat UI receives them.
|
|
186
|
+
if (provider instanceof ClaudeCodeProvider) {
|
|
187
|
+
registerClaudeReplyPublisher(provider, (payload) => api.publishResponse(agentId, payload).catch((err) => {
|
|
188
|
+
console.error('[claude-code] reply publish failed:', err instanceof Error ? err.message : err);
|
|
189
|
+
}));
|
|
190
|
+
}
|
|
191
|
+
provider.connect().catch((err) => {
|
|
192
|
+
console.error('claude-code provider connect failed:', err instanceof Error ? err.message : err);
|
|
193
|
+
});
|
|
194
|
+
console.log('claude-code provider configured');
|
|
195
|
+
}
|
|
153
196
|
else {
|
|
154
197
|
console.error(`Unknown provider type: ${providerType}`);
|
|
155
198
|
process.exit(1);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
|
|
3
|
+
export interface ChannelReplyMeta {
|
|
4
|
+
chat_id?: string;
|
|
5
|
+
message_id?: string;
|
|
6
|
+
source?: string;
|
|
7
|
+
user?: string;
|
|
8
|
+
ts?: string;
|
|
9
|
+
[k: string]: unknown;
|
|
10
|
+
}
|
|
11
|
+
export interface ChannelReply {
|
|
12
|
+
text: string;
|
|
13
|
+
reply_to?: string;
|
|
14
|
+
files?: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface ChannelMessageMeta {
|
|
17
|
+
chat_id: string;
|
|
18
|
+
source: string;
|
|
19
|
+
message_id?: string;
|
|
20
|
+
user?: string;
|
|
21
|
+
ts?: string;
|
|
22
|
+
file_path?: string;
|
|
23
|
+
}
|
|
24
|
+
export type ReplyHandler = (reply: ChannelReply, tool: 'reply' | 'edit_message') => void;
|
|
25
|
+
/**
|
|
26
|
+
* MCP channel server — stdio-based, modeled after anthropics/claude-plugins-official
|
|
27
|
+
* `fakechat/server.ts`. When Claude Code is launched with
|
|
28
|
+
* `--channels plugin:<plugin-name>` and a `.mcp.json` entry that spawns this
|
|
29
|
+
* process, it advertises the `claude/channel` experimental capability.
|
|
30
|
+
*
|
|
31
|
+
* Inbound (we → Claude): `pushChatMessage(content, meta)` emits an MCP
|
|
32
|
+
* notification `notifications/claude/channel`.
|
|
33
|
+
*
|
|
34
|
+
* Outbound (Claude → we): Claude calls our `reply` / `edit_message` tool.
|
|
35
|
+
* Listeners registered via `onReply(handler)` receive the call args.
|
|
36
|
+
*/
|
|
37
|
+
export declare class ClaudeChannelServer extends EventEmitter {
|
|
38
|
+
private readonly opts;
|
|
39
|
+
private server;
|
|
40
|
+
private transport;
|
|
41
|
+
private started;
|
|
42
|
+
constructor(opts?: {
|
|
43
|
+
name?: string;
|
|
44
|
+
version?: string;
|
|
45
|
+
instructions?: string;
|
|
46
|
+
});
|
|
47
|
+
private registerHandlers;
|
|
48
|
+
/**
|
|
49
|
+
* Start the MCP server on a given transport (stdio by default).
|
|
50
|
+
* Pass a custom transport for in-process tests.
|
|
51
|
+
*/
|
|
52
|
+
start(transport?: Transport): Promise<void>;
|
|
53
|
+
/** Emit a channel notification to Claude. */
|
|
54
|
+
pushChatMessage(content: string, meta: ChannelMessageMeta): Promise<void>;
|
|
55
|
+
/** Register a callback for incoming reply/edit tool calls from Claude. */
|
|
56
|
+
onReply(handler: ReplyHandler): () => void;
|
|
57
|
+
/** Graceful shutdown. */
|
|
58
|
+
stop(): Promise<void>;
|
|
59
|
+
isStarted(): boolean;
|
|
60
|
+
}
|