kemdicode-mcp 1.20.1 → 1.21.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.
@@ -0,0 +1,378 @@
1
+ /**
2
+ * KemdiCode MCP Server
3
+ * Copyright (C) 2025-2026 Kemdi Sp. z o.o.
4
+ *
5
+ * This program is free software: you can redistribute it and/or modify
6
+ * it under the terms of the GNU General Public License as published by
7
+ * the Free Software Foundation, either version 3 of the License, or
8
+ * (at your option) any later version.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU General Public License
16
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
17
+ */
18
+ /**
19
+ * Thinking Chain Tool
20
+ *
21
+ * Registers and embeds chains of thought with branching support.
22
+ * Forward-only constraint: cannot backtrack until ≥90% confidence
23
+ * or revising the latest thought.
24
+ *
25
+ * @module tools/thinking/thinking-chain
26
+ */
27
+ import { z } from 'zod';
28
+ import { Logger } from '../../utils/logger.js';
29
+ import { checkRateLimit } from '../../utils/validation.js';
30
+ import { resolveSessionId } from '../../kanban/resolvers.js';
31
+ import { createChain, getChain, addThought, reviseThought, branchChain, concludeChain, listChains, } from '../../thinking/index.js';
32
+ // --- Sub-schemas for each action ---
33
+ const startSchema = z.object({
34
+ action: z.literal('start'),
35
+ title: z.string().min(1).max(200).describe('Title for the thinking chain'),
36
+ agentId: z.string().min(1).max(100).describe('Agent ID'),
37
+ sessionId: z.string().optional().describe('Session ID (auto-resolved if omitted)'),
38
+ content: z.string().min(1).max(10000).describe('First thought content'),
39
+ confidence: z.number().min(0).max(100).describe('Confidence level (0-100%)'),
40
+ reasoning: z.string().max(2000).optional().describe('Reasoning for this confidence'),
41
+ tags: z.array(z.string().max(50)).max(10).optional().describe('Tags for categorization'),
42
+ });
43
+ const thinkSchema = z.object({
44
+ action: z.literal('think'),
45
+ chainId: z.string().min(1).describe('Chain ID to add thought to'),
46
+ content: z.string().min(1).max(10000).describe('Thought content'),
47
+ confidence: z.number().min(0).max(100).describe('Confidence level (0-100%)'),
48
+ reasoning: z.string().max(2000).optional().describe('Reasoning for this confidence'),
49
+ });
50
+ const branchSchema = z.object({
51
+ action: z.literal('branch'),
52
+ chainId: z.string().min(1).describe('Source chain ID to branch from'),
53
+ thoughtIndex: z.number().int().min(0).describe('Thought index to branch from'),
54
+ title: z.string().min(1).max(200).describe('Title for the new branch'),
55
+ content: z.string().min(1).max(10000).describe('First thought in the new branch'),
56
+ confidence: z.number().min(0).max(100).describe('Confidence level (0-100%)'),
57
+ reasoning: z.string().max(2000).optional().describe('Reasoning for this confidence'),
58
+ });
59
+ const reviseSchema = z.object({
60
+ action: z.literal('revise'),
61
+ chainId: z.string().min(1).describe('Chain ID'),
62
+ thoughtIndex: z.number().int().min(0).describe('Index of thought to revise'),
63
+ content: z.string().min(1).max(10000).describe('Revised thought content'),
64
+ confidence: z.number().min(0).max(100).describe('New confidence level (0-100%)'),
65
+ reasoning: z.string().max(2000).optional().describe('Reasoning for revision'),
66
+ });
67
+ const concludeSchema = z.object({
68
+ action: z.literal('conclude'),
69
+ chainId: z.string().min(1).describe('Chain ID to conclude'),
70
+ conclusion: z.string().min(1).max(10000).describe('Final conclusion'),
71
+ });
72
+ const getSchema = z.object({
73
+ action: z.literal('get'),
74
+ chainId: z.string().min(1).describe('Chain ID to retrieve'),
75
+ });
76
+ const listSchema = z.object({
77
+ action: z.literal('list'),
78
+ sessionId: z.string().optional().describe('Filter by session (auto-resolved if omitted)'),
79
+ agentId: z.string().optional().describe('Filter by agent'),
80
+ status: z.enum(['active', 'concluded', 'abandoned']).optional().describe('Filter by status'),
81
+ limit: z.number().int().min(1).max(50).optional().describe('Max results (default: 20)'),
82
+ });
83
+ const schema = z.discriminatedUnion('action', [
84
+ startSchema,
85
+ thinkSchema,
86
+ branchSchema,
87
+ reviseSchema,
88
+ concludeSchema,
89
+ getSchema,
90
+ listSchema,
91
+ ]);
92
+ /**
93
+ * Format a chain for display with box-drawing characters
94
+ */
95
+ function formatChainDisplay(chain) {
96
+ const lines = [];
97
+ const w = 72;
98
+ const hr = '─'.repeat(w);
99
+ lines.push(`┌${hr}┐`);
100
+ lines.push(`│ ${'THINKING CHAIN'.padEnd(w - 1)}│`);
101
+ lines.push(`├${hr}┤`);
102
+ lines.push(`│ ${'ID:'.padEnd(12)}${chain.id.padEnd(w - 13)}│`);
103
+ lines.push(`│ ${'Title:'.padEnd(12)}${chain.title.substring(0, w - 13).padEnd(w - 13)}│`);
104
+ lines.push(`│ ${'Agent:'.padEnd(12)}${chain.agentId.padEnd(w - 13)}│`);
105
+ lines.push(`│ ${'Status:'.padEnd(12)}${chain.status.toUpperCase().padEnd(w - 13)}│`);
106
+ lines.push(`│ ${'Thoughts:'.padEnd(12)}${String(chain.thoughts.length).padEnd(w - 13)}│`);
107
+ if (chain.parentChainId) {
108
+ lines.push(`│ ${'Branched:'.padEnd(12)}${(`from ${chain.parentChainId} #${chain.parentThoughtIndex}`).substring(0, w - 13).padEnd(w - 13)}│`);
109
+ }
110
+ if (chain.tags.length > 0) {
111
+ lines.push(`│ ${'Tags:'.padEnd(12)}${chain.tags.join(', ').substring(0, w - 13).padEnd(w - 13)}│`);
112
+ }
113
+ lines.push(`├${hr}┤`);
114
+ for (const thought of chain.thoughts) {
115
+ const prefix = thought.revisedFrom !== undefined
116
+ ? ` [REVISION of #${thought.revisedFrom}]`
117
+ : '';
118
+ const conf = `${thought.confidence}%`;
119
+ const branchInfo = thought.branches && thought.branches.length > 0
120
+ ? ` [${thought.branches.length} branch(es)]`
121
+ : '';
122
+ lines.push(`│ ${'#' + thought.index} [${conf}]${prefix}${branchInfo}`.padEnd(w) + ' │');
123
+ // Wrap content to fit
124
+ const contentLines = wrapText(thought.content, w - 6);
125
+ for (const cl of contentLines) {
126
+ lines.push(`│ ${cl.padEnd(w - 3)}│`);
127
+ }
128
+ if (thought.reasoning) {
129
+ const reasonLines = wrapText(`Reasoning: ${thought.reasoning}`, w - 6);
130
+ for (const rl of reasonLines) {
131
+ lines.push(`│ ${rl.padEnd(w - 3)}│`);
132
+ }
133
+ }
134
+ if (thought.index < chain.thoughts.length - 1) {
135
+ lines.push(`│${' │'.padEnd(w)} │`);
136
+ lines.push(`│${' ▼'.padEnd(w)} │`);
137
+ }
138
+ }
139
+ if (chain.conclusion) {
140
+ lines.push(`├${hr}┤`);
141
+ lines.push(`│ ${'CONCLUSION:'.padEnd(w - 1)}│`);
142
+ const conclusionLines = wrapText(chain.conclusion, w - 4);
143
+ for (const cl of conclusionLines) {
144
+ lines.push(`│ ${cl.padEnd(w - 2)}│`);
145
+ }
146
+ }
147
+ lines.push(`└${hr}┘`);
148
+ return lines.join('\n');
149
+ }
150
+ /**
151
+ * Wrap text to a maximum line width
152
+ */
153
+ function wrapText(text, maxWidth) {
154
+ const words = text.split(/\s+/);
155
+ const lines = [];
156
+ let currentLine = '';
157
+ for (const word of words) {
158
+ if (currentLine.length + word.length + 1 > maxWidth) {
159
+ if (currentLine)
160
+ lines.push(currentLine);
161
+ currentLine = word;
162
+ }
163
+ else {
164
+ currentLine = currentLine ? `${currentLine} ${word}` : word;
165
+ }
166
+ }
167
+ if (currentLine)
168
+ lines.push(currentLine);
169
+ return lines.length > 0 ? lines : [''];
170
+ }
171
+ export const thinkingChainTool = {
172
+ name: 'thinking-chain',
173
+ description: 'Register and manage chains of thought with branching. Forward-only: cannot backtrack until ≥90% confidence or at last thought. Actions: start, think, branch, revise, conclude, get, list.',
174
+ zodSchema: schema,
175
+ metadata: {
176
+ category: 'thinking',
177
+ tags: ['thinking', 'reasoning', 'chain-of-thought', 'branching', 'confidence'],
178
+ examples: [
179
+ {
180
+ args: {
181
+ action: 'start',
182
+ title: 'Debug authentication issue',
183
+ agentId: 'agent-1',
184
+ content: 'The login fails with 401. First hypothesis: token expiration.',
185
+ confidence: 40,
186
+ reasoning: 'Multiple possible causes, starting with most common',
187
+ },
188
+ description: 'Start a new thinking chain',
189
+ },
190
+ {
191
+ args: {
192
+ action: 'think',
193
+ chainId: 'chain_123',
194
+ content: 'Confirmed: token expires after 1h but refresh is not called. Need to add refresh logic.',
195
+ confidence: 85,
196
+ reasoning: 'Logs show expired token in 90% of failed requests',
197
+ },
198
+ description: 'Add next thought to chain',
199
+ },
200
+ {
201
+ args: {
202
+ action: 'branch',
203
+ chainId: 'chain_123',
204
+ thoughtIndex: 0,
205
+ title: 'Alternative: CORS issue',
206
+ content: 'Could also be CORS blocking the auth header.',
207
+ confidence: 25,
208
+ },
209
+ description: 'Branch from a thought to explore alternative',
210
+ },
211
+ {
212
+ args: {
213
+ action: 'revise',
214
+ chainId: 'chain_123',
215
+ thoughtIndex: 0,
216
+ content: 'Revised: not just token expiration but also missing refresh token in storage.',
217
+ confidence: 92,
218
+ },
219
+ description: 'Revise earlier thought (only when confidence ≥90%)',
220
+ },
221
+ {
222
+ args: {
223
+ action: 'conclude',
224
+ chainId: 'chain_123',
225
+ conclusion: 'Root cause: refresh token not persisted. Fix: save refresh token to localStorage on login.',
226
+ },
227
+ description: 'Conclude the chain with final answer',
228
+ },
229
+ ],
230
+ relatedTools: ['graph-query', 'loci-recall', 'shared-thoughts', 'write-memory'],
231
+ },
232
+ execute: async (args) => {
233
+ const input = args;
234
+ if (!checkRateLimit('thinking-chain', { maxRequests: 60, windowMs: 60000 })) {
235
+ return JSON.stringify({
236
+ success: false,
237
+ error: 'Rate limit exceeded for thinking-chain operations',
238
+ code: 'RATE_LIMIT_EXCEEDED',
239
+ });
240
+ }
241
+ try {
242
+ switch (input.action) {
243
+ case 'start': {
244
+ const sessionId = input.sessionId || resolveSessionId();
245
+ const chain = await createChain({
246
+ title: input.title,
247
+ agentId: input.agentId,
248
+ sessionId,
249
+ content: input.content,
250
+ confidence: input.confidence,
251
+ reasoning: input.reasoning,
252
+ tags: input.tags,
253
+ });
254
+ Logger.debug(`thinking-chain: started chain ${chain.id}`);
255
+ return JSON.stringify({
256
+ success: true,
257
+ chainId: chain.id,
258
+ title: chain.title,
259
+ thoughtCount: 1,
260
+ currentConfidence: chain.thoughts[0].confidence,
261
+ });
262
+ }
263
+ case 'think': {
264
+ const thought = await addThought(input.chainId, {
265
+ content: input.content,
266
+ confidence: input.confidence,
267
+ reasoning: input.reasoning,
268
+ });
269
+ Logger.debug(`thinking-chain: added thought #${thought.index} to ${input.chainId}`);
270
+ return JSON.stringify({
271
+ success: true,
272
+ chainId: input.chainId,
273
+ thoughtIndex: thought.index,
274
+ confidence: thought.confidence,
275
+ canReviseEarlier: thought.confidence >= 90,
276
+ });
277
+ }
278
+ case 'branch': {
279
+ const newChain = await branchChain({
280
+ sourceChainId: input.chainId,
281
+ thoughtIndex: input.thoughtIndex,
282
+ title: input.title,
283
+ content: input.content,
284
+ confidence: input.confidence,
285
+ reasoning: input.reasoning,
286
+ });
287
+ Logger.debug(`thinking-chain: branched ${newChain.id} from ${input.chainId}#${input.thoughtIndex}`);
288
+ return JSON.stringify({
289
+ success: true,
290
+ newChainId: newChain.id,
291
+ parentChainId: input.chainId,
292
+ branchedFromThought: input.thoughtIndex,
293
+ title: newChain.title,
294
+ });
295
+ }
296
+ case 'revise': {
297
+ const revised = await reviseThought(input.chainId, {
298
+ thoughtIndex: input.thoughtIndex,
299
+ content: input.content,
300
+ confidence: input.confidence,
301
+ reasoning: input.reasoning,
302
+ });
303
+ Logger.debug(`thinking-chain: revised thought #${input.thoughtIndex} in ${input.chainId} -> #${revised.index}`);
304
+ return JSON.stringify({
305
+ success: true,
306
+ chainId: input.chainId,
307
+ revisedThought: input.thoughtIndex,
308
+ newThoughtIndex: revised.index,
309
+ confidence: revised.confidence,
310
+ });
311
+ }
312
+ case 'conclude': {
313
+ const concluded = await concludeChain(input.chainId, input.conclusion);
314
+ Logger.debug(`thinking-chain: concluded chain ${input.chainId}`);
315
+ const finalConfidence = concluded.thoughts.length > 0
316
+ ? concluded.thoughts[concluded.thoughts.length - 1].confidence
317
+ : 0;
318
+ return JSON.stringify({
319
+ success: true,
320
+ chainId: input.chainId,
321
+ status: 'concluded',
322
+ thoughtCount: concluded.thoughts.length,
323
+ finalConfidence,
324
+ });
325
+ }
326
+ case 'get': {
327
+ const chain = await getChain(input.chainId);
328
+ if (!chain) {
329
+ return JSON.stringify({
330
+ success: false,
331
+ error: `Chain not found: ${input.chainId}`,
332
+ code: 'NOT_FOUND',
333
+ });
334
+ }
335
+ return formatChainDisplay(chain);
336
+ }
337
+ case 'list': {
338
+ const sessionId = input.sessionId || (input.agentId ? undefined : resolveSessionId());
339
+ const chains = await listChains({
340
+ sessionId,
341
+ agentId: input.agentId,
342
+ status: input.status,
343
+ limit: input.limit,
344
+ });
345
+ return JSON.stringify({
346
+ success: true,
347
+ count: chains.length,
348
+ chains: chains.map((c) => ({
349
+ id: c.id,
350
+ title: c.title,
351
+ agentId: c.agentId,
352
+ status: c.status,
353
+ thoughtCount: c.thoughts.length,
354
+ latestConfidence: c.thoughts.length > 0 ? c.thoughts[c.thoughts.length - 1].confidence : 0,
355
+ parentChainId: c.parentChainId,
356
+ tags: c.tags,
357
+ updatedAt: new Date(c.updatedAt).toISOString(),
358
+ })),
359
+ });
360
+ }
361
+ default:
362
+ return JSON.stringify({
363
+ success: false,
364
+ error: `Unknown action: ${input.action}`,
365
+ code: 'INVALID_ACTION',
366
+ });
367
+ }
368
+ }
369
+ catch (error) {
370
+ return JSON.stringify({
371
+ success: false,
372
+ error: error instanceof Error ? error.message : String(error),
373
+ code: 'EXECUTION_ERROR',
374
+ });
375
+ }
376
+ },
377
+ };
378
+ //# sourceMappingURL=thinking-chain.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thinking-chain.tool.js","sourceRoot":"","sources":["../../../src/tools/thinking/thinking-chain.tool.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -13,5 +13,5 @@
13
13
  *
14
14
  * @module version
15
15
  */
16
- export declare const VERSION = "1.20.1";
16
+ export declare const VERSION = "1.21.0";
17
17
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -13,5 +13,5 @@
13
13
  *
14
14
  * @module version
15
15
  */
16
- export const VERSION = '1.20.1';
16
+ export const VERSION = '1.21.0';
17
17
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kemdicode-mcp",
3
- "version": "1.20.1",
3
+ "version": "1.21.0",
4
4
  "description": "Model Context Protocol (MCP) server with 100+ tools for code analysis, AI agents, git operations, multi-agent coordination, and kanban task management",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",