dev-team-mcp-server 0.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.
Files changed (245) hide show
  1. package/README.md +168 -0
  2. package/dist/cli.d.ts +5 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +127 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/config/permissions.d.ts +26 -0
  7. package/dist/config/permissions.d.ts.map +1 -0
  8. package/dist/config/permissions.js +82 -0
  9. package/dist/config/permissions.js.map +1 -0
  10. package/dist/config/team-config.d.ts +28 -0
  11. package/dist/config/team-config.d.ts.map +1 -0
  12. package/dist/config/team-config.js +101 -0
  13. package/dist/config/team-config.js.map +1 -0
  14. package/dist/index.d.ts +3 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +1301 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/tools/add-backlog.d.ts +21 -0
  19. package/dist/tools/add-backlog.d.ts.map +1 -0
  20. package/dist/tools/add-backlog.js +96 -0
  21. package/dist/tools/add-backlog.js.map +1 -0
  22. package/dist/tools/approve-plan.d.ts +12 -0
  23. package/dist/tools/approve-plan.d.ts.map +1 -0
  24. package/dist/tools/approve-plan.js +181 -0
  25. package/dist/tools/approve-plan.js.map +1 -0
  26. package/dist/tools/approve-test.d.ts +15 -0
  27. package/dist/tools/approve-test.d.ts.map +1 -0
  28. package/dist/tools/approve-test.js +113 -0
  29. package/dist/tools/approve-test.js.map +1 -0
  30. package/dist/tools/archive-all-tasks.d.ts +9 -0
  31. package/dist/tools/archive-all-tasks.d.ts.map +1 -0
  32. package/dist/tools/archive-all-tasks.js +39 -0
  33. package/dist/tools/archive-all-tasks.js.map +1 -0
  34. package/dist/tools/assign-task.d.ts +31 -0
  35. package/dist/tools/assign-task.d.ts.map +1 -0
  36. package/dist/tools/assign-task.js +285 -0
  37. package/dist/tools/assign-task.js.map +1 -0
  38. package/dist/tools/check-queue.d.ts +18 -0
  39. package/dist/tools/check-queue.d.ts.map +1 -0
  40. package/dist/tools/check-queue.js +129 -0
  41. package/dist/tools/check-queue.js.map +1 -0
  42. package/dist/tools/clear-agent.d.ts +8 -0
  43. package/dist/tools/clear-agent.d.ts.map +1 -0
  44. package/dist/tools/clear-agent.js +52 -0
  45. package/dist/tools/clear-agent.js.map +1 -0
  46. package/dist/tools/compact-agent.d.ts +8 -0
  47. package/dist/tools/compact-agent.d.ts.map +1 -0
  48. package/dist/tools/compact-agent.js +52 -0
  49. package/dist/tools/compact-agent.js.map +1 -0
  50. package/dist/tools/compact-all.d.ts +11 -0
  51. package/dist/tools/compact-all.d.ts.map +1 -0
  52. package/dist/tools/compact-all.js +61 -0
  53. package/dist/tools/compact-all.js.map +1 -0
  54. package/dist/tools/configure-modes.d.ts +19 -0
  55. package/dist/tools/configure-modes.d.ts.map +1 -0
  56. package/dist/tools/configure-modes.js +114 -0
  57. package/dist/tools/configure-modes.js.map +1 -0
  58. package/dist/tools/distribute-tasks.d.ts +40 -0
  59. package/dist/tools/distribute-tasks.d.ts.map +1 -0
  60. package/dist/tools/distribute-tasks.js +276 -0
  61. package/dist/tools/distribute-tasks.js.map +1 -0
  62. package/dist/tools/get-backlog.d.ts +9 -0
  63. package/dist/tools/get-backlog.d.ts.map +1 -0
  64. package/dist/tools/get-backlog.js +65 -0
  65. package/dist/tools/get-backlog.js.map +1 -0
  66. package/dist/tools/get-dashboard.d.ts +15 -0
  67. package/dist/tools/get-dashboard.d.ts.map +1 -0
  68. package/dist/tools/get-dashboard.js +154 -0
  69. package/dist/tools/get-dashboard.js.map +1 -0
  70. package/dist/tools/get-project-context.d.ts +11 -0
  71. package/dist/tools/get-project-context.d.ts.map +1 -0
  72. package/dist/tools/get-project-context.js +84 -0
  73. package/dist/tools/get-project-context.js.map +1 -0
  74. package/dist/tools/health-check.d.ts +21 -0
  75. package/dist/tools/health-check.d.ts.map +1 -0
  76. package/dist/tools/health-check.js +86 -0
  77. package/dist/tools/health-check.js.map +1 -0
  78. package/dist/tools/kill-member.d.ts +15 -0
  79. package/dist/tools/kill-member.d.ts.map +1 -0
  80. package/dist/tools/kill-member.js +89 -0
  81. package/dist/tools/kill-member.js.map +1 -0
  82. package/dist/tools/kill-member.test.d.ts +2 -0
  83. package/dist/tools/kill-member.test.d.ts.map +1 -0
  84. package/dist/tools/kill-member.test.js +228 -0
  85. package/dist/tools/kill-member.test.js.map +1 -0
  86. package/dist/tools/process-approval.d.ts +14 -0
  87. package/dist/tools/process-approval.d.ts.map +1 -0
  88. package/dist/tools/process-approval.js +225 -0
  89. package/dist/tools/process-approval.js.map +1 -0
  90. package/dist/tools/process-skill-candidate.d.ts +14 -0
  91. package/dist/tools/process-skill-candidate.d.ts.map +1 -0
  92. package/dist/tools/process-skill-candidate.js +56 -0
  93. package/dist/tools/process-skill-candidate.js.map +1 -0
  94. package/dist/tools/recall-memory.d.ts +9 -0
  95. package/dist/tools/recall-memory.d.ts.map +1 -0
  96. package/dist/tools/recall-memory.js +97 -0
  97. package/dist/tools/recall-memory.js.map +1 -0
  98. package/dist/tools/reject-plan.d.ts +13 -0
  99. package/dist/tools/reject-plan.d.ts.map +1 -0
  100. package/dist/tools/reject-plan.js +154 -0
  101. package/dist/tools/reject-plan.js.map +1 -0
  102. package/dist/tools/reject-test.d.ts +13 -0
  103. package/dist/tools/reject-test.d.ts.map +1 -0
  104. package/dist/tools/reject-test.js +122 -0
  105. package/dist/tools/reject-test.js.map +1 -0
  106. package/dist/tools/report-skill-candidate.d.ts +12 -0
  107. package/dist/tools/report-skill-candidate.d.ts.map +1 -0
  108. package/dist/tools/report-skill-candidate.js +51 -0
  109. package/dist/tools/report-skill-candidate.js.map +1 -0
  110. package/dist/tools/request-approval.d.ts +13 -0
  111. package/dist/tools/request-approval.d.ts.map +1 -0
  112. package/dist/tools/request-approval.js +53 -0
  113. package/dist/tools/request-approval.js.map +1 -0
  114. package/dist/tools/request-member-decrease.d.ts +15 -0
  115. package/dist/tools/request-member-decrease.d.ts.map +1 -0
  116. package/dist/tools/request-member-decrease.js +100 -0
  117. package/dist/tools/request-member-decrease.js.map +1 -0
  118. package/dist/tools/request-member-increase.d.ts +15 -0
  119. package/dist/tools/request-member-increase.d.ts.map +1 -0
  120. package/dist/tools/request-member-increase.js +81 -0
  121. package/dist/tools/request-member-increase.js.map +1 -0
  122. package/dist/tools/save-memory.d.ts +9 -0
  123. package/dist/tools/save-memory.d.ts.map +1 -0
  124. package/dist/tools/save-memory.js +82 -0
  125. package/dist/tools/save-memory.js.map +1 -0
  126. package/dist/tools/send-task.d.ts +18 -0
  127. package/dist/tools/send-task.d.ts.map +1 -0
  128. package/dist/tools/send-task.js +216 -0
  129. package/dist/tools/send-task.js.map +1 -0
  130. package/dist/tools/set-review-mode.d.ts +13 -0
  131. package/dist/tools/set-review-mode.d.ts.map +1 -0
  132. package/dist/tools/set-review-mode.js +69 -0
  133. package/dist/tools/set-review-mode.js.map +1 -0
  134. package/dist/tools/submit-plan.d.ts +16 -0
  135. package/dist/tools/submit-plan.d.ts.map +1 -0
  136. package/dist/tools/submit-plan.js +151 -0
  137. package/dist/tools/submit-plan.js.map +1 -0
  138. package/dist/tools/submit-test.d.ts +15 -0
  139. package/dist/tools/submit-test.d.ts.map +1 -0
  140. package/dist/tools/submit-test.js +110 -0
  141. package/dist/tools/submit-test.js.map +1 -0
  142. package/dist/tools/update-backlog.d.ts +22 -0
  143. package/dist/tools/update-backlog.d.ts.map +1 -0
  144. package/dist/tools/update-backlog.js +94 -0
  145. package/dist/tools/update-backlog.js.map +1 -0
  146. package/dist/tools/update-project-context.d.ts +9 -0
  147. package/dist/tools/update-project-context.d.ts.map +1 -0
  148. package/dist/tools/update-project-context.js +81 -0
  149. package/dist/tools/update-project-context.js.map +1 -0
  150. package/dist/tools/update-task-status.d.ts +25 -0
  151. package/dist/tools/update-task-status.d.ts.map +1 -0
  152. package/dist/tools/update-task-status.js +160 -0
  153. package/dist/tools/update-task-status.js.map +1 -0
  154. package/dist/tools/watch-queue.d.ts +17 -0
  155. package/dist/tools/watch-queue.d.ts.map +1 -0
  156. package/dist/tools/watch-queue.js +132 -0
  157. package/dist/tools/watch-queue.js.map +1 -0
  158. package/dist/types/memory.d.ts +44 -0
  159. package/dist/types/memory.d.ts.map +1 -0
  160. package/dist/types/memory.js +2 -0
  161. package/dist/types/memory.js.map +1 -0
  162. package/dist/types/message.d.ts +25 -0
  163. package/dist/types/message.d.ts.map +1 -0
  164. package/dist/types/message.js +2 -0
  165. package/dist/types/message.js.map +1 -0
  166. package/dist/types/task.d.ts +113 -0
  167. package/dist/types/task.d.ts.map +1 -0
  168. package/dist/types/task.js +2 -0
  169. package/dist/types/task.js.map +1 -0
  170. package/dist/utils/ansi-table.d.ts +41 -0
  171. package/dist/utils/ansi-table.d.ts.map +1 -0
  172. package/dist/utils/ansi-table.js +139 -0
  173. package/dist/utils/ansi-table.js.map +1 -0
  174. package/dist/utils/court.d.ts +22 -0
  175. package/dist/utils/court.d.ts.map +1 -0
  176. package/dist/utils/court.js +76 -0
  177. package/dist/utils/court.js.map +1 -0
  178. package/dist/utils/court.test.d.ts +2 -0
  179. package/dist/utils/court.test.d.ts.map +1 -0
  180. package/dist/utils/court.test.js +151 -0
  181. package/dist/utils/court.test.js.map +1 -0
  182. package/dist/utils/file-lock.d.ts +4 -0
  183. package/dist/utils/file-lock.d.ts.map +1 -0
  184. package/dist/utils/file-lock.js +59 -0
  185. package/dist/utils/file-lock.js.map +1 -0
  186. package/dist/utils/format.d.ts +7 -0
  187. package/dist/utils/format.d.ts.map +1 -0
  188. package/dist/utils/format.js +33 -0
  189. package/dist/utils/format.js.map +1 -0
  190. package/dist/utils/init-project.d.ts +5 -0
  191. package/dist/utils/init-project.d.ts.map +1 -0
  192. package/dist/utils/init-project.js +89 -0
  193. package/dist/utils/init-project.js.map +1 -0
  194. package/dist/utils/logger.d.ts +16 -0
  195. package/dist/utils/logger.d.ts.map +1 -0
  196. package/dist/utils/logger.js +53 -0
  197. package/dist/utils/logger.js.map +1 -0
  198. package/dist/utils/memory.d.ts +60 -0
  199. package/dist/utils/memory.d.ts.map +1 -0
  200. package/dist/utils/memory.js +403 -0
  201. package/dist/utils/memory.js.map +1 -0
  202. package/dist/utils/permission.d.ts +34 -0
  203. package/dist/utils/permission.d.ts.map +1 -0
  204. package/dist/utils/permission.js +52 -0
  205. package/dist/utils/permission.js.map +1 -0
  206. package/dist/utils/permission.test.d.ts +2 -0
  207. package/dist/utils/permission.test.d.ts.map +1 -0
  208. package/dist/utils/permission.test.js +26 -0
  209. package/dist/utils/permission.test.js.map +1 -0
  210. package/dist/utils/queue.d.ts +55 -0
  211. package/dist/utils/queue.d.ts.map +1 -0
  212. package/dist/utils/queue.js +705 -0
  213. package/dist/utils/queue.js.map +1 -0
  214. package/dist/utils/status-transition.d.ts +57 -0
  215. package/dist/utils/status-transition.d.ts.map +1 -0
  216. package/dist/utils/status-transition.js +94 -0
  217. package/dist/utils/status-transition.js.map +1 -0
  218. package/dist/utils/task-archive.d.ts +33 -0
  219. package/dist/utils/task-archive.d.ts.map +1 -0
  220. package/dist/utils/task-archive.js +233 -0
  221. package/dist/utils/task-archive.js.map +1 -0
  222. package/dist/utils/task-manager.d.ts +67 -0
  223. package/dist/utils/task-manager.d.ts.map +1 -0
  224. package/dist/utils/task-manager.js +225 -0
  225. package/dist/utils/task-manager.js.map +1 -0
  226. package/dist/utils/team-session.d.ts +99 -0
  227. package/dist/utils/team-session.d.ts.map +1 -0
  228. package/dist/utils/team-session.js +585 -0
  229. package/dist/utils/team-session.js.map +1 -0
  230. package/dist/utils/validation.d.ts +40 -0
  231. package/dist/utils/validation.d.ts.map +1 -0
  232. package/dist/utils/validation.js +57 -0
  233. package/dist/utils/validation.js.map +1 -0
  234. package/dist/utils/wezterm.d.ts +23 -0
  235. package/dist/utils/wezterm.d.ts.map +1 -0
  236. package/dist/utils/wezterm.js +189 -0
  237. package/dist/utils/wezterm.js.map +1 -0
  238. package/package.json +60 -0
  239. package/templates/skills/report-template.md +58 -0
  240. package/templates/skills/review-code.md +83 -0
  241. package/templates/skills/review-plan.md +65 -0
  242. package/templates/skills/strict-review.md +83 -0
  243. package/templates/skills/strict-workflow.md +48 -0
  244. package/templates/skills/tdd.md +50 -0
  245. package/templates/start-team-skill.md +61 -0
