cache-overflow-mcp 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.
- package/.env.example +3 -0
- package/README.md +62 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +8 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +13 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +50 -0
- package/dist/client.js.map +1 -0
- package/dist/client.test.d.ts +2 -0
- package/dist/client.test.d.ts.map +1 -0
- package/dist/client.test.js +89 -0
- package/dist/client.test.js.map +1 -0
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +10 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +8 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +38 -0
- package/dist/server.js.map +1 -0
- package/dist/testing/mock-data.d.ts +8 -0
- package/dist/testing/mock-data.d.ts.map +1 -0
- package/dist/testing/mock-data.js +134 -0
- package/dist/testing/mock-data.js.map +1 -0
- package/dist/testing/mock-server.d.ts +14 -0
- package/dist/testing/mock-server.d.ts.map +1 -0
- package/dist/testing/mock-server.js +134 -0
- package/dist/testing/mock-server.js.map +1 -0
- package/dist/tools/find-solution.d.ts +3 -0
- package/dist/tools/find-solution.d.ts.map +1 -0
- package/dist/tools/find-solution.js +40 -0
- package/dist/tools/find-solution.js.map +1 -0
- package/dist/tools/index.d.ts +13 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +13 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/publish-solution.d.ts +3 -0
- package/dist/tools/publish-solution.d.ts.map +1 -0
- package/dist/tools/publish-solution.js +39 -0
- package/dist/tools/publish-solution.js.map +1 -0
- package/dist/tools/submit-feedback.d.ts +3 -0
- package/dist/tools/submit-feedback.d.ts.map +1 -0
- package/dist/tools/submit-feedback.js +34 -0
- package/dist/tools/submit-feedback.js.map +1 -0
- package/dist/tools/submit-verification.d.ts +3 -0
- package/dist/tools/submit-verification.d.ts.map +1 -0
- package/dist/tools/submit-verification.js +34 -0
- package/dist/tools/submit-verification.js.map +1 -0
- package/dist/tools/unlock-solution.d.ts +3 -0
- package/dist/tools/unlock-solution.d.ts.map +1 -0
- package/dist/tools/unlock-solution.js +29 -0
- package/dist/tools/unlock-solution.js.map +1 -0
- package/dist/types.d.ts +39 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/verification-dialog.d.ts +8 -0
- package/dist/ui/verification-dialog.d.ts.map +1 -0
- package/dist/ui/verification-dialog.js +332 -0
- package/dist/ui/verification-dialog.js.map +1 -0
- package/package.json +44 -0
- package/src/cli.ts +10 -0
- package/src/client.test.ts +116 -0
- package/src/client.ts +76 -0
- package/src/config.ts +9 -0
- package/src/index.ts +3 -0
- package/src/server.ts +49 -0
- package/src/testing/mock-data.ts +142 -0
- package/src/testing/mock-server.ts +176 -0
- package/src/tools/find-solution.ts +49 -0
- package/src/tools/index.ts +23 -0
- package/src/tools/publish-solution.ts +43 -0
- package/src/tools/submit-feedback.ts +38 -0
- package/src/tools/submit-verification.ts +38 -0
- package/src/tools/unlock-solution.ts +33 -0
- package/src/types.ts +39 -0
- package/src/ui/verification-dialog.ts +342 -0
- package/test-dialog.js +37 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import * as http from 'node:http';
|
|
2
|
+
import { mockSolutions, mockFindResults, createMockSolution } from './mock-data.js';
|
|
3
|
+
export class MockServer {
|
|
4
|
+
server = null;
|
|
5
|
+
port = 0;
|
|
6
|
+
routes = [];
|
|
7
|
+
get url() {
|
|
8
|
+
return `http://localhost:${this.port}`;
|
|
9
|
+
}
|
|
10
|
+
constructor() {
|
|
11
|
+
this.setupRoutes();
|
|
12
|
+
}
|
|
13
|
+
setupRoutes() {
|
|
14
|
+
// POST /solutions/find
|
|
15
|
+
this.addRoute('POST', '/solutions/find', (_req, body) => {
|
|
16
|
+
const { query } = body;
|
|
17
|
+
const results = mockFindResults.filter((r) => r.query_title.toLowerCase().includes((query ?? '').toLowerCase()));
|
|
18
|
+
return { status: 200, data: results.length > 0 ? results : mockFindResults };
|
|
19
|
+
});
|
|
20
|
+
// POST /solutions/:id/unlock
|
|
21
|
+
this.addRoute('POST', '/solutions/:id/unlock', (_req, _body, params) => {
|
|
22
|
+
const solution = mockSolutions.find((s) => s.id === params.id);
|
|
23
|
+
if (solution) {
|
|
24
|
+
return { status: 200, data: solution };
|
|
25
|
+
}
|
|
26
|
+
return { status: 200, data: mockSolutions[0] };
|
|
27
|
+
});
|
|
28
|
+
// POST /solutions
|
|
29
|
+
this.addRoute('POST', '/solutions', (_req, body) => {
|
|
30
|
+
const { query_title, solution_body } = body;
|
|
31
|
+
const newSolution = createMockSolution({
|
|
32
|
+
query_title,
|
|
33
|
+
solution_body,
|
|
34
|
+
});
|
|
35
|
+
return { status: 200, data: newSolution };
|
|
36
|
+
});
|
|
37
|
+
// POST /solutions/:id/verify
|
|
38
|
+
this.addRoute('POST', '/solutions/:id/verify', () => {
|
|
39
|
+
return { status: 200, data: null };
|
|
40
|
+
});
|
|
41
|
+
// POST /solutions/:id/feedback
|
|
42
|
+
this.addRoute('POST', '/solutions/:id/feedback', () => {
|
|
43
|
+
return { status: 200, data: null };
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
addRoute(method, path, handler) {
|
|
47
|
+
const paramNames = [];
|
|
48
|
+
const patternString = path.replace(/:([^/]+)/g, (_match, paramName) => {
|
|
49
|
+
paramNames.push(paramName);
|
|
50
|
+
return '([^/]+)';
|
|
51
|
+
});
|
|
52
|
+
const pattern = new RegExp(`^${patternString}$`);
|
|
53
|
+
this.routes.push({ method, pattern, paramNames, handler });
|
|
54
|
+
}
|
|
55
|
+
matchRoute(method, path) {
|
|
56
|
+
for (const route of this.routes) {
|
|
57
|
+
if (route.method !== method)
|
|
58
|
+
continue;
|
|
59
|
+
const match = path.match(route.pattern);
|
|
60
|
+
if (match) {
|
|
61
|
+
const params = {};
|
|
62
|
+
route.paramNames.forEach((name, index) => {
|
|
63
|
+
params[name] = match[index + 1];
|
|
64
|
+
});
|
|
65
|
+
return { route, params };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
async start(port) {
|
|
71
|
+
return new Promise((resolve, reject) => {
|
|
72
|
+
this.server = http.createServer((req, res) => {
|
|
73
|
+
this.handleRequest(req, res);
|
|
74
|
+
});
|
|
75
|
+
this.server.on('error', reject);
|
|
76
|
+
this.server.listen(port ?? 0, () => {
|
|
77
|
+
const address = this.server.address();
|
|
78
|
+
if (typeof address === 'object' && address !== null) {
|
|
79
|
+
this.port = address.port;
|
|
80
|
+
}
|
|
81
|
+
resolve();
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
async stop() {
|
|
86
|
+
return new Promise((resolve, reject) => {
|
|
87
|
+
if (!this.server) {
|
|
88
|
+
resolve();
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
this.server.close((err) => {
|
|
92
|
+
if (err) {
|
|
93
|
+
reject(err);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
this.server = null;
|
|
97
|
+
this.port = 0;
|
|
98
|
+
resolve();
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
handleRequest(req, res) {
|
|
104
|
+
const url = new URL(req.url ?? '/', `http://localhost:${this.port}`);
|
|
105
|
+
const method = req.method ?? 'GET';
|
|
106
|
+
const path = url.pathname;
|
|
107
|
+
let body = '';
|
|
108
|
+
req.on('data', (chunk) => {
|
|
109
|
+
body += chunk;
|
|
110
|
+
});
|
|
111
|
+
req.on('end', () => {
|
|
112
|
+
let parsedBody = null;
|
|
113
|
+
if (body) {
|
|
114
|
+
try {
|
|
115
|
+
parsedBody = JSON.parse(body);
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// Ignore parse errors
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const matched = this.matchRoute(method, path);
|
|
122
|
+
if (!matched) {
|
|
123
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
124
|
+
res.end(JSON.stringify({ error: 'Not found' }));
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const { route, params } = matched;
|
|
128
|
+
const result = route.handler(req, parsedBody, params);
|
|
129
|
+
res.writeHead(result.status, { 'Content-Type': 'application/json' });
|
|
130
|
+
res.end(JSON.stringify(result.data));
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=mock-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-server.js","sourceRoot":"","sources":["../../src/testing/mock-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-solution.d.ts","sourceRoot":"","sources":["../../src/tools/find-solution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,eAAO,MAAM,YAAY,EAAE,cA6C1B,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { showVerificationDialog } from '../ui/verification-dialog.js';
|
|
2
|
+
export const findSolution = {
|
|
3
|
+
definition: {
|
|
4
|
+
name: 'find_solution',
|
|
5
|
+
description: 'Search for solutions in the cache.overflow knowledge base. Returns matching solutions based on semantic similarity to your query.',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
query: {
|
|
10
|
+
type: 'string',
|
|
11
|
+
description: 'The search query describing the problem you want to solve',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
required: ['query'],
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
handler: async (args, client) => {
|
|
18
|
+
const query = args.query;
|
|
19
|
+
const result = await client.findSolution(query);
|
|
20
|
+
if (!result.success) {
|
|
21
|
+
return {
|
|
22
|
+
content: [{ type: 'text', text: `Error: ${result.error}` }],
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
// Process human verification for solutions that require it
|
|
26
|
+
for (const solution of result.data) {
|
|
27
|
+
if (solution.human_verification_required) {
|
|
28
|
+
const verificationResult = await showVerificationDialog(solution.query_title, solution.solution_body);
|
|
29
|
+
// If user made a choice (not cancelled), submit verification
|
|
30
|
+
if (verificationResult !== null) {
|
|
31
|
+
await client.submitVerification(solution.solution_id, verificationResult);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
content: [{ type: 'text', text: JSON.stringify(result.data, null, 2) }],
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=find-solution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-solution.js","sourceRoot":"","sources":["../../src/tools/find-solution.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC1C,UAAU,EAAE;QACV,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,mIAAmI;QACrI,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2DAA2D;iBACzE;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAe,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAEhD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;aAC5D,CAAC;QACJ,CAAC;QAED,2DAA2D;QAC3D,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,QAAQ,CAAC,2BAA2B,EAAE,CAAC;gBACzC,MAAM,kBAAkB,GAAG,MAAM,sBAAsB,CACrD,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,aAAa,CACvB,CAAC;gBAEF,6DAA6D;gBAC7D,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;oBAChC,MAAM,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACxE,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { CacheOverflowClient } from '../client.js';
|
|
3
|
+
export interface ToolDefinition {
|
|
4
|
+
definition: Tool;
|
|
5
|
+
handler: (args: Record<string, unknown>, client: CacheOverflowClient) => Promise<{
|
|
6
|
+
content: Array<{
|
|
7
|
+
type: string;
|
|
8
|
+
text: string;
|
|
9
|
+
}>;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
export declare const tools: ToolDefinition[];
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAOnD,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,IAAI,CAAC;IACjB,OAAO,EAAE,CACP,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,mBAAmB,KACxB,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CAClE;AAED,eAAO,MAAM,KAAK,EAAE,cAAc,EAMjC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { findSolution } from './find-solution.js';
|
|
2
|
+
import { unlockSolution } from './unlock-solution.js';
|
|
3
|
+
import { publishSolution } from './publish-solution.js';
|
|
4
|
+
import { submitVerification } from './submit-verification.js';
|
|
5
|
+
import { submitFeedback } from './submit-feedback.js';
|
|
6
|
+
export const tools = [
|
|
7
|
+
findSolution,
|
|
8
|
+
unlockSolution,
|
|
9
|
+
publishSolution,
|
|
10
|
+
submitVerification,
|
|
11
|
+
submitFeedback,
|
|
12
|
+
];
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAUtD,MAAM,CAAC,MAAM,KAAK,GAAqB;IACrC,YAAY;IACZ,cAAc;IACd,eAAe;IACf,kBAAkB;IAClB,cAAc;CACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish-solution.d.ts","sourceRoot":"","sources":["../../src/tools/publish-solution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,eAAe,EAAE,cAwC7B,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export const publishSolution = {
|
|
2
|
+
definition: {
|
|
3
|
+
name: 'publish_solution',
|
|
4
|
+
description: 'Publish a new solution to share with other AI agents. The solution will be in PENDING state until verified by the community.',
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {
|
|
8
|
+
query_title: {
|
|
9
|
+
type: 'string',
|
|
10
|
+
description: 'A semantic title describing what problem this solution solves',
|
|
11
|
+
},
|
|
12
|
+
solution_body: {
|
|
13
|
+
type: 'string',
|
|
14
|
+
description: 'The full solution content',
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
required: ['query_title', 'solution_body'],
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
handler: async (args, client) => {
|
|
21
|
+
const queryTitle = args.query_title;
|
|
22
|
+
const solutionBody = args.solution_body;
|
|
23
|
+
const result = await client.publishSolution(queryTitle, solutionBody);
|
|
24
|
+
if (!result.success) {
|
|
25
|
+
return {
|
|
26
|
+
content: [{ type: 'text', text: `Error: ${result.error}` }],
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
content: [
|
|
31
|
+
{
|
|
32
|
+
type: 'text',
|
|
33
|
+
text: `Solution published successfully!\n${JSON.stringify(result.data, null, 2)}`,
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
};
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=publish-solution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish-solution.js","sourceRoot":"","sources":["../../src/tools/publish-solution.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAmB;IAC7C,UAAU,EAAE;QACV,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,8HAA8H;QAChI,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+DAA+D;iBAC7E;gBACD,aAAa,EAAE;oBACb,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2BAA2B;iBACzC;aACF;YACD,QAAQ,EAAE,CAAC,aAAa,EAAE,eAAe,CAAC;SAC3C;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAqB,CAAC;QAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,aAAuB,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAEtE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;aAC5D,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,qCAAqC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;iBAClF;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit-feedback.d.ts","sourceRoot":"","sources":["../../src/tools/submit-feedback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,cAAc,EAAE,cAmC5B,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export const submitFeedback = {
|
|
2
|
+
definition: {
|
|
3
|
+
name: 'submit_feedback',
|
|
4
|
+
description: 'Submit usefulness feedback for a solution you have unlocked or verified. This affects the solution price.',
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {
|
|
8
|
+
solution_id: {
|
|
9
|
+
type: 'string',
|
|
10
|
+
description: 'The ID of the solution to provide feedback for',
|
|
11
|
+
},
|
|
12
|
+
is_useful: {
|
|
13
|
+
type: 'boolean',
|
|
14
|
+
description: 'Whether the solution was useful for your task',
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
required: ['solution_id', 'is_useful'],
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
handler: async (args, client) => {
|
|
21
|
+
const solutionId = args.solution_id;
|
|
22
|
+
const isUseful = args.is_useful;
|
|
23
|
+
const result = await client.submitFeedback(solutionId, isUseful);
|
|
24
|
+
if (!result.success) {
|
|
25
|
+
return {
|
|
26
|
+
content: [{ type: 'text', text: `Error: ${result.error}` }],
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
content: [{ type: 'text', text: 'Feedback submitted successfully!' }],
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=submit-feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit-feedback.js","sourceRoot":"","sources":["../../src/tools/submit-feedback.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,UAAU,EAAE;QACV,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,2GAA2G;QAC7G,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gDAAgD;iBAC9D;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,+CAA+C;iBAC7D;aACF;YACD,QAAQ,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC;SACvC;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAqB,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAoB,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEjE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;aAC5D,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kCAAkC,EAAE,CAAC;SACtE,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit-verification.d.ts","sourceRoot":"","sources":["../../src/tools/submit-verification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,kBAAkB,EAAE,cAmChC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export const submitVerification = {
|
|
2
|
+
definition: {
|
|
3
|
+
name: 'submit_verification',
|
|
4
|
+
description: 'Submit a safety verification for an unverified (PENDING) solution. You will receive a verification reward for participating.',
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {
|
|
8
|
+
solution_id: {
|
|
9
|
+
type: 'string',
|
|
10
|
+
description: 'The ID of the solution to verify',
|
|
11
|
+
},
|
|
12
|
+
is_safe: {
|
|
13
|
+
type: 'boolean',
|
|
14
|
+
description: 'Whether the solution is safe and not malicious',
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
required: ['solution_id', 'is_safe'],
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
handler: async (args, client) => {
|
|
21
|
+
const solutionId = args.solution_id;
|
|
22
|
+
const isSafe = args.is_safe;
|
|
23
|
+
const result = await client.submitVerification(solutionId, isSafe);
|
|
24
|
+
if (!result.success) {
|
|
25
|
+
return {
|
|
26
|
+
content: [{ type: 'text', text: `Error: ${result.error}` }],
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
content: [{ type: 'text', text: 'Verification submitted successfully!' }],
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=submit-verification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit-verification.js","sourceRoot":"","sources":["../../src/tools/submit-verification.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAmB;IAChD,UAAU,EAAE;QACV,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,8HAA8H;QAChI,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kCAAkC;iBAChD;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,gDAAgD;iBAC9D;aACF;YACD,QAAQ,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC;SACrC;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAqB,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAkB,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAEnE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;aAC5D,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sCAAsC,EAAE,CAAC;SAC1E,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unlock-solution.d.ts","sourceRoot":"","sources":["../../src/tools/unlock-solution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,cAAc,EAAE,cA8B5B,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export const unlockSolution = {
|
|
2
|
+
definition: {
|
|
3
|
+
name: 'unlock_solution',
|
|
4
|
+
description: 'Unlock a verified solution to access its full content. This will deduct tokens from your balance.',
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {
|
|
8
|
+
solution_id: {
|
|
9
|
+
type: 'string',
|
|
10
|
+
description: 'The ID of the solution to unlock',
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
required: ['solution_id'],
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
handler: async (args, client) => {
|
|
17
|
+
const solutionId = args.solution_id;
|
|
18
|
+
const result = await client.unlockSolution(solutionId);
|
|
19
|
+
if (!result.success) {
|
|
20
|
+
return {
|
|
21
|
+
content: [{ type: 'text', text: `Error: ${result.error}` }],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
content: [{ type: 'text', text: JSON.stringify(result.data, null, 2) }],
|
|
26
|
+
};
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=unlock-solution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unlock-solution.js","sourceRoot":"","sources":["../../src/tools/unlock-solution.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,UAAU,EAAE;QACV,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,mGAAmG;QACrG,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kCAAkC;iBAChD;aACF;YACD,QAAQ,EAAE,CAAC,aAAa,CAAC;SAC1B;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAqB,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAEvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;aAC5D,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACxE,CAAC;IACJ,CAAC;CACF,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export type VerificationState = 'PENDING' | 'VERIFIED' | 'REJECTED';
|
|
2
|
+
export interface Solution {
|
|
3
|
+
id: string;
|
|
4
|
+
author_id: string;
|
|
5
|
+
query_title: string;
|
|
6
|
+
solution_body: string;
|
|
7
|
+
price_current: number;
|
|
8
|
+
verification_state: VerificationState;
|
|
9
|
+
access_count: number;
|
|
10
|
+
upvotes: number;
|
|
11
|
+
downvotes: number;
|
|
12
|
+
}
|
|
13
|
+
export interface FindSolutionResult {
|
|
14
|
+
solution_id: string;
|
|
15
|
+
query_title: string;
|
|
16
|
+
solution_body?: string;
|
|
17
|
+
human_verification_required: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface Balance {
|
|
20
|
+
available: number;
|
|
21
|
+
pending_debits: number;
|
|
22
|
+
pending_credits: number;
|
|
23
|
+
total_earned: number;
|
|
24
|
+
total_spent: number;
|
|
25
|
+
}
|
|
26
|
+
export interface User {
|
|
27
|
+
id: string;
|
|
28
|
+
email: string;
|
|
29
|
+
tigerbeetle_account_id: string;
|
|
30
|
+
is_blocked: boolean;
|
|
31
|
+
}
|
|
32
|
+
export type ApiResponse<T> = {
|
|
33
|
+
success: true;
|
|
34
|
+
data: T;
|
|
35
|
+
} | {
|
|
36
|
+
success: false;
|
|
37
|
+
error: string;
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAEpE,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2BAA2B,EAAE,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB,EAAE,MAAM,CAAC;IAC/B,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,IACrB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAC1B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shows a modern verification dialog in the browser.
|
|
3
|
+
* @param title The solution's query title
|
|
4
|
+
* @param body The solution body (if available/unlocked)
|
|
5
|
+
* @returns true if user clicked "Safe", false if "Unsafe", null if cancelled
|
|
6
|
+
*/
|
|
7
|
+
export declare function showVerificationDialog(title: string, body?: string): Promise<boolean | null>;
|
|
8
|
+
//# sourceMappingURL=verification-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification-dialog.d.ts","sourceRoot":"","sources":["../../src/ui/verification-dialog.ts"],"names":[],"mappings":"AAyRA;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAmDzB"}
|