@excitedjs/dreamux 0.1.1 → 0.1.3

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.
Files changed (58) hide show
  1. package/README.md +36 -46
  2. package/bin/dreamux +6 -4
  3. package/dist/admin/socket.js +1 -1
  4. package/dist/admin/socket.js.map +1 -1
  5. package/dist/channel/feishu-gate.js +27 -0
  6. package/dist/channel/feishu-gate.js.map +1 -0
  7. package/dist/channel/outbound.js +12 -0
  8. package/dist/channel/outbound.js.map +1 -0
  9. package/dist/cli/doctor.js +273 -0
  10. package/dist/cli/doctor.js.map +1 -0
  11. package/dist/cli/dreamux.js +257 -78
  12. package/dist/cli/dreamux.js.map +1 -1
  13. package/dist/cli/server-ctl.js +15 -13
  14. package/dist/cli/server-ctl.js.map +1 -1
  15. package/dist/cli/server.js +7 -7
  16. package/dist/codex/handshake.js +1 -1
  17. package/dist/codex/handshake.js.map +1 -1
  18. package/dist/db/repository.js +16 -0
  19. package/dist/db/repository.js.map +1 -1
  20. package/dist/dispatcher/runtime.js +11 -3
  21. package/dist/dispatcher/runtime.js.map +1 -1
  22. package/dist/dispatcher/turn-manager.js +10 -8
  23. package/dist/dispatcher/turn-manager.js.map +1 -1
  24. package/dist/feishu/bot.js +41 -22
  25. package/dist/feishu/bot.js.map +1 -1
  26. package/dist/onboard/commands.js +34 -0
  27. package/dist/onboard/commands.js.map +1 -0
  28. package/dist/onboard/config-files.js +113 -0
  29. package/dist/onboard/config-files.js.map +1 -0
  30. package/dist/onboard/ledger.js +113 -0
  31. package/dist/onboard/ledger.js.map +1 -0
  32. package/dist/onboard/plugins.js +202 -0
  33. package/dist/onboard/plugins.js.map +1 -0
  34. package/dist/onboard/run.js +150 -0
  35. package/dist/onboard/run.js.map +1 -0
  36. package/dist/onboard/service.js +138 -0
  37. package/dist/onboard/service.js.map +1 -0
  38. package/dist/onboard/types.js +2 -0
  39. package/dist/{feishu → onboard}/types.js.map +1 -1
  40. package/dist/onboard/wizard.js +146 -0
  41. package/dist/onboard/wizard.js.map +1 -0
  42. package/dist/runtime/codex-args.js +1 -1
  43. package/dist/runtime/config.js +16 -4
  44. package/dist/runtime/config.js.map +1 -1
  45. package/dist/runtime/dispatcher-codex-home.js +266 -0
  46. package/dist/runtime/dispatcher-codex-home.js.map +1 -0
  47. package/dist/runtime/paths.js +17 -2
  48. package/dist/runtime/paths.js.map +1 -1
  49. package/dist/server.js +14 -2
  50. package/dist/server.js.map +1 -1
  51. package/package.json +13 -5
  52. package/bin/server +0 -35
  53. package/bin/server-ctl +0 -28
  54. package/dist/feishu/content.js +0 -108
  55. package/dist/feishu/content.js.map +0 -1
  56. package/dist/feishu/render.js +0 -600
  57. package/dist/feishu/render.js.map +0 -1
  58. package/dist/feishu/types.js +0 -9
