@memnexus-ai/mx-agent-cli 0.1.51 → 0.1.52
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/dist/__tests__/claude-sync.test.js +20 -136
- package/dist/__tests__/claude-sync.test.js.map +1 -1
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +18 -137
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/init.d.ts +2 -12
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +21 -70
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.d.ts +0 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +9 -39
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +18 -225
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +15 -28
- package/dist/commands/update.js.map +1 -1
- package/dist/index.js +1 -16
- package/dist/index.js.map +1 -1
- package/dist/lib/claude.d.ts +4 -15
- package/dist/lib/claude.d.ts.map +1 -1
- package/dist/lib/claude.js +44 -331
- package/dist/lib/claude.js.map +1 -1
- package/dist/lib/memory.d.ts +6 -1
- package/dist/lib/memory.d.ts.map +1 -1
- package/dist/lib/memory.js +11 -8
- package/dist/lib/memory.js.map +1 -1
- package/dist/lib/project-config.d.ts +7 -7
- package/dist/lib/project-config.d.ts.map +1 -1
- package/dist/lib/project-config.js +6 -3
- package/dist/lib/project-config.js.map +1 -1
- package/dist/lib/templates.d.ts +1 -39
- package/dist/lib/templates.d.ts.map +1 -1
- package/dist/lib/templates.js +25 -1239
- package/dist/lib/templates.js.map +1 -1
- package/dist/lib/worktree.d.ts +1 -19
- package/dist/lib/worktree.d.ts.map +1 -1
- package/dist/lib/worktree.js +4 -55
- package/dist/lib/worktree.js.map +1 -1
- package/package.json +2 -3
- package/README.md +0 -104
- package/dist/commands/new.d.ts +0 -30
- package/dist/commands/new.d.ts.map +0 -1
- package/dist/commands/new.js +0 -150
- package/dist/commands/new.js.map +0 -1
package/dist/lib/claude.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CLAUDE.md deployment, CLAUDE.local.md generation, and session start.
|
|
3
|
+
* Mirrors the patterns in dev-tools/worktree-cli/src/operations.ts.
|
|
3
4
|
*/
|
|
4
5
|
import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'fs';
|
|
5
6
|
import { join } from 'path';
|
|
6
7
|
import { execSync, spawnSync } from 'child_process';
|
|
7
8
|
import chalk from 'chalk';
|
|
8
|
-
import { AUTO_CHECKPOINT_SH_TEMPLATE, CLAUDE_MD_TEMPLATE, MCP_JSON_TEMPLATE, MX_GUARD_HOOK_SH_TEMPLATE, RELOAD_CHECKPOINT_SH_TEMPLATE, SET_TERMINAL_APPEARANCE_SH_TEMPLATE, SETTINGS_JSON_TEMPLATE, WORKTREE_GUARD_SH_TEMPLATE } from './templates.js';
|
|
9
9
|
// ── Logging helpers ───────────────────────────────────────────────────
|
|
10
10
|
export function logSuccess(msg) {
|
|
11
11
|
console.log(chalk.green(' ✓ ' + msg));
|
|
@@ -23,7 +23,7 @@ export function logDim(msg) {
|
|
|
23
23
|
* Template resolution order:
|
|
24
24
|
* 1. origin/<baseBranch>:<configSource>/CLAUDE.md.template via git show
|
|
25
25
|
* 2. Local <configSource>/CLAUDE.md.template — offline fallback
|
|
26
|
-
* 3.
|
|
26
|
+
* 3. Local dev-tools/worktree-cli/templates/CLAUDE.md.template — legacy fallback
|
|
27
27
|
* 4. Root CLAUDE.md
|
|
28
28
|
*/
|
|
29
29
|
export function deployClaudeMd(projectRoot, worktreePath, opts = {}) {
|
|
@@ -60,6 +60,7 @@ export function deployClaudeMd(projectRoot, worktreePath, opts = {}) {
|
|
|
60
60
|
if (!content) {
|
|
61
61
|
const localCandidates = [
|
|
62
62
|
join(projectRoot, configSource, 'CLAUDE.md.template'),
|
|
63
|
+
join(projectRoot, 'dev-tools/worktree-cli/templates/CLAUDE.md.template'),
|
|
63
64
|
];
|
|
64
65
|
for (const templatePath of localCandidates) {
|
|
65
66
|
if (existsSync(templatePath)) {
|
|
@@ -85,20 +86,13 @@ export function deployClaudeMd(projectRoot, worktreePath, opts = {}) {
|
|
|
85
86
|
}
|
|
86
87
|
}
|
|
87
88
|
}
|
|
88
|
-
// Fall back to npm package default
|
|
89
|
-
let fromNpmDefault = false;
|
|
90
89
|
if (!content) {
|
|
91
|
-
|
|
92
|
-
|
|
90
|
+
logWarning('Could not find CLAUDE.md template — skipping deployment');
|
|
91
|
+
return;
|
|
93
92
|
}
|
|
94
93
|
try {
|
|
95
94
|
writeFileSync(claudeMdPath, content);
|
|
96
|
-
|
|
97
|
-
logSuccess('Deployed CLAUDE.md from npm package default (customize mx-agent-system/agent-config/CLAUDE.md.template to override)');
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
logSuccess('Deployed CLAUDE.md from template');
|
|
101
|
-
}
|
|
95
|
+
logSuccess('Deployed CLAUDE.md from template');
|
|
102
96
|
}
|
|
103
97
|
catch {
|
|
104
98
|
logWarning('Could not write CLAUDE.md');
|
|
@@ -110,10 +104,10 @@ export function deployClaudeMd(projectRoot, worktreePath, opts = {}) {
|
|
|
110
104
|
* Matches the format produced by writeWorktreeClaudeLocal in operations.ts.
|
|
111
105
|
*
|
|
112
106
|
* If the project root has a CLAUDE.local.md, its content is prepended above
|
|
113
|
-
* the worktree isolation rules.
|
|
107
|
+
* the worktree isolation rules (same merge behaviour as worktree-cli).
|
|
114
108
|
*/
|
|
115
109
|
export function writeClaudeLocal(opts) {
|
|
116
|
-
const { projectRoot, worktreePath, worktreeName, branch, slot } = opts;
|
|
110
|
+
const { projectRoot, worktreePath, worktreeName, branch, slot, projectSlug = '' } = opts;
|
|
117
111
|
const localMdPath = join(worktreePath, 'CLAUDE.local.md');
|
|
118
112
|
// Check if main workspace has a CLAUDE.local.md to merge
|
|
119
113
|
let mainLocalContent = '';
|
|
@@ -147,7 +141,17 @@ You are working in an isolated worktree. Follow these rules strictly.
|
|
|
147
141
|
4. **Do not switch branches.** Stay on \`${branch || 'your current branch'}\`. Branch switching is blocked.
|
|
148
142
|
5. **Do not merge or push to main.** Create a PR instead using \`gh pr create\`.
|
|
149
143
|
6. **Push to your branch** with \`git push -u origin ${branch || '<your-branch>'}\`.
|
|
144
|
+
${projectSlug ? `
|
|
145
|
+
## Memory Key Scope
|
|
146
|
+
|
|
147
|
+
This project uses a scoped prefix for all named memories to prevent collisions across projects sharing the same MemNexus account.
|
|
150
148
|
|
|
149
|
+
- **Project slug:** \`${projectSlug}\`
|
|
150
|
+
- **Named memory key format:** \`${projectSlug}-<team>-<type>\`
|
|
151
|
+
- **Example:** \`${projectSlug}-product-leader-state\` (never \`product-leader-state\`)
|
|
152
|
+
|
|
153
|
+
All \`mx memories create --name\` and \`mx memories update --name\` calls MUST use the \`${projectSlug}-\` prefix. This is enforced — keys without the prefix will collide with other projects on this account.
|
|
154
|
+
` : ''}
|
|
151
155
|
# currentDate
|
|
152
156
|
Today's date is ${new Date().toISOString().slice(0, 10)}.
|
|
153
157
|
`;
|
|
@@ -167,265 +171,59 @@ Today's date is ${new Date().toISOString().slice(0, 10)}.
|
|
|
167
171
|
* Sync .claude/settings.json and .claude/hooks/worktree-guard.sh from the
|
|
168
172
|
* platform team's canonical source: <configSource>/ on origin/<baseBranch>.
|
|
169
173
|
*
|
|
170
|
-
* Config resolution order for each file (3-step):
|
|
171
|
-
* 1. `git show origin/<baseBranch>:<path>` — remote (tamper-resistant)
|
|
172
|
-
* 2. Local <projectRoot>/<configSource>/<file> — offline fallback
|
|
173
|
-
* 3. Embedded npm package template — always available, never fails
|
|
174
|
-
*
|
|
175
174
|
* Uses `git show origin/<baseBranch>:<path>` to read file content directly from
|
|
176
175
|
* the remote object store — no checkout/unstage dance, no staged files left behind.
|
|
177
176
|
*
|
|
178
177
|
* Source of truth for all agent configuration is <configSource>/.
|
|
179
178
|
* Changes to agent permissions or hooks must go through a platform team PR.
|
|
180
|
-
*
|
|
181
|
-
* Atomicity guarantee (PLAT-014): both files are resolved to content before
|
|
182
|
-
* any writes occur — either both are written or neither is.
|
|
183
179
|
*/
|
|
184
180
|
export function syncClaudeConfig(worktreePath, opts = {}) {
|
|
185
181
|
const baseBranch = opts.baseBranch ?? 'main';
|
|
186
182
|
const configSource = opts.configSource ?? 'mx-agent-system/agent-config';
|
|
187
|
-
const projectRoot = opts.projectRoot;
|
|
188
183
|
logDim(`Syncing agent config from ${configSource}/ (origin/${baseBranch})...`);
|
|
189
|
-
// ── 1. Fetch
|
|
184
|
+
// ── 1. Fetch ──────────────────────────────────────────────────────────
|
|
190
185
|
const fetchR = spawnSync('git', ['fetch', 'origin', baseBranch, '--quiet'], {
|
|
191
186
|
cwd: worktreePath, stdio: 'pipe',
|
|
192
187
|
});
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
}
|
|
197
|
-
// ── 2. Resolve both files (3-step per file) ───────────────────────────
|
|
198
|
-
// settings.json
|
|
199
|
-
let settingsContent = null;
|
|
200
|
-
let settingsSource = 'npm';
|
|
201
|
-
if (fetchSucceeded) {
|
|
202
|
-
const r = spawnSync('git', ['show', `origin/${baseBranch}:${configSource}/settings.json`], {
|
|
203
|
-
cwd: worktreePath, encoding: 'utf-8', stdio: 'pipe',
|
|
204
|
-
});
|
|
205
|
-
if (r.status === 0 && r.stdout) {
|
|
206
|
-
settingsContent = r.stdout;
|
|
207
|
-
settingsSource = 'remote';
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
if (!settingsContent && projectRoot) {
|
|
211
|
-
const localPath = join(projectRoot, configSource, 'settings.json');
|
|
212
|
-
if (existsSync(localPath)) {
|
|
213
|
-
try {
|
|
214
|
-
settingsContent = readFileSync(localPath, 'utf-8');
|
|
215
|
-
settingsSource = 'local';
|
|
216
|
-
}
|
|
217
|
-
catch {
|
|
218
|
-
// fall through to npm default
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
if (!settingsContent) {
|
|
223
|
-
settingsContent = SETTINGS_JSON_TEMPLATE;
|
|
224
|
-
settingsSource = 'npm';
|
|
225
|
-
}
|
|
226
|
-
// worktree-guard.sh
|
|
227
|
-
let guardContent = null;
|
|
228
|
-
let guardSource = 'npm';
|
|
229
|
-
if (fetchSucceeded) {
|
|
230
|
-
const r = spawnSync('git', ['show', `origin/${baseBranch}:${configSource}/hooks/worktree-guard.sh`], {
|
|
231
|
-
cwd: worktreePath, encoding: 'utf-8', stdio: 'pipe',
|
|
232
|
-
});
|
|
233
|
-
if (r.status === 0 && r.stdout) {
|
|
234
|
-
guardContent = r.stdout;
|
|
235
|
-
guardSource = 'remote';
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
if (!guardContent && projectRoot) {
|
|
239
|
-
const localPath = join(projectRoot, configSource, 'hooks', 'worktree-guard.sh');
|
|
240
|
-
if (existsSync(localPath)) {
|
|
241
|
-
try {
|
|
242
|
-
guardContent = readFileSync(localPath, 'utf-8');
|
|
243
|
-
guardSource = 'local';
|
|
244
|
-
}
|
|
245
|
-
catch {
|
|
246
|
-
// fall through to npm default
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
if (!guardContent) {
|
|
251
|
-
guardContent = WORKTREE_GUARD_SH_TEMPLATE;
|
|
252
|
-
guardSource = 'npm';
|
|
253
|
-
}
|
|
254
|
-
// auto-checkpoint.sh (PreCompact hook)
|
|
255
|
-
let checkpointContent = null;
|
|
256
|
-
let checkpointSource = 'npm';
|
|
257
|
-
if (fetchSucceeded) {
|
|
258
|
-
const r = spawnSync('git', ['show', `origin/${baseBranch}:${configSource}/hooks/auto-checkpoint.sh`], {
|
|
259
|
-
cwd: worktreePath, encoding: 'utf-8', stdio: 'pipe',
|
|
260
|
-
});
|
|
261
|
-
if (r.status === 0 && r.stdout) {
|
|
262
|
-
checkpointContent = r.stdout;
|
|
263
|
-
checkpointSource = 'remote';
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
if (!checkpointContent && projectRoot) {
|
|
267
|
-
const localPath = join(projectRoot, configSource, 'hooks', 'auto-checkpoint.sh');
|
|
268
|
-
if (existsSync(localPath)) {
|
|
269
|
-
try {
|
|
270
|
-
checkpointContent = readFileSync(localPath, 'utf-8');
|
|
271
|
-
checkpointSource = 'local';
|
|
272
|
-
}
|
|
273
|
-
catch {
|
|
274
|
-
// fall through to npm default
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
if (!checkpointContent) {
|
|
279
|
-
checkpointContent = AUTO_CHECKPOINT_SH_TEMPLATE;
|
|
280
|
-
checkpointSource = 'npm';
|
|
281
|
-
}
|
|
282
|
-
// reload-checkpoint.sh (SessionStart hook)
|
|
283
|
-
let reloadContent = null;
|
|
284
|
-
let reloadSource = 'npm';
|
|
285
|
-
if (fetchSucceeded) {
|
|
286
|
-
const r = spawnSync('git', ['show', `origin/${baseBranch}:${configSource}/hooks/reload-checkpoint.sh`], {
|
|
287
|
-
cwd: worktreePath, encoding: 'utf-8', stdio: 'pipe',
|
|
288
|
-
});
|
|
289
|
-
if (r.status === 0 && r.stdout) {
|
|
290
|
-
reloadContent = r.stdout;
|
|
291
|
-
reloadSource = 'remote';
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
if (!reloadContent && projectRoot) {
|
|
295
|
-
const localPath = join(projectRoot, configSource, 'hooks', 'reload-checkpoint.sh');
|
|
296
|
-
if (existsSync(localPath)) {
|
|
297
|
-
try {
|
|
298
|
-
reloadContent = readFileSync(localPath, 'utf-8');
|
|
299
|
-
reloadSource = 'local';
|
|
300
|
-
}
|
|
301
|
-
catch {
|
|
302
|
-
// fall through to npm default
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
if (!reloadContent) {
|
|
307
|
-
reloadContent = RELOAD_CHECKPOINT_SH_TEMPLATE;
|
|
308
|
-
reloadSource = 'npm';
|
|
309
|
-
}
|
|
310
|
-
// set-terminal-appearance.sh (SessionStart hook — all sessions)
|
|
311
|
-
let appearanceContent = null;
|
|
312
|
-
let appearanceSource = 'npm';
|
|
313
|
-
if (fetchSucceeded) {
|
|
314
|
-
const r = spawnSync('git', ['show', `origin/${baseBranch}:${configSource}/hooks/set-terminal-appearance.sh`], {
|
|
315
|
-
cwd: worktreePath, encoding: 'utf-8', stdio: 'pipe',
|
|
316
|
-
});
|
|
317
|
-
if (r.status === 0 && r.stdout) {
|
|
318
|
-
appearanceContent = r.stdout;
|
|
319
|
-
appearanceSource = 'remote';
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
if (!appearanceContent && projectRoot) {
|
|
323
|
-
const localPath = join(projectRoot, configSource, 'hooks', 'set-terminal-appearance.sh');
|
|
324
|
-
if (existsSync(localPath)) {
|
|
325
|
-
try {
|
|
326
|
-
appearanceContent = readFileSync(localPath, 'utf-8');
|
|
327
|
-
appearanceSource = 'local';
|
|
328
|
-
}
|
|
329
|
-
catch {
|
|
330
|
-
// fall through to npm default
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
if (!appearanceContent) {
|
|
335
|
-
appearanceContent = SET_TERMINAL_APPEARANCE_SH_TEMPLATE;
|
|
336
|
-
appearanceSource = 'npm';
|
|
337
|
-
}
|
|
338
|
-
// mx-guard-hook.sh (PreToolUse hook — pre-push enforcement)
|
|
339
|
-
let mxGuardContent = null;
|
|
340
|
-
let mxGuardSource = 'npm';
|
|
341
|
-
if (fetchSucceeded) {
|
|
342
|
-
const r = spawnSync('git', ['show', `origin/${baseBranch}:${configSource}/hooks/mx-guard-hook.sh`], {
|
|
343
|
-
cwd: worktreePath, encoding: 'utf-8', stdio: 'pipe',
|
|
344
|
-
});
|
|
345
|
-
if (r.status === 0 && r.stdout) {
|
|
346
|
-
mxGuardContent = r.stdout;
|
|
347
|
-
mxGuardSource = 'remote';
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
if (!mxGuardContent && projectRoot) {
|
|
351
|
-
const localPath = join(projectRoot, configSource, 'hooks', 'mx-guard-hook.sh');
|
|
352
|
-
if (existsSync(localPath)) {
|
|
353
|
-
try {
|
|
354
|
-
mxGuardContent = readFileSync(localPath, 'utf-8');
|
|
355
|
-
mxGuardSource = 'local';
|
|
356
|
-
}
|
|
357
|
-
catch {
|
|
358
|
-
// fall through to npm default
|
|
359
|
-
}
|
|
360
|
-
}
|
|
188
|
+
if (fetchR.status !== 0) {
|
|
189
|
+
logWarning(`Could not fetch origin/${baseBranch} — using existing agent config`);
|
|
190
|
+
return;
|
|
361
191
|
}
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
192
|
+
// ── 2. Read both files into memory (fail-all-or-nothing gate) ──────────
|
|
193
|
+
const settingsR = spawnSync('git', ['show', `origin/${baseBranch}:${configSource}/settings.json`], {
|
|
194
|
+
cwd: worktreePath, encoding: 'utf-8', stdio: 'pipe',
|
|
195
|
+
});
|
|
196
|
+
if (settingsR.status !== 0 || !settingsR.stdout) {
|
|
197
|
+
logWarning(`Could not read settings.json from ${configSource}/ — agent config unchanged`);
|
|
198
|
+
return;
|
|
365
199
|
}
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
? 'npm'
|
|
372
|
-
: sources.every(s => s === 'local' || s === 'npm') && sources.some(s => s === 'local')
|
|
373
|
-
? 'local'
|
|
374
|
-
: 'mixed';
|
|
375
|
-
// ── 3. Skip if all files already exist and all resolved from npm defaults ──
|
|
376
|
-
// Avoids downgrading an existing stronger config on a transient fetch failure.
|
|
377
|
-
const settingsPath = join(worktreePath, '.claude', 'settings.json');
|
|
378
|
-
const guardPath = join(worktreePath, '.claude', 'hooks', 'worktree-guard.sh');
|
|
379
|
-
const checkpointPath = join(worktreePath, '.claude', 'hooks', 'auto-checkpoint.sh');
|
|
380
|
-
const reloadPath = join(worktreePath, '.claude', 'hooks', 'reload-checkpoint.sh');
|
|
381
|
-
const appearancePath = join(worktreePath, '.claude', 'hooks', 'set-terminal-appearance.sh');
|
|
382
|
-
const mxGuardPath = join(worktreePath, '.claude', 'hooks', 'mx-guard-hook.sh');
|
|
383
|
-
const allExist = existsSync(settingsPath) && existsSync(guardPath)
|
|
384
|
-
&& existsSync(checkpointPath) && existsSync(reloadPath) && existsSync(appearancePath)
|
|
385
|
-
&& existsSync(mxGuardPath);
|
|
386
|
-
if (allExist && sources.every(s => s === 'npm')) {
|
|
387
|
-
logDim('Agent config already exists — skipping npm defaults (remote fetch unavailable)');
|
|
200
|
+
const guardR = spawnSync('git', ['show', `origin/${baseBranch}:${configSource}/hooks/worktree-guard.sh`], {
|
|
201
|
+
cwd: worktreePath, encoding: 'utf-8', stdio: 'pipe',
|
|
202
|
+
});
|
|
203
|
+
if (guardR.status !== 0 || !guardR.stdout) {
|
|
204
|
+
logWarning(`Could not read worktree-guard.sh from ${configSource}/ — agent config unchanged`);
|
|
388
205
|
return;
|
|
389
206
|
}
|
|
390
|
-
//
|
|
207
|
+
// Both reads succeeded — now write atomically via tmp → rename
|
|
208
|
+
const settingsContent = settingsR.stdout;
|
|
209
|
+
const guardContent = guardR.stdout;
|
|
210
|
+
// ── 3. Ensure target directory exists ────────────────────────────────
|
|
391
211
|
const claudeDir = join(worktreePath, '.claude');
|
|
392
212
|
const hooksDir = join(claudeDir, 'hooks');
|
|
393
213
|
mkdirSync(hooksDir, { recursive: true });
|
|
394
|
-
// ──
|
|
214
|
+
// ── 4. Write to .tmp files ────────────────────────────────────────────
|
|
215
|
+
const settingsPath = join(claudeDir, 'settings.json');
|
|
216
|
+
const guardPath = join(hooksDir, 'worktree-guard.sh');
|
|
395
217
|
const settingsTmp = settingsPath + '.tmp';
|
|
396
218
|
const guardTmp = guardPath + '.tmp';
|
|
397
|
-
const checkpointTmp = checkpointPath + '.tmp';
|
|
398
|
-
const reloadTmp = reloadPath + '.tmp';
|
|
399
|
-
const appearanceTmp = appearancePath + '.tmp';
|
|
400
|
-
const mxGuardTmp = mxGuardPath + '.tmp';
|
|
401
219
|
try {
|
|
402
220
|
writeFileSync(settingsTmp, settingsContent);
|
|
403
221
|
writeFileSync(guardTmp, guardContent);
|
|
404
222
|
chmodSync(guardTmp, 0o755);
|
|
405
|
-
|
|
406
|
-
chmodSync(checkpointTmp, 0o755);
|
|
407
|
-
writeFileSync(reloadTmp, reloadContent);
|
|
408
|
-
chmodSync(reloadTmp, 0o755);
|
|
409
|
-
writeFileSync(appearanceTmp, appearanceContent);
|
|
410
|
-
chmodSync(appearanceTmp, 0o755);
|
|
411
|
-
writeFileSync(mxGuardTmp, mxGuardContent);
|
|
412
|
-
chmodSync(mxGuardTmp, 0o755);
|
|
413
|
-
// ── 6. Atomic rename all into place ──────────────────────────────────
|
|
223
|
+
// ── 5. Atomic rename both into place ─────────────────────────────────
|
|
414
224
|
renameSync(settingsTmp, settingsPath);
|
|
415
225
|
renameSync(guardTmp, guardPath);
|
|
416
|
-
|
|
417
|
-
renameSync(reloadTmp, reloadPath);
|
|
418
|
-
renameSync(appearanceTmp, appearancePath);
|
|
419
|
-
renameSync(mxGuardTmp, mxGuardPath);
|
|
420
|
-
if (overallSource === 'remote') {
|
|
421
|
-
logSuccess(`Agent config synced from ${configSource}/`);
|
|
422
|
-
}
|
|
423
|
-
else if (overallSource === 'local') {
|
|
424
|
-
logSuccess(`Agent config synced from local ${configSource}/`);
|
|
425
|
-
}
|
|
426
|
-
else {
|
|
427
|
-
logSuccess('Agent config synced from npm package defaults');
|
|
428
|
-
}
|
|
226
|
+
logSuccess(`Agent config synced from ${configSource}/`);
|
|
429
227
|
}
|
|
430
228
|
catch (err) {
|
|
431
229
|
// Clean up any tmp files that were written
|
|
@@ -437,33 +235,8 @@ export function syncClaudeConfig(worktreePath, opts = {}) {
|
|
|
437
235
|
unlinkSync(guardTmp);
|
|
438
236
|
}
|
|
439
237
|
catch { /* already gone */ }
|
|
440
|
-
try {
|
|
441
|
-
unlinkSync(checkpointTmp);
|
|
442
|
-
}
|
|
443
|
-
catch { /* already gone */ }
|
|
444
|
-
try {
|
|
445
|
-
unlinkSync(reloadTmp);
|
|
446
|
-
}
|
|
447
|
-
catch { /* already gone */ }
|
|
448
|
-
try {
|
|
449
|
-
unlinkSync(appearanceTmp);
|
|
450
|
-
}
|
|
451
|
-
catch { /* already gone */ }
|
|
452
|
-
try {
|
|
453
|
-
unlinkSync(mxGuardTmp);
|
|
454
|
-
}
|
|
455
|
-
catch { /* already gone */ }
|
|
456
238
|
logWarning(`Could not write agent config: ${err instanceof Error ? err.message : String(err)}`);
|
|
457
239
|
}
|
|
458
|
-
// ── 7. Write .mcp.json (MX MCP server) ───────────────────────────────
|
|
459
|
-
const mcpJsonPath = join(worktreePath, '.mcp.json');
|
|
460
|
-
try {
|
|
461
|
-
writeFileSync(mcpJsonPath, MCP_JSON_TEMPLATE);
|
|
462
|
-
logSuccess('Deployed .mcp.json (MX MCP server)');
|
|
463
|
-
}
|
|
464
|
-
catch (err) {
|
|
465
|
-
logWarning(`Could not write .mcp.json: ${err instanceof Error ? err.message : String(err)}`);
|
|
466
|
-
}
|
|
467
240
|
}
|
|
468
241
|
// ── Terminal appearance (VS Code tab title + color) ───────────────────
|
|
469
242
|
/**
|
|
@@ -510,86 +283,26 @@ function resetTerminalAppearance() {
|
|
|
510
283
|
process.stdout.write(`\x1b]0;\x07`);
|
|
511
284
|
process.stdout.write(`\x1b]633;P;tabColor=\x07`);
|
|
512
285
|
}
|
|
513
|
-
// ── Tool permission bootstrapping ─────────────────────────────────────
|
|
514
|
-
/**
|
|
515
|
-
* Extract the permissions.allow list from SETTINGS_JSON_TEMPLATE.
|
|
516
|
-
* Single source of truth — any change to the template automatically
|
|
517
|
-
* flows through to --allowedTools without maintaining a duplicate list.
|
|
518
|
-
*/
|
|
519
|
-
function getDefaultAllowedTools() {
|
|
520
|
-
try {
|
|
521
|
-
const parsed = JSON.parse(SETTINGS_JSON_TEMPLATE);
|
|
522
|
-
const allow = parsed?.permissions?.allow;
|
|
523
|
-
if (Array.isArray(allow) && allow.length > 0)
|
|
524
|
-
return allow;
|
|
525
|
-
}
|
|
526
|
-
catch {
|
|
527
|
-
// Template parse failure — should never happen but fall back to core tools
|
|
528
|
-
}
|
|
529
|
-
return ['Bash', 'Read', 'Edit', 'Write', 'Glob', 'Grep',
|
|
530
|
-
'WebFetch', 'WebSearch', 'Task', 'NotebookEdit'];
|
|
531
|
-
}
|
|
532
|
-
const DEFAULT_ALLOWED_TOOLS = getDefaultAllowedTools();
|
|
533
|
-
/** Safe pattern for tool names — blocks flag injection (entries starting with -). */
|
|
534
|
-
const SAFE_TOOL_NAME = /^[A-Za-z][A-Za-z0-9_*():./ -]*$/;
|
|
535
|
-
/**
|
|
536
|
-
* Read the allow list from the worktree's .claude/settings.json.
|
|
537
|
-
* Falls back to DEFAULT_ALLOWED_TOOLS if the file is missing or invalid.
|
|
538
|
-
*
|
|
539
|
-
* Each entry is validated to prevent CLI flag injection (Security R1).
|
|
540
|
-
*/
|
|
541
|
-
function getAllowedTools(worktreePath) {
|
|
542
|
-
const settingsPath = join(worktreePath, '.claude', 'settings.json');
|
|
543
|
-
try {
|
|
544
|
-
const settings = JSON.parse(readFileSync(settingsPath, 'utf-8'));
|
|
545
|
-
const allow = settings?.permissions?.allow;
|
|
546
|
-
if (Array.isArray(allow) && allow.length > 0) {
|
|
547
|
-
const validated = allow.filter((t) => typeof t === 'string' &&
|
|
548
|
-
t.length > 0 &&
|
|
549
|
-
t.length <= 200 &&
|
|
550
|
-
!t.startsWith('-') &&
|
|
551
|
-
SAFE_TOOL_NAME.test(t));
|
|
552
|
-
if (validated.length > 0)
|
|
553
|
-
return validated;
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
catch {
|
|
557
|
-
// File missing or invalid JSON — use defaults
|
|
558
|
-
}
|
|
559
|
-
return DEFAULT_ALLOWED_TOOLS;
|
|
560
|
-
}
|
|
561
286
|
// ── Session launch ────────────────────────────────────────────────────
|
|
562
287
|
/**
|
|
563
288
|
* Exec into a Claude session in the worktree with the given initial prompt.
|
|
564
289
|
* Uses spawnSync so Claude replaces the current process cleanly.
|
|
565
|
-
*
|
|
566
|
-
* Passes --allowedTools to auto-approve standard tools without requiring
|
|
567
|
-
* the user to trust the project's .claude/settings.json first.
|
|
568
|
-
* Deny/ask rules in settings.json still take precedence (deny > ask > allow).
|
|
569
290
|
*/
|
|
570
291
|
export function launchClaudeSession(opts) {
|
|
571
292
|
const { worktreePath, worktreeName, branch, slot, initialPrompt, teamName } = opts;
|
|
572
|
-
const color = AGENT_COLORS[hashTeamName(teamName) % AGENT_COLORS.length];
|
|
573
293
|
const env = {
|
|
574
294
|
...process.env,
|
|
575
295
|
CLAUDE_WORKTREE_PATH: worktreePath,
|
|
576
296
|
CLAUDE_WORKTREE_NAME: worktreeName,
|
|
577
297
|
CLAUDE_WORKTREE_SLOT: String(slot),
|
|
578
298
|
CLAUDE_WORKTREE_BRANCH: branch || '',
|
|
579
|
-
CLAUDE_TEAM_NAME: teamName,
|
|
580
|
-
CLAUDE_TEAM_COLOR: color,
|
|
581
299
|
};
|
|
582
|
-
const allowedTools = getAllowedTools(worktreePath);
|
|
583
300
|
console.log();
|
|
584
301
|
console.log(chalk.bold(' Starting Claude Code...'));
|
|
585
|
-
console.log(chalk.dim(` Auto-approved tools: ${allowedTools.length}`));
|
|
586
302
|
console.log(chalk.dim(' Press Ctrl+C to exit'));
|
|
587
303
|
console.log();
|
|
588
304
|
setTerminalAppearance(teamName);
|
|
589
|
-
const result = spawnSync('claude', [
|
|
590
|
-
'--allowedTools', ...allowedTools,
|
|
591
|
-
'--', initialPrompt,
|
|
592
|
-
], {
|
|
305
|
+
const result = spawnSync('claude', [initialPrompt], {
|
|
593
306
|
cwd: worktreePath,
|
|
594
307
|
env,
|
|
595
308
|
stdio: 'inherit',
|
package/dist/lib/claude.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/lib/claude.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/lib/claude.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/memory.d.ts
CHANGED
|
@@ -32,8 +32,13 @@ export interface TeamMemoryBootstrapResult {
|
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
34
|
* Initialise the three standard named memories for a new team.
|
|
35
|
+
*
|
|
36
|
+
* @param projectSlug - Optional project-scoped prefix (from mx-agent.config.json).
|
|
37
|
+
* When set, keys become `<projectSlug>-<teamSlug>-leader-state` etc., preventing
|
|
38
|
+
* collisions when multiple projects share the same MemNexus account.
|
|
39
|
+
* Defaults to '' (no prefix — backwards compatible).
|
|
35
40
|
*/
|
|
36
|
-
export declare function bootstrapTeamMemories(teamSlug: string, teamDisplayName: string, roleguide: string): TeamMemoryBootstrapResult;
|
|
41
|
+
export declare function bootstrapTeamMemories(teamSlug: string, teamDisplayName: string, roleguide: string, projectSlug?: string): TeamMemoryBootstrapResult;
|
|
37
42
|
/**
|
|
38
43
|
* Log the result of a memory creation step.
|
|
39
44
|
*/
|
package/dist/lib/memory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/lib/memory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,wBAAgB,aAAa,IAAI,OAAO,CAGvC;AAID,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/lib/memory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,wBAAgB,aAAa,IAAI,OAAO,CAGvC;AAID,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAsCjG;AAID,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,YAAY,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,WAAW,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9C;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,EACjB,WAAW,SAAK,GACf,yBAAyB,CAmB3B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAY5F;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAY5E"}
|
package/dist/lib/memory.js
CHANGED
|
@@ -5,7 +5,7 @@ import { spawnSync } from 'child_process';
|
|
|
5
5
|
import chalk from 'chalk';
|
|
6
6
|
// ── mx availability ───────────────────────────────────────────────────
|
|
7
7
|
export function isMxAvailable() {
|
|
8
|
-
const result = spawnSync('mx', ['--version'], { stdio: 'pipe'
|
|
8
|
+
const result = spawnSync('mx', ['--version'], { stdio: 'pipe' });
|
|
9
9
|
return result.status === 0 && !result.error;
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
@@ -27,7 +27,6 @@ export function createNamedMemory(opts) {
|
|
|
27
27
|
const result = spawnSync('mx', args, {
|
|
28
28
|
stdio: 'pipe',
|
|
29
29
|
encoding: 'utf-8',
|
|
30
|
-
timeout: 30_000,
|
|
31
30
|
});
|
|
32
31
|
const stdout = result.stdout || '';
|
|
33
32
|
const stderr = result.stderr || '';
|
|
@@ -39,7 +38,6 @@ export function createNamedMemory(opts) {
|
|
|
39
38
|
const verify = spawnSync('mx', ['memories', 'get', '--name', name], {
|
|
40
39
|
stdio: 'pipe',
|
|
41
40
|
encoding: 'utf-8',
|
|
42
|
-
timeout: 15_000,
|
|
43
41
|
});
|
|
44
42
|
if (verify.status === 0 && !verify.error) {
|
|
45
43
|
ok = true;
|
|
@@ -49,18 +47,24 @@ export function createNamedMemory(opts) {
|
|
|
49
47
|
}
|
|
50
48
|
/**
|
|
51
49
|
* Initialise the three standard named memories for a new team.
|
|
50
|
+
*
|
|
51
|
+
* @param projectSlug - Optional project-scoped prefix (from mx-agent.config.json).
|
|
52
|
+
* When set, keys become `<projectSlug>-<teamSlug>-leader-state` etc., preventing
|
|
53
|
+
* collisions when multiple projects share the same MemNexus account.
|
|
54
|
+
* Defaults to '' (no prefix — backwards compatible).
|
|
52
55
|
*/
|
|
53
|
-
export function bootstrapTeamMemories(teamSlug, teamDisplayName, roleguide) {
|
|
56
|
+
export function bootstrapTeamMemories(teamSlug, teamDisplayName, roleguide, projectSlug = '') {
|
|
57
|
+
const prefix = projectSlug ? `${projectSlug}-` : '';
|
|
54
58
|
const leaderState = createNamedMemory({
|
|
55
|
-
name: `${teamSlug}-leader-state`,
|
|
59
|
+
name: `${prefix}${teamSlug}-leader-state`,
|
|
56
60
|
content: `${teamDisplayName} team leader state — initialized. Roleguide: ${roleguide}. First session: read roleguide, check memories, begin iteration 1.`,
|
|
57
61
|
});
|
|
58
62
|
const iterationLog = createNamedMemory({
|
|
59
|
-
name: `${teamSlug}-iteration-log`,
|
|
63
|
+
name: `${prefix}${teamSlug}-iteration-log`,
|
|
60
64
|
content: `${teamDisplayName} iteration log — initialized. No iterations completed yet.`,
|
|
61
65
|
});
|
|
62
66
|
const knownIssues = createNamedMemory({
|
|
63
|
-
name: `${teamSlug}-known-issues`,
|
|
67
|
+
name: `${prefix}${teamSlug}-known-issues`,
|
|
64
68
|
content: `${teamDisplayName} known issues — initialized. No known issues.`,
|
|
65
69
|
});
|
|
66
70
|
return { leaderState, iterationLog, knownIssues };
|
|
@@ -91,7 +95,6 @@ export function getNamedMemory(name) {
|
|
|
91
95
|
const result = spawnSync('mx', ['memories', 'get', '--name', name], {
|
|
92
96
|
stdio: 'pipe',
|
|
93
97
|
encoding: 'utf-8',
|
|
94
|
-
timeout: 15_000,
|
|
95
98
|
});
|
|
96
99
|
const stdout = result.stdout || '';
|
|
97
100
|
const stderr = result.stderr || '';
|