sage-team 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +180 -0
  3. package/dist/agents/__tests__/personas.test.d.ts +2 -0
  4. package/dist/agents/__tests__/personas.test.d.ts.map +1 -0
  5. package/dist/agents/__tests__/personas.test.js +47 -0
  6. package/dist/agents/__tests__/personas.test.js.map +1 -0
  7. package/dist/agents/personas.d.ts +3 -0
  8. package/dist/agents/personas.d.ts.map +1 -0
  9. package/dist/agents/personas.js +127 -0
  10. package/dist/agents/personas.js.map +1 -0
  11. package/dist/agents/skills-map.d.ts +7 -0
  12. package/dist/agents/skills-map.d.ts.map +1 -0
  13. package/dist/agents/skills-map.js +55 -0
  14. package/dist/agents/skills-map.js.map +1 -0
  15. package/dist/cli/__tests__/cli.test.d.ts +2 -0
  16. package/dist/cli/__tests__/cli.test.d.ts.map +1 -0
  17. package/dist/cli/__tests__/cli.test.js +65 -0
  18. package/dist/cli/__tests__/cli.test.js.map +1 -0
  19. package/dist/cli/commands/config.d.ts +3 -0
  20. package/dist/cli/commands/config.d.ts.map +1 -0
  21. package/dist/cli/commands/config.js +50 -0
  22. package/dist/cli/commands/config.js.map +1 -0
  23. package/dist/cli/commands/doctor.d.ts +9 -0
  24. package/dist/cli/commands/doctor.d.ts.map +1 -0
  25. package/dist/cli/commands/doctor.js +74 -0
  26. package/dist/cli/commands/doctor.js.map +1 -0
  27. package/dist/cli/commands/init.d.ts +3 -0
  28. package/dist/cli/commands/init.d.ts.map +1 -0
  29. package/dist/cli/commands/init.js +67 -0
  30. package/dist/cli/commands/init.js.map +1 -0
  31. package/dist/cli/commands/logs.d.ts +3 -0
  32. package/dist/cli/commands/logs.d.ts.map +1 -0
  33. package/dist/cli/commands/logs.js +51 -0
  34. package/dist/cli/commands/logs.js.map +1 -0
  35. package/dist/cli/commands/resume.d.ts +3 -0
  36. package/dist/cli/commands/resume.d.ts.map +1 -0
  37. package/dist/cli/commands/resume.js +106 -0
  38. package/dist/cli/commands/resume.js.map +1 -0
  39. package/dist/cli/commands/start.d.ts +3 -0
  40. package/dist/cli/commands/start.d.ts.map +1 -0
  41. package/dist/cli/commands/start.js +103 -0
  42. package/dist/cli/commands/start.js.map +1 -0
  43. package/dist/cli/commands/status.d.ts +3 -0
  44. package/dist/cli/commands/status.d.ts.map +1 -0
  45. package/dist/cli/commands/status.js +64 -0
  46. package/dist/cli/commands/status.js.map +1 -0
  47. package/dist/cli/commands/team.d.ts +4 -0
  48. package/dist/cli/commands/team.d.ts.map +1 -0
  49. package/dist/cli/commands/team.js +33 -0
  50. package/dist/cli/commands/team.js.map +1 -0
  51. package/dist/cli/index.d.ts +4 -0
  52. package/dist/cli/index.d.ts.map +1 -0
  53. package/dist/cli/index.js +35 -0
  54. package/dist/cli/index.js.map +1 -0
  55. package/dist/cli/splash.d.ts +2 -0
  56. package/dist/cli/splash.d.ts.map +1 -0
  57. package/dist/cli/splash.js +20 -0
  58. package/dist/cli/splash.js.map +1 -0
  59. package/dist/engine/__tests__/ceo-brain.test.d.ts +2 -0
  60. package/dist/engine/__tests__/ceo-brain.test.d.ts.map +1 -0
  61. package/dist/engine/__tests__/ceo-brain.test.js +57 -0
  62. package/dist/engine/__tests__/ceo-brain.test.js.map +1 -0
  63. package/dist/engine/__tests__/dispatcher.test.d.ts +2 -0
  64. package/dist/engine/__tests__/dispatcher.test.d.ts.map +1 -0
  65. package/dist/engine/__tests__/dispatcher.test.js +60 -0
  66. package/dist/engine/__tests__/dispatcher.test.js.map +1 -0
  67. package/dist/engine/__tests__/orchestrator.test.d.ts +2 -0
  68. package/dist/engine/__tests__/orchestrator.test.d.ts.map +1 -0
  69. package/dist/engine/__tests__/orchestrator.test.js +83 -0
  70. package/dist/engine/__tests__/orchestrator.test.js.map +1 -0
  71. package/dist/engine/__tests__/pr-manager.test.d.ts +2 -0
  72. package/dist/engine/__tests__/pr-manager.test.d.ts.map +1 -0
  73. package/dist/engine/__tests__/pr-manager.test.js +44 -0
  74. package/dist/engine/__tests__/pr-manager.test.js.map +1 -0
  75. package/dist/engine/__tests__/prompt-builder.test.d.ts +2 -0
  76. package/dist/engine/__tests__/prompt-builder.test.d.ts.map +1 -0
  77. package/dist/engine/__tests__/prompt-builder.test.js +42 -0
  78. package/dist/engine/__tests__/prompt-builder.test.js.map +1 -0
  79. package/dist/engine/ceo-brain.d.ts +33 -0
  80. package/dist/engine/ceo-brain.d.ts.map +1 -0
  81. package/dist/engine/ceo-brain.js +94 -0
  82. package/dist/engine/ceo-brain.js.map +1 -0
  83. package/dist/engine/dispatcher.d.ts +40 -0
  84. package/dist/engine/dispatcher.d.ts.map +1 -0
  85. package/dist/engine/dispatcher.js +125 -0
  86. package/dist/engine/dispatcher.js.map +1 -0
  87. package/dist/engine/orchestrator.d.ts +49 -0
  88. package/dist/engine/orchestrator.d.ts.map +1 -0
  89. package/dist/engine/orchestrator.js +303 -0
  90. package/dist/engine/orchestrator.js.map +1 -0
  91. package/dist/engine/pr-manager.d.ts +14 -0
  92. package/dist/engine/pr-manager.d.ts.map +1 -0
  93. package/dist/engine/pr-manager.js +67 -0
  94. package/dist/engine/pr-manager.js.map +1 -0
  95. package/dist/engine/prompt-builder.d.ts +27 -0
  96. package/dist/engine/prompt-builder.d.ts.map +1 -0
  97. package/dist/engine/prompt-builder.js +73 -0
  98. package/dist/engine/prompt-builder.js.map +1 -0
  99. package/dist/server/__tests__/server.test.d.ts +2 -0
  100. package/dist/server/__tests__/server.test.d.ts.map +1 -0
  101. package/dist/server/__tests__/server.test.js +87 -0
  102. package/dist/server/__tests__/server.test.js.map +1 -0
  103. package/dist/server/index.d.ts +4 -0
  104. package/dist/server/index.d.ts.map +1 -0
  105. package/dist/server/index.js +72 -0
  106. package/dist/server/index.js.map +1 -0
  107. package/dist/server/routes/api.d.ts +4 -0
  108. package/dist/server/routes/api.d.ts.map +1 -0
  109. package/dist/server/routes/api.js +60 -0
  110. package/dist/server/routes/api.js.map +1 -0
  111. package/dist/skills/__tests__/loader.test.d.ts +2 -0
  112. package/dist/skills/__tests__/loader.test.d.ts.map +1 -0
  113. package/dist/skills/__tests__/loader.test.js +50 -0
  114. package/dist/skills/__tests__/loader.test.js.map +1 -0
  115. package/dist/skills/loader.d.ts +21 -0
  116. package/dist/skills/loader.d.ts.map +1 -0
  117. package/dist/skills/loader.js +190 -0
  118. package/dist/skills/loader.js.map +1 -0
  119. package/dist/state/__tests__/database.test.d.ts +2 -0
  120. package/dist/state/__tests__/database.test.d.ts.map +1 -0
  121. package/dist/state/__tests__/database.test.js +50 -0
  122. package/dist/state/__tests__/database.test.js.map +1 -0
  123. package/dist/state/database.d.ts +14 -0
  124. package/dist/state/database.d.ts.map +1 -0
  125. package/dist/state/database.js +164 -0
  126. package/dist/state/database.js.map +1 -0
  127. package/dist/state/repositories/__tests__/repositories.test.d.ts +2 -0
  128. package/dist/state/repositories/__tests__/repositories.test.d.ts.map +1 -0
  129. package/dist/state/repositories/__tests__/repositories.test.js +162 -0
  130. package/dist/state/repositories/__tests__/repositories.test.js.map +1 -0
  131. package/dist/state/repositories/agents.d.ts +14 -0
  132. package/dist/state/repositories/agents.d.ts.map +1 -0
  133. package/dist/state/repositories/agents.js +52 -0
  134. package/dist/state/repositories/agents.js.map +1 -0
  135. package/dist/state/repositories/events.d.ts +10 -0
  136. package/dist/state/repositories/events.d.ts.map +1 -0
  137. package/dist/state/repositories/events.js +27 -0
  138. package/dist/state/repositories/events.js.map +1 -0
  139. package/dist/state/repositories/messages.d.ts +15 -0
  140. package/dist/state/repositories/messages.d.ts.map +1 -0
  141. package/dist/state/repositories/messages.js +19 -0
  142. package/dist/state/repositories/messages.js.map +1 -0
  143. package/dist/state/repositories/pull-requests.d.ts +25 -0
  144. package/dist/state/repositories/pull-requests.d.ts.map +1 -0
  145. package/dist/state/repositories/pull-requests.js +40 -0
  146. package/dist/state/repositories/pull-requests.js.map +1 -0
  147. package/dist/state/repositories/sessions.d.ts +13 -0
  148. package/dist/state/repositories/sessions.d.ts.map +1 -0
  149. package/dist/state/repositories/sessions.js +41 -0
  150. package/dist/state/repositories/sessions.js.map +1 -0
  151. package/dist/state/repositories/sprints.d.ts +19 -0
  152. package/dist/state/repositories/sprints.d.ts.map +1 -0
  153. package/dist/state/repositories/sprints.js +26 -0
  154. package/dist/state/repositories/sprints.js.map +1 -0
  155. package/dist/state/repositories/tasks.d.ts +26 -0
  156. package/dist/state/repositories/tasks.d.ts.map +1 -0
  157. package/dist/state/repositories/tasks.js +43 -0
  158. package/dist/state/repositories/tasks.js.map +1 -0
  159. package/dist/types/__tests__/types.test.d.ts +2 -0
  160. package/dist/types/__tests__/types.test.d.ts.map +1 -0
  161. package/dist/types/__tests__/types.test.js +70 -0
  162. package/dist/types/__tests__/types.test.js.map +1 -0
  163. package/dist/types/index.d.ts +198 -0
  164. package/dist/types/index.d.ts.map +1 -0
  165. package/dist/types/index.js +3 -0
  166. package/dist/types/index.js.map +1 -0
  167. package/package.json +65 -0
  168. package/src/web/dist/assets/BufferResource-rnljfCCz.js +185 -0
  169. package/src/web/dist/assets/CanvasRenderer-BvTI2UTL.js +1 -0
  170. package/src/web/dist/assets/Filter-BzO9QkkB.js +1 -0
  171. package/src/web/dist/assets/RenderTargetSystem-CKlnKfTJ.js +172 -0
  172. package/src/web/dist/assets/WebGLRenderer-B5LAM4bk.js +156 -0
  173. package/src/web/dist/assets/WebGPURenderer-FkK3p3f4.js +41 -0
  174. package/src/web/dist/assets/browserAll-CDpBxY6s.js +14 -0
  175. package/src/web/dist/assets/index-B3XZpovA.js +298 -0
  176. package/src/web/dist/assets/index-BcX-h_hs.css +1 -0
  177. package/src/web/dist/assets/webworkerAll-B9AvsPZH.js +83 -0
  178. package/src/web/dist/index.html +18 -0
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Dispatcher = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const events_1 = require("events");
6
+ const TOOL_STATUS_MAP = {
7
+ Edit: 'coding',
8
+ Write: 'coding',
9
+ Bash: 'testing',
10
+ Read: 'reviewing',
11
+ Grep: 'reviewing',
12
+ Glob: 'reviewing',
13
+ Agent: 'dispatching',
14
+ };
15
+ class Dispatcher extends events_1.EventEmitter {
16
+ config;
17
+ running = new Map();
18
+ constructor(config) {
19
+ super();
20
+ this.config = config;
21
+ }
22
+ availableSlots() {
23
+ return this.config.maxConcurrent - this.running.size;
24
+ }
25
+ runningCount() {
26
+ return this.running.size;
27
+ }
28
+ buildCommand(input) {
29
+ const args = [
30
+ '--print',
31
+ '--output-format', 'stream-json',
32
+ '--system-prompt', input.systemPrompt,
33
+ '--permission-mode', 'bypassPermissions',
34
+ '--max-turns', String(input.maxTurns),
35
+ input.taskPrompt, // positional argument (last)
36
+ ];
37
+ return {
38
+ command: 'claude',
39
+ args,
40
+ cwd: input.cwd,
41
+ };
42
+ }
43
+ parseStreamEvent(line) {
44
+ try {
45
+ return JSON.parse(line);
46
+ }
47
+ catch {
48
+ return null;
49
+ }
50
+ }
51
+ toolToStatus(toolName) {
52
+ return TOOL_STATUS_MAP[toolName] || 'thinking';
53
+ }
54
+ async spawnAgent(agentId, taskId, systemPrompt, taskPrompt, cwd, maxTurns = 50) {
55
+ if (this.availableSlots() <= 0) {
56
+ throw new Error('No available slots');
57
+ }
58
+ const cmd = this.buildCommand({ systemPrompt, taskPrompt, cwd, maxTurns });
59
+ const proc = (0, child_process_1.spawn)(cmd.command, cmd.args, {
60
+ cwd: cmd.cwd,
61
+ stdio: ['ignore', 'pipe', 'pipe'],
62
+ shell: true,
63
+ });
64
+ const runningProc = {
65
+ agentId,
66
+ taskId,
67
+ process: proc,
68
+ startedAt: Date.now(),
69
+ };
70
+ this.running.set(taskId, runningProc);
71
+ let buffer = '';
72
+ proc.stdout?.on('data', (chunk) => {
73
+ buffer += chunk.toString();
74
+ const lines = buffer.split('\n');
75
+ buffer = lines.pop() || ''; // keep incomplete last line
76
+ for (const line of lines) {
77
+ if (!line.trim())
78
+ continue;
79
+ const event = this.parseStreamEvent(line);
80
+ if (!event)
81
+ continue;
82
+ this.emit('stream-event', { agentId, taskId, event });
83
+ if (event.type === 'tool_use' && event.tool) {
84
+ const status = this.toolToStatus(event.tool);
85
+ this.emit('agent-status', { agentId, status });
86
+ }
87
+ if (event.type === 'result') {
88
+ this.emit('task-complete', {
89
+ agentId,
90
+ taskId,
91
+ cost: event.cost_usd,
92
+ duration: event.duration_ms,
93
+ turns: event.turns,
94
+ });
95
+ }
96
+ }
97
+ });
98
+ proc.stderr?.on('data', (chunk) => {
99
+ this.emit('agent-error', { agentId, taskId, error: chunk.toString() });
100
+ });
101
+ proc.on('exit', (code) => {
102
+ this.running.delete(taskId);
103
+ if (code !== 0) {
104
+ this.emit('agent-failed', { agentId, taskId, exitCode: code });
105
+ }
106
+ this.emit('slot-freed', { availableSlots: this.availableSlots() });
107
+ });
108
+ }
109
+ killAgent(taskId) {
110
+ const proc = this.running.get(taskId);
111
+ if (!proc)
112
+ return false;
113
+ proc.process.kill('SIGTERM');
114
+ this.running.delete(taskId);
115
+ return true;
116
+ }
117
+ killAll() {
118
+ for (const [taskId, proc] of this.running) {
119
+ proc.process.kill('SIGTERM');
120
+ }
121
+ this.running.clear();
122
+ }
123
+ }
124
+ exports.Dispatcher = Dispatcher;
125
+ //# sourceMappingURL=dispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/engine/dispatcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { EventEmitter } from 'events';
2
+ import { Database } from '../state/database';
3
+ import type { Session, AutonomyMode } from '../types';
4
+ export interface OrchestratorConfig {
5
+ apiKey: string;
6
+ model: string;
7
+ maxConcurrentAgents: number;
8
+ autonomyMode: AutonomyMode;
9
+ companyName: string;
10
+ mission: string;
11
+ }
12
+ export declare class Orchestrator extends EventEmitter {
13
+ private db;
14
+ private config;
15
+ private sessions;
16
+ private agents;
17
+ private tasks;
18
+ private sprints;
19
+ private events;
20
+ private messages;
21
+ private pullRequests;
22
+ private ceoBrain;
23
+ private dispatcher;
24
+ private prManager;
25
+ private promptBuilder;
26
+ private skillLoader;
27
+ private _sessionId;
28
+ private tickTimer;
29
+ private running;
30
+ get sessionId(): string | null;
31
+ constructor(db: Database, config: OrchestratorConfig);
32
+ private setupDispatcherListeners;
33
+ start(goal?: string): Session;
34
+ resume(sessionId: string): boolean;
35
+ stop(): void;
36
+ submitGoal(goal: string): Promise<void>;
37
+ private startTickLoop;
38
+ private tick;
39
+ private handleTaskComplete;
40
+ private checkSprintComplete;
41
+ getAgents(): any[];
42
+ getAvailableTasks(limit: number): any[];
43
+ getTasks(): any[];
44
+ getPendingPRs(): any[];
45
+ approvePR(prId: string): Promise<void>;
46
+ rejectPR(prId: string, feedback: string): void;
47
+ private emitEvent;
48
+ }
49
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/engine/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAe7C,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,MAAM,CAAqB;IAGnC,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,YAAY,CAAmB;IAGvC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IAGjC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,OAAO,CAAS;IAExB,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;gBAEW,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,kBAAkB;IAwBpD,OAAO,CAAC,wBAAwB;IAuBhC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAoB7B,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAiBlC,IAAI,IAAI,IAAI;IASN,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6D7C,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,IAAI;IAqDZ,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,mBAAmB;IAiB3B,SAAS,IAAI,GAAG,EAAE;IAKlB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE;IAKvC,QAAQ,IAAI,GAAG,EAAE;IAKjB,aAAa,IAAI,GAAG,EAAE;IAKhB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAU9C,OAAO,CAAC,SAAS;CAMlB"}
@@ -0,0 +1,303 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Orchestrator = void 0;
4
+ const events_1 = require("events");
5
+ const sessions_1 = require("../state/repositories/sessions");
6
+ const agents_1 = require("../state/repositories/agents");
7
+ const tasks_1 = require("../state/repositories/tasks");
8
+ const sprints_1 = require("../state/repositories/sprints");
9
+ const events_2 = require("../state/repositories/events");
10
+ const messages_1 = require("../state/repositories/messages");
11
+ const pull_requests_1 = require("../state/repositories/pull-requests");
12
+ const ceo_brain_1 = require("./ceo-brain");
13
+ const dispatcher_1 = require("./dispatcher");
14
+ const pr_manager_1 = require("./pr-manager");
15
+ const prompt_builder_1 = require("./prompt-builder");
16
+ const loader_1 = require("../skills/loader");
17
+ const personas_1 = require("../agents/personas");
18
+ const skills_map_1 = require("../agents/skills-map");
19
+ class Orchestrator extends events_1.EventEmitter {
20
+ db;
21
+ config;
22
+ // Repositories
23
+ sessions;
24
+ agents;
25
+ tasks;
26
+ sprints;
27
+ events;
28
+ messages;
29
+ pullRequests;
30
+ // Engine components
31
+ ceoBrain;
32
+ dispatcher;
33
+ prManager;
34
+ promptBuilder;
35
+ skillLoader;
36
+ // State
37
+ _sessionId = null;
38
+ tickTimer = null;
39
+ running = false;
40
+ get sessionId() {
41
+ return this._sessionId;
42
+ }
43
+ constructor(db, config) {
44
+ super();
45
+ this.db = db;
46
+ this.config = config;
47
+ // Init repos
48
+ this.sessions = new sessions_1.SessionsRepo(db);
49
+ this.agents = new agents_1.AgentsRepo(db);
50
+ this.tasks = new tasks_1.TasksRepo(db);
51
+ this.sprints = new sprints_1.SprintsRepo(db);
52
+ this.events = new events_2.EventsRepo(db);
53
+ this.messages = new messages_1.MessagesRepo(db);
54
+ this.pullRequests = new pull_requests_1.PullRequestsRepo(db);
55
+ // Init engine
56
+ this.ceoBrain = new ceo_brain_1.CEOBrain({ apiKey: config.apiKey, model: config.model });
57
+ this.dispatcher = new dispatcher_1.Dispatcher({ maxConcurrent: config.maxConcurrentAgents });
58
+ this.prManager = new pr_manager_1.PRManager();
59
+ this.promptBuilder = new prompt_builder_1.PromptBuilder();
60
+ this.skillLoader = new loader_1.SkillLoader();
61
+ this.setupDispatcherListeners();
62
+ }
63
+ setupDispatcherListeners() {
64
+ this.dispatcher.on('agent-status', ({ agentId, status }) => {
65
+ this.agents.updateStatus(agentId, status);
66
+ this.emitEvent('agent:status', agentId, { status });
67
+ });
68
+ this.dispatcher.on('task-complete', ({ agentId, taskId, cost, duration, turns }) => {
69
+ this.handleTaskComplete(taskId, agentId);
70
+ this.emitEvent('task:completed', agentId, { taskId, cost, duration, turns });
71
+ });
72
+ this.dispatcher.on('agent-failed', ({ agentId, taskId, exitCode }) => {
73
+ this.tasks.updateStatus(taskId, 'failed');
74
+ this.agents.clearTask(agentId);
75
+ this.emitEvent('task:failed', agentId, { taskId, exitCode });
76
+ });
77
+ this.dispatcher.on('slot-freed', () => {
78
+ // Trigger next tick to fill the slot
79
+ if (this.running)
80
+ this.tick();
81
+ });
82
+ }
83
+ start(goal) {
84
+ const session = this.sessions.create(goal || 'New session');
85
+ this._sessionId = session.id;
86
+ // Initialize all 11 agents
87
+ this.agents.initializeForSession(session.id);
88
+ this.running = true;
89
+ this.emitEvent('system', null, { message: `Session started: ${session.id}` });
90
+ if (goal) {
91
+ // Async goal decomposition — don't await, let it run
92
+ this.submitGoal(goal).catch(err => {
93
+ this.emitEvent('system', null, { message: `Goal decomposition failed: ${err.message}` });
94
+ });
95
+ }
96
+ return session;
97
+ }
98
+ resume(sessionId) {
99
+ const session = this.sessions.findById(sessionId);
100
+ if (!session)
101
+ return false;
102
+ this._sessionId = session.id;
103
+ this.running = true;
104
+ // Verify agents exist
105
+ const agents = this.agents.findBySession(session.id);
106
+ if (agents.length === 0) {
107
+ this.agents.initializeForSession(session.id);
108
+ }
109
+ this.emitEvent('system', null, { message: `Session resumed: ${session.id}` });
110
+ return true;
111
+ }
112
+ stop() {
113
+ this.running = false;
114
+ if (this.tickTimer) {
115
+ clearInterval(this.tickTimer);
116
+ this.tickTimer = null;
117
+ }
118
+ this.dispatcher.killAll();
119
+ }
120
+ async submitGoal(goal) {
121
+ if (!this._sessionId)
122
+ throw new Error('No active session');
123
+ // Update agent status
124
+ this.agents.updateStatus('sage', 'planning');
125
+ this.emitEvent('agent:status', 'sage', { status: 'planning' });
126
+ // Build roster for CEO
127
+ const roster = personas_1.PERSONAS.map(p => ({
128
+ id: p.id,
129
+ name: p.name,
130
+ role: p.role,
131
+ skills: skills_map_1.AGENT_SKILLS[p.id] || [],
132
+ }));
133
+ // Decompose goal
134
+ const result = await this.ceoBrain.decompose(goal, roster);
135
+ // Create sprint
136
+ const sprint = this.sprints.create({
137
+ name: result.sprint.name,
138
+ goal: result.sprint.goal,
139
+ sessionId: this._sessionId,
140
+ });
141
+ // Create tasks with dependency mapping
142
+ const taskIdMap = {};
143
+ for (let i = 0; i < result.tasks.length; i++) {
144
+ const t = result.tasks[i];
145
+ // Resolve depends_on from index references to real IDs
146
+ const resolvedDeps = t.depends_on
147
+ .map(dep => taskIdMap[dep])
148
+ .filter(Boolean);
149
+ const task = this.tasks.create({
150
+ title: t.title,
151
+ description: t.description,
152
+ priority: t.priority,
153
+ requiredSkills: t.required_skills,
154
+ dependsOn: resolvedDeps,
155
+ sprintId: sprint.id,
156
+ sessionId: this._sessionId,
157
+ assigneeId: t.assignee,
158
+ });
159
+ taskIdMap[`task-${i}`] = task.id;
160
+ }
161
+ // CEO done planning
162
+ this.agents.updateStatus('sage', 'idle');
163
+ this.emitEvent('system', null, {
164
+ message: `Sprint "${result.sprint.name}" created with ${result.tasks.length} tasks`,
165
+ });
166
+ // Start tick loop if not running
167
+ if (!this.tickTimer) {
168
+ this.startTickLoop();
169
+ }
170
+ }
171
+ startTickLoop() {
172
+ this.tickTimer = setInterval(() => {
173
+ if (this.running)
174
+ this.tick();
175
+ }, 5000);
176
+ }
177
+ tick() {
178
+ if (!this._sessionId)
179
+ return;
180
+ const available = this.tasks.findAvailable(this._sessionId, this.dispatcher.availableSlots());
181
+ if (available.length === 0)
182
+ return;
183
+ for (const task of available) {
184
+ const agentId = task.assignee_id;
185
+ if (!agentId)
186
+ continue;
187
+ const agent = this.agents.findById(agentId);
188
+ if (!agent)
189
+ continue;
190
+ const persona = personas_1.PERSONAS.find(p => p.id === agentId);
191
+ if (!persona)
192
+ continue;
193
+ // Load skills for this task
194
+ const requiredSkills = JSON.parse(task.required_skills || '[]');
195
+ const loadedSkills = this.skillLoader.loadSkillsForTask(requiredSkills, 25000);
196
+ const skillContents = loadedSkills.map(s => `## ${s.id} (${s.source})\n${s.content}`);
197
+ // Build system prompt
198
+ const systemPrompt = this.promptBuilder.build({
199
+ agent: { id: persona.id, name: persona.name, role: persona.role, description: persona.description },
200
+ company: { name: this.config.companyName, mission: this.config.mission },
201
+ skills: skillContents,
202
+ task: { title: task.title, description: task.description || '', requiredSkills },
203
+ });
204
+ // Determine working directory
205
+ const cwd = this.config.autonomyMode === 'sandbox'
206
+ ? this.prManager.worktreePath(agentId, task.id)
207
+ : process.cwd();
208
+ // Mark task as in_progress
209
+ this.tasks.assign(task.id, agentId);
210
+ this.agents.assignTask(agentId, task.id);
211
+ // Spawn agent
212
+ this.dispatcher.spawnAgent(agentId, task.id, systemPrompt, `Execute this task: ${task.title}\n\n${task.description || ''}`, cwd).catch(err => {
213
+ this.emitEvent('system', agentId, { message: `Failed to spawn: ${err.message}` });
214
+ });
215
+ this.emitEvent('task:assigned', agentId, { taskId: task.id });
216
+ }
217
+ }
218
+ handleTaskComplete(taskId, agentId) {
219
+ this.tasks.updateStatus(taskId, 'completed');
220
+ this.agents.clearTask(agentId);
221
+ if (this._sessionId && this.config.autonomyMode === 'sandbox') {
222
+ // Create PR record
223
+ const task = this.tasks.findById(taskId);
224
+ if (task) {
225
+ const slug = this.prManager.slugify(task.title);
226
+ const branch = this.prManager.branchName(agentId, slug);
227
+ this.pullRequests.create({
228
+ taskId,
229
+ agentId,
230
+ branch,
231
+ sessionId: this._sessionId,
232
+ });
233
+ this.emitEvent('pr:created', agentId, { taskId, branch });
234
+ }
235
+ }
236
+ // Check if sprint is complete
237
+ this.checkSprintComplete();
238
+ }
239
+ checkSprintComplete() {
240
+ if (!this._sessionId)
241
+ return;
242
+ const tasks = this.tasks.findBySession(this._sessionId);
243
+ const allDone = tasks.every((t) => t.status === 'completed' || t.status === 'failed');
244
+ if (allDone && tasks.length > 0) {
245
+ const sprint = this.sprints.findActive(this._sessionId);
246
+ if (sprint) {
247
+ this.sprints.complete(sprint.id);
248
+ this.emitEvent('celebration:sprint-complete', null, {
249
+ sprintId: sprint.id,
250
+ tasksCompleted: tasks.filter((t) => t.status === 'completed').length,
251
+ });
252
+ }
253
+ }
254
+ }
255
+ // Public API
256
+ getAgents() {
257
+ if (!this._sessionId)
258
+ return [];
259
+ return this.agents.findBySession(this._sessionId);
260
+ }
261
+ getAvailableTasks(limit) {
262
+ if (!this._sessionId)
263
+ return [];
264
+ return this.tasks.findAvailable(this._sessionId, limit);
265
+ }
266
+ getTasks() {
267
+ if (!this._sessionId)
268
+ return [];
269
+ return this.tasks.findBySession(this._sessionId);
270
+ }
271
+ getPendingPRs() {
272
+ if (!this._sessionId)
273
+ return [];
274
+ return this.pullRequests.findPending(this._sessionId);
275
+ }
276
+ async approvePR(prId) {
277
+ this.pullRequests.updateStatus(prId, 'user_approved');
278
+ const pr = this.pullRequests.findById(prId);
279
+ if (pr) {
280
+ // CEO merges
281
+ this.pullRequests.updateStatus(prId, 'merged', { mergedBy: 'sage' });
282
+ this.emitEvent('pr:merged', 'sage', { prId, branch: pr.branch });
283
+ this.emitEvent('celebration:pr-merged', pr.agent_id, { prId });
284
+ }
285
+ }
286
+ rejectPR(prId, feedback) {
287
+ this.pullRequests.updateStatus(prId, 'user_rejected', { feedback });
288
+ const pr = this.pullRequests.findById(prId);
289
+ if (pr && this._sessionId) {
290
+ // Re-queue task with feedback
291
+ this.tasks.updateStatus(pr.task_id, 'pending');
292
+ this.emitEvent('pr:rejected', pr.agent_id, { prId, feedback });
293
+ }
294
+ }
295
+ emitEvent(type, agentId, data) {
296
+ if (this._sessionId) {
297
+ this.events.log(type, agentId, data, this._sessionId);
298
+ }
299
+ this.emit('event', { type, agentId, data, timestamp: new Date().toISOString() });
300
+ }
301
+ }
302
+ exports.Orchestrator = Orchestrator;
303
+ //# sourceMappingURL=orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/engine/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare class PRManager {
2
+ branchName(agentId: string, taskSlug: string): string;
3
+ slugify(title: string): string;
4
+ worktreePath(agentId: string, taskId: string): string;
5
+ buildWorktreeAddCommand(agentId: string, taskId: string, taskSlug: string): string;
6
+ buildMergeCommands(branch: string, commitMessage: string): string[];
7
+ buildCleanupCommands(worktreePath: string, branch: string): string[];
8
+ buildPushCommand(branch: string): string;
9
+ createWorktree(agentId: string, taskId: string, taskSlug: string, cwd: string): string;
10
+ merge(branch: string, commitMessage: string, cwd: string): void;
11
+ cleanup(worktreePath: string, branch: string, cwd: string): void;
12
+ push(branch: string, cwd: string): void;
13
+ }
14
+ //# sourceMappingURL=pr-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-manager.d.ts","sourceRoot":"","sources":["../../src/engine/pr-manager.ts"],"names":[],"mappings":"AAEA,qBAAa,SAAS;IACpB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIrD,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAS9B,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAIrD,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAMlF,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE;IAOnE,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAOpE,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIxC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAMtF,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAO/D,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAWhE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;CAGxC"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PRManager = void 0;
4
+ const child_process_1 = require("child_process");
5
+ class PRManager {
6
+ branchName(agentId, taskSlug) {
7
+ return `sage/${agentId}/${taskSlug}`;
8
+ }
9
+ slugify(title) {
10
+ return title
11
+ .toLowerCase()
12
+ .replace(/[^a-z0-9\s-]/g, '')
13
+ .replace(/\s+/g, '-')
14
+ .replace(/-+/g, '-')
15
+ .replace(/^-|-$/g, '');
16
+ }
17
+ worktreePath(agentId, taskId) {
18
+ return `.sage-team/worktrees/${agentId}-${taskId}`;
19
+ }
20
+ buildWorktreeAddCommand(agentId, taskId, taskSlug) {
21
+ const wtPath = this.worktreePath(agentId, taskId);
22
+ const branch = this.branchName(agentId, taskSlug);
23
+ return `git worktree add ${wtPath} -b ${branch}`;
24
+ }
25
+ buildMergeCommands(branch, commitMessage) {
26
+ return [
27
+ `git merge --squash ${branch}`,
28
+ `git commit -m "${commitMessage}"`,
29
+ ];
30
+ }
31
+ buildCleanupCommands(worktreePath, branch) {
32
+ return [
33
+ `git worktree remove ${worktreePath} --force`,
34
+ `git branch -d ${branch}`,
35
+ ];
36
+ }
37
+ buildPushCommand(branch) {
38
+ return `git push origin ${branch}`;
39
+ }
40
+ createWorktree(agentId, taskId, taskSlug, cwd) {
41
+ const cmd = this.buildWorktreeAddCommand(agentId, taskId, taskSlug);
42
+ (0, child_process_1.execSync)(cmd, { cwd, stdio: 'pipe' });
43
+ return this.worktreePath(agentId, taskId);
44
+ }
45
+ merge(branch, commitMessage, cwd) {
46
+ const cmds = this.buildMergeCommands(branch, commitMessage);
47
+ for (const cmd of cmds) {
48
+ (0, child_process_1.execSync)(cmd, { cwd, stdio: 'pipe' });
49
+ }
50
+ }
51
+ cleanup(worktreePath, branch, cwd) {
52
+ const cmds = this.buildCleanupCommands(worktreePath, branch);
53
+ for (const cmd of cmds) {
54
+ try {
55
+ (0, child_process_1.execSync)(cmd, { cwd, stdio: 'pipe' });
56
+ }
57
+ catch {
58
+ // Cleanup errors are non-fatal
59
+ }
60
+ }
61
+ }
62
+ push(branch, cwd) {
63
+ (0, child_process_1.execSync)(this.buildPushCommand(branch), { cwd, stdio: 'pipe' });
64
+ }
65
+ }
66
+ exports.PRManager = PRManager;
67
+ //# sourceMappingURL=pr-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-manager.js","sourceRoot":"","sources":["../../src/engine/pr-manager.ts"],"names":[],"mappings":";;;AAAA,iDAAyC;AAEzC,MAAa,SAAS;IACpB,UAAU,CAAC,OAAe,EAAE,QAAgB;QAC1C,OAAO,QAAQ,OAAO,IAAI,QAAQ,EAAE,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,OAAO,KAAK;aACT,WAAW,EAAE;aACb,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;aAC5B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;aACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,YAAY,CAAC,OAAe,EAAE,MAAc;QAC1C,OAAO,wBAAwB,OAAO,IAAI,MAAM,EAAE,CAAC;IACrD,CAAC;IAED,uBAAuB,CAAC,OAAe,EAAE,MAAc,EAAE,QAAgB;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAClD,OAAO,oBAAoB,MAAM,OAAO,MAAM,EAAE,CAAC;IACnD,CAAC;IAED,kBAAkB,CAAC,MAAc,EAAE,aAAqB;QACtD,OAAO;YACL,sBAAsB,MAAM,EAAE;YAC9B,kBAAkB,aAAa,GAAG;SACnC,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,YAAoB,EAAE,MAAc;QACvD,OAAO;YACL,uBAAuB,YAAY,UAAU;YAC7C,iBAAiB,MAAM,EAAE;SAC1B,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,MAAc;QAC7B,OAAO,mBAAmB,MAAM,EAAE,CAAC;IACrC,CAAC;IAED,cAAc,CAAC,OAAe,EAAE,MAAc,EAAE,QAAgB,EAAE,GAAW;QAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpE,IAAA,wBAAQ,EAAC,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,MAAc,EAAE,aAAqB,EAAE,GAAW;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC5D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAA,wBAAQ,EAAC,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,YAAoB,EAAE,MAAc,EAAE,GAAW;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC7D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,IAAA,wBAAQ,EAAC,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACxC,CAAC;YAAC,MAAM,CAAC;gBACP,+BAA+B;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAc,EAAE,GAAW;QAC9B,IAAA,wBAAQ,EAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAClE,CAAC;CACF;AArED,8BAqEC"}
@@ -0,0 +1,27 @@
1
+ export interface PromptBuildInput {
2
+ agent: {
3
+ id: string;
4
+ name: string;
5
+ role: string;
6
+ description: string;
7
+ };
8
+ company: {
9
+ name: string;
10
+ mission: string;
11
+ };
12
+ skills: string[];
13
+ task: {
14
+ title: string;
15
+ description: string;
16
+ requiredSkills: string[];
17
+ };
18
+ dependenciesSummary?: string;
19
+ }
20
+ export declare class PromptBuilder {
21
+ build(input: PromptBuildInput): string;
22
+ private buildIdentity;
23
+ private buildSkills;
24
+ private buildTask;
25
+ private buildRules;
26
+ }
27
+ //# sourceMappingURL=prompt-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/engine/prompt-builder.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,aAAa;IACxB,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM;IAetC,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,WAAW;IA2BnB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,UAAU;CASnB"}