@@ -0,0 +1,146 @@
1
+ import { homedir } from 'node:os';
2
+ import { join, resolve } from 'node:path';
3
+ import { cancel, confirm, intro, isCancel, outro, select, text, } from '@clack/prompts';
4
+ import { expandHome } from '../runtime/config.js';
5
+ const DEFAULT_DISPATCHER_ID = 'dispatcher';
6
+ const DEFAULT_CODEX_MODEL = 'gpt-5-codex';
7
+ const DEFAULT_CODEX_PROVIDER = 'openai';
8
+ const DEFAULT_CODEX_MARKETPLACE_SOURCE = 'excitedjs/dreamux';
9
+ const DEFAULT_CODEX_MARKETPLACE_SPARSE = ['codex-marketplace'];
10
+ const DEFAULT_CODEX_MARKETPLACE_NAME = 'dreamux';
11
+ const DEFAULT_CODEX_PLUGIN_REF = 'codexmux@dreamux';
12
+ const DEFAULT_CLAUDE_MARKETPLACE_SOURCE = 'excitedjs/claudemux';
13
+ const DEFAULT_CLAUDE_MARKETPLACE_NAME = 'claudemux';
14
+ const DEFAULT_CLAUDE_PLUGIN_REF = 'claudemux@claudemux';
15
+ export async function collectOnboardAnswers(options) {
16
+ const interactive = process.stdin.isTTY === true && options.yes !== true;
17
+ if (!interactive)
18
+ return answersFromOptions(options, false);
19
+ intro('dreamux onboard');
20
+ const configDir = await promptText('dreamux config directory', defaultConfigDir(options));
21
+ const runtimeDir = await promptText('dreamux runtime directory', defaultRuntimeDir(options));
22
+ const dispatcherId = await promptText('dispatcher id', options.dispatcherId ?? DEFAULT_DISPATCHER_ID);
23
+ const codexBin = await promptText('codex binary', options.codexBin ?? 'codex');
24
+ const codexModel = await promptText('dispatcher Codex model', options.codexModel ?? DEFAULT_CODEX_MODEL);
25
+ const authEnvVar = await promptSelect('Codex auth environment variable', options.authEnvVar ?? firstConfiguredAuthEnv(), [
26
+ { value: 'CODEX_ACCESS_TOKEN', label: 'CODEX_ACCESS_TOKEN' },
27
+ { value: 'OPENAI_API_KEY', label: 'OPENAI_API_KEY' },
28
+ { value: 'CODEX_API_KEY', label: 'CODEX_API_KEY' },
29
+ ]);
30
+ const botAppId = await promptText('channel bot app id', options.botAppId);
31
+ const botSecretRef = await promptText('channel bot secret ref', options.botSecretRef ?? 'env:FEISHU_BOT_SECRET');
32
+ const registerService = await promptConfirm('register the user-level service now?', options.registerService ?? true);
33
+ const startService = registerService
34
+ ? await promptConfirm('start the service after registration?', options.startService ?? true)
35
+ : false;
36
+ outro('Collected onboarding inputs.');
37
+ return answersFromOptions({
38
+ ...options,
39
+ configDir,
40
+ runtimeDir,
41
+ dispatcherId,
42
+ codexBin,
43
+ codexModel,
44
+ authEnvVar,
45
+ botAppId,
46
+ botSecretRef,
47
+ registerService,
48
+ startService,
49
+ }, true);
50
+ }
51
+ export function answersFromOptions(options, fromInteractive) {
52
+ const botAppId = requiredOption(options.botAppId, 'bot-app-id', fromInteractive);
53
+ const botSecretRef = requiredOption(options.botSecretRef, 'bot-secret-ref', fromInteractive);
54
+ const authEnvVar = options.authEnvVar ?? firstConfiguredAuthEnv();
55
+ assertSupportedAuthEnv(authEnvVar);
56
+ return {
57
+ configDir: normalizePath(options.configDir ?? defaultConfigDir(options)),
58
+ runtimeDir: normalizePath(options.runtimeDir ?? defaultRuntimeDir(options)),
59
+ dispatcherId: options.dispatcherId ?? DEFAULT_DISPATCHER_ID,
60
+ codexBin: options.codexBin ?? 'codex',
61
+ codexModel: options.codexModel ?? DEFAULT_CODEX_MODEL,
62
+ codexProvider: options.codexProvider ?? DEFAULT_CODEX_PROVIDER,
63
+ authEnvVar,
64
+ codexMarketplaceSource: options.codexMarketplaceSource ?? DEFAULT_CODEX_MARKETPLACE_SOURCE,
65
+ codexMarketplaceSparse: normalizeStringArray(options.codexMarketplaceSparse, DEFAULT_CODEX_MARKETPLACE_SPARSE),
66
+ codexMarketplaceName: options.codexMarketplaceName ?? DEFAULT_CODEX_MARKETPLACE_NAME,
67
+ codexPluginRef: options.codexPluginRef ?? DEFAULT_CODEX_PLUGIN_REF,
68
+ claudeBin: options.claudeBin ?? 'claude',
69
+ claudeConfigDir: normalizePath(options.claudeConfigDir ?? join(homedir(), '.claude')),
70
+ claudeMarketplaceSource: options.claudeMarketplaceSource ?? DEFAULT_CLAUDE_MARKETPLACE_SOURCE,
71
+ claudeMarketplaceSparse: normalizeStringArray(options.claudeMarketplaceSparse, []),
72
+ claudeMarketplaceName: options.claudeMarketplaceName ?? DEFAULT_CLAUDE_MARKETPLACE_NAME,
73
+ claudePluginRef: options.claudePluginRef ?? DEFAULT_CLAUDE_PLUGIN_REF,
74
+ botAppId,
75
+ botSecretRef,
76
+ registerService: options.registerService ?? true,
77
+ startService: options.startService ?? true,
78
+ dreamuxBin: normalizePath(options.dreamuxBin ?? process.env['DREAMUX_BIN'] ?? process.argv[1]),
79
+ dryRun: options.dryRun ?? false,
80
+ };
81
+ }
82
+ function defaultConfigDir(options) {
83
+ return options.configDir ?? join(homedir(), '.dreamux');
84
+ }
85
+ function defaultRuntimeDir(options) {
86
+ return options.runtimeDir ?? join(homedir(), '.codex-host');
87
+ }
88
+ async function promptText(label, initialValue) {
89
+ const value = await text({
90
+ message: label,
91
+ initialValue,
92
+ validate: (input) => input === undefined || input.trim() === '' ? 'required' : undefined,
93
+ });
94
+ return unwrapPrompt(value);
95
+ }
96
+ async function promptConfirm(label, initialValue) {
97
+ const value = await confirm({
98
+ message: label,
99
+ initialValue,
100
+ });
101
+ return unwrapPrompt(value);
102
+ }
103
+ async function promptSelect(label, initialValue, options) {
104
+ const value = await select({
105
+ message: label,
106
+ initialValue,
107
+ options,
108
+ });
109
+ return unwrapPrompt(value);
110
+ }
111
+ function unwrapPrompt(value) {
112
+ if (isCancel(value)) {
113
+ cancel('onboard cancelled');
114
+ throw new Error('onboard cancelled');
115
+ }
116
+ return value;
117
+ }
118
+ function requiredOption(value, name, fromInteractive) {
119
+ if (value !== undefined && value.trim() !== '')
120
+ return value;
121
+ const mode = fromInteractive ? 'wizard' : 'non-interactive onboard';
122
+ throw new Error(`${mode} requires --${name}`);
123
+ }
124
+ function normalizePath(path) {
125
+ return resolve(expandHome(path));
126
+ }
127
+ function normalizeStringArray(value, fallback) {
128
+ if (value === undefined)
129
+ return fallback;
130
+ return (Array.isArray(value) ? value : [value]).filter((item) => item !== '');
131
+ }
132
+ function firstConfiguredAuthEnv() {
133
+ for (const name of ['CODEX_ACCESS_TOKEN', 'OPENAI_API_KEY', 'CODEX_API_KEY']) {
134
+ if (process.env[name] !== undefined && process.env[name] !== '')
135
+ return name;
136
+ }
137
+ return 'CODEX_ACCESS_TOKEN';
138
+ }
139
+ function assertSupportedAuthEnv(name) {
140
+ if (name !== 'CODEX_ACCESS_TOKEN' &&
141
+ name !== 'OPENAI_API_KEY' &&
142
+ name !== 'CODEX_API_KEY') {
143
+ throw new Error(`unsupported Codex auth env var '${name}'; use CODEX_ACCESS_TOKEN, OPENAI_API_KEY, or CODEX_API_KEY`);
144
+ }
145
+ }
146
+ //# sourceMappingURL=wizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/onboard/wizard.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@
14
14
  * 1. dispatchers.codex_args_json (this JSON)
