@stackmemoryai/stackmemory 0.4.0 → 0.4.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.
@@ -9,8 +9,16 @@ import { ralphDebugger } from "../../integrations/ralph/visualization/ralph-debu
9
9
  import { existsSync, readFileSync, writeFileSync } from "fs";
10
10
  import { trace } from "../../core/trace/index.js";
11
11
  function createRalphCommand() {
12
- const ralph = new Command("ralph").description("Ralph Wiggum Loop integration with StackMemory");
13
- ralph.command("init").description("Initialize a new Ralph Wiggum loop").argument("<task>", "Task description").option("-c, --criteria <criteria>", "Completion criteria (comma separated)").option("--max-iterations <n>", "Maximum iterations", "50").option("--use-context", "Load relevant context from StackMemory").option("--learn-from-similar", "Apply patterns from similar completed tasks").action(async (task, options) => {
12
+ const ralph = new Command("ralph").description(
13
+ "Ralph Wiggum Loop integration with StackMemory"
14
+ );
15
+ ralph.command("init").description("Initialize a new Ralph Wiggum loop").argument("<task>", "Task description").option(
16
+ "-c, --criteria <criteria>",
17
+ "Completion criteria (comma separated)"
18
+ ).option("--max-iterations <n>", "Maximum iterations", "50").option("--use-context", "Load relevant context from StackMemory").option(
19
+ "--learn-from-similar",
20
+ "Apply patterns from similar completed tasks"
21
+ ).action(async (task, options) => {
14
22
  return trace.command("ralph-init", { task, ...options }, async () => {
15
23
  try {
16
24
  console.log("\u{1F3AD} Initializing Ralph Wiggum loop...");
@@ -34,11 +42,17 @@ function createRalphCommand() {
34
42
  enhancedTask = `${task}
35
43
 
36
44
  ${contextResponse.context}`;
37
- console.log(`\u{1F4DA} Loaded context from ${contextResponse.sources.length} sources`);
38
- console.log(`\u{1F3AF} Context tokens: ${contextResponse.metadata.totalTokens}`);
45
+ console.log(
46
+ `\u{1F4DA} Loaded context from ${contextResponse.sources.length} sources`
47
+ );
48
+ console.log(
49
+ `\u{1F3AF} Context tokens: ${contextResponse.metadata.totalTokens}`
50
+ );
39
51
  }
40
52
  } catch (error) {
41
- console.log(`\u26A0\uFE0F Context loading failed: ${error.message}`);
53
+ console.log(
54
+ `\u26A0\uFE0F Context loading failed: ${error.message}`
55
+ );
42
56
  console.log("Proceeding without context...");
43
57
  }
44
58
  }
@@ -61,7 +75,9 @@ ${contextResponse.context}`;
61
75
  return trace.command("ralph-run", options, async () => {
62
76
  try {
63
77
  if (!existsSync(".ralph")) {
64
- console.error('\u274C No Ralph loop found. Run "stackmemory ralph init" first.');
78
+ console.error(
79
+ '\u274C No Ralph loop found. Run "stackmemory ralph init" first.'
80
+ );
65
81
  return;
66
82
  }
67
83
  console.log("\u{1F3AD} Starting Ralph Wiggum loop...");
@@ -85,13 +101,17 @@ ${contextResponse.context}`;
85
101
  return;
86
102
  }
87
103
  const task = readFileSync(".ralph/task.md", "utf8");
88
- const iteration = parseInt(readFileSync(".ralph/iteration.txt", "utf8") || "0");
104
+ const iteration = parseInt(
105
+ readFileSync(".ralph/iteration.txt", "utf8") || "0"
106
+ );
89
107
  const isComplete = existsSync(".ralph/work-complete.txt");
90
108
  const feedback = existsSync(".ralph/feedback.txt") ? readFileSync(".ralph/feedback.txt", "utf8") : "";
91
109
  console.log("\u{1F3AD} Ralph Loop Status:");
92
110
  console.log(` Task: ${task.substring(0, 80)}...`);
93
111
  console.log(` Iteration: ${iteration}`);
94
- console.log(` Status: ${isComplete ? "\u2705 COMPLETE" : "\u{1F504} IN PROGRESS"}`);
112
+ console.log(
113
+ ` Status: ${isComplete ? "\u2705 COMPLETE" : "\u{1F504} IN PROGRESS"}`
114
+ );
95
115
  if (feedback) {
96
116
  console.log(` Last feedback: ${feedback.substring(0, 100)}...`);
97
117
  }
@@ -101,7 +121,9 @@ ${contextResponse.context}`;
101
121
  progressLines.forEach((p) => {
102
122
  const progress = p;
103
123
  const status = progress.validation?.testsPass ? "\u2705" : "\u274C";
104
- console.log(` ${progress.iteration}: ${status} ${progress.changes} changes, ${progress.errors} errors`);
124
+ console.log(
125
+ ` ${progress.iteration}: ${status} ${progress.changes} changes, ${progress.errors} errors`
126
+ );
105
127
  });
106
128
  }
107
129
  } catch (error) {
@@ -177,7 +199,9 @@ ${contextResponse.context}`;
177
199
  console.log("\n\u{1F4C1} Ralph directory structure:");
178
200
  const { execSync } = await import("child_process");
179
201
  try {
180
- const tree = execSync("find .ralph -type f | head -20", { encoding: "utf8" });
202
+ const tree = execSync("find .ralph -type f | head -20", {
203
+ encoding: "utf8"
204
+ });
181
205
  console.log(tree);
182
206
  } catch {
183
207
  console.log(" (Unable to show directory tree)");
@@ -189,7 +213,11 @@ ${contextResponse.context}`;
189
213
  }
190
214
  });
191
215
  });
192
- ralph.command("swarm").description("Launch a swarm of specialized agents").argument("<project>", "Project description").option("--agents <agents>", "Comma-separated list of agent roles (architect,developer,tester,etc)", "developer,tester").option("--max-agents <n>", "Maximum number of agents", "5").action(async (project, options) => {
216
+ ralph.command("swarm").description("Launch a swarm of specialized agents").argument("<project>", "Project description").option(
217
+ "--agents <agents>",
218
+ "Comma-separated list of agent roles (architect,developer,tester,etc)",
219
+ "developer,tester"
220
+ ).option("--max-agents <n>", "Maximum number of agents", "5").action(async (project, options) => {
193
221
  return trace.command("ralph-swarm", { project, ...options }, async () => {
194
222
  try {
195
223
  console.log("\u{1F9BE} Launching Ralph swarm...");
@@ -200,12 +228,19 @@ ${contextResponse.context}`;
200
228
  conflictResolution: "defer_to_expertise",
201
229
  collaborationPreferences: []
202
230
  }));
203
- const swarmId = await swarmCoordinator.launchSwarm(project, agentSpecs);
231
+ const swarmId = await swarmCoordinator.launchSwarm(
232
+ project,
233
+ agentSpecs
234
+ );
204
235
  console.log(`\u2705 Swarm launched with ID: ${swarmId}`);
205
236
  console.log(`\u{1F465} ${agentSpecs.length} agents working on: ${project}`);
206
237
  console.log("\nNext steps:");
207
- console.log(" stackmemory ralph swarm-status <swarmId> # Check progress");
208
- console.log(" stackmemory ralph swarm-stop <swarmId> # Stop swarm");
238
+ console.log(
239
+ " stackmemory ralph swarm-status <swarmId> # Check progress"
240
+ );
241
+ console.log(
242
+ " stackmemory ralph swarm-stop <swarmId> # Stop swarm"
243
+ );
209
244
  } catch (error) {
210
245
  logger.error("Swarm launch failed", error);
211
246
  console.error("\u274C Swarm launch failed:", error.message);
@@ -213,31 +248,45 @@ ${contextResponse.context}`;
213
248
  });
214
249
  });
215
250
  ralph.command("orchestrate").description("Orchestrate multiple Ralph loops for complex tasks").argument("<description>", "Complex task description").option("--criteria <criteria>", "Success criteria (comma separated)").option("--max-loops <n>", "Maximum parallel loops", "3").option("--sequential", "Force sequential execution").action(async (description, options) => {
216
- return trace.command("ralph-orchestrate", { description, ...options }, async () => {
217
- try {
218
- console.log("\u{1F3AD} Orchestrating complex task...");
219
- await multiLoopOrchestrator.initialize();
220
- const criteria = options.criteria ? options.criteria.split(",").map((c) => c.trim()) : ["Task completed successfully", "All components working", "Tests pass"];
221
- const result = await multiLoopOrchestrator.orchestrateComplexTask(
222
- description,
223
- criteria,
224
- {
225
- maxLoops: parseInt(options.maxLoops),
226
- forceSequential: options.sequential
251
+ return trace.command(
252
+ "ralph-orchestrate",
253
+ { description, ...options },
254
+ async () => {
255
+ try {
256
+ console.log("\u{1F3AD} Orchestrating complex task...");
257
+ await multiLoopOrchestrator.initialize();
258
+ const criteria = options.criteria ? options.criteria.split(",").map((c) => c.trim()) : [
259
+ "Task completed successfully",
260
+ "All components working",
261
+ "Tests pass"
262
+ ];
263
+ const result = await multiLoopOrchestrator.orchestrateComplexTask(
264
+ description,
265
+ criteria,
266
+ {
267
+ maxLoops: parseInt(options.maxLoops),
268
+ forceSequential: options.sequential
269
+ }
270
+ );
271
+ console.log("\u2705 Orchestration completed!");
272
+ console.log(
273
+ `\u{1F4CA} Results: ${result.completedLoops.length} successful, ${result.failedLoops.length} failed`
274
+ );
275
+ console.log(
276
+ `\u23F1\uFE0F Total duration: ${Math.round(result.totalDuration / 1e3)}s`
277
+ );
278
+ if (result.insights.length > 0) {
279
+ console.log("\n\u{1F4A1} Insights:");
280
+ result.insights.forEach(
281
+ (insight) => console.log(` \u2022 ${insight}`)
282
+ );
227
283
  }
228
- );
229
- console.log("\u2705 Orchestration completed!");
230
- console.log(`\u{1F4CA} Results: ${result.completedLoops.length} successful, ${result.failedLoops.length} failed`);
231
- console.log(`\u23F1\uFE0F Total duration: ${Math.round(result.totalDuration / 1e3)}s`);
232
- if (result.insights.length > 0) {
233
- console.log("\n\u{1F4A1} Insights:");
234
- result.insights.forEach((insight) => console.log(` \u2022 ${insight}`));
284
+ } catch (error) {
285
+ logger.error("Orchestration failed", error);
286
+ console.error("\u274C Orchestration failed:", error.message);
235
287
  }
236
- } catch (error) {
237
- logger.error("Orchestration failed", error);
238
- console.error("\u274C Orchestration failed:", error.message);
239
288
  }
240
- });
289
+ );
241
290
  });
242
291
  ralph.command("learn").description("Learn patterns from completed loops").option("--task-type <type>", "Learn patterns for specific task type").action(async (options) => {
243
292
  return trace.command("ralph-learn", options, async () => {
@@ -249,12 +298,17 @@ ${contextResponse.context}`;
249
298
  if (patterns.length > 0) {
250
299
  console.log("\n\u{1F4CA} Top patterns:");
251
300
  patterns.slice(0, 5).forEach((pattern) => {
252
- console.log(` \u2022 ${pattern.pattern} (${Math.round(pattern.confidence * 100)}% confidence)`);
301
+ console.log(
302
+ ` \u2022 ${pattern.pattern} (${Math.round(pattern.confidence * 100)}% confidence)`
303
+ );
253
304
  });
254
305
  }
255
306
  } catch (error) {
256
307
  logger.error("Pattern learning failed", error);
257
- console.error("\u274C Pattern learning failed:", error.message);
308
+ console.error(
309
+ "\u274C Pattern learning failed:",
310
+ error.message
311
+ );
258
312
  }
259
313
  });
