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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Sage Team Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,180 @@
1
+ # Sage Team v3.0
2
+
3
+ > AI-Powered Autonomous Software Company — 11 agents execute real code via Claude Code, with a PixiJS isometric office visualization.
4
+
5
+ Sage Team runs a complete AI software company. A **CEO agent** decomposes your goal into a sprint, then **11 specialized agents** execute tasks in parallel using **Claude Code subprocesses** — writing real code, running tests, and creating PRs. Watch it all happen in a **PixiJS isometric office** in your browser.
6
+
7
+ ## What Makes This Different
8
+
9
+ - **Real Execution** — Agents run Claude Code subprocesses that write, test, and commit actual code
10
+ - **Hybrid Engine** — CEO plans via Claude API (fast/cheap), agents execute via Claude Code (powerful)
11
+ - **SQLite Persistence** — Full state survives restarts. Resume any session.
12
+ - **Skill Injection** — Agent prompts include real skill protocols from Superpowers and Antigravity
13
+ - **Isometric Office** — PixiJS browser visualization with 10 rooms, animated agents, particle effects
14
+ - **PR Workflow** — Agents create branches, you review and approve/reject PRs in the UI
15
+
16
+ ## Quick Start
17
+
18
+ ```bash
19
+ # Install globally
20
+ npm install -g sage-team
21
+
22
+ # Set your API key
23
+ export ANTHROPIC_API_KEY=your-key-here
24
+
25
+ # Initialize project
26
+ sage-team init
27
+
28
+ # Launch the office
29
+ sage-team start
30
+
31
+ # Or start with a goal
32
+ sage-team start --goal "Build a REST API for a todo app with authentication"
33
+ ```
34
+
35
+ ## The Team
36
+
37
+ | Agent | Role | Room | Focus |
38
+ |-------|------|------|-------|
39
+ | 👑 **Sage** | CEO | CEO Office | Goal decomposition, sprint planning, delegation |
40
+ | 🔮 **Nova** | CTO | CTO Office | Architecture review, technical decisions |
41
+ | 🏛️ **Aria** | Architect | Arch Lab | System design, API patterns |
42
+ | ⚡ **Dex** | Senior Dev | Dev Bullpen | Core implementation, TDD |
43
+ | 🌊 **Flux** | Full Stack Dev | Dev Bullpen | Frontend + backend, end-to-end features |
44
+ | 🔍 **Quinn** | QA Lead | QA Lab | Testing, quality gates |
45
+ | ⚙️ **Gage** | DevOps | QA Lab | CI/CD, deployment, infrastructure |
46
+ | 📋 **Morgan** | Product Manager | Design Studio | Requirements, prioritization |
47
+ | 🎨 **Uma** | UX Designer | Design Studio | UI/UX design, accessibility |
48
+ | 🌀 **River** | Scrum Master | Lounge | Process, blocker removal |
49
+ | 📊 **Atlas** | Data Engineer | Data Lab | Database, data pipelines |
50
+
51
+ ## Commands
52
+
53
+ ```bash
54
+ sage-team init # Initialize .sage-team/ directory
55
+ sage-team start # Launch office + browser UI
56
+ sage-team start --goal "..." # Start with an initial goal
57
+ sage-team start --no-browser # Skip opening browser
58
+ sage-team start --port 8080 # Custom port (default: 3000)
59
+ sage-team resume # Resume latest session
60
+ sage-team resume --session <id> # Resume specific session
61
+ sage-team config --show # Show configuration
62
+ sage-team config --api-key <key> # Set API key
63
+ sage-team config --model <model> # Set Claude model
64
+ sage-team team # Show team roster
65
+ sage-team status # Show session status
66
+ sage-team doctor # Check system health
67
+ sage-team logs # Tail event log
68
+ sage-team logs --agent dex -n 50 # Filter by agent
69
+ ```
70
+
71
+ ## How It Works
72
+
73
+ ```
74
+ You submit a goal
75
+
76
+
77
+ ┌─────────────┐ Claude API
78
+ │ CEO (Sage) │────────────────► Decompose into sprint + tasks
79
+ └─────────────┘ with dependencies & assignments
80
+
81
+
82
+ ┌─────────────┐ Claude Code
83
+ │ Dispatcher │────────────────► Spawn subprocesses (max N concurrent)
84
+ └─────────────┘ Each agent gets: identity + skills + task
85
+
86
+
87
+ ┌─────────────┐
88
+ │ Agents │────────────────► Write code, run tests, commit
89
+ │ (parallel) │ Stream status back via JSONL
90
+ └─────────────┘
91
+
92
+
93
+ ┌─────────────┐
94
+ │ PR Manager │────────────────► Create branch, squash merge on approval
95
+ └─────────────┘
96
+
97
+
98
+ ┌─────────────┐ WebSocket
99
+ │ Browser │◄───────────────── Real-time events, agent positions,
100
+ │ (PixiJS) │ particle effects, wow moments
101
+ └─────────────┘
102
+ ```
103
+
104
+ ### Execution Modes
105
+
106
+ - **Sandbox** (default) — Each agent works in a git worktree. PRs require your approval.
107
+ - **Direct** — Agents commit directly to the working branch. Fast but risky.
108
+ - **Supervised** — Like sandbox, but agents pause and ask before critical operations.
109
+
110
+ ## Architecture
111
+
112
+ ```
113
+ sage-team/
114
+ ├── src/
115
+ │ ├── types/ # TypeScript interfaces (Agent, Task, Sprint, etc.)
116
+ │ ├── state/
117
+ │ │ ├── database.ts # SQLite with WAL mode, 9 tables
118
+ │ │ └── repositories/ # 7 repos (sessions, agents, tasks, sprints, etc.)
119
+ │ ├── agents/
120
+ │ │ ├── personas.ts # 11 agent definitions with skills & colors
121
+ │ │ └── skills-map.ts # Agent → skill ID mapping
122
+ │ ├── skills/
123
+ │ │ └── loader.ts # Loads Superpowers/Antigravity skill protocols
124
+ │ ├── engine/
125
+ │ │ ├── ceo-brain.ts # Goal decomposition via Claude API
126
+ │ │ ├── dispatcher.ts # Claude Code subprocess management
127
+ │ │ ├── orchestrator.ts # Central coordinator
128
+ │ │ ├── pr-manager.ts # Git worktree + branch + merge
129
+ │ │ └── prompt-builder.ts # Identity + skills + task prompt assembly
130
+ │ ├── cli/
131
+ │ │ ├── index.ts # Commander program with 8 commands
132
+ │ │ └── commands/ # init, start, resume, config, team, status, doctor, logs
133
+ │ ├── server/
134
+ │ │ ├── index.ts # Express + WebSocket server
135
+ │ │ └── routes/api.ts # REST API endpoints
136
+ │ └── web/ # Frontend (separate Vite project)
137
+ │ └── src/
138
+ │ ├── canvas/ # PixiJS isometric office, agents, effects
139
+ │ ├── hooks/ # useWebSocket, useOffice, usePixiOffice
140
+ │ ├── panels/ # AgentBar, TaskBoard, ChatPanel, PRReview, GoalInput
141
+ │ └── store.ts # Zustand state management
142
+ ├── vitest.config.ts # Test configuration
143
+ └── package.json
144
+ ```
145
+
146
+ ## Configuration
147
+
148
+ ```bash
149
+ # API key (required)
150
+ export ANTHROPIC_API_KEY=your-key-here
151
+
152
+ # Or save to config
153
+ sage-team config --api-key your-key-here
154
+
155
+ # Customize
156
+ sage-team config --company-name "My AI Company"
157
+ sage-team config --model claude-sonnet-4-20250514
158
+ sage-team config --max-agents 5
159
+ sage-team config --autonomy sandbox
160
+ ```
161
+
162
+ ## Skill Sources
163
+
164
+ Agent prompts are injected with real skill protocol content from:
165
+
166
+ - **[Superpowers](https://github.com/obra/superpowers)** — TDD, brainstorming, debugging, code review, verification
167
+ - **[Antigravity](https://github.com/Petriccone/antigravity-awesome-skills)** — TypeScript, React, security, DevOps, databases, and more
168
+
169
+ Skills are loaded at runtime from your local installations and respect a 30k token budget per agent prompt.
170
+
171
+ ## Prerequisites
172
+
173
+ - Node.js >= 18
174
+ - Git
175
+ - [Claude Code](https://claude.ai/claude-code) CLI installed (`npm i -g @anthropic-ai/claude-code`)
176
+ - Anthropic API key
177
+
178
+ ## License
179
+
180
+ MIT
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=personas.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personas.test.d.ts","sourceRoot":"","sources":["../../../src/agents/__tests__/personas.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const personas_1 = require("../personas");
5
+ const skills_map_1 = require("../skills-map");
6
+ (0, vitest_1.describe)('Agent Personas', () => {
7
+ (0, vitest_1.it)('should define exactly 11 agents', () => {
8
+ (0, vitest_1.expect)(personas_1.PERSONAS.length).toBe(11);
9
+ });
10
+ (0, vitest_1.it)('should have unique IDs', () => {
11
+ const ids = personas_1.PERSONAS.map(p => p.id);
12
+ (0, vitest_1.expect)(new Set(ids).size).toBe(11);
13
+ });
14
+ (0, vitest_1.it)('should have unique rooms', () => {
15
+ const rooms = personas_1.PERSONAS.map(p => p.defaultRoom);
16
+ // Dev bullpen shares room, so unique count < 11
17
+ (0, vitest_1.expect)(rooms.length).toBe(11);
18
+ });
19
+ (0, vitest_1.it)('should have valid roles', () => {
20
+ const validRoles = [
21
+ 'ceo', 'cto', 'architect', 'dev-senior', 'dev-fullstack',
22
+ 'qa-lead', 'devops', 'product-manager', 'ux-designer',
23
+ 'scrum-master', 'data-engineer'
24
+ ];
25
+ personas_1.PERSONAS.forEach(p => {
26
+ (0, vitest_1.expect)(validRoles).toContain(p.role);
27
+ });
28
+ });
29
+ });
30
+ (0, vitest_1.describe)('Agent Skills Map', () => {
31
+ (0, vitest_1.it)('should have skills for all 11 agents', () => {
32
+ (0, vitest_1.expect)(Object.keys(skills_map_1.AGENT_SKILLS).length).toBe(11);
33
+ });
34
+ (0, vitest_1.it)('should use sp- or ag- prefix for all skills', () => {
35
+ Object.values(skills_map_1.AGENT_SKILLS).flat().forEach(skillId => {
36
+ (0, vitest_1.expect)(skillId.startsWith('sp-') || skillId.startsWith('ag-')).toBe(true);
37
+ });
38
+ });
39
+ (0, vitest_1.it)('should assign TDD to developers', () => {
40
+ (0, vitest_1.expect)(skills_map_1.AGENT_SKILLS['dex']).toContain('sp-tdd-cycle');
41
+ (0, vitest_1.expect)(skills_map_1.AGENT_SKILLS['flux']).toContain('sp-tdd-cycle');
42
+ });
43
+ (0, vitest_1.it)('should assign brainstorming to CEO', () => {
44
+ (0, vitest_1.expect)(skills_map_1.AGENT_SKILLS['sage']).toContain('sp-brainstorming');
45
+ });
46
+ });
47
+ //# sourceMappingURL=personas.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personas.test.js","sourceRoot":"","sources":["../../../src/agents/__tests__/personas.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,0CAAuC;AACvC,8CAA6C;AAE7C,IAAA,iBAAQ,EAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAA,WAAE,EAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,IAAA,eAAM,EAAC,mBAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,GAAG,GAAG,mBAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpC,IAAA,eAAM,EAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,KAAK,GAAG,mBAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAC/C,gDAAgD;QAChD,IAAA,eAAM,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,UAAU,GAAG;YACjB,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe;YACxD,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,aAAa;YACrD,cAAc,EAAE,eAAe;SAChC,CAAC;QACF,mBAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACnB,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAA,WAAE,EAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,IAAA,eAAM,EAAC,MAAM,CAAC,IAAI,CAAC,yBAAY,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,MAAM,CAAC,yBAAY,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACnD,IAAA,eAAM,EAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,IAAA,eAAM,EAAC,yBAAY,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACtD,IAAA,eAAM,EAAC,yBAAY,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,IAAA,eAAM,EAAC,yBAAY,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AgentPersona } from '../types';
2
+ export declare const PERSONAS: AgentPersona[];
3
+ //# sourceMappingURL=personas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personas.d.ts","sourceRoot":"","sources":["../../src/agents/personas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,QAAQ,EAAE,YAAY,EA0HlC,CAAC"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PERSONAS = void 0;
4
+ exports.PERSONAS = [
5
+ {
6
+ id: 'sage',
7
+ name: 'Sage',
8
+ role: 'ceo',
9
+ emoji: '👑',
10
+ color: '#FFD700',
11
+ description: 'Visionary CEO who decomposes goals into sprints, delegates tasks, and merges PRs.',
12
+ skills: ['sp-brainstorming', 'sp-writing-plans', 'sp-dispatching-parallel', 'sp-verification', 'ag-product-strategy'],
13
+ defaultRoom: 'ceo-office',
14
+ defaultSeat: 0,
15
+ },
16
+ {
17
+ id: 'nova',
18
+ name: 'Nova',
19
+ role: 'cto',
20
+ emoji: '🔬',
21
+ color: '#DC143C',
22
+ description: 'Technical guardian who reviews architecture, enforces security standards, and monitors system health.',
23
+ skills: ['sp-requesting-review', 'sp-receiving-review', 'ag-security-audit', 'ag-api-design-principles', 'ag-architecture', 'ag-monitoring-observability'],
24
+ defaultRoom: 'cto-office',
25
+ defaultSeat: 0,
26
+ },
27
+ {
28
+ id: 'aria',
29
+ name: 'Aria',
30
+ role: 'architect',
31
+ emoji: '🏛️',
32
+ color: '#B57EDC',
33
+ description: 'System architect who designs holistic solutions spanning frontend, backend, and infrastructure.',
34
+ skills: ['sp-writing-plans', 'sp-subagent-dev', 'ag-architecture', 'ag-api-design-principles', 'ag-database-design', 'ag-microservices-patterns'],
35
+ defaultRoom: 'arch-lab',
36
+ defaultSeat: 0,
37
+ },
38
+ {
39
+ id: 'dex',
40
+ name: 'Dex',
41
+ role: 'dev-senior',
42
+ emoji: '⚡',
43
+ color: '#50C878',
44
+ description: 'Senior TypeScript developer who writes clean, test-driven code. Backend specialist.',
45
+ skills: ['sp-tdd-cycle', 'sp-tdd-red', 'sp-tdd-green', 'sp-tdd-refactor', 'sp-systematic-debugging', 'ag-clean-code', 'ag-typescript-pro', 'ag-auth-patterns'],
46
+ defaultRoom: 'dev-bullpen',
47
+ defaultSeat: 0,
48
+ },
49
+ {
50
+ id: 'flux',
51
+ name: 'Flux',
52
+ role: 'dev-fullstack',
53
+ emoji: '🌊',
54
+ color: '#4169E1',
55
+ description: 'Fullstack developer specializing in React, Next.js, and Tailwind.',
56
+ skills: ['sp-tdd-cycle', 'sp-finishing-branch', 'ag-react-patterns', 'ag-nextjs-best-practices', 'ag-tailwind-design-system', 'ag-frontend-design'],
57
+ defaultRoom: 'dev-bullpen',
58
+ defaultSeat: 1,
59
+ },
60
+ {
61
+ id: 'quinn',
62
+ name: 'Quinn',
63
+ role: 'qa-lead',
64
+ emoji: '🔍',
65
+ color: '#FF8C00',
66
+ description: 'QA lead who writes comprehensive tests and enforces quality gates.',
67
+ skills: ['sp-verification', 'sp-systematic-debugging', 'ag-testing-patterns', 'ag-playwright-skill', 'ag-e2e-testing', 'ag-accessibility-compliance'],
68
+ defaultRoom: 'qa-lab',
69
+ defaultSeat: 0,
70
+ },
71
+ {
72
+ id: 'gage',
73
+ name: 'Gage',
74
+ role: 'devops',
75
+ emoji: '🚀',
76
+ color: '#20B2AA',
77
+ description: 'DevOps engineer who manages CI/CD, Docker, Kubernetes, and deployment.',
78
+ skills: ['sp-git-worktrees', 'ag-docker-expert', 'ag-kubernetes-architect', 'ag-terraform-skill', 'ag-cicd-automation', 'ag-github-actions-templates'],
79
+ defaultRoom: 'qa-lab',
80
+ defaultSeat: 1,
81
+ },
82
+ {
83
+ id: 'morgan',
84
+ name: 'Morgan',
85
+ role: 'product-manager',
86
+ emoji: '📋',
87
+ color: '#FF69B4',
88
+ description: 'Product manager who writes PRDs, prioritizes features, and tracks analytics.',
89
+ skills: ['sp-brainstorming', 'sp-writing-plans', 'ag-product-manager-toolkit', 'ag-analytics-tracking'],
90
+ defaultRoom: 'design-studio',
91
+ defaultSeat: 1,
92
+ },
93
+ {
94
+ id: 'uma',
95
+ name: 'Uma',
96
+ role: 'ux-designer',
97
+ emoji: '🎨',
98
+ color: '#8A2BE2',
99
+ description: 'UX designer who creates intuitive interfaces and ensures accessibility.',
100
+ skills: ['sp-brainstorming', 'ag-ui-ux-designer', 'ag-accessibility-compliance', 'ag-tailwind-design-system', 'ag-frontend-design'],
101
+ defaultRoom: 'design-studio',
102
+ defaultSeat: 0,
103
+ },
104
+ {
105
+ id: 'river',
106
+ name: 'River',
107
+ role: 'scrum-master',
108
+ emoji: '🌀',
109
+ color: '#00CED1',
110
+ description: 'Scrum master who facilitates sprints, coordinates parallel work, and runs retros.',
111
+ skills: ['sp-dispatching-parallel', 'sp-verification', 'ag-agile-scrum', 'ag-team-collaboration-standup-notes'],
112
+ defaultRoom: 'lounge',
113
+ defaultSeat: 0,
114
+ },
115
+ {
116
+ id: 'atlas',
117
+ name: 'Atlas',
118
+ role: 'data-engineer',
119
+ emoji: '📊',
120
+ color: '#708090',
121
+ description: 'Data engineer who designs schemas, optimizes queries, and builds data pipelines.',
122
+ skills: ['sp-tdd-cycle', 'ag-database-design', 'ag-postgresql', 'ag-sql-pro', 'ag-data-engineering-data-pipeline', 'ag-ai-ml'],
123
+ defaultRoom: 'data-lab',
124
+ defaultSeat: 0,
125
+ },
126
+ ];
127
+ //# sourceMappingURL=personas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personas.js","sourceRoot":"","sources":["../../src/agents/personas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Agent → Skill assignments.
3
+ * All skill IDs use prefix convention: sp- for Superpowers, ag- for Antigravity.
4
+ * See spec Section 7.2 for full mapping details.
5
+ */
6
+ export declare const AGENT_SKILLS: Record<string, string[]>;
7
+ //# sourceMappingURL=skills-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-map.d.ts","sourceRoot":"","sources":["../../src/agents/skills-map.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CA6CjD,CAAC"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AGENT_SKILLS = void 0;
4
+ /**
5
+ * Agent → Skill assignments.
6
+ * All skill IDs use prefix convention: sp- for Superpowers, ag- for Antigravity.
7
+ * See spec Section 7.2 for full mapping details.
8
+ */
9
+ exports.AGENT_SKILLS = {
10
+ sage: [
11
+ 'sp-brainstorming', 'sp-writing-plans', 'sp-dispatching-parallel',
12
+ 'sp-verification', 'ag-product-strategy',
13
+ ],
14
+ nova: [
15
+ 'sp-requesting-review', 'sp-receiving-review', 'ag-security-audit',
16
+ 'ag-api-design-principles', 'ag-architecture', 'ag-monitoring-observability',
17
+ ],
18
+ aria: [
19
+ 'sp-writing-plans', 'sp-subagent-dev', 'ag-architecture',
20
+ 'ag-api-design-principles', 'ag-database-design', 'ag-microservices-patterns',
21
+ ],
22
+ dex: [
23
+ 'sp-tdd-cycle', 'sp-tdd-red', 'sp-tdd-green', 'sp-tdd-refactor',
24
+ 'sp-systematic-debugging', 'ag-clean-code', 'ag-typescript-pro', 'ag-auth-patterns',
25
+ ],
26
+ flux: [
27
+ 'sp-tdd-cycle', 'sp-finishing-branch', 'ag-react-patterns',
28
+ 'ag-nextjs-best-practices', 'ag-tailwind-design-system', 'ag-frontend-design',
29
+ ],
30
+ quinn: [
31
+ 'sp-verification', 'sp-systematic-debugging', 'ag-testing-patterns',
32
+ 'ag-playwright-skill', 'ag-e2e-testing', 'ag-accessibility-compliance',
33
+ ],
34
+ gage: [
35
+ 'sp-git-worktrees', 'ag-docker-expert', 'ag-kubernetes-architect',
36
+ 'ag-terraform-skill', 'ag-cicd-automation', 'ag-github-actions-templates',
37
+ ],
38
+ morgan: [
39
+ 'sp-brainstorming', 'sp-writing-plans', 'ag-product-manager-toolkit',
40
+ 'ag-analytics-tracking',
41
+ ],
42
+ uma: [
43
+ 'sp-brainstorming', 'ag-ui-ux-designer', 'ag-accessibility-compliance',
44
+ 'ag-tailwind-design-system', 'ag-frontend-design',
45
+ ],
46
+ river: [
47
+ 'sp-dispatching-parallel', 'sp-verification', 'ag-agile-scrum',
48
+ 'ag-team-collaboration-standup-notes',
49
+ ],
50
+ atlas: [
51
+ 'sp-tdd-cycle', 'ag-database-design', 'ag-postgresql', 'ag-sql-pro',
52
+ 'ag-data-engineering-data-pipeline', 'ag-ai-ml',
53
+ ],
54
+ };
55
+ //# sourceMappingURL=skills-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-map.js","sourceRoot":"","sources":["../../src/agents/skills-map.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACU,QAAA,YAAY,GAA6B;IACpD,IAAI,EAAE;QACJ,kBAAkB,EAAE,kBAAkB,EAAE,yBAAyB;QACjE,iBAAiB,EAAE,qBAAqB;KACzC;IACD,IAAI,EAAE;QACJ,sBAAsB,EAAE,qBAAqB,EAAE,mBAAmB;QAClE,0BAA0B,EAAE,iBAAiB,EAAE,6BAA6B;KAC7E;IACD,IAAI,EAAE;QACJ,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB;QACxD,0BAA0B,EAAE,oBAAoB,EAAE,2BAA2B;KAC9E;IACD,GAAG,EAAE;QACH,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB;QAC/D,yBAAyB,EAAE,eAAe,EAAE,mBAAmB,EAAE,kBAAkB;KACpF;IACD,IAAI,EAAE;QACJ,cAAc,EAAE,qBAAqB,EAAE,mBAAmB;QAC1D,0BAA0B,EAAE,2BAA2B,EAAE,oBAAoB;KAC9E;IACD,KAAK,EAAE;QACL,iBAAiB,EAAE,yBAAyB,EAAE,qBAAqB;QACnE,qBAAqB,EAAE,gBAAgB,EAAE,6BAA6B;KACvE;IACD,IAAI,EAAE;QACJ,kBAAkB,EAAE,kBAAkB,EAAE,yBAAyB;QACjE,oBAAoB,EAAE,oBAAoB,EAAE,6BAA6B;KAC1E;IACD,MAAM,EAAE;QACN,kBAAkB,EAAE,kBAAkB,EAAE,4BAA4B;QACpE,uBAAuB;KACxB;IACD,GAAG,EAAE;QACH,kBAAkB,EAAE,mBAAmB,EAAE,6BAA6B;QACtE,2BAA2B,EAAE,oBAAoB;KAClD;IACD,KAAK,EAAE;QACL,yBAAyB,EAAE,iBAAiB,EAAE,gBAAgB;QAC9D,qCAAqC;KACtC;IACD,KAAK,EAAE;QACL,cAAc,EAAE,oBAAoB,EAAE,eAAe,EAAE,YAAY;QACnE,mCAAmC,EAAE,UAAU;KAChD;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.test.d.ts","sourceRoot":"","sources":["../../../src/cli/__tests__/cli.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const index_1 = require("../index");
5
+ const doctor_1 = require("../commands/doctor");
6
+ const team_1 = require("../commands/team");
7
+ (0, vitest_1.describe)('CLI', () => {
8
+ (0, vitest_1.it)('should register all commands', () => {
9
+ const program = (0, index_1.buildProgram)();
10
+ const commandNames = program.commands.map((c) => c.name());
11
+ (0, vitest_1.expect)(commandNames).toContain('init');
12
+ (0, vitest_1.expect)(commandNames).toContain('start');
13
+ (0, vitest_1.expect)(commandNames).toContain('resume');
14
+ (0, vitest_1.expect)(commandNames).toContain('config');
15
+ (0, vitest_1.expect)(commandNames).toContain('team');
16
+ (0, vitest_1.expect)(commandNames).toContain('status');
17
+ (0, vitest_1.expect)(commandNames).toContain('doctor');
18
+ (0, vitest_1.expect)(commandNames).toContain('logs');
19
+ });
20
+ (0, vitest_1.it)('should have correct program name and version', () => {
21
+ const program = (0, index_1.buildProgram)();
22
+ (0, vitest_1.expect)(program.name()).toBe('sage-team');
23
+ });
24
+ });
25
+ (0, vitest_1.describe)('Doctor', () => {
26
+ (0, vitest_1.it)('should return check results', { timeout: 15000 }, () => {
27
+ const checks = (0, doctor_1.doctorChecks)();
28
+ (0, vitest_1.expect)(checks.length).toBeGreaterThan(0);
29
+ // Each check has name, status, message
30
+ for (const check of checks) {
31
+ (0, vitest_1.expect)(check.name).toBeTruthy();
32
+ (0, vitest_1.expect)(['pass', 'fail', 'warn']).toContain(check.status);
33
+ (0, vitest_1.expect)(check.message).toBeTruthy();
34
+ }
35
+ });
36
+ (0, vitest_1.it)('should check for Node.js version', { timeout: 15000 }, () => {
37
+ const checks = (0, doctor_1.doctorChecks)();
38
+ const nodeCheck = checks.find(c => c.name === 'Node.js');
39
+ (0, vitest_1.expect)(nodeCheck).toBeTruthy();
40
+ (0, vitest_1.expect)(nodeCheck.status).toBe('pass');
41
+ });
42
+ });
43
+ (0, vitest_1.describe)('Team', () => {
44
+ (0, vitest_1.it)('should format all 11 agents', () => {
45
+ const output = (0, team_1.formatTeamRoster)();
46
+ (0, vitest_1.expect)(output).toContain('Sage');
47
+ (0, vitest_1.expect)(output).toContain('Nova');
48
+ (0, vitest_1.expect)(output).toContain('Dex');
49
+ (0, vitest_1.expect)(output).toContain('Flux');
50
+ (0, vitest_1.expect)(output).toContain('Quinn');
51
+ (0, vitest_1.expect)(output).toContain('Gage');
52
+ (0, vitest_1.expect)(output).toContain('Morgan');
53
+ (0, vitest_1.expect)(output).toContain('Uma');
54
+ (0, vitest_1.expect)(output).toContain('Aria');
55
+ (0, vitest_1.expect)(output).toContain('River');
56
+ (0, vitest_1.expect)(output).toContain('Atlas');
57
+ });
58
+ (0, vitest_1.it)('should include agent roles', () => {
59
+ const output = (0, team_1.formatTeamRoster)();
60
+ (0, vitest_1.expect)(output).toContain('ceo');
61
+ (0, vitest_1.expect)(output).toContain('cto');
62
+ (0, vitest_1.expect)(output).toContain('dev-senior');
63
+ });
64
+ });
65
+ //# sourceMappingURL=cli.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/cli.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function configCommand(): Command;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,aAAa,IAAI,OAAO,CAqCvC"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.configCommand = configCommand;
7
+ const commander_1 = require("commander");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const CONFIG_PATH = '.sage-team/config.json';
10
+ function configCommand() {
11
+ return new commander_1.Command('config')
12
+ .description('View or update configuration')
13
+ .option('--show', 'Show current config')
14
+ .option('--api-key <key>', 'Set Anthropic API key')
15
+ .option('--model <model>', 'Set model (e.g. claude-sonnet-4-20250514)')
16
+ .option('--max-agents <n>', 'Set max concurrent agents')
17
+ .option('--autonomy <mode>', 'Set autonomy mode: sandbox|direct|supervised')
18
+ .option('--company-name <name>', 'Set company name')
19
+ .option('--mission <mission>', 'Set company mission')
20
+ .action((options) => {
21
+ if (!fs_1.default.existsSync(CONFIG_PATH)) {
22
+ console.error('Sage Team not initialized. Run: sage-team init');
23
+ process.exit(1);
24
+ }
25
+ const config = JSON.parse(fs_1.default.readFileSync(CONFIG_PATH, 'utf-8'));
26
+ if (options.show || Object.keys(options).filter(k => k !== 'show').length === 0) {
27
+ const display = { ...config };
28
+ if (display.apiKey) {
29
+ display.apiKey = display.apiKey.slice(0, 10) + '...' + display.apiKey.slice(-4);
30
+ }
31
+ console.log(JSON.stringify(display, null, 2));
32
+ return;
33
+ }
34
+ if (options.apiKey)
35
+ config.apiKey = options.apiKey;
36
+ if (options.model)
37
+ config.model = options.model;
38
+ if (options.maxAgents)
39
+ config.maxConcurrentAgents = parseInt(options.maxAgents);
40
+ if (options.autonomy)
41
+ config.autonomyMode = options.autonomy;
42
+ if (options.companyName)
43
+ config.companyName = options.companyName;
44
+ if (options.mission)
45
+ config.mission = options.mission;
46
+ fs_1.default.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2));
47
+ console.log('Config updated.');
48
+ });
49
+ }
50
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":";;;;;AAKA,sCAqCC;AA1CD,yCAAoC;AACpC,4CAAoB;AAEpB,MAAM,WAAW,GAAG,wBAAwB,CAAC;AAE7C,SAAgB,aAAa;IAC3B,OAAO,IAAI,mBAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,QAAQ,EAAE,qBAAqB,CAAC;SACvC,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;SAClD,MAAM,CAAC,iBAAiB,EAAE,2CAA2C,CAAC;SACtE,MAAM,CAAC,kBAAkB,EAAE,2BAA2B,CAAC;SACvD,MAAM,CAAC,mBAAmB,EAAE,8CAA8C,CAAC;SAC3E,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,CAAC;SACnD,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;SACpD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QAClB,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QAEjE,IAAI,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChF,MAAM,OAAO,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;YAC9B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAClF,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACnD,IAAI,OAAO,CAAC,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAChD,IAAI,OAAO,CAAC,SAAS;YAAE,MAAM,CAAC,mBAAmB,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChF,IAAI,OAAO,CAAC,QAAQ;YAAE,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC7D,IAAI,OAAO,CAAC,WAAW;YAAE,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAClE,IAAI,OAAO,CAAC,OAAO;YAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAEtD,YAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Command } from 'commander';
2
+ export interface HealthCheck {
3
+ name: string;
4
+ status: 'pass' | 'fail' | 'warn';
5
+ message: string;
6
+ }
7
+ export declare function doctorChecks(): HealthCheck[];
8
+ export declare function doctorCommand(): Command;
9
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,YAAY,IAAI,WAAW,EAAE,CA8C5C;AAED,wBAAgB,aAAa,IAAI,OAAO,CAkBvC"}