@dotsetlabs/dotclaw 1.3.0 → 1.5.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.
Files changed (79) hide show
  1. package/README.md +9 -0
  2. package/config-examples/runtime.json +106 -3
  3. package/container/agent-runner/package-lock.json +2 -2
  4. package/container/agent-runner/package.json +1 -1
  5. package/container/agent-runner/src/agent-config.ts +20 -2
  6. package/container/agent-runner/src/container-protocol.ts +11 -0
  7. package/container/agent-runner/src/index.ts +128 -11
  8. package/container/agent-runner/src/tools.ts +84 -5
  9. package/dist/agent-context.d.ts +5 -0
  10. package/dist/agent-context.d.ts.map +1 -1
  11. package/dist/agent-context.js +19 -8
  12. package/dist/agent-context.js.map +1 -1
  13. package/dist/agent-execution.d.ts +6 -0
  14. package/dist/agent-execution.d.ts.map +1 -1
  15. package/dist/agent-execution.js +61 -4
  16. package/dist/agent-execution.js.map +1 -1
  17. package/dist/background-job-classifier.d.ts +4 -0
  18. package/dist/background-job-classifier.d.ts.map +1 -1
  19. package/dist/background-job-classifier.js +36 -15
  20. package/dist/background-job-classifier.js.map +1 -1
  21. package/dist/background-jobs.d.ts.map +1 -1
  22. package/dist/background-jobs.js +81 -4
  23. package/dist/background-jobs.js.map +1 -1
  24. package/dist/cli.js +343 -11
  25. package/dist/cli.js.map +1 -1
  26. package/dist/config.d.ts +0 -2
  27. package/dist/config.d.ts.map +1 -1
  28. package/dist/config.js +0 -3
  29. package/dist/config.js.map +1 -1
  30. package/dist/container-protocol.d.ts +11 -0
  31. package/dist/container-protocol.d.ts.map +1 -1
  32. package/dist/container-runner.d.ts.map +1 -1
  33. package/dist/container-runner.js +9 -1
  34. package/dist/container-runner.js.map +1 -1
  35. package/dist/dashboard.d.ts +5 -0
  36. package/dist/dashboard.d.ts.map +1 -1
  37. package/dist/dashboard.js +58 -8
  38. package/dist/dashboard.js.map +1 -1
  39. package/dist/db.d.ts +11 -0
  40. package/dist/db.d.ts.map +1 -1
  41. package/dist/db.js +36 -0
  42. package/dist/db.js.map +1 -1
  43. package/dist/index.js +300 -37
  44. package/dist/index.js.map +1 -1
  45. package/dist/json-helpers.d.ts +6 -0
  46. package/dist/json-helpers.d.ts.map +1 -0
  47. package/dist/json-helpers.js +17 -0
  48. package/dist/json-helpers.js.map +1 -0
  49. package/dist/logger.d.ts +0 -1
  50. package/dist/logger.d.ts.map +1 -1
  51. package/dist/logger.js +1 -1
  52. package/dist/logger.js.map +1 -1
  53. package/dist/metrics.d.ts +3 -0
  54. package/dist/metrics.d.ts.map +1 -1
  55. package/dist/metrics.js +35 -1
  56. package/dist/metrics.js.map +1 -1
  57. package/dist/planner-probe.d.ts +14 -0
  58. package/dist/planner-probe.d.ts.map +1 -0
  59. package/dist/planner-probe.js +97 -0
  60. package/dist/planner-probe.js.map +1 -0
  61. package/dist/progress.d.ts +27 -0
  62. package/dist/progress.d.ts.map +1 -1
  63. package/dist/progress.js +151 -0
  64. package/dist/progress.js.map +1 -1
  65. package/dist/request-router.d.ts +34 -0
  66. package/dist/request-router.d.ts.map +1 -0
  67. package/dist/request-router.js +148 -0
  68. package/dist/request-router.js.map +1 -0
  69. package/dist/runtime-config.d.ts +67 -0
  70. package/dist/runtime-config.d.ts.map +1 -1
  71. package/dist/runtime-config.js +177 -14
  72. package/dist/runtime-config.js.map +1 -1
  73. package/dist/task-scheduler.d.ts.map +1 -1
  74. package/dist/task-scheduler.js +56 -9
  75. package/dist/task-scheduler.js.map +1 -1
  76. package/dist/trace-writer.d.ts +1 -0
  77. package/dist/trace-writer.d.ts.map +1 -1
  78. package/dist/trace-writer.js.map +1 -1
  79. package/package.json +1 -1
