@excitedjs/dreamux 0.1.4 → 0.2.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.
@@ -1,10 +1,8 @@
1
1
  import { homedir } from 'node:os';
2
2
  import { join, resolve } from 'node:path';
3
- import { cancel, confirm, intro, isCancel, outro, select, text, } from '@clack/prompts';
3
+ import { cancel, confirm, intro, isCancel, outro, text, } from '@clack/prompts';
4
4
  import { expandHome } from '../runtime/config.js';
5
5
  const DEFAULT_DISPATCHER_ID = 'dispatcher';
6
- const DEFAULT_CODEX_MODEL = 'gpt-5-codex';
7
- const DEFAULT_CODEX_PROVIDER = 'openai';
8
6
  const DEFAULT_CODEX_MARKETPLACE_SOURCE = 'excitedjs/dreamux';
9
7
  const DEFAULT_CODEX_MARKETPLACE_SPARSE = [
10
8
  '.agents/plugins',
@@ -23,15 +21,10 @@ export async function collectOnboardAnswers(options) {
23
21
  const configDir = await promptText('dreamux config directory', defaultConfigDir(options));
24
22
  const runtimeDir = await promptText('dreamux runtime directory', defaultRuntimeDir(options));
25
23
  const dispatcherId = await promptText('dispatcher id', options.dispatcherId ?? DEFAULT_DISPATCHER_ID);
24
+ const dispatcherCwd = await promptText('dispatcher cwd', options.dispatcherCwd ?? process.cwd());
26
25
  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
26
  const botAppId = await promptText('channel bot app id', options.botAppId);
34
- const botSecretRef = await promptText('channel bot secret ref', options.botSecretRef ?? 'env:FEISHU_BOT_SECRET');
27
+ const botAppSecret = await promptText('channel bot app secret', options.botAppSecret);
35
28
  const registerService = await promptConfirm('register the user-level service now?', options.registerService ?? true);
36
29
  const startService = registerService
37
30
  ? await promptConfirm('start the service after registration?', options.startService ?? true)
@@ -42,28 +35,24 @@ export async function collectOnboardAnswers(options) {
42
35
  configDir,
43
36
  runtimeDir,
44
37
  dispatcherId,
38
+ dispatcherCwd,
45
39
  codexBin,
46
- codexModel,
47
- authEnvVar,
48
40
  botAppId,
49
- botSecretRef,
41
+ botAppSecret,
50
42
  registerService,
51
43
  startService,
52
44
  }, true);
53
45
  }
