squads-cli 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +521 -288
- package/dist/auth-YW3UPFSB.js +23 -0
- package/dist/auth-YW3UPFSB.js.map +1 -0
- package/dist/autonomy-PSVZVX7A.js +105 -0
- package/dist/autonomy-PSVZVX7A.js.map +1 -0
- package/dist/chunk-67RO2HKR.js +174 -0
- package/dist/chunk-67RO2HKR.js.map +1 -0
- package/dist/chunk-7OCVIDC7.js +12 -0
- package/dist/chunk-7OCVIDC7.js.map +1 -0
- package/dist/chunk-BODLDQY7.js +452 -0
- package/dist/chunk-BODLDQY7.js.map +1 -0
- package/dist/chunk-EHQJHRIW.js +103 -0
- package/dist/chunk-EHQJHRIW.js.map +1 -0
- package/dist/chunk-FFFCFZ6A.js +121 -0
- package/dist/chunk-FFFCFZ6A.js.map +1 -0
- package/dist/chunk-FIWT2NMM.js +165 -0
- package/dist/chunk-FIWT2NMM.js.map +1 -0
- package/dist/chunk-HF4WR7RA.js +154 -0
- package/dist/chunk-HF4WR7RA.js.map +1 -0
- package/dist/chunk-J6QF4ZQX.js +230 -0
- package/dist/chunk-J6QF4ZQX.js.map +1 -0
- package/dist/chunk-LOA3KWYJ.js +294 -0
- package/dist/chunk-LOA3KWYJ.js.map +1 -0
- package/dist/chunk-M5FXNY6Y.js +384 -0
- package/dist/chunk-M5FXNY6Y.js.map +1 -0
- package/dist/chunk-QHNUMM4V.js +87 -0
- package/dist/chunk-QHNUMM4V.js.map +1 -0
- package/dist/chunk-QJ7C7CMB.js +223 -0
- package/dist/chunk-QJ7C7CMB.js.map +1 -0
- package/dist/chunk-RM6BWILN.js +74 -0
- package/dist/chunk-RM6BWILN.js.map +1 -0
- package/dist/chunk-TYFTF53O.js +613 -0
- package/dist/chunk-TYFTF53O.js.map +1 -0
- package/dist/chunk-TZXD6WFN.js +420 -0
- package/dist/chunk-TZXD6WFN.js.map +1 -0
- package/dist/chunk-WVOIY5GW.js +621 -0
- package/dist/chunk-WVOIY5GW.js.map +1 -0
- package/dist/chunk-Z2UKDBNL.js +162 -0
- package/dist/chunk-Z2UKDBNL.js.map +1 -0
- package/dist/chunk-ZTQ7ISUR.js +338 -0
- package/dist/chunk-ZTQ7ISUR.js.map +1 -0
- package/dist/cli.js +2483 -5902
- package/dist/cli.js.map +1 -1
- package/dist/context-GWPF4SEY.js +291 -0
- package/dist/context-GWPF4SEY.js.map +1 -0
- package/dist/context-feed-AJGVAR6H.js +394 -0
- package/dist/context-feed-AJGVAR6H.js.map +1 -0
- package/dist/cost-XBCDJ7XC.js +275 -0
- package/dist/cost-XBCDJ7XC.js.map +1 -0
- package/dist/create-BLFGG6PF.js +286 -0
- package/dist/create-BLFGG6PF.js.map +1 -0
- package/dist/dashboard-LGT2B2BL.js +951 -0
- package/dist/dashboard-LGT2B2BL.js.map +1 -0
- package/dist/dashboard-RMK2BOD2.js +794 -0
- package/dist/dashboard-RMK2BOD2.js.map +1 -0
- package/dist/doctor-XPUIIBHJ.js +374 -0
- package/dist/doctor-XPUIIBHJ.js.map +1 -0
- package/dist/env-config-SQEI3Y7Y.js +21 -0
- package/dist/env-config-SQEI3Y7Y.js.map +1 -0
- package/dist/exec-OUXM7JBF.js +223 -0
- package/dist/exec-OUXM7JBF.js.map +1 -0
- package/dist/feedback-KNAOG5QK.js +229 -0
- package/dist/feedback-KNAOG5QK.js.map +1 -0
- package/dist/github-UQTM5KMS.js +23 -0
- package/dist/github-UQTM5KMS.js.map +1 -0
- package/dist/goal-BVHV5573.js +168 -0
- package/dist/goal-BVHV5573.js.map +1 -0
- package/dist/health-4UXN44PF.js +218 -0
- package/dist/health-4UXN44PF.js.map +1 -0
- package/dist/history-ILH3SWHB.js +232 -0
- package/dist/history-ILH3SWHB.js.map +1 -0
- package/dist/index.d.ts +736 -8
- package/dist/index.js +1312 -6
- package/dist/index.js.map +1 -1
- package/dist/init-XQZ7BOGT.js +812 -0
- package/dist/init-XQZ7BOGT.js.map +1 -0
- package/dist/kpi-RQIU7WGK.js +413 -0
- package/dist/kpi-RQIU7WGK.js.map +1 -0
- package/dist/learn-OIFUVZAS.js +269 -0
- package/dist/learn-OIFUVZAS.js.map +1 -0
- package/dist/login-DXZANWZY.js +155 -0
- package/dist/login-DXZANWZY.js.map +1 -0
- package/dist/memory-T3ACCS7E.js +560 -0
- package/dist/memory-T3ACCS7E.js.map +1 -0
- package/dist/memory-VNF2VFRB.js +23 -0
- package/dist/memory-VNF2VFRB.js.map +1 -0
- package/dist/progress-DAUZMT3N.js +202 -0
- package/dist/progress-DAUZMT3N.js.map +1 -0
- package/dist/providers-3P5D2XL5.js +65 -0
- package/dist/providers-3P5D2XL5.js.map +1 -0
- package/dist/results-UECWGLTB.js +224 -0
- package/dist/results-UECWGLTB.js.map +1 -0
- package/dist/run-I6KAXU6U.js +4049 -0
- package/dist/run-I6KAXU6U.js.map +1 -0
- package/dist/session-HBU6KZOD.js +64 -0
- package/dist/session-HBU6KZOD.js.map +1 -0
- package/dist/sessions-CK25VGPL.js +333 -0
- package/dist/sessions-CK25VGPL.js.map +1 -0
- package/dist/squad-parser-DCG65BJS.js +35 -0
- package/dist/squad-parser-DCG65BJS.js.map +1 -0
- package/dist/stats-G6NAU5BD.js +334 -0
- package/dist/stats-G6NAU5BD.js.map +1 -0
- package/dist/status-AQNLDZVN.js +352 -0
- package/dist/status-AQNLDZVN.js.map +1 -0
- package/dist/sync-ZI3MHA4G.js +836 -0
- package/dist/sync-ZI3MHA4G.js.map +1 -0
- package/dist/templates/core/AGENTS.md.template +51 -0
- package/dist/templates/core/BUSINESS_BRIEF.md.template +29 -0
- package/dist/templates/core/CLAUDE.md.template +48 -0
- package/dist/templates/core/provider.yaml.template +5 -0
- package/dist/templates/first-squad/SQUAD.md.template +23 -0
- package/dist/templates/first-squad/lead.md.template +44 -0
- package/dist/templates/memory/getting-started/state.md.template +19 -0
- package/dist/templates/seed/BUSINESS_BRIEF.md.template +27 -0
- package/dist/templates/seed/CLAUDE.md.template +119 -0
- package/dist/templates/seed/README.md.template +42 -0
- package/dist/templates/seed/config/SYSTEM.md +52 -0
- package/dist/templates/seed/config/provider.yaml +4 -0
- package/dist/templates/seed/hooks/settings.json.template +31 -0
- package/dist/templates/seed/memory/company/directives.md +37 -0
- package/dist/templates/seed/memory/company/manager/state.md +16 -0
- package/dist/templates/seed/memory/engineering/issue-solver/state.md +12 -0
- package/dist/templates/seed/memory/intelligence/intel-lead/state.md +9 -0
- package/dist/templates/seed/memory/marketing/content-drafter/state.md +12 -0
- package/dist/templates/seed/memory/operations/ops-lead/state.md +12 -0
- package/dist/templates/seed/memory/product/lead/state.md +14 -0
- package/dist/templates/seed/memory/research/lead/state.md +14 -0
- package/dist/templates/seed/skills/gh/SKILL.md +57 -0
- package/dist/templates/seed/skills/squads-cli/SKILL.md +84 -0
- package/dist/templates/seed/squads/company/SQUAD.md +51 -0
- package/dist/templates/seed/squads/company/company-critic.md +49 -0
- package/dist/templates/seed/squads/company/company-eval.md +49 -0
- package/dist/templates/seed/squads/company/event-dispatcher.md +43 -0
- package/dist/templates/seed/squads/company/goal-tracker.md +43 -0
- package/dist/templates/seed/squads/company/manager.md +54 -0
- package/dist/templates/seed/squads/engineering/SQUAD.md +48 -0
- package/dist/templates/seed/squads/engineering/code-reviewer.md +57 -0
- package/dist/templates/seed/squads/engineering/issue-solver.md +58 -0
- package/dist/templates/seed/squads/engineering/test-writer.md +50 -0
- package/dist/templates/seed/squads/intelligence/SQUAD.md +38 -0
- package/dist/templates/seed/squads/intelligence/intel-critic.md +36 -0
- package/dist/templates/seed/squads/intelligence/intel-eval.md +31 -0
- package/dist/templates/seed/squads/intelligence/intel-lead.md +71 -0
- package/dist/templates/seed/squads/marketing/SQUAD.md +47 -0
- package/dist/templates/seed/squads/marketing/content-drafter.md +71 -0
- package/dist/templates/seed/squads/marketing/growth-analyst.md +49 -0
- package/dist/templates/seed/squads/marketing/social-poster.md +44 -0
- package/dist/templates/seed/squads/operations/SQUAD.md +45 -0
- package/dist/templates/seed/squads/operations/finance-tracker.md +47 -0
- package/dist/templates/seed/squads/operations/goal-tracker.md +48 -0
- package/dist/templates/seed/squads/operations/ops-lead.md +58 -0
- package/dist/templates/seed/squads/product/SQUAD.md +41 -0
- package/dist/templates/seed/squads/product/lead.md +56 -0
- package/dist/templates/seed/squads/product/scanner.md +50 -0
- package/dist/templates/seed/squads/product/worker.md +55 -0
- package/dist/templates/seed/squads/research/SQUAD.md +38 -0
- package/dist/templates/seed/squads/research/analyst.md +50 -0
- package/dist/templates/seed/squads/research/lead.md +52 -0
- package/dist/templates/seed/squads/research/synthesizer.md +59 -0
- package/dist/templates/skills/squads-learn/SKILL.md +86 -0
- package/dist/templates/skills/squads-workflow/instruction.md +70 -0
- package/dist/terminal-FBQFQTKZ.js +55 -0
- package/dist/terminal-FBQFQTKZ.js.map +1 -0
- package/dist/update-D7CGIZ3M.js +18 -0
- package/dist/update-D7CGIZ3M.js.map +1 -0
- package/dist/update-STU276HR.js +83 -0
- package/dist/update-STU276HR.js.map +1 -0
- package/package.json +31 -13
- package/templates/core/AGENTS.md.template +51 -0
- package/templates/core/BUSINESS_BRIEF.md.template +29 -0
- package/templates/core/CLAUDE.md.template +48 -0
- package/templates/core/provider.yaml.template +5 -0
- package/templates/first-squad/SQUAD.md.template +23 -0
- package/templates/first-squad/lead.md.template +44 -0
- package/templates/memory/getting-started/state.md.template +19 -0
- package/templates/seed/BUSINESS_BRIEF.md.template +27 -0
- package/templates/seed/CLAUDE.md.template +119 -0
- package/templates/seed/README.md.template +42 -0
- package/templates/seed/config/SYSTEM.md +52 -0
- package/templates/seed/config/provider.yaml +4 -0
- package/templates/seed/hooks/settings.json.template +31 -0
- package/templates/seed/memory/company/directives.md +37 -0
- package/templates/seed/memory/company/manager/state.md +16 -0
- package/templates/seed/memory/engineering/issue-solver/state.md +12 -0
- package/templates/seed/memory/intelligence/intel-lead/state.md +9 -0
- package/templates/seed/memory/marketing/content-drafter/state.md +12 -0
- package/templates/seed/memory/operations/ops-lead/state.md +12 -0
- package/templates/seed/memory/product/lead/state.md +14 -0
- package/templates/seed/memory/research/lead/state.md +14 -0
- package/templates/seed/skills/gh/SKILL.md +57 -0
- package/templates/seed/skills/squads-cli/SKILL.md +84 -0
- package/templates/seed/squads/company/SQUAD.md +51 -0
- package/templates/seed/squads/company/company-critic.md +49 -0
- package/templates/seed/squads/company/company-eval.md +49 -0
- package/templates/seed/squads/company/event-dispatcher.md +43 -0
- package/templates/seed/squads/company/goal-tracker.md +43 -0
- package/templates/seed/squads/company/manager.md +54 -0
- package/templates/seed/squads/engineering/SQUAD.md +48 -0
- package/templates/seed/squads/engineering/code-reviewer.md +57 -0
- package/templates/seed/squads/engineering/issue-solver.md +58 -0
- package/templates/seed/squads/engineering/test-writer.md +50 -0
- package/templates/seed/squads/intelligence/SQUAD.md +38 -0
- package/templates/seed/squads/intelligence/intel-critic.md +36 -0
- package/templates/seed/squads/intelligence/intel-eval.md +31 -0
- package/templates/seed/squads/intelligence/intel-lead.md +71 -0
- package/templates/seed/squads/marketing/SQUAD.md +47 -0
- package/templates/seed/squads/marketing/content-drafter.md +71 -0
- package/templates/seed/squads/marketing/growth-analyst.md +49 -0
- package/templates/seed/squads/marketing/social-poster.md +44 -0
- package/templates/seed/squads/operations/SQUAD.md +45 -0
- package/templates/seed/squads/operations/finance-tracker.md +47 -0
- package/templates/seed/squads/operations/goal-tracker.md +48 -0
- package/templates/seed/squads/operations/ops-lead.md +58 -0
- package/templates/seed/squads/product/SQUAD.md +41 -0
- package/templates/seed/squads/product/lead.md +56 -0
- package/templates/seed/squads/product/scanner.md +50 -0
- package/templates/seed/squads/product/worker.md +55 -0
- package/templates/seed/squads/research/SQUAD.md +38 -0
- package/templates/seed/squads/research/analyst.md +50 -0
- package/templates/seed/squads/research/lead.md +52 -0
- package/templates/seed/squads/research/synthesizer.md +59 -0
- package/templates/skills/squads-learn/SKILL.md +86 -0
- package/templates/skills/squads-workflow/instruction.md +70 -0
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
formatDuration,
|
|
4
|
+
formatRelativeTime,
|
|
5
|
+
getExecutionStats,
|
|
6
|
+
listExecutions
|
|
7
|
+
} from "./chunk-67RO2HKR.js";
|
|
8
|
+
import {
|
|
9
|
+
cleanupStaleSessions,
|
|
10
|
+
getLiveSessionSummaryAsync
|
|
11
|
+
} from "./chunk-BODLDQY7.js";
|
|
12
|
+
import {
|
|
13
|
+
fetchOperationalStatus
|
|
14
|
+
} from "./chunk-TZXD6WFN.js";
|
|
15
|
+
import {
|
|
16
|
+
Events,
|
|
17
|
+
track
|
|
18
|
+
} from "./chunk-QJ7C7CMB.js";
|
|
19
|
+
import {
|
|
20
|
+
findSimilarSquads,
|
|
21
|
+
findSquadsDir,
|
|
22
|
+
listAgents,
|
|
23
|
+
listSquads,
|
|
24
|
+
loadSquad,
|
|
25
|
+
resolveExecutionContext
|
|
26
|
+
} from "./chunk-TYFTF53O.js";
|
|
27
|
+
import {
|
|
28
|
+
findMemoryDir,
|
|
29
|
+
getSquadState
|
|
30
|
+
} from "./chunk-ZTQ7ISUR.js";
|
|
31
|
+
import {
|
|
32
|
+
checkForUpdate
|
|
33
|
+
} from "./chunk-J6QF4ZQX.js";
|
|
34
|
+
import {
|
|
35
|
+
RESET,
|
|
36
|
+
bold,
|
|
37
|
+
box,
|
|
38
|
+
colors,
|
|
39
|
+
gradient,
|
|
40
|
+
icons,
|
|
41
|
+
padEnd,
|
|
42
|
+
privacyHeader,
|
|
43
|
+
writeLine
|
|
44
|
+
} from "./chunk-M5FXNY6Y.js";
|
|
45
|
+
import "./chunk-7OCVIDC7.js";
|
|
46
|
+
|
|
47
|
+
// src/commands/status.ts
|
|
48
|
+
import { existsSync, statSync } from "fs";
|
|
49
|
+
import { join } from "path";
|
|
50
|
+
async function statusCommand(squadName, options = {}) {
|
|
51
|
+
await track(Events.CLI_STATUS, { squad: squadName || "all", verbose: options.verbose });
|
|
52
|
+
const squadsDir = findSquadsDir();
|
|
53
|
+
if (!squadsDir) {
|
|
54
|
+
writeLine(` ${colors.red}No .agents/squads directory found${RESET}`);
|
|
55
|
+
writeLine(` ${colors.dim}Run \`squads init\` to create one.${RESET}`);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
if (squadName) {
|
|
59
|
+
await showSquadStatus(squadName, squadsDir, options);
|
|
60
|
+
} else {
|
|
61
|
+
await showOverallStatus(squadsDir, options);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async function showOverallStatus(squadsDir, options) {
|
|
65
|
+
const squads = listSquads(squadsDir);
|
|
66
|
+
const memoryDir = findMemoryDir();
|
|
67
|
+
cleanupStaleSessions();
|
|
68
|
+
const sessionSummary = await getLiveSessionSummaryAsync();
|
|
69
|
+
if (options.json) {
|
|
70
|
+
const execStats2 = getExecutionStats({ since: new Date(Date.now() - 24 * 60 * 60 * 1e3) });
|
|
71
|
+
const squadData = squads.map((name) => {
|
|
72
|
+
const agents = listAgents(squadsDir, name);
|
|
73
|
+
const states = memoryDir ? getSquadState(name) : [];
|
|
74
|
+
return { name, agentCount: agents.length, memoryEntries: states.length };
|
|
75
|
+
});
|
|
76
|
+
console.log(JSON.stringify({
|
|
77
|
+
ok: true,
|
|
78
|
+
command: "status",
|
|
79
|
+
data: {
|
|
80
|
+
squads: squadData,
|
|
81
|
+
totalSquads: squads.length,
|
|
82
|
+
sessions: sessionSummary,
|
|
83
|
+
executions24h: execStats2,
|
|
84
|
+
memoryEnabled: !!memoryDir
|
|
85
|
+
}
|
|
86
|
+
}, null, 2));
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
writeLine();
|
|
90
|
+
writeLine(` ${gradient("squads")} ${colors.dim}status${RESET}`);
|
|
91
|
+
const updateInfo = checkForUpdate();
|
|
92
|
+
if (updateInfo.updateAvailable) {
|
|
93
|
+
writeLine(` ${colors.cyan}\u2B06${RESET} Update available: ${colors.dim}${updateInfo.currentVersion}${RESET} \u2192 ${colors.green}${updateInfo.latestVersion}${RESET} ${colors.dim}(run \`squads update\`)${RESET}`);
|
|
94
|
+
}
|
|
95
|
+
if (sessionSummary.totalSessions > 0) {
|
|
96
|
+
const sessionText = sessionSummary.totalSessions === 1 ? "session" : "sessions";
|
|
97
|
+
const squadText = sessionSummary.squadCount === 1 ? "squad" : "squads";
|
|
98
|
+
let toolInfo = "";
|
|
99
|
+
if (sessionSummary.byTool && Object.keys(sessionSummary.byTool).length > 0) {
|
|
100
|
+
const toolParts = Object.entries(sessionSummary.byTool).sort((a, b) => b[1] - a[1]).map(([tool, count]) => `${colors.dim}${tool}${RESET} ${colors.cyan}${count}${RESET}`);
|
|
101
|
+
toolInfo = ` ${colors.dim}(${RESET}${toolParts.join(` ${colors.dim}\xB7${RESET} `)}${colors.dim})${RESET}`;
|
|
102
|
+
}
|
|
103
|
+
writeLine(` ${colors.green}${icons.active}${RESET} ${colors.white}${sessionSummary.totalSessions}${RESET} active ${sessionText} ${colors.dim}across${RESET} ${colors.cyan}${sessionSummary.squadCount}${RESET} ${squadText}${toolInfo}`);
|
|
104
|
+
}
|
|
105
|
+
writeLine();
|
|
106
|
+
const execStats = getExecutionStats({ since: new Date(Date.now() - 24 * 60 * 60 * 1e3) });
|
|
107
|
+
const execSummary = execStats.total > 0 ? `${colors.green}${execStats.completed}${RESET} ${colors.dim}completed${RESET}` + (execStats.failed > 0 ? ` ${colors.red}${execStats.failed}${RESET} ${colors.dim}failed${RESET}` : "") + (execStats.running > 0 ? ` ${colors.yellow}${execStats.running}${RESET} ${colors.dim}running${RESET}` : "") : `${colors.dim}no executions${RESET}`;
|
|
108
|
+
const totalSquads = squads.length;
|
|
109
|
+
const activeCount = squads.length;
|
|
110
|
+
writeLine(` ${colors.cyan}${activeCount}${RESET}/${totalSquads} squads ${colors.dim}\u2502${RESET} ${colors.dim}memory: ${memoryDir ? "enabled" : "none"}${RESET} ${colors.dim}\u2502${RESET} ${colors.dim}24h:${RESET} ${execSummary}`);
|
|
111
|
+
writeLine();
|
|
112
|
+
const w = { name: 16, agents: 8, memory: 14, activity: 12 };
|
|
113
|
+
const tableWidth = w.name + w.agents + w.memory + w.activity + 6;
|
|
114
|
+
writeLine(` ${colors.purple}${box.topLeft}${colors.dim}${box.horizontal.repeat(tableWidth)}${colors.purple}${box.topRight}${RESET}`);
|
|
115
|
+
const header = ` ${colors.purple}${box.vertical}${RESET} ${bold}${padEnd("SQUAD", w.name)}${RESET}${bold}${padEnd("AGENTS", w.agents)}${RESET}${bold}${padEnd("MEMORY", w.memory)}${RESET}${bold}ACTIVITY${RESET} ${colors.purple}${box.vertical}${RESET}`;
|
|
116
|
+
writeLine(header);
|
|
117
|
+
writeLine(` ${colors.purple}${box.teeRight}${colors.dim}${box.horizontal.repeat(tableWidth)}${colors.purple}${box.teeLeft}${RESET}`);
|
|
118
|
+
for (const squadName of squads) {
|
|
119
|
+
const agents = listAgents(squadsDir, squadName);
|
|
120
|
+
let memoryStatus = `${colors.dim}none${RESET}`;
|
|
121
|
+
let lastActivity = `${colors.dim}\u2014${RESET}`;
|
|
122
|
+
let activityColor = colors.dim;
|
|
123
|
+
if (memoryDir) {
|
|
124
|
+
const squadMemoryPath = join(memoryDir, squadName);
|
|
125
|
+
if (existsSync(squadMemoryPath)) {
|
|
126
|
+
const states = getSquadState(squadName);
|
|
127
|
+
memoryStatus = `${colors.green}${states.length} ${states.length === 1 ? "entry" : "entries"}${RESET}`;
|
|
128
|
+
let mostRecent = 0;
|
|
129
|
+
for (const state of states) {
|
|
130
|
+
const stat = statSync(state.path);
|
|
131
|
+
if (stat.mtimeMs > mostRecent) {
|
|
132
|
+
mostRecent = stat.mtimeMs;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (mostRecent > 0) {
|
|
136
|
+
const daysAgo = Math.floor((Date.now() - mostRecent) / (1e3 * 60 * 60 * 24));
|
|
137
|
+
if (daysAgo === 0) {
|
|
138
|
+
lastActivity = "today";
|
|
139
|
+
activityColor = colors.green;
|
|
140
|
+
} else if (daysAgo === 1) {
|
|
141
|
+
lastActivity = "yesterday";
|
|
142
|
+
activityColor = colors.green;
|
|
143
|
+
} else if (daysAgo < 7) {
|
|
144
|
+
lastActivity = `${daysAgo}d ago`;
|
|
145
|
+
activityColor = colors.yellow;
|
|
146
|
+
} else {
|
|
147
|
+
lastActivity = `${daysAgo}d ago`;
|
|
148
|
+
activityColor = colors.dim;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
const row = ` ${colors.purple}${box.vertical}${RESET} ${colors.cyan}${padEnd(squadName, w.name)}${RESET}${padEnd(String(agents.length), w.agents)}${padEnd(memoryStatus, w.memory)}${padEnd(`${activityColor}${lastActivity}${RESET}`, w.activity)}${colors.purple}${box.vertical}${RESET}`;
|
|
154
|
+
writeLine(row);
|
|
155
|
+
}
|
|
156
|
+
writeLine(` ${colors.purple}${box.bottomLeft}${colors.dim}${box.horizontal.repeat(tableWidth)}${colors.purple}${box.bottomRight}${RESET}`);
|
|
157
|
+
writeLine();
|
|
158
|
+
const repoSet = /* @__PURE__ */ new Set();
|
|
159
|
+
for (const name of squads) {
|
|
160
|
+
const squad = loadSquad(name);
|
|
161
|
+
if (squad?.repo) repoSet.add(squad.repo);
|
|
162
|
+
}
|
|
163
|
+
const ops = await fetchOperationalStatus([...repoSet]);
|
|
164
|
+
const allRepoNames = [...ops.milestones.map((m) => m.repo), ...ops.openPRs.map((p) => p.repo)];
|
|
165
|
+
const repoColWidth = Math.max(10, ...allRepoNames.map((r) => r.length + 2));
|
|
166
|
+
if (ops.milestones.length > 0) {
|
|
167
|
+
writeLine(` ${bold}Milestones${RESET}`);
|
|
168
|
+
writeLine();
|
|
169
|
+
for (const ms of ops.milestones) {
|
|
170
|
+
const filled = Math.round(ms.percent / 10);
|
|
171
|
+
const bar = `${colors.green}${"\u2588".repeat(filled)}${colors.dim}${"\u2591".repeat(10 - filled)}${RESET}`;
|
|
172
|
+
const pctColor = ms.percent >= 80 ? colors.green : ms.percent >= 40 ? colors.yellow : colors.red;
|
|
173
|
+
writeLine(` ${colors.dim}${padEnd(ms.repo, repoColWidth)}${RESET}${padEnd(ms.title, 12)}${bar} ${pctColor}${ms.percent}%${RESET} ${colors.dim}(${ms.closedIssues}/${ms.totalIssues})${RESET}`);
|
|
174
|
+
}
|
|
175
|
+
writeLine();
|
|
176
|
+
}
|
|
177
|
+
if (ops.openPRs.length > 0) {
|
|
178
|
+
writeLine(` ${bold}Open PRs${RESET}`);
|
|
179
|
+
writeLine();
|
|
180
|
+
for (const pr of ops.openPRs) {
|
|
181
|
+
const title = pr.title.length > 50 ? pr.title.substring(0, 47) + "..." : pr.title;
|
|
182
|
+
writeLine(` ${colors.dim}${padEnd(pr.repo, repoColWidth)}${RESET}${colors.cyan}#${pr.number}${RESET} ${title}`);
|
|
183
|
+
}
|
|
184
|
+
writeLine();
|
|
185
|
+
}
|
|
186
|
+
if (ops.error) {
|
|
187
|
+
writeLine(` ${colors.dim}GitHub: ${ops.error} (run \`gh auth login\`)${RESET}`);
|
|
188
|
+
writeLine();
|
|
189
|
+
}
|
|
190
|
+
writeLine(` ${colors.dim}$${RESET} squads status ${colors.cyan}<squad>${RESET} ${colors.dim}Squad details${RESET}`);
|
|
191
|
+
writeLine(` ${colors.dim}$${RESET} squads dash ${colors.dim}Full dashboard${RESET}`);
|
|
192
|
+
writeLine(` ${colors.dim}$${RESET} squads run ${colors.cyan}<squad>${RESET} ${colors.dim}Execute a squad${RESET}`);
|
|
193
|
+
writeLine();
|
|
194
|
+
}
|
|
195
|
+
async function showSquadStatus(squadName, squadsDir, options) {
|
|
196
|
+
const squad = loadSquad(squadName);
|
|
197
|
+
if (!squad) {
|
|
198
|
+
if (options.json) {
|
|
199
|
+
console.log(JSON.stringify({ ok: false, command: "status", error: `Squad "${squadName}" not found` }, null, 2));
|
|
200
|
+
process.exit(1);
|
|
201
|
+
}
|
|
202
|
+
writeLine(`${colors.red}Squad "${squadName}" not found.${RESET}`);
|
|
203
|
+
const similar = findSimilarSquads(squadName, listSquads(squadsDir));
|
|
204
|
+
if (similar.length > 0) {
|
|
205
|
+
writeLine(`${colors.dim}Did you mean: ${similar.join(", ")}?${RESET}`);
|
|
206
|
+
}
|
|
207
|
+
writeLine(`${colors.dim}Run \`squads status\` to see available squads.${RESET}`);
|
|
208
|
+
process.exit(1);
|
|
209
|
+
}
|
|
210
|
+
if (options.json) {
|
|
211
|
+
const agents2 = listAgents(squadsDir, squadName);
|
|
212
|
+
const execContext2 = resolveExecutionContext(squad);
|
|
213
|
+
const recentExecs2 = listExecutions({ squad: squadName, limit: 5 });
|
|
214
|
+
const memDir = findMemoryDir();
|
|
215
|
+
const states = memDir ? getSquadState(squadName) : [];
|
|
216
|
+
console.log(JSON.stringify({
|
|
217
|
+
ok: true,
|
|
218
|
+
command: "status",
|
|
219
|
+
data: {
|
|
220
|
+
squad: {
|
|
221
|
+
name: squad.name,
|
|
222
|
+
mission: squad.mission || null,
|
|
223
|
+
agents: agents2.map((a) => ({ name: a.name, role: a.role || null, status: a.status || "active" })),
|
|
224
|
+
pipelines: squad.pipelines,
|
|
225
|
+
context: {
|
|
226
|
+
skills: execContext2.resolved.skills.map((s) => s.name),
|
|
227
|
+
mcpServers: execContext2.resolved.mcpServers,
|
|
228
|
+
model: squad.context?.model?.default || null
|
|
229
|
+
},
|
|
230
|
+
recentExecutions: recentExecs2,
|
|
231
|
+
memoryEntries: states.length
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}, null, 2));
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
writeLine();
|
|
238
|
+
const sensitiveSquads = ["client-"];
|
|
239
|
+
const isSensitive = sensitiveSquads.some((prefix) => squadName.startsWith(prefix));
|
|
240
|
+
if (isSensitive) {
|
|
241
|
+
writeLine(privacyHeader("internal"));
|
|
242
|
+
writeLine();
|
|
243
|
+
}
|
|
244
|
+
writeLine(` ${gradient("squads")} ${colors.dim}status${RESET} ${colors.cyan}${squad.name}${RESET}`);
|
|
245
|
+
writeLine();
|
|
246
|
+
if (squad.mission) {
|
|
247
|
+
writeLine(` ${colors.dim}${squad.mission}${RESET}`);
|
|
248
|
+
writeLine();
|
|
249
|
+
}
|
|
250
|
+
const agents = listAgents(squadsDir, squadName);
|
|
251
|
+
const w = { name: 24, role: 36 };
|
|
252
|
+
const tableWidth = w.name + w.role + 4;
|
|
253
|
+
writeLine(` ${bold}Agents${RESET} ${colors.dim}(${agents.length})${RESET}`);
|
|
254
|
+
writeLine();
|
|
255
|
+
writeLine(` ${colors.purple}${box.topLeft}${colors.dim}${box.horizontal.repeat(tableWidth)}${colors.purple}${box.topRight}${RESET}`);
|
|
256
|
+
for (const agent of agents) {
|
|
257
|
+
const status = agent.status?.toLowerCase() === "active" ? icons.active : icons.pending;
|
|
258
|
+
const role = options.verbose && agent.role ? `${colors.dim}${agent.role.substring(0, w.role - 2)}${RESET}` : "";
|
|
259
|
+
const row = ` ${colors.purple}${box.vertical}${RESET} ${status} ${padEnd(agent.name, w.name - 2)}${padEnd(role, w.role)}${colors.purple}${box.vertical}${RESET}`;
|
|
260
|
+
writeLine(row);
|
|
261
|
+
}
|
|
262
|
+
writeLine(` ${colors.purple}${box.bottomLeft}${colors.dim}${box.horizontal.repeat(tableWidth)}${colors.purple}${box.bottomRight}${RESET}`);
|
|
263
|
+
if (squad.pipelines.length > 0) {
|
|
264
|
+
writeLine();
|
|
265
|
+
writeLine(` ${bold}Pipelines${RESET}`);
|
|
266
|
+
for (const pipeline of squad.pipelines) {
|
|
267
|
+
writeLine(` ${colors.dim}${pipeline.agents.join(" \u2192 ")}${RESET}`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
const execContext = resolveExecutionContext(squad);
|
|
271
|
+
const hasContext = execContext.resolved.skills.length > 0 || execContext.resolved.mcpServers.length > 0 || squad.context?.model?.default;
|
|
272
|
+
if (hasContext) {
|
|
273
|
+
writeLine();
|
|
274
|
+
writeLine(` ${bold}Context${RESET}`);
|
|
275
|
+
if (execContext.resolved.mcpServers.length > 0) {
|
|
276
|
+
const sourceLabel = execContext.resolved.mcpSource === "squad-local" ? `${colors.green}local${RESET}` : execContext.resolved.mcpSource === "generated" ? `${colors.cyan}generated${RESET}` : execContext.resolved.mcpSource === "user-override" ? `${colors.yellow}override${RESET}` : "";
|
|
277
|
+
writeLine(` ${colors.dim}MCP:${RESET} ${colors.cyan}${execContext.resolved.mcpServers.join(", ")}${RESET}${sourceLabel ? ` ${colors.dim}(${sourceLabel})${RESET}` : ""}`);
|
|
278
|
+
}
|
|
279
|
+
if (execContext.resolved.skills.length > 0) {
|
|
280
|
+
const bySource = execContext.resolved.skills.reduce((acc, s) => {
|
|
281
|
+
acc[s.source] = acc[s.source] || [];
|
|
282
|
+
acc[s.source].push(s.name);
|
|
283
|
+
return acc;
|
|
284
|
+
}, {});
|
|
285
|
+
const skillParts = [];
|
|
286
|
+
if (bySource["squad-local"]) {
|
|
287
|
+
skillParts.push(`${colors.green}${bySource["squad-local"].join(", ")}${RESET} ${colors.dim}(local)${RESET}`);
|
|
288
|
+
}
|
|
289
|
+
if (bySource["project"]) {
|
|
290
|
+
skillParts.push(`${colors.cyan}${bySource["project"].join(", ")}${RESET}`);
|
|
291
|
+
}
|
|
292
|
+
if (bySource["global"]) {
|
|
293
|
+
skillParts.push(`${colors.dim}${bySource["global"].join(", ")}${RESET}`);
|
|
294
|
+
}
|
|
295
|
+
writeLine(` ${colors.dim}Skills:${RESET} ${skillParts.join(", ")}`);
|
|
296
|
+
}
|
|
297
|
+
if (squad.context?.model?.default) {
|
|
298
|
+
writeLine(` ${colors.dim}Model:${RESET} ${colors.white}${squad.context.model.default}${RESET}`);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
const recentExecs = listExecutions({ squad: squadName, limit: 5 });
|
|
302
|
+
if (recentExecs.length > 0) {
|
|
303
|
+
writeLine();
|
|
304
|
+
writeLine(` ${bold}Recent Executions${RESET}`);
|
|
305
|
+
writeLine();
|
|
306
|
+
for (const exec of recentExecs) {
|
|
307
|
+
const statusIcon = exec.status === "completed" ? `${colors.green}\u25CF${RESET}` : exec.status === "failed" ? `${colors.red}\u25CF${RESET}` : `${colors.yellow}\u25C6${RESET}`;
|
|
308
|
+
const duration = exec.durationMs ? ` ${colors.dim}(${formatDuration(exec.durationMs)})${RESET}` : "";
|
|
309
|
+
const relTime = formatRelativeTime(exec.startTime);
|
|
310
|
+
writeLine(` ${statusIcon} ${colors.white}${exec.agent}${RESET}${duration} ${colors.dim}${relTime}${RESET}`);
|
|
311
|
+
if (exec.status === "failed" && exec.error && options.verbose) {
|
|
312
|
+
writeLine(` ${colors.red}\u2514 ${exec.error.substring(0, 60)}${exec.error.length > 60 ? "..." : ""}${RESET}`);
|
|
313
|
+
}
|
|
314
|
+
if (exec.status === "completed" && exec.outcome && options.verbose) {
|
|
315
|
+
writeLine(` ${colors.dim}\u2514 ${exec.outcome.substring(0, 60)}${exec.outcome.length > 60 ? "..." : ""}${RESET}`);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
const memoryDir = findMemoryDir();
|
|
320
|
+
if (memoryDir) {
|
|
321
|
+
const states = getSquadState(squadName);
|
|
322
|
+
if (states.length > 0) {
|
|
323
|
+
writeLine();
|
|
324
|
+
writeLine(` ${bold}Memory${RESET} ${colors.dim}(${states.length} ${states.length === 1 ? "entry" : "entries"})${RESET}`);
|
|
325
|
+
writeLine();
|
|
326
|
+
for (const state of states) {
|
|
327
|
+
const updated = state.content.match(/Updated:\s*(\S+)/)?.[1] || "unknown";
|
|
328
|
+
writeLine(` ${icons.progress} ${colors.white}${state.agent}${RESET}`);
|
|
329
|
+
writeLine(` ${colors.dim}\u2514 updated: ${updated}${RESET}`);
|
|
330
|
+
if (options.verbose) {
|
|
331
|
+
const signalsMatch = state.content.match(/## Active Signals([\s\S]*?)(?=##|$)/);
|
|
332
|
+
if (signalsMatch) {
|
|
333
|
+
const signalLines = signalsMatch[1].split("\n").filter((l) => l.match(/^\d+\./)).slice(0, 3);
|
|
334
|
+
for (const sig of signalLines) {
|
|
335
|
+
writeLine(` ${colors.dim} ${sig.trim()}${RESET}`);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
writeLine();
|
|
343
|
+
writeLine(` ${colors.dim}$${RESET} squads run ${colors.cyan}${squadName}${RESET} ${colors.dim}Run the squad${RESET}`);
|
|
344
|
+
writeLine(` ${colors.dim}$${RESET} squads dash ${colors.dim}ROI metrics & cost projections${RESET}`);
|
|
345
|
+
writeLine(` ${colors.dim}$${RESET} squads memory show ${colors.cyan}${squadName}${RESET} ${colors.dim}View full memory${RESET}`);
|
|
346
|
+
writeLine(` ${colors.dim}$${RESET} squads status ${colors.cyan}${squadName}${RESET} -v ${colors.dim}Verbose status${RESET}`);
|
|
347
|
+
writeLine();
|
|
348
|
+
}
|
|
349
|
+
export {
|
|
350
|
+
statusCommand
|
|
351
|
+
};
|
|
352
|
+
//# sourceMappingURL=status-AQNLDZVN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/status.ts"],"sourcesContent":["import { existsSync, statSync } from 'fs';\nimport { join } from 'path';\nimport {\n findSquadsDir,\n loadSquad,\n listSquads,\n listAgents,\n resolveExecutionContext,\n findSimilarSquads,\n} from '../lib/squad-parser.js';\nimport { findMemoryDir, getSquadState } from '../lib/memory.js';\nimport {\n getLiveSessionSummaryAsync,\n cleanupStaleSessions,\n} from '../lib/sessions.js';\nimport { fetchOperationalStatus } from '../lib/git.js';\nimport {\n listExecutions,\n getExecutionStats,\n formatDuration,\n formatRelativeTime,\n} from '../lib/executions.js';\nimport { checkForUpdate } from '../lib/update.js';\nimport { track, Events } from '../lib/telemetry.js';\nimport {\n colors,\n bold,\n RESET,\n gradient,\n box,\n padEnd,\n icons,\n writeLine,\n privacyHeader,\n} from '../lib/terminal.js';\n\ninterface StatusOptions {\n verbose?: boolean;\n json?: boolean;\n}\n\nexport async function statusCommand(\n squadName?: string,\n options: StatusOptions = {}\n): Promise<void> {\n await track(Events.CLI_STATUS, { squad: squadName || 'all', verbose: options.verbose });\n const squadsDir = findSquadsDir();\n\n if (!squadsDir) {\n writeLine(` ${colors.red}No .agents/squads directory found${RESET}`);\n writeLine(` ${colors.dim}Run \\`squads init\\` to create one.${RESET}`);\n process.exit(1);\n }\n\n if (squadName) {\n await showSquadStatus(squadName, squadsDir, options);\n } else {\n await showOverallStatus(squadsDir, options);\n }\n}\n\nasync function showOverallStatus(\n squadsDir: string,\n options: StatusOptions\n): Promise<void> {\n const squads = listSquads(squadsDir);\n const memoryDir = findMemoryDir();\n\n // Get active sessions (real-time process detection with parallel lsof)\n cleanupStaleSessions();\n const sessionSummary = await getLiveSessionSummaryAsync();\n\n // JSON output\n if (options.json) {\n const execStats = getExecutionStats({ since: new Date(Date.now() - 24 * 60 * 60 * 1000) });\n const squadData = squads.map(name => {\n const agents = listAgents(squadsDir, name);\n const states = memoryDir ? getSquadState(name) : [];\n return { name, agentCount: agents.length, memoryEntries: states.length };\n });\n console.log(JSON.stringify({\n ok: true,\n command: 'status',\n data: {\n squads: squadData,\n totalSquads: squads.length,\n sessions: sessionSummary,\n executions24h: execStats,\n memoryEnabled: !!memoryDir,\n },\n }, null, 2));\n return;\n }\n\n writeLine();\n writeLine(` ${gradient('squads')} ${colors.dim}status${RESET}`);\n\n // Check for updates (cached, non-blocking)\n const updateInfo = checkForUpdate();\n if (updateInfo.updateAvailable) {\n writeLine(` ${colors.cyan}⬆${RESET} Update available: ${colors.dim}${updateInfo.currentVersion}${RESET} → ${colors.green}${updateInfo.latestVersion}${RESET} ${colors.dim}(run \\`squads update\\`)${RESET}`);\n }\n\n // Session indicator line (only if there are active sessions)\n if (sessionSummary.totalSessions > 0) {\n const sessionText = sessionSummary.totalSessions === 1 ? 'session' : 'sessions';\n const squadText = sessionSummary.squadCount === 1 ? 'squad' : 'squads';\n\n // Build tool breakdown string (e.g., \"claude 4, cursor 2\")\n let toolInfo = '';\n if (sessionSummary.byTool && Object.keys(sessionSummary.byTool).length > 0) {\n const toolParts = Object.entries(sessionSummary.byTool)\n .sort((a, b) => b[1] - a[1]) // Sort by count descending\n .map(([tool, count]) => `${colors.dim}${tool}${RESET} ${colors.cyan}${count}${RESET}`);\n toolInfo = ` ${colors.dim}(${RESET}${toolParts.join(` ${colors.dim}·${RESET} `)}${colors.dim})${RESET}`;\n }\n\n writeLine(` ${colors.green}${icons.active}${RESET} ${colors.white}${sessionSummary.totalSessions}${RESET} active ${sessionText} ${colors.dim}across${RESET} ${colors.cyan}${sessionSummary.squadCount}${RESET} ${squadText}${toolInfo}`);\n }\n writeLine();\n\n // Execution stats (last 24h)\n const execStats = getExecutionStats({ since: new Date(Date.now() - 24 * 60 * 60 * 1000) });\n const execSummary = execStats.total > 0\n ? `${colors.green}${execStats.completed}${RESET} ${colors.dim}completed${RESET}` +\n (execStats.failed > 0 ? ` ${colors.red}${execStats.failed}${RESET} ${colors.dim}failed${RESET}` : '') +\n (execStats.running > 0 ? ` ${colors.yellow}${execStats.running}${RESET} ${colors.dim}running${RESET}` : '')\n : `${colors.dim}no executions${RESET}`;\n\n // Stats row\n const totalSquads = squads.length;\n const activeCount = squads.length; // All loaded squads are \"active\"\n writeLine(` ${colors.cyan}${activeCount}${RESET}/${totalSquads} squads ${colors.dim}│${RESET} ${colors.dim}memory: ${memoryDir ? 'enabled' : 'none'}${RESET} ${colors.dim}│${RESET} ${colors.dim}24h:${RESET} ${execSummary}`);\n writeLine();\n\n // Table\n const w = { name: 16, agents: 8, memory: 14, activity: 12 };\n const tableWidth = w.name + w.agents + w.memory + w.activity + 6;\n\n writeLine(` ${colors.purple}${box.topLeft}${colors.dim}${box.horizontal.repeat(tableWidth)}${colors.purple}${box.topRight}${RESET}`);\n\n const header = ` ${colors.purple}${box.vertical}${RESET} ` +\n `${bold}${padEnd('SQUAD', w.name)}${RESET}` +\n `${bold}${padEnd('AGENTS', w.agents)}${RESET}` +\n `${bold}${padEnd('MEMORY', w.memory)}${RESET}` +\n `${bold}ACTIVITY${RESET}` +\n ` ${colors.purple}${box.vertical}${RESET}`;\n writeLine(header);\n\n writeLine(` ${colors.purple}${box.teeRight}${colors.dim}${box.horizontal.repeat(tableWidth)}${colors.purple}${box.teeLeft}${RESET}`);\n\n for (const squadName of squads) {\n const agents = listAgents(squadsDir, squadName);\n\n // Check memory\n let memoryStatus = `${colors.dim}none${RESET}`;\n let lastActivity = `${colors.dim}—${RESET}`;\n let activityColor = colors.dim;\n\n if (memoryDir) {\n const squadMemoryPath = join(memoryDir, squadName);\n if (existsSync(squadMemoryPath)) {\n const states = getSquadState(squadName);\n memoryStatus = `${colors.green}${states.length} ${states.length === 1 ? 'entry' : 'entries'}${RESET}`;\n\n // Find most recent file\n let mostRecent = 0;\n for (const state of states) {\n const stat = statSync(state.path);\n if (stat.mtimeMs > mostRecent) {\n mostRecent = stat.mtimeMs;\n }\n }\n\n if (mostRecent > 0) {\n const daysAgo = Math.floor((Date.now() - mostRecent) / (1000 * 60 * 60 * 24));\n if (daysAgo === 0) {\n lastActivity = 'today';\n activityColor = colors.green;\n } else if (daysAgo === 1) {\n lastActivity = 'yesterday';\n activityColor = colors.green;\n } else if (daysAgo < 7) {\n lastActivity = `${daysAgo}d ago`;\n activityColor = colors.yellow;\n } else {\n lastActivity = `${daysAgo}d ago`;\n activityColor = colors.dim;\n }\n }\n }\n }\n\n const row = ` ${colors.purple}${box.vertical}${RESET} ` +\n `${colors.cyan}${padEnd(squadName, w.name)}${RESET}` +\n `${padEnd(String(agents.length), w.agents)}` +\n `${padEnd(memoryStatus, w.memory)}` +\n `${padEnd(`${activityColor}${lastActivity}${RESET}`, w.activity)}` +\n `${colors.purple}${box.vertical}${RESET}`;\n\n writeLine(row);\n }\n\n writeLine(` ${colors.purple}${box.bottomLeft}${colors.dim}${box.horizontal.repeat(tableWidth)}${colors.purple}${box.bottomRight}${RESET}`);\n writeLine();\n\n // Discover repos from squad definitions (SQUAD.md `repo` field)\n const repoSet = new Set<string>();\n for (const name of squads) {\n const squad = loadSquad(name);\n if (squad?.repo) repoSet.add(squad.repo);\n }\n const ops = await fetchOperationalStatus([...repoSet]);\n\n // Compute column width from actual repo names\n const allRepoNames = [...ops.milestones.map(m => m.repo), ...ops.openPRs.map(p => p.repo)];\n const repoColWidth = Math.max(10, ...allRepoNames.map(r => r.length + 2));\n\n if (ops.milestones.length > 0) {\n writeLine(` ${bold}Milestones${RESET}`);\n writeLine();\n for (const ms of ops.milestones) {\n const filled = Math.round(ms.percent / 10);\n const bar = `${colors.green}${'█'.repeat(filled)}${colors.dim}${'░'.repeat(10 - filled)}${RESET}`;\n const pctColor = ms.percent >= 80 ? colors.green : ms.percent >= 40 ? colors.yellow : colors.red;\n writeLine(` ${colors.dim}${padEnd(ms.repo, repoColWidth)}${RESET}${padEnd(ms.title, 12)}${bar} ${pctColor}${ms.percent}%${RESET} ${colors.dim}(${ms.closedIssues}/${ms.totalIssues})${RESET}`);\n }\n writeLine();\n }\n\n if (ops.openPRs.length > 0) {\n writeLine(` ${bold}Open PRs${RESET}`);\n writeLine();\n for (const pr of ops.openPRs) {\n const title = pr.title.length > 50 ? pr.title.substring(0, 47) + '...' : pr.title;\n writeLine(` ${colors.dim}${padEnd(pr.repo, repoColWidth)}${RESET}${colors.cyan}#${pr.number}${RESET} ${title}`);\n }\n writeLine();\n }\n\n if (ops.error) {\n writeLine(` ${colors.dim}GitHub: ${ops.error} (run \\`gh auth login\\`)${RESET}`);\n writeLine();\n }\n\n // Commands\n writeLine(` ${colors.dim}$${RESET} squads status ${colors.cyan}<squad>${RESET} ${colors.dim}Squad details${RESET}`);\n writeLine(` ${colors.dim}$${RESET} squads dash ${colors.dim}Full dashboard${RESET}`);\n writeLine(` ${colors.dim}$${RESET} squads run ${colors.cyan}<squad>${RESET} ${colors.dim}Execute a squad${RESET}`);\n writeLine();\n}\n\nasync function showSquadStatus(\n squadName: string,\n squadsDir: string,\n options: StatusOptions\n): Promise<void> {\n const squad = loadSquad(squadName);\n\n if (!squad) {\n if (options.json) {\n console.log(JSON.stringify({ ok: false, command: 'status', error: `Squad \"${squadName}\" not found` }, null, 2));\n process.exit(1);\n }\n writeLine(`${colors.red}Squad \"${squadName}\" not found.${RESET}`);\n const similar = findSimilarSquads(squadName, listSquads(squadsDir));\n if (similar.length > 0) {\n writeLine(`${colors.dim}Did you mean: ${similar.join(', ')}?${RESET}`);\n }\n writeLine(`${colors.dim}Run \\`squads status\\` to see available squads.${RESET}`);\n process.exit(1);\n }\n\n // JSON output for specific squad\n if (options.json) {\n const agents = listAgents(squadsDir, squadName);\n const execContext = resolveExecutionContext(squad);\n const recentExecs = listExecutions({ squad: squadName, limit: 5 });\n const memDir = findMemoryDir();\n const states = memDir ? getSquadState(squadName) : [];\n console.log(JSON.stringify({\n ok: true,\n command: 'status',\n data: {\n squad: {\n name: squad.name,\n mission: squad.mission || null,\n agents: agents.map(a => ({ name: a.name, role: a.role || null, status: a.status || 'active' })),\n pipelines: squad.pipelines,\n context: {\n skills: execContext.resolved.skills.map(s => s.name),\n mcpServers: execContext.resolved.mcpServers,\n model: squad.context?.model?.default || null,\n },\n recentExecutions: recentExecs,\n memoryEntries: states.length,\n },\n },\n }, null, 2));\n return;\n }\n\n writeLine();\n\n // Show privacy header for sensitive squads (client, finance, etc.)\n const sensitiveSquads = ['client-'];\n const isSensitive = sensitiveSquads.some(prefix => squadName.startsWith(prefix));\n if (isSensitive) {\n writeLine(privacyHeader('internal'));\n writeLine();\n }\n\n writeLine(` ${gradient('squads')} ${colors.dim}status${RESET} ${colors.cyan}${squad.name}${RESET}`);\n writeLine();\n\n // Mission\n if (squad.mission) {\n writeLine(` ${colors.dim}${squad.mission}${RESET}`);\n writeLine();\n }\n\n // Agents table\n const agents = listAgents(squadsDir, squadName);\n const w = { name: 24, role: 36 };\n const tableWidth = w.name + w.role + 4;\n\n writeLine(` ${bold}Agents${RESET} ${colors.dim}(${agents.length})${RESET}`);\n writeLine();\n\n writeLine(` ${colors.purple}${box.topLeft}${colors.dim}${box.horizontal.repeat(tableWidth)}${colors.purple}${box.topRight}${RESET}`);\n\n for (const agent of agents) {\n const status = agent.status?.toLowerCase() === 'active'\n ? icons.active\n : icons.pending;\n\n const role = options.verbose && agent.role\n ? `${colors.dim}${agent.role.substring(0, w.role - 2)}${RESET}`\n : '';\n\n const row = ` ${colors.purple}${box.vertical}${RESET} ` +\n `${status} ${padEnd(agent.name, w.name - 2)}` +\n `${padEnd(role, w.role)}` +\n `${colors.purple}${box.vertical}${RESET}`;\n\n writeLine(row);\n }\n\n writeLine(` ${colors.purple}${box.bottomLeft}${colors.dim}${box.horizontal.repeat(tableWidth)}${colors.purple}${box.bottomRight}${RESET}`);\n\n // Pipelines\n if (squad.pipelines.length > 0) {\n writeLine();\n writeLine(` ${bold}Pipelines${RESET}`);\n for (const pipeline of squad.pipelines) {\n writeLine(` ${colors.dim}${pipeline.agents.join(' → ')}${RESET}`);\n }\n }\n\n // Context profile\n const execContext = resolveExecutionContext(squad);\n const hasContext = execContext.resolved.skills.length > 0 ||\n execContext.resolved.mcpServers.length > 0 ||\n (squad.context?.model?.default);\n\n if (hasContext) {\n writeLine();\n writeLine(` ${bold}Context${RESET}`);\n\n // MCP servers\n if (execContext.resolved.mcpServers.length > 0) {\n const sourceLabel = execContext.resolved.mcpSource === 'squad-local' ? `${colors.green}local${RESET}` :\n execContext.resolved.mcpSource === 'generated' ? `${colors.cyan}generated${RESET}` :\n execContext.resolved.mcpSource === 'user-override' ? `${colors.yellow}override${RESET}` :\n '';\n writeLine(` ${colors.dim}MCP:${RESET} ${colors.cyan}${execContext.resolved.mcpServers.join(', ')}${RESET}${sourceLabel ? ` ${colors.dim}(${sourceLabel})${RESET}` : ''}`);\n }\n\n // Skills (grouped by source)\n if (execContext.resolved.skills.length > 0) {\n const bySource = execContext.resolved.skills.reduce((acc, s) => {\n acc[s.source] = acc[s.source] || [];\n acc[s.source].push(s.name);\n return acc;\n }, {} as Record<string, string[]>);\n\n const skillParts: string[] = [];\n if (bySource['squad-local']) {\n skillParts.push(`${colors.green}${bySource['squad-local'].join(', ')}${RESET} ${colors.dim}(local)${RESET}`);\n }\n if (bySource['project']) {\n skillParts.push(`${colors.cyan}${bySource['project'].join(', ')}${RESET}`);\n }\n if (bySource['global']) {\n skillParts.push(`${colors.dim}${bySource['global'].join(', ')}${RESET}`);\n }\n writeLine(` ${colors.dim}Skills:${RESET} ${skillParts.join(', ')}`);\n }\n\n // Model\n if (squad.context?.model?.default) {\n writeLine(` ${colors.dim}Model:${RESET} ${colors.white}${squad.context.model.default}${RESET}`);\n }\n }\n\n // Recent executions\n const recentExecs = listExecutions({ squad: squadName, limit: 5 });\n if (recentExecs.length > 0) {\n writeLine();\n writeLine(` ${bold}Recent Executions${RESET}`);\n writeLine();\n\n for (const exec of recentExecs) {\n // Use plain symbols - icons already have colors embedded\n const statusIcon = exec.status === 'completed' ? `${colors.green}●${RESET}` :\n exec.status === 'failed' ? `${colors.red}●${RESET}` :\n `${colors.yellow}◆${RESET}`;\n const duration = exec.durationMs ? ` ${colors.dim}(${formatDuration(exec.durationMs)})${RESET}` : '';\n const relTime = formatRelativeTime(exec.startTime);\n\n writeLine(` ${statusIcon} ${colors.white}${exec.agent}${RESET}${duration} ${colors.dim}${relTime}${RESET}`);\n\n // Show error message for failed executions\n if (exec.status === 'failed' && exec.error && options.verbose) {\n writeLine(` ${colors.red}└ ${exec.error.substring(0, 60)}${exec.error.length > 60 ? '...' : ''}${RESET}`);\n }\n\n // Show outcome for completed executions in verbose mode\n if (exec.status === 'completed' && exec.outcome && options.verbose) {\n writeLine(` ${colors.dim}└ ${exec.outcome.substring(0, 60)}${exec.outcome.length > 60 ? '...' : ''}${RESET}`);\n }\n }\n }\n\n // Memory state\n const memoryDir = findMemoryDir();\n if (memoryDir) {\n const states = getSquadState(squadName);\n\n if (states.length > 0) {\n writeLine();\n writeLine(` ${bold}Memory${RESET} ${colors.dim}(${states.length} ${states.length === 1 ? 'entry' : 'entries'})${RESET}`);\n writeLine();\n\n for (const state of states) {\n const updated = state.content.match(/Updated:\\s*(\\S+)/)?.[1] || 'unknown';\n writeLine(` ${icons.progress} ${colors.white}${state.agent}${RESET}`);\n writeLine(` ${colors.dim}└ updated: ${updated}${RESET}`);\n\n if (options.verbose) {\n const signalsMatch = state.content.match(/## Active Signals([\\s\\S]*?)(?=##|$)/);\n if (signalsMatch) {\n const signalLines = signalsMatch[1]\n .split('\\n')\n .filter(l => l.match(/^\\d+\\./))\n .slice(0, 3);\n\n for (const sig of signalLines) {\n writeLine(` ${colors.dim} ${sig.trim()}${RESET}`);\n }\n }\n }\n }\n }\n }\n\n writeLine();\n writeLine(` ${colors.dim}$${RESET} squads run ${colors.cyan}${squadName}${RESET} ${colors.dim}Run the squad${RESET}`);\n writeLine(` ${colors.dim}$${RESET} squads dash ${colors.dim}ROI metrics & cost projections${RESET}`);\n writeLine(` ${colors.dim}$${RESET} squads memory show ${colors.cyan}${squadName}${RESET} ${colors.dim}View full memory${RESET}`);\n writeLine(` ${colors.dim}$${RESET} squads status ${colors.cyan}${squadName}${RESET} -v ${colors.dim}Verbose status${RESET}`);\n writeLine();\n}\n"],"mappings":"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","names":["execStats","agents","execContext","recentExecs"]}
|