couchloop-eq-mcp 1.1.6 → 1.2.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.
- package/README.md +40 -38
- package/dist/clients/shrinkChatClient.d.ts +8 -8
- package/dist/index.js +1 -1
- package/dist/server/http-mcp.d.ts.map +1 -1
- package/dist/server/http-mcp.js +17 -3
- package/dist/server/http-mcp.js.map +1 -1
- package/dist/server/sse.js +1 -1
- package/dist/tools/check-versions.d.ts +3 -3
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/insight.d.ts +7 -7
- package/dist/tools/intent-router.d.ts +142 -0
- package/dist/tools/intent-router.d.ts.map +1 -0
- package/dist/tools/intent-router.js +453 -0
- package/dist/tools/intent-router.js.map +1 -0
- package/dist/tools/primary-tools.d.ts +200 -15
- package/dist/tools/primary-tools.d.ts.map +1 -1
- package/dist/tools/primary-tools.js +76 -15
- package/dist/tools/primary-tools.js.map +1 -1
- package/dist/tools/protect-files.d.ts +1 -1
- package/dist/tools/sendMessage.d.ts.map +1 -1
- package/dist/tools/sendMessage.js +9 -147
- package/dist/tools/sendMessage.js.map +1 -1
- package/dist/tools/session.d.ts +1 -1
- package/dist/tools/smart-context.d.ts +1 -1
- package/dist/tools/status.d.ts +118 -0
- package/dist/tools/status.d.ts.map +1 -0
- package/dist/tools/status.js +366 -0
- package/dist/tools/status.js.map +1 -0
- package/dist/tools/verify.d.ts +126 -0
- package/dist/tools/verify.d.ts.map +1 -0
- package/dist/tools/verify.js +308 -0
- package/dist/tools/verify.js.map +1 -0
- package/dist/types/insight.d.ts +2 -2
- package/dist/types/journey.d.ts +12 -12
- package/dist/types/session.d.ts +2 -2
- package/dist/workflows/engine.d.ts +2 -1
- package/dist/workflows/engine.d.ts.map +1 -1
- package/dist/workflows/engine.js +7 -1
- package/dist/workflows/engine.js.map +1 -1
- package/dist/workflows/index.d.ts +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool: status
|
|
3
|
+
*
|
|
4
|
+
* Dashboard and quick status checks for session, history, context, protection, and preferences.
|
|
5
|
+
* Provides personalized status with actionable next steps.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { getDb } from '../db/client.js';
|
|
9
|
+
import { sessions, checkpoints, insights } from '../db/schema.js';
|
|
10
|
+
import { eq, desc } from 'drizzle-orm';
|
|
11
|
+
import { WorkflowEngine } from '../workflows/engine.js';
|
|
12
|
+
import { ContextManager } from '../developer/managers/context-manager.js';
|
|
13
|
+
import { getProtectionStatus, listBackups } from './protect-files.js';
|
|
14
|
+
import { getUserContext } from './insight.js';
|
|
15
|
+
import { logger } from '../utils/logger.js';
|
|
16
|
+
const StatusInputSchema = z.object({
|
|
17
|
+
check: z.enum(['session', 'history', 'context', 'protection', 'preferences', 'all']).describe('What to check'),
|
|
18
|
+
session_id: z.string().optional().describe('Session ID for session-specific status'),
|
|
19
|
+
});
|
|
20
|
+
export const statusTool = {
|
|
21
|
+
definition: {
|
|
22
|
+
name: 'status',
|
|
23
|
+
description: `Dashboard and quick status checks. Use for: "how am I doing", "what's my progress", "show my history", "what do you know about me", "my settings", "context window", "backup status". Returns personalized status with actionable next steps.`,
|
|
24
|
+
annotations: {
|
|
25
|
+
readOnlyHint: true,
|
|
26
|
+
destructiveHint: false,
|
|
27
|
+
openWorldHint: false,
|
|
28
|
+
},
|
|
29
|
+
inputSchema: {
|
|
30
|
+
type: 'object',
|
|
31
|
+
properties: {
|
|
32
|
+
check: {
|
|
33
|
+
type: 'string',
|
|
34
|
+
enum: ['session', 'history', 'context', 'protection', 'preferences', 'all'],
|
|
35
|
+
description: "'session': current progress, time elapsed, checkpoints. 'history': recent sessions, insights, patterns. 'context': stored decisions, constraints, window usage. 'protection': backup status, freeze mode. 'preferences': timezone, journey length. 'all': full dashboard.",
|
|
36
|
+
},
|
|
37
|
+
session_id: {
|
|
38
|
+
type: 'string',
|
|
39
|
+
description: 'Session ID for session-specific status',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
required: ['check'],
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
handler: handleStatus,
|
|
46
|
+
};
|
|
47
|
+
export async function handleStatus(args) {
|
|
48
|
+
try {
|
|
49
|
+
const input = StatusInputSchema.parse(args);
|
|
50
|
+
logger.info('Running status check', { check: input.check });
|
|
51
|
+
const result = {
|
|
52
|
+
check: input.check,
|
|
53
|
+
timestamp: new Date().toISOString(),
|
|
54
|
+
};
|
|
55
|
+
// Run appropriate checks based on type
|
|
56
|
+
if (input.check === 'session' || input.check === 'all') {
|
|
57
|
+
result.session = await getSessionStatus(input.session_id);
|
|
58
|
+
}
|
|
59
|
+
if (input.check === 'history' || input.check === 'all') {
|
|
60
|
+
result.history = await getHistoryStatus();
|
|
61
|
+
}
|
|
62
|
+
if (input.check === 'context' || input.check === 'all') {
|
|
63
|
+
result.context = await getContextStatus();
|
|
64
|
+
}
|
|
65
|
+
if (input.check === 'protection' || input.check === 'all') {
|
|
66
|
+
result.protection = await getProtectionStatusSummary();
|
|
67
|
+
}
|
|
68
|
+
if (input.check === 'preferences' || input.check === 'all') {
|
|
69
|
+
result.preferences = await getPreferencesStatus();
|
|
70
|
+
}
|
|
71
|
+
// Generate personalized summary and next steps
|
|
72
|
+
result.summary = generateSummary(result);
|
|
73
|
+
result.next_steps = generateNextSteps(result);
|
|
74
|
+
return {
|
|
75
|
+
success: true,
|
|
76
|
+
...result,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
logger.error('Error in status:', error);
|
|
81
|
+
return {
|
|
82
|
+
success: false,
|
|
83
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async function getSessionStatus(sessionId) {
|
|
88
|
+
try {
|
|
89
|
+
const db = getDb();
|
|
90
|
+
// Find active or specified session
|
|
91
|
+
let session;
|
|
92
|
+
if (sessionId) {
|
|
93
|
+
[session] = await db
|
|
94
|
+
.select()
|
|
95
|
+
.from(sessions)
|
|
96
|
+
.where(eq(sessions.id, sessionId))
|
|
97
|
+
.limit(1);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
// Get most recent active session
|
|
101
|
+
[session] = await db
|
|
102
|
+
.select()
|
|
103
|
+
.from(sessions)
|
|
104
|
+
.where(eq(sessions.status, 'active'))
|
|
105
|
+
.orderBy(desc(sessions.lastActiveAt))
|
|
106
|
+
.limit(1);
|
|
107
|
+
}
|
|
108
|
+
if (!session) {
|
|
109
|
+
return {
|
|
110
|
+
has_active_session: false,
|
|
111
|
+
checkpoints_saved: 0,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// Get progress
|
|
115
|
+
const engine = new WorkflowEngine();
|
|
116
|
+
const progress = await engine.getSessionProgress(session.id);
|
|
117
|
+
// Get checkpoint count
|
|
118
|
+
const sessionCheckpoints = await db
|
|
119
|
+
.select()
|
|
120
|
+
.from(checkpoints)
|
|
121
|
+
.where(eq(checkpoints.sessionId, session.id));
|
|
122
|
+
// Calculate time elapsed
|
|
123
|
+
const startTime = new Date(session.startedAt);
|
|
124
|
+
const now = new Date();
|
|
125
|
+
const timeElapsedMinutes = Math.round((now.getTime() - startTime.getTime()) / 60000);
|
|
126
|
+
return {
|
|
127
|
+
has_active_session: true,
|
|
128
|
+
session_id: session.id,
|
|
129
|
+
journey_name: session.journeyId || undefined,
|
|
130
|
+
current_step: progress.currentStep,
|
|
131
|
+
total_steps: progress.totalSteps,
|
|
132
|
+
percent_complete: progress.percentComplete,
|
|
133
|
+
checkpoints_saved: sessionCheckpoints.length,
|
|
134
|
+
time_elapsed_minutes: timeElapsedMinutes,
|
|
135
|
+
started_at: session.startedAt.toISOString(),
|
|
136
|
+
last_activity: session.lastActiveAt?.toISOString(),
|
|
137
|
+
status: session.status,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
logger.error('Error getting session status:', error);
|
|
142
|
+
return {
|
|
143
|
+
has_active_session: false,
|
|
144
|
+
checkpoints_saved: 0,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
async function getHistoryStatus() {
|
|
149
|
+
try {
|
|
150
|
+
const db = getDb();
|
|
151
|
+
// Get recent sessions
|
|
152
|
+
const recentSessions = await db
|
|
153
|
+
.select()
|
|
154
|
+
.from(sessions)
|
|
155
|
+
.orderBy(desc(sessions.startedAt))
|
|
156
|
+
.limit(5);
|
|
157
|
+
// Get total session count
|
|
158
|
+
const allSessions = await db.select().from(sessions);
|
|
159
|
+
// Get recent insights
|
|
160
|
+
const recentInsights = await db
|
|
161
|
+
.select()
|
|
162
|
+
.from(insights)
|
|
163
|
+
.orderBy(desc(insights.createdAt))
|
|
164
|
+
.limit(5);
|
|
165
|
+
// Get all insights for pattern detection
|
|
166
|
+
const allInsights = await db.select().from(insights);
|
|
167
|
+
// Detect patterns from insight tags
|
|
168
|
+
const tagCounts = {};
|
|
169
|
+
for (const insight of allInsights) {
|
|
170
|
+
const tags = insight.tags;
|
|
171
|
+
if (tags) {
|
|
172
|
+
for (const tag of tags) {
|
|
173
|
+
tagCounts[tag] = (tagCounts[tag] || 0) + 1;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Find recurring patterns (tags that appear 3+ times)
|
|
178
|
+
const patterns = Object.entries(tagCounts)
|
|
179
|
+
.filter(([, count]) => count >= 3)
|
|
180
|
+
.sort((a, b) => b[1] - a[1])
|
|
181
|
+
.slice(0, 5)
|
|
182
|
+
.map(([tag, count]) => `${tag} (${count} occurrences)`);
|
|
183
|
+
return {
|
|
184
|
+
recent_sessions: recentSessions.map(s => ({
|
|
185
|
+
id: s.id,
|
|
186
|
+
journey: s.journeyId || undefined,
|
|
187
|
+
status: s.status,
|
|
188
|
+
started_at: s.startedAt.toISOString(),
|
|
189
|
+
})),
|
|
190
|
+
total_sessions: allSessions.length,
|
|
191
|
+
total_insights: allInsights.length,
|
|
192
|
+
recent_insights: recentInsights.map(i => ({
|
|
193
|
+
content: i.content.substring(0, 100) + (i.content.length > 100 ? '...' : ''),
|
|
194
|
+
tags: i.tags,
|
|
195
|
+
created_at: i.createdAt.toISOString(),
|
|
196
|
+
})),
|
|
197
|
+
patterns_detected: patterns,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
logger.error('Error getting history status:', error);
|
|
202
|
+
return {
|
|
203
|
+
recent_sessions: [],
|
|
204
|
+
total_sessions: 0,
|
|
205
|
+
total_insights: 0,
|
|
206
|
+
recent_insights: [],
|
|
207
|
+
patterns_detected: [],
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
async function getContextStatus() {
|
|
212
|
+
try {
|
|
213
|
+
const contextManager = new ContextManager();
|
|
214
|
+
await contextManager.initialize();
|
|
215
|
+
const checkResult = await contextManager.check(true);
|
|
216
|
+
const metadata = (checkResult.data || {});
|
|
217
|
+
const entries = await contextManager.retrieve();
|
|
218
|
+
const allEntries = (Array.isArray(entries.data) ? entries.data : []);
|
|
219
|
+
// Categorize entries
|
|
220
|
+
const entriesByCategory = {};
|
|
221
|
+
const recentDecisions = [];
|
|
222
|
+
const recentConstraints = [];
|
|
223
|
+
const storedPatterns = [];
|
|
224
|
+
for (const entry of allEntries) {
|
|
225
|
+
entriesByCategory[entry.category] = (entriesByCategory[entry.category] || 0) + 1;
|
|
226
|
+
if (entry.category === 'decision') {
|
|
227
|
+
recentDecisions.push(entry.content.substring(0, 80));
|
|
228
|
+
}
|
|
229
|
+
else if (entry.category === 'constraint') {
|
|
230
|
+
recentConstraints.push(entry.content.substring(0, 80));
|
|
231
|
+
}
|
|
232
|
+
else if (entry.category === 'pattern') {
|
|
233
|
+
storedPatterns.push(entry.content.substring(0, 80));
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return {
|
|
237
|
+
context_window_usage_percent: metadata.context_window_usage_percent || 0,
|
|
238
|
+
entries_by_category: entriesByCategory,
|
|
239
|
+
total_entries: allEntries.length,
|
|
240
|
+
recent_decisions: recentDecisions.slice(0, 3),
|
|
241
|
+
recent_constraints: recentConstraints.slice(0, 3),
|
|
242
|
+
stored_patterns: storedPatterns.slice(0, 3),
|
|
243
|
+
warning: metadata.context_window_usage_percent > 80
|
|
244
|
+
? 'Context window is getting full. Consider archiving old entries.'
|
|
245
|
+
: undefined,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
logger.error('Error getting context status:', error);
|
|
250
|
+
return {
|
|
251
|
+
context_window_usage_percent: 0,
|
|
252
|
+
entries_by_category: {},
|
|
253
|
+
total_entries: 0,
|
|
254
|
+
recent_decisions: [],
|
|
255
|
+
recent_constraints: [],
|
|
256
|
+
stored_patterns: [],
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
async function getProtectionStatusSummary() {
|
|
261
|
+
try {
|
|
262
|
+
const status = await getProtectionStatus({});
|
|
263
|
+
const backups = await listBackups({});
|
|
264
|
+
const backupList = Array.isArray(backups) ? backups : backups.backups || [];
|
|
265
|
+
return {
|
|
266
|
+
code_freeze_enabled: status.codeFreezeEnabled || false,
|
|
267
|
+
total_backups: backupList.length,
|
|
268
|
+
recent_backups: backupList
|
|
269
|
+
.slice(0, 3)
|
|
270
|
+
.map(b => ({
|
|
271
|
+
file: b.path || b.filePath || 'unknown',
|
|
272
|
+
created_at: b.createdAt || 'unknown',
|
|
273
|
+
})),
|
|
274
|
+
protected_files: status.protectedFiles || 0,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
logger.error('Error getting protection status:', error);
|
|
279
|
+
return {
|
|
280
|
+
code_freeze_enabled: false,
|
|
281
|
+
total_backups: 0,
|
|
282
|
+
recent_backups: [],
|
|
283
|
+
protected_files: 0,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
async function getPreferencesStatus() {
|
|
288
|
+
try {
|
|
289
|
+
// Get user preferences (using anonymous user for now)
|
|
290
|
+
const userContext = await getUserContext({
|
|
291
|
+
include_recent_insights: false,
|
|
292
|
+
include_session_history: false,
|
|
293
|
+
});
|
|
294
|
+
const prefs = userContext.preferences || {};
|
|
295
|
+
return {
|
|
296
|
+
has_preferences: Object.keys(prefs).length > 0,
|
|
297
|
+
timezone: prefs.timezone,
|
|
298
|
+
preferred_journey_length: prefs.preferredJourneyLength,
|
|
299
|
+
notification_preferences: prefs.notifications,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
catch (error) {
|
|
303
|
+
logger.error('Error getting preferences status:', error);
|
|
304
|
+
return {
|
|
305
|
+
has_preferences: false,
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
// ============================================================
|
|
310
|
+
// SUMMARY AND NEXT STEPS
|
|
311
|
+
// ============================================================
|
|
312
|
+
function generateSummary(result) {
|
|
313
|
+
const parts = [];
|
|
314
|
+
if (result.session?.has_active_session) {
|
|
315
|
+
const s = result.session;
|
|
316
|
+
parts.push(`Active session: Step ${s.current_step}/${s.total_steps} (${s.percent_complete}% complete), ${s.checkpoints_saved} checkpoints saved, ${s.time_elapsed_minutes} min elapsed.`);
|
|
317
|
+
}
|
|
318
|
+
else if (result.session) {
|
|
319
|
+
parts.push('No active session.');
|
|
320
|
+
}
|
|
321
|
+
if (result.history) {
|
|
322
|
+
const h = result.history;
|
|
323
|
+
parts.push(`History: ${h.total_sessions} sessions, ${h.total_insights} insights.`);
|
|
324
|
+
if (h.patterns_detected.length > 0) {
|
|
325
|
+
parts.push(`Patterns: ${h.patterns_detected.slice(0, 2).join(', ')}.`);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
if (result.context) {
|
|
329
|
+
const c = result.context;
|
|
330
|
+
parts.push(`Context: ${c.total_entries} entries stored, ${c.context_window_usage_percent.toFixed(0)}% window used.`);
|
|
331
|
+
if (c.warning) {
|
|
332
|
+
parts.push(`⚠️ ${c.warning}`);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
if (result.protection) {
|
|
336
|
+
const p = result.protection;
|
|
337
|
+
parts.push(`Protection: ${p.total_backups} backups, freeze ${p.code_freeze_enabled ? 'enabled' : 'disabled'}.`);
|
|
338
|
+
}
|
|
339
|
+
return parts.join(' ');
|
|
340
|
+
}
|
|
341
|
+
function generateNextSteps(result) {
|
|
342
|
+
const steps = [];
|
|
343
|
+
if (!result.session?.has_active_session && result.history?.total_sessions === 0) {
|
|
344
|
+
steps.push('Start your first session with "start a reflection" or "let\'s begin"');
|
|
345
|
+
}
|
|
346
|
+
else if (!result.session?.has_active_session && result.history) {
|
|
347
|
+
steps.push('Resume a session with "continue" or start fresh with "new session"');
|
|
348
|
+
}
|
|
349
|
+
if (result.session?.has_active_session && result.session.percent_complete && result.session.percent_complete > 75) {
|
|
350
|
+
steps.push('You\'re almost done! Say "wrap up" to complete your session.');
|
|
351
|
+
}
|
|
352
|
+
if (result.context?.context_window_usage_percent && result.context.context_window_usage_percent > 80) {
|
|
353
|
+
steps.push('Consider cleaning up old context with "clean up context"');
|
|
354
|
+
}
|
|
355
|
+
if (result.protection && !result.protection.code_freeze_enabled && result.protection.total_backups === 0) {
|
|
356
|
+
steps.push('Enable protection with "backup my files" before making changes');
|
|
357
|
+
}
|
|
358
|
+
if (!result.preferences?.has_preferences) {
|
|
359
|
+
steps.push('Set your preferences with "remember my timezone" or "I prefer short journeys"');
|
|
360
|
+
}
|
|
361
|
+
if (steps.length === 0) {
|
|
362
|
+
steps.push('Everything looks good! What would you like to do next?');
|
|
363
|
+
}
|
|
364
|
+
return steps.slice(0, 3);
|
|
365
|
+
}
|
|
366
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/tools/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool: verify
|
|
3
|
+
*
|
|
4
|
+
* Pre-delivery verification for AI-generated content.
|
|
5
|
+
* Catches hallucinations, incorrect packages, bad code, and unsafe responses
|
|
6
|
+
* BEFORE they reach the user.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { InterventionAction, RiskLevel } from '../governance/evaluationEngine.js';
|
|
10
|
+
declare const VerifyInputSchema: z.ZodObject<{
|
|
11
|
+
type: z.ZodEnum<["code", "packages", "facts", "response", "all"]>;
|
|
12
|
+
content: z.ZodString;
|
|
13
|
+
language: z.ZodOptional<z.ZodString>;
|
|
14
|
+
registry: z.ZodDefault<z.ZodOptional<z.ZodEnum<["npm", "pypi", "maven", "cargo", "go", "nuget", "gem"]>>>;
|
|
15
|
+
context: z.ZodOptional<z.ZodString>;
|
|
16
|
+
session_id: z.ZodOptional<z.ZodString>;
|
|
17
|
+
}, "strip", z.ZodTypeAny, {
|
|
18
|
+
type: "all" | "code" | "packages" | "facts" | "response";
|
|
19
|
+
content: string;
|
|
20
|
+
registry: "npm" | "maven" | "pypi" | "cargo" | "gem" | "nuget" | "go";
|
|
21
|
+
context?: string | undefined;
|
|
22
|
+
session_id?: string | undefined;
|
|
23
|
+
language?: string | undefined;
|
|
24
|
+
}, {
|
|
25
|
+
type: "all" | "code" | "packages" | "facts" | "response";
|
|
26
|
+
content: string;
|
|
27
|
+
context?: string | undefined;
|
|
28
|
+
session_id?: string | undefined;
|
|
29
|
+
language?: string | undefined;
|
|
30
|
+
registry?: "npm" | "maven" | "pypi" | "cargo" | "gem" | "nuget" | "go" | undefined;
|
|
31
|
+
}>;
|
|
32
|
+
export type VerifyInput = z.infer<typeof VerifyInputSchema>;
|
|
33
|
+
export declare const verifyTool: {
|
|
34
|
+
definition: {
|
|
35
|
+
name: string;
|
|
36
|
+
description: string;
|
|
37
|
+
annotations: {
|
|
38
|
+
readOnlyHint: boolean;
|
|
39
|
+
destructiveHint: boolean;
|
|
40
|
+
openWorldHint: boolean;
|
|
41
|
+
};
|
|
42
|
+
inputSchema: {
|
|
43
|
+
type: string;
|
|
44
|
+
properties: {
|
|
45
|
+
type: {
|
|
46
|
+
type: string;
|
|
47
|
+
enum: string[];
|
|
48
|
+
description: string;
|
|
49
|
+
};
|
|
50
|
+
content: {
|
|
51
|
+
type: string;
|
|
52
|
+
description: string;
|
|
53
|
+
};
|
|
54
|
+
language: {
|
|
55
|
+
type: string;
|
|
56
|
+
description: string;
|
|
57
|
+
};
|
|
58
|
+
registry: {
|
|
59
|
+
type: string;
|
|
60
|
+
enum: string[];
|
|
61
|
+
description: string;
|
|
62
|
+
};
|
|
63
|
+
context: {
|
|
64
|
+
type: string;
|
|
65
|
+
description: string;
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
required: string[];
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
handler: typeof handleVerify;
|
|
72
|
+
};
|
|
73
|
+
export declare function handleVerify(args: unknown): Promise<{
|
|
74
|
+
summary: string;
|
|
75
|
+
recommendation: string;
|
|
76
|
+
verified: boolean;
|
|
77
|
+
type: string;
|
|
78
|
+
checks_run: string[];
|
|
79
|
+
issues: string[];
|
|
80
|
+
fixes: string[];
|
|
81
|
+
warnings: string[];
|
|
82
|
+
confidence: number;
|
|
83
|
+
code_verification?: CodeVerificationResult;
|
|
84
|
+
package_verification?: PackageVerificationResult;
|
|
85
|
+
governance_verification?: GovernanceVerificationResult;
|
|
86
|
+
success: boolean;
|
|
87
|
+
error?: undefined;
|
|
88
|
+
} | {
|
|
89
|
+
success: boolean;
|
|
90
|
+
verified: boolean;
|
|
91
|
+
error: string;
|
|
92
|
+
recommendation: string;
|
|
93
|
+
}>;
|
|
94
|
+
interface CodeVerificationResult {
|
|
95
|
+
issues: string[];
|
|
96
|
+
fixes: string[];
|
|
97
|
+
warnings: string[];
|
|
98
|
+
ai_errors_found: number;
|
|
99
|
+
build_context?: {
|
|
100
|
+
language: string;
|
|
101
|
+
module_system?: string;
|
|
102
|
+
requires_js_extensions: boolean;
|
|
103
|
+
};
|
|
104
|
+
fixed_code?: string;
|
|
105
|
+
}
|
|
106
|
+
interface PackageVerificationResult {
|
|
107
|
+
packages_checked: string[];
|
|
108
|
+
valid: string[];
|
|
109
|
+
invalid: string[];
|
|
110
|
+
suggestions: string[];
|
|
111
|
+
typosquatting_detected: string[];
|
|
112
|
+
deprecated: string[];
|
|
113
|
+
}
|
|
114
|
+
interface GovernanceVerificationResult {
|
|
115
|
+
action: InterventionAction;
|
|
116
|
+
risk_level: RiskLevel;
|
|
117
|
+
risk_score: number;
|
|
118
|
+
issues: string[];
|
|
119
|
+
hallucination_detected: boolean;
|
|
120
|
+
inconsistency_detected: boolean;
|
|
121
|
+
tone_drift_detected: boolean;
|
|
122
|
+
unsafe_reasoning_detected: boolean;
|
|
123
|
+
modified_content?: string;
|
|
124
|
+
}
|
|
125
|
+
export {};
|
|
126
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/tools/verify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAoC,kBAAkB,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAGpH,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;EAOrB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCtB,CAAC;AAEF,wBAAsB,YAAY,CAAC,IAAI,EAAE,OAAO;;;cA0UpC,OAAO;UACX,MAAM;gBACA,MAAM,EAAE;YACZ,MAAM,EAAE;WACT,MAAM,EAAE;cACL,MAAM,EAAE;gBACN,MAAM;wBACE,sBAAsB;2BACnB,yBAAyB;8BACtB,4BAA4B;;;;;;;;GAtQvD;AAMD,UAAU,sBAAsB;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,sBAAsB,EAAE,OAAO,CAAC;KACjC,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAsCD,UAAU,yBAAyB;IACjC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAqHD,UAAU,4BAA4B;IACpC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,SAAS,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,sBAAsB,EAAE,OAAO,CAAC;IAChC,sBAAsB,EAAE,OAAO,CAAC;IAChC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,yBAAyB,EAAE,OAAO,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B"}
|