@excitedjs/dreamux 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +155 -160
- package/bin/tm +30 -0
- package/dist/admin/client.js +98 -0
- package/dist/admin/client.js.map +1 -0
- package/dist/admin/methods.js +83 -38
- package/dist/admin/methods.js.map +1 -1
- package/dist/admin/socket.js +2 -2
- package/dist/admin/socket.js.map +1 -1
- package/dist/channel/feishu-gate.js +187 -18
- package/dist/channel/feishu-gate.js.map +1 -1
- package/dist/channel/feishu-message.js +92 -0
- package/dist/channel/feishu-message.js.map +1 -0
- package/dist/cli/doctor.js +53 -58
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/dreamux.js +33 -51
- package/dist/cli/dreamux.js.map +1 -1
- package/dist/cli/server-ctl.js +6 -8
- package/dist/cli/server-ctl.js.map +1 -1
- package/dist/cli/server.js +22 -32
- package/dist/cli/server.js.map +1 -1
- package/dist/codex/events.js +3 -2
- package/dist/codex/events.js.map +1 -1
- package/dist/codex/mcp-config.js +24 -0
- package/dist/codex/mcp-config.js.map +1 -0
- package/dist/codex/supervisor.js +16 -0
- package/dist/codex/supervisor.js.map +1 -1
- package/dist/dispatcher/approval.js +2 -3
- package/dist/dispatcher/approval.js.map +1 -1
- package/dist/dispatcher/runtime.js +193 -141
- package/dist/dispatcher/runtime.js.map +1 -1
- package/dist/dispatcher/turn-manager.js +78 -97
- package/dist/dispatcher/turn-manager.js.map +1 -1
- package/dist/feishu/bot.js +71 -9
- package/dist/feishu/bot.js.map +1 -1
- package/dist/mcp/feishu-mcp.js +269 -0
- package/dist/mcp/feishu-mcp.js.map +1 -0
- package/dist/onboard/config-files.js +52 -22
- package/dist/onboard/config-files.js.map +1 -1
- package/dist/onboard/dispatcher-skill.js +18 -0
- package/dist/onboard/dispatcher-skill.js.map +1 -0
- package/dist/onboard/run.js +17 -50
- package/dist/onboard/run.js.map +1 -1
- package/dist/onboard/service.js +4 -8
- package/dist/onboard/service.js.map +1 -1
- package/dist/onboard/uninstall.js +47 -13
- package/dist/onboard/uninstall.js.map +1 -1
- package/dist/onboard/wizard.js +3 -27
- package/dist/onboard/wizard.js.map +1 -1
- package/dist/runtime/config.js +158 -64
- package/dist/runtime/config.js.map +1 -1
- package/dist/runtime/dispatcher-codex-home.js +14 -51
- package/dist/runtime/dispatcher-codex-home.js.map +1 -1
- package/dist/runtime/dispatcher-id.js +9 -0
- package/dist/runtime/dispatcher-id.js.map +1 -0
- package/dist/runtime/dispatcher-store.js +202 -0
- package/dist/runtime/dispatcher-store.js.map +1 -0
- package/dist/runtime/package-bin.js +41 -0
- package/dist/runtime/package-bin.js.map +1 -0
- package/dist/runtime/paths.js +82 -48
- package/dist/runtime/paths.js.map +1 -1
- package/dist/runtime/secrets.js +4 -3
- package/dist/runtime/secrets.js.map +1 -1
- package/dist/server.js +110 -36
- package/dist/server.js.map +1 -1
- package/package.json +6 -6
- package/skills/dispatcher/SKILL.md +107 -0
- package/db/migrations/0001_init.sql +0 -49
- package/dist/channel/outbound.js +0 -12
- package/dist/channel/outbound.js.map +0 -1
- package/dist/db/repository.js +0 -223
- package/dist/db/repository.js.map +0 -1
- package/dist/db/schema.js +0 -29
- package/dist/db/schema.js.map +0 -1
- package/dist/db/types.js +0 -2
- package/dist/db/types.js.map +0 -1
- package/dist/onboard/plugins.js +0 -202
- package/dist/onboard/plugins.js.map +0 -1
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { createInterface } from 'node:readline';
|
|
2
|
+
import { AdminClientError, sendAdminRequest, } from '../admin/client.js';
|
|
3
|
+
import { adminSocketPath as defaultAdminSocketPath } from '../runtime/paths.js';
|
|
4
|
+
import { validateDispatcherId } from '../runtime/dispatcher-id.js';
|
|
5
|
+
const JSONRPC_VERSION = '2.0';
|
|
6
|
+
const DEFAULT_MCP_PROTOCOL_VERSION = '2024-11-05';
|
|
7
|
+
const SUPPORTED_MCP_PROTOCOL_VERSIONS = new Set([
|
|
8
|
+
'2025-06-18',
|
|
9
|
+
'2025-03-26',
|
|
10
|
+
'2024-11-05',
|
|
11
|
+
]);
|
|
12
|
+
export async function runFeishuMcp(opts) {
|
|
13
|
+
const dispatcherId = validateDispatcherId(opts.dispatcherId);
|
|
14
|
+
const socketPath = opts.adminSocketPath ?? defaultAdminSocketPath();
|
|
15
|
+
const input = opts.input ?? process.stdin;
|
|
16
|
+
const output = opts.output ?? process.stdout;
|
|
17
|
+
const log = opts.log ?? ((message) => console.error(message));
|
|
18
|
+
const lines = createInterface({ input, crlfDelay: Infinity });
|
|
19
|
+
for await (const line of lines) {
|
|
20
|
+
const trimmed = line.trim();
|
|
21
|
+
if (trimmed === '')
|
|
22
|
+
continue;
|
|
23
|
+
let request;
|
|
24
|
+
try {
|
|
25
|
+
request = JSON.parse(trimmed);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
write(output, errorResponse(null, -32700, parseMessage(err)));
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
await handleRequest(request, {
|
|
33
|
+
dispatcherId,
|
|
34
|
+
socketPath,
|
|
35
|
+
output,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
log(`feishu-mcp: ${parseMessage(err)}`);
|
|
40
|
+
if (request.id !== undefined) {
|
|
41
|
+
write(output, errorResponse(request.id, -32603, parseMessage(err)));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async function handleRequest(request, ctx) {
|
|
47
|
+
if (typeof request.method !== 'string') {
|
|
48
|
+
if (request.id !== undefined) {
|
|
49
|
+
write(ctx.output, errorResponse(request.id, -32600, 'missing method'));
|
|
50
|
+
}
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
switch (request.method) {
|
|
54
|
+
case 'initialize':
|
|
55
|
+
if (request.id !== undefined) {
|
|
56
|
+
write(ctx.output, okResponse(request.id, initializeResult(request.params)));
|
|
57
|
+
}
|
|
58
|
+
return;
|
|
59
|
+
case 'initialized':
|
|
60
|
+
case 'notifications/initialized':
|
|
61
|
+
return;
|
|
62
|
+
case 'tools/list':
|
|
63
|
+
if (request.id !== undefined) {
|
|
64
|
+
write(ctx.output, okResponse(request.id, { tools: feishuTools() }));
|
|
65
|
+
}
|
|
66
|
+
return;
|
|
67
|
+
case 'tools/call':
|
|
68
|
+
if (request.id !== undefined) {
|
|
69
|
+
write(ctx.output, okResponse(request.id, await callTool(request.params, ctx)));
|
|
70
|
+
}
|
|
71
|
+
return;
|
|
72
|
+
default:
|
|
73
|
+
if (request.id !== undefined) {
|
|
74
|
+
write(ctx.output, errorResponse(request.id, -32601, `unknown MCP method '${request.method}'`));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function initializeResult(params) {
|
|
79
|
+
return {
|
|
80
|
+
protocolVersion: negotiateProtocolVersion(params),
|
|
81
|
+
capabilities: {
|
|
82
|
+
tools: {},
|
|
83
|
+
},
|
|
84
|
+
serverInfo: {
|
|
85
|
+
name: 'dreamux-feishu',
|
|
86
|
+
version: '0.2.0',
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function feishuTools() {
|
|
91
|
+
return [
|
|
92
|
+
{
|
|
93
|
+
name: 'reply',
|
|
94
|
+
description: 'Send a Feishu message through this dispatcher channel.',
|
|
95
|
+
inputSchema: {
|
|
96
|
+
type: 'object',
|
|
97
|
+
additionalProperties: false,
|
|
98
|
+
properties: {
|
|
99
|
+
chat_id: {
|
|
100
|
+
type: 'string',
|
|
101
|
+
description: 'Feishu chat id from the inbound feishu_message block.',
|
|
102
|
+
},
|
|
103
|
+
message_id: {
|
|
104
|
+
type: 'string',
|
|
105
|
+
description: 'Optional source message id to reply under.',
|
|
106
|
+
},
|
|
107
|
+
text: {
|
|
108
|
+
type: 'string',
|
|
109
|
+
description: 'Message text to send.',
|
|
110
|
+
},
|
|
111
|
+
mention_user_ids: {
|
|
112
|
+
type: 'array',
|
|
113
|
+
items: { type: 'string' },
|
|
114
|
+
description: 'Optional Feishu user ids to mention.',
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
required: ['chat_id', 'text'],
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
name: 'react',
|
|
122
|
+
description: 'Add a model-owned Feishu reaction through this dispatcher channel.',
|
|
123
|
+
inputSchema: {
|
|
124
|
+
type: 'object',
|
|
125
|
+
additionalProperties: false,
|
|
126
|
+
properties: {
|
|
127
|
+
message_id: {
|
|
128
|
+
type: 'string',
|
|
129
|
+
description: 'Feishu message id to react to.',
|
|
130
|
+
},
|
|
131
|
+
emoji: {
|
|
132
|
+
type: 'string',
|
|
133
|
+
description: 'Feishu reaction emoji key.',
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
required: ['message_id', 'emoji'],
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
];
|
|
140
|
+
}
|
|
141
|
+
async function callTool(params, ctx) {
|
|
142
|
+
try {
|
|
143
|
+
const call = asToolCallParams(params);
|
|
144
|
+
if (call.name === 'reply') {
|
|
145
|
+
return forwardToolCall('mcp.reply', {
|
|
146
|
+
dispatcher_id: ctx.dispatcherId,
|
|
147
|
+
...replyArgs(call.arguments),
|
|
148
|
+
}, ctx.socketPath, 'reply');
|
|
149
|
+
}
|
|
150
|
+
if (call.name === 'react') {
|
|
151
|
+
return forwardToolCall('mcp.react', {
|
|
152
|
+
dispatcher_id: ctx.dispatcherId,
|
|
153
|
+
...reactArgs(call.arguments),
|
|
154
|
+
}, ctx.socketPath, 'react');
|
|
155
|
+
}
|
|
156
|
+
return toolError(`unknown Feishu tool '${String(call.name)}'`);
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
return toolError(parseMessage(err));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
function negotiateProtocolVersion(params) {
|
|
163
|
+
const requested = params !== null && typeof params === 'object' && !Array.isArray(params)
|
|
164
|
+
? params['protocolVersion']
|
|
165
|
+
: undefined;
|
|
166
|
+
if (typeof requested === 'string' &&
|
|
167
|
+
SUPPORTED_MCP_PROTOCOL_VERSIONS.has(requested)) {
|
|
168
|
+
return requested;
|
|
169
|
+
}
|
|
170
|
+
return DEFAULT_MCP_PROTOCOL_VERSION;
|
|
171
|
+
}
|
|
172
|
+
async function forwardToolCall(method, params, socketPath, label) {
|
|
173
|
+
try {
|
|
174
|
+
const result = await sendAdminRequest(method, params, { socketPath });
|
|
175
|
+
return {
|
|
176
|
+
content: [{ type: 'text', text: `${label} forwarded to dreamux serve` }],
|
|
177
|
+
structuredContent: result,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
const prefix = err instanceof AdminClientError ? `[${err.code}] ` : '';
|
|
182
|
+
return toolError(`${prefix}${parseMessage(err)}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function asToolCallParams(params) {
|
|
186
|
+
const obj = asRecord(params, 'tools/call params');
|
|
187
|
+
const name = obj['name'];
|
|
188
|
+
if (typeof name !== 'string' || name === '') {
|
|
189
|
+
throw new Error('tools/call params.name must be a non-empty string');
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
name,
|
|
193
|
+
arguments: obj['arguments'] ?? {},
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
function replyArgs(value) {
|
|
197
|
+
const obj = asRecord(value, 'reply arguments');
|
|
198
|
+
const chatId = requireString(obj, 'chat_id');
|
|
199
|
+
const text = requireString(obj, 'text');
|
|
200
|
+
const messageId = optionalString(obj, 'message_id');
|
|
201
|
+
const mentionUserIds = optionalStringArray(obj, 'mention_user_ids');
|
|
202
|
+
return {
|
|
203
|
+
chat_id: chatId,
|
|
204
|
+
text,
|
|
205
|
+
...(messageId !== null ? { message_id: messageId } : {}),
|
|
206
|
+
...(mentionUserIds !== null ? { mention_user_ids: mentionUserIds } : {}),
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
function reactArgs(value) {
|
|
210
|
+
const obj = asRecord(value, 'react arguments');
|
|
211
|
+
return {
|
|
212
|
+
message_id: requireString(obj, 'message_id'),
|
|
213
|
+
emoji: requireString(obj, 'emoji'),
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
function asRecord(value, label) {
|
|
217
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
218
|
+
throw new Error(`${label} must be an object`);
|
|
219
|
+
}
|
|
220
|
+
return value;
|
|
221
|
+
}
|
|
222
|
+
function requireString(obj, key) {
|
|
223
|
+
const value = obj[key];
|
|
224
|
+
if (typeof value !== 'string' || value === '') {
|
|
225
|
+
throw new Error(`${key} must be a non-empty string`);
|
|
226
|
+
}
|
|
227
|
+
return value;
|
|
228
|
+
}
|
|
229
|
+
function optionalString(obj, key) {
|
|
230
|
+
const value = obj[key];
|
|
231
|
+
if (value === undefined || value === null || value === '')
|
|
232
|
+
return null;
|
|
233
|
+
if (typeof value !== 'string') {
|
|
234
|
+
throw new Error(`${key} must be a string`);
|
|
235
|
+
}
|
|
236
|
+
return value;
|
|
237
|
+
}
|
|
238
|
+
function optionalStringArray(obj, key) {
|
|
239
|
+
const value = obj[key];
|
|
240
|
+
if (value === undefined || value === null)
|
|
241
|
+
return null;
|
|
242
|
+
if (!Array.isArray(value) || value.some((item) => typeof item !== 'string')) {
|
|
243
|
+
throw new Error(`${key} must be an array of strings`);
|
|
244
|
+
}
|
|
245
|
+
return value;
|
|
246
|
+
}
|
|
247
|
+
function toolError(message) {
|
|
248
|
+
return {
|
|
249
|
+
isError: true,
|
|
250
|
+
content: [{ type: 'text', text: message }],
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
function okResponse(id, result) {
|
|
254
|
+
return { jsonrpc: JSONRPC_VERSION, id, result };
|
|
255
|
+
}
|
|
256
|
+
function errorResponse(id, code, message) {
|
|
257
|
+
return {
|
|
258
|
+
jsonrpc: JSONRPC_VERSION,
|
|
259
|
+
id,
|
|
260
|
+
error: { code, message },
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
function write(output, message) {
|
|
264
|
+
output.write(`${JSON.stringify(message)}\n`);
|
|
265
|
+
}
|
|
266
|
+
function parseMessage(err) {
|
|
267
|
+
return err instanceof Error ? err.message : String(err);
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=feishu-mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feishu-mcp.js","sourceRoot":"","sources":["../../src/mcp/feishu-mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +1,27 @@
|
|
|
1
1
|
import { BUILT_IN_DEFAULTS, stringifyConfig, } from '../runtime/config.js';
|
|
2
|
+
import { validateDispatcherId } from '../runtime/dispatcher-id.js';
|
|
2
3
|
export function buildDreamuxConfigJson(answers) {
|
|
3
4
|
return stringifyConfig(dreamuxConfigFromAnswers(answers));
|
|
4
5
|
}
|
|
5
6
|
export function dreamuxConfigFromAnswers(answers, existing) {
|
|
7
|
+
validateDispatcherId(answers.dispatcherId);
|
|
6
8
|
const base = existing ?? dreamuxConfigDefaultsFromAnswers(answers);
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
const dispatchers = base.dispatchers
|
|
10
|
+
.filter((dispatcher) => dispatcher.id !== answers.dispatcherId)
|
|
11
|
+
.map(cloneDispatcherConfig);
|
|
12
|
+
dispatchers.push(dispatcherConfigFromAnswers(answers));
|
|
13
|
+
const next = {
|
|
10
14
|
codex: {
|
|
11
15
|
...base.codex,
|
|
12
16
|
extra_args: [...base.codex.extra_args],
|
|
13
17
|
},
|
|
14
|
-
|
|
15
|
-
feishu: {
|
|
16
|
-
bots: {
|
|
17
|
-
...base.feishu.bots,
|
|
18
|
-
[answers.dispatcherId]: {
|
|
19
|
-
app_id: answers.botAppId,
|
|
20
|
-
app_secret: answers.botAppSecret,
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
},
|
|
18
|
+
dispatchers,
|
|
24
19
|
};
|
|
20
|
+
assertUniqueFeishuAppIds(next);
|
|
21
|
+
return next;
|
|
25
22
|
}
|
|
26
23
|
function dreamuxConfigDefaultsFromAnswers(answers) {
|
|
27
24
|
return {
|
|
28
|
-
runtime_dir: answers.runtimeDir,
|
|
29
|
-
admin_socket: null,
|
|
30
25
|
codex: {
|
|
31
26
|
bin: answers.codexBin,
|
|
32
27
|
approval_policy: 'never',
|
|
@@ -34,13 +29,7 @@ function dreamuxConfigDefaultsFromAnswers(answers) {
|
|
|
34
29
|
extra_args: [],
|
|
35
30
|
initialize_timeout_ms: BUILT_IN_DEFAULTS.codex.initialize_timeout_ms,
|
|
36
31
|
},
|
|
37
|
-
|
|
38
|
-
retries: BUILT_IN_DEFAULTS.outbound.retries,
|
|
39
|
-
retry_delay_ms: BUILT_IN_DEFAULTS.outbound.retry_delay_ms,
|
|
40
|
-
},
|
|
41
|
-
feishu: {
|
|
42
|
-
bots: {},
|
|
43
|
-
},
|
|
32
|
+
dispatchers: [],
|
|
44
33
|
};
|
|
45
34
|
}
|
|
46
35
|
export function dispatcherBotSecretRef(dispatcherId) {
|
|
@@ -53,4 +42,45 @@ export function dispatcherCodexArgsJson() {
|
|
|
53
42
|
extraArgs: [],
|
|
54
43
|
});
|
|
55
44
|
}
|
|
45
|
+
function assertUniqueFeishuAppIds(config) {
|
|
46
|
+
const seen = new Map();
|
|
47
|
+
for (const dispatcher of config.dispatchers) {
|
|
48
|
+
const existing = seen.get(dispatcher.feishu.app_id);
|
|
49
|
+
if (existing !== undefined && existing !== dispatcher.id) {
|
|
50
|
+
throw new Error(`Feishu app_id for dispatcher '${dispatcher.id}' duplicates dispatcher '${existing}'`);
|
|
51
|
+
}
|
|
52
|
+
seen.set(dispatcher.feishu.app_id, dispatcher.id);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function dispatcherConfigFromAnswers(answers) {
|
|
56
|
+
return {
|
|
57
|
+
id: answers.dispatcherId,
|
|
58
|
+
cwd: answers.dispatcherCwd,
|
|
59
|
+
enabled: true,
|
|
60
|
+
feishu: {
|
|
61
|
+
app_id: answers.botAppId,
|
|
62
|
+
app_secret: answers.botAppSecret,
|
|
63
|
+
},
|
|
64
|
+
codex: {
|
|
65
|
+
approval_policy: 'never',
|
|
66
|
+
sandbox_mode: 'workspace-write',
|
|
67
|
+
extra_args: [],
|
|
68
|
+
extra_env: {},
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function cloneDispatcherConfig(dispatcher) {
|
|
73
|
+
return {
|
|
74
|
+
id: dispatcher.id,
|
|
75
|
+
cwd: dispatcher.cwd,
|
|
76
|
+
enabled: dispatcher.enabled,
|
|
77
|
+
feishu: { ...dispatcher.feishu },
|
|
78
|
+
codex: {
|
|
79
|
+
approval_policy: dispatcher.codex.approval_policy,
|
|
80
|
+
sandbox_mode: dispatcher.codex.sandbox_mode,
|
|
81
|
+
extra_args: [...dispatcher.codex.extra_args],
|
|
82
|
+
extra_env: { ...dispatcher.codex.extra_env },
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
}
|
|
56
86
|
//# sourceMappingURL=config-files.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-files.js","sourceRoot":"","sources":["../../src/onboard/config-files.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,
|
|
1
|
+
{"version":3,"file":"config-files.js","sourceRoot":"","sources":["../../src/onboard/config-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { writeTextFile } from './ledger.js';
|
|
5
|
+
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
const PACKAGE_ROOT = dirname(dirname(HERE));
|
|
7
|
+
const DISPATCHER_SKILL_SOURCE = join(PACKAGE_ROOT, 'skills', 'dispatcher', 'SKILL.md');
|
|
8
|
+
export function installDispatcherSkill(options) {
|
|
9
|
+
const content = readDispatcherSkill();
|
|
10
|
+
writeTextFile(options.skillPath, content, options.ledger, 'workspace-local dispatcher skill', { mode: 0o600, dryRun: options.dryRun });
|
|
11
|
+
}
|
|
12
|
+
function readDispatcherSkill() {
|
|
13
|
+
if (!existsSync(DISPATCHER_SKILL_SOURCE)) {
|
|
14
|
+
throw new Error(`missing bundled dispatcher skill: ${DISPATCHER_SKILL_SOURCE}`);
|
|
15
|
+
}
|
|
16
|
+
return readFileSync(DISPATCHER_SKILL_SOURCE, 'utf8');
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=dispatcher-skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher-skill.js","sourceRoot":"","sources":["../../src/onboard/dispatcher-skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,MAAM,uBAAuB,GAAG,IAAI,CAClC,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,UAAU,CACX,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,OAItC;IACC,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,aAAa,CACX,OAAO,CAAC,SAAS,EACjB,OAAO,EACP,OAAO,CAAC,MAAM,EACd,kCAAkC,EAClC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CACxC,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB;IAC1B,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,qCAAqC,uBAAuB,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,YAAY,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;AACvD,CAAC"}
|
package/dist/onboard/run.js
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
import { existsSync
|
|
2
|
-
import { dirname } from 'node:path';
|
|
3
|
-
import { DispatcherRepo } from '../db/repository.js';
|
|
4
|
-
import { openDatabase } from '../db/schema.js';
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
5
2
|
import { codexArgsToCli, parseCodexArgs } from '../runtime/codex-args.js';
|
|
6
3
|
import { assertNoLegacyTomlOnly, globalConfigFile, loadConfig, stringifyConfig, } from '../runtime/config.js';
|
|
7
|
-
import { dispatcherAppServerControlDir, dispatcherCodexHome,
|
|
4
|
+
import { dispatcherAppServerControlDir, dispatcherCodexHome, dispatcherWorkspaceCodexSkillsDir, dispatcherWorkspaceSkillPath, logsRoot, setRuntimeConfig, stateRoot, } from '../runtime/paths.js';
|
|
8
5
|
import { dispatcherCodexHomeDoctorContext, validateDispatcherCodexHome, } from '../runtime/dispatcher-codex-home.js';
|
|
9
6
|
import { ExecaCommandRunner } from './commands.js';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
7
|
+
import { dispatcherCodexArgsJson, dreamuxConfigFromAnswers, } from './config-files.js';
|
|
8
|
+
import { installDispatcherSkill } from './dispatcher-skill.js';
|
|
9
|
+
import { ensureDirectory, TransparentFileLedger, writeTextFile, } from './ledger.js';
|
|
12
10
|
import { installUserService, managedServiceEnvironment } from './service.js';
|
|
13
|
-
import { installClaudemuxPlugin, installCodexmuxPlugin, } from './plugins.js';
|
|
14
11
|
export async function runOnboard(options) {
|
|
15
12
|
const answers = options.answers;
|
|
16
13
|
const ledger = options.ledger ?? new TransparentFileLedger();
|
|
@@ -21,37 +18,32 @@ export async function runOnboard(options) {
|
|
|
21
18
|
const dreamuxConfig = dreamuxConfigFromAnswers(answers, existingConfig);
|
|
22
19
|
const effectiveAnswers = {
|
|
23
20
|
...answers,
|
|
24
|
-
runtimeDir:
|
|
21
|
+
runtimeDir: stateRoot(),
|
|
25
22
|
codexBin: dreamuxConfig.codex.bin,
|
|
26
23
|
};
|
|
27
24
|
setRuntimeConfig(dreamuxConfig);
|
|
28
25
|
ensureDirectory(answers.configDir, ledger, 'dreamux config directory', {
|
|
29
26
|
dryRun: answers.dryRun,
|
|
30
27
|
});
|
|
31
|
-
ensureDirectory(
|
|
28
|
+
ensureDirectory(stateRoot(), ledger, 'dreamux state directory', {
|
|
29
|
+
dryRun: answers.dryRun,
|
|
30
|
+
});
|
|
31
|
+
ensureDirectory(logsRoot(), ledger, 'dreamux logs directory', {
|
|
32
32
|
dryRun: answers.dryRun,
|
|
33
33
|
});
|
|
34
34
|
writeTextFile(configPath, stringifyConfig(dreamuxConfig), ledger, 'dreamux global config', { mode: 0o600, dryRun: answers.dryRun });
|
|
35
35
|
const codexHome = dispatcherCodexHome(answers.dispatcherId);
|
|
36
|
-
ensureDirectory(codexHome, ledger, '
|
|
36
|
+
ensureDirectory(codexHome, ledger, 'global Codex home', {
|
|
37
37
|
dryRun: answers.dryRun,
|
|
38
38
|
});
|
|
39
|
-
ensureDirectory(dispatcherCodexPluginsDir(answers.dispatcherId), ledger, 'dispatcher Codex plugins directory', { dryRun: answers.dryRun });
|
|
40
39
|
ensureDirectory(dispatcherAppServerControlDir(answers.dispatcherId), ledger, 'dispatcher app-server control directory', { dryRun: answers.dryRun });
|
|
41
40
|
ensureDirectory(effectiveAnswers.dispatcherCwd, ledger, 'dispatcher cwd', { dryRun: answers.dryRun });
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
ledger,
|
|
46
|
-
runner,
|
|
47
|
-
});
|
|
48
|
-
await installClaudemuxPlugin({
|
|
49
|
-
answers: effectiveAnswers,
|
|
50
|
-
codexHome,
|
|
41
|
+
ensureDirectory(dispatcherWorkspaceCodexSkillsDir(effectiveAnswers.dispatcherCwd), ledger, 'workspace-local Codex skills directory', { dryRun: answers.dryRun });
|
|
42
|
+
installDispatcherSkill({
|
|
43
|
+
skillPath: dispatcherWorkspaceSkillPath(effectiveAnswers.dispatcherCwd),
|
|
51
44
|
ledger,
|
|
52
|
-
|
|
45
|
+
dryRun: answers.dryRun,
|
|
53
46
|
});
|
|
54
|
-
registerDispatcher(effectiveAnswers, ledger);
|
|
55
47
|
const doctor = runDispatcherDoctor(effectiveAnswers, dreamuxConfig, env);
|
|
56
48
|
if (!effectiveAnswers.dryRun && !doctor.ok) {
|
|
57
49
|
throw new Error(formatDoctorFailure(effectiveAnswers, doctor));
|
|
@@ -79,32 +71,6 @@ function readExistingDreamuxConfig(configDir) {
|
|
|
79
71
|
return undefined;
|
|
80
72
|
return loadConfig({ configDir }).config;
|
|
81
73
|
}
|
|
82
|
-
function registerDispatcher(answers, ledger) {
|
|
83
|
-
const dbPath = databasePath();
|
|
84
|
-
ensureDirectory(dirname(dbPath), ledger, 'dispatcher database directory', {
|
|
85
|
-
dryRun: answers.dryRun,
|
|
86
|
-
});
|
|
87
|
-
if (answers.dryRun) {
|
|
88
|
-
ledger.record(dbPath, 'created', 'dispatcher database');
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
mkdirSync(dirname(dbPath), { recursive: true });
|
|
92
|
-
const before = snapshotFiles(dirname(dbPath));
|
|
93
|
-
const db = openDatabase({ path: dbPath });
|
|
94
|
-
try {
|
|
95
|
-
new DispatcherRepo(db).upsert({
|
|
96
|
-
dispatcher_id: answers.dispatcherId,
|
|
97
|
-
bot_app_id: answers.botAppId,
|
|
98
|
-
bot_secret_ref: dispatcherBotSecretRef(answers.dispatcherId),
|
|
99
|
-
codex_args_json: dispatcherCodexArgsJson(),
|
|
100
|
-
codex_cwd: answers.dispatcherCwd,
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
finally {
|
|
104
|
-
db.close();
|
|
105
|
-
}
|
|
106
|
-
recordFileTreeChanges(dirname(dbPath), before, ledger, 'dispatcher database');
|
|
107
|
-
}
|
|
108
74
|
function runDispatcherDoctor(answers, dreamuxConfig, env) {
|
|
109
75
|
const codexArgs = parseCodexArgs(dispatcherCodexArgsJson(), {
|
|
110
76
|
approvalPolicy: dreamuxConfig.codex.approval_policy,
|
|
@@ -114,6 +80,7 @@ function runDispatcherDoctor(answers, dreamuxConfig, env) {
|
|
|
114
80
|
const codexCliArgs = codexArgsToCli(codexArgs);
|
|
115
81
|
const context = dispatcherCodexHomeDoctorContext(answers.dispatcherId, {
|
|
116
82
|
codexCliArgs,
|
|
83
|
+
dispatcherCwd: answers.dispatcherCwd,
|
|
117
84
|
});
|
|
118
85
|
if (answers.dryRun) {
|
|
119
86
|
return {
|
|
@@ -137,7 +104,7 @@ function formatDoctorFailure(answers, doctor) {
|
|
|
137
104
|
];
|
|
138
105
|
if (answers.registerService &&
|
|
139
106
|
doctor.errors.some((error) => error.includes('missing Codex auth state'))) {
|
|
140
|
-
lines.push('- managed service environments do not inherit your interactive shell auth token', `- authenticate the Codex home before registering the service:
|
|
107
|
+
lines.push('- managed service environments do not inherit your interactive shell auth token', `- authenticate the global Codex home before registering the service: ${answers.codexBin} login`);
|
|
141
108
|
}
|
|
142
109
|
return lines.join('\n');
|
|
143
110
|
}
|
package/dist/onboard/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/onboard/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/onboard/run.ts"],"names":[],"mappings":"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"}
|
package/dist/onboard/service.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { homedir } from 'node:os';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { build as buildPlist } from 'plist';
|
|
4
|
+
import { logsRoot, stateRoot } from '../runtime/paths.js';
|
|
4
5
|
import { ensureDirectory, ensureTextFile, writeTextFile, } from './ledger.js';
|
|
5
6
|
export const LAUNCHD_LABEL = 'dev.excited.dreamux';
|
|
6
7
|
export const SYSTEMD_UNIT = 'dreamux.service';
|
|
@@ -22,7 +23,7 @@ export function serviceUnitPath(platform = process.platform, homeDir = homedir()
|
|
|
22
23
|
export async function installUserService(options) {
|
|
23
24
|
const homeDir = options.homeDir ?? homedir();
|
|
24
25
|
const unit = serviceUnitPath(options.platform, homeDir);
|
|
25
|
-
const logDir =
|
|
26
|
+
const logDir = logsRoot();
|
|
26
27
|
const stdoutLog = join(logDir, 'daemon.stdout.log');
|
|
27
28
|
const stderrLog = join(logDir, 'daemon.stderr.log');
|
|
28
29
|
ensureDirectory(logDir, options.ledger, 'daemon log directory', {
|
|
@@ -62,7 +63,7 @@ export function renderLaunchdPlist(answers, stdoutLog, stderrLog) {
|
|
|
62
63
|
ProgramArguments: [answers.dreamuxBin, 'serve'],
|
|
63
64
|
RunAtLoad: true,
|
|
64
65
|
KeepAlive: true,
|
|
65
|
-
WorkingDirectory:
|
|
66
|
+
WorkingDirectory: stateRoot(),
|
|
66
67
|
EnvironmentVariables: managedServiceEnvironment(answers),
|
|
67
68
|
StandardOutPath: stdoutLog,
|
|
68
69
|
StandardErrorPath: stderrLog,
|
|
@@ -75,7 +76,7 @@ Description=dreamux dispatcher daemon
|
|
|
75
76
|
[Service]
|
|
76
77
|
Type=simple
|
|
77
78
|
ExecStart=${systemdEscapeArg(answers.dreamuxBin)} serve
|
|
78
|
-
WorkingDirectory=${systemdEscapeArg(
|
|
79
|
+
WorkingDirectory=${systemdEscapeArg(stateRoot())}
|
|
79
80
|
${Object.entries(managedServiceEnvironment(answers))
|
|
80
81
|
.map(([key, value]) => `Environment=${key}=${systemdEscapeEnv(value)}`)
|
|
81
82
|
.join('\n')}
|
|
@@ -91,13 +92,8 @@ WantedBy=default.target
|
|
|
91
92
|
export function managedServiceEnvironment(answers) {
|
|
92
93
|
const env = {
|
|
93
94
|
DREAMUX_CONFIG_DIR: answers.configDir,
|
|
94
|
-
CODEX_HOST_RUNTIME_DIR: answers.runtimeDir,
|
|
95
95
|
CODEX_HOST_CODEX_BIN: answers.codexBin,
|
|
96
96
|
};
|
|
97
|
-
const codexHome = process.env['CODEX_HOME'];
|
|
98
|
-
if (codexHome !== undefined && codexHome !== '') {
|
|
99
|
-
env['CODEX_HOME'] = codexHome;
|
|
100
|
-
}
|
|
101
97
|
return env;
|
|
102
98
|
}
|
|
103
99
|
async function registerLaunchd(unitPath, unitStatus, options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/onboard/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/onboard/service.ts"],"names":[],"mappings":"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"}
|