@recursiv/mcp 0.1.1
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 +135 -0
- package/dist/__tests__/scopes.test.d.ts +2 -0
- package/dist/__tests__/scopes.test.d.ts.map +1 -0
- package/dist/__tests__/scopes.test.js +85 -0
- package/dist/__tests__/scopes.test.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +125 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/approval-gate.d.ts +45 -0
- package/dist/lib/approval-gate.d.ts.map +1 -0
- package/dist/lib/approval-gate.js +143 -0
- package/dist/lib/approval-gate.js.map +1 -0
- package/dist/scopes.d.ts +99 -0
- package/dist/scopes.d.ts.map +1 -0
- package/dist/scopes.js +122 -0
- package/dist/scopes.js.map +1 -0
- package/dist/tools/__tests__/agents.test.d.ts +2 -0
- package/dist/tools/__tests__/agents.test.d.ts.map +1 -0
- package/dist/tools/__tests__/agents.test.js +248 -0
- package/dist/tools/__tests__/agents.test.js.map +1 -0
- package/dist/tools/__tests__/devtools.test.d.ts +2 -0
- package/dist/tools/__tests__/devtools.test.d.ts.map +1 -0
- package/dist/tools/__tests__/devtools.test.js +206 -0
- package/dist/tools/__tests__/devtools.test.js.map +1 -0
- package/dist/tools/__tests__/dispatcher.test.d.ts +2 -0
- package/dist/tools/__tests__/dispatcher.test.d.ts.map +1 -0
- package/dist/tools/__tests__/dispatcher.test.js +178 -0
- package/dist/tools/__tests__/dispatcher.test.js.map +1 -0
- package/dist/tools/__tests__/memory.test.d.ts +2 -0
- package/dist/tools/__tests__/memory.test.d.ts.map +1 -0
- package/dist/tools/__tests__/memory.test.js +151 -0
- package/dist/tools/__tests__/memory.test.js.map +1 -0
- package/dist/tools/__tests__/projects.test.d.ts +2 -0
- package/dist/tools/__tests__/projects.test.d.ts.map +1 -0
- package/dist/tools/__tests__/projects.test.js +168 -0
- package/dist/tools/__tests__/projects.test.js.map +1 -0
- package/dist/tools/__tests__/sandbox.test.d.ts +2 -0
- package/dist/tools/__tests__/sandbox.test.d.ts.map +1 -0
- package/dist/tools/__tests__/sandbox.test.js +113 -0
- package/dist/tools/__tests__/sandbox.test.js.map +1 -0
- package/dist/tools/__tests__/social.test.d.ts +2 -0
- package/dist/tools/__tests__/social.test.d.ts.map +1 -0
- package/dist/tools/__tests__/social.test.js +127 -0
- package/dist/tools/__tests__/social.test.js.map +1 -0
- package/dist/tools/__tests__/swarms.test.d.ts +2 -0
- package/dist/tools/__tests__/swarms.test.d.ts.map +1 -0
- package/dist/tools/__tests__/swarms.test.js +320 -0
- package/dist/tools/__tests__/swarms.test.js.map +1 -0
- package/dist/tools/__tests__/templates.test.d.ts +2 -0
- package/dist/tools/__tests__/templates.test.d.ts.map +1 -0
- package/dist/tools/__tests__/templates.test.js +176 -0
- package/dist/tools/__tests__/templates.test.js.map +1 -0
- package/dist/tools/agents.d.ts +4 -0
- package/dist/tools/agents.d.ts.map +1 -0
- package/dist/tools/agents.js +170 -0
- package/dist/tools/agents.js.map +1 -0
- package/dist/tools/devtools.d.ts +4 -0
- package/dist/tools/devtools.d.ts.map +1 -0
- package/dist/tools/devtools.js +511 -0
- package/dist/tools/devtools.js.map +1 -0
- package/dist/tools/dispatcher.d.ts +4 -0
- package/dist/tools/dispatcher.d.ts.map +1 -0
- package/dist/tools/dispatcher.js +647 -0
- package/dist/tools/dispatcher.js.map +1 -0
- package/dist/tools/memory.d.ts +4 -0
- package/dist/tools/memory.d.ts.map +1 -0
- package/dist/tools/memory.js +92 -0
- package/dist/tools/memory.js.map +1 -0
- package/dist/tools/platform.d.ts +4 -0
- package/dist/tools/platform.d.ts.map +1 -0
- package/dist/tools/platform.js +359 -0
- package/dist/tools/platform.js.map +1 -0
- package/dist/tools/projects.d.ts +4 -0
- package/dist/tools/projects.d.ts.map +1 -0
- package/dist/tools/projects.js +79 -0
- package/dist/tools/projects.js.map +1 -0
- package/dist/tools/rate-limiter.d.ts +53 -0
- package/dist/tools/rate-limiter.d.ts.map +1 -0
- package/dist/tools/rate-limiter.js +87 -0
- package/dist/tools/rate-limiter.js.map +1 -0
- package/dist/tools/remaining.d.ts +8 -0
- package/dist/tools/remaining.d.ts.map +1 -0
- package/dist/tools/remaining.js +283 -0
- package/dist/tools/remaining.js.map +1 -0
- package/dist/tools/sandbox.d.ts +4 -0
- package/dist/tools/sandbox.d.ts.map +1 -0
- package/dist/tools/sandbox.js +35 -0
- package/dist/tools/sandbox.js.map +1 -0
- package/dist/tools/social.d.ts +11 -0
- package/dist/tools/social.d.ts.map +1 -0
- package/dist/tools/social.js +136 -0
- package/dist/tools/social.js.map +1 -0
- package/dist/tools/swarms.d.ts +4 -0
- package/dist/tools/swarms.d.ts.map +1 -0
- package/dist/tools/swarms.js +184 -0
- package/dist/tools/swarms.js.map +1 -0
- package/dist/tools/templates.d.ts +4 -0
- package/dist/tools/templates.d.ts.map +1 -0
- package/dist/tools/templates.js +102 -0
- package/dist/tools/templates.js.map +1 -0
- package/dist/tools/utils.d.ts +9 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +8 -0
- package/dist/tools/utils.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAU,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE/D,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,QAgJlF"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Scopes } from '../scopes.js';
|
|
3
|
+
export function registerProjectTools(registry, client) {
|
|
4
|
+
registry.tool('list_projects', 'List projects accessible to the authenticated user', [Scopes.PROJECTS_READ], {
|
|
5
|
+
limit: z.number().optional().describe('Max projects to return'),
|
|
6
|
+
offset: z.number().optional().describe('Pagination offset'),
|
|
7
|
+
organization_id: z.string().optional().describe('Filter by organization UUID'),
|
|
8
|
+
}, async (params) => {
|
|
9
|
+
const result = await client.projects.list(params);
|
|
10
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
11
|
+
});
|
|
12
|
+
registry.tool('get_project', 'Get detailed information about a specific project', [Scopes.PROJECTS_READ], {
|
|
13
|
+
id: z.string().describe('Project UUID'),
|
|
14
|
+
}, async ({ id }) => {
|
|
15
|
+
const result = await client.projects.get(id);
|
|
16
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
17
|
+
});
|
|
18
|
+
registry.tool('create_project', 'Create a new project', [Scopes.PROJECTS_WRITE], {
|
|
19
|
+
organization_id: z.string().describe('Organization UUID'),
|
|
20
|
+
name: z.string().describe('Project name'),
|
|
21
|
+
slug: z.string().optional().describe('URL slug (auto-generated if omitted)'),
|
|
22
|
+
repo_url: z.string().optional().describe('GitHub repository URL'),
|
|
23
|
+
}, async (params) => {
|
|
24
|
+
const result = await client.projects.create(params);
|
|
25
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
26
|
+
});
|
|
27
|
+
registry.tool('delete_project', 'Delete a project permanently', [Scopes.PROJECTS_WRITE], {
|
|
28
|
+
id: z.string().describe('Project UUID'),
|
|
29
|
+
}, async ({ id }) => {
|
|
30
|
+
const result = await client.projects.delete(id);
|
|
31
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
32
|
+
});
|
|
33
|
+
registry.tool('deploy_project', 'Deploy a project to production or create a preview deployment', [Scopes.PROJECTS_WRITE], {
|
|
34
|
+
id: z.string().describe('Project UUID'),
|
|
35
|
+
type: z.enum(['preview', 'production']).optional().describe('Deployment type (default: production)'),
|
|
36
|
+
branch: z.string().optional().describe('Git branch to deploy'),
|
|
37
|
+
commit_hash: z.string().optional().describe('Specific commit hash'),
|
|
38
|
+
commit_message: z.string().optional().describe('Commit message for the deployment'),
|
|
39
|
+
}, async ({ id, ...input }) => {
|
|
40
|
+
const result = await client.projects.deploy(id, input);
|
|
41
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
42
|
+
});
|
|
43
|
+
registry.tool('execute_code', 'Execute code in a project sandbox', [Scopes.PROJECTS_WRITE], {
|
|
44
|
+
id: z.string().describe('Project UUID'),
|
|
45
|
+
code: z.string().describe('Code to execute'),
|
|
46
|
+
language: z.enum(['javascript', 'typescript', 'python']).optional().describe('Language (default: typescript)'),
|
|
47
|
+
}, async ({ id, ...input }) => {
|
|
48
|
+
const result = await client.projects.executeCode(id, input);
|
|
49
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
50
|
+
});
|
|
51
|
+
registry.tool('start_sandbox', 'Start an E2B sandbox for a project', [Scopes.PROJECTS_WRITE], {
|
|
52
|
+
id: z.string().describe('Project UUID'),
|
|
53
|
+
}, async ({ id }) => {
|
|
54
|
+
const result = await client.projects.createSandbox(id);
|
|
55
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
56
|
+
});
|
|
57
|
+
registry.tool('stop_sandbox', 'Stop and clean up a project sandbox', [Scopes.PROJECTS_WRITE], {
|
|
58
|
+
id: z.string().describe('Project UUID'),
|
|
59
|
+
}, async ({ id }) => {
|
|
60
|
+
const result = await client.projects.stopSandbox(id);
|
|
61
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
62
|
+
});
|
|
63
|
+
registry.tool('get_deployment', 'Get the status of a specific deployment', [Scopes.PROJECTS_READ], {
|
|
64
|
+
project_id: z.string().describe('Project UUID'),
|
|
65
|
+
deployment_id: z.string().describe('Deployment UUID'),
|
|
66
|
+
}, async ({ project_id, deployment_id }) => {
|
|
67
|
+
const result = await client.projects.deployment(project_id, deployment_id);
|
|
68
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
69
|
+
});
|
|
70
|
+
registry.tool('get_deployment_logs', 'Get build/runtime logs for a deployment', [Scopes.PROJECTS_READ], {
|
|
71
|
+
project_id: z.string().describe('Project UUID'),
|
|
72
|
+
deployment_id: z.string().describe('Deployment UUID'),
|
|
73
|
+
lines: z.number().optional().describe('Max log lines (default 100, max 1000)'),
|
|
74
|
+
}, async ({ project_id, deployment_id, lines }) => {
|
|
75
|
+
const result = await client.projects.deploymentLogs(project_id, deployment_id, lines ? { lines } : undefined);
|
|
76
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-tool rate limiter for the MCP server.
|
|
3
|
+
*
|
|
4
|
+
* Uses a sliding window (per minute) to enforce call limits based on tool
|
|
5
|
+
* risk level:
|
|
6
|
+
* GREEN (reads) — 60 calls/minute
|
|
7
|
+
* YELLOW (writes) — 20 calls/minute
|
|
8
|
+
* RED (destructive) — 5 calls/minute
|
|
9
|
+
*/
|
|
10
|
+
export type RiskLevel = 'GREEN' | 'YELLOW' | 'RED';
|
|
11
|
+
interface CheckResult {
|
|
12
|
+
allowed: boolean;
|
|
13
|
+
/** Milliseconds until the oldest entry in the window expires (present when blocked). */
|
|
14
|
+
retryAfterMs?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* In-memory, per-tool sliding-window rate limiter.
|
|
18
|
+
*
|
|
19
|
+
* Each tool name gets its own independent window so a burst of reads never
|
|
20
|
+
* affects the budget for writes.
|
|
21
|
+
*/
|
|
22
|
+
export declare class ToolRateLimiter {
|
|
23
|
+
/** toolName -> sorted array of call timestamps (epoch ms) */
|
|
24
|
+
private windows;
|
|
25
|
+
/**
|
|
26
|
+
* Check (and record) whether a call to `toolName` is allowed under the
|
|
27
|
+
* given `riskLevel` limit.
|
|
28
|
+
*/
|
|
29
|
+
checkLimit(toolName: string, riskLevel: RiskLevel): CheckResult;
|
|
30
|
+
/** Reset all tracked windows (useful for testing). */
|
|
31
|
+
reset(): void;
|
|
32
|
+
}
|
|
33
|
+
/** The shape of a tool handler callback as used by `server.tool()`. */
|
|
34
|
+
type ToolHandler = (...args: any[]) => Promise<{
|
|
35
|
+
content: Array<{
|
|
36
|
+
type: 'text';
|
|
37
|
+
text: string;
|
|
38
|
+
}>;
|
|
39
|
+
isError?: boolean;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Wrap a tool handler so that it checks the shared rate limiter before
|
|
43
|
+
* executing. When the limit is exceeded the wrapper returns an MCP-compliant
|
|
44
|
+
* error response (`isError: true`) instead of throwing.
|
|
45
|
+
*
|
|
46
|
+
* @param toolName - The registered tool name (used as the rate-limit key).
|
|
47
|
+
* @param riskLevel - GREEN / YELLOW / RED.
|
|
48
|
+
* @param handler - The original tool handler.
|
|
49
|
+
* @param limiter - A shared `ToolRateLimiter` instance.
|
|
50
|
+
*/
|
|
51
|
+
export declare function wrapToolWithRateLimit(toolName: string, riskLevel: RiskLevel, handler: ToolHandler, limiter: ToolRateLimiter): ToolHandler;
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=rate-limiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/tools/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAUnD,UAAU,WAAW;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,wFAAwF;IACxF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,6DAA6D;IAC7D,OAAO,CAAC,OAAO,CAAoC;IAEnD;;;OAGG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,WAAW;IA6B/D,sDAAsD;IACtD,KAAK,IAAI,IAAI;CAGd;AAMD,uEAAuE;AACvE,KAAK,WAAW,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC;IAC7C,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,eAAe,GACvB,WAAW,CAmBb"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-tool rate limiter for the MCP server.
|
|
3
|
+
*
|
|
4
|
+
* Uses a sliding window (per minute) to enforce call limits based on tool
|
|
5
|
+
* risk level:
|
|
6
|
+
* GREEN (reads) — 60 calls/minute
|
|
7
|
+
* YELLOW (writes) — 20 calls/minute
|
|
8
|
+
* RED (destructive) — 5 calls/minute
|
|
9
|
+
*/
|
|
10
|
+
const LIMITS = {
|
|
11
|
+
GREEN: 60,
|
|
12
|
+
YELLOW: 20,
|
|
13
|
+
RED: 5,
|
|
14
|
+
};
|
|
15
|
+
const WINDOW_MS = 60_000; // 1 minute
|
|
16
|
+
/**
|
|
17
|
+
* In-memory, per-tool sliding-window rate limiter.
|
|
18
|
+
*
|
|
19
|
+
* Each tool name gets its own independent window so a burst of reads never
|
|
20
|
+
* affects the budget for writes.
|
|
21
|
+
*/
|
|
22
|
+
export class ToolRateLimiter {
|
|
23
|
+
/** toolName -> sorted array of call timestamps (epoch ms) */
|
|
24
|
+
windows = new Map();
|
|
25
|
+
/**
|
|
26
|
+
* Check (and record) whether a call to `toolName` is allowed under the
|
|
27
|
+
* given `riskLevel` limit.
|
|
28
|
+
*/
|
|
29
|
+
checkLimit(toolName, riskLevel) {
|
|
30
|
+
const now = Date.now();
|
|
31
|
+
const limit = LIMITS[riskLevel];
|
|
32
|
+
const cutoff = now - WINDOW_MS;
|
|
33
|
+
let timestamps = this.windows.get(toolName);
|
|
34
|
+
if (!timestamps) {
|
|
35
|
+
timestamps = [];
|
|
36
|
+
this.windows.set(toolName, timestamps);
|
|
37
|
+
}
|
|
38
|
+
// Prune entries older than the window.
|
|
39
|
+
const firstValid = timestamps.findIndex((t) => t > cutoff);
|
|
40
|
+
if (firstValid > 0) {
|
|
41
|
+
timestamps.splice(0, firstValid);
|
|
42
|
+
}
|
|
43
|
+
else if (firstValid === -1 && timestamps.length > 0) {
|
|
44
|
+
timestamps.length = 0;
|
|
45
|
+
}
|
|
46
|
+
if (timestamps.length >= limit) {
|
|
47
|
+
// The oldest surviving timestamp determines when capacity opens up.
|
|
48
|
+
const retryAfterMs = timestamps[0] + WINDOW_MS - now;
|
|
49
|
+
return { allowed: false, retryAfterMs: Math.max(retryAfterMs, 1) };
|
|
50
|
+
}
|
|
51
|
+
timestamps.push(now);
|
|
52
|
+
return { allowed: true };
|
|
53
|
+
}
|
|
54
|
+
/** Reset all tracked windows (useful for testing). */
|
|
55
|
+
reset() {
|
|
56
|
+
this.windows.clear();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Wrap a tool handler so that it checks the shared rate limiter before
|
|
61
|
+
* executing. When the limit is exceeded the wrapper returns an MCP-compliant
|
|
62
|
+
* error response (`isError: true`) instead of throwing.
|
|
63
|
+
*
|
|
64
|
+
* @param toolName - The registered tool name (used as the rate-limit key).
|
|
65
|
+
* @param riskLevel - GREEN / YELLOW / RED.
|
|
66
|
+
* @param handler - The original tool handler.
|
|
67
|
+
* @param limiter - A shared `ToolRateLimiter` instance.
|
|
68
|
+
*/
|
|
69
|
+
export function wrapToolWithRateLimit(toolName, riskLevel, handler, limiter) {
|
|
70
|
+
return async (...args) => {
|
|
71
|
+
const check = limiter.checkLimit(toolName, riskLevel);
|
|
72
|
+
if (!check.allowed) {
|
|
73
|
+
const retrySeconds = Math.ceil((check.retryAfterMs ?? 1000) / 1000);
|
|
74
|
+
return {
|
|
75
|
+
content: [
|
|
76
|
+
{
|
|
77
|
+
type: 'text',
|
|
78
|
+
text: `Rate limited: "${toolName}" exceeded ${LIMITS[riskLevel]} calls/minute (${riskLevel} tier). Retry in ~${retrySeconds}s.`,
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
isError: true,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return handler(...args);
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/tools/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,MAAM,GAA8B;IACxC,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;IACV,GAAG,EAAE,CAAC;CACP,CAAC;AAEF,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,WAAW;AAQrC;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IAC1B,6DAA6D;IACrD,OAAO,GAA0B,IAAI,GAAG,EAAE,CAAC;IAEnD;;;OAGG;IACH,UAAU,CAAC,QAAgB,EAAE,SAAoB;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC;QAE/B,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,UAAU,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACzC,CAAC;QAED,uCAAuC;QACvC,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAC3D,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACnC,CAAC;aAAM,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;YAC/B,oEAAoE;YACpE,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,GAAG,CAAC;YACrD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC;QACrE,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,sDAAsD;IACtD,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF;AAYD;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAgB,EAChB,SAAoB,EACpB,OAAoB,EACpB,OAAwB;IAExB,OAAO,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;QAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAEtD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACpE,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,kBAAkB,QAAQ,cAAc,MAAM,CAAC,SAAS,CAAC,kBAAkB,SAAS,qBAAqB,YAAY,IAAI;qBAChI;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Recursiv } from '@recursiv/sdk';
|
|
2
|
+
import { type ScopedToolRegistry } from '../scopes.js';
|
|
3
|
+
/**
|
|
4
|
+
* Remaining SDK resources for full coverage.
|
|
5
|
+
* Permission annotations in descriptions — server enforces access control.
|
|
6
|
+
*/
|
|
7
|
+
export declare function registerRemainingTools(registry: ScopedToolRegistry, client: Recursiv): void;
|
|
8
|
+
//# sourceMappingURL=remaining.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remaining.d.ts","sourceRoot":"","sources":["../../src/tools/remaining.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAU,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE/D;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,QAskBpF"}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Scopes } from '../scopes.js';
|
|
3
|
+
/**
|
|
4
|
+
* Remaining SDK resources for full coverage.
|
|
5
|
+
* Permission annotations in descriptions — server enforces access control.
|
|
6
|
+
*/
|
|
7
|
+
export function registerRemainingTools(registry, client) {
|
|
8
|
+
// ─── Wallet (user + admin) ──────────────────────────────────────────
|
|
9
|
+
registry.tool('get_my_wallet', 'Get or create the current user\'s crypto wallet. Requires: authenticated user.', [Scopes.WALLET_READ], {}, async () => {
|
|
10
|
+
const result = await client.wallet.getMyWallet();
|
|
11
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
12
|
+
});
|
|
13
|
+
registry.tool('get_wallet_balance', 'Get wallet balance for the current user. Requires: authenticated user.', [Scopes.WALLET_READ], {}, async () => {
|
|
14
|
+
const result = await client.wallet.getBalance();
|
|
15
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
16
|
+
});
|
|
17
|
+
registry.tool('send_eth', 'Send ETH from the current user\'s wallet. Requires: authenticated user.', [Scopes.WALLET_WRITE], {
|
|
18
|
+
to_address: z.string().describe('Destination wallet address'),
|
|
19
|
+
amount_eth: z.string().describe('Amount in ETH (e.g. "0.01")'),
|
|
20
|
+
}, async ({ to_address, amount_eth }) => {
|
|
21
|
+
const result = await client.wallet.send(to_address, amount_eth);
|
|
22
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
23
|
+
});
|
|
24
|
+
registry.tool('admin_get_wallet_config', 'Check wallet system configuration. Requires: network admin.', [Scopes.ADMIN], {}, async () => {
|
|
25
|
+
const result = await client.wallet.getConfig();
|
|
26
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
27
|
+
});
|
|
28
|
+
registry.tool('admin_get_all_wallet_balances', 'Get all wallet balances across the network. Requires: network admin.', [Scopes.ADMIN], {}, async () => {
|
|
29
|
+
const result = await client.wallet.getAllBalances();
|
|
30
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
31
|
+
});
|
|
32
|
+
registry.tool('admin_get_master_wallet', 'Get master wallet address. Requires: network admin.', [Scopes.ADMIN], {}, async () => {
|
|
33
|
+
const result = await client.wallet.getMasterAddress();
|
|
34
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
35
|
+
});
|
|
36
|
+
// ─── Protocols (user + admin) ───────────────────────────────────────
|
|
37
|
+
registry.tool('list_protocols', 'List available protocol adapters (RSS, ActivityPub, Nostr, etc.). Requires: authenticated user.', [Scopes.POSTS_READ], {}, async () => {
|
|
38
|
+
const result = await client.protocols.list();
|
|
39
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
40
|
+
});
|
|
41
|
+
registry.tool('get_protocol_status', 'Get per-protocol collection status. Requires: authenticated user.', [Scopes.POSTS_READ], {}, async () => {
|
|
42
|
+
const result = await client.protocols.status();
|
|
43
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
44
|
+
});
|
|
45
|
+
registry.tool('search_protocols', 'Cross-protocol full-text search (searches across RSS, ActivityPub, Nostr, etc.). Requires: authenticated user.', [Scopes.POSTS_READ], {
|
|
46
|
+
query: z.string().describe('Search query'),
|
|
47
|
+
protocol: z.string().optional().describe('Filter by protocol (e.g. rss, activitypub, nostr)'),
|
|
48
|
+
limit: z.number().optional().describe('Max results'),
|
|
49
|
+
offset: z.number().optional().describe('Pagination offset'),
|
|
50
|
+
}, async (params) => {
|
|
51
|
+
const result = await client.protocols.search(params);
|
|
52
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
53
|
+
});
|
|
54
|
+
registry.tool('admin_get_protocol_settings', 'Get protocol settings for the network. Requires: network admin.', [Scopes.ADMIN], {}, async () => {
|
|
55
|
+
const result = await client.protocols.getSettings();
|
|
56
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
57
|
+
});
|
|
58
|
+
registry.tool('admin_update_protocol_settings', 'Update protocol settings (enable/disable protocols, set search terms). Requires: network admin.', [Scopes.ADMIN], {
|
|
59
|
+
enabled_protocols: z.array(z.string()).optional().describe('Protocols to enable'),
|
|
60
|
+
search_terms: z.array(z.string()).optional().describe('Search terms for protocol collection'),
|
|
61
|
+
}, async (params) => {
|
|
62
|
+
const result = await client.protocols.updateSettings(params);
|
|
63
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
64
|
+
});
|
|
65
|
+
registry.tool('admin_refresh_protocols', 'Trigger protocol collection for the network. Requires: network admin.', [Scopes.ADMIN], {}, async () => {
|
|
66
|
+
const result = await client.protocols.refresh();
|
|
67
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
68
|
+
});
|
|
69
|
+
// ─── Email Campaigns (admin) ────────────────────────────────────────
|
|
70
|
+
registry.tool('admin_list_campaigns', 'List all email campaigns. Requires: network admin.', [Scopes.ADMIN], {}, async () => {
|
|
71
|
+
const result = await client.email.listCampaigns();
|
|
72
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
73
|
+
});
|
|
74
|
+
registry.tool('admin_get_campaign', 'Get a campaign with full detail. Requires: network admin.', [Scopes.ADMIN], {
|
|
75
|
+
id: z.string().describe('Campaign UUID'),
|
|
76
|
+
}, async ({ id }) => {
|
|
77
|
+
const result = await client.email.getCampaign(id);
|
|
78
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
79
|
+
});
|
|
80
|
+
registry.tool('admin_get_campaign_stats', 'Get campaign delivery stats (sent, delivered, bounced, opened). Requires: network admin.', [Scopes.ADMIN], {
|
|
81
|
+
id: z.string().describe('Campaign UUID'),
|
|
82
|
+
}, async ({ id }) => {
|
|
83
|
+
const result = await client.email.getCampaignStats(id);
|
|
84
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
85
|
+
});
|
|
86
|
+
registry.tool('admin_create_campaign', 'Create a new email campaign in draft state. Requires: network admin.', [Scopes.ADMIN], {
|
|
87
|
+
name: z.string().describe('Campaign name'),
|
|
88
|
+
subject: z.string().describe('Email subject line'),
|
|
89
|
+
from_email: z.string().describe('From email address'),
|
|
90
|
+
from_name: z.string().optional().describe('From display name'),
|
|
91
|
+
html_content: z.string().describe('HTML email content'),
|
|
92
|
+
text_content: z.string().optional().describe('Plain text fallback'),
|
|
93
|
+
segment: z.string().optional().describe('Recipient segment'),
|
|
94
|
+
warmup_enabled: z.boolean().optional().describe('Enable warmup (gradual send)'),
|
|
95
|
+
}, async (params) => {
|
|
96
|
+
const result = await client.email.createCampaign(params);
|
|
97
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
98
|
+
});
|
|
99
|
+
registry.tool('admin_start_campaign', 'Start sending a campaign. Requires: network admin.', [Scopes.ADMIN], {
|
|
100
|
+
id: z.string().describe('Campaign UUID'),
|
|
101
|
+
}, async ({ id }) => {
|
|
102
|
+
const result = await client.email.startCampaign(id);
|
|
103
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
104
|
+
});
|
|
105
|
+
registry.tool('admin_pause_campaign', 'Pause a sending campaign. Requires: network admin.', [Scopes.ADMIN], {
|
|
106
|
+
id: z.string().describe('Campaign UUID'),
|
|
107
|
+
}, async ({ id }) => {
|
|
108
|
+
const result = await client.email.pauseCampaign(id);
|
|
109
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
110
|
+
});
|
|
111
|
+
registry.tool('admin_resume_campaign', 'Resume a paused campaign. Requires: network admin.', [Scopes.ADMIN], {
|
|
112
|
+
id: z.string().describe('Campaign UUID'),
|
|
113
|
+
}, async ({ id }) => {
|
|
114
|
+
const result = await client.email.resumeCampaign(id);
|
|
115
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
116
|
+
});
|
|
117
|
+
// ─── Simulator (admin) ─────────────────────────────────────────────
|
|
118
|
+
registry.tool('admin_start_simulator', 'Start the social network simulator. Requires: network admin.', [Scopes.ADMIN], {
|
|
119
|
+
user_count: z.number().optional().describe('Number of synthetic users'),
|
|
120
|
+
interval_ms: z.number().optional().describe('Action interval in milliseconds'),
|
|
121
|
+
}, async (params) => {
|
|
122
|
+
const result = await client.simulator.start(params);
|
|
123
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
124
|
+
});
|
|
125
|
+
registry.tool('admin_stop_simulator', 'Stop the simulator. Requires: network admin.', [Scopes.ADMIN], {}, async () => {
|
|
126
|
+
const result = await client.simulator.stop();
|
|
127
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
128
|
+
});
|
|
129
|
+
registry.tool('admin_simulator_status', 'Get simulator status. Requires: network admin.', [Scopes.ADMIN], {}, async () => {
|
|
130
|
+
const result = await client.simulator.status();
|
|
131
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
132
|
+
});
|
|
133
|
+
registry.tool('admin_simulator_failures', 'Get simulator failures. Requires: network admin.', [Scopes.ADMIN], {}, async () => {
|
|
134
|
+
const result = await client.simulator.failures();
|
|
135
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
136
|
+
});
|
|
137
|
+
// ─── Commands (AI command palette) ──────────────────────────────────
|
|
138
|
+
registry.tool('execute_command', 'Execute an AI command prompt. Requires: authenticated user.', [Scopes.COMMANDS_WRITE], {
|
|
139
|
+
prompt: z.string().describe('Command prompt text'),
|
|
140
|
+
current_screen: z.string().optional().describe('Current screen context'),
|
|
141
|
+
org_slug: z.string().optional().describe('Organization slug context'),
|
|
142
|
+
model: z.string().optional().describe('AI model to use'),
|
|
143
|
+
}, async (params) => {
|
|
144
|
+
const result = await client.commands.execute(params);
|
|
145
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
146
|
+
});
|
|
147
|
+
// ─── Brain (AI chat overlay) ────────────────────────────────────────
|
|
148
|
+
registry.tool('brain_send_message', 'Send a message to the Brain AI assistant (response streams via WebSocket). Requires: authenticated user.', [Scopes.COMMANDS_WRITE], {
|
|
149
|
+
message: z.string().describe('Message text'),
|
|
150
|
+
current_route: z.string().optional().describe('Current page route for context'),
|
|
151
|
+
org_slug: z.string().optional().describe('Organization slug for context'),
|
|
152
|
+
}, async ({ message, current_route, org_slug }) => {
|
|
153
|
+
const result = await client.brain.sendMessage({
|
|
154
|
+
message,
|
|
155
|
+
context: { current_route, org_slug },
|
|
156
|
+
});
|
|
157
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
158
|
+
});
|
|
159
|
+
// ─── Inbox ──────────────────────────────────────────────────────────
|
|
160
|
+
registry.tool('list_inbox', 'List inbox items for the current user. Requires: authenticated user.', [Scopes.CHAT_READ], {
|
|
161
|
+
organization_id: z.string().optional().describe('Filter by organization'),
|
|
162
|
+
limit: z.number().optional().describe('Max items'),
|
|
163
|
+
offset: z.number().optional().describe('Pagination offset'),
|
|
164
|
+
}, async (params) => {
|
|
165
|
+
const result = await client.inbox.list(params);
|
|
166
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
167
|
+
});
|
|
168
|
+
// ─── Network Config ─────────────────────────────────────────────────
|
|
169
|
+
registry.tool('get_network_config', 'Get public network configuration (branding, features, auth methods). Requires: none (public).', [], {}, async () => {
|
|
170
|
+
const result = await client.network.getConfig();
|
|
171
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
172
|
+
});
|
|
173
|
+
// ─── Invite Codes (user-facing) ────────────────────────────────────
|
|
174
|
+
registry.tool('validate_invite_code', 'Validate an invite code. Requires: none (public).', [], {
|
|
175
|
+
code: z.string().describe('Invite code to validate'),
|
|
176
|
+
}, async ({ code }) => {
|
|
177
|
+
const result = await client.inviteCodes.validate(code);
|
|
178
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
179
|
+
});
|
|
180
|
+
registry.tool('get_my_invite_codes', 'Get the current user\'s invite codes and how many they can generate. Requires: authenticated user.', [], {}, async () => {
|
|
181
|
+
const result = await client.inviteCodes.myCodes();
|
|
182
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
183
|
+
});
|
|
184
|
+
registry.tool('generate_invite_codes', 'Generate invite codes for the current user. Requires: authenticated user.', [], {
|
|
185
|
+
count: z.number().optional().describe('Number of codes to generate (default: 1)'),
|
|
186
|
+
}, async ({ count }) => {
|
|
187
|
+
const result = await client.inviteCodes.generate(count);
|
|
188
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
189
|
+
});
|
|
190
|
+
registry.tool('get_invite_leaderboard', 'Get top inviters leaderboard. Requires: authenticated user.', [], {
|
|
191
|
+
limit: z.number().optional().describe('Max results'),
|
|
192
|
+
}, async ({ limit }) => {
|
|
193
|
+
const result = await client.inviteCodes.leaderboard(limit);
|
|
194
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
195
|
+
});
|
|
196
|
+
// ─── Uploads (presigned URLs) ───────────────────────────────────────
|
|
197
|
+
registry.tool('get_avatar_upload_url', 'Get a presigned URL for uploading a user avatar. Requires: authenticated user.', [Scopes.UPLOADS_WRITE], {
|
|
198
|
+
content_type: z.string().describe('MIME type (e.g. image/png, image/jpeg)'),
|
|
199
|
+
content_length: z.number().describe('File size in bytes'),
|
|
200
|
+
}, async (params) => {
|
|
201
|
+
const result = await client.uploads.getAvatarUploadUrl(params);
|
|
202
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
203
|
+
});
|
|
204
|
+
registry.tool('confirm_avatar_upload', 'Confirm avatar upload and update user profile image. Requires: authenticated user.', [Scopes.UPLOADS_WRITE], {
|
|
205
|
+
key: z.string().describe('Upload key returned from get_avatar_upload_url'),
|
|
206
|
+
}, async ({ key }) => {
|
|
207
|
+
const result = await client.uploads.confirmAvatarUpload(key);
|
|
208
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
209
|
+
});
|
|
210
|
+
registry.tool('get_media_upload_url', 'Get a presigned URL for uploading post media (images, video, audio). Requires: authenticated user.', [Scopes.UPLOADS_WRITE], {
|
|
211
|
+
content_type: z.string().describe('MIME type'),
|
|
212
|
+
content_length: z.number().describe('File size in bytes'),
|
|
213
|
+
}, async (params) => {
|
|
214
|
+
const result = await client.uploads.getMediaUploadUrl(params);
|
|
215
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
216
|
+
});
|
|
217
|
+
registry.tool('get_agent_avatar_upload_url', 'Get a presigned URL for uploading an agent avatar. Requires: agent owner.', [Scopes.UPLOADS_WRITE], {
|
|
218
|
+
agent_id: z.string().describe('Agent UUID'),
|
|
219
|
+
content_type: z.string().describe('MIME type'),
|
|
220
|
+
content_length: z.number().describe('File size in bytes'),
|
|
221
|
+
}, async (params) => {
|
|
222
|
+
const result = await client.uploads.getAgentAvatarUploadUrl(params);
|
|
223
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
224
|
+
});
|
|
225
|
+
registry.tool('get_org_logo_upload_url', 'Get a presigned URL for uploading an organization logo. Requires: org owner/admin.', [Scopes.UPLOADS_WRITE], {
|
|
226
|
+
organization_id: z.string().describe('Organization UUID'),
|
|
227
|
+
content_type: z.string().describe('MIME type'),
|
|
228
|
+
content_length: z.number().describe('File size in bytes'),
|
|
229
|
+
}, async (params) => {
|
|
230
|
+
const result = await client.uploads.getOrgLogoUploadUrl(params);
|
|
231
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
232
|
+
});
|
|
233
|
+
// ─── Deployments (separate from projects) ──────────────────────────
|
|
234
|
+
registry.tool('list_deployments', 'List deployments for a project. Requires: project member.', [Scopes.PROJECTS_READ], {
|
|
235
|
+
project_id: z.string().describe('Project UUID'),
|
|
236
|
+
}, async (params) => {
|
|
237
|
+
const result = await client.deployments.list(params);
|
|
238
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
239
|
+
});
|
|
240
|
+
registry.tool('trigger_deployment', 'Trigger a production deployment for a project. Requires: project member.', [Scopes.PROJECTS_WRITE], {
|
|
241
|
+
project_id: z.string().describe('Project UUID'),
|
|
242
|
+
branch: z.string().optional().describe('Git branch to deploy'),
|
|
243
|
+
commit_hash: z.string().optional().describe('Specific commit hash'),
|
|
244
|
+
commit_message: z.string().optional().describe('Deploy message'),
|
|
245
|
+
}, async (params) => {
|
|
246
|
+
const result = await client.deployments.deploy(params);
|
|
247
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
248
|
+
});
|
|
249
|
+
registry.tool('get_deployment_status', 'Get the status of a deployment. Requires: project member.', [Scopes.PROJECTS_READ], {
|
|
250
|
+
deployment_id: z.string().describe('Deployment UUID'),
|
|
251
|
+
}, async ({ deployment_id }) => {
|
|
252
|
+
const result = await client.deployments.getStatus(deployment_id);
|
|
253
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
254
|
+
});
|
|
255
|
+
registry.tool('sync_deployment_status', 'Sync deployment status from Coolify. Requires: project member.', [Scopes.PROJECTS_WRITE], {
|
|
256
|
+
deployment_id: z.string().describe('Deployment UUID'),
|
|
257
|
+
}, async ({ deployment_id }) => {
|
|
258
|
+
const result = await client.deployments.syncStatus(deployment_id);
|
|
259
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
260
|
+
});
|
|
261
|
+
registry.tool('delete_deployment', 'Delete production deployment for a project. Requires: project owner.', [Scopes.PROJECTS_WRITE], {
|
|
262
|
+
project_id: z.string().describe('Project UUID'),
|
|
263
|
+
}, async (params) => {
|
|
264
|
+
const result = await client.deployments.delete(params);
|
|
265
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
266
|
+
});
|
|
267
|
+
// ─── Permissions Context ────────────────────────────────────────────
|
|
268
|
+
registry.tool('get_my_context', 'Get the current user\'s full context: profile, orgs (with roles), tier, and permissions. Use this first to understand what the user can do.', [], {}, async () => {
|
|
269
|
+
const [profile, orgs, tier] = await Promise.all([
|
|
270
|
+
client.profiles.me().catch(() => null),
|
|
271
|
+
client.organizations.list({ limit: 50 }).catch(() => null),
|
|
272
|
+
client.freeTier.getTier().catch(() => null),
|
|
273
|
+
]);
|
|
274
|
+
const context = {
|
|
275
|
+
user: profile?.data ?? null,
|
|
276
|
+
organizations: orgs?.data ?? [],
|
|
277
|
+
tier: tier?.data ?? null,
|
|
278
|
+
permissions_note: 'Server enforces all permissions. Admin tools require network admin role. Org tools require org membership (owner/admin for writes). Agent tools require agent ownership.',
|
|
279
|
+
};
|
|
280
|
+
return { content: [{ type: 'text', text: JSON.stringify(context, null, 2) }] };
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=remaining.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remaining.js","sourceRoot":"","sources":["../../src/tools/remaining.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/tools/sandbox.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,UAAU,EAAE,QAAQ,QAqCtF"}
|