@bradtaylorsf/alpha-loop 1.0.0 → 1.1.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 (41) hide show
  1. package/README.md +34 -4
  2. package/dist/cli.js +25 -5
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/history.js +196 -93
  5. package/dist/commands/history.js.map +1 -1
  6. package/dist/commands/init.d.ts +1 -1
  7. package/dist/commands/init.js +163 -107
  8. package/dist/commands/init.js.map +1 -1
  9. package/dist/commands/resume.d.ts +8 -0
  10. package/dist/commands/resume.js +391 -0
  11. package/dist/commands/resume.js.map +1 -0
  12. package/dist/commands/review.d.ts +8 -0
  13. package/dist/commands/review.js +549 -0
  14. package/dist/commands/review.js.map +1 -0
  15. package/dist/commands/run.js +2 -2
  16. package/dist/commands/run.js.map +1 -1
  17. package/dist/commands/scan.d.ts +5 -0
  18. package/dist/commands/scan.js +129 -0
  19. package/dist/commands/scan.js.map +1 -1
  20. package/dist/commands/sync.d.ts +27 -3
  21. package/dist/commands/sync.js +222 -44
  22. package/dist/commands/sync.js.map +1 -1
  23. package/dist/lib/agent.d.ts +4 -0
  24. package/dist/lib/agent.js +43 -11
  25. package/dist/lib/agent.js.map +1 -1
  26. package/dist/lib/config.d.ts +1 -0
  27. package/dist/lib/config.js +2 -0
  28. package/dist/lib/config.js.map +1 -1
  29. package/dist/lib/github.d.ts +5 -0
  30. package/dist/lib/github.js +22 -2
  31. package/dist/lib/github.js.map +1 -1
  32. package/dist/lib/pipeline.js +19 -11
  33. package/dist/lib/pipeline.js.map +1 -1
  34. package/dist/lib/session.js +25 -5
  35. package/dist/lib/session.js.map +1 -1
  36. package/dist/lib/templates.d.ts +16 -0
  37. package/dist/lib/templates.js +59 -0
  38. package/dist/lib/templates.js.map +1 -0
  39. package/dist/lib/verify.js +18 -13
  40. package/dist/lib/verify.js.map +1 -1
  41. package/package.json +1 -1
@@ -1,5 +1,6 @@
1
1
  import * as fs from 'node:fs';
2
2
  import * as path from 'node:path';
3
+ import { tmpdir } from 'node:os';
3
4
  import { exec } from '../lib/shell.js';
4
5
  import { log } from '../lib/logger.js';
5
6
  import { assertSafeShellArg, loadConfig } from '../lib/config.js';
@@ -25,12 +26,66 @@ const SCAN_PROMPT = `Analyze this codebase and produce a concise project context
25
26
  - Recent changes: (will be filled in by the loop)
26
27
 
27
28
  Keep each section to 3-5 bullet points. Be specific to THIS codebase, not generic advice. Under 400 words total.`;