15
15
  * 2. global defaults from ~/.dreamux/config.toml (passed in as `defaults`)
16
16
  * 3. hardcoded fallbacks (`'never'`, `'workspace-write'`, `[]`)
17
- * Per the feat/global-config-dir work — see decision 0003.
17
+ * Per the feat/global-config-dir work — see the global-config decision.
18
18
  *
19
19
  * `approvalPolicy` not in the trusted-local allowlist fails-fast at startup
20
20
  * (issue #2 §"实现陷阱"): dispatcher refuses to come up if the policy may
@@ -60,10 +60,10 @@ export const ALLOWED_SANDBOX_MODES = new Set([
60
60
  */
61
61
  export const DEFAULT_CONFIG_TOML = `# dreamux global configuration (~/.dreamux/config.toml)
62
62
  #
63
- # Edit this file and restart \`dreamux server start\` to apply changes.
63
+ # Edit this file and restart \`dreamux serve\` to apply changes.
64
64
  # Runtime data (SQLite, sockets, dispatcher logs) lives separately in
65
65
  # \`runtime_dir\` below — this file holds only user-editable settings.
66
- # See .agents/decisions/0003-global-config-dir.md for the design rationale.
66
+ # See .agents/decisions/global-config-dir.md for the design rationale.
67
67
  #
68
68
  # Precedence (highest wins):
69
69
  # 1. environment variables (CODEX_HOST_RUNTIME_DIR, CODEX_HOST_ADMIN_SOCKET,
@@ -138,7 +138,7 @@ export function globalConfigFile(overrides = {}) {
138
138
  * fails so the operator can fix the file without spelunking through
139
139
  * libraries.
140
140
  *
141
- * Safe to call from `server start` on every boot — first call ensures
141
+ * Safe to call from `dreamux serve` on every boot — first call ensures
142
142
  * the directory and file exist with sensible defaults; subsequent calls
143
143
  * just read.
144
144
  *
@@ -167,6 +167,18 @@ export function loadOrInitConfig(overrides = {}) {
167
167
  const config = mergeWithDefaults(parsed, file);
168
168
  return { config, configFile: file, createdOnThisBoot };
169
169
  }
170
+ export function loadConfig(overrides = {}) {
171
+ const file = globalConfigFile(overrides);
172
+ const raw = readFileSync(file, 'utf8');
173
+ let parsed;
174
+ try {
175
+ parsed = parseToml(raw);
176
+ }
177
+ catch (err) {
178
+ throw formatTomlError(err, file);
179
+ }
180
+ return { config: mergeWithDefaults(parsed, file), configFile: file };
181
+ }
170
182
  /**
171
183
  * Atomic create-if-absent. Returns true if this call created the file.
172
184
  *
@@ -223,7 +235,7 @@ function mergeWithDefaults(raw, file) {
223
235
  : expandHome(ensureString(admin_socket_raw, 'admin_socket', file));
224
236
  const approval_policy = requireString(codexIn, 'approval_policy', BUILT_IN_DEFAULTS.codex.approval_policy, file, 'codex.');
225
237
  // Validate approval_policy against the same allowlist as codex-args.ts.
226
- // Keep the two in sync — see decision 0001 / issue #2 §"信任模型".
238
+ // Keep the two in sync — see the Rush + pnpm decision / issue #2 §"信任模型".
227
239
  const ALLOWED_POLICIES = new Set([
228
240
  'never',
229
241
  'auto',
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/runtime/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/runtime/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,266 @@
1
+ import { existsSync, readFileSync, readdirSync, statSync, } from 'node:fs';
2
+ import { basename, join, normalize, sep } from 'node:path';
3
+ import { parse as parseToml, TomlError } from 'smol-toml';
4
+ import { dispatcherAppServerControlDir, dispatcherCodexConfigPath, dispatcherCodexHome, dispatcherCodexPluginsDir, dispatcherSocketPath, } from './paths.js';
5
+ export const DISPATCHER_APP_SERVER_SOCKET_PATH_MAX_BYTES = 103;
6
+ export function dispatcherCodexHomeDoctorContext(dispatcherId, options = {}) {
7
+ return {
8
+ dispatcherId,
9
+ codexHome: dispatcherCodexHome(dispatcherId),
10
+ configPath: dispatcherCodexConfigPath(dispatcherId),
11
+ pluginsDir: dispatcherCodexPluginsDir(dispatcherId),
12
+ appServerControlDir: dispatcherAppServerControlDir(dispatcherId),
13
+ socketPath: dispatcherSocketPath(dispatcherId),
14
+ codexCliArgs: options.codexCliArgs ?? [],
15
+ };
16
+ }
17
+ export function validateDispatcherCodexHome(input, options = {}) {
18
+ const context = typeof input === 'string'
19
+ ? dispatcherCodexHomeDoctorContext(input, {
20
+ codexCliArgs: options.codexCliArgs,
21
+ })
22
+ : {
23
+ ...input,
24
+ codexCliArgs: options.codexCliArgs ?? input.codexCliArgs,
25
+ };
26
+ const errors = [];
27
+ const env = options.env ?? process.env;
28
+ let parsedConfig = null;
29
+ if (!existsSync(context.configPath)) {
30
+ errors.push(`missing dispatcher Codex config: ${context.configPath}`);
31
+ }
32
+ else {
33
+ try {
34
+ const parsed = parseToml(readFileSync(context.configPath, 'utf8'));
35
+ if (isRecord(parsed)) {
36
+ parsedConfig = parsed;
37
+ }
38
+ else {
39
+ errors.push(`dispatcher Codex config must be a TOML table: ${context.configPath}`);
40
+ }
41
+ }
42
+ catch (err) {
43
+ errors.push(formatTomlError(err, context.configPath));
44
+ }
45
+ }
46
+ if (!existsSync(context.codexHome)) {
47
+ errors.push(`missing dispatcher CODEX_HOME directory: ${context.codexHome}`);
48
+ }
49
+ if (isTmpPath(context.socketPath)) {
50
+ errors.push(`dispatcher app-server socket must not be under /tmp: ${context.socketPath}`);
51
+ }
52
+ if (!socketPathFitsUnixLimit(context.socketPath)) {
53
+ const bytes = Buffer.byteLength(context.socketPath, 'utf8');
54
+ 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}`);
55
+ }
56
+ if (!codexmuxPluginExists(context.pluginsDir)) {
57
+ errors.push(`missing codexmux plugin under: ${context.pluginsDir}`);
58
+ }
59
+ if (parsedConfig !== null) {
60
+ const effectiveConfig = applyCliConfigOverrides(parsedConfig, context.codexCliArgs, errors);
61
+ if (!hasNetworkEnabledRuntime(effectiveConfig)) {
62
+ errors.push('dispatcher Codex runtime config must select a network-enabled sandbox/profile');
63
+ }
64
+ if (!hasModel(effectiveConfig)) {
65
+ errors.push(`dispatcher Codex config must define a model in: ${context.configPath}`);
66
+ }
67
+ }
68
+ if (!hasAuth(context.codexHome, env)) {
69
+ errors.push(`missing dispatcher Codex auth state in ${context.codexHome} or a supported auth environment variable`);
70
+ }
71
+ return {
72
+ ok: errors.length === 0,
73
+ errors,
74
+ context,
75
+ };
76
+ }
77
+ export async function assertDispatcherCodexHomeReady(context) {
78
+ const result = validateDispatcherCodexHome(context);
79
+ if (result.ok)
80
+ return;
81
+ throw new Error(formatDispatcherCodexHomeErrors(result));
82
+ }
83
+ export function formatDispatcherCodexHomeErrors(result) {
84
+ const header = `dispatcher '${result.context.dispatcherId}' private CODEX_HOME is not ready`;
85
+ return [header, ...result.errors.map((e) => `- ${e}`)].join('\n');
86
+ }
87
+ function formatTomlError(err, file) {
88
+ if (err instanceof TomlError) {
89
+ const where = typeof err.line === 'number' && typeof err.column === 'number'
90
+ ? `${file}:${err.line}:${err.column}`
91
+ : file;
92
+ return `dispatcher Codex config parse error at ${where}: ${err.message}`;
93
+ }
94
+ const msg = err instanceof Error ? err.message : String(err);
95
+ return `dispatcher Codex config parse error in ${file}: ${msg}`;
96
+ }
97
+ function codexmuxPluginExists(root) {
98
+ return hasPathSegment(root, 'codexmux', 5);
99
+ }
100
+ function hasPathSegment(root, segment, maxDepth) {
101
+ if (!existsSync(root))
102
+ return false;
103
+ const stack = [{ path: root, depth: 0 }];
104
+ while (stack.length > 0) {
105
+ const current = stack.pop();
106
+ if (current === undefined)
107
+ continue;
108
+ if (basename(current.path) === segment)
109
+ return true;
110
+ if (current.depth >= maxDepth)
111
+ continue;
112
+ let entries;
113
+ try {
114
+ entries = readdirSync(current.path);
115
+ }
116
+ catch {
117
+ continue;
118
+ }
119
+ for (const entry of entries) {
120
+ const child = join(current.path, entry);
121
+ try {
122
+ if (statSync(child).isDirectory()) {
123
+ stack.push({ path: child, depth: current.depth + 1 });
124
+ }
125
+ }
126
+ catch {
127
+ /* ignore transient filesystem races */
128
+ }
129
+ }
130
+ }
131
+ return false;
132
+ }
133
+ function hasNetworkEnabledRuntime(config) {
134
+ const sandboxMode = stringValue(config['sandbox_mode']);
135
+ if (sandboxMode === 'danger-full-access')
136
+ return true;
137
+ if (sandboxMode === 'workspace-write') {
138
+ const workspaceWrite = recordValue(config['sandbox_workspace_write']);
139
+ if (workspaceWrite !== null && boolValue(workspaceWrite['network_access']) === true) {
140
+ return true;
141
+ }
142
+ }
143
+ const profileName = stringValue(config['default_permissions']);
144
+ if (profileName === null)
145
+ return false;
146
+ const permissions = recordValue(config['permissions']);
147
+ if (permissions !== null) {
148
+ const profile = recordValue(permissions[profileName]);
149
+ if (profile !== null && profileAllowsNetwork(profile))
150
+ return true;
151
+ }
152
+ return false;
153
+ }
154
+ function profileAllowsNetwork(profile) {
155
+ if (stringValue(profile['sandbox_mode']) === 'danger-full-access')
156
+ return true;
157
+ const network = recordValue(profile['network']);
158
+ if (network !== null && boolValue(network['enabled']) === true)
159
+ return true;
160
+ const sandbox = recordValue(profile['sandbox_workspace_write']);
161
+ if (sandbox !== null && boolValue(sandbox['network_access']) === true)
162
+ return true;
163
+ return false;
164
+ }
165
+ function hasModel(config) {
166
+ const fromConfig = stringValue(config['model']);
167
+ return fromConfig !== null && fromConfig.trim() !== '';
168
+ }
169
+ function hasAuth(codexHome, env) {
170
+ if (existsSync(join(codexHome, 'auth.json')))
171
+ return true;
172
+ return ['OPENAI_API_KEY', 'CODEX_API_KEY', 'CODEX_ACCESS_TOKEN'].some((name) => {
173
+ const value = env[name];
174
+ return value !== undefined && value.trim() !== '';
175
+ });
176
+ }
177
+ function socketPathFitsUnixLimit(path) {
178
+ return (Buffer.byteLength(path, 'utf8') <=
179
+ DISPATCHER_APP_SERVER_SOCKET_PATH_MAX_BYTES);
180
+ }
181
+ function applyCliConfigOverrides(config, cliArgs, errors) {
182
+ const effective = cloneRecord(config);
183
+ for (let i = 0; i < cliArgs.length; i += 1) {
184
+ const arg = cliArgs[i];
185
+ if (arg === '-c' || arg === '--config') {
186
+ const next = cliArgs[i + 1];
187
+ if (next === undefined) {
188
+ errors.push(`Codex config override ${arg} is missing key=value`);
189
+ }
190
+ else {
191
+ applyConfigOverride(effective, next, errors);
192
+ i += 1;
193
+ }
194
+ continue;
195
+ }
196
+ if (arg.startsWith('--config=')) {
197
+ applyConfigOverride(effective, arg.slice('--config='.length), errors);
198
+ }
199
+ }
200
+ return effective;
201
+ }
202
+ function applyConfigOverride(config, raw, errors) {
203
+ const eq = raw.indexOf('=');
204
+ if (eq <= 0) {
205
+ errors.push(`Codex config override must be key=value: ${raw}`);
206
+ return;
207
+ }
208
+ const key = raw.slice(0, eq).trim();
209
+ const value = parseCodexConfigValue(raw.slice(eq + 1).trim());
210
+ const parts = key.split('.').map((p) => p.trim()).filter((p) => p !== '');
211
+ if (parts.length === 0) {
212
+ errors.push(`Codex config override has an empty key: ${raw}`);
213
+ return;
214
+ }
215
+ let target = config;
216
+ for (const part of parts.slice(0, -1)) {
217
+ const existing = target[part];
218
+ if (!isRecord(existing)) {
219
+ target[part] = {};
220
+ }
221
+ target = target[part];
222
+ }
223
+ target[parts[parts.length - 1]] = value;
224
+ }
225
+ function parseCodexConfigValue(raw) {
226
+ try {
227
+ const parsed = parseToml(`value = ${raw}`);
228
+ if (isRecord(parsed))
229
+ return parsed['value'];
230
+ }
231
+ catch {
232
+ /* Codex treats non-TOML override values as literal strings. */
233
+ }
234
+ return raw;
235
+ }
236
+ function cloneRecord(record) {
237
+ const copy = {};
238
+ for (const [key, value] of Object.entries(record)) {
239
+ copy[key] = cloneValue(value);
240
+ }
241
+ return copy;
242
+ }
243
+ function cloneValue(value) {
244
+ if (Array.isArray(value))
245
+ return value.map(cloneValue);
246
+ if (isRecord(value))
247
+ return cloneRecord(value);
248
+ return value;
249
+ }
250
+ function isTmpPath(path) {
251
+ const normalized = normalize(path);
252
+ return normalized === '/tmp' || normalized.startsWith(`/tmp${sep}`);
253
+ }
254
+ function isRecord(value) {
255
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
256
+ }
257
+ function recordValue(value) {
258
+ return isRecord(value) ? value : null;
259
+ }
260
+ function stringValue(value) {
261
+ return typeof value === 'string' ? value : null;
262
+ }
263
+ function boolValue(value) {
264
+ return typeof value === 'boolean' ? value : null;
265
+ }
266
+ //# sourceMappingURL=dispatcher-codex-home.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher-codex-home.js","sourceRoot":"","sources":["../../src/runtime/dispatcher-codex-home.ts"],"names":[],"mappings":"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"}
@@ -8,8 +8,11 @@
8
8
  * state.db SQLite database (dispatchers + inbound_buffer)