260
314
  });
@@ -262,13 +316,15 @@ ${contextResponse.context}`;
262
316
  return trace.command("ralph-debug-enhanced", options, async () => {
263
317
  try {
264
318
  if (!existsSync(".ralph") && !options.loopId) {
265
- console.log("\u274C No Ralph loop found. Run a loop first or specify --loop-id");
319
+ console.log(
320
+ "\u274C No Ralph loop found. Run a loop first or specify --loop-id"
321
+ );
266
322
  return;
267
323
  }
268
324
  console.log("\u{1F50D} Starting enhanced debugging...");
269
325
  await ralphDebugger.initialize();
270
326
  const loopId = options.loopId || "current";
271
- const debugSession = await ralphDebugger.startDebugSession(loopId, ".ralph");
327
+ await ralphDebugger.startDebugSession(loopId, ".ralph");
272
328
  if (options.generateReport) {
273
329
  const report = await ralphDebugger.generateDebugReport(loopId);
274
330
  console.log(`\u{1F4CB} Debug report generated: ${report.exportPath}`);
@@ -284,15 +340,36 @@ ${contextResponse.context}`;
284
340
  }
285
341
  });
286
342
  });
287
- ralph.command("tui").description("Launch TUI monitor for active swarms").option("--swarm-id <id>", "Monitor specific swarm ID").action(async (options) => {
343
+ ralph.command("tui").description("Launch TUI monitor for active swarms").option("--swarm-id <id>", "Monitor specific swarm ID").option("--simple", "Use simple text mode instead of full TUI").option("--force-tui", "Force full TUI even with compatibility issues").action(async (options) => {
288
344
  try {
289
- const { SwarmTUI } = await import("../../features/tui/swarm-monitor.js");
290
- const tui = new SwarmTUI();
291
- await tui.initialize(void 0, options.swarmId);
292
- tui.start();
345
+ const isGhostty = process.env.TERM_PROGRAM === "ghostty" || process.env.TERM?.includes("ghostty");
346
+ const isBasicTerm = process.env.TERM === "dumb" || process.env.TERM === "unknown";
347
+ const hasCompatibilityIssues = isGhostty || isBasicTerm;
348
+ const useSimpleMode = options.simple || hasCompatibilityIssues && !options.forceTui;
349
+ if (useSimpleMode) {
350
+ console.log("\u{1F9BE} Starting Simple Swarm Monitor (Text Mode)");
351
+ if (hasCompatibilityIssues && !options.simple) {
352
+ console.log(
353
+ `\u26A0\uFE0F Detected ${isGhostty ? "Ghostty" : "basic"} terminal - using text mode for compatibility`
354
+ );
355
+ console.log(
356
+ " Use --force-tui to override, or --simple to explicitly use text mode"
357
+ );
358
+ }
359
+ const { SimpleSwarmMonitor } = await import("../../features/tui/simple-monitor.js");
360
+ const monitor = new SimpleSwarmMonitor();
361
+ monitor.start();
362
+ } else {
363
+ console.log("\u{1F9BE} Starting Full TUI Monitor");
364
+ const { SwarmTUI } = await import("../../features/tui/swarm-monitor.js");
365
+ const tui = new SwarmTUI();
366
+ await tui.initialize(void 0, options.swarmId);
367
+ tui.start();
368
+ }
293
369
  } catch (error) {
294
370
  logger.error("TUI launch failed", error);
295
371
  console.error("\u274C TUI failed:", error.message);
372
+ console.log("\u{1F4A1} Try: stackmemory ralph tui --simple");
296
373
  process.exit(1);
297
374
  }
298
375
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cli/commands/ralph.ts"],
4
- "sourcesContent": ["/**\n * Ralph Wiggum Loop Commands\n * CLI interface for Ralph-StackMemory integration\n */\n\nimport { Command } from 'commander';\nimport { logger } from '../../core/monitoring/logger.js';\nimport { RalphLoop } from '../../../scripts/ralph-loop-implementation.js';\nimport { stackMemoryContextLoader } from '../../integrations/ralph/context/stackmemory-context-loader.js';\nimport { patternLearner } from '../../integrations/ralph/learning/pattern-learner.js';\nimport { multiLoopOrchestrator } from '../../integrations/ralph/orchestration/multi-loop-orchestrator.js';\nimport { swarmCoordinator } from '../../integrations/ralph/swarm/swarm-coordinator.js';\nimport { ralphDebugger } from '../../integrations/ralph/visualization/ralph-debugger.js';\nimport { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { trace } from '../../core/trace/index.js';\n\nexport function createRalphCommand(): Command {\n const ralph = new Command('ralph')\n .description('Ralph Wiggum Loop integration with StackMemory');\n\n // Initialize a new Ralph loop\n ralph\n .command('init')\n .description('Initialize a new Ralph Wiggum loop')\n .argument('<task>', 'Task description')\n .option('-c, --criteria <criteria>', 'Completion criteria (comma separated)')\n .option('--max-iterations <n>', 'Maximum iterations', '50')\n .option('--use-context', 'Load relevant context from StackMemory')\n .option('--learn-from-similar', 'Apply patterns from similar completed tasks')\n .action(async (task, options) => {\n return trace.command('ralph-init', { task, ...options }, async () => {\n try {\n console.log('\uD83C\uDFAD Initializing Ralph Wiggum loop...');\n \n // Use basic Ralph loop for now (StackMemory integration requires DB setup)\n const loop = new RalphLoop({\n baseDir: '.ralph',\n maxIterations: parseInt(options.maxIterations),\n verbose: true\n });\n\n // Parse criteria\n const criteria = options.criteria \n ? options.criteria.split(',').map((c: string) => `- ${c.trim()}`).join('\\n')\n : '- All tests pass\\n- Code works correctly\\n- No lint errors';\n\n // Load StackMemory context if requested\n let enhancedTask = task;\n \n if (options.useContext || options.learnFromSimilar) {\n try {\n await stackMemoryContextLoader.initialize();\n \n const contextResponse = await stackMemoryContextLoader.loadInitialContext({\n task,\n usePatterns: true,\n useSimilarTasks: options.learnFromSimilar,\n maxTokens: 3000\n });\n \n if (contextResponse.context) {\n enhancedTask = `${task}\\n\\n${contextResponse.context}`;\n console.log(`\uD83D\uDCDA Loaded context from ${contextResponse.sources.length} sources`);\n console.log(`\uD83C\uDFAF Context tokens: ${contextResponse.metadata.totalTokens}`);\n }\n } catch (error: unknown) {\n console.log(`\u26A0\uFE0F Context loading failed: ${(error as Error).message}`);\n console.log('Proceeding without context...');\n }\n }\n\n await loop.initialize(enhancedTask, criteria);\n \n console.log('\u2705 Ralph loop initialized!');\n console.log(`\uD83D\uDCCB Task: ${task}`);\n console.log(`\uD83C\uDFAF Max iterations: ${options.maxIterations}`);\n console.log(`\uD83D\uDCC1 Loop directory: .ralph/`);\n console.log('\\nNext steps:');\n console.log(' stackmemory ralph run # Start the loop');\n console.log(' stackmemory ralph status # Check status');\n\n } catch (error: unknown) {\n logger.error('Failed to initialize Ralph loop', error as Error);\n console.error('\u274C Initialization failed:', (error as Error).message);\n process.exit(1);\n }\n });\n });\n\n // Run the Ralph loop\n ralph\n .command('run')\n .description('Run the Ralph Wiggum loop')\n .option('--verbose', 'Verbose output')\n .option('--pause-on-error', 'Pause on validation errors')\n .action(async (options) => {\n return trace.command('ralph-run', options, async () => {\n try {\n if (!existsSync('.ralph')) {\n console.error('\u274C No Ralph loop found. Run \"stackmemory ralph init\" first.');\n return;\n }\n\n console.log('\uD83C\uDFAD Starting Ralph Wiggum loop...');\n \n const loop = new RalphLoop({\n baseDir: '.ralph',\n verbose: options.verbose\n });\n\n await loop.run();\n \n } catch (error: unknown) {\n logger.error('Failed to run Ralph loop', error as Error);\n console.error('\u274C Loop execution failed:', (error as Error).message);\n process.exit(1);\n }\n });\n });\n\n // Show loop status\n ralph\n .command('status')\n .description('Show current Ralph loop status')\n .option('--detailed', 'Show detailed iteration history')\n .action(async (options) => {\n return trace.command('ralph-status', options, async () => {\n try {\n if (!existsSync('.ralph')) {\n console.log('\u274C No Ralph loop found in current directory');\n return;\n }\n\n // Get basic status from files\n \n // Read status from files\n const task = readFileSync('.ralph/task.md', 'utf8');\n const iteration = parseInt(readFileSync('.ralph/iteration.txt', 'utf8') || '0');\n const isComplete = existsSync('.ralph/work-complete.txt');\n const feedback = existsSync('.ralph/feedback.txt') ? readFileSync('.ralph/feedback.txt', 'utf8') : '';\n \n console.log('\uD83C\uDFAD Ralph Loop Status:');\n console.log(` Task: ${task.substring(0, 80)}...`);\n console.log(` Iteration: ${iteration}`);\n console.log(` Status: ${isComplete ? '\u2705 COMPLETE' : '\uD83D\uDD04 IN PROGRESS'}`);\n \n if (feedback) {\n console.log(` Last feedback: ${feedback.substring(0, 100)}...`);\n }\n\n if (options.detailed && existsSync('.ralph/progress.jsonl')) {\n console.log('\\n\uD83D\uDCCA Iteration History:');\n const progressLines = readFileSync('.ralph/progress.jsonl', 'utf8')\n .split('\\n')\n .filter(Boolean)\n .map(line => JSON.parse(line));\n \n progressLines.forEach((p: any) => {\n const progress = p as { iteration: number; validation?: { testsPass: boolean }; changes: number; errors: number };\n const status = progress.validation?.testsPass ? '\u2705' : '\u274C';\n console.log(` ${progress.iteration}: ${status} ${progress.changes} changes, ${progress.errors} errors`);\n });\n }\n\n // TODO: Show StackMemory integration status when available\n\n } catch (error: unknown) {\n logger.error('Failed to get Ralph status', error as Error);\n console.error('\u274C Status check failed:', (error as Error).message);\n }\n });\n });\n\n // Resume a crashed or paused loop\n ralph\n .command('resume')\n .description('Resume a crashed or paused Ralph loop')\n .option('--from-stackmemory', 'Restore from StackMemory backup')\n .action(async (options) => {\n return trace.command('ralph-resume', options, async () => {\n try {\n console.log('\uD83D\uDD04 Resuming Ralph loop...');\n \n const loop = new RalphLoop({ baseDir: '.ralph', verbose: true });\n \n if (options.fromStackmemory) {\n console.log('\uD83D\uDCDA StackMemory restore feature coming soon...');\n }\n\n await loop.run(); // Resume by continuing the loop\n \n } catch (error: unknown) {\n logger.error('Failed to resume Ralph loop', error as Error);\n console.error('\u274C Resume failed:', (error as Error).message);\n process.exit(1);\n }\n });\n });\n\n // Stop the current loop\n ralph\n .command('stop')\n .description('Stop the current Ralph loop')\n .option('--save-progress', 'Save current progress to StackMemory')\n .action(async (options) => {\n return trace.command('ralph-stop', options, async () => {\n try {\n if (!existsSync('.ralph')) {\n console.log('\u274C No active Ralph loop found');\n return;\n }\n\n console.log('\uD83D\uDED1 Stopping Ralph loop...');\n \n if (options.saveProgress) {\n console.log('\uD83D\uDCBE StackMemory progress save feature coming soon...');\n }\n\n // Create stop signal file\n writeFileSync('.ralph/stop-signal.txt', new Date().toISOString());\n console.log('\u2705 Stop signal sent');\n \n } catch (error: unknown) {\n logger.error('Failed to stop Ralph loop', error as Error);\n console.error('\u274C Stop failed:', (error as Error).message);\n }\n });\n });\n\n // Clean up loop artifacts\n ralph\n .command('clean')\n .description('Clean up Ralph loop artifacts')\n .option('--keep-history', 'Keep iteration history')\n .action(async (options) => {\n return trace.command('ralph-clean', options, async () => {\n try {\n // Clean up Ralph directory\n if (!options.keepHistory && existsSync('.ralph/history')) {\n const { execSync } = await import('child_process');\n execSync('rm -rf .ralph/history');\n }\n \n // Remove working files but keep task definition\n if (existsSync('.ralph/work-complete.txt')) {\n const fs = await import('fs');\n fs.unlinkSync('.ralph/work-complete.txt');\n }\n \n console.log('\uD83E\uDDF9 Ralph loop artifacts cleaned');\n \n } catch (error: unknown) {\n logger.error('Failed to clean Ralph artifacts', error as Error);\n console.error('\u274C Cleanup failed:', (error as Error).message);\n }\n });\n });\n\n // Debug and diagnostics\n ralph\n .command('debug')\n .description('Debug Ralph loop state and diagnostics')\n .option('--reconcile', 'Force state reconciliation')\n .option('--validate-context', 'Validate context budget')\n .action(async (options) => {\n return trace.command('ralph-debug', options, async () => {\n try {\n console.log('\uD83D\uDD0D Ralph Loop Debug Information:');\n \n if (options.reconcile) {\n console.log('\uD83D\uDD27 State reconciliation feature coming soon...');\n }\n\n if (options.validateContext) {\n console.log('\uD83D\uDCCA Context validation feature coming soon...');\n }\n\n // Show file structure\n if (existsSync('.ralph')) {\n console.log('\\n\uD83D\uDCC1 Ralph directory structure:');\n const { execSync } = await import('child_process');\n try {\n const tree = execSync('find .ralph -type f | head -20', { encoding: 'utf8' });\n console.log(tree);\n } catch {\n console.log(' (Unable to show directory tree)');\n }\n }\n \n } catch (error: unknown) {\n logger.error('Ralph debug failed', error as Error);\n console.error('\u274C Debug failed:', (error as Error).message);\n }\n });\n });\n\n // Swarm coordination commands\n ralph\n .command('swarm')\n .description('Launch a swarm of specialized agents')\n .argument('<project>', 'Project description')\n .option('--agents <agents>', 'Comma-separated list of agent roles (architect,developer,tester,etc)', 'developer,tester')\n .option('--max-agents <n>', 'Maximum number of agents', '5')\n .action(async (project, options) => {\n return trace.command('ralph-swarm', { project, ...options }, async () => {\n try {\n console.log('\uD83E\uDDBE Launching Ralph swarm...');\n \n await swarmCoordinator.initialize();\n \n const agentRoles = options.agents.split(',').map((r: string) => r.trim());\n const agentSpecs = agentRoles.map((role: string) => ({\n role: role as any,\n conflictResolution: 'defer_to_expertise',\n collaborationPreferences: []\n }));\n \n const swarmId = await swarmCoordinator.launchSwarm(project, agentSpecs);\n \n console.log(`\u2705 Swarm launched with ID: ${swarmId}`);\n console.log(`\uD83D\uDC65 ${agentSpecs.length} agents working on: ${project}`);\n console.log('\\nNext steps:');\n console.log(' stackmemory ralph swarm-status <swarmId> # Check progress');\n console.log(' stackmemory ralph swarm-stop <swarmId> # Stop swarm');\n \n } catch (error: unknown) {\n logger.error('Swarm launch failed', error as Error);\n console.error('\u274C Swarm launch failed:', (error as Error).message);\n }\n });\n });\n\n // Multi-loop orchestration for complex tasks\n ralph\n .command('orchestrate')\n .description('Orchestrate multiple Ralph loops for complex tasks')\n .argument('<description>', 'Complex task description')\n .option('--criteria <criteria>', 'Success criteria (comma separated)')\n .option('--max-loops <n>', 'Maximum parallel loops', '3')\n .option('--sequential', 'Force sequential execution')\n .action(async (description, options) => {\n return trace.command('ralph-orchestrate', { description, ...options }, async () => {\n try {\n console.log('\uD83C\uDFAD Orchestrating complex task...');\n \n await multiLoopOrchestrator.initialize();\n \n const criteria = options.criteria ? \n options.criteria.split(',').map((c: string) => c.trim()) :\n ['Task completed successfully', 'All components working', 'Tests pass'];\n \n const result = await multiLoopOrchestrator.orchestrateComplexTask(\n description,\n criteria,\n {\n maxLoops: parseInt(options.maxLoops),\n forceSequential: options.sequential\n }\n );\n \n console.log('\u2705 Orchestration completed!');\n console.log(`\uD83D\uDCCA Results: ${result.completedLoops.length} successful, ${result.failedLoops.length} failed`);\n console.log(`\u23F1\uFE0F Total duration: ${Math.round(result.totalDuration / 1000)}s`);\n \n if (result.insights.length > 0) {\n console.log('\\n\uD83D\uDCA1 Insights:');\n result.insights.forEach(insight => console.log(` \u2022 ${insight}`));\n }\n \n } catch (error: unknown) {\n logger.error('Orchestration failed', error as Error);\n console.error('\u274C Orchestration failed:', (error as Error).message);\n }\n });\n });\n\n // Pattern learning command\n ralph\n .command('learn')\n .description('Learn patterns from completed loops')\n .option('--task-type <type>', 'Learn patterns for specific task type')\n .action(async (options) => {\n return trace.command('ralph-learn', options, async () => {\n try {\n console.log('\uD83E\uDDE0 Learning patterns from completed loops...');\n \n await patternLearner.initialize();\n \n const patterns = options.taskType ?\n await patternLearner.learnForTaskType(options.taskType) :\n await patternLearner.learnFromCompletedLoops();\n \n console.log(`\u2705 Learned ${patterns.length} patterns`);\n \n if (patterns.length > 0) {\n console.log('\\n\uD83D\uDCCA Top patterns:');\n patterns.slice(0, 5).forEach(pattern => {\n console.log(` \u2022 ${pattern.pattern} (${Math.round(pattern.confidence * 100)}% confidence)`);\n });\n }\n \n } catch (error: unknown) {\n logger.error('Pattern learning failed', error as Error);\n console.error('\u274C Pattern learning failed:', (error as Error).message);\n }\n });\n });\n\n // Enhanced debug command with visualization\n ralph\n .command('debug-enhanced')\n .description('Advanced debugging with visualization')\n .option('--loop-id <id>', 'Specific loop to debug')\n .option('--generate-report', 'Generate comprehensive debug report')\n .option('--timeline', 'Generate timeline visualization')\n .action(async (options) => {\n return trace.command('ralph-debug-enhanced', options, async () => {\n try {\n if (!existsSync('.ralph') && !options.loopId) {\n console.log('\u274C No Ralph loop found. Run a loop first or specify --loop-id');\n return;\n }\n \n console.log('\uD83D\uDD0D Starting enhanced debugging...');\n \n await ralphDebugger.initialize();\n \n const loopId = options.loopId || 'current';\n const debugSession = await ralphDebugger.startDebugSession(loopId, '.ralph');\n \n if (options.generateReport) {\n const report = await ralphDebugger.generateDebugReport(loopId);\n console.log(`\uD83D\uDCCB Debug report generated: ${report.exportPath}`);\n }\n \n if (options.timeline) {\n const timelinePath = await ralphDebugger.generateLoopTimeline(loopId);\n console.log(`\uD83D\uDCCA Timeline visualization: ${timelinePath}`);\n }\n \n console.log('\uD83D\uDD0D Debug analysis complete');\n \n } catch (error: unknown) {\n logger.error('Enhanced debugging failed', error as Error);\n console.error('\u274C Debug failed:', (error as Error).message);\n }\n });\n });\n\n // TUI command for real-time monitoring\n ralph\n .command('tui')\n .description('Launch TUI monitor for active swarms')\n .option('--swarm-id <id>', 'Monitor specific swarm ID')\n .action(async (options) => {\n try {\n const { SwarmTUI } = await import('../../features/tui/swarm-monitor.js');\n \n const tui = new SwarmTUI();\n \n // Initialize with optional swarm ID\n await tui.initialize(undefined, options.swarmId);\n tui.start();\n \n } catch (error: unknown) {\n logger.error('TUI launch failed', error as Error);\n console.error('\u274C TUI failed:', (error as Error).message);\n process.exit(1);\n }\n });\n\n return ralph;\n}\n\nexport default createRalphCommand;"],
5
- "mappings": "AAKA,SAAS,eAAe;AACxB,SAAS,cAAc;AACvB,SAAS,iBAAiB;AAC1B,SAAS,gCAAgC;AACzC,SAAS,sBAAsB;AAC/B,SAAS,6BAA6B;AACtC,SAAS,wBAAwB;AACjC,SAAS,qBAAqB;AAC9B,SAAS,YAAY,cAAc,qBAAqB;AACxD,SAAS,aAAa;AAEf,SAAS,qBAA8B;AAC5C,QAAM,QAAQ,IAAI,QAAQ,OAAO,EAC9B,YAAY,gDAAgD;AAG/D,QACG,QAAQ,MAAM,EACd,YAAY,oCAAoC,EAChD,SAAS,UAAU,kBAAkB,EACrC,OAAO,6BAA6B,uCAAuC,EAC3E,OAAO,wBAAwB,sBAAsB,IAAI,EACzD,OAAO,iBAAiB,wCAAwC,EAChE,OAAO,wBAAwB,6CAA6C,EAC5E,OAAO,OAAO,MAAM,YAAY;AAC/B,WAAO,MAAM,QAAQ,cAAc,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY;AACnE,UAAI;AACF,gBAAQ,IAAI,6CAAsC;AAGlD,cAAM,OAAO,IAAI,UAAU;AAAA,UACzB,SAAS;AAAA,UACT,eAAe,SAAS,QAAQ,aAAa;AAAA,UAC7C,SAAS;AAAA,QACX,CAAC;AAGD,cAAM,WAAW,QAAQ,WACrB,QAAQ,SAAS,MAAM,GAAG,EAAE,IAAI,CAAC,MAAc,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,IAAI,IACzE;AAGJ,YAAI,eAAe;AAEnB,YAAI,QAAQ,cAAc,QAAQ,kBAAkB;AAClD,cAAI;AACF,kBAAM,yBAAyB,WAAW;AAE1C,kBAAM,kBAAkB,MAAM,yBAAyB,mBAAmB;AAAA,cACxE;AAAA,cACA,aAAa;AAAA,cACb,iBAAiB,QAAQ;AAAA,cACzB,WAAW;AAAA,YACb,CAAC;AAED,gBAAI,gBAAgB,SAAS;AAC3B,6BAAe,GAAG,IAAI;AAAA;AAAA,EAAO,gBAAgB,OAAO;AACpD,sBAAQ,IAAI,iCAA0B,gBAAgB,QAAQ,MAAM,UAAU;AAC9E,sBAAQ,IAAI,6BAAsB,gBAAgB,SAAS,WAAW,EAAE;AAAA,YAC1E;AAAA,UACF,SAAS,OAAgB;AACvB,oBAAQ,IAAI,yCAAgC,MAAgB,OAAO,EAAE;AACrE,oBAAQ,IAAI,+BAA+B;AAAA,UAC7C;AAAA,QACF;AAEA,cAAM,KAAK,WAAW,cAAc,QAAQ;AAE5C,gBAAQ,IAAI,gCAA2B;AACvC,gBAAQ,IAAI,mBAAY,IAAI,EAAE;AAC9B,gBAAQ,IAAI,6BAAsB,QAAQ,aAAa,EAAE;AACzD,gBAAQ,IAAI,mCAA4B;AACxC,gBAAQ,IAAI,eAAe;AAC3B,gBAAQ,IAAI,8CAA8C;AAC1D,gBAAQ,IAAI,4CAA4C;AAAA,MAE1D,SAAS,OAAgB;AACvB,eAAO,MAAM,mCAAmC,KAAc;AAC9D,gBAAQ,MAAM,iCAA6B,MAAgB,OAAO;AAClE,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAGH,QACG,QAAQ,KAAK,EACb,YAAY,2BAA2B,EACvC,OAAO,aAAa,gBAAgB,EACpC,OAAO,oBAAoB,4BAA4B,EACvD,OAAO,OAAO,YAAY;AACzB,WAAO,MAAM,QAAQ,aAAa,SAAS,YAAY;AACrD,UAAI;AACF,YAAI,CAAC,WAAW,QAAQ,GAAG;AACzB,kBAAQ,MAAM,iEAA4D;AAC1E;AAAA,QACF;AAEA,gBAAQ,IAAI,yCAAkC;AAE9C,cAAM,OAAO,IAAI,UAAU;AAAA,UACzB,SAAS;AAAA,UACT,SAAS,QAAQ;AAAA,QACnB,CAAC;AAED,cAAM,KAAK,IAAI;AAAA,MAEjB,SAAS,OAAgB;AACvB,eAAO,MAAM,4BAA4B,KAAc;AACvD,gBAAQ,MAAM,iCAA6B,MAAgB,OAAO;AAClE,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAGH,QACG,QAAQ,QAAQ,EAChB,YAAY,gCAAgC,EAC5C,OAAO,cAAc,iCAAiC,EACtD,OAAO,OAAO,YAAY;AACzB,WAAO,MAAM,QAAQ,gBAAgB,SAAS,YAAY;AACxD,UAAI;AACF,YAAI,CAAC,WAAW,QAAQ,GAAG;AACzB,kBAAQ,IAAI,iDAA4C;AACxD;AAAA,QACF;AAKA,cAAM,OAAO,aAAa,kBAAkB,MAAM;AAClD,cAAM,YAAY,SAAS,aAAa,wBAAwB,MAAM,KAAK,GAAG;AAC9E,cAAM,aAAa,WAAW,0BAA0B;AACxD,cAAM,WAAW,WAAW,qBAAqB,IAAI,aAAa,uBAAuB,MAAM,IAAI;AAEnG,gBAAQ,IAAI,8BAAuB;AACnC,gBAAQ,IAAI,YAAY,KAAK,UAAU,GAAG,EAAE,CAAC,KAAK;AAClD,gBAAQ,IAAI,iBAAiB,SAAS,EAAE;AACxC,gBAAQ,IAAI,cAAc,aAAa,oBAAe,uBAAgB,EAAE;AAExE,YAAI,UAAU;AACZ,kBAAQ,IAAI,qBAAqB,SAAS,UAAU,GAAG,GAAG,CAAC,KAAK;AAAA,QAClE;AAEA,YAAI,QAAQ,YAAY,WAAW,uBAAuB,GAAG;AAC3D,kBAAQ,IAAI,gCAAyB;AACrC,gBAAM,gBAAgB,aAAa,yBAAyB,MAAM,EAC/D,MAAM,IAAI,EACV,OAAO,OAAO,EACd,IAAI,UAAQ,KAAK,MAAM,IAAI,CAAC;AAE/B,wBAAc,QAAQ,CAAC,MAAW;AAChC,kBAAM,WAAW;AACjB,kBAAM,SAAS,SAAS,YAAY,YAAY,WAAM;AACtD,oBAAQ,IAAI,QAAQ,SAAS,SAAS,KAAK,MAAM,IAAI,SAAS,OAAO,aAAa,SAAS,MAAM,SAAS;AAAA,UAC5G,CAAC;AAAA,QACH;AAAA,MAIF,SAAS,OAAgB;AACvB,eAAO,MAAM,8BAA8B,KAAc;AACzD,gBAAQ,MAAM,+BAA2B,MAAgB,OAAO;AAAA,MAClE;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAGH,QACG,QAAQ,QAAQ,EAChB,YAAY,uCAAuC,EACnD,OAAO,sBAAsB,iCAAiC,EAC9D,OAAO,OAAO,YAAY;AACzB,WAAO,MAAM,QAAQ,gBAAgB,SAAS,YAAY;AACxD,UAAI;AACF,gBAAQ,IAAI,kCAA2B;AAEvC,cAAM,OAAO,IAAI,UAAU,EAAE,SAAS,UAAU,SAAS,KAAK,CAAC;AAE/D,YAAI,QAAQ,iBAAiB;AAC3B,kBAAQ,IAAI,sDAA+C;AAAA,QAC7D;AAEA,cAAM,KAAK,IAAI;AAAA,MAEjB,SAAS,OAAgB;AACvB,eAAO,MAAM,+BAA+B,KAAc;AAC1D,gBAAQ,MAAM,yBAAqB,MAAgB,OAAO;AAC1D,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAGH,QACG,QAAQ,MAAM,EACd,YAAY,6BAA6B,EACzC,OAAO,mBAAmB,sCAAsC,EAChE,OAAO,OAAO,YAAY;AACzB,WAAO,MAAM,QAAQ,cAAc,SAAS,YAAY;AACtD,UAAI;AACF,YAAI,CAAC,WAAW,QAAQ,GAAG;AACzB,kBAAQ,IAAI,mCAA8B;AAC1C;AAAA,QACF;AAEA,gBAAQ,IAAI,kCAA2B;AAEvC,YAAI,QAAQ,cAAc;AACxB,kBAAQ,IAAI,4DAAqD;AAAA,QACnE;AAGA,sBAAc,2BAA0B,oBAAI,KAAK,GAAE,YAAY,CAAC;AAChE,gBAAQ,IAAI,yBAAoB;AAAA,MAElC,SAAS,OAAgB;AACvB,eAAO,MAAM,6BAA6B,KAAc;AACxD,gBAAQ,MAAM,uBAAmB,MAAgB,OAAO;AAAA,MAC1D;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAGH,QACG,QAAQ,OAAO,EACf,YAAY,+BAA+B,EAC3C,OAAO,kBAAkB,wBAAwB,EACjD,OAAO,OAAO,YAAY;AACzB,WAAO,MAAM,QAAQ,eAAe,SAAS,YAAY;AACvD,UAAI;AAEF,YAAI,CAAC,QAAQ,eAAe,WAAW,gBAAgB,GAAG;AACxD,gBAAM,EAAE,SAAS,IAAI,MAAM,OAAO,eAAe;AACjD,mBAAS,uBAAuB;AAAA,QAClC;AAGA,YAAI,WAAW,0BAA0B,GAAG;AAC1C,gBAAM,KAAK,MAAM,OAAO,IAAI;AAC5B,aAAG,WAAW,0BAA0B;AAAA,QAC1C;AAEA,gBAAQ,IAAI,wCAAiC;AAAA,MAE/C,SAAS,OAAgB;AACvB,eAAO,MAAM,mCAAmC,KAAc;AAC9D,gBAAQ,MAAM,0BAAsB,MAAgB,OAAO;AAAA,MAC7D;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAGH,QACG,QAAQ,OAAO,EACf,YAAY,wCAAwC,EACpD,OAAO,eAAe,4BAA4B,EAClD,OAAO,sBAAsB,yBAAyB,EACtD,OAAO,OAAO,YAAY;AACzB,WAAO,MAAM,QAAQ,eAAe,SAAS,YAAY;AACvD,UAAI;AACF,gBAAQ,IAAI,yCAAkC;AAE9C,YAAI,QAAQ,WAAW;AACrB,kBAAQ,IAAI,uDAAgD;AAAA,QAC9D;AAEA,YAAI,QAAQ,iBAAiB;AAC3B,kBAAQ,IAAI,qDAA8C;AAAA,QAC5D;AAGA,YAAI,WAAW,QAAQ,GAAG;AACxB,kBAAQ,IAAI,wCAAiC;AAC7C,gBAAM,EAAE,SAAS,IAAI,MAAM,OAAO,eAAe;AACjD,cAAI;AACF,kBAAM,OAAO,SAAS,kCAAkC,EAAE,UAAU,OAAO,CAAC;AAC5E,oBAAQ,IAAI,IAAI;AAAA,UAClB,QAAQ;AACN,oBAAQ,IAAI,oCAAoC;AAAA,UAClD;AAAA,QACF;AAAA,MAEF,SAAS,OAAgB;AACvB,eAAO,MAAM,sBAAsB,KAAc;AACjD,gBAAQ,MAAM,wBAAoB,MAAgB,OAAO;AAAA,MAC3D;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAGH,QACG,QAAQ,OAAO,EACf,YAAY,sCAAsC,EAClD,SAAS,aAAa,qBAAqB,EAC3C,OAAO,qBAAqB,wEAAwE,kBAAkB,EACtH,OAAO,oBAAoB,4BAA4B,GAAG,EAC1D,OAAO,OAAO,SAAS,YAAY;AAClC,WAAO,MAAM,QAAQ,eAAe,EAAE,SAAS,GAAG,QAAQ,GAAG,YAAY;AACvE,UAAI;AACF,gBAAQ,IAAI,oCAA6B;AAEzC,cAAM,iBAAiB,WAAW;AAElC,cAAM,aAAa,QAAQ,OAAO,MAAM,GAAG,EAAE,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC;AACxE,cAAM,aAAa,WAAW,IAAI,CAAC,UAAkB;AAAA,UACnD;AAAA,UACA,oBAAoB;AAAA,UACpB,0BAA0B,CAAC;AAAA,QAC7B,EAAE;AAEF,cAAM,UAAU,MAAM,iBAAiB,YAAY,SAAS,UAAU;AAEtE,gBAAQ,IAAI,kCAA6B,OAAO,EAAE;AAClD,gBAAQ,IAAI,aAAM,WAAW,MAAM,uBAAuB,OAAO,EAAE;AACnE,gBAAQ,IAAI,eAAe;AAC3B,gBAAQ,IAAI,8DAA8D;AAC1E,gBAAQ,IAAI,0DAA0D;AAAA,MAExE,SAAS,OAAgB;AACvB,eAAO,MAAM,uBAAuB,KAAc;AAClD,gBAAQ,MAAM,+BAA2B,MAAgB,OAAO;AAAA,MAClE;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAGH,QACG,QAAQ,aAAa,EACrB,YAAY,oDAAoD,EAChE,SAAS,iBAAiB,0BAA0B,EACpD,OAAO,yBAAyB,oCAAoC,EACpE,OAAO,mBAAmB,0BAA0B,GAAG,EACvD,OAAO,gBAAgB,4BAA4B,EACnD,OAAO,OAAO,aAAa,YAAY;AACtC,WAAO,MAAM,QAAQ,qBAAqB,EAAE,aAAa,GAAG,QAAQ,GAAG,YAAY;AACjF,UAAI;AACF,gBAAQ,IAAI,yCAAkC;AAE9C,cAAM,sBAAsB,WAAW;AAEvC,cAAM,WAAW,QAAQ,WACvB,QAAQ,SAAS,MAAM,GAAG,EAAE,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC,IACvD,CAAC,+BAA+B,0BAA0B,YAAY;AAExE,cAAM,SAAS,MAAM,sBAAsB;AAAA,UACzC;AAAA,UACA;AAAA,UACA;AAAA,YACE,UAAU,SAAS,QAAQ,QAAQ;AAAA,YACnC,iBAAiB,QAAQ;AAAA,UAC3B;AAAA,QACF;AAEA,gBAAQ,IAAI,iCAA4B;AACxC,gBAAQ,IAAI,sBAAe,OAAO,eAAe,MAAM,gBAAgB,OAAO,YAAY,MAAM,SAAS;AACzG,gBAAQ,IAAI,iCAAuB,KAAK,MAAM,OAAO,gBAAgB,GAAI,CAAC,GAAG;AAE7E,YAAI,OAAO,SAAS,SAAS,GAAG;AAC9B,kBAAQ,IAAI,uBAAgB;AAC5B,iBAAO,SAAS,QAAQ,aAAW,QAAQ,IAAI,aAAQ,OAAO,EAAE,CAAC;AAAA,QACnE;AAAA,MAEF,SAAS,OAAgB;AACvB,eAAO,MAAM,wBAAwB,KAAc;AACnD,gBAAQ,MAAM,gCAA4B,MAAgB,OAAO;AAAA,MACnE;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAGH,QACG,QAAQ,OAAO,EACf,YAAY,qCAAqC,EACjD,OAAO,sBAAsB,uCAAuC,EACpE,OAAO,OAAO,YAAY;AACzB,WAAO,MAAM,QAAQ,eAAe,SAAS,YAAY;AACvD,UAAI;AACF,gBAAQ,IAAI,qDAA8C;AAE1D,cAAM,eAAe,WAAW;AAEhC,cAAM,WAAW,QAAQ,WACvB,MAAM,eAAe,iBAAiB,QAAQ,QAAQ,IACtD,MAAM,eAAe,wBAAwB;AAE/C,gBAAQ,IAAI,kBAAa,SAAS,MAAM,WAAW;AAEnD,YAAI,SAAS,SAAS,GAAG;AACvB,kBAAQ,IAAI,2BAAoB;AAChC,mBAAS,MAAM,GAAG,CAAC,EAAE,QAAQ,aAAW;AACtC,oBAAQ,IAAI,aAAQ,QAAQ,OAAO,KAAK,KAAK,MAAM,QAAQ,aAAa,GAAG,CAAC,eAAe;AAAA,UAC7F,CAAC;AAAA,QACH;AAAA,MAEF,SAAS,OAAgB;AACvB,eAAO,MAAM,2BAA2B,KAAc;AACtD,gBAAQ,MAAM,mCAA+B,MAAgB,OAAO;AAAA,MACtE;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAGH,QACG,QAAQ,gBAAgB,EACxB,YAAY,uCAAuC,EACnD,OAAO,kBAAkB,wBAAwB,EACjD,OAAO,qBAAqB,qCAAqC,EACjE,OAAO,cAAc,iCAAiC,EACtD,OAAO,OAAO,YAAY;AACzB,WAAO,MAAM,QAAQ,wBAAwB,SAAS,YAAY;AAChE,UAAI;AACF,YAAI,CAAC,WAAW,QAAQ,KAAK,CAAC,QAAQ,QAAQ;AAC5C,kBAAQ,IAAI,mEAA8D;AAC1E;AAAA,QACF;AAEA,gBAAQ,IAAI,0CAAmC;AAE/C,cAAM,cAAc,WAAW;AAE/B,cAAM,SAAS,QAAQ,UAAU;AACjC,cAAM,eAAe,MAAM,cAAc,kBAAkB,QAAQ,QAAQ;AAE3E,YAAI,QAAQ,gBAAgB;AAC1B,gBAAM,SAAS,MAAM,cAAc,oBAAoB,MAAM;AAC7D,kBAAQ,IAAI,qCAA8B,OAAO,UAAU,EAAE;AAAA,QAC/D;AAEA,YAAI,QAAQ,UAAU;AACpB,gBAAM,eAAe,MAAM,cAAc,qBAAqB,MAAM;AACpE,kBAAQ,IAAI,qCAA8B,YAAY,EAAE;AAAA,QAC1D;AAEA,gBAAQ,IAAI,mCAA4B;AAAA,MAE1C,SAAS,OAAgB;AACvB,eAAO,MAAM,6BAA6B,KAAc;AACxD,gBAAQ,MAAM,wBAAoB,MAAgB,OAAO;AAAA,MAC3D;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAGH,QACG,QAAQ,KAAK,EACb,YAAY,sCAAsC,EAClD,OAAO,mBAAmB,2BAA2B,EACrD,OAAO,OAAO,YAAY;AACzB,QAAI;AACF,YAAM,EAAE,SAAS,IAAI,MAAM,OAAO,qCAAqC;AAEvE,YAAM,MAAM,IAAI,SAAS;AAGzB,YAAM,IAAI,WAAW,QAAW,QAAQ,OAAO;AAC/C,UAAI,MAAM;AAAA,IAEZ,SAAS,OAAgB;AACvB,aAAO,MAAM,qBAAqB,KAAc;AAChD,cAAQ,MAAM,sBAAkB,MAAgB,OAAO;AACvD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAEH,SAAO;AACT;AAEA,IAAO,gBAAQ;",
4
+ "sourcesContent": ["/**\n * Ralph Wiggum Loop Commands\n * CLI interface for Ralph-StackMemory integration\n */\n\nimport { Command } from 'commander';\nimport { logger } from '../../core/monitoring/logger.js';\nimport { RalphLoop } from '../../../scripts/ralph-loop-implementation.js';\nimport { stackMemoryContextLoader } from '../../integrations/ralph/context/stackmemory-context-loader.js';\nimport { patternLearner } from '../../integrations/ralph/learning/pattern-learner.js';\nimport { multiLoopOrchestrator } from '../../integrations/ralph/orchestration/multi-loop-orchestrator.js';\nimport { swarmCoordinator } from '../../integrations/ralph/swarm/swarm-coordinator.js';\nimport { ralphDebugger } from '../../integrations/ralph/visualization/ralph-debugger.js';\nimport { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { trace } from '../../core/trace/index.js';\n\nexport function createRalphCommand(): Command {\n const ralph = new Command('ralph').description(\n 'Ralph Wiggum Loop integration with StackMemory'\n );\n\n // Initialize a new Ralph loop\n ralph\n .command('init')\n .description('Initialize a new Ralph Wiggum loop')\n .argument('<task>', 'Task description')\n .option(\n '-c, --criteria <criteria>',\n 'Completion criteria (comma separated)'\n )\n .option('--max-iterations <n>', 'Maximum iterations', '50')\n .option('--use-context', 'Load relevant context from StackMemory')\n .option(\n '--learn-from-similar',\n 'Apply patterns from similar completed tasks'\n )\n .action(async (task, options) => {\n return trace.command('ralph-init', { task, ...options }, async () => {\n try {\n console.log('\uD83C\uDFAD Initializing Ralph Wiggum loop...');\n\n // Use basic Ralph loop for now (StackMemory integration requires DB setup)\n const loop = new RalphLoop({\n baseDir: '.ralph',\n maxIterations: parseInt(options.maxIterations),\n verbose: true,\n });\n\n // Parse criteria\n const criteria = options.criteria\n ? options.criteria\n .split(',')\n .map((c: string) => `- ${c.trim()}`)\n .join('\\n')\n : '- All tests pass\\n- Code works correctly\\n- No lint errors';\n\n // Load StackMemory context if requested\n let enhancedTask = task;\n\n if (options.useContext || options.learnFromSimilar) {\n try {\n await stackMemoryContextLoader.initialize();\n\n const contextResponse =\n await stackMemoryContextLoader.loadInitialContext({\n task,\n usePatterns: true,\n useSimilarTasks: options.learnFromSimilar,\n maxTokens: 3000,\n });\n\n if (contextResponse.context) {\n enhancedTask = `${task}\\n\\n${contextResponse.context}`;\n console.log(\n `\uD83D\uDCDA Loaded context from ${contextResponse.sources.length} sources`\n );\n console.log(\n `\uD83C\uDFAF Context tokens: ${contextResponse.metadata.totalTokens}`\n );\n }\n } catch (error: unknown) {\n console.log(\n `\u26A0\uFE0F Context loading failed: ${(error as Error).message}`\n );\n console.log('Proceeding without context...');\n }\n }\n\n await loop.initialize(enhancedTask, criteria);\n\n console.log('\u2705 Ralph loop initialized!');\n console.log(`\uD83D\uDCCB Task: ${task}`);\n console.log(`\uD83C\uDFAF Max iterations: ${options.maxIterations}`);\n console.log(`\uD83D\uDCC1 Loop directory: .ralph/`);\n console.log('\\nNext steps:');\n console.log(' stackmemory ralph run # Start the loop');\n console.log(' stackmemory ralph status # Check status');\n } catch (error: unknown) {\n logger.error('Failed to initialize Ralph loop', error as Error);\n console.error('\u274C Initialization failed:', (error as Error).message);\n process.exit(1);\n }\n });\n });\n\n // Run the Ralph loop\n ralph\n .command('run')\n .description('Run the Ralph Wiggum loop')\n .option('--verbose', 'Verbose output')\n .option('--pause-on-error', 'Pause on validation errors')\n .action(async (options) => {\n return trace.command('ralph-run', options, async () => {\n try {\n if (!existsSync('.ralph')) {\n console.error(\n '\u274C No Ralph loop found. Run \"stackmemory ralph init\" first.'\n );\n return;\n }\n\n console.log('\uD83C\uDFAD Starting Ralph Wiggum loop...');\n\n const loop = new RalphLoop({\n baseDir: '.ralph',\n verbose: options.verbose,\n });\n\n await loop.run();\n } catch (error: unknown) {\n logger.error('Failed to run Ralph loop', error as Error);\n console.error('\u274C Loop execution failed:', (error as Error).message);\n process.exit(1);\n }\n });\n });\n\n // Show loop status\n ralph\n .command('status')\n .description('Show current Ralph loop status')\n .option('--detailed', 'Show detailed iteration history')\n .action(async (options) => {\n return trace.command('ralph-status', options, async () => {\n try {\n if (!existsSync('.ralph')) {\n console.log('\u274C No Ralph loop found in current directory');\n return;\n }\n\n // Get basic status from files\n\n // Read status from files\n const task = readFileSync('.ralph/task.md', 'utf8');\n const iteration = parseInt(\n readFileSync('.ralph/iteration.txt', 'utf8') || '0'\n );\n const isComplete = existsSync('.ralph/work-complete.txt');\n const feedback = existsSync('.ralph/feedback.txt')\n ? readFileSync('.ralph/feedback.txt', 'utf8')\n : '';\n\n console.log('\uD83C\uDFAD Ralph Loop Status:');\n console.log(` Task: ${task.substring(0, 80)}...`);\n console.log(` Iteration: ${iteration}`);\n console.log(\n ` Status: ${isComplete ? '\u2705 COMPLETE' : '\uD83D\uDD04 IN PROGRESS'}`\n );\n\n if (feedback) {\n console.log(` Last feedback: ${feedback.substring(0, 100)}...`);\n }\n\n if (options.detailed && existsSync('.ralph/progress.jsonl')) {\n console.log('\\n\uD83D\uDCCA Iteration History:');\n const progressLines = readFileSync('.ralph/progress.jsonl', 'utf8')\n .split('\\n')\n .filter(Boolean)\n .map((line) => JSON.parse(line));\n\n progressLines.forEach((p: any) => {\n const progress = p as {\n iteration: number;\n validation?: { testsPass: boolean };\n changes: number;\n errors: number;\n };\n const status = progress.validation?.testsPass ? '\u2705' : '\u274C';\n console.log(\n ` ${progress.iteration}: ${status} ${progress.changes} changes, ${progress.errors} errors`\n );\n });\n }\n\n // TODO: Show StackMemory integration status when available\n } catch (error: unknown) {\n logger.error('Failed to get Ralph status', error as Error);\n console.error('\u274C Status check failed:', (error as Error).message);\n }\n });\n });\n\n // Resume a crashed or paused loop\n ralph\n .command('resume')\n .description('Resume a crashed or paused Ralph loop')\n .option('--from-stackmemory', 'Restore from StackMemory backup')\n .action(async (options) => {\n return trace.command('ralph-resume', options, async () => {\n try {\n console.log('\uD83D\uDD04 Resuming Ralph loop...');\n\n const loop = new RalphLoop({ baseDir: '.ralph', verbose: true });\n\n if (options.fromStackmemory) {\n console.log('\uD83D\uDCDA StackMemory restore feature coming soon...');\n }\n\n await loop.run(); // Resume by continuing the loop\n } catch (error: unknown) {\n logger.error('Failed to resume Ralph loop', error as Error);\n console.error('\u274C Resume failed:', (error as Error).message);\n process.exit(1);\n }\n });\n });\n\n // Stop the current loop\n ralph\n .command('stop')\n .description('Stop the current Ralph loop')\n .option('--save-progress', 'Save current progress to StackMemory')\n .action(async (options) => {\n return trace.command('ralph-stop', options, async () => {\n try {\n if (!existsSync('.ralph')) {\n console.log('\u274C No active Ralph loop found');\n return;\n }\n\n console.log('\uD83D\uDED1 Stopping Ralph loop...');\n\n if (options.saveProgress) {\n console.log('\uD83D\uDCBE StackMemory progress save feature coming soon...');\n }\n\n // Create stop signal file\n writeFileSync('.ralph/stop-signal.txt', new Date().toISOString());\n console.log('\u2705 Stop signal sent');\n } catch (error: unknown) {\n logger.error('Failed to stop Ralph loop', error as Error);\n console.error('\u274C Stop failed:', (error as Error).message);\n }\n });\n });\n\n // Clean up loop artifacts\n ralph\n .command('clean')\n .description('Clean up Ralph loop artifacts')\n .option('--keep-history', 'Keep iteration history')\n .action(async (options) => {\n return trace.command('ralph-clean', options, async () => {\n try {\n // Clean up Ralph directory\n if (!options.keepHistory && existsSync('.ralph/history')) {\n const { execSync } = await import('child_process');\n execSync('rm -rf .ralph/history');\n }\n\n // Remove working files but keep task definition\n if (existsSync('.ralph/work-complete.txt')) {\n const fs = await import('fs');\n fs.unlinkSync('.ralph/work-complete.txt');\n }\n\n console.log('\uD83E\uDDF9 Ralph loop artifacts cleaned');\n } catch (error: unknown) {\n logger.error('Failed to clean Ralph artifacts', error as Error);\n console.error('\u274C Cleanup failed:', (error as Error).message);\n }\n });\n });\n\n // Debug and diagnostics\n ralph\n .command('debug')\n .description('Debug Ralph loop state and diagnostics')\n .option('--reconcile', 'Force state reconciliation')\n .option('--validate-context', 'Validate context budget')\n .action(async (options) => {\n return trace.command('ralph-debug', options, async () => {\n try {\n console.log('\uD83D\uDD0D Ralph Loop Debug Information:');\n\n if (options.reconcile) {\n console.log('\uD83D\uDD27 State reconciliation feature coming soon...');\n }\n\n if (options.validateContext) {\n console.log('\uD83D\uDCCA Context validation feature coming soon...');\n }\n\n // Show file structure\n if (existsSync('.ralph')) {\n console.log('\\n\uD83D\uDCC1 Ralph directory structure:');\n const { execSync } = await import('child_process');\n try {\n const tree = execSync('find .ralph -type f | head -20', {\n encoding: 'utf8',\n });\n console.log(tree);\n } catch {\n console.log(' (Unable to show directory tree)');\n }\n }\n } catch (error: unknown) {\n logger.error('Ralph debug failed', error as Error);\n console.error('\u274C Debug failed:', (error as Error).message);\n }\n });\n });\n\n // Swarm coordination commands\n ralph\n .command('swarm')\n .description('Launch a swarm of specialized agents')\n .argument('<project>', 'Project description')\n .option(\n '--agents <agents>',\n 'Comma-separated list of agent roles (architect,developer,tester,etc)',\n 'developer,tester'\n )\n .option('--max-agents <n>', 'Maximum number of agents', '5')\n .action(async (project, options) => {\n return trace.command('ralph-swarm', { project, ...options }, async () => {\n try {\n console.log('\uD83E\uDDBE Launching Ralph swarm...');\n\n await swarmCoordinator.initialize();\n\n const agentRoles = options.agents\n .split(',')\n .map((r: string) => r.trim());\n const agentSpecs = agentRoles.map((role: string) => ({\n role: role as any,\n conflictResolution: 'defer_to_expertise',\n collaborationPreferences: [],\n }));\n\n const swarmId = await swarmCoordinator.launchSwarm(\n project,\n agentSpecs\n );\n\n console.log(`\u2705 Swarm launched with ID: ${swarmId}`);\n console.log(`\uD83D\uDC65 ${agentSpecs.length} agents working on: ${project}`);\n console.log('\\nNext steps:');\n console.log(\n ' stackmemory ralph swarm-status <swarmId> # Check progress'\n );\n console.log(\n ' stackmemory ralph swarm-stop <swarmId> # Stop swarm'\n );\n } catch (error: unknown) {\n logger.error('Swarm launch failed', error as Error);\n console.error('\u274C Swarm launch failed:', (error as Error).message);\n }\n });\n });\n\n // Multi-loop orchestration for complex tasks\n ralph\n .command('orchestrate')\n .description('Orchestrate multiple Ralph loops for complex tasks')\n .argument('<description>', 'Complex task description')\n .option('--criteria <criteria>', 'Success criteria (comma separated)')\n .option('--max-loops <n>', 'Maximum parallel loops', '3')\n .option('--sequential', 'Force sequential execution')\n .action(async (description, options) => {\n return trace.command(\n 'ralph-orchestrate',\n { description, ...options },\n async () => {\n try {\n console.log('\uD83C\uDFAD Orchestrating complex task...');\n\n await multiLoopOrchestrator.initialize();\n\n const criteria = options.criteria\n ? options.criteria.split(',').map((c: string) => c.trim())\n : [\n 'Task completed successfully',\n 'All components working',\n 'Tests pass',\n ];\n\n const result = await multiLoopOrchestrator.orchestrateComplexTask(\n description,\n criteria,\n {\n maxLoops: parseInt(options.maxLoops),\n forceSequential: options.sequential,\n }\n );\n\n console.log('\u2705 Orchestration completed!');\n console.log(\n `\uD83D\uDCCA Results: ${result.completedLoops.length} successful, ${result.failedLoops.length} failed`\n );\n console.log(\n `\u23F1\uFE0F Total duration: ${Math.round(result.totalDuration / 1000)}s`\n );\n\n if (result.insights.length > 0) {\n console.log('\\n\uD83D\uDCA1 Insights:');\n result.insights.forEach((insight) =>\n console.log(` \u2022 ${insight}`)\n );\n }\n } catch (error: unknown) {\n logger.error('Orchestration failed', error as Error);\n console.error('\u274C Orchestration failed:', (error as Error).message);\n }\n }\n );\n });\n\n // Pattern learning command\n ralph\n .command('learn')\n .description('Learn patterns from completed loops')\n .option('--task-type <type>', 'Learn patterns for specific task type')\n .action(async (options) => {\n return trace.command('ralph-learn', options, async () => {\n try {\n console.log('\uD83E\uDDE0 Learning patterns from completed loops...');\n\n await patternLearner.initialize();\n\n const patterns = options.taskType\n ? await patternLearner.learnForTaskType(options.taskType)\n : await patternLearner.learnFromCompletedLoops();\n\n console.log(`\u2705 Learned ${patterns.length} patterns`);\n\n if (patterns.length > 0) {\n console.log('\\n\uD83D\uDCCA Top patterns:');\n patterns.slice(0, 5).forEach((pattern) => {\n console.log(\n ` \u2022 ${pattern.pattern} (${Math.round(pattern.confidence * 100)}% confidence)`\n );\n });\n }\n } catch (error: unknown) {\n logger.error('Pattern learning failed', error as Error);\n console.error(\n '\u274C Pattern learning failed:',\n (error as Error).message\n );\n }\n });\n });\n\n // Enhanced debug command with visualization\n ralph\n .command('debug-enhanced')\n .description('Advanced debugging with visualization')\n .option('--loop-id <id>', 'Specific loop to debug')\n .option('--generate-report', 'Generate comprehensive debug report')\n .option('--timeline', 'Generate timeline visualization')\n .action(async (options) => {\n return trace.command('ralph-debug-enhanced', options, async () => {\n try {\n if (!existsSync('.ralph') && !options.loopId) {\n console.log(\n '\u274C No Ralph loop found. Run a loop first or specify --loop-id'\n );\n return;\n }\n\n console.log('\uD83D\uDD0D Starting enhanced debugging...');\n\n await ralphDebugger.initialize();\n\n const loopId = options.loopId || 'current';\n await ralphDebugger.startDebugSession(loopId, '.ralph');\n\n if (options.generateReport) {\n const report = await ralphDebugger.generateDebugReport(loopId);\n console.log(`\uD83D\uDCCB Debug report generated: ${report.exportPath}`);\n }\n\n if (options.timeline) {\n const timelinePath =\n await ralphDebugger.generateLoopTimeline(loopId);\n console.log(`\uD83D\uDCCA Timeline visualization: ${timelinePath}`);\n }\n\n console.log('\uD83D\uDD0D Debug analysis complete');\n } catch (error: unknown) {\n logger.error('Enhanced debugging failed', error as Error);\n console.error('\u274C Debug failed:', (error as Error).message);\n }\n });\n });\n\n // TUI command for real-time monitoring\n ralph\n .command('tui')\n .description('Launch TUI monitor for active swarms')\n .option('--swarm-id <id>', 'Monitor specific swarm ID')\n .option('--simple', 'Use simple text mode instead of full TUI')\n .option('--force-tui', 'Force full TUI even with compatibility issues')\n .action(async (options) => {\n try {\n // Detect terminal compatibility\n const isGhostty =\n process.env.TERM_PROGRAM === 'ghostty' ||\n process.env.TERM?.includes('ghostty');\n const isBasicTerm =\n process.env.TERM === 'dumb' || process.env.TERM === 'unknown';\n const hasCompatibilityIssues = isGhostty || isBasicTerm;\n\n // Default behavior: use simple mode for problematic terminals unless forced\n const useSimpleMode =\n options.simple || (hasCompatibilityIssues && !options.forceTui);\n\n if (useSimpleMode) {\n console.log('\uD83E\uDDBE Starting Simple Swarm Monitor (Text Mode)');\n if (hasCompatibilityIssues && !options.simple) {\n console.log(\n `\u26A0\uFE0F Detected ${isGhostty ? 'Ghostty' : 'basic'} terminal - using text mode for compatibility`\n );\n console.log(\n ' Use --force-tui to override, or --simple to explicitly use text mode'\n );\n }\n\n const { SimpleSwarmMonitor } =\n await import('../../features/tui/simple-monitor.js');\n const monitor = new SimpleSwarmMonitor();\n monitor.start();\n } else {\n console.log('\uD83E\uDDBE Starting Full TUI Monitor');\n const { SwarmTUI } =\n await import('../../features/tui/swarm-monitor.js');\n\n const tui = new SwarmTUI();\n\n // Initialize with optional swarm ID\n await tui.initialize(undefined, options.swarmId);\n tui.start();\n }\n } catch (error: unknown) {\n logger.error('TUI launch failed', error as Error);\n console.error('\u274C TUI failed:', (error as Error).message);\n console.log('\uD83D\uDCA1 Try: stackmemory ralph tui --simple');\n process.exit(1);\n }\n });\n\n return ralph;\n}\n\nexport default createRalphCommand;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,112 @@
1
+ import { SwarmRegistry } from "../../integrations/ralph/monitoring/swarm-registry.js";
2
+ import { execSync } from "child_process";
3
+ class SimpleSwarmMonitor {
4
+ refreshInterval = null;
5
+ /**
6
+ * Start simple text-based monitoring
7
+ */
8
+ start() {
9
+ console.log("\u{1F9BE} Ralph Swarm Monitor (Text Mode)");
10
+ console.log("=====================================");
11
+ console.log("");
12
+ console.log("Press Ctrl+C to quit");
13
+ console.log("");
14
+ this.displayStatus();
15
+ this.refreshInterval = setInterval(() => {
16
+ this.displayStatus();
17
+ }, 5e3);
18
+ process.on("SIGINT", () => {
19
+ this.stop();
20
+ process.exit(0);
21
+ });
22
+ }
23
+ /**
24
+ * Stop monitoring
25
+ */
26
+ stop() {
27
+ if (this.refreshInterval) {
28
+ clearInterval(this.refreshInterval);
29
+ }
30
+ console.log("\n\u{1F44B} Swarm monitoring stopped");
31
+ }
32
+ /**
33
+ * Display current status
34
+ */
35
+ displayStatus() {
36
+ const timestamp = (/* @__PURE__ */ new Date()).toLocaleTimeString();
37
+ console.log(`
38
+ \u23F0 ${timestamp} - Swarm Status Update`);
39
+ console.log("\u2500".repeat(50));
40
+ try {
41
+ const registry = SwarmRegistry.getInstance();
42
+ const activeSwarms = registry.listActiveSwarms();
43
+ const stats = registry.getStatistics();
44
+ console.log(
45
+ `\u{1F4CA} Registry Stats: ${stats.activeSwarms} active, ${stats.totalSwarms} total`
46
+ );
47
+ if (activeSwarms.length > 0) {
48
+ console.log("\n\u{1F9BE} Active Swarms:");
49
+ for (const swarm of activeSwarms) {
50
+ const uptime = this.formatDuration(Date.now() - swarm.startTime);
51
+ console.log(
52
+ ` \u2022 ${swarm.id.substring(0, 8)}: ${swarm.status} (${uptime})`
53
+ );
54
+ }
55
+ } else {
56
+ console.log("\u274C No active swarms in registry");
57
+ }
58
+ try {
59
+ const ralphProcesses = execSync(
60
+ 'ps aux | grep "ralph" | grep -v grep',
61
+ { encoding: "utf8" }
62
+ );
63
+ if (ralphProcesses.trim()) {
64
+ console.log("\n\u{1F50D} External Ralph Processes:");
65
+ const processLines = ralphProcesses.split("\n").filter((line) => line.trim());
66
+ processLines.slice(0, 3).forEach((line) => {
67
+ const parts = line.split(/\s+/);
68
+ console.log(
69
+ ` PID ${parts[1]}: ${parts.slice(10).join(" ").slice(0, 50)}...`
70
+ );
71
+ });
72
+ if (processLines.length > 3) {
73
+ console.log(` ... and ${processLines.length - 3} more processes`);
74
+ }
75
+ }
76
+ } catch {
77
+ }
78
+ try {
79
+ const recentCommits = execSync(
80
+ 'git log --oneline --since="1 hour ago" --pretty=format:"%h %an %s" | head -3',
81
+ { encoding: "utf8", cwd: process.cwd() }
82
+ );
83
+ if (recentCommits.trim()) {
84
+ console.log("\n\u{1F4DD} Recent Commits:");
85
+ recentCommits.split("\n").filter((line) => line.trim()).forEach((line) => {
86
+ console.log(` ${line}`);
87
+ });
88
+ }
89
+ } catch {
90
+ }
91
+ } catch (error) {
92
+ console.log(`\u274C Status error: ${error.message}`);
93
+ }
94
+ }
95
+ /**
96
+ * Format duration string
97
+ */
98
+ formatDuration(ms) {
99
+ const seconds = Math.floor(ms / 1e3);
100
+ const minutes = Math.floor(seconds / 60);
101
+ const hours = Math.floor(minutes / 60);
102
+ if (hours > 0) return `${hours}h ${minutes % 60}m`;
103
+ if (minutes > 0) return `${minutes}m ${seconds % 60}s`;
104
+ return `${seconds}s`;
105
+ }
106
+ }
107
+ var simple_monitor_default = SimpleSwarmMonitor;
108
+ export {
109
+ SimpleSwarmMonitor,
110
+ simple_monitor_default as default
111
+ };
112
+ //# sourceMappingURL=simple-monitor.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/features/tui/simple-monitor.ts"],
4
+ "sourcesContent": ["/**\n * Simple text-based swarm monitor for terminal compatibility\n * Fallback for terminals that can't handle blessed TUI\n */\n\nimport { SwarmRegistry } from '../../integrations/ralph/monitoring/swarm-registry.js';\nimport { execSync } from 'child_process';\n// Simple monitor for terminal compatibility\n\nexport class SimpleSwarmMonitor {\n private refreshInterval: NodeJS.Timeout | null = null;\n\n /**\n * Start simple text-based monitoring\n */\n start(): void {\n console.log('\uD83E\uDDBE Ralph Swarm Monitor (Text Mode)');\n console.log('=====================================');\n console.log('');\n console.log('Press Ctrl+C to quit');\n console.log('');\n\n // Show initial status\n this.displayStatus();\n\n // Set up refresh interval\n this.refreshInterval = setInterval(() => {\n this.displayStatus();\n }, 5000);\n\n // Handle graceful shutdown\n process.on('SIGINT', () => {\n this.stop();\n process.exit(0);\n });\n }\n\n /**\n * Stop monitoring\n */\n stop(): void {\n if (this.refreshInterval) {\n clearInterval(this.refreshInterval);\n }\n console.log('\\n\uD83D\uDC4B Swarm monitoring stopped');\n }\n\n /**\n * Display current status\n */\n private displayStatus(): void {\n const timestamp = new Date().toLocaleTimeString();\n\n console.log(`\\n\u23F0 ${timestamp} - Swarm Status Update`);\n console.log('\u2500'.repeat(50));\n\n try {\n // Check registry\n const registry = SwarmRegistry.getInstance();\n const activeSwarms = registry.listActiveSwarms();\n const stats = registry.getStatistics();\n\n console.log(\n `\uD83D\uDCCA Registry Stats: ${stats.activeSwarms} active, ${stats.totalSwarms} total`\n );\n\n if (activeSwarms.length > 0) {\n console.log('\\n\uD83E\uDDBE Active Swarms:');\n for (const swarm of activeSwarms) {\n const uptime = this.formatDuration(Date.now() - swarm.startTime);\n console.log(\n ` \u2022 ${swarm.id.substring(0, 8)}: ${swarm.status} (${uptime})`\n );\n }\n } else {\n console.log('\u274C No active swarms in registry');\n }\n\n // Check for external processes\n try {\n const ralphProcesses = execSync(\n 'ps aux | grep \"ralph\" | grep -v grep',\n { encoding: 'utf8' }\n );\n if (ralphProcesses.trim()) {\n console.log('\\n\uD83D\uDD0D External Ralph Processes:');\n const processLines = ralphProcesses\n .split('\\n')\n .filter((line) => line.trim());\n processLines.slice(0, 3).forEach((line) => {\n const parts = line.split(/\\s+/);\n console.log(\n ` PID ${parts[1]}: ${parts.slice(10).join(' ').slice(0, 50)}...`\n );\n });\n if (processLines.length > 3) {\n console.log(` ... and ${processLines.length - 3} more processes`);\n }\n }\n } catch {\n // No external processes\n }\n\n // Show recent commits\n try {\n const recentCommits = execSync(\n 'git log --oneline --since=\"1 hour ago\" --pretty=format:\"%h %an %s\" | head -3',\n { encoding: 'utf8', cwd: process.cwd() }\n );\n\n if (recentCommits.trim()) {\n console.log('\\n\uD83D\uDCDD Recent Commits:');\n recentCommits\n .split('\\n')\n .filter((line) => line.trim())\n .forEach((line) => {\n console.log(` ${line}`);\n });\n }\n } catch {\n // No git or commits\n }\n } catch (error: unknown) {\n console.log(`\u274C Status error: ${(error as Error).message}`);\n }\n }\n\n /**\n * Format duration string\n */\n private formatDuration(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) return `${hours}h ${minutes % 60}m`;\n if (minutes > 0) return `${minutes}m ${seconds % 60}s`;\n return `${seconds}s`;\n }\n}\n\nexport default SimpleSwarmMonitor;\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }