@memnexus-ai/mx-agent-cli 0.1.1
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/commands/create.d.ts +12 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +169 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/list.d.ts +7 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +58 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/start.d.ts +10 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +93 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +10 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +32 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/catalog.d.ts +49 -0
- package/dist/lib/catalog.d.ts.map +1 -0
- package/dist/lib/catalog.js +112 -0
- package/dist/lib/catalog.js.map +1 -0
- package/dist/lib/claude.d.ts +46 -0
- package/dist/lib/claude.d.ts.map +1 -0
- package/dist/lib/claude.js +187 -0
- package/dist/lib/claude.js.map +1 -0
- package/dist/lib/memory.d.ts +52 -0
- package/dist/lib/memory.d.ts.map +1 -0
- package/dist/lib/memory.js +99 -0
- package/dist/lib/memory.js.map +1 -0
- package/dist/lib/worktree.d.ts +36 -0
- package/dist/lib/worktree.d.ts.map +1 -0
- package/dist/lib/worktree.js +209 -0
- package/dist/lib/worktree.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mx-agent create --roleguide <path> [--name <slug>]
|
|
3
|
+
*
|
|
4
|
+
* Creates a new agent team worktree, initialises team memories, and
|
|
5
|
+
* creates a catalog entry.
|
|
6
|
+
*/
|
|
7
|
+
export interface CreateOptions {
|
|
8
|
+
roleguide: string;
|
|
9
|
+
name?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function runCreate(options: CreateOptions): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA+BH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA2JrE"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mx-agent create --roleguide <path> [--name <slug>]
|
|
3
|
+
*
|
|
4
|
+
* Creates a new agent team worktree, initialises team memories, and
|
|
5
|
+
* creates a catalog entry.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, mkdirSync } from 'fs';
|
|
8
|
+
import { join, basename } from 'path';
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
import { findProjectRoot, assignSlot, getCurrentBranch, fetchOrigin, createGitWorktree, addToGitSafeDirectory, generateBranchName, generateWorktreeDirName, } from '../lib/worktree.js';
|
|
11
|
+
import { deployClaudeMd, writeClaudeLocal, logSuccess, logWarning, logDim } from '../lib/claude.js';
|
|
12
|
+
import { writeTeamCatalog, slugToDisplayName } from '../lib/catalog.js';
|
|
13
|
+
import { isMxAvailable, bootstrapTeamMemories, logMemoryResult } from '../lib/memory.js';
|
|
14
|
+
/**
|
|
15
|
+
* Infer a team slug from a roleguide filename.
|
|
16
|
+
* e.g. "retrieval-leader.md" → "retrieval"
|
|
17
|
+
* "devops-pipeline-leader.md" → "devops-pipeline"
|
|
18
|
+
* "marketing.md" → "marketing"
|
|
19
|
+
*/
|
|
20
|
+
function inferSlugFromRoleguide(roleguide) {
|
|
21
|
+
const filename = basename(roleguide, '.md');
|
|
22
|
+
// Strip common suffixes
|
|
23
|
+
return filename.replace(/-leader$/, '').replace(/-roleguide$/, '');
|
|
24
|
+
}
|
|
25
|
+
export async function runCreate(options) {
|
|
26
|
+
const { roleguide } = options;
|
|
27
|
+
// Resolve team slug
|
|
28
|
+
const slug = options.name ?? inferSlugFromRoleguide(roleguide);
|
|
29
|
+
if (!slug) {
|
|
30
|
+
console.error(chalk.red('Error: Could not determine team slug. Use --name to specify it explicitly.'));
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
// Defense-in-depth: validate slug before use in any shell command or file path
|
|
34
|
+
const SLUG_RE = /^[a-z][a-z0-9-]{0,48}[a-z0-9]$/;
|
|
35
|
+
if (!SLUG_RE.test(slug)) {
|
|
36
|
+
console.error(chalk.red(`Error: Invalid team slug "${slug}".`));
|
|
37
|
+
console.error(chalk.dim(' Slug must match ^[a-z][a-z0-9-]{0,48}[a-z0-9]$ (lowercase, digits, hyphens; 2–50 chars).'));
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
const displayName = slugToDisplayName(slug);
|
|
41
|
+
let projectRoot;
|
|
42
|
+
try {
|
|
43
|
+
projectRoot = findProjectRoot();
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
console.error(chalk.red(`Error: ${err instanceof Error ? err.message : String(err)}`));
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
console.log();
|
|
50
|
+
console.log(chalk.cyan.bold('Creating Agent Team'));
|
|
51
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
52
|
+
console.log(` ${chalk.bold('Team:')} ${slug}`);
|
|
53
|
+
console.log(` ${chalk.bold('Display:')} ${displayName}`);
|
|
54
|
+
console.log(` ${chalk.bold('Roleguide:')} ${roleguide}`);
|
|
55
|
+
console.log(` ${chalk.bold('Root:')} ${projectRoot}`);
|
|
56
|
+
console.log();
|
|
57
|
+
// ── 1. Slot allocation ─────────────────────────────────────────────
|
|
58
|
+
let slot;
|
|
59
|
+
try {
|
|
60
|
+
slot = assignSlot(projectRoot, slug);
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
console.error(chalk.red(`Error: ${err instanceof Error ? err.message : String(err)}`));
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
// ── 2. Worktree path ───────────────────────────────────────────────
|
|
67
|
+
const worktreeDirName = generateWorktreeDirName(slug);
|
|
68
|
+
const worktreePath = join(projectRoot, '.worktrees', worktreeDirName);
|
|
69
|
+
const branch = generateBranchName(slug);
|
|
70
|
+
console.log(` ${chalk.bold('Worktree:')} ${worktreePath}`);
|
|
71
|
+
console.log(` ${chalk.bold('Branch:')} ${branch}`);
|
|
72
|
+
console.log(` ${chalk.bold('Slot:')} ${slot}`);
|
|
73
|
+
console.log();
|
|
74
|
+
if (existsSync(worktreePath)) {
|
|
75
|
+
console.error(chalk.red(`Error: Worktree already exists at ${worktreePath}`));
|
|
76
|
+
console.error(chalk.dim(' Remove it first, or use a different --name.'));
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
// Ensure .worktrees/ directory exists
|
|
80
|
+
const worktreesDir = join(projectRoot, '.worktrees');
|
|
81
|
+
if (!existsSync(worktreesDir)) {
|
|
82
|
+
mkdirSync(worktreesDir, { recursive: true });
|
|
83
|
+
}
|
|
84
|
+
// ── 3. Fetch origin ────────────────────────────────────────────────
|
|
85
|
+
logDim('Fetching latest from remote...');
|
|
86
|
+
fetchOrigin(projectRoot);
|
|
87
|
+
// ── 4. Create git worktree ─────────────────────────────────────────
|
|
88
|
+
console.log(chalk.dim(' Creating git worktree...'));
|
|
89
|
+
try {
|
|
90
|
+
createGitWorktree(worktreePath, branch, 'main', projectRoot);
|
|
91
|
+
logSuccess('Git worktree created');
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
console.error(chalk.red(`Error creating worktree: ${err instanceof Error ? err.message : String(err)}`));
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
addToGitSafeDirectory(worktreePath);
|
|
98
|
+
// ── 5. Deploy CLAUDE.md ────────────────────────────────────────────
|
|
99
|
+
deployClaudeMd(projectRoot, worktreePath);
|
|
100
|
+
// ── 6. Generate CLAUDE.local.md ────────────────────────────────────
|
|
101
|
+
const currentBranch = getCurrentBranch(worktreePath) || branch;
|
|
102
|
+
writeClaudeLocal({
|
|
103
|
+
projectRoot,
|
|
104
|
+
worktreePath,
|
|
105
|
+
worktreeName: worktreeDirName,
|
|
106
|
+
branch: currentBranch,
|
|
107
|
+
slot,
|
|
108
|
+
});
|
|
109
|
+
// ── 7. Initialise named memories via mx ───────────────────────────
|
|
110
|
+
let memoriesOk = false;
|
|
111
|
+
console.log();
|
|
112
|
+
console.log(chalk.bold(' Initialising team memories:'));
|
|
113
|
+
if (!isMxAvailable()) {
|
|
114
|
+
logWarning('mx CLI not found — skipping memory initialisation. Run manually:');
|
|
115
|
+
console.log(chalk.dim(` mx memories create --name "${slug}-leader-state" --conversation-id NEW --content "..."`));
|
|
116
|
+
console.log(chalk.dim(` mx memories create --name "${slug}-iteration-log" --conversation-id NEW --content "..."`));
|
|
117
|
+
console.log(chalk.dim(` mx memories create --name "${slug}-known-issues" --conversation-id NEW --content "..."`));
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
const results = bootstrapTeamMemories(slug, displayName, roleguide);
|
|
121
|
+
logMemoryResult(`${slug}-leader-state`, results.leaderState);
|
|
122
|
+
logMemoryResult(`${slug}-iteration-log`, results.iterationLog);
|
|
123
|
+
logMemoryResult(`${slug}-known-issues`, results.knownIssues);
|
|
124
|
+
memoriesOk = results.leaderState.ok && results.iterationLog.ok && results.knownIssues.ok;
|
|
125
|
+
}
|
|
126
|
+
// ── 8. Write catalog entry ─────────────────────────────────────────
|
|
127
|
+
console.log();
|
|
128
|
+
console.log(chalk.bold(' Writing catalog entry:'));
|
|
129
|
+
try {
|
|
130
|
+
writeTeamCatalog(projectRoot, {
|
|
131
|
+
slug,
|
|
132
|
+
displayName,
|
|
133
|
+
roleguide,
|
|
134
|
+
namedMemories: [
|
|
135
|
+
`${slug}-leader-state`,
|
|
136
|
+
`${slug}-iteration-log`,
|
|
137
|
+
`${slug}-known-issues`,
|
|
138
|
+
],
|
|
139
|
+
});
|
|
140
|
+
logSuccess(`mx-agent-system/teams/${slug}.md`);
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
logWarning(`Could not write catalog entry: ${err instanceof Error ? err.message : String(err)}`);
|
|
144
|
+
}
|
|
145
|
+
// ── 9. Completion summary ──────────────────────────────────────────
|
|
146
|
+
console.log();
|
|
147
|
+
console.log(chalk.green.bold('Team Created!'));
|
|
148
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
149
|
+
console.log();
|
|
150
|
+
console.log(chalk.bold(' Definition of Done checklist:'));
|
|
151
|
+
console.log(chalk.green(` [✓] Git worktree: ${worktreePath}`));
|
|
152
|
+
console.log(chalk.green(` [✓] Branch: ${branch}`));
|
|
153
|
+
console.log(chalk.green(` [✓] CLAUDE.md deployed from template`));
|
|
154
|
+
console.log(chalk.green(` [✓] CLAUDE.local.md generated (slot ${slot})`));
|
|
155
|
+
const memoriesLabel = `${slug}-leader-state, ${slug}-iteration-log, ${slug}-known-issues`;
|
|
156
|
+
if (memoriesOk) {
|
|
157
|
+
console.log(chalk.green(` [✓] Named memories: ${memoriesLabel}`));
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
console.log(chalk.yellow(` [⚠] Named memories: ${memoriesLabel} (create manually — see above)`));
|
|
161
|
+
}
|
|
162
|
+
console.log(chalk.green(` [✓] Catalog entry: mx-agent-system/teams/${slug}.md`));
|
|
163
|
+
console.log();
|
|
164
|
+
console.log(chalk.bold(' Next steps:'));
|
|
165
|
+
console.log(` Start this team: ${chalk.cyan(`mx-agent start ${slug}`)}`);
|
|
166
|
+
console.log(` Check status: ${chalk.cyan(`mx-agent status ${slug}`)}`);
|
|
167
|
+
console.log();
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CA8D7C"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent list
|
|
3
|
+
*
|
|
4
|
+
* Lists all teams from the catalog with their worktree status.
|
|
5
|
+
*/
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import { findProjectRoot, findWorktreePath } from '../lib/worktree.js';
|
|
8
|
+
import { listTeams } from '../lib/catalog.js';
|
|
9
|
+
export async function runList() {
|
|
10
|
+
let projectRoot;
|
|
11
|
+
try {
|
|
12
|
+
projectRoot = findProjectRoot();
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
console.error(chalk.red(`Error: ${err instanceof Error ? err.message : String(err)}`));
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
const teams = listTeams(projectRoot);
|
|
19
|
+
console.log();
|
|
20
|
+
console.log(chalk.cyan.bold('Agent Teams'));
|
|
21
|
+
console.log(chalk.dim('─'.repeat(70)));
|
|
22
|
+
if (teams.length === 0) {
|
|
23
|
+
console.log(chalk.dim(' No teams found.'));
|
|
24
|
+
console.log(chalk.dim(' Create one with: agent create --roleguide <path>'));
|
|
25
|
+
console.log();
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Header row
|
|
29
|
+
const colW = { name: 18, display: 24, status: 12, roleguide: 40 };
|
|
30
|
+
console.log(chalk.bold(` ${'Team'.padEnd(colW.name)}${'Display Name'.padEnd(colW.display)}${'Status'.padEnd(colW.status)}Roleguide`));
|
|
31
|
+
console.log(chalk.dim(' ' + '─'.repeat(colW.name + colW.display + colW.status + colW.roleguide)));
|
|
32
|
+
for (const team of teams) {
|
|
33
|
+
const worktreePath = findWorktreePath(projectRoot, team.slug);
|
|
34
|
+
let statusText;
|
|
35
|
+
let statusColor;
|
|
36
|
+
if (!worktreePath) {
|
|
37
|
+
statusText = 'not created';
|
|
38
|
+
statusColor = chalk.dim;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
// A simple heuristic: if the worktree path exists, it's "stopped" unless
|
|
42
|
+
// we can detect a running process (which is complex — just report "ready").
|
|
43
|
+
statusText = 'ready';
|
|
44
|
+
statusColor = chalk.green;
|
|
45
|
+
}
|
|
46
|
+
const roleguideDisplay = team.roleguide.length > colW.roleguide - 2
|
|
47
|
+
? '...' + team.roleguide.slice(-(colW.roleguide - 5))
|
|
48
|
+
: team.roleguide;
|
|
49
|
+
console.log(` ${chalk.white(team.slug.padEnd(colW.name))}` +
|
|
50
|
+
`${team.displayName.padEnd(colW.display)}` +
|
|
51
|
+
`${statusColor(statusText.padEnd(colW.status))}` +
|
|
52
|
+
chalk.dim(roleguideDisplay));
|
|
53
|
+
}
|
|
54
|
+
console.log();
|
|
55
|
+
console.log(chalk.dim(` ${teams.length} team(s) in catalog.`));
|
|
56
|
+
console.log();
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent start <name>
|
|
3
|
+
*
|
|
4
|
+
* Starts an isolated Claude session for a named team in its worktree.
|
|
5
|
+
*/
|
|
6
|
+
export interface StartOptions {
|
|
7
|
+
name: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function runStart(options: StartOptions): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA8FnE"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent start <name>
|
|
3
|
+
*
|
|
4
|
+
* Starts an isolated Claude session for a named team in its worktree.
|
|
5
|
+
*/
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import { findProjectRoot, findWorktreePath, getSlot, getCurrentBranch, } from '../lib/worktree.js';
|
|
8
|
+
import { syncClaudeConfig, deployClaudeMd, writeClaudeLocal, launchClaudeSession } from '../lib/claude.js';
|
|
9
|
+
import { getTeam } from '../lib/catalog.js';
|
|
10
|
+
export async function runStart(options) {
|
|
11
|
+
const { name } = options;
|
|
12
|
+
let projectRoot;
|
|
13
|
+
try {
|
|
14
|
+
projectRoot = findProjectRoot();
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
console.error(chalk.red(`Error: ${err instanceof Error ? err.message : String(err)}`));
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
// ── 1. Locate the worktree ─────────────────────────────────────────
|
|
21
|
+
const worktreePath = findWorktreePath(projectRoot, name);
|
|
22
|
+
if (!worktreePath) {
|
|
23
|
+
console.error(chalk.red(`Team '${name}' not found.`));
|
|
24
|
+
console.error(chalk.dim(` No worktree found in ${projectRoot}/.worktrees/ matching '${name}' or '${name}-*'`));
|
|
25
|
+
console.error(chalk.dim(` Run: agent create --roleguide <path> --name ${name}`));
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
// ── 2. Resolve slot ────────────────────────────────────────────────
|
|
29
|
+
// The slot key in .slots.json may be the full dir name (e.g. "retrieval-20260222")
|
|
30
|
+
// or just the team slug. Try both.
|
|
31
|
+
const { basename } = await import('path');
|
|
32
|
+
const worktreeDirName = basename(worktreePath);
|
|
33
|
+
let slot = getSlot(projectRoot, worktreeDirName);
|
|
34
|
+
if (slot === null) {
|
|
35
|
+
// Try the short name
|
|
36
|
+
slot = getSlot(projectRoot, name);
|
|
37
|
+
}
|
|
38
|
+
if (slot === null) {
|
|
39
|
+
slot = 0; // fallback — won't break anything
|
|
40
|
+
}
|
|
41
|
+
// ── 3. Resolve roleguide from catalog ─────────────────────────────
|
|
42
|
+
const team = getTeam(projectRoot, name);
|
|
43
|
+
let roleguide;
|
|
44
|
+
if (team?.roleguide) {
|
|
45
|
+
roleguide = team.roleguide;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
// Fallback convention
|
|
49
|
+
roleguide = `mx-agent-system/roleguides/${name}-leader.md`;
|
|
50
|
+
}
|
|
51
|
+
const branch = getCurrentBranch(worktreePath);
|
|
52
|
+
console.log();
|
|
53
|
+
console.log(chalk.cyan.bold('Starting Agent Team'));
|
|
54
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
55
|
+
console.log(` ${chalk.bold('Team:')} ${name}`);
|
|
56
|
+
console.log(` ${chalk.bold('Path:')} ${worktreePath}`);
|
|
57
|
+
console.log(` ${chalk.bold('Branch:')} ${branch || 'unknown'}`);
|
|
58
|
+
console.log(` ${chalk.bold('Slot:')} ${slot}`);
|
|
59
|
+
console.log(` ${chalk.bold('Roleguide:')} ${roleguide}`);
|
|
60
|
+
console.log();
|
|
61
|
+
// ── 4. Sync Claude config from origin/main ────────────────────────
|
|
62
|
+
syncClaudeConfig(worktreePath);
|
|
63
|
+
// ── 5. Deploy fresh CLAUDE.md ─────────────────────────────────────
|
|
64
|
+
deployClaudeMd(projectRoot, worktreePath);
|
|
65
|
+
// ── 6. Regenerate CLAUDE.local.md ────────────────────────────────
|
|
66
|
+
writeClaudeLocal({
|
|
67
|
+
projectRoot,
|
|
68
|
+
worktreePath,
|
|
69
|
+
worktreeName: worktreeDirName,
|
|
70
|
+
branch,
|
|
71
|
+
slot,
|
|
72
|
+
});
|
|
73
|
+
// ── 7. Print isolation summary ─────────────────────────────────────
|
|
74
|
+
console.log();
|
|
75
|
+
console.log(chalk.bold.green(' Isolation Enabled:'));
|
|
76
|
+
console.log(chalk.dim(' ─────────────────────────────────────────────'));
|
|
77
|
+
console.log(` ${chalk.green('✓')} Directory restricted to worktree`);
|
|
78
|
+
console.log(` ${chalk.green('✓')} git checkout/switch to main blocked`);
|
|
79
|
+
console.log(` ${chalk.green('✓')} git push origin main blocked`);
|
|
80
|
+
console.log();
|
|
81
|
+
// ── 8. Build initial prompt ────────────────────────────────────────
|
|
82
|
+
const initialPrompt = `You are assuming the role of team lead per this roleguide - ${roleguide} ` +
|
|
83
|
+
`read the doc and get familiar. then check your memories and get up to speed.`;
|
|
84
|
+
// ── 9. Launch Claude ───────────────────────────────────────────────
|
|
85
|
+
launchClaudeSession({
|
|
86
|
+
worktreePath,
|
|
87
|
+
worktreeName: worktreeDirName,
|
|
88
|
+
branch,
|
|
89
|
+
slot,
|
|
90
|
+
initialPrompt,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent status <name>
|
|
3
|
+
*
|
|
4
|
+
* Fetches and displays the team's leader-state named memory.
|
|
5
|
+
*/
|
|
6
|
+
export interface StatusOptions {
|
|
7
|
+
name: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function runStatus(options: StatusOptions): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BrE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent status <name>
|
|
3
|
+
*
|
|
4
|
+
* Fetches and displays the team's leader-state named memory.
|
|
5
|
+
*/
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import { isMxAvailable, getNamedMemory } from '../lib/memory.js';
|
|
8
|
+
export async function runStatus(options) {
|
|
9
|
+
const { name } = options;
|
|
10
|
+
if (!isMxAvailable()) {
|
|
11
|
+
console.error(chalk.red('Error: mx CLI not found. Install it and ensure it is on your PATH.'));
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
const memoryName = `${name}-leader-state`;
|
|
15
|
+
console.log();
|
|
16
|
+
console.log(chalk.cyan.bold(`Team Status: ${name}`));
|
|
17
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
18
|
+
console.log(chalk.dim(` Memory key: ${memoryName}`));
|
|
19
|
+
console.log();
|
|
20
|
+
const result = getNamedMemory(memoryName);
|
|
21
|
+
if (!result.ok || !result.output) {
|
|
22
|
+
console.log(chalk.yellow(` No state found for team '${name}'. Has the team been started yet?`));
|
|
23
|
+
console.log(chalk.dim(` Expected named memory: ${memoryName}`));
|
|
24
|
+
console.log(chalk.dim(` Run: agent create --roleguide <path> --name ${name}`));
|
|
25
|
+
console.log();
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Print the raw output — the mx CLI renders it already
|
|
29
|
+
console.log(result.output);
|
|
30
|
+
console.log();
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMjE,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAsB;IACpD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAEzB,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC,CAAC;QAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,IAAI,eAAe,CAAC;IAC1C,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAE1C,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8BAA8B,IAAI,mCAAmC,CAAC,CAAC,CAAC;QACjG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,UAAU,EAAE,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iDAAiD,IAAI,EAAE,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IAED,uDAAuD;IACvD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* mx-agent-cli — CLI for creating and managing AI agent teams.
|
|
4
|
+
*
|
|
5
|
+
* Commands:
|
|
6
|
+
* mx-agent create --roleguide <path> [--name <slug>]
|
|
7
|
+
* mx-agent start <name>
|
|
8
|
+
* mx-agent list
|
|
9
|
+
* mx-agent status <name>
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* mx-agent-cli — CLI for creating and managing AI agent teams.
|
|
4
|
+
*
|
|
5
|
+
* Commands:
|
|
6
|
+
* mx-agent create --roleguide <path> [--name <slug>]
|
|
7
|
+
* mx-agent start <name>
|
|
8
|
+
* mx-agent list
|
|
9
|
+
* mx-agent status <name>
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
import { runCreate } from './commands/create.js';
|
|
13
|
+
import { runStart } from './commands/start.js';
|
|
14
|
+
import { runList } from './commands/list.js';
|
|
15
|
+
import { runStatus } from './commands/status.js';
|
|
16
|
+
const program = new Command();
|
|
17
|
+
program
|
|
18
|
+
.name('mx-agent')
|
|
19
|
+
.description('CLI for creating and managing AI agent teams')
|
|
20
|
+
.version('0.1.0');
|
|
21
|
+
// ── create ─────────────────────────────────────────────────────────────
|
|
22
|
+
program
|
|
23
|
+
.command('create')
|
|
24
|
+
.description('Create a new agent team: worktree + memories + catalog entry')
|
|
25
|
+
.requiredOption('--roleguide <path>', 'Path to the team roleguide markdown file')
|
|
26
|
+
.option('--name <slug>', 'Team slug (kebab-case). Inferred from roleguide filename if omitted.')
|
|
27
|
+
.action((opts) => {
|
|
28
|
+
runCreate(opts).catch((err) => {
|
|
29
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
30
|
+
process.exit(1);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
// ── start ──────────────────────────────────────────────────────────────
|
|
34
|
+
program
|
|
35
|
+
.command('start')
|
|
36
|
+
.description('Start an isolated Claude session for a team')
|
|
37
|
+
.argument('<name>', 'Team slug (e.g. retrieval)')
|
|
38
|
+
.action((name) => {
|
|
39
|
+
runStart({ name }).catch((err) => {
|
|
40
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
41
|
+
process.exit(1);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
// ── list ───────────────────────────────────────────────────────────────
|
|
45
|
+
program
|
|
46
|
+
.command('list')
|
|
47
|
+
.description('List all teams and their worktree status')
|
|
48
|
+
.action(() => {
|
|
49
|
+
runList().catch((err) => {
|
|
50
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
51
|
+
process.exit(1);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
// ── status ─────────────────────────────────────────────────────────────
|
|
55
|
+
program
|
|
56
|
+
.command('status')
|
|
57
|
+
.description("Show a team's current leader-state memory")
|
|
58
|
+
.argument('<name>', 'Team slug (e.g. retrieval)')
|
|
59
|
+
.action((name) => {
|
|
60
|
+
runStatus({ name }).catch((err) => {
|
|
61
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
62
|
+
process.exit(1);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
program.parse(process.argv);
|
|
66
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads and writes team catalog entries from mx-agent-system/teams/*.md.
|
|
3
|
+
*/
|
|
4
|
+
export interface TeamEntry {
|
|
5
|
+
/** Kebab-case slug, e.g. "retrieval" */
|
|
6
|
+
slug: string;
|
|
7
|
+
/** Human-readable display name */
|
|
8
|
+
displayName: string;
|
|
9
|
+
/** Path to the roleguide markdown file */
|
|
10
|
+
roleguide: string;
|
|
11
|
+
/** Named memory keys allocated for this team */
|
|
12
|
+
namedMemories: string[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Derive a display name from the slug.
|
|
16
|
+
* e.g. "retrieval" → "Retrieval"
|
|
17
|
+
*/
|
|
18
|
+
export declare function slugToDisplayName(slug: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Serialise a TeamEntry to markdown (matches the format of pipeline.md).
|
|
21
|
+
*/
|
|
22
|
+
export declare function serializeTeamEntry(entry: TeamEntry): string;
|
|
23
|
+
/**
|
|
24
|
+
* Parse a team catalog file into a TeamEntry.
|
|
25
|
+
* Returns null if the file cannot be parsed.
|
|
26
|
+
*/
|
|
27
|
+
export declare function parseTeamEntry(filePath: string): TeamEntry | null;
|
|
28
|
+
/**
|
|
29
|
+
* Return the path to the teams catalog directory.
|
|
30
|
+
*/
|
|
31
|
+
export declare function getTeamsCatalogDir(projectRoot: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Return the path to a specific team's catalog file.
|
|
34
|
+
*/
|
|
35
|
+
export declare function getTeamCatalogPath(projectRoot: string, slug: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* List all teams from the catalog directory.
|
|
38
|
+
* Skips README.md.
|
|
39
|
+
*/
|
|
40
|
+
export declare function listTeams(projectRoot: string): TeamEntry[];
|
|
41
|
+
/**
|
|
42
|
+
* Look up a single team entry by slug.
|
|
43
|
+
*/
|
|
44
|
+
export declare function getTeam(projectRoot: string, slug: string): TeamEntry | null;
|
|
45
|
+
/**
|
|
46
|
+
* Write a team catalog entry (creates the file).
|
|
47
|
+
*/
|
|
48
|
+
export declare function writeTeamCatalog(projectRoot: string, entry: TeamEntry): void;
|
|
49
|
+
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/lib/catalog.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,SAAS;IACxB,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AASD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAW3D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CA+BjE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,CAW1D;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAI3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAK5E"}
|