@excitedjs/dreamux 0.1.4 → 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 +170 -154
- 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 +72 -61
- 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 +25 -38
- 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 +195 -143
- 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 +60 -87
- 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 +40 -79
- package/dist/onboard/run.js.map +1 -1
- package/dist/onboard/service.js +6 -5
- package/dist/onboard/service.js.map +1 -1
- package/dist/onboard/uninstall.js +161 -0
- package/dist/onboard/uninstall.js.map +1 -0
- package/dist/onboard/wizard.js +12 -69
- package/dist/onboard/wizard.js.map +1 -1
- package/dist/runtime/codex-args.js +1 -1
- package/dist/runtime/config.js +213 -213
- package/dist/runtime/config.js.map +1 -1
- package/dist/runtime/dispatcher-codex-home.js +21 -185
- 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 +87 -48
- package/dist/runtime/paths.js.map +1 -1
- package/dist/runtime/secrets.js +17 -14
- package/dist/runtime/secrets.js.map +1 -1
- package/dist/server.js +112 -38
- 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
package/dist/onboard/run.js
CHANGED
|
@@ -1,68 +1,56 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { dirname, join } from 'node:path';
|
|
3
|
-
import { DispatcherRepo } from '../db/repository.js';
|
|
4
|
-
import { openDatabase } from '../db/schema.js';
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
5
2
|
import { codexArgsToCli, parseCodexArgs } from '../runtime/codex-args.js';
|
|
6
|
-
import {
|
|
3
|
+
import { assertNoLegacyTomlOnly, globalConfigFile, loadConfig, stringifyConfig, } from '../runtime/config.js';
|
|
4
|
+
import { dispatcherAppServerControlDir, dispatcherCodexHome, dispatcherWorkspaceCodexSkillsDir, dispatcherWorkspaceSkillPath, logsRoot, setRuntimeConfig, stateRoot, } from '../runtime/paths.js';
|
|
7
5
|
import { dispatcherCodexHomeDoctorContext, validateDispatcherCodexHome, } from '../runtime/dispatcher-codex-home.js';
|
|
8
6
|
import { ExecaCommandRunner } from './commands.js';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
7
|
+
import { dispatcherCodexArgsJson, dreamuxConfigFromAnswers, } from './config-files.js';
|
|
8
|
+
import { installDispatcherSkill } from './dispatcher-skill.js';
|
|
9
|
+
import { ensureDirectory, TransparentFileLedger, writeTextFile, } from './ledger.js';
|
|
11
10
|
import { installUserService, managedServiceEnvironment } from './service.js';
|
|
12
|
-
import { installClaudemuxPlugin, installCodexmuxPlugin, } from './plugins.js';
|
|
13
11
|
export async function runOnboard(options) {
|
|
14
12
|
const answers = options.answers;
|
|
15
13
|
const ledger = options.ledger ?? new TransparentFileLedger();
|
|
16
14
|
const runner = options.runner ?? new ExecaCommandRunner();
|
|
17
15
|
const env = options.env ?? process.env;
|
|
18
|
-
const
|
|
16
|
+
const configPath = globalConfigFile({ configDir: answers.configDir });
|
|
17
|
+
const existingConfig = readExistingDreamuxConfig(answers.configDir);
|
|
18
|
+
const dreamuxConfig = dreamuxConfigFromAnswers(answers, existingConfig);
|
|
19
|
+
const effectiveAnswers = {
|
|
20
|
+
...answers,
|
|
21
|
+
runtimeDir: stateRoot(),
|
|
22
|
+
codexBin: dreamuxConfig.codex.bin,
|
|
23
|
+
};
|
|
19
24
|
setRuntimeConfig(dreamuxConfig);
|
|
20
|
-
if (!answers.registerService) {
|
|
21
|
-
preflightAuth(answers, env);
|
|
22
|
-
}
|
|
23
|
-
const configPath = join(answers.configDir, 'config.toml');
|
|
24
25
|
ensureDirectory(answers.configDir, ledger, 'dreamux config directory', {
|
|
25
26
|
dryRun: answers.dryRun,
|
|
26
27
|
});
|
|
27
|
-
ensureDirectory(
|
|
28
|
+
ensureDirectory(stateRoot(), ledger, 'dreamux state directory', {
|
|
29
|
+
dryRun: answers.dryRun,
|
|
30
|
+
});
|
|
31
|
+
ensureDirectory(logsRoot(), ledger, 'dreamux logs directory', {
|
|
28
32
|
dryRun: answers.dryRun,
|
|
29
33
|
});
|
|
30
|
-
writeTextFile(configPath,
|
|
34
|
+
writeTextFile(configPath, stringifyConfig(dreamuxConfig), ledger, 'dreamux global config', { mode: 0o600, dryRun: answers.dryRun });
|
|
31
35
|
const codexHome = dispatcherCodexHome(answers.dispatcherId);
|
|
32
|
-
|
|
33
|
-
ensureDirectory(codexHome, ledger, 'dispatcher private CODEX_HOME', {
|
|
36
|
+
ensureDirectory(codexHome, ledger, 'global Codex home', {
|
|
34
37
|
dryRun: answers.dryRun,
|
|
35
38
|
});
|
|
36
|
-
ensureDirectory(dispatcherCodexPluginsDir(answers.dispatcherId), ledger, 'dispatcher Codex plugins directory', { dryRun: answers.dryRun });
|
|
37
39
|
ensureDirectory(dispatcherAppServerControlDir(answers.dispatcherId), ledger, 'dispatcher app-server control directory', { dryRun: answers.dryRun });
|
|
38
|
-
ensureDirectory(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
ensureDirectory(effectiveAnswers.dispatcherCwd, ledger, 'dispatcher cwd', { dryRun: answers.dryRun });
|
|
41
|
+
ensureDirectory(dispatcherWorkspaceCodexSkillsDir(effectiveAnswers.dispatcherCwd), ledger, 'workspace-local Codex skills directory', { dryRun: answers.dryRun });
|
|
42
|
+
installDispatcherSkill({
|
|
43
|
+
skillPath: dispatcherWorkspaceSkillPath(effectiveAnswers.dispatcherCwd),
|
|
42
44
|
ledger,
|
|
43
|
-
|
|
44
|
-
});
|
|
45
|
-
writeTextFile(codexConfigPath, buildDispatcherCodexConfigToml({
|
|
46
|
-
codexHomeConfigPath: codexConfigPath,
|
|
47
|
-
model: answers.codexModel,
|
|
48
|
-
marketplaceName: answers.codexMarketplaceName,
|
|
49
|
-
marketplaceSource: answers.codexMarketplaceSource,
|
|
50
|
-
pluginRef: answers.codexPluginRef,
|
|
51
|
-
}), ledger, 'dispatcher private Codex config', { mode: 0o600, dryRun: answers.dryRun });
|
|
52
|
-
await installClaudemuxPlugin({
|
|
53
|
-
answers,
|
|
54
|
-
codexHome,
|
|
55
|
-
ledger,
|
|
56
|
-
runner,
|
|
45
|
+
dryRun: answers.dryRun,
|
|
57
46
|
});
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
throw new Error(formatDoctorFailure(answers, doctor));
|
|
47
|
+
const doctor = runDispatcherDoctor(effectiveAnswers, dreamuxConfig, env);
|
|
48
|
+
if (!effectiveAnswers.dryRun && !doctor.ok) {
|
|
49
|
+
throw new Error(formatDoctorFailure(effectiveAnswers, doctor));
|
|
62
50
|
}
|
|
63
|
-
const service =
|
|
51
|
+
const service = effectiveAnswers.registerService
|
|
64
52
|
? await installUserService({
|
|
65
|
-
answers,
|
|
53
|
+
answers: effectiveAnswers,
|
|
66
54
|
ledger,
|
|
67
55
|
runner,
|
|
68
56
|
platform: options.platform,
|
|
@@ -76,31 +64,12 @@ export async function runOnboard(options) {
|
|
|
76
64
|
service,
|
|
77
65
|
};
|
|
78
66
|
}
|
|
79
|
-
function
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
ledger.record(dbPath, 'created', 'dispatcher database');
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
mkdirSync(dirname(dbPath), { recursive: true });
|
|
89
|
-
const before = snapshotFiles(dirname(dbPath));
|
|
90
|
-
const db = openDatabase({ path: dbPath });
|
|
91
|
-
try {
|
|
92
|
-
new DispatcherRepo(db).upsert({
|
|
93
|
-
dispatcher_id: answers.dispatcherId,
|
|
94
|
-
bot_app_id: answers.botAppId,
|
|
95
|
-
bot_secret_ref: answers.botSecretRef,
|
|
96
|
-
codex_args_json: dispatcherCodexArgsJson(),
|
|
97
|
-
codex_cwd: dispatcherCodexCwd(answers.dispatcherId),
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
finally {
|
|
101
|
-
db.close();
|
|
102
|
-
}
|
|
103
|
-
recordFileTreeChanges(dirname(dbPath), before, ledger, 'dispatcher database');
|
|
67
|
+
function readExistingDreamuxConfig(configDir) {
|
|
68
|
+
const configPath = globalConfigFile({ configDir });
|
|
69
|
+
assertNoLegacyTomlOnly({ configDir });
|
|
70
|
+
if (!existsSync(configPath))
|
|
71
|
+
return undefined;
|
|
72
|
+
return loadConfig({ configDir }).config;
|
|
104
73
|
}
|
|
105
74
|
function runDispatcherDoctor(answers, dreamuxConfig, env) {
|
|
106
75
|
const codexArgs = parseCodexArgs(dispatcherCodexArgsJson(), {
|
|
@@ -111,6 +80,7 @@ function runDispatcherDoctor(answers, dreamuxConfig, env) {
|
|
|
111
80
|
const codexCliArgs = codexArgsToCli(codexArgs);
|
|
112
81
|
const context = dispatcherCodexHomeDoctorContext(answers.dispatcherId, {
|
|
113
82
|
codexCliArgs,
|
|
83
|
+
dispatcherCwd: answers.dispatcherCwd,
|
|
114
84
|
});
|
|
115
85
|
if (answers.dryRun) {
|
|
116
86
|
return {
|
|
@@ -129,22 +99,13 @@ function runDispatcherDoctor(answers, dreamuxConfig, env) {
|
|
|
129
99
|
}
|
|
130
100
|
function formatDoctorFailure(answers, doctor) {
|
|
131
101
|
const lines = [
|
|
132
|
-
`dispatcher '${answers.dispatcherId}'
|
|
102
|
+
`dispatcher '${answers.dispatcherId}' Codex home is not ready`,
|
|
133
103
|
...doctor.errors.map((error) => `- ${error}`),
|
|
134
104
|
];
|
|
135
105
|
if (answers.registerService &&
|
|
136
|
-
doctor.errors.some((error) => error.includes('missing
|
|
137
|
-
lines.push('- managed service environments do not inherit your interactive shell auth token', `- authenticate the
|
|
106
|
+
doctor.errors.some((error) => error.includes('missing Codex auth state'))) {
|
|
107
|
+
lines.push('- managed service environments do not inherit your interactive shell auth token', `- authenticate the global Codex home before registering the service: ${answers.codexBin} login`);
|
|
138
108
|
}
|
|
139
109
|
return lines.join('\n');
|
|
140
110
|
}
|
|
141
|
-
function preflightAuth(answers, env) {
|
|
142
|
-
if (answers.dryRun)
|
|
143
|
-
return;
|
|
144
|
-
const value = env[answers.authEnvVar];
|
|
145
|
-
if (value !== undefined && value.trim() !== '')
|
|
146
|
-
return;
|
|
147
|
-
throw new Error(`missing dispatcher Codex auth env var ${answers.authEnvVar}; ` +
|
|
148
|
-
'onboard does not write API secrets into the private CODEX_HOME');
|
|
149
|
-
}
|
|
150
111
|
//# sourceMappingURL=run.js.map
|
package/dist/onboard/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/onboard/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/onboard/run.ts"],"names":[],"mappings":"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"}
|
package/dist/onboard/service.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { homedir } from 'node:os';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { build as buildPlist } from 'plist';
|
|
4
|
+
import { logsRoot, stateRoot } from '../runtime/paths.js';
|
|
4
5
|
import { ensureDirectory, ensureTextFile, writeTextFile, } from './ledger.js';
|
|
5
6
|
export const LAUNCHD_LABEL = 'dev.excited.dreamux';
|
|
6
7
|
export const SYSTEMD_UNIT = 'dreamux.service';
|
|
@@ -22,7 +23,7 @@ export function serviceUnitPath(platform = process.platform, homeDir = homedir()
|
|
|
22
23
|
export async function installUserService(options) {
|
|
23
24
|
const homeDir = options.homeDir ?? homedir();
|
|
24
25
|
const unit = serviceUnitPath(options.platform, homeDir);
|
|
25
|
-
const logDir =
|
|
26
|
+
const logDir = logsRoot();
|
|
26
27
|
const stdoutLog = join(logDir, 'daemon.stdout.log');
|
|
27
28
|
const stderrLog = join(logDir, 'daemon.stderr.log');
|
|
28
29
|
ensureDirectory(logDir, options.ledger, 'daemon log directory', {
|
|
@@ -62,7 +63,7 @@ export function renderLaunchdPlist(answers, stdoutLog, stderrLog) {
|
|
|
62
63
|
ProgramArguments: [answers.dreamuxBin, 'serve'],
|
|
63
64
|
RunAtLoad: true,
|
|
64
65
|
KeepAlive: true,
|
|
65
|
-
WorkingDirectory:
|
|
66
|
+
WorkingDirectory: stateRoot(),
|
|
66
67
|
EnvironmentVariables: managedServiceEnvironment(answers),
|
|
67
68
|
StandardOutPath: stdoutLog,
|
|
68
69
|
StandardErrorPath: stderrLog,
|
|
@@ -75,7 +76,7 @@ Description=dreamux dispatcher daemon
|
|
|
75
76
|
[Service]
|
|
76
77
|
Type=simple
|
|
77
78
|
ExecStart=${systemdEscapeArg(answers.dreamuxBin)} serve
|
|
78
|
-
WorkingDirectory=${systemdEscapeArg(
|
|
79
|
+
WorkingDirectory=${systemdEscapeArg(stateRoot())}
|
|
79
80
|
${Object.entries(managedServiceEnvironment(answers))
|
|
80
81
|
.map(([key, value]) => `Environment=${key}=${systemdEscapeEnv(value)}`)
|
|
81
82
|
.join('\n')}
|
|
@@ -89,11 +90,11 @@ WantedBy=default.target
|
|
|
89
90
|
`;
|
|
90
91
|
}
|
|
91
92
|
export function managedServiceEnvironment(answers) {
|
|
92
|
-
|
|
93
|
+
const env = {
|
|
93
94
|
DREAMUX_CONFIG_DIR: answers.configDir,
|
|
94
|
-
CODEX_HOST_RUNTIME_DIR: answers.runtimeDir,
|
|
95
95
|
CODEX_HOST_CODEX_BIN: answers.codexBin,
|
|
96
96
|
};
|
|
97
|
+
return env;
|
|
97
98
|
}
|
|
98
99
|
async function registerLaunchd(unitPath, unitStatus, options) {
|
|
99
100
|
const uid = options.uid ?? process.getuid?.();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/onboard/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/onboard/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { existsSync, rmSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { basename, join, resolve, sep } from 'node:path';
|
|
4
|
+
import { ExecaCommandRunner } from './commands.js';
|
|
5
|
+
import { LAUNCHD_LABEL, serviceUnitPath, SYSTEMD_UNIT, } from './service.js';
|
|
6
|
+
import { assertNoLegacyTomlOnly, expandHome, globalConfigDir, globalConfigFile, loadConfig, } from '../runtime/config.js';
|
|
7
|
+
import { dispatcherWorkspaceSkillPath, logsRoot, stateRoot, } from '../runtime/paths.js';
|
|
8
|
+
export async function runUninstall(options = {}) {
|
|
9
|
+
const runner = options.runner ?? new ExecaCommandRunner();
|
|
10
|
+
const dryRun = options.dryRun ?? false;
|
|
11
|
+
const configDir = normalizePath(options.configDir ?? globalConfigDir());
|
|
12
|
+
const entries = [];
|
|
13
|
+
const warnings = [];
|
|
14
|
+
const unit = serviceUnitPath(options.platform, options.homeDir ?? homedir());
|
|
15
|
+
warnIfConfigIsNotReadable(configDir, warnings);
|
|
16
|
+
const stateDir = normalizePath(stateRoot());
|
|
17
|
+
const logDir = normalizePath(logsRoot());
|
|
18
|
+
assertSafeOwnedDirectory(stateDir, 'dreamux state directory');
|
|
19
|
+
assertSafeOwnedDirectory(logDir, 'dreamux logs directory');
|
|
20
|
+
assertSafeOwnedDirectory(configDir, 'dreamux config directory');
|
|
21
|
+
const workspaceSkillPaths = collectWorkspaceSkillPaths(configDir);
|
|
22
|
+
await unregisterService({
|
|
23
|
+
unitPath: unit.path,
|
|
24
|
+
platform: unit.platform,
|
|
25
|
+
runner,
|
|
26
|
+
dryRun,
|
|
27
|
+
uid: options.uid,
|
|
28
|
+
});
|
|
29
|
+
removePath(unit.path, entries, `${unit.platform} unit`, dryRun);
|
|
30
|
+
if (unit.platform === 'systemd') {
|
|
31
|
+
await runBestEffort(runner, 'systemctl', ['--user', 'daemon-reload'], dryRun);
|
|
32
|
+
}
|
|
33
|
+
reportWorkspaceSkills(workspaceSkillPaths, entries);
|
|
34
|
+
removeOwnedDirectory(stateDir, entries, 'dreamux state directory', dryRun);
|
|
35
|
+
removeOwnedDirectory(logDir, entries, 'dreamux logs directory', dryRun);
|
|
36
|
+
removeOwnedDirectory(configDir, entries, 'dreamux config directory', dryRun);
|
|
37
|
+
return {
|
|
38
|
+
entries: entries.sort((a, b) => a.path.localeCompare(b.path)),
|
|
39
|
+
warnings,
|
|
40
|
+
service: {
|
|
41
|
+
platform: unit.platform,
|
|
42
|
+
unitPath: unit.path,
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function warnIfConfigIsNotReadable(configDir, warnings) {
|
|
47
|
+
try {
|
|
48
|
+
assertNoLegacyTomlOnly({ configDir });
|
|
49
|
+
if (!existsSync(globalConfigFile({ configDir })))
|
|
50
|
+
return;
|
|
51
|
+
loadConfig({ configDir });
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
55
|
+
warnings.push(`could not validate dreamux config before uninstall; continuing with fixed state/log paths: ${message}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function collectWorkspaceSkillPaths(configDir) {
|
|
59
|
+
try {
|
|
60
|
+
return loadConfig({ configDir }).config.dispatchers
|
|
61
|
+
.map(dispatcherWorkspaceSkillPathFromConfig)
|
|
62
|
+
.filter((path) => path !== null);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function dispatcherWorkspaceSkillPathFromConfig(dispatcher) {
|
|
69
|
+
if (dispatcher.cwd === null || dispatcher.cwd.trim() === '')
|
|
70
|
+
return null;
|
|
71
|
+
return dispatcherWorkspaceSkillPath(dispatcher.cwd);
|
|
72
|
+
}
|
|
73
|
+
function reportWorkspaceSkills(paths, entries) {
|
|
74
|
+
for (const path of uniquePaths(paths)) {
|
|
75
|
+
entries.push({
|
|
76
|
+
path,
|
|
77
|
+
status: existsSync(path) ? 'skipped' : 'missing',
|
|
78
|
+
reason: 'workspace-local dispatcher skill (not removed)',
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function unregisterService(options) {
|
|
83
|
+
if (options.platform === 'launchd') {
|
|
84
|
+
const uid = options.uid ?? process.getuid?.();
|
|
85
|
+
if (uid === undefined) {
|
|
86
|
+
throw new Error('launchd user service uninstall requires a numeric uid');
|
|
87
|
+
}
|
|
88
|
+
const serviceTarget = `gui/${uid}/${LAUNCHD_LABEL}`;
|
|
89
|
+
const loaded = await options.runner.check('launchctl', ['print', serviceTarget], { dryRun: options.dryRun });
|
|
90
|
+
if (loaded) {
|
|
91
|
+
await runBestEffort(options.runner, 'launchctl', ['bootout', serviceTarget], options.dryRun);
|
|
92
|
+
}
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
await runBestEffort(options.runner, 'systemctl', ['--user', 'disable', '--now', SYSTEMD_UNIT], options.dryRun);
|
|
96
|
+
}
|
|
97
|
+
async function runBestEffort(runner, command, args, dryRun) {
|
|
98
|
+
try {
|
|
99
|
+
await runner.run(command, args, { dryRun });
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
/* The unit may already be absent or stopped; file deletion below is authoritative. */
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function removeOwnedDirectory(path, entries, reason, dryRun) {
|
|
106
|
+
assertSafeOwnedDirectory(path, reason);
|
|
107
|
+
removePath(path, entries, reason, dryRun);
|
|
108
|
+
}
|
|
109
|
+
function removePath(path, entries, reason, dryRun) {
|
|
110
|
+
if (!existsSync(path)) {
|
|
111
|
+
entries.push({ path, status: 'missing', reason });
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if (!dryRun) {
|
|
115
|
+
rmSync(path, {
|
|
116
|
+
recursive: true,
|
|
117
|
+
force: true,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
entries.push({ path, status: 'removed', reason });
|
|
121
|
+
}
|
|
122
|
+
function assertSafeOwnedDirectory(path, reason) {
|
|
123
|
+
const normalized = normalizePath(path);
|
|
124
|
+
const home = normalizePath(homedir());
|
|
125
|
+
if (normalized === '/' ||
|
|
126
|
+
normalized === home ||
|
|
127
|
+
basename(normalized) === '' ||
|
|
128
|
+
normalized === normalizePath(process.cwd())) {
|
|
129
|
+
throw new Error(`refusing to remove unsafe ${reason}: ${path}`);
|
|
130
|
+
}
|
|
131
|
+
for (const protectedRoot of operatorStateRoots()) {
|
|
132
|
+
if (isSameOrInside(normalized, protectedRoot)) {
|
|
133
|
+
throw new Error(`refusing to remove unsafe ${reason}: ${path} is inside operator Codex/Claude state ${protectedRoot}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function normalizePath(path) {
|
|
138
|
+
return resolve(expandHome(path));
|
|
139
|
+
}
|
|
140
|
+
function operatorStateRoots() {
|
|
141
|
+
return uniquePaths([
|
|
142
|
+
joinHome('.codex'),
|
|
143
|
+
joinHome('.claude'),
|
|
144
|
+
]);
|
|
145
|
+
}
|
|
146
|
+
function joinHome(child) {
|
|
147
|
+
return normalizePath(join(homedir(), child));
|
|
148
|
+
}
|
|
149
|
+
function uniquePaths(paths) {
|
|
150
|
+
const out = new Set();
|
|
151
|
+
for (const path of paths) {
|
|
152
|
+
if (path === undefined || path.trim() === '')
|
|
153
|
+
continue;
|
|
154
|
+
out.add(normalizePath(path));
|
|
155
|
+
}
|
|
156
|
+
return Array.from(out);
|
|
157
|
+
}
|
|
158
|
+
function isSameOrInside(path, root) {
|
|
159
|
+
return path === root || path.startsWith(`${root}${sep}`);
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/onboard/uninstall.ts"],"names":[],"mappings":"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"}
|
package/dist/onboard/wizard.js
CHANGED
|
@@ -1,20 +1,9 @@
|
|
|
1
1
|
import { homedir } from 'node:os';
|
|
2
2
|
import { join, resolve } from 'node:path';
|
|
3
|
-
import { cancel, confirm, intro, isCancel, outro,
|
|
3
|
+
import { cancel, confirm, intro, isCancel, outro, text, } from '@clack/prompts';
|
|
4
4
|
import { expandHome } from '../runtime/config.js';
|
|
5
|
+
import { validateDispatcherId } from '../runtime/dispatcher-id.js';
|
|
5
6
|
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 = [
|
|
10
|
-
'.agents/plugins',
|
|
11
|
-
'codex-marketplace/plugins/codexmux',
|
|
12
|
-
];
|
|
13
|
-
const DEFAULT_CODEX_MARKETPLACE_NAME = 'dreamux';
|
|
14
|
-
const DEFAULT_CODEX_PLUGIN_REF = 'codexmux@dreamux';
|
|
15
|
-
const DEFAULT_CLAUDE_MARKETPLACE_SOURCE = 'excitedjs/claudemux';
|
|
16
|
-
const DEFAULT_CLAUDE_MARKETPLACE_NAME = 'claudemux';
|
|
17
|
-
const DEFAULT_CLAUDE_PLUGIN_REF = 'claudemux@claudemux';
|
|
18
7
|
export async function collectOnboardAnswers(options) {
|
|
19
8
|
const interactive = process.stdin.isTTY === true && options.yes !== true;
|
|
20
9
|
if (!interactive)
|
|
@@ -23,15 +12,10 @@ export async function collectOnboardAnswers(options) {
|
|
|
23
12
|
const configDir = await promptText('dreamux config directory', defaultConfigDir(options));
|
|
24
13
|
const runtimeDir = await promptText('dreamux runtime directory', defaultRuntimeDir(options));
|
|
25
14
|
const dispatcherId = await promptText('dispatcher id', options.dispatcherId ?? DEFAULT_DISPATCHER_ID);
|
|
15
|
+
const dispatcherCwd = await promptText('dispatcher cwd', options.dispatcherCwd ?? process.cwd());
|
|
26
16
|
const codexBin = await promptText('codex binary', options.codexBin ?? 'codex');
|
|
27
|
-
const codexModel = await promptText('dispatcher Codex model', options.codexModel ?? DEFAULT_CODEX_MODEL);
|
|
28
|
-
const authEnvVar = await promptSelect('Codex auth environment variable', options.authEnvVar ?? firstConfiguredAuthEnv(), [
|
|
29
|
-
{ value: 'CODEX_ACCESS_TOKEN', label: 'CODEX_ACCESS_TOKEN' },
|
|
30
|
-
{ value: 'OPENAI_API_KEY', label: 'OPENAI_API_KEY' },
|
|
31
|
-
{ value: 'CODEX_API_KEY', label: 'CODEX_API_KEY' },
|
|
32
|
-
]);
|
|
33
17
|
const botAppId = await promptText('channel bot app id', options.botAppId);
|
|
34
|
-
const
|
|
18
|
+
const botAppSecret = await promptText('channel bot app secret', options.botAppSecret);
|
|
35
19
|
const registerService = await promptConfirm('register the user-level service now?', options.registerService ?? true);
|
|
36
20
|
const startService = registerService
|
|
37
21
|
? await promptConfirm('start the service after registration?', options.startService ?? true)
|
|
@@ -42,40 +26,26 @@ export async function collectOnboardAnswers(options) {
|
|
|
42
26
|
configDir,
|
|
43
27
|
runtimeDir,
|
|
44
28
|
dispatcherId,
|
|
29
|
+
dispatcherCwd,
|
|
45
30
|
codexBin,
|
|
46
|
-
codexModel,
|
|
47
|
-
authEnvVar,
|
|
48
31
|
botAppId,
|
|
49
|
-
|
|
32
|
+
botAppSecret,
|
|
50
33
|
registerService,
|
|
51
34
|
startService,
|
|
52
35
|
}, true);
|
|
53
36
|
}
|
|
54
37
|
export function answersFromOptions(options, fromInteractive) {
|
|
55
38
|
const botAppId = requiredOption(options.botAppId, 'bot-app-id', fromInteractive);
|
|
56
|
-
const
|
|
57
|
-
const
|
|
58
|
-
assertSupportedAuthEnv(authEnvVar);
|
|
39
|
+
const botAppSecret = requiredOption(options.botAppSecret, 'bot-app-secret', fromInteractive);
|
|
40
|
+
const dispatcherCwd = options.dispatcherCwd ?? process.cwd();
|
|
59
41
|
return {
|
|
60
42
|
configDir: normalizePath(options.configDir ?? defaultConfigDir(options)),
|
|
61
43
|
runtimeDir: normalizePath(options.runtimeDir ?? defaultRuntimeDir(options)),
|
|
62
|
-
dispatcherId: options.dispatcherId ?? DEFAULT_DISPATCHER_ID,
|
|
44
|
+
dispatcherId: validateDispatcherId(options.dispatcherId ?? DEFAULT_DISPATCHER_ID),
|
|
45
|
+
dispatcherCwd: normalizePath(dispatcherCwd),
|
|
63
46
|
codexBin: options.codexBin ?? 'codex',
|
|
64
|
-
codexModel: options.codexModel ?? DEFAULT_CODEX_MODEL,
|
|
65
|
-
codexProvider: options.codexProvider ?? DEFAULT_CODEX_PROVIDER,
|
|
66
|
-
authEnvVar,
|
|
67
|
-
codexMarketplaceSource: options.codexMarketplaceSource ?? DEFAULT_CODEX_MARKETPLACE_SOURCE,
|
|
68
|
-
codexMarketplaceSparse: normalizeStringArray(options.codexMarketplaceSparse, DEFAULT_CODEX_MARKETPLACE_SPARSE),
|
|
69
|
-
codexMarketplaceName: options.codexMarketplaceName ?? DEFAULT_CODEX_MARKETPLACE_NAME,
|
|
70
|
-
codexPluginRef: options.codexPluginRef ?? DEFAULT_CODEX_PLUGIN_REF,
|
|
71
|
-
claudeBin: options.claudeBin ?? 'claude',
|
|
72
|
-
claudeConfigDir: normalizePath(options.claudeConfigDir ?? join(homedir(), '.claude')),
|
|
73
|
-
claudeMarketplaceSource: options.claudeMarketplaceSource ?? DEFAULT_CLAUDE_MARKETPLACE_SOURCE,
|
|
74
|
-
claudeMarketplaceSparse: normalizeStringArray(options.claudeMarketplaceSparse, []),
|
|
75
|
-
claudeMarketplaceName: options.claudeMarketplaceName ?? DEFAULT_CLAUDE_MARKETPLACE_NAME,
|
|
76
|
-
claudePluginRef: options.claudePluginRef ?? DEFAULT_CLAUDE_PLUGIN_REF,
|
|
77
47
|
botAppId,
|
|
78
|
-
|
|
48
|
+
botAppSecret,
|
|
79
49
|
registerService: options.registerService ?? true,
|
|
80
50
|
startService: options.startService ?? true,
|
|
81
51
|
dreamuxBin: normalizePath(options.dreamuxBin ?? process.env['DREAMUX_BIN'] ?? process.argv[1]),
|
|
@@ -86,7 +56,7 @@ function defaultConfigDir(options) {
|
|
|
86
56
|
return options.configDir ?? join(homedir(), '.dreamux');
|
|
87
57
|
}
|
|
88
58
|
function defaultRuntimeDir(options) {
|
|
89
|
-
return options.runtimeDir ?? join(homedir(), '.
|
|
59
|
+
return options.runtimeDir ?? join(homedir(), '.dreamux', 'runtime');
|
|
90
60
|
}
|
|
91
61
|
async function promptText(label, initialValue) {
|
|
92
62
|
const value = await text({
|
|
@@ -103,14 +73,6 @@ async function promptConfirm(label, initialValue) {
|
|
|
103
73
|
});
|
|
104
74
|
return unwrapPrompt(value);
|
|
105
75
|
}
|
|
106
|
-
async function promptSelect(label, initialValue, options) {
|
|
107
|
-
const value = await select({
|
|
108
|
-
message: label,
|
|
109
|
-
initialValue,
|
|
110
|
-
options,
|
|
111
|
-
});
|
|
112
|
-
return unwrapPrompt(value);
|
|
113
|
-
}
|
|
114
76
|
function unwrapPrompt(value) {
|
|
115
77
|
if (isCancel(value)) {
|
|
116
78
|
cancel('onboard cancelled');
|
|
@@ -127,23 +89,4 @@ function requiredOption(value, name, fromInteractive) {
|
|
|
127
89
|
function normalizePath(path) {
|
|
128
90
|
return resolve(expandHome(path));
|
|
129
91
|
}
|
|
130
|
-
function normalizeStringArray(value, fallback) {
|
|
131
|
-
if (value === undefined)
|
|
132
|
-
return fallback;
|
|
133
|
-
return (Array.isArray(value) ? value : [value]).filter((item) => item !== '');
|
|
134
|
-
}
|
|
135
|
-
function firstConfiguredAuthEnv() {
|
|
136
|
-
for (const name of ['CODEX_ACCESS_TOKEN', 'OPENAI_API_KEY', 'CODEX_API_KEY']) {
|
|
137
|
-
if (process.env[name] !== undefined && process.env[name] !== '')
|
|
138
|
-
return name;
|
|
139
|
-
}
|
|
140
|
-
return 'CODEX_ACCESS_TOKEN';
|
|
141
|
-
}
|
|
142
|
-
function assertSupportedAuthEnv(name) {
|
|
143
|
-
if (name !== 'CODEX_ACCESS_TOKEN' &&
|
|
144
|
-
name !== 'OPENAI_API_KEY' &&
|
|
145
|
-
name !== 'CODEX_API_KEY') {
|
|
146
|
-
throw new Error(`unsupported Codex auth env var '${name}'; use CODEX_ACCESS_TOKEN, OPENAI_API_KEY, or CODEX_API_KEY`);
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
92
|
//# sourceMappingURL=wizard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/onboard/wizard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EACL,MAAM,EACN,OAAO,EACP,KAAK,EACL,QAAQ,EACR,KAAK,EACL,
|
|
1
|
+
{"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/onboard/wizard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EACL,MAAM,EACN,OAAO,EACP,KAAK,EACL,QAAQ,EACR,KAAK,EACL,IAAI,GACL,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAkBnE,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAA0B;IAE1B,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC;IACzE,IAAI,CAAC,WAAW;QAAE,OAAO,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAE5D,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACzB,MAAM,SAAS,GAAG,MAAM,UAAU,CAChC,0BAA0B,EAC1B,gBAAgB,CAAC,OAAO,CAAC,CAC1B,CAAC;IACF,MAAM,UAAU,GAAG,MAAM,UAAU,CACjC,2BAA2B,EAC3B,iBAAiB,CAAC,OAAO,CAAC,CAC3B,CAAC;IACF,MAAM,YAAY,GAAG,MAAM,UAAU,CACnC,eAAe,EACf,OAAO,CAAC,YAAY,IAAI,qBAAqB,CAC9C,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,UAAU,CACpC,gBAAgB,EAChB,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,EAAE,CACvC,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,cAAc,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC;IAC/E,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,oBAAoB,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1E,MAAM,YAAY,GAAG,MAAM,UAAU,CACnC,wBAAwB,EACxB,OAAO,CAAC,YAAY,CACrB,CAAC;IACF,MAAM,eAAe,GAAG,MAAM,aAAa,CACzC,sCAAsC,EACtC,OAAO,CAAC,eAAe,IAAI,IAAI,CAChC,CAAC;IACF,MAAM,YAAY,GAAG,eAAe;QAClC,CAAC,CAAC,MAAM,aAAa,CACjB,uCAAuC,EACvC,OAAO,CAAC,YAAY,IAAI,IAAI,CAC7B;QACH,CAAC,CAAC,KAAK,CAAC;IAEV,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACtC,OAAO,kBAAkB,CACvB;QACE,GAAG,OAAO;QACV,SAAS;QACT,UAAU;QACV,YAAY;QACZ,aAAa;QACb,QAAQ;QACR,QAAQ;QACR,YAAY;QACZ,eAAe;QACf,YAAY;KACb,EACD,IAAI,CACL,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,OAA0B,EAC1B,eAAwB;IAExB,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;IACjF,MAAM,YAAY,GAAG,cAAc,CACjC,OAAO,CAAC,YAAY,EACpB,gBAAgB,EAChB,eAAe,CAChB,CAAC;IACF,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC7D,OAAO;QACL,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,SAAS,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACxE,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,UAAU,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC3E,YAAY,EAAE,oBAAoB,CAChC,OAAO,CAAC,YAAY,IAAI,qBAAqB,CAC9C;QACD,aAAa,EAAE,aAAa,CAAC,aAAa,CAAC;QAC3C,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO;QACrC,QAAQ;QACR,YAAY;QACZ,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,IAAI;QAChD,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI;QAC1C,UAAU,EAAE,aAAa,CACvB,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CACpE;QACD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;KAChC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,OAA0B;IAClD,OAAO,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,iBAAiB,CAAC,OAA0B;IACnD,OAAO,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AACtE,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,KAAa,EAAE,YAAqB;IAC5D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC;QACvB,OAAO,EAAE,KAAK;QACd,YAAY;QACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;KACtE,CAAC,CAAC;IACH,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,KAAa,EACb,YAAqB;IAErB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC;QAC1B,OAAO,EAAE,KAAK;QACd,YAAY;KACb,CAAC,CAAC;IACH,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,YAAY,CAAI,KAAiB;IACxC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CACrB,KAAyB,EACzB,IAAY,EACZ,eAAwB;IAExB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IAC7D,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,yBAAyB,CAAC;IACpE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,eAAe,IAAI,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*
|
|
13
13
|
* Precedence for each field (highest wins):
|
|
14
14
|
* 1. dispatchers.codex_args_json (this JSON)
|
|
15
|
-
* 2. global defaults from ~/.dreamux/config.
|
|
15
|
+
* 2. global defaults from ~/.dreamux/config.json (passed in as `defaults`)
|
|
16
16
|
* 3. hardcoded fallbacks (`'never'`, `'workspace-write'`, `[]`)
|
|
17
17
|
* Per the feat/global-config-dir work — see the global-config decision.
|
|
18
18
|
*
|