package/README.md ADDED
@@ -0,0 +1,168 @@
1
+ # dev-team-mcp-server
2
+
3
+ [![npm version](https://img.shields.io/npm/v/dev-team-mcp-server)](https://www.npmjs.com/package/dev-team-mcp-server)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+
6
+ Multi-agent development team system for [Claude Code](https://claude.ai/claude-code) — orchestrate PM, Leader, and Member roles via MCP with WezTerm integration.
7
+
8
+ Multiple Claude Code instances work as a "development team" with a hierarchical structure (PM → Leader → Members), event-driven file-based communication, and zero API consumption during idle.
9
+
10
+ ## Prerequisites
11
+
12
+ - **Node.js** 18+
13
+ - **WezTerm** 20230326+ (terminal multiplexer)
14
+ - **Claude Code CLI** v2.1.0+
15
+ - **Windows OS**
16
+
17
+ ## Install
18
+
19
+ ```bash
20
+ npm install -g dev-team-mcp-server
21
+ ```
22
+
23
+ ## Quick Start
24
+
25
+ ### 1. Initialize project
26
+
27
+ ```bash
28
+ dev-team init /path/to/your-project
29
+ ```
30
+
31
+ This creates the `.dev-team/` directory structure with workspace configurations.
32
+
33
+ ### 2. Configure MCP
34
+
35
+ Add to your `~/.mcp.json`:
36
+
37
+ ```json
38
+ {
39
+ "mcpServers": {
40
+ "dev-team": {
41
+ "command": "dev-team-mcp-server",
42
+ "args": []
43
+ }
44
+ }
45
+ }
46
+ ```
47
+
48
+ ### 3. Start the team
49
+
50
+ ```bash
51
+ dev-team start /path/to/your-project "Implement user authentication"
52
+ ```
53
+
54
+ This opens WezTerm panes for each role (PM, Leader, Member-01, Member-02) and starts the team session.
55
+
56
+ ### 4. Manage the team
57
+
58
+ ```bash
59
+ # Add members
60
+ dev-team add-member /path/to/your-project --count 1
61
+
62
+ # Remove members
63
+ dev-team remove-member /path/to/your-project --count 1
64
+
65
+ # Stop the team
66
+ dev-team stop /path/to/your-project
67
+ ```
68
+
69
+ ## Environment Variables
70
+
71
+ Set automatically by `dev-team start`. Manual configuration is not required.
72
+
73
+ | Variable | Description | Example |
74
+ |----------|-------------|---------|
75
+ | `DEV_TEAM_ROLE` | Agent role | `pm`, `leader`, `member-01` |
76
+ | `DEV_TEAM_PROJECT_PATH` | Project path | `/path/to/project` |
77
+ | `DEV_TEAM_LOG_LEVEL` | Log level (optional) | `debug`, `info`, `warn`, `error` |
78
+
79
+ ## Tools
80
+
81
+ ### Basic Operations
82
+
83
+ | Tool | Who | Description |
84
+ |------|-----|-------------|
85
+ | `check_queue` | All | Check task queue for incoming messages |
86
+ | `send_task` | All (restricted) | Send task/message to another role |
87
+ | `get_dashboard` | All | Get project progress dashboard |
88
+ | `health_check` | All | Check system status |
89
+
90
+ ### Task Management
91
+
92
+ | Tool | Who | Description |
93
+ |------|-----|-------------|
94
+ | `assign_task` | Leader | Assign structured task to a member |
95
+ | `distribute_tasks` | Leader | Distribute multiple subtasks at once |
96
+ | `submit_plan` | Member | Submit implementation plan for review |
97
+ | `approve_plan` | Leader | Approve member's plan |
98
+ | `reject_plan` | Leader | Reject member's plan with feedback |
99
+ | `submit_test` | Member | Submit test code for review (strict mode) |
100
+ | `approve_test` | Leader | Approve member's test code |
101
+ | `reject_test` | Leader | Reject member's test code |
102
+ | `update_task_status` | PM, Leader | Update task status |
103
+
104
+ ### Backlog
105
+
106
+ | Tool | Who | Description |
107
+ |------|-----|-------------|
108
+ | `add_backlog` | PM | Add task to backlog |
109
+ | `get_backlog` | All | Get backlog task list |
110
+ | `update_backlog` | PM | Update backlog task status |
111
+
112
+ ### Memory & Context
113
+
114
+ | Tool | Who | Description |
115
+ |------|-----|-------------|
116
+ | `save_memory` | All | Save decisions and notes |
117
+ | `recall_memory` | All | Search and retrieve memories |
118
+ | `get_project_context` | All | Get project context |
119
+ | `update_project_context` | PM, Leader | Update project context |
120
+
121
+ ### Approval
122
+
123
+ | Tool | Who | Description |
124
+ |------|-----|-------------|
125
+ | `request_approval` | PM | Request approval from user |
126
+ | `process_approval` | PM | Process approval request |
127
+
128
+ ### Configuration
129
+
130
+ | Tool | Who | Description |
131
+ |------|-----|-------------|
132
+ | `configure_modes` | PM | Configure review mode and task split approval |
133
+
134
+ ### Member Management
135
+
136
+ | Tool | Who | Description |
137
+ |------|-----|-------------|
138
+ | `request_member_increase` | Leader | Request member increase |
139
+ | `request_member_decrease` | Leader | Request member decrease |
140
+
141
+ ### Agent Control
142
+
143
+ | Tool | Who | Description |
144
+ |------|-----|-------------|
145
+ | `compact_agent` | PM, Leader | Send /compact to a role |
146
+ | `clear_agent` | PM, Leader | Send /clear to a role |
147
+ | `compact_all` | PM, Leader | Send /compact to all roles |
148
+ | `archive_all_tasks` | PM | Archive all tasks |
149
+
150
+ ## CLI Commands
151
+
152
+ | Command | Description |
153
+ |---------|-------------|
154
+ | `dev-team init [path]` | Initialize project structure |
155
+ | `dev-team start <path> [task]` | Start team session |
156
+ | `dev-team stop <path>` | Stop team session |
157
+ | `dev-team add-member <path>` | Add members to session |
158
+ | `dev-team remove-member <path>` | Remove members from session |
159
+ | `dev-team --version` | Show version |
160
+
161
+ ## License
162
+
163
+ [MIT](https://github.com/tomcat12295/dev-team/blob/master/LICENSE)
164
+
165
+ ## Links
166
+
167
+ - [GitHub Repository](https://github.com/tomcat12295/dev-team)
168
+ - [Bug Reports](https://github.com/tomcat12295/dev-team/issues)
package/dist/cli.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ export declare const CLI_VERSION: string;
4
+ export declare const program: Command;
5
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,WAAW,EAAE,MAAoB,CAAC;AAE/C,eAAO,MAAM,OAAO,SAAgB,CAAC"}
package/dist/cli.js ADDED
@@ -0,0 +1,127 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import * as path from 'path';
4
+ import { readFileSync } from 'fs';
5
+ import { fileURLToPath } from 'url';
6
+ import { dirname, join } from 'path';
7
+ import { startTeamSession, stopTeamSession, addMember, removeMember } from './utils/team-session.js';
8
+ import { initProject } from './utils/init-project.js';
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = dirname(__filename);
11
+ const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
12
+ export const CLI_VERSION = pkg.version;
13
+ export const program = new Command();
14
+ program
15
+ .name('dev-team')
16
+ .description('Dev Team CLI')
17
+ .version(CLI_VERSION);
18
+ program
19
+ .command('start')
20
+ .description('Start dev team session')
21
+ .argument('<projectPath>', 'Path to the project directory')
22
+ .argument('[initialTask]', 'Initial task for PM')
23
+ .option('-m, --members <count>', 'Number of members (default: 2)', '2')
24
+ .action(async (projectPath, initialTask, options) => {
25
+ try {
26
+ const absolutePath = path.resolve(projectPath);
27
+ const memberCount = parseInt(options?.members || '2', 10);
28
+ await startTeamSession({
29
+ projectPath: absolutePath,
30
+ initialTask,
31
+ memberCount,
32
+ });
33
+ }
34
+ catch (err) {
35
+ console.error('Failed to start dev team session:', err);
36
+ process.exit(1);
37
+ }
38
+ });
39
+ program
40
+ .command('stop')
41
+ .description('Stop dev team session')
42
+ .argument('<projectPath>', 'Path to the project directory')
43
+ .option('--delete-queue', 'Delete queue files (default: keep)')
44
+ .action(async (projectPath, options) => {
45
+ try {
46
+ const absolutePath = path.resolve(projectPath);
47
+ await stopTeamSession(absolutePath, {
48
+ keepQueue: !options?.deleteQueue,
49
+ });
50
+ }
51
+ catch (err) {
52
+ console.error('Failed to stop dev team session:', err);
53
+ process.exit(1);
54
+ }
55
+ });
56
+ program
57
+ .command('add-member')
58
+ .description('Add members to an existing team session')
59
+ .argument('<projectPath>', 'Path to the project directory')
60
+ .option('-c, --count <count>', 'Number of members to add (default: 1)', '1')
61
+ .action(async (projectPath, options) => {
62
+ try {
63
+ const absolutePath = path.resolve(projectPath);
64
+ const count = parseInt(options?.count || '1', 10);
65
+ const result = await addMember({
66
+ projectPath: absolutePath,
67
+ count,
68
+ });
69
+ console.log(`Successfully added ${result.addedRoles.length} member(s)`);
70
+ console.log(` Previous count: ${result.previousCount}`);
71
+ console.log(` New count: ${result.newCount}`);
72
+ console.log(` Added roles: ${result.addedRoles.join(', ')}`);
73
+ }
74
+ catch (err) {
75
+ console.error('Failed to add members:', err);
76
+ process.exit(1);
77
+ }
78
+ });
79
+ program
80
+ .command('remove-member')
81
+ .description('Remove members from an existing team session')
82
+ .argument('<projectPath>', 'Path to the project directory')
83
+ .option('-c, --count <count>', 'Number of members to remove (default: 1)', '1')
84
+ .action(async (projectPath, options) => {
85
+ try {
86
+ const absolutePath = path.resolve(projectPath);
87
+ const count = parseInt(options?.count || '1', 10);
88
+ const result = await removeMember(absolutePath, { count });
89
+ console.log(`Successfully removed ${result.removedRoles.length} member(s)`);
90
+ console.log(` Previous count: ${result.previousCount}`);
91
+ console.log(` New count: ${result.newCount}`);
92
+ console.log(` Removed roles: ${result.removedRoles.join(', ')}`);
93
+ }
94
+ catch (err) {
95
+ console.error('Failed to remove members:', err);
96
+ process.exit(1);
97
+ }
98
+ });
99
+ program
100
+ .command('init')
101
+ .description('Init dev team project structure')
102
+ .argument('[projectPath]', 'Path to the project directory', '.')
103
+ .option('-f, --force', 'Overwrite existing files')
104
+ .action(async (projectPath, options) => {
105
+ try {
106
+ const absolutePath = path.resolve(projectPath);
107
+ await initProject(absolutePath, {
108
+ force: options?.force,
109
+ });
110
+ console.log('Successfully initialized dev team project');
111
+ console.log(` Project path: ${absolutePath}`);
112
+ console.log(' Created:');
113
+ console.log(' - .dev-team/workspaces/{pm,leader,member-01,member-02}/CLAUDE.md');
114
+ console.log(' - .dev-team/queue/');
115
+ console.log(' - .dev-team/dashboard.json');
116
+ console.log(' - .claude/skills/start-team/SKILL.md');
117
+ }
118
+ catch (err) {
119
+ console.error('Failed to initialize dev team project:', err);
120
+ process.exit(1);
121
+ }
122
+ });
123
+ // Only parse if this file is run directly (not imported for testing)
124
+ if (process.argv[1]?.endsWith('cli.js') || process.argv[1]?.endsWith('cli.ts')) {
125
+ program.parse();
126
+ }
127
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACrG,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACrF,MAAM,CAAC,MAAM,WAAW,GAAW,GAAG,CAAC,OAAO,CAAC;AAE/C,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAErC,OAAO;KACF,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,cAAc,CAAC;KAC3B,OAAO,CAAC,WAAW,CAAC,CAAC;AAE1B,OAAO;KACF,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,wBAAwB,CAAC;KACrC,QAAQ,CAAC,eAAe,EAAE,+BAA+B,CAAC;KAC1D,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAC;KAChD,MAAM,CAAC,uBAAuB,EAAE,gCAAgC,EAAE,GAAG,CAAC;KACtE,MAAM,CAAC,KAAK,EAAE,WAAmB,EAAE,WAAoB,EAAE,OAA8B,EAAE,EAAE;IACxF,IAAI,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAE1D,MAAM,gBAAgB,CAAC;YACnB,WAAW,EAAE,YAAY;YACzB,WAAW;YACX,WAAW;SACd,CAAC,CAAC;IACP,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,OAAO;KACF,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,uBAAuB,CAAC;KACpC,QAAQ,CAAC,eAAe,EAAE,+BAA+B,CAAC;KAC1D,MAAM,CAAC,gBAAgB,EAAE,oCAAoC,CAAC;KAC9D,MAAM,CAAC,KAAK,EAAE,WAAmB,EAAE,OAAmC,EAAE,EAAE;IACvE,IAAI,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE/C,MAAM,eAAe,CAAC,YAAY,EAAE;YAChC,SAAS,EAAE,CAAC,OAAO,EAAE,WAAW;SACnC,CAAC,CAAC;IACP,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,OAAO;KACF,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,yCAAyC,CAAC;KACtD,QAAQ,CAAC,eAAe,EAAE,+BAA+B,CAAC;KAC1D,MAAM,CAAC,qBAAqB,EAAE,uCAAuC,EAAE,GAAG,CAAC;KAC3E,MAAM,CAAC,KAAK,EAAE,WAAmB,EAAE,OAA4B,EAAE,EAAE;IAChE,IAAI,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,KAAK,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;YAC3B,WAAW,EAAE,YAAY;YACzB,KAAK;SACR,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,UAAU,CAAC,MAAM,YAAY,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,OAAO;KACF,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,8CAA8C,CAAC;KAC3D,QAAQ,CAAC,eAAe,EAAE,+BAA+B,CAAC;KAC1D,MAAM,CAAC,qBAAqB,EAAE,0CAA0C,EAAE,GAAG,CAAC;KAC9E,MAAM,CAAC,KAAK,EAAE,WAAmB,EAAE,OAA4B,EAAE,EAAE;IAChE,IAAI,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,KAAK,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAE3D,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,YAAY,CAAC,MAAM,YAAY,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,OAAO;KACF,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,iCAAiC,CAAC;KAC9C,QAAQ,CAAC,eAAe,EAAE,+BAA+B,EAAE,GAAG,CAAC;KAC/D,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,WAAmB,EAAE,OAA6B,EAAE,EAAE;IACjE,IAAI,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE/C,MAAM,WAAW,CAAC,YAAY,EAAE;YAC5B,KAAK,EAAE,OAAO,EAAE,KAAK;SACxB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,qEAAqE;AACrE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7E,OAAO,CAAC,KAAK,EAAE,CAAC;AACpB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { Role } from '../types/task.js';
2
+ export interface PermissionConfig {
3
+ canSendTo: Role[];
4
+ canRequestApproval: boolean;
5
+ canProcessApproval: boolean;
6
+ canUpdateDashboard: boolean;
7
+ canRequestMemberIncrease: boolean;
8
+ canRequestMemberDecrease: boolean;
9
+ canAssignTask: boolean;
10
+ canSubmitPlan: boolean;
11
+ canApprovePlan: boolean;
12
+ }
13
+ export declare const PERMISSIONS: Record<string, PermissionConfig>;
14
+ export declare function canSendTo(from: Role, to: Role): boolean;
15
+ type BooleanPermissionKey = Exclude<keyof PermissionConfig, 'canSendTo'>;
16
+ export declare function hasPermission(role: Role, permission: BooleanPermissionKey): boolean;
17
+ export declare const canRequestApproval: (role: Role) => boolean;
18
+ export declare const canProcessApproval: (role: Role) => boolean;
19
+ export declare const canUpdateDashboard: (role: Role) => boolean;
20
+ export declare const canRequestMemberIncrease: (role: Role) => boolean;
21
+ export declare const canRequestMemberDecrease: (role: Role) => boolean;
22
+ export declare const canAssignTask: (role: Role) => boolean;
23
+ export declare const canSubmitPlan: (role: Role) => boolean;
24
+ export declare const canApprovePlan: (role: Role) => boolean;
25
+ export {};
26
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/config/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC,MAAM,WAAW,gBAAgB;IAC7B,SAAS,EAAE,IAAI,EAAE,CAAC;IAClB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,wBAAwB,EAAE,OAAO,CAAC;IAClC,wBAAwB,EAAE,OAAO,CAAC;IAElC,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;CAC3B;AAwDD,eAAO,MAAM,WAAW,kCActB,CAAC;AAEH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,CAGvD;AAED,KAAK,oBAAoB,GAAG,OAAO,CAAC,MAAM,gBAAgB,EAAE,WAAW,CAAC,CAAC;AAEzE,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,oBAAoB,GAAG,OAAO,CAGnF;AAED,eAAO,MAAM,kBAAkB,GAAI,MAAM,IAAI,YAA8C,CAAC;AAC5F,eAAO,MAAM,kBAAkB,GAAI,MAAM,IAAI,YAA8C,CAAC;AAC5F,eAAO,MAAM,kBAAkB,GAAI,MAAM,IAAI,YAA8C,CAAC;AAC5F,eAAO,MAAM,wBAAwB,GAAI,MAAM,IAAI,YAAoD,CAAC;AACxG,eAAO,MAAM,wBAAwB,GAAI,MAAM,IAAI,YAAoD,CAAC;AACxG,eAAO,MAAM,aAAa,GAAI,MAAM,IAAI,YAAyC,CAAC;AAClF,eAAO,MAAM,aAAa,GAAI,MAAM,IAAI,YAAyC,CAAC;AAClF,eAAO,MAAM,cAAc,GAAI,MAAM,IAAI,YAA0C,CAAC"}
@@ -0,0 +1,82 @@
1
+ import { getMemberRoles, getTeamConfig } from './team-config.js';
2
+ function generatePermissions() {
3
+ const config = getTeamConfig();
4
+ const memberTemplate = config.permissionTemplates.member;
5
+ const memberRoles = getMemberRoles();
6
+ const permissions = {
7
+ pm: {
8
+ canSendTo: ['leader'],
9
+ canRequestApproval: true,
10
+ canProcessApproval: true,
11
+ canUpdateDashboard: true,
12
+ canRequestMemberIncrease: false,
13
+ canRequestMemberDecrease: false,
14
+ canAssignTask: false,
15
+ canSubmitPlan: false,
16
+ canApprovePlan: false,
17
+ },
18
+ leader: {
19
+ canSendTo: ['pm', ...memberRoles],
20
+ canRequestApproval: false,
21
+ canProcessApproval: false,
22
+ canUpdateDashboard: true,
23
+ canRequestMemberIncrease: true,
24
+ canRequestMemberDecrease: true,
25
+ canAssignTask: true,
26
+ canSubmitPlan: false,
27
+ canApprovePlan: true,
28
+ },
29
+ };
30
+ // メンバー権限をテンプレートから動的生成
31
+ memberRoles.forEach(role => {
32
+ permissions[role] = {
33
+ canSendTo: memberTemplate.canSendTo,
34
+ canRequestApproval: memberTemplate.canRequestApproval,
35
+ canProcessApproval: memberTemplate.canProcessApproval,
36
+ canUpdateDashboard: memberTemplate.canUpdateDashboard,
37
+ canRequestMemberIncrease: false,
38
+ canRequestMemberDecrease: false,
39
+ canAssignTask: false,
40
+ canSubmitPlan: true,
41
+ canApprovePlan: false,
42
+ };
43
+ });
44
+ return permissions;
45
+ }
46
+ // Dynamically generate permissions on each access to support member changes at runtime
47
+ function getPermissions() {
48
+ return generatePermissions();
49
+ }
50
+ // Backwards-compatible getter (used by tests)
51
+ export const PERMISSIONS = new Proxy({}, {
52
+ get(_target, prop) {
53
+ return getPermissions()[prop];
54
+ },
55
+ ownKeys() {
56
+ return Object.keys(getPermissions());
57
+ },
58
+ getOwnPropertyDescriptor(_target, prop) {
59
+ const perms = getPermissions();
60
+ if (prop in perms) {
61
+ return { configurable: true, enumerable: true, value: perms[prop] };
62
+ }
63
+ return undefined;
64
+ },
65
+ });
66
+ export function canSendTo(from, to) {
67
+ const perms = getPermissions();
68
+ return perms[from]?.canSendTo?.includes(to) ?? false;
69
+ }
70
+ export function hasPermission(role, permission) {
71
+ const perms = getPermissions();
72
+ return perms[role]?.[permission] ?? false;
73
+ }
74
+ export const canRequestApproval = (role) => hasPermission(role, 'canRequestApproval');
75
+ export const canProcessApproval = (role) => hasPermission(role, 'canProcessApproval');
76
+ export const canUpdateDashboard = (role) => hasPermission(role, 'canUpdateDashboard');
77
+ export const canRequestMemberIncrease = (role) => hasPermission(role, 'canRequestMemberIncrease');
78
+ export const canRequestMemberDecrease = (role) => hasPermission(role, 'canRequestMemberDecrease');
79
+ export const canAssignTask = (role) => hasPermission(role, 'canAssignTask');
80
+ export const canSubmitPlan = (role) => hasPermission(role, 'canSubmitPlan');
81
+ export const canApprovePlan = (role) => hasPermission(role, 'canApprovePlan');
82
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/config/permissions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface MemberPermissionTemplate {
2
+ canSendTo: string[];
3
+ canRequestApproval: boolean;
4
+ canProcessApproval: boolean;
5
+ canUpdateDashboard: boolean;
6
+ }
7
+ export interface TeamConfig {
8
+ version: string;
9
+ team: {
10
+ fixedRoles: string[];
11
+ members: {
12
+ count: number;
13
+ prefix: string;
14
+ startIndex: number;
15
+ };
16
+ };
17
+ permissionTemplates: {
18
+ member: MemberPermissionTemplate;
19
+ };
20
+ }
21
+ export declare function getTeamConfig(): TeamConfig;
22
+ export declare function getAllRoles(): string[];
23
+ export declare function getMemberRoles(): string[];
24
+ export declare function getFixedRoles(): string[];
25
+ export declare function isValidRole(role: string): boolean;
26
+ export declare function isMemberRole(role: string): boolean;
27
+ export declare function getMemberCount(): number;
28
+ //# sourceMappingURL=team-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-config.d.ts","sourceRoot":"","sources":["../../src/config/team-config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,wBAAwB;IACrC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QACF,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,OAAO,EAAE;YACL,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,MAAM,CAAC;YACf,UAAU,EAAE,MAAM,CAAC;SACtB,CAAC;KACL,CAAC;IACF,mBAAmB,EAAE;QACjB,MAAM,EAAE,wBAAwB,CAAC;KACpC,CAAC;CACL;AAiDD,wBAAgB,aAAa,IAAI,UAAU,CAyB1C;AAeD,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAMtC;AAED,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAGzC;AAED,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAGxC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMjD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGlD;AAED,wBAAgB,cAAc,IAAI,MAAM,CAGvC"}
@@ -0,0 +1,101 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ const DEFAULT_CONFIG = {
4
+ version: '1.0',
5
+ team: {
6
+ fixedRoles: ['pm', 'leader'],
7
+ members: {
8
+ count: 2,
9
+ prefix: 'member-',
10
+ startIndex: 1,
11
+ },
12
+ },
13
+ permissionTemplates: {
14
+ member: {
15
+ canSendTo: ['leader'],
16
+ canRequestApproval: false,
17
+ canProcessApproval: false,
18
+ canUpdateDashboard: false,
19
+ },
20
+ },
21
+ };
22
+ function isValidConfig(config) {
23
+ if (typeof config !== 'object' || config === null) {
24
+ return false;
25
+ }
26
+ const c = config;
27
+ if (!c.team ||
28
+ !c.team.members ||
29
+ typeof c.team.members.count !== 'number' ||
30
+ typeof c.team.members.startIndex !== 'number') {
31
+ return false;
32
+ }
33
+ if (c.team.members.count <= 0) {
34
+ return false;
35
+ }
36
+ if (c.team.members.startIndex < 0) {
37
+ return false;
38
+ }
39
+ return true;
40
+ }
41
+ export function getTeamConfig() {
42
+ const projectPath = process.env.DEV_TEAM_PROJECT_PATH;
43
+ if (!projectPath) {
44
+ return DEFAULT_CONFIG;
45
+ }
46
+ const configPath = path.join(projectPath, '.dev-team', 'config', 'team.json');
47
+ if (!fs.existsSync(configPath)) {
48
+ return DEFAULT_CONFIG;
49
+ }
50
+ try {
51
+ const content = fs.readFileSync(configPath, 'utf-8');
52
+ const parsed = JSON.parse(content);
53
+ if (!isValidConfig(parsed)) {
54
+ return DEFAULT_CONFIG;
55
+ }
56
+ return parsed;
57
+ }
58
+ catch {
59
+ return DEFAULT_CONFIG;
60
+ }
61
+ }
62
+ function generateMemberRoles(config) {
63
+ const { prefix, count, startIndex } = config.team.members;
64
+ const members = [];
65
+ for (let i = 0; i < count; i++) {
66
+ const index = startIndex + i;
67
+ const paddedIndex = index.toString().padStart(2, '0');
68
+ members.push(`${prefix}${paddedIndex}`);
69
+ }
70
+ return members;
71
+ }
72
+ export function getAllRoles() {
73
+ const config = getTeamConfig();
74
+ const fixedRoles = config.team.fixedRoles;
75
+ const memberRoles = generateMemberRoles(config);
76
+ return [...fixedRoles, ...memberRoles];
77
+ }
78
+ export function getMemberRoles() {
79
+ const config = getTeamConfig();
80
+ return generateMemberRoles(config);
81
+ }
82
+ export function getFixedRoles() {
83
+ const config = getTeamConfig();
84
+ return [...config.team.fixedRoles];
85
+ }
86
+ export function isValidRole(role) {
87
+ if (!role) {
88
+ return false;
89
+ }
90
+ const allRoles = getAllRoles();
91
+ return allRoles.includes(role);
92
+ }
93
+ export function isMemberRole(role) {
94
+ const memberRoles = getMemberRoles();
95
+ return memberRoles.includes(role);
96
+ }
97
+ export function getMemberCount() {
98
+ const config = getTeamConfig();
99
+ return config.team.members.count;
100
+ }
101
+ //# sourceMappingURL=team-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-config.js","sourceRoot":"","sources":["../../src/config/team-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}