@excitedjs/dreamux 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +25 -29
  2. package/bin/dreamux +3 -2
  3. package/dist/admin/socket.js +1 -1
  4. package/dist/admin/socket.js.map +1 -1
  5. package/dist/cli/doctor.js +273 -0
  6. package/dist/cli/doctor.js.map +1 -0
  7. package/dist/cli/dreamux.js +257 -78
  8. package/dist/cli/dreamux.js.map +1 -1
  9. package/dist/cli/server-ctl.js +15 -13
  10. package/dist/cli/server-ctl.js.map +1 -1
  11. package/dist/cli/server.js +7 -7
  12. package/dist/codex/handshake.js +1 -1
  13. package/dist/codex/handshake.js.map +1 -1
  14. package/dist/db/repository.js +16 -0
  15. package/dist/db/repository.js.map +1 -1
  16. package/dist/dispatcher/runtime.js +8 -1
  17. package/dist/dispatcher/runtime.js.map +1 -1
  18. package/dist/feishu/bot.js +3 -3
  19. package/dist/feishu/bot.js.map +1 -1
  20. package/dist/onboard/commands.js +34 -0
  21. package/dist/onboard/commands.js.map +1 -0
  22. package/dist/onboard/config-files.js +113 -0
  23. package/dist/onboard/config-files.js.map +1 -0
  24. package/dist/onboard/ledger.js +113 -0
  25. package/dist/onboard/ledger.js.map +1 -0
  26. package/dist/onboard/plugins.js +202 -0
  27. package/dist/onboard/plugins.js.map +1 -0
  28. package/dist/onboard/run.js +150 -0
  29. package/dist/onboard/run.js.map +1 -0
  30. package/dist/onboard/service.js +138 -0
  31. package/dist/onboard/service.js.map +1 -0
  32. package/dist/onboard/types.js +2 -0
  33. package/dist/onboard/types.js.map +1 -0
  34. package/dist/onboard/wizard.js +149 -0
  35. package/dist/onboard/wizard.js.map +1 -0
  36. package/dist/runtime/config.js +14 -2
  37. package/dist/runtime/config.js.map +1 -1
  38. package/dist/runtime/dispatcher-codex-home.js +266 -0
  39. package/dist/runtime/dispatcher-codex-home.js.map +1 -0
  40. package/dist/runtime/paths.js +17 -2
  41. package/dist/runtime/paths.js.map +1 -1
  42. package/dist/server.js +1 -0
  43. package/dist/server.js.map +1 -1
  44. package/package.json +17 -15
  45. package/bin/server +0 -35
  46. package/bin/server-ctl +0 -28
package/README.md CHANGED
@@ -11,16 +11,14 @@ and harness pieces, see the top-level
11
11
  Design background:
