devchain-cli 0.6.0 → 0.7.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 (170) hide show
  1. package/dist/drizzle/0024_review_tables.sql +71 -0
  2. package/dist/drizzle/0025_reviews_mode_and_nullable_shas.sql +80 -0
  3. package/dist/drizzle/0026_review_comments_edited_at.sql +2 -0
  4. package/dist/drizzle/meta/_journal.json +22 -1
  5. package/dist/node_modules/@devchain/shared/tsconfig.tsbuildinfo +1 -1
  6. package/dist/server/common/errors/error-types.d.ts +3 -0
  7. package/dist/server/common/errors/error-types.js +7 -1
  8. package/dist/server/common/errors/error-types.js.map +1 -1
  9. package/dist/server/common/validation/path-validation.d.ts +11 -0
  10. package/dist/server/common/validation/path-validation.js +197 -0
  11. package/dist/server/common/validation/path-validation.js.map +1 -0
  12. package/dist/server/modules/chat/dtos/chat.dto.d.ts +13 -13
  13. package/dist/server/modules/core/core.module.js +3 -2
  14. package/dist/server/modules/core/core.module.js.map +1 -1
  15. package/dist/server/modules/core/services/preflight.service.d.ts +1 -3
  16. package/dist/server/modules/core/services/preflight.service.js +2 -28
  17. package/dist/server/modules/core/services/preflight.service.js.map +1 -1
  18. package/dist/server/modules/core/services/provider-mcp-ensure.service.d.ts +26 -0
  19. package/dist/server/modules/core/services/provider-mcp-ensure.service.js +224 -0
  20. package/dist/server/modules/core/services/provider-mcp-ensure.service.js.map +1 -0
  21. package/dist/server/modules/epics/controllers/epics.controller.d.ts +3 -2
  22. package/dist/server/modules/epics/controllers/epics.controller.js +16 -6
  23. package/dist/server/modules/epics/controllers/epics.controller.js.map +1 -1
  24. package/dist/server/modules/events/catalog/epic.created.d.ts +2 -2
  25. package/dist/server/modules/events/catalog/index.d.ts +340 -2
  26. package/dist/server/modules/events/catalog/index.js +12 -0
  27. package/dist/server/modules/events/catalog/index.js.map +1 -1
  28. package/dist/server/modules/events/catalog/review.comment.created.d.ts +69 -0
  29. package/dist/server/modules/events/catalog/review.comment.created.js +30 -0
  30. package/dist/server/modules/events/catalog/review.comment.created.js.map +1 -0
  31. package/dist/server/modules/events/catalog/review.comment.deleted.d.ts +30 -0
  32. package/dist/server/modules/events/catalog/review.comment.deleted.js +17 -0
  33. package/dist/server/modules/events/catalog/review.comment.deleted.js.map +1 -0
  34. package/dist/server/modules/events/catalog/review.comment.resolved.d.ts +30 -0
  35. package/dist/server/modules/events/catalog/review.comment.resolved.js +17 -0
  36. package/dist/server/modules/events/catalog/review.comment.resolved.js.map +1 -0
  37. package/dist/server/modules/events/catalog/review.comment.updated.d.ts +39 -0
  38. package/dist/server/modules/events/catalog/review.comment.updated.js +20 -0
  39. package/dist/server/modules/events/catalog/review.comment.updated.js.map +1 -0
  40. package/dist/server/modules/events/catalog/review.created.d.ts +90 -0
  41. package/dist/server/modules/events/catalog/review.created.js +40 -0
  42. package/dist/server/modules/events/catalog/review.created.js.map +1 -0
  43. package/dist/server/modules/events/catalog/review.updated.d.ts +110 -0
  44. package/dist/server/modules/events/catalog/review.updated.js +35 -0
  45. package/dist/server/modules/events/catalog/review.updated.js.map +1 -0
  46. package/dist/server/modules/events/subscribers/index.js +4 -0
  47. package/dist/server/modules/events/subscribers/index.js.map +1 -1
  48. package/dist/server/modules/events/subscribers/review-broadcaster.subscriber.d.ts +16 -0
  49. package/dist/server/modules/events/subscribers/review-broadcaster.subscriber.js +163 -0
  50. package/dist/server/modules/events/subscribers/review-broadcaster.subscriber.js.map +1 -0
  51. package/dist/server/modules/events/subscribers/review-comment-notifier.subscriber.d.ts +23 -0
  52. package/dist/server/modules/events/subscribers/review-comment-notifier.subscriber.js +217 -0
  53. package/dist/server/modules/events/subscribers/review-comment-notifier.subscriber.js.map +1 -0
  54. package/dist/server/modules/git/controllers/git.controller.d.ts +24 -0
  55. package/dist/server/modules/git/controllers/git.controller.js +230 -0
  56. package/dist/server/modules/git/controllers/git.controller.js.map +1 -0
  57. package/dist/server/modules/git/dtos/git.dto.d.ts +86 -0
  58. package/dist/server/modules/git/dtos/git.dto.js +36 -0
  59. package/dist/server/modules/git/dtos/git.dto.js.map +1 -0
  60. package/dist/server/modules/git/git.module.d.ts +2 -0
  61. package/dist/server/modules/git/git.module.js +25 -0
  62. package/dist/server/modules/git/git.module.js.map +1 -0
  63. package/dist/server/modules/git/services/git.service.d.ts +71 -0
  64. package/dist/server/modules/git/services/git.service.js +550 -0
  65. package/dist/server/modules/git/services/git.service.js.map +1 -0
  66. package/dist/server/modules/mcp/controllers/mcp-http.controller.js +17 -562
  67. package/dist/server/modules/mcp/controllers/mcp-http.controller.js.map +1 -1
  68. package/dist/server/modules/mcp/controllers/mcp-sdk.controller.js +9 -568
  69. package/dist/server/modules/mcp/controllers/mcp-sdk.controller.js.map +1 -1
  70. package/dist/server/modules/mcp/dtos/mcp.dto.d.ts +226 -36
  71. package/dist/server/modules/mcp/dtos/mcp.dto.js +158 -50
  72. package/dist/server/modules/mcp/dtos/mcp.dto.js.map +1 -1
  73. package/dist/server/modules/mcp/dtos/schema-registry.d.ts +7 -0
  74. package/dist/server/modules/mcp/dtos/schema-registry.js +56 -0
  75. package/dist/server/modules/mcp/dtos/schema-registry.js.map +1 -0
  76. package/dist/server/modules/mcp/mcp.module.js +2 -0
  77. package/dist/server/modules/mcp/mcp.module.js.map +1 -1
  78. package/dist/server/modules/mcp/services/mcp.service.d.ts +9 -1
  79. package/dist/server/modules/mcp/services/mcp.service.js +702 -33
  80. package/dist/server/modules/mcp/services/mcp.service.js.map +1 -1
  81. package/dist/server/modules/mcp/tool-definitions.d.ts +2438 -0
  82. package/dist/server/modules/mcp/tool-definitions.js +727 -0
  83. package/dist/server/modules/mcp/tool-definitions.js.map +1 -0
  84. package/dist/server/modules/mcp/utils/param-suggestion.d.ts +3 -0
  85. package/dist/server/modules/mcp/utils/param-suggestion.js +95 -0
  86. package/dist/server/modules/mcp/utils/param-suggestion.js.map +1 -0
  87. package/dist/server/modules/providers/controllers/providers.controller.d.ts +7 -6
  88. package/dist/server/modules/providers/controllers/providers.controller.js +12 -107
  89. package/dist/server/modules/providers/controllers/providers.controller.js.map +1 -1
  90. package/dist/server/modules/reviews/controllers/reviews.controller.d.ts +28 -0
  91. package/dist/server/modules/reviews/controllers/reviews.controller.js +369 -0
  92. package/dist/server/modules/reviews/controllers/reviews.controller.js.map +1 -0
  93. package/dist/server/modules/reviews/dtos/review.dto.d.ts +195 -0
  94. package/dist/server/modules/reviews/dtos/review.dto.js +92 -0
  95. package/dist/server/modules/reviews/dtos/review.dto.js.map +1 -0
  96. package/dist/server/modules/reviews/reviews.module.d.ts +2 -0
  97. package/dist/server/modules/reviews/reviews.module.js +27 -0
  98. package/dist/server/modules/reviews/reviews.module.js.map +1 -0
  99. package/dist/server/modules/reviews/services/reviews.service.d.ts +86 -0
  100. package/dist/server/modules/reviews/services/reviews.service.js +464 -0
  101. package/dist/server/modules/reviews/services/reviews.service.js.map +1 -0
  102. package/dist/server/modules/reviews/utils/notification-formatter.d.ts +12 -0
  103. package/dist/server/modules/reviews/utils/notification-formatter.js +60 -0
  104. package/dist/server/modules/reviews/utils/notification-formatter.js.map +1 -0
  105. package/dist/server/modules/sessions/services/sessions.service.d.ts +3 -1
  106. package/dist/server/modules/sessions/services/sessions.service.js +32 -2
  107. package/dist/server/modules/sessions/services/sessions.service.js.map +1 -1
  108. package/dist/server/modules/storage/db/schema.d.ts +697 -0
  109. package/dist/server/modules/storage/db/schema.js +71 -1
  110. package/dist/server/modules/storage/db/schema.js.map +1 -1
  111. package/dist/server/modules/storage/interfaces/storage.interface.d.ts +23 -1
  112. package/dist/server/modules/storage/interfaces/storage.interface.js.map +1 -1
  113. package/dist/server/modules/storage/local/local-storage.service.d.ts +15 -2
  114. package/dist/server/modules/storage/local/local-storage.service.js +396 -7
  115. package/dist/server/modules/storage/local/local-storage.service.js.map +1 -1
  116. package/dist/server/modules/storage/models/domain.models.d.ts +62 -0
  117. package/dist/server/templates/claude-codex-advanced-swe.json +139 -0
  118. package/dist/server/templates/claude-codex-advanced.json +82 -82
  119. package/dist/server/templates/claude-opus.json +99 -99
  120. package/dist/server/templates/claude-swe-single.json +105 -0
  121. package/dist/server/templates/simple-codex.json +70 -70
  122. package/dist/server/test-setup.js +45 -0
  123. package/dist/server/test-setup.js.map +1 -1
  124. package/dist/server/tsconfig.tsbuildinfo +1 -1
  125. package/dist/server/ui/assets/ReviewDetailPage-I54h-2L-.js +6 -0
  126. package/dist/server/ui/assets/ReviewsPage-B4ua5hiX.js +19 -0
  127. package/dist/server/ui/assets/index-CqcmnFBh.css +32 -0
  128. package/dist/server/ui/assets/index-JbUMpbg7.js +858 -0
  129. package/dist/server/ui/assets/useReviewSubscription-C0GEsiRw.js +83 -0
  130. package/dist/server/ui/assets/useReviewSubscription-T3uj2-aP.css +1 -0
  131. package/dist/server/ui/index.html +2 -2
  132. package/dist/templates/claude-codex-advanced-swe.json +139 -0
  133. package/dist/templates/claude-codex-advanced.json +82 -82
  134. package/dist/templates/claude-opus.json +99 -99
  135. package/dist/templates/claude-swe-single.json +105 -0
  136. package/dist/templates/simple-codex.json +70 -70
  137. package/package.json +16 -3
  138. package/prebuilds/node-pty/darwin-arm64/pty.node +0 -0
  139. package/prebuilds/node-pty/darwin-arm64/spawn-helper +0 -0
  140. package/prebuilds/node-pty/darwin-x64/pty.node +0 -0
  141. package/prebuilds/node-pty/darwin-x64/spawn-helper +0 -0
  142. package/prebuilds/node-pty/linux-arm64/pty.node +0 -0
  143. package/prebuilds/node-pty/linux-x64/pty.node +0 -0
  144. package/prebuilds/node-pty/win32-arm64/conpty/OpenConsole.exe +0 -0
  145. package/prebuilds/node-pty/win32-arm64/conpty/conpty.dll +0 -0
  146. package/prebuilds/node-pty/win32-arm64/conpty.node +0 -0
  147. package/prebuilds/node-pty/win32-arm64/conpty.pdb +0 -0
  148. package/prebuilds/node-pty/win32-arm64/conpty_console_list.node +0 -0
  149. package/prebuilds/node-pty/win32-arm64/conpty_console_list.pdb +0 -0
  150. package/prebuilds/node-pty/win32-arm64/pty.node +0 -0
  151. package/prebuilds/node-pty/win32-arm64/pty.pdb +0 -0
  152. package/prebuilds/node-pty/win32-arm64/winpty-agent.exe +0 -0
  153. package/prebuilds/node-pty/win32-arm64/winpty-agent.pdb +0 -0
  154. package/prebuilds/node-pty/win32-arm64/winpty.dll +0 -0
  155. package/prebuilds/node-pty/win32-arm64/winpty.pdb +0 -0
  156. package/prebuilds/node-pty/win32-x64/conpty/OpenConsole.exe +0 -0
  157. package/prebuilds/node-pty/win32-x64/conpty/conpty.dll +0 -0
  158. package/prebuilds/node-pty/win32-x64/conpty.node +0 -0
  159. package/prebuilds/node-pty/win32-x64/conpty.pdb +0 -0
  160. package/prebuilds/node-pty/win32-x64/conpty_console_list.node +0 -0
  161. package/prebuilds/node-pty/win32-x64/conpty_console_list.pdb +0 -0
  162. package/prebuilds/node-pty/win32-x64/pty.node +0 -0
  163. package/prebuilds/node-pty/win32-x64/pty.pdb +0 -0
  164. package/prebuilds/node-pty/win32-x64/winpty-agent.exe +0 -0
  165. package/prebuilds/node-pty/win32-x64/winpty-agent.pdb +0 -0
  166. package/prebuilds/node-pty/win32-x64/winpty.dll +0 -0
  167. package/prebuilds/node-pty/win32-x64/winpty.pdb +0 -0
  168. package/scripts/postinstall.js +51 -1
  169. package/dist/server/ui/assets/index-BoDZOB7c.css +0 -32
  170. package/dist/server/ui/assets/index-hB0e02VB.js +0 -735
