@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.
- package/README.md +36 -46
- package/bin/dreamux +6 -4
- package/dist/admin/socket.js +1 -1
- package/dist/admin/socket.js.map +1 -1
- package/dist/channel/feishu-gate.js +27 -0
- package/dist/channel/feishu-gate.js.map +1 -0
- package/dist/channel/outbound.js +12 -0
- package/dist/channel/outbound.js.map +1 -0
- package/dist/cli/doctor.js +273 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/dreamux.js +257 -78
- package/dist/cli/dreamux.js.map +1 -1
- package/dist/cli/server-ctl.js +15 -13
- package/dist/cli/server-ctl.js.map +1 -1
- package/dist/cli/server.js +7 -7
- package/dist/codex/handshake.js +1 -1
- package/dist/codex/handshake.js.map +1 -1
- package/dist/db/repository.js +16 -0
- package/dist/db/repository.js.map +1 -1
- package/dist/dispatcher/runtime.js +11 -3
- package/dist/dispatcher/runtime.js.map +1 -1
- package/dist/dispatcher/turn-manager.js +10 -8
- package/dist/dispatcher/turn-manager.js.map +1 -1
- package/dist/feishu/bot.js +41 -22
- package/dist/feishu/bot.js.map +1 -1
- package/dist/onboard/commands.js +34 -0
- package/dist/onboard/commands.js.map +1 -0
- package/dist/onboard/config-files.js +113 -0
- package/dist/onboard/config-files.js.map +1 -0
- package/dist/onboard/ledger.js +113 -0
- package/dist/onboard/ledger.js.map +1 -0
- package/dist/onboard/plugins.js +202 -0
- package/dist/onboard/plugins.js.map +1 -0
- package/dist/onboard/run.js +150 -0
- package/dist/onboard/run.js.map +1 -0
- package/dist/onboard/service.js +138 -0
- package/dist/onboard/service.js.map +1 -0
- package/dist/onboard/types.js +2 -0
- package/dist/{feishu → onboard}/types.js.map +1 -1
- package/dist/onboard/wizard.js +146 -0
- package/dist/onboard/wizard.js.map +1 -0
- package/dist/runtime/codex-args.js +1 -1
- package/dist/runtime/config.js +16 -4
- package/dist/runtime/config.js.map +1 -1
- package/dist/runtime/dispatcher-codex-home.js +266 -0
- package/dist/runtime/dispatcher-codex-home.js.map +1 -0
- package/dist/runtime/paths.js +17 -2
- package/dist/runtime/paths.js.map +1 -1
- package/dist/server.js +14 -2
- package/dist/server.js.map +1 -1
- package/package.json +13 -5
- package/bin/server +0 -35
- package/bin/server-ctl +0 -28
- package/dist/feishu/content.js +0 -108
- package/dist/feishu/content.js.map +0 -1
- package/dist/feishu/render.js +0 -600
- package/dist/feishu/render.js.map +0 -1
- 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
|
|
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
|
package/dist/runtime/config.js
CHANGED
|
@@ -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
|
|
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/
|
|
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 `
|
|
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
|
|
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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"}
|
package/dist/runtime/paths.js
CHANGED
|
@@ -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(
|
|
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
|
|
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
|
-
|
|
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,
|