@@ -18,6 +18,8 @@ const JOBS_INLINE_MAX_CHARS = runtime.host.backgroundJobs.inlineMaxChars;
18
18
  const JOBS_CONTEXT_DEFAULT = runtime.host.backgroundJobs.contextModeDefault;
19
19
  const JOBS_TOOL_ALLOW = runtime.host.backgroundJobs.toolAllow;
20
20
  const JOBS_TOOL_DENY = runtime.host.backgroundJobs.toolDeny;
21
+ const JOBS_PROGRESS = runtime.host.backgroundJobs.progress;
22
+ const BACKGROUND_PROFILE = runtime.host.routing?.profiles?.background;
21
23
  const inFlightJobs = new Map();
22
24
  function formatJobCompletionMessage(params) {
23
25
  const statusLine = `Background job ${params.job.id} ${params.status}.`;
@@ -41,6 +43,29 @@ function coerceJobPolicy(raw) {
41
43
  return {};
42
44
  }
43
45
  }
46
+ function extractEstimatedMinutes(tags) {
47
+ if (!tags)
48
+ return null;
49
+ try {
50
+ const parsed = JSON.parse(tags);
51
+ if (!Array.isArray(parsed))
52
+ return null;
53
+ for (const tag of parsed) {
54
+ if (typeof tag !== 'string')
55
+ continue;
56
+ const match = tag.match(/^eta:(\\d+(?:\\.\\d+)?)$/i);
57
+ if (match) {
58
+ const value = Number(match[1]);
59
+ if (Number.isFinite(value) && value > 0)
60
+ return value;
61
+ }
62
+ }
63
+ }
64
+ catch {
65
+ // ignore parse errors
66
+ }
67
+ return null;
68
+ }
44
69
  function effectiveToolAllow(job) {
45
70
  const policy = coerceJobPolicy(job.tool_policy_json ?? null);
46
71
  if (policy.tool_allow && policy.tool_allow.length > 0)
@@ -105,6 +130,28 @@ async function runBackgroundJob(job, deps) {
105
130
  let context = null;
106
131
  let error = null;
107
132
  let resultText = null;
133
+ const recallEnabled = BACKGROUND_PROFILE?.enableMemoryRecall ?? true;
134
+ const recallMaxResults = recallEnabled
135
+ ? (Number.isFinite(BACKGROUND_PROFILE?.recallMaxResults)
136
+ ? Math.max(0, Math.floor(BACKGROUND_PROFILE?.recallMaxResults))
137
+ : runtime.host.memory.recall.maxResults)
138
+ : 0;
139
+ const recallMaxTokens = recallEnabled
140
+ ? (Number.isFinite(BACKGROUND_PROFILE?.recallMaxTokens)
141
+ ? Math.max(0, Math.floor(BACKGROUND_PROFILE?.recallMaxTokens))
142
+ : runtime.host.memory.recall.maxTokens)
143
+ : 0;
144
+ const maxToolSteps = job.max_tool_steps ?? BACKGROUND_PROFILE?.maxToolSteps ?? JOBS_MAX_TOOL_STEPS;
145
+ const modelOverride = job.model_override ?? BACKGROUND_PROFILE?.model;
146
+ const modelMaxOutputTokens = BACKGROUND_PROFILE?.maxOutputTokens;
147
+ const disablePlanner = BACKGROUND_PROFILE ? !BACKGROUND_PROFILE.enablePlanner : undefined;
148
+ const disableResponseValidation = BACKGROUND_PROFILE ? !BACKGROUND_PROFILE.enableValidation : undefined;
149
+ const responseValidationMaxRetries = Number.isFinite(BACKGROUND_PROFILE?.responseValidationMaxRetries)
150
+ ? Math.max(0, Math.floor(BACKGROUND_PROFILE?.responseValidationMaxRetries))
151
+ : undefined;
152
+ const disableMemoryExtraction = BACKGROUND_PROFILE ? !BACKGROUND_PROFILE.enableMemoryExtraction : undefined;
153
+ let progressTimer = null;
154
+ let progressCount = 0;
108
155
  logBackgroundJobEvent({
109
156
  job_id: job.id,
110
157
  created_at: now,
@@ -126,6 +173,29 @@ async function runBackgroundJob(job, deps) {
126
173
  });
127
174
  try {
128
175
  if (!error && group) {
176
+ if (JOBS_PROGRESS.enabled && job.chat_jid) {
177
+ const eta = extractEstimatedMinutes(job.tags);
178
+ const startedAt = Date.now();
179
+ const scheduleProgress = () => {
180
+ if (progressCount >= JOBS_PROGRESS.maxUpdates)
181
+ return;
182
+ progressCount += 1;
183
+ const elapsedMinutes = Math.max(0, Math.floor((Date.now() - startedAt) / 60_000));
184
+ const remaining = eta ? Math.max(1, Math.ceil(eta - elapsedMinutes)) : null;
185
+ const etaLine = remaining ? ` ~${remaining} min remaining.` : '';
186
+ void deps.sendMessage(job.chat_jid, `Background job ${job.id} is still running.${etaLine}`);
187
+ };
188
+ const startDelay = Math.max(0, JOBS_PROGRESS.startDelayMs);
189
+ if (startDelay === 0) {
190
+ scheduleProgress();
191
+ }
192
+ progressTimer = setTimeout(function tick() {
193
+ scheduleProgress();
194
+ if (progressCount < JOBS_PROGRESS.maxUpdates) {
195
+ progressTimer = setTimeout(tick, Math.max(5_000, JOBS_PROGRESS.intervalMs));
196
+ }
197
+ }, startDelay);
198
+ }
129
199
  const sessions = deps.getSessions();
130
200
  const sessionId = job.context_mode === 'group'
131
201
  ? createSessionSnapshot(job.group_folder, sessions[job.group_folder])
@@ -136,8 +206,8 @@ async function runBackgroundJob(job, deps) {
136
206
  chatJid: job.chat_jid,
137
207
  userId: null,
138
208
  recallQuery: job.prompt,
139
- recallMaxResults: runtime.host.memory.recall.maxResults,
140
- recallMaxTokens: runtime.host.memory.recall.maxTokens,
209
+ recallMaxResults,
210
+ recallMaxTokens,
141
211
  sessionId,
142
212
  persistSession: false,
143
213
  isBackgroundJob: true,
@@ -147,8 +217,13 @@ async function runBackgroundJob(job, deps) {
147
217
  abortSignal: abortController.signal,
148
218
  toolAllow: effectiveToolAllow(job),
149
219
  toolDeny: effectiveToolDeny(job),
150
- modelOverride: job.model_override ?? undefined,
151
- maxToolSteps: job.max_tool_steps ?? JOBS_MAX_TOOL_STEPS,
220
+ modelOverride: modelOverride ?? undefined,
221
+ modelMaxOutputTokens,
222
+ maxToolSteps,
223
+ disablePlanner,
224
+ disableResponseValidation,
225
+ responseValidationMaxRetries,
226
+ disableMemoryExtraction,
152
227
  timeoutMs
153
228
  });
154
229
  output = execution.output;
@@ -173,6 +248,8 @@ async function runBackgroundJob(job, deps) {
173
248
  }
174
249
  finally {
175
250
  clearTimeout(timeout);
251
+ if (progressTimer)
252
+ clearTimeout(progressTimer);
176
253
  inFlightJobs.delete(job.id);
177
254
  }
178
255
  if (!error && (!resultText || !resultText.trim())) {
@@ -1 +1 @@
1
- {"version":3,"file":"background-jobs.js","sourceRoot":"","sources":["../src/background-jobs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"background-jobs.js","sourceRoot":"","sources":["../src/background-jobs.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -3,11 +3,18 @@ import fs from 'fs';
3
3
  import path from 'path';
4
4
  import { spawn, spawnSync, execSync } from 'child_process';
5
5
  import readline from 'readline';
6
- import { DOTCLAW_HOME, PACKAGE_ROOT, GROUPS_DIR, LOGS_DIR, ENV_PATH, REGISTERED_GROUPS_PATH, CONTAINER_BUILD_SCRIPT, SCRIPTS_DIR, ensureDirectoryStructure, } from './paths.js';
6
+ import net from 'net';
7
+ import { DOTCLAW_HOME, PACKAGE_ROOT, GROUPS_DIR, LOGS_DIR, ENV_PATH, RUNTIME_CONFIG_PATH, REGISTERED_GROUPS_PATH, CONTAINER_BUILD_SCRIPT, SCRIPTS_DIR, ensureDirectoryStructure, } from './paths.js';
7
8
  const PLATFORM = process.platform;
8
9
  const IS_MACOS = PLATFORM === 'darwin';
9
10
  const IS_LINUX = PLATFORM === 'linux';
10
- const LAUNCHD_PLIST_NAME = 'com.dotclaw.plist';
11
+ const INSTANCE_ID_RAW = process.env.DOTCLAW_INSTANCE_ID || '';
12
+ const INSTANCE_ID = INSTANCE_ID_RAW.trim()
13
+ ? INSTANCE_ID_RAW.trim().replace(/[^a-zA-Z0-9_.-]+/g, '-').replace(/^-+|-+$/g, '')
14
+ : '';
15
+ const LAUNCHD_LABEL_BASE = 'com.dotclaw';
16
+ const LAUNCHD_LABEL = INSTANCE_ID ? `${LAUNCHD_LABEL_BASE}.${INSTANCE_ID}` : LAUNCHD_LABEL_BASE;
17
+ const LAUNCHD_PLIST_NAME = `${LAUNCHD_LABEL}.plist`;
11
18
  const SYSTEMD_SERVICE_NAME = 'dotclaw.service';
12
19
  function log(message) {
13
20
  console.log(`[dotclaw] ${message}`);
@@ -18,6 +25,162 @@ function error(message) {
18
25
  function warn(message) {
19
26
  console.warn(`[dotclaw] WARN: ${message}`);
20
27
  }
28
+ function getInstanceIdLabel(id) {
29
+ const normalized = id.trim().replace(/[^a-zA-Z0-9_.-]+/g, '-').replace(/^-+|-+$/g, '');
30
+ if (!normalized)
31
+ return LAUNCHD_LABEL_BASE;
32
+ return `${LAUNCHD_LABEL_BASE}.${normalized}`;
33
+ }
34
+ function normalizeInstanceId(id) {
35
+ return id.trim().replace(/[^a-zA-Z0-9_.-]+/g, '-').replace(/^-+|-+$/g, '');
36
+ }
37
+ function getInstanceHome(id) {
38
+ const normalized = normalizeInstanceId(id);
39
+ if (!normalized || normalized === 'default') {
40
+ return path.join(getUserHome(), '.dotclaw');
41
+ }
42
+ return path.join(getUserHome(), `.dotclaw-${normalized}`);
43
+ }
44
+ function listInstanceTargets() {
45
+ const targets = new Map();
46
+ const defaultHome = DOTCLAW_HOME;
47
+ const defaultId = INSTANCE_ID || 'default';
48
+ targets.set(defaultHome, { id: defaultId, home: defaultHome });
49
+ const homeDir = getUserHome();
50
+ try {
51
+ const entries = fs.readdirSync(homeDir, { withFileTypes: true });
52
+ for (const entry of entries) {
53
+ if (!entry.isDirectory())
54
+ continue;
55
+ if (!entry.name.startsWith('.dotclaw-'))
56
+ continue;
57
+ const id = entry.name.slice('.dotclaw-'.length);
58
+ const home = path.join(homeDir, entry.name);
59
+ if (!targets.has(home)) {
60
+ targets.set(home, { id, home });
61
+ }
62
+ }
63
+ }
64
+ catch {
65
+ // ignore read errors
66
+ }
67
+ return Array.from(targets.values()).sort((a, b) => {
68
+ if (a.id === 'default')
69
+ return -1;
70
+ if (b.id === 'default')
71
+ return 1;
72
+ return a.id.localeCompare(b.id);
73
+ });
74
+ }
75
+ function parseCliArgs(argv) {
76
+ let command = '';
77
+ const args = [];
78
+ const passthrough = [];
79
+ let id;
80
+ let all = false;
81
+ let sawFollow = false;
82
+ let sawForeground = false;
83
+ let sawShortF = false;
84
+ for (let i = 0; i < argv.length; i += 1) {
85
+ const arg = argv[i];
86
+ if (arg === '--all') {
87
+ all = true;
88
+ continue;
89
+ }
90
+ if (arg.startsWith('--id=')) {
91
+ id = arg.slice('--id='.length);
92
+ continue;
93
+ }
94
+ if (arg === '--id') {
95
+ id = argv[i + 1];
96
+ i += 1;
97
+ continue;
98
+ }
99
+ if (arg === '--follow') {
100
+ sawFollow = true;
101
+ }
102
+ if (arg === '--foreground') {
103
+ sawForeground = true;
104
+ }
105
+ if (arg === '-f') {
106
+ sawShortF = true;
107
+ }
108
+ if (!command && !arg.startsWith('-')) {
109
+ command = arg;
110
+ continue;
111
+ }
112
+ if (arg.startsWith('-')) {
113
+ passthrough.push(arg);
114
+ continue;
115
+ }
116
+ args.push(arg);
117
+ }
118
+ const resolvedCommand = command || 'help';
119
+ const follow = resolvedCommand === 'logs' ? (sawFollow || sawShortF) : sawFollow;
120
+ const foreground = resolvedCommand === 'start' ? (sawForeground || sawShortF) : sawForeground;
121
+ return {
122
+ command: resolvedCommand,
123
+ args,
124
+ passthrough,
125
+ flags: {
126
+ id,
127
+ all,
128
+ follow,
129
+ foreground
130
+ }
131
+ };
132
+ }
133
+ function buildChildArgs(command, parsed) {
134
+ return [command, ...parsed.passthrough, ...parsed.args].filter(Boolean);
135
+ }
136
+ function runCliWithEnv(command, parsed, env) {
137
+ const cliPath = path.join(PACKAGE_ROOT, 'dist', 'cli.js');
138
+ if (!fs.existsSync(cliPath)) {
139
+ error(`DotClaw not properly installed. Missing: ${cliPath}`);
140
+ return 1;
141
+ }
142
+ const childArgs = buildChildArgs(command, parsed);
143
+ const result = spawnSync(getNodePath(), [cliPath, ...childArgs], { stdio: 'inherit', env });
144
+ return result.status || 0;
145
+ }
146
+ function ensureDirectoryStructureAt(dotclawHome) {
147
+ const dirs = [
148
+ dotclawHome,
149
+ path.join(dotclawHome, 'config'),
150
+ path.join(dotclawHome, 'data'),
151
+ path.join(dotclawHome, 'data', 'store'),
152
+ path.join(dotclawHome, 'data', 'ipc'),
153
+ path.join(dotclawHome, 'data', 'sessions'),
154
+ path.join(dotclawHome, 'groups'),
155
+ path.join(dotclawHome, 'groups', 'main'),
156
+ path.join(dotclawHome, 'groups', 'global'),
157
+ path.join(dotclawHome, 'logs'),
158
+ path.join(dotclawHome, 'traces'),
159
+ path.join(dotclawHome, 'prompts')
160
+ ];
161
+ for (const dir of dirs) {
162
+ fs.mkdirSync(dir, { recursive: true });
163
+ }
164
+ }
165
+ async function isPortAvailable(port) {
166
+ return await new Promise((resolve) => {
167
+ const server = net.createServer();
168
+ server.unref();
169
+ server.on('error', () => resolve(false));
170
+ server.listen(port, '127.0.0.1', () => {
171
+ server.close(() => resolve(true));
172
+ });
173
+ });
174
+ }
175
+ async function findAvailablePort(startPort, attempts = 20) {
176
+ let port = startPort;
177
+ for (let i = 0; i < attempts; i += 1) {
178
+ if (await isPortAvailable(port))
179
+ return port;
180
+ port += 1;
181
+ }
182
+ return startPort;
183
+ }
21
184
  function getNodePath() {
22
185
  return process.execPath;
23
186
  }
@@ -30,8 +193,8 @@ function getLaunchdPlistPath() {
30
193
  function isServiceRunning() {
31
194
  if (IS_MACOS) {
32
195
  try {
33
- const result = execSync(`launchctl list | grep com.dotclaw`, { encoding: 'utf-8', stdio: 'pipe' });
34
- return result.includes('com.dotclaw');
196
+ const result = execSync(`launchctl list | grep -F "${LAUNCHD_LABEL}"`, { encoding: 'utf-8', stdio: 'pipe' });
197
+ return result.includes(LAUNCHD_LABEL);
35
198
  }
36
199
  catch {
37
200
  return false;
@@ -57,7 +220,7 @@ function generateLaunchdPlist() {
57
220
  <plist version="1.0">
58
221
  <dict>
59
222
  <key>Label</key>
60
- <string>com.dotclaw</string>
223
+ <string>${LAUNCHD_LABEL}</string>
61
224
  <key>ProgramArguments</key>
62
225
  <array>
63
226
  <string>${nodePath}</string>
@@ -360,6 +523,7 @@ async function cmdDoctor() {
360
523
  if (IS_MACOS) {
361
524
  const plistPath = getLaunchdPlistPath();
362
525
  console.log(`launchd plist: ${fs.existsSync(plistPath) ? 'installed' : 'not installed'}`);
526
+ console.log(`launchd label: ${LAUNCHD_LABEL}`);
363
527
  console.log(`Service running: ${isServiceRunning() ? 'yes' : 'no'}`);
364
528
  }
365
529
  else if (IS_LINUX) {
@@ -459,6 +623,91 @@ async function cmdUninstallService() {
459
623
  warn(`Unsupported platform: ${PLATFORM}`);
460
624
  }
461
625
  }
626
+ async function cmdAddInstance(instanceId) {
627
+ const normalized = normalizeInstanceId(instanceId);
628
+ if (!normalized) {
629
+ error('Usage: dotclaw add-instance <instance-id>');
630
+ process.exit(1);
631
+ }
632
+ const newHome = getInstanceHome(normalized);
633
+ const runtimePath = path.join(newHome, 'config', 'runtime.json');
634
+ const envPath = path.join(newHome, '.env');
635
+ if (fs.existsSync(newHome)) {
636
+ error(`Instance home already exists: ${newHome}`);
637
+ process.exit(1);
638
+ }
639
+ ensureDirectoryStructureAt(newHome);
640
+ if (fs.existsSync(ENV_PATH)) {
641
+ const copyEnv = await prompt('Copy .env from existing instance? (yes/no)', 'yes');
642
+ if (copyEnv.toLowerCase().startsWith('y')) {
643
+ fs.copyFileSync(ENV_PATH, envPath);
644
+ log(`Copied .env to ${envPath}`);
645
+ }
646
+ }
647
+ let runtimeConfig = {};
648
+ if (fs.existsSync(RUNTIME_CONFIG_PATH)) {
649
+ try {
650
+ runtimeConfig = JSON.parse(fs.readFileSync(RUNTIME_CONFIG_PATH, 'utf-8'));
651
+ }
652
+ catch {
653
+ warn('Failed to parse existing runtime.json; starting fresh');
654
+ }
655
+ }
656
+ const host = typeof runtimeConfig.host === 'object' && runtimeConfig.host ? runtimeConfig.host : {};
657
+ const container = typeof host.container === 'object' && host.container ? host.container : {};
658
+ container.instanceId = normalized;
659
+ host.container = container;
660
+ const metrics = typeof host.metrics === 'object' && host.metrics ? host.metrics : {};
661
+ const metricsEnabled = metrics.enabled !== false;
662
+ if (metricsEnabled) {
663
+ const basePort = typeof metrics.port === 'number' ? metrics.port : 3001;
664
+ const availablePort = await findAvailablePort(basePort + 1);
665
+ metrics.port = availablePort;
666
+ }
667
+ host.metrics = metrics;
668
+ runtimeConfig.host = host;
669
+ fs.mkdirSync(path.dirname(runtimePath), { recursive: true });
670
+ fs.writeFileSync(runtimePath, JSON.stringify(runtimeConfig, null, 2));
671
+ log(`Wrote runtime config: ${runtimePath}`);
672
+ if (process.env.DOTCLAW_TEST_MODE === '1') {
673
+ log('Test mode enabled: skipping service install/start');
674
+ return;
675
+ }
676
+ const cliPath = path.join(PACKAGE_ROOT, 'dist', 'cli.js');
677
+ if (!fs.existsSync(cliPath)) {
678
+ error(`DotClaw not properly installed. Missing: ${cliPath}`);
679
+ process.exit(1);
680
+ }
681
+ const env = { ...process.env, DOTCLAW_HOME: newHome, DOTCLAW_INSTANCE_ID: normalized };
682
+ const launchdLabel = getInstanceIdLabel(normalized);
683
+ if (IS_MACOS) {
684
+ try {
685
+ const existing = execSync(`launchctl list | grep -F "${launchdLabel}"`, { encoding: 'utf-8', stdio: 'pipe' });
686
+ if (existing.includes(launchdLabel)) {
687
+ error(`launchd service already exists for ${launchdLabel}`);
688
+ process.exit(1);
689
+ }
690
+ }
691
+ catch {
692
+ // not running, ok
693
+ }
694
+ }
695
+ log(`Installing service for instance "${normalized}"...`);
696
+ const installResult = spawnSync(getNodePath(), [cliPath, 'install-service'], { stdio: 'inherit', env });
697
+ if (installResult.status !== 0) {
698
+ process.exit(installResult.status || 1);
699
+ }
700
+ log(`Starting instance "${normalized}"...`);
701
+ const startResult = spawnSync(getNodePath(), [cliPath, 'start'], { stdio: 'inherit', env });
702
+ if (startResult.status !== 0) {
703
+ process.exit(startResult.status || 1);
704
+ }
705
+ log(`Instance "${normalized}" started at ${newHome}`);
706
+ log(`Launchd label: ${launchdLabel}`);
707
+ if (fs.existsSync(envPath)) {
708
+ log(`If you want a different Telegram bot, edit: ${envPath}`);
709
+ }
710
+ }
462
711
  async function cmdRegister() {
463
712
  // Ensure directories exist
464
713
  ensureDirectoryStructure();
@@ -509,6 +758,7 @@ async function cmdRegister() {
509
758
  async function cmdStatus() {
510
759
  console.log(`Platform: ${PLATFORM}`);
511
760
  console.log(`DOTCLAW_HOME: ${DOTCLAW_HOME}`);
761
+ console.log(`Instance ID: ${INSTANCE_ID || 'default'}`);
512
762
  console.log(`Package root: ${PACKAGE_ROOT}`);
513
763
  console.log(`Service running: ${isServiceRunning() ? 'yes' : 'no'}`);
514
764
  console.log(`.env: ${fs.existsSync(ENV_PATH) ? 'present' : 'missing'}`);
@@ -526,6 +776,17 @@ async function cmdStatus() {
526
776
  console.log('Registered groups: none');
527
777
  }
528
778
  }
779
+ async function cmdInstances() {
780
+ const instances = listInstanceTargets();
781
+ if (instances.length === 0) {
782
+ console.log('No instances found.');
783
+ return;
784
+ }
785
+ console.log('Instances:');
786
+ for (const instance of instances) {
787
+ console.log(`- ${instance.id}: ${instance.home}`);
788
+ }
789
+ }
529
790
  function printHelp() {
530
791
  console.log(`
531
792
  DotClaw - Personal OpenRouter-based assistant
@@ -535,6 +796,8 @@ Usage: dotclaw <command> [options]
535
796
  Commands:
536
797
  setup Run initial setup (init, configure, build, install service)
537
798
  configure Re-run configuration (change API keys, model, etc.)
799
+ add-instance Create and start a new isolated instance
800
+ instances List discovered instances
538
801
  start Start the service (or run in foreground with --foreground)
539
802
  stop Stop the service
540
803
  restart Restart the service
@@ -550,6 +813,8 @@ Commands:
550
813
  Options:
551
814
  --foreground, -f Run in foreground (for 'start' command)
552
815
  --follow, -f Follow log output (for 'logs' command)
816
+ --id <id> Run command against a specific instance
817
+ --all Run command against all instances (supported commands only)
553
818
 
554
819
  Data directory: ${DOTCLAW_HOME}
555
820
  Override with DOTCLAW_HOME environment variable.
@@ -557,6 +822,10 @@ Override with DOTCLAW_HOME environment variable.
557
822
  Examples:
558
823
  dotclaw setup # First-time setup
559
824
  dotclaw configure # Change configuration
825
+ dotclaw add-instance dev # Create a new instance (~/.dotclaw-dev)
826
+ dotclaw instances # List instance homes
827
+ dotclaw status --id dev # Status for a specific instance
828
+ dotclaw restart --all # Restart all instances
560
829
  dotclaw start # Start as background service
561
830
  dotclaw start --foreground # Run in terminal
562
831
  dotclaw logs --follow # Tail logs
@@ -564,11 +833,68 @@ Examples:
564
833
  `);
565
834
  }
566
835
  async function main() {
567
- const args = process.argv.slice(2);
568
- const command = args[0] || 'help';
569
- const flags = args.slice(1);
570
- const hasFlag = (short, long) => flags.includes(short) || flags.includes(long);
836
+ const parsed = parseCliArgs(process.argv.slice(2));
837
+ const command = parsed.command;
571
838
  try {
839
+ if ((command === 'add-instance' || command === 'instances') && (parsed.flags.id || parsed.flags.all)) {
840
+ error(`${command} does not support --id or --all.`);
841
+ process.exit(1);
842
+ }
843
+ if (parsed.flags.id && parsed.flags.all) {
844
+ error('Use either --id or --all, not both.');
845
+ process.exit(1);
846
+ }
847
+ const allSupported = new Set(['start', 'stop', 'restart', 'status', 'logs', 'doctor']);
848
+ if (parsed.flags.all) {
849
+ if (!allSupported.has(command)) {
850
+ error(`--all is not supported for "${command}".`);
851
+ process.exit(1);
852
+ }
853
+ if (command === 'logs' && parsed.flags.follow) {
854
+ error('--all cannot be used with logs --follow.');
855
+ process.exit(1);
856
+ }
857
+ if (command === 'start' && parsed.flags.foreground) {
858
+ error('--all cannot be used with start --foreground.');
859
+ process.exit(1);
860
+ }
861
+ const instances = listInstanceTargets();
862
+ let exitCode = 0;
863
+ for (const instance of instances) {
864
+ console.log(`\n=== ${instance.id} (${instance.home}) ===`);
865
+ const env = { ...process.env, DOTCLAW_HOME: instance.home };
866
+ if (instance.id && instance.id !== 'default') {
867
+ env.DOTCLAW_INSTANCE_ID = instance.id;
868
+ }
869
+ else {
870
+ delete env.DOTCLAW_INSTANCE_ID;
871
+ }
872
+ const code = runCliWithEnv(command, parsed, env);
873
+ if (code !== 0)
874
+ exitCode = code;
875
+ }
876
+ process.exit(exitCode);
877
+ }
878
+ if (parsed.flags.id) {
879
+ const normalized = normalizeInstanceId(parsed.flags.id);
880
+ if (!normalized) {
881
+ error('Invalid instance id.');
882
+ process.exit(1);
883
+ }
884
+ const targetHome = getInstanceHome(normalized);
885
+ const targetInstanceId = normalized === 'default' ? '' : normalized;
886
+ if (DOTCLAW_HOME !== targetHome || INSTANCE_ID !== targetInstanceId) {
887
+ const env = { ...process.env, DOTCLAW_HOME: targetHome };
888
+ if (targetInstanceId) {
889
+ env.DOTCLAW_INSTANCE_ID = targetInstanceId;
890
+ }
891
+ else {
892
+ delete env.DOTCLAW_INSTANCE_ID;
893
+ }
894
+ const exitCode = runCliWithEnv(command, parsed, env);
895
+ process.exit(exitCode);
896
+ }
897
+ }
572
898
  switch (command) {
573
899
  case 'setup':
574
900
  await cmdSetup();
@@ -576,11 +902,17 @@ async function main() {
576
902
  case 'configure':
577
903
  await cmdConfigure();
578
904
  break;
905
+ case 'add-instance':
906
+ await cmdAddInstance(parsed.args[0] || '');
907
+ break;
908
+ case 'instances':
909
+ await cmdInstances();
910
+ break;
579
911
  case 'build':
580
912
  await cmdBuild();
581
913
  break;
582
914
  case 'start':
583
- await cmdStart(hasFlag('-f', '--foreground'));
915
+ await cmdStart(parsed.flags.foreground);
584
916
  break;
585
917
  case 'stop':
586
918
  await cmdStop();
@@ -589,7 +921,7 @@ async function main() {
589
921
  await cmdRestart();
590
922
  break;
591
923
  case 'logs':
592
- await cmdLogs(hasFlag('-f', '--follow'));
924
+ await cmdLogs(parsed.flags.follow);
593
925
  break;
594
926
  case 'doctor':
595
927
  await cmdDoctor();