9
9
  * admin.sock server-ctl admin Unix socket
10
10
  * dispatchers/<id>/
11
+ * codex-home/ Private CODEX_HOME for the dispatcher app-server
12
+ * config.toml Minimal Codex config generated by onboard
13
+ * plugins/ Codex plugin cache, including codexmux
14
+ * app-server-control/ Codex app-server control sockets
11
15
  * cwd/ Codex app-server cwd
12
- * socket Codex Unix socket
13
16
  * stdout.log Codex stdout
14
17
  * stderr.log Codex stderr (load-bearing for debug)
15
18
  *
@@ -65,8 +68,20 @@ export function dispatcherDir(id) {
65
68
  export function dispatcherCodexCwd(id) {
66
69
  return join(dispatcherDir(id), 'cwd');
67
70
  }
71
+ export function dispatcherCodexHome(id) {
72
+ return join(dispatcherDir(id), 'codex-home');
73
+ }
74
+ export function dispatcherCodexConfigPath(id) {
75
+ return join(dispatcherCodexHome(id), 'config.toml');
76
+ }
77
+ export function dispatcherCodexPluginsDir(id) {
78
+ return join(dispatcherCodexHome(id), 'plugins');
79
+ }
80
+ export function dispatcherAppServerControlDir(id) {
81
+ return join(dispatcherCodexHome(id), 'app-server-control');
82
+ }
68
83
  export function dispatcherSocketPath(id) {
69
- return join(dispatcherDir(id), 'socket');
84
+ return join(dispatcherAppServerControlDir(id), 'as.sock');
70
85
  }
71
86
  export function dispatcherStdoutLog(id) {
72
87
  return join(dispatcherDir(id), 'stdout.log');
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/runtime/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EACL,iBAAiB,EACjB,UAAU,GAEX,MAAM,aAAa,CAAC;AAErB,IAAI,aAAa,GAAkB,iBAAiB,CAAC;AAErD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAqB;IACpD,aAAa,GAAG,MAAM,CAAC;AACzB,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,kBAAkB;IAChC,aAAa,GAAG,iBAAiB,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,OAAO,CAAC;IAC5D,OAAO,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,OAAO,CAAC;IAC5D,IAAI,aAAa,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;QACxC,OAAO,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAU;IAC3C,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,EAAU;IAC7C,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAU;IAC5C,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAU;IAC5C,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/runtime/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EACL,iBAAiB,EACjB,UAAU,GAEX,MAAM,aAAa,CAAC;AAErB,IAAI,aAAa,GAAkB,iBAAiB,CAAC;AAErD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAqB;IACpD,aAAa,GAAG,MAAM,CAAC;AACzB,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,kBAAkB;IAChC,aAAa,GAAG,iBAAiB,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,OAAO,CAAC;IAC5D,OAAO,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,OAAO,CAAC;IAC5D,IAAI,aAAa,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;QACxC,OAAO,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAU;IAC3C,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAU;IAC5C,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,EAAU;IAClD,OAAO,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,EAAU;IAClD,OAAO,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,EAAU;IACtD,OAAO,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,EAAU;IAC7C,OAAO,IAAI,CAAC,6BAA6B,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAU;IAC5C,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAU;IAC5C,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;AAC/C,CAAC"}
package/dist/server.js CHANGED
@@ -16,7 +16,8 @@
16
16
  import { openDatabase } from './db/schema.js';
17
17
  import { DispatcherRepo, InboundRepo } from './db/repository.js';
18
18
  import { DispatcherRuntime } from './dispatcher/runtime.js';
19
- import { createFeishuBot } from './feishu/bot.js';
19
+ import { channelOutboundToFeishuTarget, createFeishuBot, } from './feishu/bot.js';
20
+ import { compatibleFeishuGate } from './channel/feishu-gate.js';
20
21
  import { parseCodexArgs, codexArgsToCli } from './runtime/codex-args.js';
21
22
  import { resolveBotSecret } from './runtime/secrets.js';
22
23
  import { BUILT_IN_DEFAULTS } from './runtime/config.js';
@@ -125,11 +126,12 @@ export class Server {
125
126
  dispatchers: this.repos.dispatchers,
126
127
  inbound: this.repos.inbound,
127
128
  outbound: {
128
- sendText: async (chatId, text) => (await bot.sendText(chatId, text)).messageIds,
129
+ send: async (target, text) => (await bot.send(channelOutboundToFeishuTarget(target), text)).messageIds,
129
130
  },
130
131
  codexBinPath: this.resolveCodexBinPath(),
131
132
  codexProcessFactory: this.opts.codexProcessFactory,
132
133
  codexClientFactory: this.opts.codexClientFactory,
134
+ codexHomeDoctor: this.opts.codexHomeDoctor,
133
135
  resolveExtraArgs: () => codexArgsToCli(codexArgs),
134
136
  handshakeTimeoutMs: cfg.codex.initialize_timeout_ms,
135
137
  outboundRetries: cfg.outbound.retries,
@@ -138,6 +140,16 @@ export class Server {
138
140
  try {
139
141
  await runtime.start();
140
142
  await bot.start(async (event) => {
143
+ const gate = compatibleFeishuGate({
144
+ senderId: event.senderId,
145
+ senderType: event.senderType,
146
+ chatType: event.chatType,
147
+ botOpenId: bot.botOpenId,
148
+ });
149
+ if (gate.action === 'drop') {
150
+ console.error(`[server] dropped feishu inbound for dispatcher '${id}': ${gate.reason}`);
151
+ return;
152
+ }
141
153
  runtime.enqueueInbound({
142
154
  source_chat_id: event.chatId,
143
155
  source_message_id: event.messageId,