sage-team 3.0.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -16,7 +16,7 @@ function buildProgram() {
16
16
  program
17
17
  .name('sage-team')
18
18
  .description('AI-powered autonomous software company')
19
- .version('3.0.1');
19
+ .version('3.1.0');
20
20
  program.addCommand((0, init_1.initCommand)());
21
21
  program.addCommand((0, start_1.startCommand)());
22
22
  program.addCommand((0, resume_1.resumeCommand)());
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":""}
@@ -0,0 +1,295 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
41
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
42
+ const zod_1 = require("zod");
43
+ const fs_1 = __importDefault(require("fs"));
44
+ const path_1 = __importDefault(require("path"));
45
+ const database_1 = require("../state/database");
46
+ const orchestrator_1 = require("../engine/orchestrator");
47
+ const personas_1 = require("../agents/personas");
48
+ // ── State ────────────────────────────────────────────────────────────
49
+ let orchestrator = null;
50
+ let db = null;
51
+ function loadConfig() {
52
+ const configPath = path_1.default.join(process.cwd(), '.sage-team', 'config.json');
53
+ if (!fs_1.default.existsSync(configPath))
54
+ return null;
55
+ return JSON.parse(fs_1.default.readFileSync(configPath, 'utf-8'));
56
+ }
57
+ function ensureOrchestrator() {
58
+ if (orchestrator)
59
+ return orchestrator;
60
+ const config = loadConfig();
61
+ if (!config)
62
+ throw new Error('Sage Team not initialized. Run sage-team init first.');
63
+ const apiKey = config.apiKey || process.env.ANTHROPIC_API_KEY || '';
64
+ if (!apiKey)
65
+ throw new Error('No API key. Set ANTHROPIC_API_KEY environment variable.');
66
+ const dbPath = path_1.default.join(process.cwd(), '.sage-team', 'state.db');
67
+ db = new database_1.Database(dbPath);
68
+ orchestrator = new orchestrator_1.Orchestrator(db, {
69
+ apiKey,
70
+ model: config.model || 'claude-sonnet-4-20250514',
71
+ maxConcurrentAgents: config.maxConcurrentAgents || 3,
72
+ autonomyMode: config.autonomyMode || 'sandbox',
73
+ companyName: config.companyName || 'Sage Team',
74
+ mission: config.mission || 'Build amazing software autonomously',
75
+ });
76
+ return orchestrator;
77
+ }
78
+ // ── MCP Server ───────────────────────────────────────────────────────
79
+ const server = new mcp_js_1.McpServer({
80
+ name: 'sage-team',
81
+ version: '3.0.1',
82
+ });
83
+ // ── Tool: init ───────────────────────────────────────────────────────
84
+ server.tool('sage_team_init', 'Initialize Sage Team in the current project directory. Creates .sage-team/ config.', {}, async () => {
85
+ const sageDir = path_1.default.join(process.cwd(), '.sage-team');
86
+ const configPath = path_1.default.join(sageDir, 'config.json');
87
+ if (fs_1.default.existsSync(configPath)) {
88
+ return { content: [{ type: 'text', text: 'Sage Team already initialized in this directory.' }] };
89
+ }
90
+ fs_1.default.mkdirSync(path_1.default.join(sageDir, 'worktrees'), { recursive: true });
91
+ const config = {
92
+ companyName: 'Sage Team',
93
+ mission: 'Build amazing software autonomously',
94
+ model: 'claude-sonnet-4-20250514',
95
+ maxConcurrentAgents: 3,
96
+ autonomyMode: 'sandbox',
97
+ apiKey: '',
98
+ };
99
+ if (process.env.ANTHROPIC_API_KEY) {
100
+ config.apiKey = process.env.ANTHROPIC_API_KEY;
101
+ }
102
+ fs_1.default.writeFileSync(configPath, JSON.stringify(config, null, 2));
103
+ // Add to .gitignore
104
+ const gitignorePath = path_1.default.join(process.cwd(), '.gitignore');
105
+ const entry = '\n# Sage Team\n.sage-team/\n';
106
+ if (fs_1.default.existsSync(gitignorePath)) {
107
+ const content = fs_1.default.readFileSync(gitignorePath, 'utf-8');
108
+ if (!content.includes('.sage-team')) {
109
+ fs_1.default.appendFileSync(gitignorePath, entry);
110
+ }
111
+ }
112
+ else {
113
+ fs_1.default.writeFileSync(gitignorePath, entry);
114
+ }
115
+ const keyStatus = config.apiKey ? 'API key detected from environment.' : 'Warning: No API key. Set ANTHROPIC_API_KEY.';
116
+ return {
117
+ content: [{
118
+ type: 'text',
119
+ text: `Sage Team initialized!\n Config: .sage-team/config.json\n Mode: ${config.autonomyMode}\n ${keyStatus}`,
120
+ }],
121
+ };
122
+ });
123
+ // ── Tool: team ───────────────────────────────────────────────────────
124
+ server.tool('sage_team_list', 'Show all 11 Sage Team AI agents with their roles, skills, and emoji.', {}, async () => {
125
+ const lines = personas_1.PERSONAS.map(p => `${p.emoji} **${p.name}** (${p.id}) — ${p.role}\n ${p.description}\n Skills: ${p.skills.join(', ')}`);
126
+ return { content: [{ type: 'text', text: `# Sage Team — 11 Agents\n\n${lines.join('\n\n')}` }] };
127
+ });
128
+ // ── Tool: start ──────────────────────────────────────────────────────
129
+ server.tool('sage_team_start', 'Start a new Sage Team session and give the team a goal to work on. The CEO (Sage) will decompose it into tasks and assign them to agents.', { goal: zod_1.z.string().describe('The goal for the team (e.g. "Build a REST API for a todo app")') }, async ({ goal }) => {
130
+ const orch = ensureOrchestrator();
131
+ const session = orch.start(goal);
132
+ // Wait for decomposition
133
+ const lines = [`Session started: ${session.id}`, `Goal: ${goal}`, '', 'CEO Sage is decomposing the goal...'];
134
+ try {
135
+ await orch.submitGoal(goal);
136
+ const tasks = orch.getTasks();
137
+ lines.push(`\nSprint created with ${tasks.length} tasks:\n`);
138
+ for (const t of tasks) {
139
+ lines.push(` - [${t.assignee_id}] ${t.title}`);
140
+ }
141
+ lines.push('\nAgents are now working. Use sage_team_status to check progress.');
142
+ }
143
+ catch (err) {
144
+ lines.push(`\nGoal decomposition failed: ${err.message}`);
145
+ }
146
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
147
+ });
148
+ // ── Tool: status ─────────────────────────────────────────────────────
149
+ server.tool('sage_team_status', 'Show current sprint progress: tasks, agent statuses, and pending PRs.', {}, async () => {
150
+ const orch = ensureOrchestrator();
151
+ if (!orch.sessionId) {
152
+ return { content: [{ type: 'text', text: 'No active session. Use sage_team_start first.' }] };
153
+ }
154
+ const agents = orch.getAgents();
155
+ const tasks = orch.getTasks();
156
+ const prs = orch.getPendingPRs();
157
+ const completed = tasks.filter((t) => t.status === 'completed').length;
158
+ const inProgress = tasks.filter((t) => t.status === 'in_progress').length;
159
+ const pending = tasks.filter((t) => t.status === 'pending').length;
160
+ const failed = tasks.filter((t) => t.status === 'failed').length;
161
+ const lines = [
162
+ `# Sprint Status`,
163
+ ``,
164
+ `**Tasks:** ${completed}/${tasks.length} completed | ${inProgress} in progress | ${pending} pending${failed ? ` | ${failed} failed` : ''}`,
165
+ ``,
166
+ `## Agents`,
167
+ ...agents.map((a) => {
168
+ const persona = personas_1.PERSONAS.find(p => p.id === a.agent_id);
169
+ return ` ${persona?.emoji || '?'} ${persona?.name || a.agent_id}: ${a.status}${a.current_task_id ? ` (task: ${a.current_task_id})` : ''}`;
170
+ }),
171
+ ``,
172
+ `## Tasks`,
173
+ ...tasks.map((t) => {
174
+ const icon = t.status === 'completed' ? '✅' : t.status === 'in_progress' ? '🔨' : t.status === 'failed' ? '❌' : '⏳';
175
+ return ` ${icon} [${t.assignee_id}] ${t.title}`;
176
+ }),
177
+ ];
178
+ if (prs.length > 0) {
179
+ lines.push('', '## Pending PRs');
180
+ for (const pr of prs) {
181
+ lines.push(` 📝 PR #${pr.id} by ${pr.agent_id} — branch: ${pr.branch}`);
182
+ }
183
+ }
184
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
185
+ });
186
+ // ── Tool: doctor ─────────────────────────────────────────────────────
187
+ server.tool('sage_team_doctor', 'Check system health: Node.js, Git, Claude Code, API key status.', {}, async () => {
188
+ const { execSync } = await Promise.resolve().then(() => __importStar(require('child_process')));
189
+ const checks = [];
190
+ // Node
191
+ try {
192
+ const v = execSync('node --version', { timeout: 3000 }).toString().trim();
193
+ checks.push(`✅ Node.js: ${v}`);
194
+ }
195
+ catch {
196
+ checks.push('❌ Node.js: not found');
197
+ }
198
+ // Git
199
+ try {
200
+ const v = execSync('git --version', { timeout: 3000 }).toString().trim();
201
+ checks.push(`✅ Git: ${v}`);
202
+ }
203
+ catch {
204
+ checks.push('❌ Git: not found');
205
+ }
206
+ // Claude Code
207
+ try {
208
+ execSync('claude --version', { timeout: 3000, stdio: 'pipe' });
209
+ checks.push('✅ Claude Code: installed');
210
+ }
211
+ catch {
212
+ checks.push('❌ Claude Code: not found');
213
+ }
214
+ // API Key
215
+ const hasEnv = !!process.env.ANTHROPIC_API_KEY;
216
+ const config = loadConfig();
217
+ const hasConfig = config && !!config.apiKey;
218
+ if (hasEnv)
219
+ checks.push('✅ API Key: set via ANTHROPIC_API_KEY');
220
+ else if (hasConfig)
221
+ checks.push('✅ API Key: set in config');
222
+ else
223
+ checks.push('❌ API Key: not set');
224
+ // Init
225
+ if (config)
226
+ checks.push('✅ Initialized: .sage-team/ exists');
227
+ else
228
+ checks.push('⚠️ Not initialized: run sage_team_init');
229
+ return { content: [{ type: 'text', text: `# Sage Team Doctor\n\n${checks.join('\n')}` }] };
230
+ });
231
+ // ── Tool: approve PR ─────────────────────────────────────────────────
232
+ server.tool('sage_team_approve_pr', 'Approve and merge a pending pull request.', { pr_id: zod_1.z.string().describe('The PR ID to approve') }, async ({ pr_id }) => {
233
+ const orch = ensureOrchestrator();
234
+ try {
235
+ await orch.approvePR(pr_id);
236
+ return { content: [{ type: 'text', text: `PR ${pr_id} approved and merged.` }] };
237
+ }
238
+ catch (err) {
239
+ return { content: [{ type: 'text', text: `Failed to approve PR: ${err.message}` }] };
240
+ }
241
+ });
242
+ // ── Tool: reject PR ──────────────────────────────────────────────────
243
+ server.tool('sage_team_reject_pr', 'Reject a pull request with feedback. The agent will rework the task.', {
244
+ pr_id: zod_1.z.string().describe('The PR ID to reject'),
245
+ feedback: zod_1.z.string().describe('Feedback for the agent on what to fix'),
246
+ }, async ({ pr_id, feedback }) => {
247
+ const orch = ensureOrchestrator();
248
+ try {
249
+ orch.rejectPR(pr_id, feedback);
250
+ return { content: [{ type: 'text', text: `PR ${pr_id} rejected. Agent will rework with feedback.` }] };
251
+ }
252
+ catch (err) {
253
+ return { content: [{ type: 'text', text: `Failed to reject PR: ${err.message}` }] };
254
+ }
255
+ });
256
+ // ── Tool: config ─────────────────────────────────────────────────────
257
+ server.tool('sage_team_config', 'View or update Sage Team configuration (model, max agents, autonomy mode, company name).', {
258
+ show: zod_1.z.boolean().optional().describe('Show current config'),
259
+ model: zod_1.z.string().optional().describe('Claude model to use'),
260
+ max_agents: zod_1.z.number().optional().describe('Max concurrent agents (1-10)'),
261
+ autonomy: zod_1.z.enum(['sandbox', 'direct', 'supervised']).optional().describe('Autonomy mode'),
262
+ company_name: zod_1.z.string().optional().describe('Company name'),
263
+ }, async ({ show, model, max_agents, autonomy, company_name }) => {
264
+ const configPath = path_1.default.join(process.cwd(), '.sage-team', 'config.json');
265
+ if (!fs_1.default.existsSync(configPath)) {
266
+ return { content: [{ type: 'text', text: 'Not initialized. Run sage_team_init first.' }] };
267
+ }
268
+ const config = JSON.parse(fs_1.default.readFileSync(configPath, 'utf-8'));
269
+ if (show || (!model && !max_agents && !autonomy && !company_name)) {
270
+ const display = { ...config };
271
+ if (display.apiKey)
272
+ display.apiKey = display.apiKey.slice(0, 10) + '...';
273
+ return { content: [{ type: 'text', text: `# Config\n\n\`\`\`json\n${JSON.stringify(display, null, 2)}\n\`\`\`` }] };
274
+ }
275
+ if (model)
276
+ config.model = model;
277
+ if (max_agents)
278
+ config.maxConcurrentAgents = max_agents;
279
+ if (autonomy)
280
+ config.autonomyMode = autonomy;
281
+ if (company_name)
282
+ config.companyName = company_name;
283
+ fs_1.default.writeFileSync(configPath, JSON.stringify(config, null, 2));
284
+ return { content: [{ type: 'text', text: 'Configuration updated.' }] };
285
+ });
286
+ // ── Start ────────────────────────────────────────────────────────────
287
+ async function main() {
288
+ const transport = new stdio_js_1.StdioServerTransport();
289
+ await server.connect(transport);
290
+ }
291
+ main().catch((err) => {
292
+ console.error('MCP server failed:', err);
293
+ process.exit(1);
294
+ });
295
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "sage-team",
3
- "version": "3.0.1",
3
+ "version": "3.1.0",
4
4
  "description": "AI-powered autonomous software company with 11 agents, Claude Code execution, and PixiJS isometric office visualization.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
7
7
  "sage-team": "dist/cli/index.js",
8
- "sage": "dist/cli/index.js"
8
+ "sage": "dist/cli/index.js",
9
+ "sage-team-mcp": "dist/mcp/server.js"
9
10
  },
10
11
  "scripts": {
11
12
  "build": "tsc && cd src/web && npm run build",
@@ -36,6 +37,7 @@
36
37
  "homepage": "https://github.com/Petriccone/sage-team#readme",
37
38
  "dependencies": {
38
39
  "@anthropic-ai/sdk": "^0.39.0",
40
+ "@modelcontextprotocol/sdk": "^1.27.1",
39
41
  "better-sqlite3": "^12.8.0",
40
42
  "commander": "^12.1.0",
41
43
  "eventemitter3": "^5.0.1",