29
+ /**
30
+ * Prompt for generating the lean instructions file.
31
+ * Contains ONLY project context — procedural content (testing, git, security) lives in skills.
32
+ */
33
+ const INSTRUCTIONS_PROMPT = `Analyze this codebase and produce a concise project instructions file for AI coding agents working in this repo.
34
+
35
+ Output ONLY this markdown structure with the marker comment on the first line:
36
+
37
+ <!-- managed by alpha-loop -->
38
+ # [Project Name]
39
+
40
+ ## Overview
41
+ [2-3 sentences: what this project is, what it does, who it's for]
42
+
43
+ ## Tech Stack
44
+ - Language: [e.g., TypeScript (strict mode, ESM)]
45
+ - Runtime: [e.g., Node.js 20+]
46
+ - Framework: [e.g., Express 5, React 19]
47
+ - Package manager: [e.g., pnpm]
48
+ - Key dependencies: [top 3-5 important dependencies]
49
+
50
+ ## Directory Structure
51
+ [List key directories and what they contain — only the important ones, not every folder]
52
+
53
+ ## Code Style
54
+ [Naming conventions, import ordering, formatting rules, architectural patterns — be specific to THIS codebase]
55
+
56
+ ## Non-Negotiables
57
+ [Critical rules that must never be violated — security, data safety, patterns that break things if not followed]
58
+
59
+ IMPORTANT RULES:
60
+ - Do NOT include testing procedures, git workflow, code review checklists, or security scanning procedures — those belong in separate skills, not here.
61
+ - Do NOT include build/deploy commands — those are operational, not instructional.
62
+ - Keep it under 150 lines. Be specific to THIS codebase, not generic advice.
63
+ - The marker comment "<!-- managed by alpha-loop -->" MUST be the very first line.`;
64
+ /**
65
+ * Prompt for merging an existing instructions file with fresh scan results.
66
+ */
67
+ const INSTRUCTIONS_MERGE_PROMPT = `You are updating a project instructions file for AI coding agents.
68
+
69
+ Below is the EXISTING instructions file and the CURRENT state of the codebase. Your job is to:
70
+ 1. PRESERVE any user customizations and project-specific rules in the existing file
71
+ 2. UPDATE sections that are stale or incorrect based on the current codebase
72
+ 3. ADD any important new context discovered in the codebase
73
+ 4. REMOVE information that is no longer accurate
74
+
75
+ The marker comment "<!-- managed by alpha-loop -->" MUST remain as the very first line.
76
+
77
+ IMPORTANT: Do NOT add testing procedures, git workflow, code review checklists, or security scanning — those belong in skills, not instructions. Keep the same 5-section structure (Overview, Tech Stack, Directory Structure, Code Style, Non-Negotiables). Keep it under 150 lines.
78
+
79
+ ## EXISTING INSTRUCTIONS FILE:
80
+
81
+ `;
28
82
  export function scanCommand() {
29
83
  const projectDir = process.cwd();
30
84
  const contextDir = path.join(projectDir, '.alpha-loop');
31
85
  const contextFile = path.join(contextDir, 'context.md');
32
86
  const config = loadConfig();
33
87
  fs.mkdirSync(contextDir, { recursive: true });
88
+ // --- Generate project context ---
34
89
  log.step('Scanning codebase for project context...');
35
90
  const model = assertSafeShellArg(config.model ?? 'opus', 'model');
36
91
  const result = exec(`echo ${JSON.stringify(SCAN_PROMPT)} | claude -p --model ${model} --dangerously-skip-permissions --output-format text 2>/dev/null`, { cwd: projectDir });
@@ -46,5 +101,79 @@ export function scanCommand() {
46
101
  else {
47
102
  log.error(`Project context generation failed: ${result.stderr || 'empty output'}`);
48
103
  }
104
+ // --- Generate instructions file ---
105
+ generateInstructions(projectDir, model);
106
+ }
107
+ /**
108
+ * Generate or update the instructions file at .alpha-loop/templates/instructions.md.
109
+ * If no existing file, generates from scratch. If existing, merges with fresh scan.
110
+ */
111
+ export function generateInstructions(projectDir, model) {
112
+ const templatesDir = path.join(projectDir, '.alpha-loop', 'templates');
113
+ fs.mkdirSync(templatesDir, { recursive: true });
114
+ const instructionsFile = path.join(templatesDir, 'instructions.md');
115
+ const existing = fs.existsSync(instructionsFile)
116
+ ? fs.readFileSync(instructionsFile, 'utf-8')
117
+ : null;
118
+ if (existing) {
119
+ // Merge mode: preserve user customizations, update stale content
120
+ log.step('Updating instructions file...');
121
+ // Back up existing before merge
122
+ fs.writeFileSync(instructionsFile + '.bak', existing, 'utf-8');
123
+ const mergePrompt = INSTRUCTIONS_MERGE_PROMPT + existing +
124
+ '\n\n## OUTPUT:\nProduce the updated instructions file. Output ONLY the markdown content, nothing else.';
125
+ // Write prompt to temp file to avoid shell injection from file content
126
+ const safeModel = assertSafeShellArg(model, 'model');
127
+ const promptFile = path.join(tmpdir(), `alpha-loop-merge-${Date.now()}.txt`);
128
+ fs.writeFileSync(promptFile, mergePrompt, 'utf-8');
129
+ const mergeResult = exec(`claude -p --model ${safeModel} --dangerously-skip-permissions --output-format text < "${promptFile}" 2>/dev/null`, { cwd: projectDir });
130
+ try {
131
+ fs.unlinkSync(promptFile);
132
+ }
133
+ catch { /* cleanup best-effort */ }
134
+ if (mergeResult.exitCode === 0 && mergeResult.stdout.trim()) {
135
+ let output = mergeResult.stdout.trim();
136
+ // Ensure marker is present
137
+ if (!output.startsWith('<!-- managed by alpha-loop -->')) {
138
+ output = '<!-- managed by alpha-loop -->\n' + output;
139
+ }
140
+ fs.writeFileSync(instructionsFile, output + '\n');
141
+ log.success('Instructions file updated (backup at instructions.md.bak)');
142
+ }
143
+ else {
144
+ log.warn('Instructions merge failed, keeping existing file');
145
+ }
146
+ }
147
+ else {
148
+ // Fresh generation
149
+ log.step('Generating baseline instructions file...');
150
+ const safeModel = assertSafeShellArg(model, 'model');
151
+ const genPromptFile = path.join(tmpdir(), `alpha-loop-gen-${Date.now()}.txt`);
152
+ fs.writeFileSync(genPromptFile, INSTRUCTIONS_PROMPT, 'utf-8');
153
+ const genResult = exec(`claude -p --model ${safeModel} --dangerously-skip-permissions --output-format text < "${genPromptFile}" 2>/dev/null`, { cwd: projectDir });
154
+ try {
155
+ fs.unlinkSync(genPromptFile);
156
+ }
157
+ catch { /* cleanup best-effort */ }
158
+ if (genResult.exitCode === 0 && genResult.stdout.trim()) {
159
+ let output = genResult.stdout.trim();
160
+ if (!output.startsWith('<!-- managed by alpha-loop -->')) {
161
+ output = '<!-- managed by alpha-loop -->\n' + output;
162
+ }
163
+ fs.writeFileSync(instructionsFile, output + '\n');
164
+ log.success(`Instructions file generated: ${instructionsFile}`);
165
+ }
166
+ else if (genResult.stdout?.trim()) {
167
+ let output = genResult.stdout.trim();
168
+ if (!output.startsWith('<!-- managed by alpha-loop -->')) {
169
+ output = '<!-- managed by alpha-loop -->\n' + output;
170
+ }
171
+ fs.writeFileSync(instructionsFile, output + '\n');
172
+ log.warn('Claude exited with errors but produced instructions output');
173
+ }
174
+ else {
175
+ log.warn('Instructions generation failed — will retry on next scan');
176
+ }
177
+ }
49
178
  }
50
179
  //# sourceMappingURL=scan.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAElE,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;iHAqB6F,CAAC;AAElH,MAAM,UAAU,WAAW;IACzB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9C,GAAG,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAErD,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,EAAE,OAAO,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,IAAI,CACjB,QAAQ,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,wBAAwB,KAAK,kEAAkE,EAClI,EAAE,GAAG,EAAE,UAAU,EAAE,CACpB,CAAC;IAEF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAC3C,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACpD,GAAG,CAAC,OAAO,CAAC,4BAA4B,WAAW,EAAE,CAAC,CAAC;IACzD,CAAC;SAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACzB,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACpD,GAAG,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC1D,GAAG,CAAC,OAAO,CAAC,4BAA4B,WAAW,EAAE,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,KAAK,CAAC,sCAAsC,MAAM,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC,CAAC;IACrF,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,44 @@
1
+ export type HarnessConfig = {
2
+ skillsDir: string;
3
+ agentsDir?: string;
4
+ instructionsFile?: string;
5
+ };
6
+ export declare const HARNESS_REGISTRY: Record<string, HarnessConfig>;
7
+ /** Marker that identifies files managed by alpha-loop (safe to overwrite). */
8
+ export declare const MANAGED_MARKER = "<!-- managed by alpha-loop -->";
1
9
  export type SyncResult = {
2
10
  synced: boolean;
3
11
  docSynced: boolean;
4
12
  skillsDirs: string[];
5
13
  };
6
14
  /**
7
- * Sync agent assets: AGENTS.md CLAUDE.md, skills/ .agents/skills/ + .claude/skills/
15
+ * Sync agent assets from templates to each configured harness's paths.
8
16
  *
9
- * Returns what was synced. If check=true, only reports drift without writing.
17
+ * @param harnesses - list of harness names from .alpha-loop.yaml config
18
+ * @param options - check-only mode and project directory override
10
19
  */
11
- export declare function syncAgentAssets(options?: {
20
+ export declare function syncAgentAssets(harnesses: string[], options?: {
12
21
  check?: boolean;
13
22
  projectDir?: string;
14
23
  }): SyncResult;
24
+ /**
25
+ * Migrate legacy root-level assets to the canonical templates directory.
26
+ *
27
+ * Moves:
28
+ * skills/ → .alpha-loop/templates/skills/
29
+ * .claude/agents/ → .alpha-loop/templates/agents/
30
+ *
31
+ * Does NOT delete the originals — the next sync run will recreate them
32
+ * from the new template location.
33
+ */
34
+ export declare function migrateToTemplates(projectDir?: string): void;
15
35
  /**
16
36
  * CLI command handler for `alpha-loop sync`.
37
+ *
38
+ * Reads harness list from the caller-supplied options (populated from
39
+ * .alpha-loop.yaml) and delegates to syncAgentAssets.
17
40
  */
18
41
  export declare function syncCommand(options?: {
19
42
  check?: boolean;
43
+ harnesses?: string[];
20
44
  }): void;
@@ -1,20 +1,83 @@
1
1
  /**
2
- * Sync Command — keep agent docs and skills in sync across CLI tool formats.
2
+ * Sync Command — keep skills, sub-agents, and instructions in sync across coding harnesses.
3
3
  *
4
- * Source of truth:
5
- * - AGENTS.md copied to CLAUDE.md
6
- * - skills/ copied to .agents/skills/ and .claude/skills/
4
+ * Source of truth: .alpha-loop/templates/
5
+ * skills/ each harness's skillsDir
6
+ * agents/ each harness's agentsDir (if defined)
7
+ * instructions.md → each harness's instructionsFile (e.g., CLAUDE.md, AGENTS.md)
7
8
  *
8
- * This ensures both Claude and Codex (and any future agent) can find
9
- * the same instructions and skills in their native locations.
9
+ * Instructions files are only overwritten if they contain the "<!-- managed by alpha-loop -->"
10
+ * marker. Existing hand-written CLAUDE.md/AGENTS.md files are never touched.
11
+ *
12
+ * Harnesses to sync are read from the `harnesses` array supplied by the caller
13
+ * (typically loaded from .alpha-loop.yaml). Only harnesses that exist in the
14
+ * HARNESS_REGISTRY are processed.
10
15
  */
11
- import { existsSync, copyFileSync, mkdirSync, readdirSync, statSync, readFileSync, rmSync } from 'node:fs';
16
+ import { existsSync, copyFileSync, mkdirSync, readdirSync, statSync, readFileSync, rmSync, renameSync, } from 'node:fs';
12
17
  import { join } from 'node:path';
13
18
  import { log } from '../lib/logger.js';
14
- const SOURCE_DOC = 'AGENTS.md';
15
- const TARGET_DOC = 'CLAUDE.md';
16
- const SOURCE_SKILLS = 'skills';
17
- const TARGET_SKILL_DIRS = ['.agents/skills', '.claude/skills'];
19
+ export const HARNESS_REGISTRY = {
20
+ amp: { skillsDir: '.agents/skills', instructionsFile: 'AGENTS.md' },
21
+ antigravity: { skillsDir: '.agents/skills', instructionsFile: 'AGENTS.md' },
22
+ augment: { skillsDir: '.augment/skills' },
23
+ bob: { skillsDir: '.bob/skills' },
24
+ 'claude-code': { skillsDir: '.claude/skills', agentsDir: '.claude/agents', instructionsFile: 'CLAUDE.md' },
25
+ openclaw: { skillsDir: 'skills' },
26
+ cline: { skillsDir: '.agents/skills', instructionsFile: 'AGENTS.md' },
27
+ warp: { skillsDir: '.agents/skills', instructionsFile: 'AGENTS.md' },
28
+ codebuddy: { skillsDir: '.codebuddy/skills' },
29
+ codex: { skillsDir: '.agents/skills', agentsDir: '.codex/agents', instructionsFile: 'AGENTS.md' },
30
+ 'command-code': { skillsDir: '.commandcode/skills' },
31
+ continue: { skillsDir: '.continue/skills' },
32
+ cortex: { skillsDir: '.cortex/skills' },
33
+ crush: { skillsDir: '.crush/skills' },
34
+ cursor: { skillsDir: '.agents/skills', instructionsFile: 'AGENTS.md' },
35
+ deepagents: { skillsDir: '.agents/skills', instructionsFile: 'AGENTS.md' },
36
+ droid: { skillsDir: '.factory/skills' },
37
+ firebender: { skillsDir: '.agents/skills', instructionsFile: 'AGENTS.md' },
38
+ 'gemini-cli': { skillsDir: '.agents/skills', instructionsFile: 'AGENTS.md' },
39
+ 'github-copilot': { skillsDir: '.agents/skills', instructionsFile: 'AGENTS.md' },
40
+ goose: { skillsDir: '.goose/skills' },
41
+ junie: { skillsDir: '.junie/skills' },
42
+ 'iflow-cli': { skillsDir: '.iflow/skills' },
43
+ kilo: { skillsDir: '.kilocode/skills' },
44
+ 'kimi-cli': { skillsDir: '.agents/skills', instructionsFile: 'AGENTS.md' },
45
+ 'kiro-cli': { skillsDir: '.kiro/skills' },
46
+ kode: { skillsDir: '.kode/skills' },
47
+ mcpjam: { skillsDir: '.mcpjam/skills' },
48
+ 'mistral-vibe': { skillsDir: '.vibe/skills' },
49
+ mux: { skillsDir: '.mux/skills' },
50
+ opencode: { skillsDir: '.agents/skills', instructionsFile: 'AGENTS.md' },
51
+ openhands: { skillsDir: '.openhands/skills' },
52
+ pi: { skillsDir: '.pi/skills' },
53
+ qoder: { skillsDir: '.qoder/skills' },
54
+ 'qwen-code': { skillsDir: '.qwen/skills' },
55
+ replit: { skillsDir: '.agents/skills', instructionsFile: 'AGENTS.md' },
56
+ roo: { skillsDir: '.roo/skills' },
57
+ trae: { skillsDir: '.trae/skills' },
58
+ 'trae-cn': { skillsDir: '.trae/skills' },
59
+ universal: { skillsDir: '.agents/skills', instructionsFile: 'AGENTS.md' },
60
+ windsurf: { skillsDir: '.windsurf/skills' },
61
+ zencoder: { skillsDir: '.zencoder/skills' },
62
+ neovate: { skillsDir: '.neovate/skills' },
63
+ pochi: { skillsDir: '.pochi/skills' },
64
+ adal: { skillsDir: '.adal/skills' },
65
+ };
66
+ // ---------------------------------------------------------------------------
67
+ // Path constants
68
+ // ---------------------------------------------------------------------------
69
+ const TEMPLATES_DIR = '.alpha-loop/templates';
70
+ const TEMPLATE_SKILLS_SUBDIR = 'skills';
71
+ const TEMPLATE_AGENTS_SUBDIR = 'agents';
72
+ const TEMPLATE_INSTRUCTIONS_FILE = 'instructions.md';
73
+ /** Marker that identifies files managed by alpha-loop (safe to overwrite). */
74
+ export const MANAGED_MARKER = '<!-- managed by alpha-loop -->';
75
+ // Legacy root-level fallbacks
76
+ const LEGACY_SKILLS_DIR = 'skills';
77
+ const LEGACY_CLAUDE_AGENTS_DIR = '.claude/agents';
78
+ // ---------------------------------------------------------------------------
79
+ // Helper functions (kept exactly as before)
80
+ // ---------------------------------------------------------------------------
18
81
  /**
19
82
  * Recursively copy a directory, deleting files in target that don't exist in source.
20
83
  */
@@ -78,63 +141,178 @@ function dirsMatch(src, dest) {
78
141
  }
79
142
  return true;
80
143
  }
144
+ function resolveTemplateSources(projectDir) {
145
+ const templatesBase = join(projectDir, TEMPLATES_DIR);
146
+ const templateSkills = join(templatesBase, TEMPLATE_SKILLS_SUBDIR);
147
+ const templateAgents = join(templatesBase, TEMPLATE_AGENTS_SUBDIR);
148
+ const templateInstructions = join(templatesBase, TEMPLATE_INSTRUCTIONS_FILE);
149
+ if (existsSync(templatesBase)) {
150
+ return {
151
+ skillsDir: templateSkills,
152
+ agentsDir: templateAgents,
153
+ instructionsFile: templateInstructions,
154
+ isLegacy: false,
155
+ };
156
+ }
157
+ // Fall back to legacy root-level files
158
+ const legacySkills = join(projectDir, LEGACY_SKILLS_DIR);
159
+ if (existsSync(legacySkills)) {
160
+ log.warn(`Legacy layout detected (${LEGACY_SKILLS_DIR}/ at project root). ` +
161
+ `Run "alpha-loop init" to migrate to ${TEMPLATES_DIR}/.`);
162
+ return {
163
+ skillsDir: legacySkills,
164
+ agentsDir: join(projectDir, LEGACY_CLAUDE_AGENTS_DIR),
165
+ instructionsFile: '', // No instructions in legacy layout
166
+ isLegacy: true,
167
+ };
168
+ }
169
+ return null;
170
+ }
81
171
  /**
82
- * Sync agent assets: AGENTS.md CLAUDE.md, skills/ .agents/skills/ + .claude/skills/
172
+ * Sync agent assets from templates to each configured harness's paths.
83
173
  *
84
- * Returns what was synced. If check=true, only reports drift without writing.
174
+ * @param harnesses - list of harness names from .alpha-loop.yaml config
175
+ * @param options - check-only mode and project directory override
85
176
  */
86
- export function syncAgentAssets(options = {}) {
177
+ export function syncAgentAssets(harnesses, options = {}) {
87
178
  const { check = false, projectDir = process.cwd() } = options;
88
- const sourceDoc = join(projectDir, SOURCE_DOC);
89
- const targetDoc = join(projectDir, TARGET_DOC);
90
- const sourceSkills = join(projectDir, SOURCE_SKILLS);
91
179
  const result = { synced: false, docSynced: false, skillsDirs: [] };
92
- // Sync AGENTS.md → CLAUDE.md
93
- if (existsSync(sourceDoc)) {
94
- if (!filesMatch(sourceDoc, targetDoc)) {
95
- if (check) {
96
- log.warn(`Drift: ${TARGET_DOC} differs from ${SOURCE_DOC}`);
97
- }
98
- else {
99
- copyFileSync(sourceDoc, targetDoc);
100
- log.info(`Synced ${SOURCE_DOC} ${TARGET_DOC}`);
180
+ const sources = resolveTemplateSources(projectDir);
181
+ if (!sources) {
182
+ log.warn(`No template sources found. Create ${TEMPLATES_DIR}/ with skills/, agents/, and instructions.md.`);
183
+ return result;
184
+ }
185
+ for (const harness of harnesses) {
186
+ const config = HARNESS_REGISTRY[harness];
187
+ if (!config) {
188
+ log.warn(`Unknown harness "${harness}" not in HARNESS_REGISTRY, skipping.`);
189
+ continue;
190
+ }
191
+ // -- Skills dir --
192
+ if (existsSync(sources.skillsDir)) {
193
+ const targetSkills = join(projectDir, config.skillsDir);
194
+ if (!dirsMatch(sources.skillsDir, targetSkills)) {
195
+ if (check) {
196
+ log.warn(`Drift [${harness}]: ${config.skillsDir} differs from template skills/`);
197
+ }
198
+ else {
199
+ syncDir(sources.skillsDir, targetSkills);
200
+ log.info(`Synced [${harness}] skills/ → ${config.skillsDir}`);
201
+ }
202
+ if (!result.skillsDirs.includes(config.skillsDir)) {
203
+ result.skillsDirs.push(config.skillsDir);
204
+ }
205
+ result.synced = true;
101
206
  }
102
- result.docSynced = true;
103
- result.synced = true;
104
207
  }
105
- }
106
- // Sync skills/ target dirs
107
- if (existsSync(sourceSkills)) {
108
- for (const targetDir of TARGET_SKILL_DIRS) {
109
- const targetPath = join(projectDir, targetDir);
110
- if (!dirsMatch(sourceSkills, targetPath)) {
208
+ // -- Agents dir --
209
+ if (config.agentsDir && existsSync(sources.agentsDir)) {
210
+ const targetAgents = join(projectDir, config.agentsDir);
211
+ if (!dirsMatch(sources.agentsDir, targetAgents)) {
111
212
  if (check) {
112
- log.warn(`Drift: ${targetDir} differs from ${SOURCE_SKILLS}/`);
213
+ log.warn(`Drift [${harness}]: ${config.agentsDir} differs from template agents/`);
113
214
  }
114
215
  else {
115
- syncDir(sourceSkills, targetPath);
116
- log.info(`Synced ${SOURCE_SKILLS}/ → ${targetDir}/`);
216
+ syncDir(sources.agentsDir, targetAgents);
217
+ log.info(`Synced [${harness}] agents/ → ${config.agentsDir}`);
117
218
  }
118
- result.skillsDirs.push(targetDir);
119
219
  result.synced = true;
120
220
  }
121
221
  }
222
+ // -- Instructions file --
223
+ if (config.instructionsFile && sources.instructionsFile && existsSync(sources.instructionsFile)) {
224
+ const targetFile = join(projectDir, config.instructionsFile);
225
+ if (!filesMatch(sources.instructionsFile, targetFile)) {
226
+ // Safety: only overwrite if the target doesn't exist or contains the managed marker
227
+ const targetExists = existsSync(targetFile);
228
+ const targetManaged = targetExists &&
229
+ readFileSync(targetFile, 'utf-8').startsWith(MANAGED_MARKER);
230
+ if (!targetExists || targetManaged) {
231
+ if (check) {
232
+ log.warn(`Drift [${harness}]: ${config.instructionsFile} differs from template instructions.md`);
233
+ }
234
+ else {
235
+ mkdirSync(join(targetFile, '..'), { recursive: true });
236
+ copyFileSync(sources.instructionsFile, targetFile);
237
+ log.info(`Synced [${harness}] instructions.md → ${config.instructionsFile}`);
238
+ }
239
+ result.docSynced = true;
240
+ result.synced = true;
241
+ }
242
+ else {
243
+ log.warn(`Skipping ${config.instructionsFile} — file exists without alpha-loop marker. ` +
244
+ `Run "alpha-loop scan" to generate a managed instructions file.`);
245
+ }
246
+ }
247
+ }
122
248
  }
123
249
  return result;
124
250
  }
251
+ /**
252
+ * Migrate legacy root-level assets to the canonical templates directory.
253
+ *
254
+ * Moves:
255
+ * skills/ → .alpha-loop/templates/skills/
256
+ * .claude/agents/ → .alpha-loop/templates/agents/
257
+ *
258
+ * Does NOT delete the originals — the next sync run will recreate them
259
+ * from the new template location.
260
+ */
261
+ export function migrateToTemplates(projectDir = process.cwd()) {
262
+ const templatesBase = join(projectDir, TEMPLATES_DIR);
263
+ mkdirSync(templatesBase, { recursive: true });
264
+ const moves = [
265
+ {
266
+ src: join(projectDir, LEGACY_SKILLS_DIR),
267
+ dest: join(templatesBase, TEMPLATE_SKILLS_SUBDIR),
268
+ label: `${LEGACY_SKILLS_DIR}/ → ${TEMPLATES_DIR}/skills/`,
269
+ },
270
+ {
271
+ src: join(projectDir, LEGACY_CLAUDE_AGENTS_DIR),
272
+ dest: join(templatesBase, TEMPLATE_AGENTS_SUBDIR),
273
+ label: `${LEGACY_CLAUDE_AGENTS_DIR}/ → ${TEMPLATES_DIR}/agents/`,
274
+ },
275
+ ];
276
+ let moved = false;
277
+ for (const { src, dest, label } of moves) {
278
+ if (!existsSync(src))
279
+ continue;
280
+ if (existsSync(dest)) {
281
+ log.warn(`Migration skipped (destination already exists): ${label}`);
282
+ continue;
283
+ }
284
+ mkdirSync(join(dest, '..'), { recursive: true });
285
+ renameSync(src, dest);
286
+ log.info(`Migrated: ${label}`);
287
+ moved = true;
288
+ }
289
+ if (!moved) {
290
+ log.info('Nothing to migrate — no legacy assets found or all destinations already exist.');
291
+ }
292
+ else {
293
+ log.info(`Migration complete. Re-run "alpha-loop sync" to propagate from ${TEMPLATES_DIR}/ to all configured harnesses.`);
294
+ }
295
+ }
125
296
  /**
126
297
  * CLI command handler for `alpha-loop sync`.
298
+ *
299
+ * Reads harness list from the caller-supplied options (populated from
300
+ * .alpha-loop.yaml) and delegates to syncAgentAssets.
127
301
  */
128
302
  export function syncCommand(options = {}) {
129
303
  const projectDir = process.cwd();
130
- const sourceDoc = join(projectDir, SOURCE_DOC);
131
- const sourceSkills = join(projectDir, SOURCE_SKILLS);
132
- if (!existsSync(sourceDoc) && !existsSync(sourceSkills)) {
133
- log.warn(`No ${SOURCE_DOC} or ${SOURCE_SKILLS}/ found. Nothing to sync.`);
134
- log.info(`Create ${SOURCE_DOC} (agent instructions) and/or ${SOURCE_SKILLS}/ (skill definitions) first.`);
304
+ const harnesses = options.harnesses ?? [];
305
+ if (harnesses.length === 0) {
306
+ log.warn('No harnesses configured. Add a "harnesses" list to .alpha-loop.yaml.');
307
+ log.info('Example: harnesses:\n - claude-code\n - codex');
308
+ return;
309
+ }
310
+ const sources = resolveTemplateSources(projectDir);
311
+ if (!sources) {
312
+ log.warn(`No source assets found. Create ${TEMPLATES_DIR}/ with skills/ and agents/ subdirectories.`);
135
313
  return;
136
314
  }
137
- const result = syncAgentAssets({ check: options.check, projectDir });
315
+ const result = syncAgentAssets(harnesses, { check: options.check, projectDir });
138
316
  if (!result.synced) {
139
317
  log.success('Agent assets are in sync.');
140
318
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,10 @@ export type AgentOptions = {
10
10
  cwd: string;
11
11
  logFile?: string;
12
12
  verbose?: boolean;
13
+ /** Timeout in milliseconds. Defaults to 30 minutes. */
14
+ timeout?: number;
15
+ /** Max conversation turns for the agent. Only supported by claude. */
16
+ maxTurns?: number;
13
17
  };
14
18
  /**
15
19
  * Build CLI command and args for a given agent type.