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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assign-task.d.ts","sourceRoot":"","sources":["../../src/tools/assign-task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAe,YAAY,EAAa,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAWxF,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAUpF;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,GAAE,IAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAoM/G;AAkFD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAavE"}
@@ -0,0 +1,285 @@
1
+ import { addMessage, generateId, addActivity, addTaskToList, updateMemberStatus, getDashboard, linkParentChild } from '../utils/queue.js';
2
+ import { notifyRole, sendTextToPane } from '../utils/wezterm.js';
3
+ import { getCurrentRole, isValidRole, validateLeaderOnly } from '../utils/permission.js';
4
+ import { validateRequiredString, validateRequiredArray } from '../utils/validation.js';
5
+ import { info, error } from '../utils/logger.js';
6
+ import { isMemberRole } from '../config/team-config.js';
7
+ import { recalculateDashboardTasks } from '../utils/task-manager.js';
8
+ import { getProjectContext, updateProjectContext, parseCurrentStateSections, generateCurrentStateMarkdown, getReviewMode } from '../utils/memory.js';
9
+ /**
10
+ * 外部向け assignTask(MCPツールとして公開)
11
+ * leader からのみ呼び出し可能
12
+ */
13
+ export async function assignTask(params) {
14
+ const from = getCurrentRole();
15
+ // Validate that caller is leader
16
+ const leaderCheck = validateLeaderOnly(from, 'assign_task');
17
+ if (!leaderCheck.allowed) {
18
+ return { success: false, error: leaderCheck.reason, notified: false };
19
+ }
20
+ return assignTaskCore(params, from);
21
+ }
22
+ /**
23
+ * 内部向け assignTaskCore(権限チェックなし)
24
+ * process-approval.ts など内部から呼び出す用
25
+ */
26
+ export async function assignTaskCore(params, from = 'leader') {
27
+ // Validate target is a member
28
+ if (!isValidRole(params.to)) {
29
+ return {
30
+ success: false,
31
+ error: `無効な送信先: ${params.to}`,
32
+ notified: false,
33
+ };
34
+ }
35
+ if (!isMemberRole(params.to)) {
36
+ return {
37
+ success: false,
38
+ error: `assign_taskはmemberにのみ送信可能です。送信先: ${params.to}`,
39
+ notified: false,
40
+ };
41
+ }
42
+ const to = params.to;
43
+ // Validate required fields
44
+ for (const [field, value] of [['title', params.title], ['description', params.description]]) {
45
+ const check = validateRequiredString(value, field);
46
+ if (!check.valid) {
47
+ return { success: false, error: check.error, notified: false };
48
+ }
49
+ }
50
+ const criteriaCheck = validateRequiredArray(params.acceptance_criteria, 'acceptance_criteria');
51
+ if (!criteriaCheck.valid) {
52
+ return { success: false, error: criteriaCheck.error, notified: false };
53
+ }
54
+ // 調査タスク以外はallowed_filesが必須
55
+ const isInvestigation = params.task_type === 'investigation';
56
+ if (!isInvestigation) {
57
+ const filesCheck = validateRequiredArray(params.allowed_files, 'allowed_files');
58
+ if (!filesCheck.valid) {
59
+ return { success: false, error: 'allowed_filesは1つ以上の変更許可ファイルが必須です(調査タスクを除く)', notified: false };
60
+ }
61
+ }
62
+ // 調査タスクはallowed_filesを空配列に正規化(編集禁止)
63
+ if (isInvestigation && !params.allowed_files) {
64
+ params.allowed_files = [];
65
+ }
66
+ try {
67
+ // parent_task_idが未指定の場合、leaderのcurrentTaskを自動設定
68
+ let effectiveParentId = params.parent_task_id;
69
+ if (!effectiveParentId) {
70
+ const dashboard = await getDashboard({ readOnly: true });
71
+ const leaderCurrentTask = dashboard.memberStatus['leader']?.currentTask?.id;
72
+ if (leaderCurrentTask) {
73
+ effectiveParentId = leaderCurrentTask;
74
+ info(`Auto-setting parent_task_id to leader's current task: ${leaderCurrentTask}`);
75
+ }
76
+ }
77
+ const taskId = await generateId();
78
+ // 調査タスクかどうかを判定
79
+ const isInvestigationTask = params.task_type === 'investigation';
80
+ // レビューモードを取得
81
+ const reviewMode = await getReviewMode();
82
+ // Create structured message content
83
+ const content = formatTaskContent(taskId, params, isInvestigationTask, reviewMode);
84
+ const message = {
85
+ id: taskId,
86
+ type: 'task',
87
+ from,
88
+ to,
89
+ subject: params.title,
90
+ content,
91
+ timestamp: new Date().toISOString(),
92
+ read: false,
93
+ };
94
+ // 実装タスク(implementation or undefined)の場合、タスク送信前に/compactを送る
95
+ // メンバーは入力待ち状態なので確実に実行される
96
+ const effectiveTaskType = params.task_type ?? 'implementation';
97
+ if (effectiveTaskType === 'implementation') {
98
+ try {
99
+ await sendTextToPane(to, '/compact');
100
+ info(`Auto-compact sent to ${to} before task assignment`);
101
+ }
102
+ catch (err) {
103
+ error(`Failed to send auto-compact to ${to}`, err);
104
+ // compact送信失敗はタスク割り当てには影響させない
105
+ }
106
+ }
107
+ // Add message to queue
108
+ await addMessage(to, message);
109
+ // Log activity
110
+ await addActivity({
111
+ role: from,
112
+ action: 'assign_task',
113
+ details: `Assigned task to ${to}: ${params.title}`,
114
+ });
115
+ info(`Task assigned from ${from} to ${to}`, { taskId, subject: params.title });
116
+ // Add to task list with phase = 'planning' (or 'implementing' for investigation)
117
+ const initialPhase = isInvestigationTask ? 'implementing' : 'planning';
118
+ const taskSummary = {
119
+ id: taskId,
120
+ title: params.title,
121
+ status: 'pending',
122
+ assignee: to,
123
+ priority: params.priority ?? 'medium',
124
+ createdAt: message.timestamp,
125
+ parentMessageId: taskId,
126
+ // 計画モード用フィールド(調査タスクはimplementingで開始)
127
+ phase: initialPhase,
128
+ description: params.description,
129
+ acceptanceCriteria: params.acceptance_criteria,
130
+ allowedFiles: params.allowed_files,
131
+ forbiddenFiles: params.forbidden_files,
132
+ // 親タスクID(自動設定または明示的指定)
133
+ parentTaskId: effectiveParentId,
134
+ // タスク種別(デフォルト: implementation)
135
+ taskType: params.task_type ?? 'implementation',
136
+ };
137
+ await addTaskToList(taskSummary);
138
+ await recalculateDashboardTasks();
139
+ // 親子関係を設定(effectiveParentIdが設定されている場合)
140
+ if (effectiveParentId) {
141
+ try {
142
+ await linkParentChild(effectiveParentId, taskId);
143
+ info(`Linked task ${taskId} as child of ${effectiveParentId}`);
144
+ }
145
+ catch (err) {
146
+ error('Failed to link parent-child relationship', err);
147
+ // 親子関係の設定失敗はタスク作成自体には影響させない
148
+ }
149
+ }
150
+ // Update receiver's status
151
+ try {
152
+ await updateMemberStatus(to, {
153
+ status: 'working',
154
+ lastActivity: new Date().toISOString(),
155
+ currentTask: {
156
+ id: taskId,
157
+ title: params.title,
158
+ startedAt: message.timestamp,
159
+ },
160
+ hasReceivedTaskThisSession: true, // セッション中にタスクを受け取ったことを記録
161
+ });
162
+ }
163
+ catch (err) {
164
+ error('Failed to update receiver status', err);
165
+ }
166
+ // Notify the recipient via WezTerm
167
+ let notified = false;
168
+ try {
169
+ notified = await notifyRole(to, `New task from ${from}`);
170
+ }
171
+ catch (err) {
172
+ error('Failed to notify recipient', err);
173
+ }
174
+ // Update current_state with new task
175
+ try {
176
+ await updateCurrentStateWithNewTask(to, taskId, params.title, initialPhase);
177
+ }
178
+ catch (err) {
179
+ error('Failed to update current_state', err);
180
+ // current_state更新失敗はタスク作成には影響させない
181
+ }
182
+ // Update leader status to idle after successful task assignment
183
+ try {
184
+ await updateMemberStatus('leader', {
185
+ status: 'idle',
186
+ lastActivity: new Date().toISOString(),
187
+ currentTask: undefined,
188
+ });
189
+ }
190
+ catch (err) {
191
+ error('Failed to update leader status to idle', err);
192
+ }
193
+ return {
194
+ success: true,
195
+ taskId,
196
+ notified,
197
+ };
198
+ }
199
+ catch (err) {
200
+ error('Failed to assign task', err);
201
+ return {
202
+ success: false,
203
+ error: err instanceof Error ? err.message : 'Unknown error',
204
+ notified: false,
205
+ };
206
+ }
207
+ }
208
+ function formatTaskContent(taskId, params, isInvestigation = false, reviewMode = 'normal') {
209
+ let content = `## タスク: ${params.title}\n\n`;
210
+ content += `**タスクID: ${taskId}**\n\n`;
211
+ if (isInvestigation) {
212
+ content += `**タスク種別: 調査**\n\n`;
213
+ }
214
+ // strictモードの場合、目立つ警告を追加
215
+ if (reviewMode === 'strict' && !isInvestigation) {
216
+ content += `⚠️ **【strictモード】** テストコードを先に実装し、テストレビューを受けてから実装を進めてください。\n\n`;
217
+ }
218
+ content += `### 詳細説明\n${params.description}\n\n`;
219
+ content += `### 完了条件\n`;
220
+ for (const criteria of params.acceptance_criteria) {
221
+ content += `- [ ] ${criteria}\n`;
222
+ }
223
+ // 調査タスクはallowed_files/forbidden_filesを表示しない(編集禁止のため)
224
+ if (!isInvestigation) {
225
+ content += `\n### 変更許可ファイル\n`;
226
+ for (const file of params.allowed_files) {
227
+ content += `- ${file}\n`;
228
+ }
229
+ if (params.forbidden_files && params.forbidden_files.length > 0) {
230
+ content += `\n### 禁止ファイル(触るな)\n`;
231
+ for (const file of params.forbidden_files) {
232
+ content += `- ${file}\n`;
233
+ }
234
+ }
235
+ }
236
+ content += `\n---\n`;
237
+ if (isInvestigation) {
238
+ content += `**重要**: これは調査タスクです。計画提出(submit_plan)は不要です。調査完了後、\`send_task(type='report')\` で結果を報告してください。\n`;
239
+ content += `**注意**: ファイルの編集は禁止です。読み取りのみ許可されています。`;
240
+ }
241
+ else if (reviewMode === 'strict') {
242
+ content += `**重要**: 実装前に必ず \`submit_plan\` で計画を提出してください。\n`;
243
+ content += `**strictモード手順**: 計画承認後 → テストコード実装 → テストレビュー依頼 → テスト承認後 → 実装コード作成`;
244
+ }
245
+ else {
246
+ content += `**重要**: 実装前に必ず \`submit_plan\` で計画を提出してください。承認後に実装を開始してください。`;
247
+ }
248
+ return content;
249
+ }
250
+ /**
251
+ * current_stateに新しいタスク情報を追加する
252
+ * 既存の他メンバーのタスク情報は保持する
253
+ */
254
+ async function updateCurrentStateWithNewTask(assignee, taskId, title, phase) {
255
+ const context = await getProjectContext();
256
+ const currentState = context.currentState || '';
257
+ const now = new Date().toISOString();
258
+ // 既存のメンバーセクションをパース
259
+ const memberSections = parseCurrentStateSections(currentState);
260
+ // 新しいタスク情報を作成
261
+ memberSections[assignee] = {
262
+ taskId,
263
+ title,
264
+ phase,
265
+ startTime: now,
266
+ };
267
+ // Markdownを再生成
268
+ const newContent = generateCurrentStateMarkdown(memberSections, now);
269
+ // current_stateを更新
270
+ await updateProjectContext('current_state', newContent, false);
271
+ info(`Updated current_state with task ${taskId} for ${assignee}`);
272
+ }
273
+ export function formatAssignTaskResult(result) {
274
+ if (!result.success) {
275
+ return `❌ タスク割り当てに失敗しました: ${result.error}`;
276
+ }
277
+ let output = `✅ タスクを割り当てました。\n`;
278
+ output += `Task ID: ${result.taskId}\n`;
279
+ output += `Phase: planning(計画待ち)\n`;
280
+ output += result.notified
281
+ ? `📢 受信者に通知しました。`
282
+ : `⚠️ 受信者への通知に失敗しました。`;
283
+ return output;
284
+ }
285
+ //# sourceMappingURL=assign-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assign-task.js","sourceRoot":"","sources":["../../src/tools/assign-task.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export type QueueFormat = 'full' | 'summary';
2
+ export interface CheckQueueResult {
3
+ role: string;
4
+ unreadCount: number;
5
+ messages: Array<{
6
+ id: string;
7
+ type: string;
8
+ from: string;
9
+ subject: string;
10
+ content: string;
11
+ timestamp: string;
12
+ }>;
13
+ totalMessages: number;
14
+ format?: QueueFormat;
15
+ }
16
+ export declare function checkQueue(markAsRead?: boolean, format?: QueueFormat): Promise<CheckQueueResult>;
17
+ export declare function formatQueueResult(result: CheckQueueResult): string;
18
+ //# sourceMappingURL=check-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-queue.d.ts","sourceRoot":"","sources":["../../src/tools/check-queue.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,wBAAsB,UAAU,CAAC,UAAU,GAAE,OAAc,EAAE,MAAM,GAAE,WAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0FpH;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAclE"}
@@ -0,0 +1,129 @@
1
+ import { readQueue, markMessageRead, updateMemberStatus, updateTaskInList, withDashboardTransaction } from '../utils/queue.js';
2
+ import { getCurrentRole } from '../utils/permission.js';
3
+ import { info, error } from '../utils/logger.js';
4
+ import { getNextStatus } from '../utils/status-transition.js';
5
+ import { recalculateDashboardTasks } from '../utils/task-manager.js';
6
+ export async function checkQueue(markAsRead = true, format = 'full') {
7
+ const role = getCurrentRole();
8
+ info(`Checking queue for ${role}`);
9
+ const queue = await readQueue(role);
10
+ const unreadMessages = queue.messages.filter(m => !m.read);
11
+ // Update member status using state transition utility (not for pm)
12
+ // Important: working/waiting states should NOT be overwritten by check_queue
13
+ if (role !== 'pm') {
14
+ try {
15
+ // リーダーの場合はquestionタイプ(submit_plan等)も「仕事がある」として扱う
16
+ const workTypes = role === 'leader' ? ['task', 'question'] : ['task'];
17
+ const unreadTasks = unreadMessages.filter(m => workTypes.includes(m.type));
18
+ const latestTask = unreadTasks.length > 0 ? unreadTasks[unreadTasks.length - 1] : null;
19
+ // 1回のトランザクションで全dashboard操作をまとめて実行
20
+ await withDashboardTransaction(async (dashboard) => {
21
+ const currentStatus = (dashboard.memberStatus[role]?.status ?? 'offline');
22
+ // Determine event based on presence of new tasks
23
+ const event = latestTask ? 'check_queue_with_task' : 'check_queue_empty';
24
+ const newStatus = getNextStatus(currentStatus, event);
25
+ // Phase 3: タスク取得時にtaskListのステータスをin_progressに更新
26
+ if (latestTask) {
27
+ const taskInList = dashboard.taskList.find(t => t.id === latestTask.id);
28
+ if (taskInList && taskInList.status === 'pending') {
29
+ await updateTaskInList(latestTask.id, {
30
+ status: 'in_progress',
31
+ startedAt: new Date().toISOString(),
32
+ }, dashboard);
33
+ await recalculateDashboardTasks(dashboard);
34
+ info(`Task ${latestTask.id} started via check_queue by ${role}`);
35
+ }
36
+ }
37
+ // Only update if there's a valid transition (newStatus !== null)
38
+ if (newStatus !== null) {
39
+ await updateMemberStatus(role, {
40
+ status: newStatus,
41
+ lastActivity: new Date().toISOString(),
42
+ ...(latestTask ? {
43
+ currentTask: {
44
+ id: latestTask.id,
45
+ title: latestTask.subject,
46
+ startedAt: new Date().toISOString(),
47
+ }
48
+ } : {}),
49
+ }, dashboard);
50
+ info(`Member ${role} status transitioned: ${currentStatus} -> ${newStatus} (event: ${event})`);
51
+ }
52
+ else if (latestTask) {
53
+ // Even if status doesn't change, update currentTask if there's a new task
54
+ await updateMemberStatus(role, {
55
+ lastActivity: new Date().toISOString(),
56
+ currentTask: {
57
+ id: latestTask.id,
58
+ title: latestTask.subject,
59
+ startedAt: new Date().toISOString(),
60
+ },
61
+ }, dashboard);
62
+ info(`Member ${role} status maintained: ${currentStatus} (event: ${event}), updated currentTask`);
63
+ }
64
+ });
65
+ }
66
+ catch (err) {
67
+ error('Failed to update member status', err);
68
+ }
69
+ }
70
+ // Optionally mark messages as read
71
+ if (markAsRead) {
72
+ for (const message of unreadMessages) {
73
+ await markMessageRead(role, message.id);
74
+ }
75
+ }
76
+ return {
77
+ role,
78
+ unreadCount: unreadMessages.length,
79
+ messages: unreadMessages.map(m => ({
80
+ id: m.id,
81
+ type: m.type,
82
+ from: m.from,
83
+ subject: m.subject,
84
+ content: m.content,
85
+ timestamp: m.timestamp,
86
+ })),
87
+ totalMessages: queue.messages.length,
88
+ format,
89
+ };
90
+ }
91
+ export function formatQueueResult(result) {
92
+ const format = result.format ?? 'full';
93
+ if (result.unreadCount === 0) {
94
+ return `📭 キューは空です。新しいメッセージはありません。\n\n総メッセージ数: ${result.totalMessages}`;
95
+ }
96
+ // Summary mode: 件名一覧のみ
97
+ if (format === 'summary') {
98
+ return formatQueueSummary(result);
99
+ }
100
+ // Full mode: 全メッセージ展開(現行動作)
101
+ return formatQueueFull(result);
102
+ }
103
+ /**
104
+ * Summary mode: 件名一覧のみ
105
+ */
106
+ function formatQueueSummary(result) {
107
+ let output = `📬 ${result.unreadCount}件の未読メッセージ:\n`;
108
+ for (const msg of result.messages) {
109
+ output += `- [${msg.id}] ${msg.type}: ${msg.subject} (from: ${msg.from})\n`;
110
+ }
111
+ output += `\n詳細を見るには format='full' で再取得してください。`;
112
+ return output;
113
+ }
114
+ /**
115
+ * Full mode: 全メッセージ展開(現行動作)
116
+ */
117
+ function formatQueueFull(result) {
118
+ let output = `📬 ${result.unreadCount}件の未読メッセージがあります。\n\n`;
119
+ for (const msg of result.messages) {
120
+ output += `---\n`;
121
+ output += `📨 **${msg.subject}**\n`;
122
+ output += `ID: ${msg.id} | From: ${msg.from} | Type: ${msg.type}\n`;
123
+ output += `Time: ${msg.timestamp}\n\n`;
124
+ output += `${msg.content}\n\n`;
125
+ }
126
+ output += `---\n総メッセージ数: ${result.totalMessages}`;
127
+ return output;
128
+ }
129
+ //# sourceMappingURL=check-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-queue.js","sourceRoot":"","sources":["../../src/tools/check-queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface ClearAgentResult {
2
+ success: boolean;
3
+ role?: string;
4
+ error?: string;
5
+ }
6
+ export declare function clearAgent(role: string): Promise<ClearAgentResult>;
7
+ export declare function formatClearAgentResult(result: ClearAgentResult): string;
8
+ //# sourceMappingURL=clear-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear-agent.d.ts","sourceRoot":"","sources":["../../src/tools/clear-agent.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0CxE;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAKvE"}
@@ -0,0 +1,52 @@
1
+ import { sendTextToPane } from '../utils/wezterm.js';
2
+ import { getCurrentRole, isValidRole } from '../utils/permission.js';
3
+ import { info, error } from '../utils/logger.js';
4
+ export async function clearAgent(role) {
5
+ const currentRole = getCurrentRole();
6
+ // Permission check: PM and leader only
7
+ if (currentRole !== 'pm' && currentRole !== 'leader') {
8
+ return {
9
+ success: false,
10
+ error: 'このツールはPMとleaderのみが使用できます',
11
+ };
12
+ }
13
+ // Validate target role
14
+ if (!isValidRole(role)) {
15
+ return {
16
+ success: false,
17
+ error: `無効なロール: ${role}`,
18
+ };
19
+ }
20
+ try {
21
+ const sent = await sendTextToPane(role, '/clear');
22
+ if (sent) {
23
+ info(`Clear command sent to ${role}`);
24
+ return {
25
+ success: true,
26
+ role,
27
+ };
28
+ }
29
+ else {
30
+ return {
31
+ success: false,
32
+ role,
33
+ error: `${role}へのclear送信に失敗しました`,
34
+ };
35
+ }
36
+ }
37
+ catch (err) {
38
+ error(`Failed to send clear to ${role}`, err);
39
+ return {
40
+ success: false,
41
+ role,
42
+ error: err instanceof Error ? err.message : 'Unknown error',
43
+ };
44
+ }
45
+ }
46
+ export function formatClearAgentResult(result) {
47
+ if (!result.success) {
48
+ return `❌ clear送信に失敗しました: ${result.error}`;
49
+ }
50
+ return `✅ ${result.role}に/clearを送信しました。`;
51
+ }
52
+ //# sourceMappingURL=clear-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear-agent.js","sourceRoot":"","sources":["../../src/tools/clear-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAQjD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IACzC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,uCAAuC;IACvC,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QACnD,OAAO;YACH,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,0BAA0B;SACpC,CAAC;IACN,CAAC;IAED,uBAAuB;IACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO;YACH,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,WAAW,IAAI,EAAE;SAC3B,CAAC;IACN,CAAC;IAED,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAY,EAAE,QAAQ,CAAC,CAAC;QAC1D,IAAI,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;YACtC,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,IAAI;aACP,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,IAAI;gBACJ,KAAK,EAAE,GAAG,IAAI,kBAAkB;aACnC,CAAC;QACN,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,KAAK,CAAC,2BAA2B,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QAC9C,OAAO;YACH,OAAO,EAAE,KAAK;YACd,IAAI;YACJ,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAC9D,CAAC;IACN,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAwB;IAC3D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,qBAAqB,MAAM,CAAC,KAAK,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,KAAK,MAAM,CAAC,IAAI,iBAAiB,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface CompactAgentResult {
2
+ success: boolean;
3
+ role?: string;
4
+ error?: string;
5
+ }
6
+ export declare function compactAgent(role: string): Promise<CompactAgentResult>;
7
+ export declare function formatCompactAgentResult(result: CompactAgentResult): string;
8
+ //# sourceMappingURL=compact-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compact-agent.d.ts","sourceRoot":"","sources":["../../src/tools/compact-agent.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0C5E;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAK3E"}
@@ -0,0 +1,52 @@
1
+ import { sendTextToPane } from '../utils/wezterm.js';
2
+ import { getCurrentRole, isValidRole } from '../utils/permission.js';
3
+ import { info, error } from '../utils/logger.js';
4
+ export async function compactAgent(role) {
5
+ const currentRole = getCurrentRole();
6
+ // Permission check: PM and leader only
7
+ if (currentRole !== 'pm' && currentRole !== 'leader') {
8
+ return {
9
+ success: false,
10
+ error: 'このツールはPMとleaderのみが使用できます',
11
+ };
12
+ }
13
+ // Validate target role
14
+ if (!isValidRole(role)) {
15
+ return {
16
+ success: false,
17
+ error: `無効なロール: ${role}`,
18
+ };
19
+ }
20
+ try {
21
+ const sent = await sendTextToPane(role, '/compact');
22
+ if (sent) {
23
+ info(`Compact command sent to ${role}`);
24
+ return {
25
+ success: true,
26
+ role,
27
+ };
28
+ }
29
+ else {
30
+ return {
31
+ success: false,
32
+ role,
33
+ error: `${role}へのcompact送信に失敗しました`,
34
+ };
35
+ }
36
+ }
37
+ catch (err) {
38
+ error(`Failed to send compact to ${role}`, err);
39
+ return {
40
+ success: false,
41
+ role,
42
+ error: err instanceof Error ? err.message : 'Unknown error',
43
+ };
44
+ }
45
+ }
46
+ export function formatCompactAgentResult(result) {
47
+ if (!result.success) {
48
+ return `❌ compact送信に失敗しました: ${result.error}`;
49
+ }
50
+ return `✅ ${result.role}に/compactを送信しました。`;
51
+ }
52
+ //# sourceMappingURL=compact-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compact-agent.js","sourceRoot":"","sources":["../../src/tools/compact-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAQjD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY;IAC3C,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,uCAAuC;IACvC,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QACnD,OAAO;YACH,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,0BAA0B;SACpC,CAAC;IACN,CAAC;IAED,uBAAuB;IACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO;YACH,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,WAAW,IAAI,EAAE;SAC3B,CAAC;IACN,CAAC;IAED,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAY,EAAE,UAAU,CAAC,CAAC;QAC5D,IAAI,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;YACxC,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,IAAI;aACP,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,IAAI;gBACJ,KAAK,EAAE,GAAG,IAAI,oBAAoB;aACrC,CAAC;QACN,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,KAAK,CAAC,6BAA6B,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QAChD,OAAO;YACH,OAAO,EAAE,KAAK;YACd,IAAI;YACJ,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAC9D,CAAC;IACN,CAAC;AACL,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAA0B;IAC/D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,uBAAuB,MAAM,CAAC,KAAK,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,MAAM,CAAC,IAAI,mBAAmB,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface CompactAllResult {
2
+ success: boolean;
3
+ results: Array<{
4
+ role: string;
5
+ sent: boolean;
6
+ }>;
7
+ error?: string;
8
+ }
9
+ export declare function compactAll(): Promise<CompactAllResult>;
10
+ export declare function formatCompactAllResult(result: CompactAllResult): string;
11
+ //# sourceMappingURL=compact-all.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compact-all.d.ts","sourceRoot":"","sources":["../../src/tools/compact-all.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC,CA6C5D;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAgBvE"}