@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
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
import { existsSync, readFileSync,
|
|
2
|
-
import {
|
|
1
|
+
import { existsSync, readFileSync, } from 'node:fs';
|
|
2
|
+
import { join, normalize, sep } from 'node:path';
|
|
3
3
|
import { parse as parseToml, TomlError } from 'smol-toml';
|
|
4
|
-
import { dispatcherAppServerControlDir, dispatcherCodexConfigPath, dispatcherCodexHome,
|
|
5
|
-
export const DISPATCHER_APP_SERVER_SOCKET_PATH_MAX_BYTES =
|
|
4
|
+
import { DREAMUX_UNIX_SOCKET_PATH_MAX_BYTES, dispatcherAppServerControlDir, dispatcherCodexCwd, dispatcherCodexConfigPath, dispatcherCodexHome, dispatcherWorkspaceCodexSkillsDir, dispatcherWorkspaceSkillPath, dispatcherSocketPath, unixSocketPathFitsBudget, } from './paths.js';
|
|
5
|
+
export const DISPATCHER_APP_SERVER_SOCKET_PATH_MAX_BYTES = DREAMUX_UNIX_SOCKET_PATH_MAX_BYTES;
|
|
6
6
|
export function dispatcherCodexHomeDoctorContext(dispatcherId, options = {}) {
|
|
7
|
+
const dispatcherCwd = options.dispatcherCwd ?? dispatcherCodexCwd(dispatcherId);
|
|
7
8
|
return {
|
|
8
9
|
dispatcherId,
|
|
9
10
|
codexHome: dispatcherCodexHome(dispatcherId),
|
|
10
11
|
configPath: dispatcherCodexConfigPath(dispatcherId),
|
|
11
|
-
|
|
12
|
+
dispatcherCwd,
|
|
13
|
+
skillsDir: dispatcherWorkspaceCodexSkillsDir(dispatcherCwd),
|
|
14
|
+
skillPath: dispatcherWorkspaceSkillPath(dispatcherCwd),
|
|
12
15
|
appServerControlDir: dispatcherAppServerControlDir(dispatcherId),
|
|
13
16
|
socketPath: dispatcherSocketPath(dispatcherId),
|
|
14
17
|
codexCliArgs: options.codexCliArgs ?? [],
|
|
@@ -25,10 +28,7 @@ export function validateDispatcherCodexHome(input, options = {}) {
|
|
|
25
28
|
};
|
|
26
29
|
const errors = [];
|
|
27
30
|
const env = options.env ?? process.env;
|
|
28
|
-
if (
|
|
29
|
-
errors.push(`missing Codex config: ${context.configPath}`);
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
31
|
+
if (existsSync(context.configPath)) {
|
|
32
32
|
try {
|
|
33
33
|
const parsed = parseToml(readFileSync(context.configPath, 'utf8'));
|
|
34
34
|
if (!isRecord(parsed)) {
|
|
@@ -45,12 +45,12 @@ export function validateDispatcherCodexHome(input, options = {}) {
|
|
|
45
45
|
if (isTmpPath(context.socketPath)) {
|
|
46
46
|
errors.push(`dispatcher app-server socket must not be under /tmp: ${context.socketPath}`);
|
|
47
47
|
}
|
|
48
|
-
if (!
|
|
48
|
+
if (!unixSocketPathFitsBudget(context.socketPath)) {
|
|
49
49
|
const bytes = Buffer.byteLength(context.socketPath, 'utf8');
|
|
50
50
|
errors.push(`dispatcher app-server socket path is too long for Unix sockets (${bytes} bytes > ${DISPATCHER_APP_SERVER_SOCKET_PATH_MAX_BYTES} safe bytes): ${context.socketPath}`);
|
|
51
51
|
}
|
|
52
|
-
if (!
|
|
53
|
-
errors.push(`missing
|
|
52
|
+
if (!dispatcherSkillExists(context.skillPath)) {
|
|
53
|
+
errors.push(`missing dispatcher skill: ${context.skillPath}`);
|
|
54
54
|
}
|
|
55
55
|
if (!hasAuth(context.codexHome, env)) {
|
|
56
56
|
errors.push(`missing Codex auth state in ${context.codexHome} or a supported auth environment variable`);
|
|
@@ -81,41 +81,8 @@ function formatTomlError(err, file) {
|
|
|
81
81
|
const msg = err instanceof Error ? err.message : String(err);
|
|
82
82
|
return `Codex config parse error in ${file}: ${msg}`;
|
|
83
83
|
}
|
|
84
|
-
function
|
|
85
|
-
return
|
|
86
|
-
}
|
|
87
|
-
function hasPathSegment(root, segment, maxDepth) {
|
|
88
|
-
if (!existsSync(root))
|
|
89
|
-
return false;
|
|
90
|
-
const stack = [{ path: root, depth: 0 }];
|
|
91
|
-
while (stack.length > 0) {
|
|
92
|
-
const current = stack.pop();
|
|
93
|
-
if (current === undefined)
|
|
94
|
-
continue;
|
|
95
|
-
if (basename(current.path) === segment)
|
|
96
|
-
return true;
|
|
97
|
-
if (current.depth >= maxDepth)
|
|
98
|
-
continue;
|
|
99
|
-
let entries;
|
|
100
|
-
try {
|
|
101
|
-
entries = readdirSync(current.path);
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
continue;
|
|
105
|
-
}
|
|
106
|
-
for (const entry of entries) {
|
|
107
|
-
const child = join(current.path, entry);
|
|
108
|
-
try {
|
|
109
|
-
if (statSync(child).isDirectory()) {
|
|
110
|
-
stack.push({ path: child, depth: current.depth + 1 });
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
catch {
|
|
114
|
-
/* ignore transient filesystem races */
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
return false;
|
|
84
|
+
function dispatcherSkillExists(skillPath) {
|
|
85
|
+
return existsSync(skillPath);
|
|
119
86
|
}
|
|
120
87
|
function hasAuth(codexHome, env) {
|
|
121
88
|
if (existsSync(join(codexHome, 'auth.json')))
|
|
@@ -125,10 +92,6 @@ function hasAuth(codexHome, env) {
|
|
|
125
92
|
return value !== undefined && value.trim() !== '';
|
|
126
93
|
});
|
|
127
94
|
}
|
|
128
|
-
function socketPathFitsUnixLimit(path) {
|
|
129
|
-
return (Buffer.byteLength(path, 'utf8') <=
|
|
130
|
-
DISPATCHER_APP_SERVER_SOCKET_PATH_MAX_BYTES);
|
|
131
|
-
}
|
|
132
95
|
function isTmpPath(path) {
|
|
133
96
|
const normalized = normalize(path);
|
|
134
97
|
return normalized === '/tmp' || normalized.startsWith(`/tmp${sep}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher-codex-home.js","sourceRoot":"","sources":["../../src/runtime/dispatcher-codex-home.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,YAAY,
|
|
1
|
+
{"version":3,"file":"dispatcher-codex-home.js","sourceRoot":"","sources":["../../src/runtime/dispatcher-codex-home.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const DISPATCHER_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
|
|
2
|
+
export const DISPATCHER_ID_RULE = '1-64 characters, starting with an ASCII letter or digit, and containing only ASCII letters, digits, dot, underscore, or dash';
|
|
3
|
+
export function validateDispatcherId(id, label = 'dispatcher id') {
|
|
4
|
+
if (!DISPATCHER_ID_PATTERN.test(id)) {
|
|
5
|
+
throw new Error(`${label} must be ${DISPATCHER_ID_RULE}: ${id}`);
|
|
6
|
+
}
|
|
7
|
+
return id;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=dispatcher-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher-id.js","sourceRoot":"","sources":["../../src/runtime/dispatcher-id.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,mCAAmC,CAAC;AAEzE,MAAM,CAAC,MAAM,kBAAkB,GAC7B,8HAA8H,CAAC;AAEjI,MAAM,UAAU,oBAAoB,CAAC,EAAU,EAAE,KAAK,GAAG,eAAe;IACtE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,kBAAkB,KAAK,EAAE,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync, } from 'node:fs';
|
|
2
|
+
import { dirname } from 'node:path';
|
|
3
|
+
import { dispatcherStatusPath } from './paths.js';
|
|
4
|
+
export class DispatcherStore {
|
|
5
|
+
rows = new Map();
|
|
6
|
+
constructor(config) {
|
|
7
|
+
const now = Date.now();
|
|
8
|
+
for (const dispatcher of config.dispatchers) {
|
|
9
|
+
const row = rowFromConfig(dispatcher, now);
|
|
10
|
+
this.rows.set(row.dispatcher_id, row);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
create(input) {
|
|
14
|
+
if (this.rows.has(input.dispatcher_id)) {
|
|
15
|
+
throw new Error(`dispatcher '${input.dispatcher_id}' already exists`);
|
|
16
|
+
}
|
|
17
|
+
const duplicateApp = this.list().find((row) => row.bot_app_id === input.bot_app_id);
|
|
18
|
+
if (duplicateApp !== undefined) {
|
|
19
|
+
throw new Error(`bot_app_id '${input.bot_app_id}' is already used by dispatcher '${duplicateApp.dispatcher_id}'`);
|
|
20
|
+
}
|
|
21
|
+
const now = Date.now();
|
|
22
|
+
const row = {
|
|
23
|
+
dispatcher_id: input.dispatcher_id,
|
|
24
|
+
bot_app_id: input.bot_app_id,
|
|
25
|
+
bot_secret_ref: input.bot_secret_ref ?? `config:${input.dispatcher_id}`,
|
|
26
|
+
codex_args_json: input.codex_args_json ?? '{}',
|
|
27
|
+
codex_cwd: input.codex_cwd ?? null,
|
|
28
|
+
thread_id: null,
|
|
29
|
+
status: 'declared',
|
|
30
|
+
enabled: normalizeEnabled(input.enabled ?? 1),
|
|
31
|
+
created_at: now,
|
|
32
|
+
updated_at: now,
|
|
33
|
+
last_started_at: null,
|
|
34
|
+
last_ready_at: null,
|
|
35
|
+
last_error: null,
|
|
36
|
+
last_lost_thread_id: null,
|
|
37
|
+
};
|
|
38
|
+
this.rows.set(row.dispatcher_id, row);
|
|
39
|
+
return { ...row };
|
|
40
|
+
}
|
|
41
|
+
upsert(input) {
|
|
42
|
+
const existing = this.rows.get(input.dispatcher_id);
|
|
43
|
+
if (existing === undefined)
|
|
44
|
+
return this.create(input);
|
|
45
|
+
const row = {
|
|
46
|
+
...existing,
|
|
47
|
+
bot_app_id: input.bot_app_id,
|
|
48
|
+
bot_secret_ref: input.bot_secret_ref ?? existing.bot_secret_ref,
|
|
49
|
+
codex_args_json: input.codex_args_json ?? existing.codex_args_json,
|
|
50
|
+
codex_cwd: input.codex_cwd ?? existing.codex_cwd,
|
|
51
|
+
enabled: normalizeEnabled(input.enabled ?? existing.enabled),
|
|
52
|
+
updated_at: Date.now(),
|
|
53
|
+
};
|
|
54
|
+
this.rows.set(row.dispatcher_id, row);
|
|
55
|
+
return { ...row };
|
|
56
|
+
}
|
|
57
|
+
get(id) {
|
|
58
|
+
const row = this.rows.get(id);
|
|
59
|
+
return row === undefined ? null : { ...row };
|
|
60
|
+
}
|
|
61
|
+
list() {
|
|
62
|
+
return Array.from(this.rows.values())
|
|
63
|
+
.sort((a, b) => a.created_at - b.created_at)
|
|
64
|
+
.map((row) => ({ ...row }));
|
|
65
|
+
}
|
|
66
|
+
listEnabled() {
|
|
67
|
+
return this.list().filter((row) => row.enabled === 1);
|
|
68
|
+
}
|
|
69
|
+
remove(id) {
|
|
70
|
+
this.rows.delete(id);
|
|
71
|
+
rmSync(dispatcherStatusPath(id), { force: true });
|
|
72
|
+
}
|
|
73
|
+
setStatus(id, status, extras = {}) {
|
|
74
|
+
const row = this.mustRow(id);
|
|
75
|
+
row.status = status;
|
|
76
|
+
row.updated_at = Date.now();
|
|
77
|
+
if ('last_error' in extras)
|
|
78
|
+
row.last_error = extras.last_error ?? null;
|
|
79
|
+
if (extras.last_started_at !== undefined) {
|
|
80
|
+
row.last_started_at = extras.last_started_at;
|
|
81
|
+
}
|
|
82
|
+
if (extras.last_ready_at !== undefined) {
|
|
83
|
+
row.last_ready_at = extras.last_ready_at;
|
|
84
|
+
}
|
|
85
|
+
this.persist(row);
|
|
86
|
+
}
|
|
87
|
+
setThreadId(id, threadId) {
|
|
88
|
+
const row = this.mustRow(id);
|
|
89
|
+
row.thread_id = threadId;
|
|
90
|
+
row.updated_at = Date.now();
|
|
91
|
+
this.persist(row);
|
|
92
|
+
}
|
|
93
|
+
recordLostThread(id, lostThreadId, newThreadId, error) {
|
|
94
|
+
const row = this.mustRow(id);
|
|
95
|
+
row.thread_id = newThreadId;
|
|
96
|
+
row.last_lost_thread_id = lostThreadId;
|
|
97
|
+
row.last_error = error;
|
|
98
|
+
row.updated_at = Date.now();
|
|
99
|
+
this.persist(row);
|
|
100
|
+
}
|
|
101
|
+
mustRow(id) {
|
|
102
|
+
const row = this.rows.get(id);
|
|
103
|
+
if (row === undefined)
|
|
104
|
+
throw new Error(`no dispatcher '${id}'`);
|
|
105
|
+
return row;
|
|
106
|
+
}
|
|
107
|
+
persist(row) {
|
|
108
|
+
mkdirSync(dirname(dispatcherStatusPath(row.dispatcher_id)), {
|
|
109
|
+
recursive: true,
|
|
110
|
+
});
|
|
111
|
+
const status = {
|
|
112
|
+
version: 1,
|
|
113
|
+
dispatcher_id: row.dispatcher_id,
|
|
114
|
+
thread_id: row.thread_id,
|
|
115
|
+
status: row.status,
|
|
116
|
+
updated_at: row.updated_at,
|
|
117
|
+
last_started_at: row.last_started_at,
|
|
118
|
+
last_ready_at: row.last_ready_at,
|
|
119
|
+
last_error: row.last_error,
|
|
120
|
+
last_lost_thread_id: row.last_lost_thread_id,
|
|
121
|
+
};
|
|
122
|
+
writeFileSync(dispatcherStatusPath(row.dispatcher_id), `${JSON.stringify(status, null, 2)}\n`, { mode: 0o600 });
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function rowFromConfig(config, now) {
|
|
126
|
+
const status = readStatusFile(config.id);
|
|
127
|
+
return {
|
|
128
|
+
dispatcher_id: config.id,
|
|
129
|
+
bot_app_id: config.feishu.app_id,
|
|
130
|
+
bot_secret_ref: `config:${config.id}`,
|
|
131
|
+
codex_args_json: dispatcherCodexArgsJson(config),
|
|
132
|
+
codex_cwd: config.cwd,
|
|
133
|
+
thread_id: status?.thread_id ?? null,
|
|
134
|
+
status: status?.status ?? 'declared',
|
|
135
|
+
enabled: config.enabled ? 1 : 0,
|
|
136
|
+
created_at: status?.updated_at ?? now,
|
|
137
|
+
updated_at: status?.updated_at ?? now,
|
|
138
|
+
last_started_at: status?.last_started_at ?? null,
|
|
139
|
+
last_ready_at: status?.last_ready_at ?? null,
|
|
140
|
+
last_error: status?.last_error ?? null,
|
|
141
|
+
last_lost_thread_id: status?.last_lost_thread_id ?? null,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function dispatcherCodexArgsJson(config) {
|
|
145
|
+
const raw = {};
|
|
146
|
+
if (config.codex.approval_policy !== null) {
|
|
147
|
+
raw['approvalPolicy'] = config.codex.approval_policy;
|
|
148
|
+
}
|
|
149
|
+
if (config.codex.sandbox_mode !== null) {
|
|
150
|
+
raw['sandboxMode'] = config.codex.sandbox_mode;
|
|
151
|
+
}
|
|
152
|
+
if (config.codex.extra_args.length > 0) {
|
|
153
|
+
raw['extraArgs'] = config.codex.extra_args;
|
|
154
|
+
}
|
|
155
|
+
// codex.extra_env is applied to the child process environment, not encoded
|
|
156
|
+
// into CLI args.
|
|
157
|
+
return JSON.stringify(raw);
|
|
158
|
+
}
|
|
159
|
+
function readStatusFile(id) {
|
|
160
|
+
const path = dispatcherStatusPath(id);
|
|
161
|
+
if (!existsSync(path))
|
|
162
|
+
return null;
|
|
163
|
+
try {
|
|
164
|
+
const raw = JSON.parse(readFileSync(path, 'utf8'));
|
|
165
|
+
if (raw.version !== 1 || raw.dispatcher_id !== id)
|
|
166
|
+
return null;
|
|
167
|
+
return {
|
|
168
|
+
version: 1,
|
|
169
|
+
dispatcher_id: id,
|
|
170
|
+
thread_id: typeof raw.thread_id === 'string' ? raw.thread_id : null,
|
|
171
|
+
status: isDispatcherStatus(raw.status) ? raw.status : 'declared',
|
|
172
|
+
updated_at: typeof raw.updated_at === 'number' && Number.isFinite(raw.updated_at)
|
|
173
|
+
? raw.updated_at
|
|
174
|
+
: Date.now(),
|
|
175
|
+
last_started_at: numberOrNull(raw.last_started_at),
|
|
176
|
+
last_ready_at: numberOrNull(raw.last_ready_at),
|
|
177
|
+
last_error: stringOrNull(raw.last_error),
|
|
178
|
+
last_lost_thread_id: stringOrNull(raw.last_lost_thread_id),
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function isDispatcherStatus(value) {
|
|
186
|
+
return value === 'declared' ||
|
|
187
|
+
value === 'starting' ||
|
|
188
|
+
value === 'ready' ||
|
|
189
|
+
value === 'degraded' ||
|
|
190
|
+
value === 'stopping' ||
|
|
191
|
+
value === 'stopped';
|
|
192
|
+
}
|
|
193
|
+
function numberOrNull(value) {
|
|
194
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : null;
|
|
195
|
+
}
|
|
196
|
+
function stringOrNull(value) {
|
|
197
|
+
return typeof value === 'string' ? value : null;
|
|
198
|
+
}
|
|
199
|
+
function normalizeEnabled(value) {
|
|
200
|
+
return value === true || value === 1 ? 1 : 0;
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=dispatcher-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher-store.js","sourceRoot":"","sources":["../../src/runtime/dispatcher-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { dirname, join, resolve } from 'node:path';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
4
|
+
const PACKAGE_ROOT = dirname(dirname(HERE));
|
|
5
|
+
const PACKAGE_BIN_DIR = join(PACKAGE_ROOT, 'bin');
|
|
6
|
+
const DREAMUX_BIN = join(PACKAGE_BIN_DIR, 'dreamux');
|
|
7
|
+
export function dreamuxBinPath(env = process.env) {
|
|
8
|
+
const fromEnv = env['DREAMUX_BIN'];
|
|
9
|
+
return fromEnv !== undefined && fromEnv !== ''
|
|
10
|
+
? resolve(fromEnv)
|
|
11
|
+
: DREAMUX_BIN;
|
|
12
|
+
}
|
|
13
|
+
export function dispatcherProcessEnv(baseEnv = process.env, extraEnv = {}) {
|
|
14
|
+
const mergedEnv = {
|
|
15
|
+
...baseEnv,
|
|
16
|
+
...extraEnv,
|
|
17
|
+
};
|
|
18
|
+
const env = {
|
|
19
|
+
...mergedEnv,
|
|
20
|
+
PATH: prependPath(packageBinDirs(mergedEnv), mergedEnv['PATH']),
|
|
21
|
+
};
|
|
22
|
+
delete env['CODEX_HOME'];
|
|
23
|
+
return env;
|
|
24
|
+
}
|
|
25
|
+
function packageBinDirs(env) {
|
|
26
|
+
const dirs = [PACKAGE_BIN_DIR];
|
|
27
|
+
dirs.push(dirname(dreamuxBinPath(env)));
|
|
28
|
+
return dirs;
|
|
29
|
+
}
|
|
30
|
+
function prependPath(prefixes, existing) {
|
|
31
|
+
const parts = [];
|
|
32
|
+
const seen = new Set();
|
|
33
|
+
for (const part of [...prefixes, ...(existing ?? '').split(':')]) {
|
|
34
|
+
if (part === '' || seen.has(part))
|
|
35
|
+
continue;
|
|
36
|
+
seen.add(part);
|
|
37
|
+
parts.push(part);
|
|
38
|
+
}
|
|
39
|
+
return parts.join(':');
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=package-bin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-bin.js","sourceRoot":"","sources":["../../src/runtime/package-bin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,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,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAClD,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;AAErD,MAAM,UAAU,cAAc,CAC5B,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC;IACnC,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE;QAC5C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAClB,CAAC,CAAC,WAAW,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,UAA6B,OAAO,CAAC,GAAG,EACxC,WAAmC,EAAE;IAErC,MAAM,SAAS,GAAsB;QACnC,GAAG,OAAO;QACV,GAAG,QAAQ;KACZ,CAAC;IACF,MAAM,GAAG,GAAsB;QAC7B,GAAG,SAAS;QACZ,IAAI,EAAE,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;KAChE,CAAC;IACF,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC;IACzB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,cAAc,CAAC,GAAsB;IAC5C,MAAM,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,QAAkB,EAAE,QAA4B;IACnE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACjE,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAC5C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}
|
package/dist/runtime/paths.js
CHANGED
|
@@ -1,36 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Filesystem layout for
|
|
2
|
+
* Filesystem layout for dreamux-owned runtime state and logs.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
4
|
+
* Effective MVP layout:
|
|
5
|
+
* ~/.dreamux/
|
|
6
|
+
* state/
|
|
7
|
+
* server.json
|
|
8
|
+
* admin.sock
|
|
9
|
+
* <dispatcher-id>/
|
|
10
|
+
* status.json
|
|
11
|
+
* access.json
|
|
12
|
+
* codex.sock Codex app-server Unix socket
|
|
13
|
+
* logs/
|
|
14
|
+
* dreamux-server.log
|
|
15
|
+
* codex-app-server/
|
|
16
|
+
* <dispatcher-id>.log
|
|
14
17
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* during onboard and stored on the dispatcher row; dispatcherCodexCwd() exists
|
|
19
|
-
* only as a legacy fallback.
|
|
20
|
-
*
|
|
21
|
-
* Issue ~/.dreamux/ config (feat/global-config-dir): paths.* functions
|
|
22
|
-
* read an optionally-injected `DreamuxConfig` snapshot for non-env
|
|
23
|
-
* defaults. Server.start() calls setRuntimeConfig() once at boot; bare
|
|
24
|
-
* tests / standalone callers fall back to the built-in defaults.
|
|
18
|
+
* `runtime_dir` is not an effective runtime contract. The legacy runtimeRoot()
|
|
19
|
+
* function remains as a compatibility alias for stateRoot() while older call
|
|
20
|
+
* sites are retired.
|
|
25
21
|
*/
|
|
26
22
|
import { homedir } from 'node:os';
|
|
27
23
|
import { join } from 'node:path';
|
|
28
|
-
import { BUILT_IN_DEFAULTS,
|
|
24
|
+
import { BUILT_IN_DEFAULTS, } from './config.js';
|
|
25
|
+
import { validateDispatcherId } from './dispatcher-id.js';
|
|
26
|
+
export const DREAMUX_UNIX_SOCKET_PATH_MAX_BYTES = 103;
|
|
29
27
|
let currentConfig = BUILT_IN_DEFAULTS;
|
|
30
28
|
/**
|
|
31
29
|
* Set the active configuration snapshot. Called once by Server.start() with
|
|
32
|
-
* the result of
|
|
33
|
-
*
|
|
30
|
+
* the result of loadConfig(); tests can call it to inject a custom snapshot.
|
|
31
|
+
* Idempotent.
|
|
34
32
|
*/
|
|
35
33
|
export function setRuntimeConfig(config) {
|
|
36
34
|
currentConfig = config;
|
|
@@ -42,34 +40,34 @@ export function resetRuntimeConfig() {
|
|
|
42
40
|
export function getRuntimeConfig() {
|
|
43
41
|
return currentConfig;
|
|
44
42
|
}
|
|
45
|
-
export function
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
return
|
|
43
|
+
export function dreamuxRoot() {
|
|
44
|
+
return join(homedir(), '.dreamux');
|
|
45
|
+
}
|
|
46
|
+
export function stateRoot() {
|
|
47
|
+
return join(dreamuxRoot(), 'state');
|
|
48
|
+
}
|
|
49
|
+
export function serverJsonPath() {
|
|
50
|
+
return join(stateRoot(), 'server.json');
|
|
51
|
+
}
|
|
52
|
+
export function logsRoot() {
|
|
53
|
+
return join(dreamuxRoot(), 'logs');
|
|
50
54
|
}
|
|
51
|
-
|
|
52
|
-
|
|
55
|
+
/**
|
|
56
|
+
* Legacy compatibility alias. New code should call stateRoot().
|
|
57
|
+
*/
|
|
58
|
+
export function runtimeRoot() {
|
|
59
|
+
return stateRoot();
|
|
53
60
|
}
|
|
54
61
|
export function adminSocketPath() {
|
|
55
|
-
|
|
56
|
-
if (fromEnv !== undefined && fromEnv !== '')
|
|
57
|
-
return fromEnv;
|
|
58
|
-
if (currentConfig.admin_socket !== null) {
|
|
59
|
-
return expandHome(currentConfig.admin_socket);
|
|
60
|
-
}
|
|
61
|
-
return join(runtimeRoot(), 'admin.sock');
|
|
62
|
+
return assertUnixSocketPathBudget(join(stateRoot(), 'admin.sock'), 'admin socket path');
|
|
62
63
|
}
|
|
63
64
|
export function dispatcherDir(id) {
|
|
64
|
-
return join(
|
|
65
|
+
return join(stateRoot(), dispatcherPathSegment(id));
|
|
65
66
|
}
|
|
66
67
|
export function dispatcherCodexCwd(id) {
|
|
67
68
|
return join(dispatcherDir(id), 'cwd');
|
|
68
69
|
}
|
|
69
70
|
export function operatorCodexHome() {
|
|
70
|
-
const fromEnv = process.env['CODEX_HOME'];
|
|
71
|
-
if (fromEnv !== undefined && fromEnv !== '')
|
|
72
|
-
return fromEnv;
|
|
73
71
|
return join(homedir(), '.codex');
|
|
74
72
|
}
|
|
75
73
|
export function dispatcherCodexHome(id) {
|
|
@@ -79,19 +77,55 @@ export function dispatcherCodexHome(id) {
|
|
|
79
77
|
export function dispatcherCodexConfigPath(id) {
|
|
80
78
|
return join(dispatcherCodexHome(id), 'config.toml');
|
|
81
79
|
}
|
|
82
|
-
export function
|
|
83
|
-
return join(
|
|
80
|
+
export function dispatcherWorkspaceCodexSkillsDir(cwd) {
|
|
81
|
+
return join(cwd, '.codex', 'skills');
|
|
82
|
+
}
|
|
83
|
+
export function dispatcherWorkspaceSkillPath(cwd) {
|
|
84
|
+
return join(dispatcherWorkspaceCodexSkillsDir(cwd), 'dispatcher', 'SKILL.md');
|
|
84
85
|
}
|
|
85
86
|
export function dispatcherAppServerControlDir(id) {
|
|
86
|
-
return
|
|
87
|
+
return dispatcherDir(id);
|
|
87
88
|
}
|
|
88
89
|
export function dispatcherSocketPath(id) {
|
|
89
|
-
return join(
|
|
90
|
+
return assertUnixSocketPathBudget(join(dispatcherDir(id), 'codex.sock'), `dispatcher '${id}' Codex socket path`);
|
|
90
91
|
}
|
|
91
92
|
export function dispatcherStdoutLog(id) {
|
|
92
|
-
return
|
|
93
|
+
return dispatcherCodexAppServerLogPath(id);
|
|
93
94
|
}
|
|
94
95
|
export function dispatcherStderrLog(id) {
|
|
95
|
-
return
|
|
96
|
+
return dispatcherCodexAppServerErrorLogPath(id);
|
|
97
|
+
}
|
|
98
|
+
export function serverLogPath() {
|
|
99
|
+
return join(logsRoot(), 'dreamux-server.log');
|
|
100
|
+
}
|
|
101
|
+
export function codexAppServerLogDir() {
|
|
102
|
+
return join(logsRoot(), 'codex-app-server');
|
|
103
|
+
}
|
|
104
|
+
export function feishuChannelLogDir() {
|
|
105
|
+
return join(logsRoot(), 'feishu-channel');
|
|
106
|
+
}
|
|
107
|
+
export function dispatcherCodexAppServerLogPath(id) {
|
|
108
|
+
return join(codexAppServerLogDir(), `${dispatcherPathSegment(id)}.log`);
|
|
109
|
+
}
|
|
110
|
+
export function dispatcherCodexAppServerErrorLogPath(id) {
|
|
111
|
+
return join(codexAppServerLogDir(), `${dispatcherPathSegment(id)}.stderr.log`);
|
|
112
|
+
}
|
|
113
|
+
export function dispatcherStatusPath(id) {
|
|
114
|
+
return join(dispatcherDir(id), 'status.json');
|
|
115
|
+
}
|
|
116
|
+
export function dispatcherAccessPath(id) {
|
|
117
|
+
return join(dispatcherDir(id), 'access.json');
|
|
118
|
+
}
|
|
119
|
+
export function unixSocketPathFitsBudget(path) {
|
|
120
|
+
return Buffer.byteLength(path, 'utf8') <= DREAMUX_UNIX_SOCKET_PATH_MAX_BYTES;
|
|
121
|
+
}
|
|
122
|
+
export function assertUnixSocketPathBudget(path, label) {
|
|
123
|
+
if (unixSocketPathFitsBudget(path))
|
|
124
|
+
return path;
|
|
125
|
+
const bytes = Buffer.byteLength(path, 'utf8');
|
|
126
|
+
throw new Error(`${label} is too long for Unix sockets (${bytes} bytes > ${DREAMUX_UNIX_SOCKET_PATH_MAX_BYTES} safe bytes): ${path}`);
|
|
127
|
+
}
|
|
128
|
+
export function dispatcherPathSegment(id) {
|
|
129
|
+
return validateDispatcherId(id);
|
|
96
130
|
}
|
|
97
131
|
//# sourceMappingURL=paths.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/runtime/paths.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/runtime/paths.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/secrets.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
export function resolveBotSecret(ref, config) {
|
|
2
2
|
if (ref.startsWith('config:')) {
|
|
3
3
|
const dispatcherId = ref.slice('config:'.length);
|
|
4
|
-
const
|
|
5
|
-
if (
|
|
4
|
+
const dispatcher = config.dispatchers.find((item) => item.id === dispatcherId);
|
|
5
|
+
if (dispatcher === undefined ||
|
|
6
|
+
dispatcher.feishu.app_secret.trim() === '') {
|
|
6
7
|
throw new Error(`missing Feishu app_secret in dreamux config for bot_secret_ref=${ref}`);
|
|
7
8
|
}
|
|
8
|
-
return
|
|
9
|
+
return dispatcher.feishu.app_secret;
|
|
9
10
|
}
|
|
10
11
|
if (ref.startsWith('env:')) {
|
|
11
12
|
const varName = ref.slice('env:'.length);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/runtime/secrets.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,MAAqB;IACjE,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/runtime/secrets.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,MAAqB;IACjE,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC;QAC/E,IACE,UAAU,KAAK,SAAS;YACxB,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAC1C,CAAC;YACD,MAAM,IAAI,KAAK,CACb,kEAAkE,GAAG,EAAE,CACxE,CAAC;QACJ,CAAC;QACD,OAAO,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC;IACtC,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,uBAAuB,OAAO,8CAA8C,GAAG,GAAG,CACnF,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,KAAK,CACb,sCAAsC,GAAG,8BAA8B,CACxE,CAAC;AACJ,CAAC"}
|