s9n-devops-agent 2.0.11-dev.1 → 2.0.11-dev.10

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "s9n-devops-agent",
3
- "version": "2.0.11-dev.1",
3
+ "version": "2.0.11-dev.10",
4
4
  "description": "CS_DevOpsAgent - Intelligent Git Automation System with multi-agent support and session management",
5
5
  "type": "module",
6
6
  "main": "src/cs-devops-agent-worker.js",
@@ -29,7 +29,7 @@
29
29
  "house-rules:status": "node src/house-rules-manager.js status",
30
30
  "house-rules:update": "node src/house-rules-manager.js update",
31
31
  "house-rules:repair": "./scripts/repair-house-rules.sh",
32
- "test": "jest test_cases/",
32
+ "test": "NODE_OPTIONS=--experimental-vm-modules jest test_cases/",
33
33
  "test:watch": "jest --watch",
34
34
  "test:coverage": "jest --coverage",
35
35
  "test:worktree": "jest test_cases/worktree/",
@@ -329,7 +329,8 @@ export function getAgentDisplayName(agentType) {
329
329
  cursor: 'Cursor',
330
330
  copilot: 'GitHub Copilot',
331
331
  cline: 'Cline',
332
- other: 'AI Assistant',
332
+ warp: 'Warp',
333
+ other: 'Other',
333
334
  };
334
335
  return names[agentType] || agentType;
335
336
  }
@@ -19,6 +19,8 @@
19
19
 
20
20
  import fs from 'fs';
21
21
  import path from 'path';
22
+ import crypto from 'crypto';
23
+ import readline from 'readline';
22
24
  import { fileURLToPath } from 'url';
23
25
  import { dirname } from 'path';
24
26
  import { spawn, execSync, exec } from 'child_process';
@@ -28,12 +30,10 @@ import { credentialsManager } from './credentials-manager.js';
28
30
  credentialsManager.injectEnv();
29
31
 
30
32
  const __filename = fileURLToPath(import.meta.url);
33
+ const __dirname = dirname(__filename);
31
34
  import { hasDockerConfiguration } from './docker-utils.js';
32
35
  import HouseRulesManager from './house-rules-manager.js';
33
36
 
34
- const __filename = fileURLToPath(import.meta.url);
35
- const __dirname = dirname(__filename);
36
-
37
37
  // ============================================================================
38
38
  // CONFIGURATION
39
39
  // ============================================================================
@@ -601,12 +601,30 @@ class SessionCoordinator {
601
601
 
602
602
  if (dockerInfo.composeFiles.length > 1) {
603
603
  console.log(`\n${CONFIG.colors.bright}Select docker-compose file:${CONFIG.colors.reset}`);
604
- dockerInfo.composeFiles.forEach((file, index) => {
605
- console.log(` ${index + 1}) ${file.name}`);
606
- });
604
+
605
+ // Check running containers for each compose file
606
+ for (let i = 0; i < dockerInfo.composeFiles.length; i++) {
607
+ const file = dockerInfo.composeFiles[i];
608
+ let runningInfo = '';
609
+
610
+ try {
611
+ // Try to get container count for this compose file
612
+ const { execSync } = await import('child_process');
613
+ const result = execSync(`docker compose -f "${file.path}" ps -q 2>/dev/null | wc -l`, { encoding: 'utf8' });
614
+ const count = parseInt(result.trim());
615
+ if (count > 0) {
616
+ runningInfo = ` ${CONFIG.colors.green}(${count} running)${CONFIG.colors.reset}`;
617
+ }
618
+ } catch (err) {
619
+ // Ignore errors, just don't show running info
620
+ }
621
+
622
+ console.log(` ${i + 1}) ${file.name}${runningInfo}`);
623
+ console.log(` ${CONFIG.colors.dim}${file.path}${CONFIG.colors.reset}`);
624
+ }
607
625
 
608
626
  const fileChoice = await new Promise((resolve) => {
609
- rl.question(`Choose file (1-${dockerInfo.composeFiles.length}) [1]: `, (answer) => {
627
+ rl.question(`\nChoose file (1-${dockerInfo.composeFiles.length}) [1]: `, (answer) => {
610
628
  const choice = parseInt(answer) || 1;
611
629
  if (choice >= 1 && choice <= dockerInfo.composeFiles.length) {
612
630
  resolve(dockerInfo.composeFiles[choice - 1]);
@@ -166,6 +166,8 @@ I'll show you what happens at each stage.
166
166
  console.log(` ${colors.bright}2)${colors.reset} Cursor`);
167
167
  console.log(` ${colors.bright}3)${colors.reset} GitHub Copilot`);
168
168
  console.log(` ${colors.bright}4)${colors.reset} Cline (VS Code)`);
169
+ console.log(` ${colors.bright}5)${colors.reset} Warp`);
170
+ console.log(` ${colors.bright}6)${colors.reset} Other`);
169
171
  console.log();
170
172
  console.log(` ${colors.cyan}?${colors.reset} Your choice: ${colors.dim}1${colors.reset}`);
171
173
  console.log();
@@ -147,13 +147,17 @@ create_new_session() {
147
147
  echo -e " ${GREEN}2)${NC} Cursor"
148
148
  echo -e " ${GREEN}3)${NC} GitHub Copilot"
149
149
  echo -e " ${GREEN}4)${NC} Cline (VS Code)"
150
- echo -n " Your choice [1-4, default: 1]: "
150
+ echo -e " ${GREEN}5)${NC} Warp"
151
+ echo -e " ${GREEN}6)${NC} Other"
152
+ echo -n "➜ Your choice [1-6, default: 1]: "
151
153
  read agent_choice
152
154
 
153
155
  case "$agent_choice" in
154
156
  2) agent_type="cursor" ;;
155
157
  3) agent_type="copilot" ;;
156
158
  4) agent_type="cline" ;;
159
+ 5) agent_type="warp" ;;
160
+ 6) agent_type="other" ;;
157
161
  *) agent_type="claude" ;;
158
162
  esac
159
163