54
46
  export function answersFromOptions(options, fromInteractive) {
55
47
  const botAppId = requiredOption(options.botAppId, 'bot-app-id', fromInteractive);
56
- const botSecretRef = requiredOption(options.botSecretRef, 'bot-secret-ref', fromInteractive);
57
- const authEnvVar = options.authEnvVar ?? firstConfiguredAuthEnv();
58
- assertSupportedAuthEnv(authEnvVar);
48
+ const botAppSecret = requiredOption(options.botAppSecret, 'bot-app-secret', fromInteractive);
49
+ const dispatcherCwd = options.dispatcherCwd ?? process.cwd();
59
50
  return {
60
51
  configDir: normalizePath(options.configDir ?? defaultConfigDir(options)),
61
52
  runtimeDir: normalizePath(options.runtimeDir ?? defaultRuntimeDir(options)),
62
53
  dispatcherId: options.dispatcherId ?? DEFAULT_DISPATCHER_ID,
54
+ dispatcherCwd: normalizePath(dispatcherCwd),
63
55
  codexBin: options.codexBin ?? 'codex',
64
- codexModel: options.codexModel ?? DEFAULT_CODEX_MODEL,
65
- codexProvider: options.codexProvider ?? DEFAULT_CODEX_PROVIDER,
66
- authEnvVar,
67
56
  codexMarketplaceSource: options.codexMarketplaceSource ?? DEFAULT_CODEX_MARKETPLACE_SOURCE,
68
57
  codexMarketplaceSparse: normalizeStringArray(options.codexMarketplaceSparse, DEFAULT_CODEX_MARKETPLACE_SPARSE),
69
58
  codexMarketplaceName: options.codexMarketplaceName ?? DEFAULT_CODEX_MARKETPLACE_NAME,
@@ -75,7 +64,7 @@ export function answersFromOptions(options, fromInteractive) {
75
64
  claudeMarketplaceName: options.claudeMarketplaceName ?? DEFAULT_CLAUDE_MARKETPLACE_NAME,
76
65
  claudePluginRef: options.claudePluginRef ?? DEFAULT_CLAUDE_PLUGIN_REF,
77
66
  botAppId,
78
- botSecretRef,
67
+ botAppSecret,
79
68
  registerService: options.registerService ?? true,
80
69
  startService: options.startService ?? true,
81
70
  dreamuxBin: normalizePath(options.dreamuxBin ?? process.env['DREAMUX_BIN'] ?? process.argv[1]),
@@ -103,14 +92,6 @@ async function promptConfirm(label, initialValue) {
103
92
  });
104
93
  return unwrapPrompt(value);
105
94
  }
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
95
  function unwrapPrompt(value) {
115
96
  if (isCancel(value)) {
116
97
  cancel('onboard cancelled');
@@ -132,18 +113,4 @@ function normalizeStringArray(value, fallback) {
132
113
  return fallback;
133
114
  return (Array.isArray(value) ? value : [value]).filter((item) => item !== '');
134
115
  }
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
116
  //# 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,MAAM,EACN,IAAI,GACL,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AA8BlD,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAC3C,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAC1C,MAAM,sBAAsB,GAAG,QAAQ,CAAC;AACxC,MAAM,gCAAgC,GAAG,mBAAmB,CAAC;AAC7D,MAAM,gCAAgC,GAAG;IACvC,iBAAiB;IACjB,oCAAoC;CACrC,CAAC;AACF,MAAM,8BAA8B,GAAG,SAAS,CAAC;AACjD,MAAM,wBAAwB,GAAG,kBAAkB,CAAC;AACpD,MAAM,iCAAiC,GAAG,qBAAqB,CAAC;AAChE,MAAM,+BAA+B,GAAG,WAAW,CAAC;AACpD,MAAM,yBAAyB,GAAG,qBAAqB,CAAC;AAExD,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,QAAQ,GAAG,MAAM,UAAU,CAAC,cAAc,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC;IAC/E,MAAM,UAAU,GAAG,MAAM,UAAU,CACjC,wBAAwB,EACxB,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAC1C,CAAC;IACF,MAAM,UAAU,GAAG,MAAM,YAAY,CACnC,iCAAiC,EACjC,OAAO,CAAC,UAAU,IAAI,sBAAsB,EAAE,EAC9C;QACE,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,oBAAoB,EAAE;QAC5D,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE;QACpD,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE;KACnD,CACF,CAAC;IACF,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,IAAI,uBAAuB,CAChD,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,QAAQ;QACR,UAAU;QACV,UAAU;QACV,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,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,sBAAsB,EAAE,CAAC;IAClE,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAEnC,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,OAAO,CAAC,YAAY,IAAI,qBAAqB;QAC3D,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO;QACrC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,mBAAmB;QACrD,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,sBAAsB;QAC9D,UAAU;QACV,sBAAsB,EACpB,OAAO,CAAC,sBAAsB,IAAI,gCAAgC;QACpE,sBAAsB,EAAE,oBAAoB,CAC1C,OAAO,CAAC,sBAAsB,EAC9B,gCAAgC,CACjC;QACD,oBAAoB,EAClB,OAAO,CAAC,oBAAoB,IAAI,8BAA8B;QAChE,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,wBAAwB;QAClE,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,QAAQ;QACxC,eAAe,EAAE,aAAa,CAC5B,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CACtD;QACD,uBAAuB,EACrB,OAAO,CAAC,uBAAuB,IAAI,iCAAiC;QACtE,uBAAuB,EAAE,oBAAoB,CAC3C,OAAO,CAAC,uBAAuB,EAC/B,EAAE,CACH;QACD,qBAAqB,EACnB,OAAO,CAAC,qBAAqB,IAAI,+BAA+B;QAClE,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,yBAAyB;QACrE,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,aAAa,CAAC,CAAC;AAC9D,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,KAAK,UAAU,YAAY,CACzB,KAAa,EACb,YAAoB,EACpB,OAAgD;IAEhD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC;QACzB,OAAO,EAAE,KAAK;QACd,YAAY;QACZ,OAAO;KACR,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;AAED,SAAS,oBAAoB,CAC3B,KAAoC,EACpC,QAAkB;IAElB,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACzC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,sBAAsB;IAC7B,KAAK,MAAM,IAAI,IAAI,CAAC,oBAAoB,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAE,CAAC;QAC7E,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;IAC/E,CAAC;IACD,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY;IAC1C,IACE,IAAI,KAAK,oBAAoB;QAC7B,IAAI,KAAK,gBAAgB;QACzB,IAAI,KAAK,eAAe,EACxB,CAAC;QACD,MAAM,IAAI,KAAK,CACb,mCAAmC,IAAI,6DAA6D,CACrG,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/onboard/wizard.ts"],"names":[],"mappings":"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"}
@@ -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.toml (passed in as `defaults`)
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
  *
@@ -1,33 +1,15 @@
1
1
  /**
2
- * Global dreamux configuration loaded from `~/.dreamux/config.toml`.
2
+ * Global dreamux configuration loaded from `~/.dreamux/config.json`.
3
3
  *
4
- * Why this exists: pre-config, every dispatcher had to repeat the same
5
- * `approval_policy=never`, every operator had to remember
6
- * `CODEX_HOST_CODEX_BIN`, every retry/timeout tuning was buried in
7
- * source-level constants. This file is the user-editable surface for
8
- * machine-wide defaults; per-dispatcher settings still override it, and
9
- * the existing env vars still override everything (escape hatch for CI
10
- * and one-off debug runs).
11
- *
12
- * Layout — separation of concerns:
13
- * ~/.dreamux/ user-editable configuration (this module)
4
+ * Layout:
5
+ * ~/.dreamux/ user-editable dreamux configuration and channel secrets
14
6
  * ~/.codex-host/ runtime data (SQLite, sockets, dispatcher logs)
15
- * Mixing them was the original sin; keeping them apart is what makes a
16
- * `rm -rf ~/.codex-host` recovery safe.
17
7
  *
18
- * Format: TOML (matches codex's own `~/.codex/config.toml`).
19
- * Parse failures fail-fast with the offending line.
8
+ * Format: JSON. dreamux does not write TOML files.
20
9
  */
21
10
  import { homedir } from 'node:os';
22
11
  import { dirname, isAbsolute, join } from 'node:path';
23
- import { closeSync, mkdirSync, openSync, readFileSync, writeSync, } from 'node:fs';
24
- import { parse as parseToml, TomlError } from 'smol-toml';
25
- /**
26
- * Built-in defaults — identical to what individual modules used before this
27
- * config existed. Anything you change here is a behavior change for fresh
28
- * installs (and only fresh installs; existing `~/.dreamux/config.toml`
29
- * files are not touched on upgrade).
30
- */
12
+ import { closeSync, existsSync, mkdirSync, openSync, readFileSync, writeSync, } from 'node:fs';
31
13
  export const BUILT_IN_DEFAULTS = {
32
14
  runtime_dir: '~/.codex-host',
33
15
  admin_socket: null,
@@ -42,150 +24,78 @@ export const BUILT_IN_DEFAULTS = {
42
24
  retries: 3,
43
25
  retry_delay_ms: 1000,
44
26
  },
27
+ feishu: {
28
+ bots: {},
29
+ },
45
30
  };
46
- /**
47
- * Codex 0.134 sandbox modes (from `codex --help`'s `-s, --sandbox` choices).
48
- * Kept in sync with `codex-args.ts` (same allowlist enforced at the
49
- * per-dispatcher level).
50
- */
51
31
  export const ALLOWED_SANDBOX_MODES = new Set([
52
32
  'read-only',
53
33
  'workspace-write',
54
34
  'danger-full-access',
55
35
  ]);
56
- /**
57
- * The literal TOML text written on first boot. Comments are part of the
58
- * UX — they tell an operator opening the file for the first time what
59
- * each key means and where to read more.
60
- */
61
- export const DEFAULT_CONFIG_TOML = `# dreamux global configuration (~/.dreamux/config.toml)
62
- #
63
- # Edit this file and restart \`dreamux serve\` to apply changes.
64
- # Runtime data (SQLite, sockets, dispatcher logs) lives separately in
65
- # \`runtime_dir\` below — this file holds only user-editable settings.
66
- # See .agents/decisions/global-config-dir.md for the design rationale.
67
- #
68
- # Precedence (highest wins):
69
- # 1. environment variables (CODEX_HOST_RUNTIME_DIR, CODEX_HOST_ADMIN_SOCKET,
70
- # CODEX_HOST_CODEX_BIN) — escape hatch for CI and one-off debug runs
71
- # 2. per-dispatcher fields (codex_args_json: approvalPolicy, extraArgs)
72
- # 3. this file
73
- # 4. built-in defaults baked into the binary
74
-
75
- # Where dreamux stores runtime state (SQLite database, admin Unix socket,
76
- # per-dispatcher Codex sockets and logs).
77
- #
78
- # \`~/\` is expanded to your home directory. Relative paths are not supported.
79
- runtime_dir = "~/.codex-host"
80
-
81
- # Admin Unix socket path. Leave commented to derive as <runtime_dir>/admin.sock.
82
- # admin_socket = "~/.codex-host/admin.sock"
83
-
84
- [codex]
85
- # Path to the codex CLI. Bare name (\`codex\`) resolves via $PATH; an
86
- # absolute path (\`/opt/codex/bin/codex\`) skips the lookup.
87
- bin = "codex"
88
-
89
- # Default approval policy applied to every dispatcher. A per-dispatcher
90
- # \`codex_args_json\` (set via \`dreamux dispatcher add --codex-args-json ...\`)
91
- # overrides this when present. Must be one of:
92
- # never | auto | auto-approve | on-failure
93
- # See issue #2 §"信任模型" for the trust-model implications of \`never\`.
94
- approval_policy = "never"
95
-
96
- # Default sandbox mode codex executes shell commands under. Per-dispatcher
97
- # \`codex_args_json.sandboxMode\` overrides this when present.
98
- # Must be one of:
99
- # read-only — codex cannot write any files
100
- # workspace-write — codex can write inside its cwd; recommended
101
- # baseline for trusted-local
102
- # danger-full-access — no sandbox; pair with approval_policy="never"
103
- # only when codex must spawn helpers that chdir
104
- # out of its cwd (e.g. tm dispatching into other
105
- # worktrees). Trust model becomes equivalent to
106
- # giving any allowed bot user shell access.
107
- sandbox_mode = "workspace-write"
108
-
109
- # Extra args appended to every codex app-server invocation. Per-dispatcher
110
- # extra_args (in codex_args_json) are appended *after* these.
111
- extra_args = []
112
-
113
- # Handshake timeout. Without this, dreamux would hang forever on a codex
114
- # that accepts the WebSocket upgrade but never replies to \`initialize\`
115
- # (PR #5). 0 is not a valid value — set to a positive integer.
116
- initialize_timeout_ms = 10000
117
-
118
- [outbound]
119
- # How many times to retry a failed Feishu send before parking the inbound
120
- # row in \`outbound_failed\`. The Codex turn never re-runs on retry — only
121
- # the outbound delivery is retried (PR #3 review #1).
122
- retries = 3
123
-
124
- # Initial delay between outbound retries (ms).
125
- retry_delay_ms = 1000
126
- `;
36
+ export const DEFAULT_CONFIG_JSON = `${JSON.stringify(BUILT_IN_DEFAULTS, null, 2)}\n`;
127
37
  export function globalConfigDir(overrides = {}) {
128
38
  if (overrides.configDir !== undefined)
129
39
  return overrides.configDir;
130
40
  return process.env['DREAMUX_CONFIG_DIR'] || join(homedir(), '.dreamux');
131
41
  }
132
42
  export function globalConfigFile(overrides = {}) {
43
+ return join(globalConfigDir(overrides), 'config.json');
44
+ }
45
+ export function legacyGlobalConfigFile(overrides = {}) {
133
46
  return join(globalConfigDir(overrides), 'config.toml');
134
47
  }
135
- /**
136
- * Load `<configDir>/config.toml`, creating it with default content on
137
- * first boot. Throws with a file-line-pointing message when TOML parsing
138
- * fails so the operator can fix the file without spelunking through
139
- * libraries.
140
- *
141
- * Safe to call from `dreamux serve` on every boot — first call ensures
142
- * the directory and file exist with sensible defaults; subsequent calls
143
- * just read.
144
- *
145
- * PR #8 review #1: create the file with the atomic `wx` (O_CREAT|O_EXCL)
146
- * flag, not check-then-write. Two server processes booting concurrently
147
- * against the same `~/.dreamux/` would otherwise both see "file absent"
148
- * and one would overwrite what the other wrote. Posix guarantees only
149
- * one `wx` open wins; the loser gets EEXIST and falls through to the
150
- * read path.
151
- */
152
48
  export function loadOrInitConfig(overrides = {}) {
153
49
  const file = globalConfigFile(overrides);
154
- // Parent dir creation is idempotent under `recursive: true` (no race),
155
- // but it can still legitimately fail (e.g. parent is unwritable). Let
156
- // the EACCES propagate — the user needs to see it.
50
+ assertNoLegacyTomlOnly(overrides);
157
51
  mkdirSync(dirname(file), { recursive: true });
158
- const createdOnThisBoot = atomicWriteIfAbsent(file, DEFAULT_CONFIG_TOML);
159
- const raw = readFileSync(file, 'utf8');
52
+ const createdOnThisBoot = atomicWriteIfAbsent(file, DEFAULT_CONFIG_JSON);
53
+ const config = readConfigFile(file);
54
+ return { config, configFile: file, createdOnThisBoot };
55
+ }
56
+ export function loadConfig(overrides = {}) {
57
+ const file = globalConfigFile(overrides);
58
+ assertNoLegacyTomlOnly(overrides);
59
+ return { config: readConfigFile(file), configFile: file };
60
+ }
61
+ export function stringifyConfig(config) {
62
+ return `${JSON.stringify(config, null, 2)}\n`;
63
+ }
64
+ export function redactConfigForDisplay(raw, file) {
160
65
  let parsed;
161
66
  try {
162
- parsed = parseToml(raw);
67
+ parsed = JSON.parse(raw);
163
68
  }
164
69
  catch (err) {
165
- throw formatTomlError(err, file);
70
+ const msg = err instanceof Error ? err.message : String(err);
71
+ throw new Error(`dreamux config parse error in ${file}: ${msg}\n` +
72
+ `Use 'dreamux config show --raw' to print the file without redaction.`);
166
73
  }
167
- const config = mergeWithDefaults(parsed, file);
168
- return { config, configFile: file, createdOnThisBoot };
74
+ redactFeishuSecrets(parsed);
75
+ return `${JSON.stringify(parsed, null, 2)}\n`;
169
76
  }
170
- export function loadConfig(overrides = {}) {
171
- const file = globalConfigFile(overrides);
77
+ function readConfigFile(file) {
172
78
  const raw = readFileSync(file, 'utf8');
173
79
  let parsed;
174
80
  try {
175
- parsed = parseToml(raw);
81
+ parsed = JSON.parse(raw);
176
82
  }
177
83
  catch (err) {
178
- throw formatTomlError(err, file);
84
+ const msg = err instanceof Error ? err.message : String(err);
85
+ throw new Error(`dreamux config parse error in ${file}: ${msg}\n` +
86
+ `Fix the JSON syntax in ${file} and restart, or delete the file to regenerate defaults.`);
179
87
  }
180
- return { config: mergeWithDefaults(parsed, file), configFile: file };
88
+ return mergeWithDefaults(parsed, file);
89
+ }
90
+ export function assertNoLegacyTomlOnly(overrides = {}) {
91
+ const jsonFile = globalConfigFile(overrides);
92
+ const tomlFile = legacyGlobalConfigFile(overrides);
93
+ if (existsSync(jsonFile) || !existsSync(tomlFile))
94
+ return;
95
+ throw new Error(`legacy dreamux config detected at ${tomlFile}, but ${jsonFile} does not exist.\n` +
96
+ 'dreamux no longer reads TOML config and will not create default JSON over an existing install, because that can hide the old runtime_dir and dispatcher database.\n' +
97
+ `Create ${jsonFile} manually from ${tomlFile}, then move ${tomlFile} aside. Preserve runtime_dir/admin_socket/codex/outbound settings and add feishu.bots entries for configured dispatchers.`);
181
98
  }
182
- /**
183
- * Atomic create-if-absent. Returns true if this call created the file.
184
- *
185
- * Uses Node's `wx` flag, which maps to POSIX `open(O_CREAT | O_EXCL)`.
186
- * Two processes racing the same path see exactly one EEXIST and exactly
187
- * one success — no torn writes, no overwriting each other.
188
- */
189
99
  function atomicWriteIfAbsent(file, content) {
190
100
  let fd;
191
101
  try {
@@ -204,38 +114,19 @@ function atomicWriteIfAbsent(file, content) {
204
114
  }
205
115
  return true;
206
116
  }
207
- function formatTomlError(err, file) {
208
- if (err instanceof TomlError) {
209
- const where = typeof err.line === 'number' && typeof err.column === 'number'
210
- ? `${file}:${err.line}:${err.column}`
211
- : file;
212
- return new Error(`dreamux config parse error at ${where}: ${err.message}\n` +
213
- `Fix the TOML syntax in ${file} and restart, or delete the file to regenerate defaults.`);
214
- }
215
- const msg = err instanceof Error ? err.message : String(err);
216
- return new Error(`dreamux config parse error in ${file}: ${msg}\n` +
217
- `Fix the TOML syntax in ${file} and restart, or delete the file to regenerate defaults.`);
218
- }
219
- /**
220
- * Merge user-supplied TOML object with built-in defaults. Unknown top-level
221
- * keys are tolerated (forward-compat with newer config files); known keys
222
- * are validated for type and (where relevant) value membership.
223
- */
224
117
  function mergeWithDefaults(raw, file) {
225
- if (raw === null || typeof raw !== 'object' || Array.isArray(raw)) {
226
- throw new Error(`dreamux config error in ${file}: top-level must be a table`);
118
+ if (!isPlainObject(raw)) {
119
+ throw new Error(`dreamux config error in ${file}: top-level must be an object`);
227
120
  }
228
- const obj = raw;
229
- const codexIn = isPlainObject(obj['codex']) ? obj['codex'] : {};
230
- const outboundIn = isPlainObject(obj['outbound']) ? obj['outbound'] : {};
231
- const runtime_dir = expandHome(requireString(obj, 'runtime_dir', BUILT_IN_DEFAULTS.runtime_dir, file));
232
- const admin_socket_raw = obj['admin_socket'];
121
+ const codexIn = isPlainObject(raw['codex']) ? raw['codex'] : {};
122
+ const outboundIn = isPlainObject(raw['outbound']) ? raw['outbound'] : {};
123
+ const feishuIn = isPlainObject(raw['feishu']) ? raw['feishu'] : {};
124
+ const runtime_dir = expandHome(requireString(raw, 'runtime_dir', BUILT_IN_DEFAULTS.runtime_dir, file));
125
+ const admin_socket_raw = raw['admin_socket'];
233
126
  const admin_socket = admin_socket_raw === undefined || admin_socket_raw === null
234
127
  ? null
235
128
  : expandHome(ensureString(admin_socket_raw, 'admin_socket', file));
236
129
  const approval_policy = requireString(codexIn, 'approval_policy', BUILT_IN_DEFAULTS.codex.approval_policy, file, 'codex.');
237
- // Validate approval_policy against the same allowlist as codex-args.ts.
238
- // Keep the two in sync — see the Rush + pnpm decision / issue #2 §"信任模型".
239
130
  const ALLOWED_POLICIES = new Set([
240
131
  'never',
241
132
  'auto',
@@ -251,10 +142,6 @@ function mergeWithDefaults(raw, file) {
251
142
  throw new Error(`dreamux config error in ${file}: codex.sandbox_mode='${sandbox_mode}' ` +
252
143
  `is not one of ${Array.from(ALLOWED_SANDBOX_MODES).join(' | ')}`);
253
144
  }
254
- const extra_args = requireStringArray(codexIn, 'extra_args', BUILT_IN_DEFAULTS.codex.extra_args, file, 'codex.');
255
- const initialize_timeout_ms = requirePositiveInt(codexIn, 'initialize_timeout_ms', BUILT_IN_DEFAULTS.codex.initialize_timeout_ms, file, 'codex.');
256
- const retries = requireNonNegativeInt(outboundIn, 'retries', BUILT_IN_DEFAULTS.outbound.retries, file, 'outbound.');
257
- const retry_delay_ms = requireNonNegativeInt(outboundIn, 'retry_delay_ms', BUILT_IN_DEFAULTS.outbound.retry_delay_ms, file, 'outbound.');
258
145
  return {
259
146
  runtime_dir,
260
147
  admin_socket,
@@ -262,12 +149,37 @@ function mergeWithDefaults(raw, file) {
262
149
  bin: requireString(codexIn, 'bin', BUILT_IN_DEFAULTS.codex.bin, file, 'codex.'),
263
150
  approval_policy,
264
151
  sandbox_mode,
265
- extra_args,
266
- initialize_timeout_ms,
152
+ extra_args: requireStringArray(codexIn, 'extra_args', BUILT_IN_DEFAULTS.codex.extra_args, file, 'codex.'),
153
+ initialize_timeout_ms: requirePositiveInt(codexIn, 'initialize_timeout_ms', BUILT_IN_DEFAULTS.codex.initialize_timeout_ms, file, 'codex.'),
154
+ },
155
+ outbound: {
156
+ retries: requireNonNegativeInt(outboundIn, 'retries', BUILT_IN_DEFAULTS.outbound.retries, file, 'outbound.'),
157
+ retry_delay_ms: requireNonNegativeInt(outboundIn, 'retry_delay_ms', BUILT_IN_DEFAULTS.outbound.retry_delay_ms, file, 'outbound.'),
158
+ },
159
+ feishu: {
160
+ bots: readFeishuBots(feishuIn, file),
267
161
  },
268
- outbound: { retries, retry_delay_ms },
269
162
  };
270
163
  }
164
+ function readFeishuBots(feishuIn, file) {
165
+ const rawBots = feishuIn['bots'];
166
+ if (rawBots === undefined)
167
+ return {};
168
+ if (!isPlainObject(rawBots)) {
169
+ throw new Error(`dreamux config error in ${file}: feishu.bots must be an object (got ${describeType(rawBots)})`);
170
+ }
171
+ const bots = {};
172
+ for (const [id, rawBot] of Object.entries(rawBots)) {
173
+ if (!isPlainObject(rawBot)) {
174
+ throw new Error(`dreamux config error in ${file}: feishu.bots.${id} must be an object (got ${describeType(rawBot)})`);
175
+ }
176
+ bots[id] = {
177
+ app_id: requireString(rawBot, 'app_id', '', file, `feishu.bots.${id}.`),
178
+ app_secret: requireString(rawBot, 'app_secret', '', file, `feishu.bots.${id}.`),
179
+ };
180
+ }
181
+ return bots;
182
+ }
271
183
  function isPlainObject(v) {
272
184
  return v !== null && typeof v === 'object' && !Array.isArray(v);
273
185
  }
@@ -319,19 +231,8 @@ function readInt(obj, key, file, prefix) {
319
231
  const v = obj[key];
320
232
  if (v === undefined)
321
233
  return null;
322
- // smol-toml returns BigInt for integers; accept both.
323
- if (typeof v === 'bigint') {
324
- if (v < BigInt(Number.MIN_SAFE_INTEGER) || v > BigInt(Number.MAX_SAFE_INTEGER)) {
325
- throw new Error(`dreamux config error in ${file}: ${prefix}${key}=${v} is outside safe integer range`);
326
- }
327
- return Number(v);
328
- }
329
- if (typeof v === 'number') {
330
- if (!Number.isInteger(v)) {
331
- throw new Error(`dreamux config error in ${file}: ${prefix}${key} must be an integer (got ${v})`);
332
- }
234
+ if (typeof v === 'number' && Number.isInteger(v))
333
235
  return v;
334
- }
335
236
  throw new Error(`dreamux config error in ${file}: ${prefix}${key} must be an integer (got ${describeType(v)})`);
336
237
  }
337
238
  function describeType(v) {
@@ -341,23 +242,28 @@ function describeType(v) {
341
242
  return 'array';
342
243
  return typeof v;
343
244
  }
344
- /**
345
- * Expand a leading `~/` (or bare `~`) to the user's home directory.
346
- * Absolute paths and other relative paths pass through unchanged; the
347
- * latter aren't supported by callers but we leave them alone so a typo
348
- * surfaces as a missing-path error rather than silent expansion.
349
- */
245
+ function redactFeishuSecrets(value) {
246
+ if (!isPlainObject(value))
247
+ return;
248
+ const feishu = value['feishu'];
249
+ if (!isPlainObject(feishu))
250
+ return;
251
+ const bots = feishu['bots'];
252
+ if (!isPlainObject(bots))
253
+ return;
254
+ for (const bot of Object.values(bots)) {
255
+ if (isPlainObject(bot) && typeof bot['app_secret'] === 'string') {
256
+ bot['app_secret'] = '<redacted>';
257
+ }
258
+ }
259
+ }
350
260
  export function expandHome(path) {
351
261
  if (path === '~')
352
262
  return homedir();
353
263
  if (path.startsWith('~/'))
354
264
  return join(homedir(), path.slice(2));
355
- if (!isAbsolute(path)) {
356
- // Pass through; downstream consumers will error if they need an
357
- // absolute path. (We considered erroring here, but bash-style configs
358
- // sometimes use bare names that get resolved later.)
265
+ if (!isAbsolute(path))
359
266
  return path;
360
- }
361
267
  return path;
362
268
  }
363
269
  //# sourceMappingURL=config.js.map
@@ -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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"}