@@ -0,0 +1,727 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getToolDefinitions = getToolDefinitions;
4
+ function getToolDefinitions() {
5
+ return [
6
+ {
7
+ name: 'devchain_list_sessions',
8
+ description: 'List active sessions for discovery. This is the bootstrap tool that requires no sessionId - use it to discover valid session IDs for other MCP calls.',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {},
12
+ additionalProperties: false,
13
+ },
14
+ },
15
+ {
16
+ name: 'devchain_register_guest',
17
+ description: 'Register as a guest agent to join the DevChain system. Use this when you are an external AI agent running in a tmux session and want to appear in the Chat page alongside other agents. Returns a guestId that must be used as sessionId for all subsequent MCP tool calls. Your project is auto-detected from your tmux working directory.',
18
+ inputSchema: {
19
+ type: 'object',
20
+ required: ['name', 'tmuxSessionId'],
21
+ properties: {
22
+ name: {
23
+ type: 'string',
24
+ description: 'Display name for the guest agent (must be unique within the project)',
25
+ },
26
+ tmuxSessionId: {
27
+ type: 'string',
28
+ description: 'The tmux session ID where the guest is running',
29
+ },
30
+ description: {
31
+ type: 'string',
32
+ description: 'Optional description of the guest agent',
33
+ },
34
+ },
35
+ additionalProperties: false,
36
+ },
37
+ },
38
+ {
39
+ name: 'devchain_list_documents',
40
+ description: 'List all documents for the project resolved from the session.',
41
+ inputSchema: {
42
+ type: 'object',
43
+ required: ['sessionId'],
44
+ properties: {
45
+ sessionId: {
46
+ type: 'string',
47
+ description: 'Session ID (full UUID or 8+ char prefix)',
48
+ },
49
+ tags: {
50
+ type: 'array',
51
+ items: { type: 'string' },
52
+ description: 'Filter by tags (all must match)',
53
+ },
54
+ q: { type: 'string', description: 'Search query for title/content' },
55
+ limit: { type: 'number', description: 'Max results (default: 100)' },
56
+ offset: { type: 'number', description: 'Pagination offset (default: 0)' },
57
+ },
58
+ additionalProperties: false,
59
+ },
60
+ },
61
+ {
62
+ name: 'devchain_get_document',
63
+ description: 'Get a single document by ID or slug, with optional link resolution',
64
+ inputSchema: {
65
+ type: 'object',
66
+ properties: {
67
+ id: { type: 'string', description: 'Document UUID' },
68
+ slug: { type: 'string', description: 'Document slug (requires projectId)' },
69
+ projectId: { type: 'string', description: 'Project ID when using slug' },
70
+ includeLinks: {
71
+ type: 'string',
72
+ enum: ['none', 'meta', 'inline'],
73
+ description: 'Link resolution: none (no links), meta (link metadata), inline (full content)',
74
+ },
75
+ maxDepth: {
76
+ type: 'number',
77
+ description: 'Max depth for inline resolution (default: 1)',
78
+ },
79
+ maxBytes: {
80
+ type: 'number',
81
+ description: 'Max bytes for inline content (default: 64KB)',
82
+ },
83
+ },
84
+ additionalProperties: false,
85
+ },
86
+ },
87
+ {
88
+ name: 'devchain_create_document',
89
+ description: 'Create a new markdown document in the project resolved from the session',
90
+ inputSchema: {
91
+ type: 'object',
92
+ required: ['sessionId', 'title', 'contentMd'],
93
+ properties: {
94
+ sessionId: {
95
+ type: 'string',
96
+ description: 'Session ID (full UUID or 8+ char prefix)',
97
+ },
98
+ title: { type: 'string', description: 'Document title' },
99
+ contentMd: { type: 'string', description: 'Markdown content' },
100
+ tags: { type: 'array', items: { type: 'string' }, description: 'Document tags' },
101
+ },
102
+ additionalProperties: false,
103
+ },
104
+ },
105
+ {
106
+ name: 'devchain_update_document',
107
+ description: 'Update an existing document',
108
+ inputSchema: {
109
+ type: 'object',
110
+ required: ['id'],
111
+ properties: {
112
+ id: { type: 'string', description: 'Document UUID' },
113
+ title: { type: 'string', description: 'New title' },
114
+ slug: { type: 'string', description: 'New slug' },
115
+ contentMd: { type: 'string', description: 'New markdown content' },
116
+ tags: { type: 'array', items: { type: 'string' }, description: 'New tags' },
117
+ archived: { type: 'boolean', description: 'Archive status' },
118
+ version: { type: 'number', description: 'Version for optimistic locking' },
119
+ },
120
+ additionalProperties: false,
121
+ },
122
+ },
123
+ {
124
+ name: 'devchain_list_prompts',
125
+ description: 'List prompts for the project resolved from the session',
126
+ inputSchema: {
127
+ type: 'object',
128
+ required: ['sessionId'],
129
+ properties: {
130
+ sessionId: {
131
+ type: 'string',
132
+ description: 'Session ID (full UUID or 8+ char prefix)',
133
+ },
134
+ tags: { type: 'array', items: { type: 'string' }, description: 'Filter by tags' },
135
+ q: { type: 'string', description: 'Search query' },
136
+ },
137
+ additionalProperties: false,
138
+ },
139
+ },
140
+ {
141
+ name: 'devchain_get_prompt',
142
+ description: 'Get a specific prompt by ID or by (name + sessionId)',
143
+ inputSchema: {
144
+ type: 'object',
145
+ properties: {
146
+ id: { type: 'string', description: 'Prompt UUID' },
147
+ name: { type: 'string', description: 'Prompt name/title' },
148
+ version: { type: 'number', description: 'Specific version number' },
149
+ sessionId: {
150
+ type: 'string',
151
+ description: 'Session ID (full UUID or 8+ char prefix) required when querying by name',
152
+ },
153
+ },
154
+ additionalProperties: false,
155
+ },
156
+ },
157
+ {
158
+ name: 'devchain_list_agents',
159
+ description: 'List agents for the project resolved from the session',
160
+ inputSchema: {
161
+ type: 'object',
162
+ required: ['sessionId'],
163
+ properties: {
164
+ sessionId: {
165
+ type: 'string',
166
+ description: 'Session ID (full UUID or 8+ char prefix)',
167
+ },
168
+ limit: { type: 'number', description: 'Max results (default: 100)' },
169
+ offset: { type: 'number', description: 'Pagination offset (default: 0)' },
170
+ q: {
171
+ type: 'string',
172
+ description: 'Optional case-insensitive substring filter on agent name',
173
+ },
174
+ },
175
+ additionalProperties: false,
176
+ },
177
+ },
178
+ {
179
+ name: 'devchain_get_agent_by_name',
180
+ description: 'Fetch a single agent by name for the project resolved from the session',
181
+ inputSchema: {
182
+ type: 'object',
183
+ required: ['sessionId', 'name'],
184
+ properties: {
185
+ sessionId: {
186
+ type: 'string',
187
+ description: 'Session ID (full UUID or 8+ char prefix)',
188
+ },
189
+ name: {
190
+ type: 'string',
191
+ description: 'Agent name to look up (case-insensitive match)',
192
+ },
193
+ },
194
+ additionalProperties: false,
195
+ },
196
+ },
197
+ {
198
+ name: 'devchain_list_statuses',
199
+ description: 'List project statuses resolved from the session',
200
+ inputSchema: {
201
+ type: 'object',
202
+ required: ['sessionId'],
203
+ properties: {
204
+ sessionId: {
205
+ type: 'string',
206
+ description: 'Session ID (full UUID or 8+ char prefix)',
207
+ },
208
+ },
209
+ additionalProperties: false,
210
+ },
211
+ },
212
+ {
213
+ name: 'devchain_list_epics',
214
+ description: 'List epics for the project resolved from the session with optional filters',
215
+ inputSchema: {
216
+ type: 'object',
217
+ required: ['sessionId'],
218
+ properties: {
219
+ sessionId: {
220
+ type: 'string',
221
+ description: 'Session ID (full UUID or 8+ char prefix)',
222
+ },
223
+ statusName: {
224
+ type: 'string',
225
+ description: 'Optional status name filter (case-insensitive)',
226
+ },
227
+ limit: { type: 'number', description: 'Max results (default: 100)' },
228
+ offset: { type: 'number', description: 'Pagination offset (default: 0)' },
229
+ q: {
230
+ type: 'string',
231
+ description: 'Optional search query applied to epic titles and descriptions',
232
+ },
233
+ },
234
+ additionalProperties: false,
235
+ },
236
+ },
237
+ {
238
+ name: 'devchain_list_assigned_epics_tasks',
239
+ description: 'List epics assigned to the specified agent within the project resolved from the session',
240
+ inputSchema: {
241
+ type: 'object',
242
+ required: ['sessionId', 'agentName'],
243
+ properties: {
244
+ sessionId: {
245
+ type: 'string',
246
+ description: 'Session ID (full UUID or 8+ char prefix)',
247
+ },
248
+ agentName: { type: 'string', description: 'Agent name to match (case-insensitive)' },
249
+ limit: { type: 'number', description: 'Max results (default: 100)' },
250
+ offset: { type: 'number', description: 'Pagination offset (default: 0)' },
251
+ },
252
+ additionalProperties: false,
253
+ },
254
+ },
255
+ {
256
+ name: 'devchain_create_epic',
257
+ description: 'Create a new epic within the project resolved from the session',
258
+ inputSchema: {
259
+ type: 'object',
260
+ required: ['sessionId', 'title'],
261
+ properties: {
262
+ sessionId: {
263
+ type: 'string',
264
+ description: 'Session ID (full UUID or 8+ char prefix)',
265
+ },
266
+ title: { type: 'string', description: 'Epic title' },
267
+ description: { type: 'string', description: 'Optional epic description' },
268
+ statusName: {
269
+ type: 'string',
270
+ description: 'Optional status name (case-insensitive)',
271
+ },
272
+ tags: {
273
+ type: 'array',
274
+ items: { type: 'string' },
275
+ description: 'Optional list of tags to assign to the epic',
276
+ },
277
+ agentName: {
278
+ type: 'string',
279
+ description: 'Optional agent name to assign (case-insensitive)',
280
+ },
281
+ parentId: {
282
+ type: 'string',
283
+ description: 'Optional parent epic UUID to nest this epic under',
284
+ },
285
+ },
286
+ additionalProperties: false,
287
+ },
288
+ },
289
+ {
290
+ name: 'devchain_get_epic_by_id',
291
+ description: 'Fetch a single epic, including comments and related hierarchy details',
292
+ inputSchema: {
293
+ type: 'object',
294
+ required: ['sessionId', 'id'],
295
+ properties: {
296
+ sessionId: {
297
+ type: 'string',
298
+ description: 'Session ID (full UUID or 8+ char prefix)',
299
+ },
300
+ id: { type: 'string', description: 'Epic UUID' },
301
+ },
302
+ additionalProperties: false,
303
+ },
304
+ },
305
+ {
306
+ name: 'devchain_add_epic_comment',
307
+ description: 'Add a comment to the specified epic within the project resolved from the session. Author is derived from session agent.',
308
+ inputSchema: {
309
+ type: 'object',
310
+ required: ['sessionId', 'epicId', 'content'],
311
+ properties: {
312
+ sessionId: {
313
+ type: 'string',
314
+ description: 'Session ID (full UUID or 8+ char prefix)',
315
+ },
316
+ epicId: { type: 'string', description: 'Epic UUID' },
317
+ content: { type: 'string', description: 'Comment body content' },
318
+ },
319
+ additionalProperties: false,
320
+ },
321
+ },
322
+ {
323
+ name: 'devchain_update_epic',
324
+ description: 'Update an epic with flexible field updates including status (by name), assignment (by agent name or clear), parent hierarchy, and tags. Uses optimistic locking via version.',
325
+ inputSchema: {
326
+ type: 'object',
327
+ required: ['sessionId', 'id', 'version'],
328
+ properties: {
329
+ sessionId: {
330
+ type: 'string',
331
+ description: 'Session ID (full UUID or 8+ char prefix)',
332
+ },
333
+ id: { type: 'string', description: 'Epic UUID' },
334
+ version: { type: 'number', description: 'Current version for optimistic locking' },
335
+ title: { type: 'string', description: 'New epic title' },
336
+ description: { type: 'string', description: 'New epic description' },
337
+ statusName: {
338
+ type: 'string',
339
+ description: 'Status name (case-insensitive exact match)',
340
+ },
341
+ assignment: {
342
+ type: 'object',
343
+ description: 'Assignment update: either { agentName: string } to assign or { clear: true } to unassign',
344
+ oneOf: [
345
+ {
346
+ type: 'object',
347
+ required: ['agentName'],
348
+ properties: {
349
+ agentName: {
350
+ type: 'string',
351
+ description: 'Agent name (case-insensitive exact match)',
352
+ },
353
+ },
354
+ additionalProperties: false,
355
+ },
356
+ {
357
+ type: 'object',
358
+ required: ['clear'],
359
+ properties: {
360
+ clear: {
361
+ type: 'boolean',
362
+ const: true,
363
+ description: 'Set to true to clear assignment',
364
+ },
365
+ },
366
+ additionalProperties: false,
367
+ },
368
+ ],
369
+ },
370
+ parentId: {
371
+ type: 'string',
372
+ description: 'Parent epic UUID (mutually exclusive with clearParent)',
373
+ },
374
+ clearParent: {
375
+ type: 'boolean',
376
+ description: 'Set to true to remove parent (mutually exclusive with parentId)',
377
+ },
378
+ setTags: {
379
+ type: 'array',
380
+ items: { type: 'string' },
381
+ description: 'Replace all tags with this array',
382
+ },
383
+ addTags: { type: 'array', items: { type: 'string' }, description: 'Tags to add' },
384
+ removeTags: { type: 'array', items: { type: 'string' }, description: 'Tags to remove' },
385
+ },
386
+ additionalProperties: false,
387
+ },
388
+ },
389
+ {
390
+ name: 'devchain_create_record',
391
+ description: 'Create a new record (generic data storage for epics)',
392
+ inputSchema: {
393
+ type: 'object',
394
+ required: ['epicId', 'type', 'data'],
395
+ properties: {
396
+ epicId: { type: 'string', description: 'Epic UUID this record belongs to' },
397
+ type: { type: 'string', description: 'Record type identifier' },
398
+ data: { type: 'object', description: 'Arbitrary JSON data' },
399
+ tags: { type: 'array', items: { type: 'string' }, description: 'Record tags' },
400
+ },
401
+ additionalProperties: false,
402
+ },
403
+ },
404
+ {
405
+ name: 'devchain_update_record',
406
+ description: 'Update an existing record',
407
+ inputSchema: {
408
+ type: 'object',
409
+ required: ['id', 'version'],
410
+ properties: {
411
+ id: { type: 'string', description: 'Record UUID' },
412
+ data: { type: 'object', description: 'New data (merged)' },
413
+ type: { type: 'string', description: 'New type' },
414
+ tags: { type: 'array', items: { type: 'string' }, description: 'New tags' },
415
+ version: { type: 'number', description: 'Current version for optimistic locking' },
416
+ },
417
+ additionalProperties: false,
418
+ },
419
+ },
420
+ {
421
+ name: 'devchain_get_record',
422
+ description: 'Get a record by ID',
423
+ inputSchema: {
424
+ type: 'object',
425
+ required: ['id'],
426
+ properties: { id: { type: 'string', description: 'Record UUID' } },
427
+ additionalProperties: false,
428
+ },
429
+ },
430
+ {
431
+ name: 'devchain_list_records',
432
+ description: 'List records for an epic with optional filtering',
433
+ inputSchema: {
434
+ type: 'object',
435
+ required: ['epicId'],
436
+ properties: {
437
+ epicId: { type: 'string', description: 'Epic UUID' },
438
+ type: { type: 'string', description: 'Filter by record type' },
439
+ tags: { type: 'array', items: { type: 'string' }, description: 'Filter by tags' },
440
+ limit: { type: 'number', description: 'Max results' },
441
+ offset: { type: 'number', description: 'Pagination offset' },
442
+ },
443
+ additionalProperties: false,
444
+ },
445
+ },
446
+ {
447
+ name: 'devchain_add_tags',
448
+ description: 'Add tags to a record',
449
+ inputSchema: {
450
+ type: 'object',
451
+ required: ['id', 'tags'],
452
+ properties: {
453
+ id: { type: 'string', description: 'Record UUID' },
454
+ tags: {
455
+ type: 'array',
456
+ items: { type: 'string' },
457
+ minItems: 1,
458
+ description: 'Tags to add',
459
+ },
460
+ },
461
+ additionalProperties: false,
462
+ },
463
+ },
464
+ {
465
+ name: 'devchain_remove_tags',
466
+ description: 'Remove tags from a record',
467
+ inputSchema: {
468
+ type: 'object',
469
+ required: ['id', 'tags'],
470
+ properties: {
471
+ id: { type: 'string', description: 'Record UUID' },
472
+ tags: {
473
+ type: 'array',
474
+ items: { type: 'string' },
475
+ minItems: 1,
476
+ description: 'Tags to remove',
477
+ },
478
+ },
479
+ additionalProperties: false,
480
+ },
481
+ },
482
+ {
483
+ name: 'devchain_send_message',
484
+ description: 'Send a chat message. Sender is derived from session agent. Provide threadId to reply in a thread, or recipientAgentNames to create a new agent-initiated group.',
485
+ inputSchema: {
486
+ type: 'object',
487
+ required: ['sessionId', 'message'],
488
+ properties: {
489
+ sessionId: {
490
+ type: 'string',
491
+ description: 'Session ID (full UUID or 8+ char prefix)',
492
+ },
493
+ threadId: {
494
+ type: 'string',
495
+ description: 'Existing thread UUID. When provided, recipients may be omitted to fan-out to thread members.',
496
+ },
497
+ recipientAgentNames: {
498
+ type: 'array',
499
+ items: { type: 'string' },
500
+ description: 'Agent names (case-insensitive) to receive the message. Required only when creating a new thread (no threadId).',
501
+ },
502
+ recipient: {
503
+ type: 'string',
504
+ enum: ['user', 'agents'],
505
+ description: 'Set to "user" to DM the user without a threadId.',
506
+ },
507
+ message: { type: 'string', description: 'Message content to deliver.' },
508
+ },
509
+ additionalProperties: false,
510
+ },
511
+ },
512
+ {
513
+ name: 'devchain_chat_ack',
514
+ description: 'Mark a chat message as read for an agent and emit a message.read event.',
515
+ inputSchema: {
516
+ type: 'object',
517
+ required: ['sessionId', 'thread_id', 'message_id'],
518
+ properties: {
519
+ sessionId: {
520
+ type: 'string',
521
+ description: 'Session ID (full UUID or 8+ char prefix)',
522
+ },
523
+ thread_id: { type: 'string', description: 'Chat thread UUID.' },
524
+ message_id: { type: 'string', description: 'Chat message UUID to acknowledge.' },
525
+ },
526
+ additionalProperties: false,
527
+ },
528
+ },
529
+ {
530
+ name: 'devchain_chat_read_history',
531
+ description: 'Fetch recent messages for a chat thread so agents can catch up after an invite.',
532
+ inputSchema: {
533
+ type: 'object',
534
+ required: ['thread_id'],
535
+ properties: {
536
+ thread_id: { type: 'string', description: 'Chat thread UUID.' },
537
+ limit: { type: 'number', description: 'Max messages to return (default 50, max 200).' },
538
+ since: {
539
+ type: 'string',
540
+ description: 'ISO timestamp; only messages after this time are returned.',
541
+ },
542
+ exclude_system: {
543
+ type: 'boolean',
544
+ description: 'Exclude system messages. Defaults to true when omitted to show only user/agent authored messages.',
545
+ },
546
+ },
547
+ additionalProperties: false,
548
+ },
549
+ },
550
+ {
551
+ name: 'devchain_chat_list_members',
552
+ description: 'List members of a chat thread along with their online status.',
553
+ inputSchema: {
554
+ type: 'object',
555
+ required: ['thread_id'],
556
+ properties: { thread_id: { type: 'string', description: 'Chat thread UUID.' } },
557
+ additionalProperties: false,
558
+ },
559
+ },
560
+ {
561
+ name: 'devchain_activity_start',
562
+ description: 'Start an activity for an agent; posts a system start message and begins a running timer (DM by default).',
563
+ inputSchema: {
564
+ type: 'object',
565
+ required: ['sessionId', 'title'],
566
+ properties: {
567
+ sessionId: {
568
+ type: 'string',
569
+ description: 'Session ID (full UUID or 8+ char prefix)',
570
+ },
571
+ title: { type: 'string', description: 'Activity title (<=256 chars)' },
572
+ threadId: { type: 'string', description: 'Target thread UUID (optional)' },
573
+ announce: { type: 'boolean', description: 'Whether to post the start system message' },
574
+ },
575
+ additionalProperties: false,
576
+ },
577
+ },
578
+ {
579
+ name: 'devchain_activity_finish',
580
+ description: 'Finish the latest running activity for an agent; optionally posts a finish system message.',
581
+ inputSchema: {
582
+ type: 'object',
583
+ required: ['sessionId'],
584
+ properties: {
585
+ sessionId: {
586
+ type: 'string',
587
+ description: 'Session ID (full UUID or 8+ char prefix)',
588
+ },
589
+ threadId: { type: 'string', description: 'Target thread UUID (optional)' },
590
+ message: { type: 'string', description: 'Optional finish message (<=1000 chars)' },
591
+ status: {
592
+ type: 'string',
593
+ enum: ['success', 'failed', 'canceled'],
594
+ description: 'Final status (default success)',
595
+ },
596
+ },
597
+ additionalProperties: false,
598
+ },
599
+ },
600
+ {
601
+ name: 'devchain_list_reviews',
602
+ description: 'List code reviews for the project. Use this to find reviews to work on or check review status.',
603
+ inputSchema: {
604
+ type: 'object',
605
+ required: ['sessionId'],
606
+ properties: {
607
+ sessionId: {
608
+ type: 'string',
609
+ description: 'Session ID (full UUID or 8+ char prefix)',
610
+ },
611
+ status: {
612
+ type: 'string',
613
+ enum: ['draft', 'pending', 'changes_requested', 'approved', 'closed'],
614
+ description: 'Filter by review status',
615
+ },
616
+ epicId: { type: 'string', description: 'Filter by epic UUID' },
617
+ limit: { type: 'number', description: 'Max results (default 100)' },
618
+ offset: { type: 'number', description: 'Pagination offset (default 0)' },
619
+ },
620
+ additionalProperties: false,
621
+ },
622
+ },
623
+ {
624
+ name: 'devchain_get_review',
625
+ description: 'Get a code review by ID, including changed files and comments. Use this to understand the context of a review before replying to comments.',
626
+ inputSchema: {
627
+ type: 'object',
628
+ required: ['sessionId', 'reviewId'],
629
+ properties: {
630
+ sessionId: {
631
+ type: 'string',
632
+ description: 'Session ID (full UUID or 8+ char prefix)',
633
+ },
634
+ reviewId: { type: 'string', description: 'Review UUID' },
635
+ },
636
+ additionalProperties: false,
637
+ },
638
+ },
639
+ {
640
+ name: 'devchain_get_review_comments',
641
+ description: 'List comments for a code review with optional filters. Returns comments with author information and thread structure.',
642
+ inputSchema: {
643
+ type: 'object',
644
+ required: ['sessionId', 'reviewId'],
645
+ properties: {
646
+ sessionId: {
647
+ type: 'string',
648
+ description: 'Session ID (full UUID or 8+ char prefix)',
649
+ },
650
+ reviewId: { type: 'string', description: 'Review UUID' },
651
+ status: {
652
+ type: 'string',
653
+ enum: ['open', 'resolved', 'wont_fix'],
654
+ description: 'Filter by comment status',
655
+ },
656
+ filePath: { type: 'string', description: 'Filter by file path' },
657
+ limit: { type: 'number', description: 'Max results (default 100)' },
658
+ offset: { type: 'number', description: 'Pagination offset (default 0)' },
659
+ },
660
+ additionalProperties: false,
661
+ },
662
+ },
663
+ {
664
+ name: 'devchain_reply_comment',
665
+ description: 'Create a new comment or reply to an existing comment on a code review. Use parentCommentId to reply to a specific comment.',
666
+ inputSchema: {
667
+ type: 'object',
668
+ required: ['sessionId', 'reviewId', 'content'],
669
+ properties: {
670
+ sessionId: {
671
+ type: 'string',
672
+ description: 'Session ID (full UUID or 8+ char prefix)',
673
+ },
674
+ reviewId: { type: 'string', description: 'Review UUID' },
675
+ parentCommentId: {
676
+ type: 'string',
677
+ description: 'Parent comment UUID to reply to (optional for new top-level comments)',
678
+ },
679
+ content: { type: 'string', description: 'Comment content' },
680
+ filePath: {
681
+ type: 'string',
682
+ description: 'File path for file-specific comments (optional for replies)',
683
+ },
684
+ lineStart: { type: 'number', description: 'Starting line number (optional)' },
685
+ lineEnd: { type: 'number', description: 'Ending line number (optional)' },
686
+ commentType: {
687
+ type: 'string',
688
+ enum: ['comment', 'suggestion', 'issue', 'approval'],
689
+ description: 'Type of comment (default: comment)',
690
+ },
691
+ targetAgentIds: {
692
+ type: 'array',
693
+ items: { type: 'string' },
694
+ description: 'Agent UUIDs to notify about this comment. Use this to @mention specific agents.',
695
+ },
696
+ },
697
+ additionalProperties: false,
698
+ },
699
+ },
700
+ {
701
+ name: 'devchain_resolve_comment',
702
+ description: 'Resolve a code review comment. Mark as resolved when the issue is addressed, or wont_fix if it will not be addressed.',
703
+ inputSchema: {
704
+ type: 'object',
705
+ required: ['sessionId', 'commentId', 'version'],
706
+ properties: {
707
+ sessionId: {
708
+ type: 'string',
709
+ description: 'Session ID (full UUID or 8+ char prefix)',
710
+ },
711
+ commentId: { type: 'string', description: 'Comment UUID to resolve' },
712
+ resolution: {
713
+ type: 'string',
714
+ enum: ['resolved', 'wont_fix'],
715
+ description: 'Resolution status (default: resolved)',
716
+ },
717
+ version: {
718
+ type: 'number',
719
+ description: 'Current comment version for optimistic locking',
720
+ },
721
+ },
722
+ additionalProperties: false,
723
+ },
724
+ },
725
+ ];
726
+ }
727
+ //# sourceMappingURL=tool-definitions.js.map