12
12
  [#1 Proposal](https://github.com/excitedjs/dreamux/issues/1) ·
13
13
  [#2 Engineering plan](https://github.com/excitedjs/dreamux/issues/2) ·
14
- [#4 Monorepo + harness](https://github.com/excitedjs/dreamux/issues/4).
14
+ [#4 Monorepo + harness](https://github.com/excitedjs/dreamux/issues/4) ·
15
+ [#18 Global bin onboarding](https://github.com/excitedjs/dreamux/issues/18).
15
16
 
16
17
  ## What this package ships
17
18
 
18
- - The `dreamux` CLI (preferred): `dreamux server start`,
19
- `dreamux server status`, `dreamux dispatcher add|remove|list|status|start|stop`.
20
- - Legacy aliases: `dreamux-server` (= `dreamux server start`) and
21
- `server-ctl` (= `dreamux <verb>`). Kept so pre-monorepo operators
22
- don't have to rewrite PATH entries; see
23
- [the CLI naming decision](../../.agents/decisions/cli-and-package-naming.md).
19
+ - One public CLI bin: `dreamux`. Implemented commands in this slice include
20
+ `dreamux onboard`, `dreamux serve`, `dreamux status`, `dreamux doctor`,
21
+ `dreamux dispatcher ...`, and `dreamux config path|show`.
24
22
  - A SQLite-backed runtime (`dispatchers` + `inbound_buffer`) plus the
25
23
  Feishu / Codex adapters that drive each dispatcher.
26
24
 
@@ -34,7 +32,8 @@ Design background:
34
32
  Outbound replies are routed by the inbound's `source_chat_id`.
35
33
  - **No dispatcher↔worktree binding.** Codex picks the worktree at `tm`-call
36
34
  time. The Codex daemon's cwd is `~/.codex-host/dispatchers/<id>/cwd/`
37
- (intentionally empty).
35
+ (intentionally empty), while its private `CODEX_HOME` is
36
+ `~/.codex-host/dispatchers/<id>/codex-home/`.
38
37
  - **FIFO + at-most-once.** One running turn per dispatcher. After a server
39
38
  crash, `running` inbound rows are flipped to `unknown` (the user is told
40
39
  to confirm or resend); `awaiting_outbound` rows are safely retried.
@@ -67,14 +66,10 @@ output; **no `tsx` is needed at runtime** (PR #6).
67
66
  ## Run the server
68
67
 
69
68
  ```bash
70
- # Preferred — unified CLI (issue #4)
71
- ./bin/dreamux server start
72
-
73
- # Backward-compat alias
74
- ./bin/server
69
+ ./bin/dreamux serve
75
70
  ```
76
71
 
77
- Both work from any cwd and via symlinks (PR #6 + bin-launcher tests).
72
+ The launcher works from any cwd and via symlinks (PR #6 + bin-launcher tests).
78
73
 
79
74
  The server uses two separate home directories — by design (see
80
75
  [the global-config decision](../../.agents/decisions/global-config-dir.md)):
@@ -85,7 +80,8 @@ The server uses two separate home directories — by design (see
85
80
  | `~/.codex-host/state.db` | SQLite (dispatchers + inbound buffer) | the server |
86
81
  | `~/.codex-host/admin.sock` | Admin Unix socket (`0600`) | the server |
87
82
  | `~/.codex-host/dispatchers/<id>/cwd/` | Codex app-server cwd | the server |
88
- | `~/.codex-host/dispatchers/<id>/socket` | Codex Unix socket | the server |
83
+ | `~/.codex-host/dispatchers/<id>/codex-home/` | Dispatcher-private `CODEX_HOME` for Codex config, plugin cache, and app-server control state | the server |
84
+ | `~/.codex-host/dispatchers/<id>/codex-home/app-server-control/as.sock` | Codex app-server Unix socket | the server |
89
85
  | `~/.codex-host/dispatchers/<id>/*.log` | Codex stdout / stderr | the server |
90
86
 
91
87
  `rm -rf ~/.codex-host` is a safe recovery — your config in `~/.dreamux/`
@@ -96,11 +92,11 @@ the `~/.codex-host` half anywhere you like.
96
92
 
97
93
  ```bash
98
94
  # Bot secret comes from an env var the server process can see.
99
- export BOT_SECRET_FLOW='cli_secret_XXX'
95
+ export BOT_SECRET_FLOW='<bot-secret>'
100
96
 
101
97
  ./bin/dreamux dispatcher add \
102
98
  --id flow \
103
- --bot-app-id cli_aaa \
99
+ --bot-app-id <APP_ID> \
104
100
  --bot-secret-ref env:BOT_SECRET_FLOW
105
101
 
106
102
  # Inspect / restart
@@ -109,12 +105,10 @@ export BOT_SECRET_FLOW='cli_secret_XXX'
109
105
  ./bin/dreamux dispatcher start --id flow # if not auto-started
110
106
  ```
111
107
 
112
- `./bin/server-ctl <args>` still works as an alias.
113
-
114
108
  ## MVP verification path (issue #2 §"MVP 验收脚本")
115
109
 
116
- 1. `dreamux dispatcher add --id flow --bot-app-id cli_aaa --bot-secret-ref env:BOT_SECRET_FLOW`
117
- 2. `dreamux server start` — dispatcher `flow` goes to `ready`
110
+ 1. `dreamux dispatcher add --id flow --bot-app-id <APP_ID> --bot-secret-ref env:BOT_SECRET_FLOW`
111
+ 2. `dreamux serve` — dispatcher `flow` goes to `ready`
118
112
  3. Invite the bot to a Feishu group A, send `hi`
119
113
  4. Server delivers it into the Codex thread; reply goes back to group A
120
114
  5. Invite the same bot to a DM, ask "do you remember the 'hi' from earlier?"
@@ -152,7 +146,7 @@ retries = 3
152
146
  retry_delay_ms = 1000
153
147
  ```
154
148
 
155
- Edit and restart `dreamux server start`. Parse errors fail-fast with a
149
+ Edit and restart `dreamux serve`. Parse errors fail-fast with a
156
150
  `file:line` pointer.
157
151
 
158
152
  ### `codex_args_json` (per-dispatcher, overrides global)
@@ -178,7 +172,7 @@ JSON object stored in `dispatchers.codex_args_json`:
178
172
  | `CODEX_HOST_CODEX_BIN` | Override `codex.bin` |
179
173
  | `DREAMUX_CONFIG_DIR` | Override `~/.dreamux` (where `config.toml` lives) |
180
174
  | `BOT_SECRET_<NAME>` | Bot secrets referenced by `env:BOT_SECRET_<NAME>` |
181
- | `DREAMUX_SKIP_LIVE_CODEX` | Opt out of the live codex 0.134 integration test (loud skip) |
175
+ | `DREAMUX_SKIP_LIVE_CODEX` | Opt out of the live codex 0.135 integration test (loud skip) |
182
176
 
183
177
  ## What this MVP does **not** do
184
178
 
@@ -198,17 +192,19 @@ JSON object stored in `dispatchers.codex_args_json`:
198
192
 
199
193
  ```bash
200
194
  # from the repo root (the only supported path — see the install-model decision)
201
- node common/scripts/install-run-rush.js test # smoke + bin-launcher + codex-0134-live
195
+ node common/scripts/install-run-rush.js test # smoke + bin-launcher + codex-0135-live
202
196
  ```
203
197
 
204
198
  - `tests/smoke.test.ts` — fake-codex-driven dispatcher behavior:
205
199
  happy path, FIFO, crash recovery (running → unknown), thread/resume
206
200
  failure, outbound retry without turn re-run, approval fail-fast.
207
- - `tests/bin-launcher.test.ts` — spawns the real bash launchers
208
- (`dreamux`, `dreamux-server`, `server-ctl`, plus the repo-root
209
- forwarders) from arbitrary cwds and through symlinks; static "no tsx"
210
- assertion.
211
- - `tests/codex-0134-live.test.ts` spawns a real `codex app-server`
201
+ - `tests/bin-launcher.test.ts` — spawns the real `dreamux` bash launcher
202
+ and repo-root shim from arbitrary cwds and through symlinks; static
203
+ "no tsx" assertion; manifest assertion for the single global bin.
204
+ - `tests/doctor.test.ts` — covers standalone doctor checks for
205
+ dispatcher-private `CODEX_HOME` state, including managed-service auth
206
+ visibility.
207
+ - `tests/codex-0135-live.test.ts` — spawns a real `codex app-server`
212
208
  (skipped loudly when `codex` is missing or wrong version; opt-in via
213
209
  `DREAMUX_SKIP_LIVE_CODEX=1`).
214
210
 
package/bin/dreamux CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- # Launcher for the unified `dreamux` CLI (issue #4).
2
+ # Launcher for the single public `dreamux` CLI (issue #18).
3
3
  # Resolves its own location through symlinks so it works from any cwd and
4
4
  # via any chain of symlinks (npm-link, ~/bin shortcuts, etc.). Runs the
5
5
  # compiled dist output (built by `rush build` in a source checkout; already
@@ -23,10 +23,11 @@ while [ -L "$SOURCE" ]; do
23
23
  done
24
24
 
25
25
  DIR="$(cd -- "$(dirname -- "$SOURCE")/.." &> /dev/null && pwd)"
26
+ DREAMUX_BIN="$(cd -- "$(dirname -- "$SOURCE")" &> /dev/null && pwd)/$(basename -- "$SOURCE")"
26
27
  TARGET="$DIR/dist/cli/dreamux.js"
27
28
  if [ ! -f "$TARGET" ]; then
28
29
  echo "dreamux: $TARGET is missing." >&2
29
30
  echo "Build it first from the repo root: node common/scripts/install-run-rush.js build (rush build)." >&2
30
31
  exit 1
31
32
  fi
32
- exec node "$TARGET" "$@"
33
+ exec env DREAMUX_BIN="$DREAMUX_BIN" node "$TARGET" "$@"
@@ -121,7 +121,7 @@ function acquirePidLock(lockPath, myPid, isAlive) {
121
121
  return;
122
122
  }
123
123
  if (holder !== null && isAlive(holder)) {
124
- throw new Error(`admin socket lockfile ${lockPath} is held by another live dreamux-server process (pid ${holder}). ` +
124
+ throw new Error(`admin socket lockfile ${lockPath} is held by another live dreamux serve process (pid ${holder}). ` +
125
125
  'Refusing to bind to avoid split-brain admin control. ' +
126
126
  'Stop the other instance, or set CODEX_HOST_ADMIN_SOCKET to a different path.');
127
127
  }
@@ -1 +1 @@
1
- {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/admin/socket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/admin/socket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,273 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { DispatcherRepo } from '../db/repository.js';
4
+ import { openDatabase } from '../db/schema.js';
5
+ import { codexArgsToCli, parseCodexArgs } from '../runtime/codex-args.js';
6
+ import { BUILT_IN_DEFAULTS, globalConfigDir, globalConfigFile, loadConfig, } from '../runtime/config.js';
7
+ import { dispatcherCodexHomeDoctorContext, validateDispatcherCodexHome, } from '../runtime/dispatcher-codex-home.js';
8
+ import { databasePath as runtimeDatabasePath, runtimeRoot, setRuntimeConfig, } from '../runtime/paths.js';
9
+ import { ExecaCommandRunner } from '../onboard/commands.js';
10
+ import { LAUNCHD_LABEL, managedServiceEnvironment, serviceUnitPath, SYSTEMD_UNIT, } from '../onboard/service.js';
11
+ export async function runDreamuxDoctor(options = {}) {
12
+ const runner = options.runner ?? new ExecaCommandRunner();
13
+ const checks = [];
14
+ const configDir = globalConfigDir();
15
+ const { config, configFile } = readConfigForDoctor(configDir, checks);
16
+ setRuntimeConfig(config);
17
+ checks.push({
18
+ name: 'runtime directory',
19
+ ok: existsSync(runtimeRoot()),
20
+ detail: runtimeRoot(),
21
+ });
22
+ const dbPath = runtimeDatabasePath();
23
+ checks.push({
24
+ name: 'runtime database',
25
+ ok: existsSync(dbPath),
26
+ detail: dbPath,
27
+ });
28
+ checks.push({
29
+ name: 'codex binary',
30
+ ok: await runner.check(config.codex.bin, ['--help']),
31
+ detail: config.codex.bin,
32
+ });
33
+ const service = await getServiceStatus({
34
+ runner,
35
+ platform: options.platform,
36
+ homeDir: options.homeDir,
37
+ uid: options.uid,
38
+ });
39
+ checks.push({
40
+ name: 'user service',
41
+ ok: true,
42
+ detail: service.installed
43
+ ? `installed at ${service.unitPath}`
44
+ : `not installed at ${service.unitPath}`,
45
+ });
46
+ const dispatchers = existsSync(dbPath)
47
+ ? readDispatchers(config, options.env ?? process.env, service)
48
+ : [];
49
+ if (dispatchers.length === 0) {
50
+ checks.push({
51
+ name: 'dispatchers',
52
+ ok: false,
53
+ detail: 'no dispatchers are configured',
54
+ });
55
+ }
56
+ const ok = checks.every((check) => check.ok) &&
57
+ dispatchers.every((dispatcher) => dispatcher.foreground.ok &&
58
+ (dispatcher.managedService === null || dispatcher.managedService.ok));
59
+ return {
60
+ ok,
61
+ configFile,
62
+ runtimeDir: runtimeRoot(),
63
+ databasePath: dbPath,
64
+ service,
65
+ checks,
66
+ dispatchers,
67
+ };
68
+ }
69
+ export function printDoctorResult(result) {
70
+ console.log(`dreamux doctor: ${result.ok ? 'ok' : 'failed'}`);
71
+ console.log(`config: ${result.configFile}`);
72
+ console.log(`runtime: ${result.runtimeDir}`);
73
+ console.log(`database: ${result.databasePath}`);
74
+ for (const check of result.checks) {
75
+ console.log(`${check.ok ? 'ok' : 'fail'}\t${check.name}\t${check.detail}`);
76
+ }
77
+ for (const dispatcher of result.dispatchers) {
78
+ printDispatcherDoctor(dispatcher);
79
+ }
80
+ }
81
+ function readConfigForDoctor(configDir, checks) {
82
+ try {
83
+ const loaded = loadConfig({ configDir });
84
+ checks.push({
85
+ name: 'config',
86
+ ok: true,
87
+ detail: loaded.configFile,
88
+ });
89
+ return loaded;
90
+ }
91
+ catch (err) {
92
+ const detail = err instanceof Error ? err.message : String(err);
93
+ checks.push({
94
+ name: 'config',
95
+ ok: false,
96
+ detail,
97
+ });
98
+ return {
99
+ config: BUILT_IN_DEFAULTS,
100
+ configFile: globalConfigFile({ configDir }),
101
+ };
102
+ }
103
+ }
104
+ function readDispatchers(config, env, service) {
105
+ const db = openDatabase({ path: runtimeDatabasePath() });
106
+ try {
107
+ const repo = new DispatcherRepo(db);
108
+ return repo.list().map((row) => {
109
+ const codexArgs = parseCodexArgs(row.codex_args_json, {
110
+ approvalPolicy: config.codex.approval_policy,
111
+ sandboxMode: config.codex.sandbox_mode,
112
+ extraArgs: config.codex.extra_args,
113
+ });
114
+ const codexCliArgs = codexArgsToCli(codexArgs);
115
+ const context = dispatcherCodexHomeDoctorContext(row.dispatcher_id, {
116
+ codexCliArgs,
117
+ });
118
+ const foreground = validateDispatcherCodexHome(context, {
119
+ env,
120
+ codexCliArgs,
121
+ });
122
+ const managedService = service.installed
123
+ ? validateDispatcherCodexHome(context, {
124
+ env: managedServiceEnvironment({
125
+ configDir: globalConfigDir(),
126
+ runtimeDir: runtimeRoot(),
127
+ codexBin: process.env['CODEX_HOST_CODEX_BIN'] || config.codex.bin,
128
+ dreamuxBin: process.env['DREAMUX_BIN'] ?? process.argv[1],
129
+ startService: false,
130
+ dryRun: false,
131
+ }),
132
+ codexCliArgs,
133
+ })
134
+ : null;
135
+ return {
136
+ id: row.dispatcher_id,
137
+ foreground,
138
+ managedService,
139
+ };
140
+ });
141
+ }
142
+ finally {
143
+ db.close();
144
+ }
145
+ }
146
+ async function getServiceStatus(options) {
147
+ const runner = options.runner ?? new ExecaCommandRunner();
148
+ const unit = serviceUnitPath(options.platform, options.homeDir ?? homedir());
149
+ if (unit.platform === 'launchd') {
150
+ return launchdStatus(unit.path, runner, options.uid);
151
+ }
152
+ return systemdStatus(unit.path, runner);
153
+ }
154
+ async function launchdStatus(unitPath, runner, uid) {
155
+ const target = launchdTarget(uid);
156
+ let raw = '';
157
+ let loaded = false;
158
+ try {
159
+ raw = await runner.capture('launchctl', ['print', target]);
160
+ loaded = true;
161
+ }
162
+ catch {
163
+ loaded = false;
164
+ }
165
+ const pid = parseLaunchdPid(raw);
166
+ return {
167
+ platform: 'launchd',
168
+ unitPath,
169
+ installed: existsSync(unitPath),
170
+ enabled: existsSync(unitPath),
171
+ loaded,
172
+ running: pid !== null || /\bstate = running\b/.test(raw),
173
+ pid,
174
+ detail: parseLaunchdDetail(raw),
175
+ };
176
+ }
177
+ async function systemdStatus(unitPath, runner) {
178
+ const enabled = await runner.check('systemctl', [
179
+ '--user',
180
+ 'is-enabled',
181
+ SYSTEMD_UNIT,
182
+ ]);
183
+ const active = await runner.check('systemctl', [
184
+ '--user',
185
+ 'is-active',
186
+ SYSTEMD_UNIT,
187
+ ]);
188
+ let raw = '';
189
+ try {
190
+ raw = await runner.capture('systemctl', [
191
+ '--user',
192
+ 'show',
193
+ SYSTEMD_UNIT,
194
+ '--property=LoadState,ActiveState,SubState,MainPID,Result',
195
+ ]);
196
+ }
197
+ catch {
198
+ raw = '';
199
+ }
200
+ const props = parseSystemdProperties(raw);
201
+ return {
202
+ platform: 'systemd',
203
+ unitPath,
204
+ installed: existsSync(unitPath),
205
+ enabled,
206
+ loaded: props['LoadState'] === 'loaded',
207
+ running: active || props['ActiveState'] === 'active',
208
+ pid: parsePositiveInt(props['MainPID']),
209
+ detail: systemdDetail(props),
210
+ };
211
+ }
212
+ function launchdTarget(uid) {
213
+ const actualUid = uid ?? process.getuid?.();
214
+ if (actualUid === undefined) {
215
+ throw new Error('launchd user service diagnostics require a numeric uid');
216
+ }
217
+ return `gui/${actualUid}/${LAUNCHD_LABEL}`;
218
+ }
219
+ function parseLaunchdPid(raw) {
220
+ const match = raw.match(/\bpid = (\d+)/);
221
+ if (match === null)
222
+ return null;
223
+ return parsePositiveInt(match[1]);
224
+ }
225
+ function parseLaunchdDetail(raw) {
226
+ const state = raw.match(/\bstate = ([^\n]+)/)?.[1]?.trim();
227
+ const reason = raw.match(/\breason = ([^\n]+)/)?.[1]?.trim();
228
+ return [state, reason]
229
+ .filter((value) => value !== undefined && value !== '')
230
+ .join(', ') || null;
231
+ }
232
+ function parseSystemdProperties(raw) {
233
+ const result = {};
234
+ for (const line of raw.split(/\r?\n/)) {
235
+ const eq = line.indexOf('=');
236
+ if (eq <= 0)
237
+ continue;
238
+ result[line.slice(0, eq)] = line.slice(eq + 1);
239
+ }
240
+ return result;
241
+ }
242
+ function systemdDetail(props) {
243
+ const parts = [
244
+ props['LoadState'],
245
+ props['ActiveState'],
246
+ props['SubState'],
247
+ props['Result'] !== undefined && props['Result'] !== 'success'
248
+ ? `result=${props['Result']}`
249
+ : undefined,
250
+ ].filter((part) => part !== undefined && part !== '');
251
+ return parts.join(', ') || null;
252
+ }
253
+ function parsePositiveInt(value) {
254
+ if (value === undefined)
255
+ return null;
256
+ const parsed = Number(value);
257
+ if (!Number.isInteger(parsed) || parsed <= 0)
258
+ return null;
259
+ return parsed;
260
+ }
261
+ function printDispatcherDoctor(dispatcher) {
262
+ printCodexHomeDoctor(`dispatcher ${dispatcher.id} foreground`, dispatcher.foreground);
263
+ if (dispatcher.managedService !== null) {
264
+ printCodexHomeDoctor(`dispatcher ${dispatcher.id} managed-service`, dispatcher.managedService);
265
+ }
266
+ }
267
+ function printCodexHomeDoctor(name, result) {
268
+ console.log(`${result.ok ? 'ok' : 'fail'}\t${name}\t${result.context.codexHome}`);
269
+ for (const error of result.errors) {
270
+ console.log(`fail\t${name}\t${error}`);
271
+ }
272
+ }
273
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}