@chaaskit/server 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/dist/api/admin.js +438 -0
- package/dist/api/admin.js.map +1 -0
- package/dist/api/agents.js +21 -0
- package/dist/api/agents.js.map +1 -0
- package/dist/api/api-keys.js +122 -0
- package/dist/api/api-keys.js.map +1 -0
- package/dist/api/auth.js +399 -0
- package/dist/api/auth.js.map +1 -0
- package/dist/api/chat.js +900 -0
- package/dist/api/chat.js.map +1 -0
- package/dist/api/config.js +91 -0
- package/dist/api/config.js.map +1 -0
- package/dist/api/documents.js +237 -0
- package/dist/api/documents.js.map +1 -0
- package/dist/api/export.js +107 -0
- package/dist/api/export.js.map +1 -0
- package/dist/api/health.js +25 -0
- package/dist/api/health.js.map +1 -0
- package/dist/api/mcp-server.js +84 -0
- package/dist/api/mcp-server.js.map +1 -0
- package/dist/api/mcp.js +400 -0
- package/dist/api/mcp.js.map +1 -0
- package/dist/api/mentions.js +94 -0
- package/dist/api/mentions.js.map +1 -0
- package/dist/api/oauth.js +366 -0
- package/dist/api/oauth.js.map +1 -0
- package/dist/api/payments.js +473 -0
- package/dist/api/payments.js.map +1 -0
- package/dist/api/projects.js +301 -0
- package/dist/api/projects.js.map +1 -0
- package/dist/api/scheduled-prompts.js +617 -0
- package/dist/api/scheduled-prompts.js.map +1 -0
- package/dist/api/search.js +85 -0
- package/dist/api/search.js.map +1 -0
- package/dist/api/share.js +188 -0
- package/dist/api/share.js.map +1 -0
- package/dist/api/slack.js +468 -0
- package/dist/api/slack.js.map +1 -0
- package/dist/api/teams.js +693 -0
- package/dist/api/teams.js.map +1 -0
- package/dist/api/templates.js +134 -0
- package/dist/api/templates.js.map +1 -0
- package/dist/api/threads.js +323 -0
- package/dist/api/threads.js.map +1 -0
- package/dist/api/upload.js +57 -0
- package/dist/api/upload.js.map +1 -0
- package/dist/api/user.js +111 -0
- package/dist/api/user.js.map +1 -0
- package/dist/api/v1/openai.js +245 -0
- package/dist/api/v1/openai.js.map +1 -0
- package/dist/app.js +168 -0
- package/dist/app.js.map +1 -0
- package/dist/bin/cli.js +57 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/commands/db-sync.js +108 -0
- package/dist/commands/db-sync.js.map +1 -0
- package/dist/config/loader.js +374 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/documents/extractors.js +136 -0
- package/dist/documents/extractors.js.map +1 -0
- package/dist/extensions/glob.js +53 -0
- package/dist/extensions/glob.js.map +1 -0
- package/dist/extensions/loader.js +72 -0
- package/dist/extensions/loader.js.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/loaders/index.js +75 -0
- package/dist/loaders/index.js.map +1 -0
- package/dist/mcp/client.js +551 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/server.js +335 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/middleware/apiKeyAuth.js +136 -0
- package/dist/middleware/apiKeyAuth.js.map +1 -0
- package/dist/middleware/auth.js +192 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/errorHandler.js +41 -0
- package/dist/middleware/errorHandler.js.map +1 -0
- package/dist/middleware/mcpServerAuth.js +164 -0
- package/dist/middleware/mcpServerAuth.js.map +1 -0
- package/dist/middleware/requestLogger.js +9 -0
- package/dist/middleware/requestLogger.js.map +1 -0
- package/dist/middleware/team.js +132 -0
- package/dist/middleware/team.js.map +1 -0
- package/dist/oauth/server.js +410 -0
- package/dist/oauth/server.js.map +1 -0
- package/dist/queue/cli.js +93 -0
- package/dist/queue/cli.js.map +1 -0
- package/dist/queue/handlers/index.js +91 -0
- package/dist/queue/handlers/index.js.map +1 -0
- package/dist/queue/handlers/scheduled-prompt.js +270 -0
- package/dist/queue/handlers/scheduled-prompt.js.map +1 -0
- package/dist/queue/index.js +91 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/providers/memory.js +296 -0
- package/dist/queue/providers/memory.js.map +1 -0
- package/dist/queue/providers/sqs.js +275 -0
- package/dist/queue/providers/sqs.js.map +1 -0
- package/dist/queue/scheduler.js +355 -0
- package/dist/queue/scheduler.js.map +1 -0
- package/dist/queue/types.js +5 -0
- package/dist/queue/types.js.map +1 -0
- package/dist/queue/worker.js +230 -0
- package/dist/queue/worker.js.map +1 -0
- package/dist/registry/index.js +40 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/server.js +207 -0
- package/dist/server.js.map +1 -0
- package/dist/services/agent.js +530 -0
- package/dist/services/agent.js.map +1 -0
- package/dist/services/agents.js +194 -0
- package/dist/services/agents.js.map +1 -0
- package/dist/services/documents.js +507 -0
- package/dist/services/documents.js.map +1 -0
- package/dist/services/email/index.js +91 -0
- package/dist/services/email/index.js.map +1 -0
- package/dist/services/email/providers/ses.js +97 -0
- package/dist/services/email/providers/ses.js.map +1 -0
- package/dist/services/email/templates.js +194 -0
- package/dist/services/email/templates.js.map +1 -0
- package/dist/services/email/types.js +5 -0
- package/dist/services/email/types.js.map +1 -0
- package/dist/services/encryption.js +69 -0
- package/dist/services/encryption.js.map +1 -0
- package/dist/services/oauth-discovery.js +226 -0
- package/dist/services/oauth-discovery.js.map +1 -0
- package/dist/services/pendingConfirmation.js +105 -0
- package/dist/services/pendingConfirmation.js.map +1 -0
- package/dist/services/scheduledPrompts.js +70 -0
- package/dist/services/scheduledPrompts.js.map +1 -0
- package/dist/services/slack/client.js +174 -0
- package/dist/services/slack/client.js.map +1 -0
- package/dist/services/slack/events.js +189 -0
- package/dist/services/slack/events.js.map +1 -0
- package/dist/services/slack/index.js +6 -0
- package/dist/services/slack/index.js.map +1 -0
- package/dist/services/slack/notifications.js +124 -0
- package/dist/services/slack/notifications.js.map +1 -0
- package/dist/services/slack/signature.js +74 -0
- package/dist/services/slack/signature.js.map +1 -0
- package/dist/services/slack/thread-context.js +191 -0
- package/dist/services/slack/thread-context.js.map +1 -0
- package/dist/services/toolConfirmation.js +55 -0
- package/dist/services/toolConfirmation.js.map +1 -0
- package/dist/services/usage.js +241 -0
- package/dist/services/usage.js.map +1 -0
- package/dist/ssr/build.js +90 -0
- package/dist/ssr/build.js.map +1 -0
- package/dist/ssr/components/SSRMessageList.js +120 -0
- package/dist/ssr/components/SSRMessageList.js.map +1 -0
- package/dist/ssr/entry.client.js +8 -0
- package/dist/ssr/entry.client.js.map +1 -0
- package/dist/ssr/entry.server.js +71 -0
- package/dist/ssr/entry.server.js.map +1 -0
- package/dist/ssr/handler.js +51 -0
- package/dist/ssr/handler.js.map +1 -0
- package/dist/ssr/root.js +184 -0
- package/dist/ssr/root.js.map +1 -0
- package/dist/ssr/routes/login.js +140 -0
- package/dist/ssr/routes/login.js.map +1 -0
- package/dist/ssr/routes/pricing.js +195 -0
- package/dist/ssr/routes/pricing.js.map +1 -0
- package/dist/ssr/routes/privacy.js +39 -0
- package/dist/ssr/routes/privacy.js.map +1 -0
- package/dist/ssr/routes/register.js +148 -0
- package/dist/ssr/routes/register.js.map +1 -0
- package/dist/ssr/routes/shared.$shareId.js +153 -0
- package/dist/ssr/routes/shared.$shareId.js.map +1 -0
- package/dist/ssr/routes/terms.js +39 -0
- package/dist/ssr/routes/terms.js.map +1 -0
- package/dist/storage/index.js +43 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/providers/database.js +38 -0
- package/dist/storage/providers/database.js.map +1 -0
- package/dist/storage/providers/filesystem.js +51 -0
- package/dist/storage/providers/filesystem.js.map +1 -0
- package/dist/storage/types.js +2 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/tools/documents.js +336 -0
- package/dist/tools/documents.js.map +1 -0
- package/dist/tools/get-plan-usage.js +82 -0
- package/dist/tools/get-plan-usage.js.map +1 -0
- package/dist/tools/index.js +106 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/web-scrape.js +145 -0
- package/dist/tools/web-scrape.js.map +1 -0
- package/package.json +93 -0
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import { documentService } from '../services/documents.js';
|
|
2
|
+
/**
|
|
3
|
+
* List documents available to the user
|
|
4
|
+
*/
|
|
5
|
+
export const listDocumentsTool = {
|
|
6
|
+
name: 'list_documents',
|
|
7
|
+
description: 'List documents available in this conversation. Use this to see what documents can be referenced.',
|
|
8
|
+
inputSchema: {
|
|
9
|
+
type: 'object',
|
|
10
|
+
properties: {
|
|
11
|
+
query: {
|
|
12
|
+
type: 'string',
|
|
13
|
+
description: 'Optional search query to filter documents by name',
|
|
14
|
+
},
|
|
15
|
+
scope: {
|
|
16
|
+
type: 'string',
|
|
17
|
+
enum: ['all', 'my', 'team', 'project'],
|
|
18
|
+
description: 'Filter by scope: all (default), my (personal), team, or project',
|
|
19
|
+
default: 'all',
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
async execute(input, context) {
|
|
24
|
+
if (!context.userId) {
|
|
25
|
+
return {
|
|
26
|
+
content: [{ type: 'text', text: 'Authentication required to list documents' }],
|
|
27
|
+
isError: true,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const query = input.query;
|
|
31
|
+
const scopeInput = input.scope || 'all';
|
|
32
|
+
const scopes = scopeInput === 'all' ? undefined : [scopeInput];
|
|
33
|
+
const docs = await documentService.search(context.userId, {
|
|
34
|
+
query,
|
|
35
|
+
scopes,
|
|
36
|
+
limit: 50,
|
|
37
|
+
});
|
|
38
|
+
if (docs.length === 0) {
|
|
39
|
+
return {
|
|
40
|
+
content: [
|
|
41
|
+
{
|
|
42
|
+
type: 'text',
|
|
43
|
+
text: query
|
|
44
|
+
? `No documents found matching "${query}"`
|
|
45
|
+
: 'No documents found. You can create documents on the Documents page.',
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const docList = docs
|
|
51
|
+
.map((doc) => `- ${doc.path} (${doc.charCount} chars, ${doc.mimeType})`)
|
|
52
|
+
.join('\n');
|
|
53
|
+
return {
|
|
54
|
+
content: [
|
|
55
|
+
{
|
|
56
|
+
type: 'text',
|
|
57
|
+
text: `Found ${docs.length} document(s):\n\n${docList}`,
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
structuredContent: { documents: docs },
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Read content from a document
|
|
66
|
+
*/
|
|
67
|
+
export const readDocumentTool = {
|
|
68
|
+
name: 'read_document',
|
|
69
|
+
description: 'Read content from a document. Supports pagination for large documents. Use path format like @my/doc-name, @team/slug/name, or @project/slug/name.',
|
|
70
|
+
inputSchema: {
|
|
71
|
+
type: 'object',
|
|
72
|
+
properties: {
|
|
73
|
+
path: {
|
|
74
|
+
type: 'string',
|
|
75
|
+
description: 'Document path (e.g., @my/notes, @team/engineering/guidelines)',
|
|
76
|
+
},
|
|
77
|
+
offset: {
|
|
78
|
+
type: 'number',
|
|
79
|
+
description: 'Start line (0-indexed, default: 0)',
|
|
80
|
+
},
|
|
81
|
+
limit: {
|
|
82
|
+
type: 'number',
|
|
83
|
+
description: 'Maximum lines to return (default: 100)',
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
required: ['path'],
|
|
87
|
+
},
|
|
88
|
+
async execute(input, context) {
|
|
89
|
+
if (!context.userId) {
|
|
90
|
+
return {
|
|
91
|
+
content: [{ type: 'text', text: 'Authentication required to read documents' }],
|
|
92
|
+
isError: true,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
const path = input.path;
|
|
96
|
+
const offset = input.offset || 0;
|
|
97
|
+
const limit = input.limit || 100;
|
|
98
|
+
const doc = await documentService.resolvePath(path, context.userId);
|
|
99
|
+
if (!doc) {
|
|
100
|
+
return {
|
|
101
|
+
content: [{ type: 'text', text: `Document not found: ${path}` }],
|
|
102
|
+
isError: true,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
const result = await documentService.getContent(doc.id, context.userId, {
|
|
106
|
+
offset,
|
|
107
|
+
limit,
|
|
108
|
+
});
|
|
109
|
+
if (!result) {
|
|
110
|
+
return {
|
|
111
|
+
content: [{ type: 'text', text: `Could not read document: ${path}` }],
|
|
112
|
+
isError: true,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// Add line numbers
|
|
116
|
+
const lines = result.content.split('\n');
|
|
117
|
+
const numberedContent = lines
|
|
118
|
+
.map((line, i) => `${(offset + i + 1).toString().padStart(4, ' ')} | ${line}`)
|
|
119
|
+
.join('\n');
|
|
120
|
+
let header = `Document: ${path}\n`;
|
|
121
|
+
header += `Lines ${offset + 1}-${offset + lines.length} of ${result.totalLines}`;
|
|
122
|
+
if (result.truncated) {
|
|
123
|
+
header += ` (more content available)`;
|
|
124
|
+
}
|
|
125
|
+
header += '\n\n';
|
|
126
|
+
return {
|
|
127
|
+
content: [{ type: 'text', text: header + numberedContent }],
|
|
128
|
+
structuredContent: {
|
|
129
|
+
path,
|
|
130
|
+
offset,
|
|
131
|
+
linesReturned: lines.length,
|
|
132
|
+
totalLines: result.totalLines,
|
|
133
|
+
truncated: result.truncated,
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* Search for text within a document
|
|
140
|
+
*/
|
|
141
|
+
export const searchInDocumentTool = {
|
|
142
|
+
name: 'search_in_document',
|
|
143
|
+
description: 'Search for text within a document. Returns matching lines with surrounding context.',
|
|
144
|
+
inputSchema: {
|
|
145
|
+
type: 'object',
|
|
146
|
+
properties: {
|
|
147
|
+
path: {
|
|
148
|
+
type: 'string',
|
|
149
|
+
description: 'Document path (e.g., @my/notes)',
|
|
150
|
+
},
|
|
151
|
+
query: {
|
|
152
|
+
type: 'string',
|
|
153
|
+
description: 'Text to search for',
|
|
154
|
+
},
|
|
155
|
+
context_lines: {
|
|
156
|
+
type: 'number',
|
|
157
|
+
description: 'Number of lines to show before and after each match (default: 3)',
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
required: ['path', 'query'],
|
|
161
|
+
},
|
|
162
|
+
async execute(input, context) {
|
|
163
|
+
if (!context.userId) {
|
|
164
|
+
return {
|
|
165
|
+
content: [{ type: 'text', text: 'Authentication required to search documents' }],
|
|
166
|
+
isError: true,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
const path = input.path;
|
|
170
|
+
const query = input.query;
|
|
171
|
+
const contextLines = input.context_lines || 3;
|
|
172
|
+
const doc = await documentService.resolvePath(path, context.userId);
|
|
173
|
+
if (!doc) {
|
|
174
|
+
return {
|
|
175
|
+
content: [{ type: 'text', text: `Document not found: ${path}` }],
|
|
176
|
+
isError: true,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
const result = await documentService.getContent(doc.id, context.userId);
|
|
180
|
+
if (!result) {
|
|
181
|
+
return {
|
|
182
|
+
content: [{ type: 'text', text: `Could not read document: ${path}` }],
|
|
183
|
+
isError: true,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
const lines = result.content.split('\n');
|
|
187
|
+
const lowerQuery = query.toLowerCase();
|
|
188
|
+
// Find matching line indices
|
|
189
|
+
const matches = [];
|
|
190
|
+
for (let i = 0; i < lines.length; i++) {
|
|
191
|
+
if (lines[i].toLowerCase().includes(lowerQuery)) {
|
|
192
|
+
matches.push(i);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (matches.length === 0) {
|
|
196
|
+
return {
|
|
197
|
+
content: [{ type: 'text', text: `No matches found for "${query}" in ${path}` }],
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
// Build output with context
|
|
201
|
+
const outputParts = [];
|
|
202
|
+
let lastEndLine = -1;
|
|
203
|
+
for (const matchLine of matches) {
|
|
204
|
+
const startLine = Math.max(0, matchLine - contextLines);
|
|
205
|
+
const endLine = Math.min(lines.length - 1, matchLine + contextLines);
|
|
206
|
+
// Add separator if there's a gap
|
|
207
|
+
if (lastEndLine !== -1 && startLine > lastEndLine + 1) {
|
|
208
|
+
outputParts.push('...');
|
|
209
|
+
}
|
|
210
|
+
// Add context lines (avoid duplicates)
|
|
211
|
+
const actualStart = Math.max(startLine, lastEndLine + 1);
|
|
212
|
+
for (let i = actualStart; i <= endLine; i++) {
|
|
213
|
+
const prefix = i === matchLine ? '>>> ' : ' ';
|
|
214
|
+
outputParts.push(`${(i + 1).toString().padStart(4, ' ')} ${prefix}${lines[i]}`);
|
|
215
|
+
}
|
|
216
|
+
lastEndLine = endLine;
|
|
217
|
+
}
|
|
218
|
+
const header = `Found ${matches.length} match(es) for "${query}" in ${path}:\n\n`;
|
|
219
|
+
return {
|
|
220
|
+
content: [{ type: 'text', text: header + outputParts.join('\n') }],
|
|
221
|
+
structuredContent: {
|
|
222
|
+
path,
|
|
223
|
+
query,
|
|
224
|
+
matchCount: matches.length,
|
|
225
|
+
matchLines: matches.map((i) => i + 1),
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
},
|
|
229
|
+
};
|
|
230
|
+
/**
|
|
231
|
+
* Save content as a new document
|
|
232
|
+
*/
|
|
233
|
+
export const saveDocumentTool = {
|
|
234
|
+
name: 'save_document',
|
|
235
|
+
description: 'Save content as a new document. Use when the user asks to save generated content, notes, or summaries.',
|
|
236
|
+
inputSchema: {
|
|
237
|
+
type: 'object',
|
|
238
|
+
properties: {
|
|
239
|
+
name: {
|
|
240
|
+
type: 'string',
|
|
241
|
+
description: 'Document name (e.g., "meeting-notes", "api-summary")',
|
|
242
|
+
},
|
|
243
|
+
content: {
|
|
244
|
+
type: 'string',
|
|
245
|
+
description: 'Content to save',
|
|
246
|
+
},
|
|
247
|
+
scope: {
|
|
248
|
+
type: 'string',
|
|
249
|
+
enum: ['my', 'team', 'project'],
|
|
250
|
+
description: 'Where to save: my (personal, default), team, or project',
|
|
251
|
+
default: 'my',
|
|
252
|
+
},
|
|
253
|
+
scopeId: {
|
|
254
|
+
type: 'string',
|
|
255
|
+
description: 'Team or project ID (required if scope is team/project)',
|
|
256
|
+
},
|
|
257
|
+
},
|
|
258
|
+
required: ['name', 'content'],
|
|
259
|
+
},
|
|
260
|
+
async execute(input, context) {
|
|
261
|
+
if (!context.userId) {
|
|
262
|
+
return {
|
|
263
|
+
content: [{ type: 'text', text: 'Authentication required to save documents' }],
|
|
264
|
+
isError: true,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
const name = input.name;
|
|
268
|
+
const content = input.content;
|
|
269
|
+
const scope = input.scope || 'my';
|
|
270
|
+
const scopeId = input.scopeId;
|
|
271
|
+
// Validate scope requirements
|
|
272
|
+
if ((scope === 'team' || scope === 'project') && !scopeId) {
|
|
273
|
+
return {
|
|
274
|
+
content: [
|
|
275
|
+
{
|
|
276
|
+
type: 'text',
|
|
277
|
+
text: `A ${scope} ID is required when saving to ${scope} scope. Please specify scopeId.`,
|
|
278
|
+
},
|
|
279
|
+
],
|
|
280
|
+
isError: true,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
try {
|
|
284
|
+
const doc = await documentService.create({
|
|
285
|
+
name,
|
|
286
|
+
content,
|
|
287
|
+
mimeType: 'text/plain',
|
|
288
|
+
teamId: scope === 'team' ? scopeId : undefined,
|
|
289
|
+
projectId: scope === 'project' ? scopeId : undefined,
|
|
290
|
+
}, context.userId);
|
|
291
|
+
return {
|
|
292
|
+
content: [
|
|
293
|
+
{
|
|
294
|
+
type: 'text',
|
|
295
|
+
text: `Document saved successfully!\n\nPath: ${doc.path}\nSize: ${doc.charCount} characters\n\nYou can reference this document in future messages using ${doc.path}`,
|
|
296
|
+
},
|
|
297
|
+
],
|
|
298
|
+
structuredContent: {
|
|
299
|
+
success: true,
|
|
300
|
+
path: doc.path,
|
|
301
|
+
id: doc.id,
|
|
302
|
+
charCount: doc.charCount,
|
|
303
|
+
},
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
308
|
+
// Check for unique constraint violation
|
|
309
|
+
if (message.includes('Unique constraint')) {
|
|
310
|
+
return {
|
|
311
|
+
content: [
|
|
312
|
+
{
|
|
313
|
+
type: 'text',
|
|
314
|
+
text: `A document named "${name}" already exists in this scope. Please choose a different name.`,
|
|
315
|
+
},
|
|
316
|
+
],
|
|
317
|
+
isError: true,
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
return {
|
|
321
|
+
content: [{ type: 'text', text: `Failed to save document: ${message}` }],
|
|
322
|
+
isError: true,
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
},
|
|
326
|
+
};
|
|
327
|
+
/**
|
|
328
|
+
* All document-related tools
|
|
329
|
+
*/
|
|
330
|
+
export const documentTools = [
|
|
331
|
+
listDocumentsTool,
|
|
332
|
+
readDocumentTool,
|
|
333
|
+
searchInDocumentTool,
|
|
334
|
+
saveDocumentTool,
|
|
335
|
+
];
|
|
336
|
+
//# sourceMappingURL=documents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/tools/documents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { getConfig } from '../config/loader.js';
|
|
2
|
+
import { getBillingContext } from '../services/usage.js';
|
|
3
|
+
export const getPlanUsageTool = {
|
|
4
|
+
name: 'get-plan-usage',
|
|
5
|
+
description: 'Get the current user\'s plan information and usage statistics including messages used, message limits, and available credits.',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {},
|
|
9
|
+
required: [],
|
|
10
|
+
},
|
|
11
|
+
_meta: {
|
|
12
|
+
'ui/templateFile': 'get-plan-usage.html',
|
|
13
|
+
},
|
|
14
|
+
async execute(input, context) {
|
|
15
|
+
const config = getConfig();
|
|
16
|
+
// If payments not enabled, return simple message
|
|
17
|
+
if (!config.payments.enabled) {
|
|
18
|
+
return {
|
|
19
|
+
content: [{ type: 'text', text: 'Payments are not enabled. Usage tracking is disabled.' }],
|
|
20
|
+
structuredContent: {
|
|
21
|
+
planName: 'Free',
|
|
22
|
+
billingContext: 'personal',
|
|
23
|
+
messagesUsed: 0,
|
|
24
|
+
messageLimit: null,
|
|
25
|
+
credits: null,
|
|
26
|
+
periodEnd: null,
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
// Must have a user context
|
|
31
|
+
if (!context.userId) {
|
|
32
|
+
return {
|
|
33
|
+
content: [{ type: 'text', text: 'Unable to retrieve plan information: User not authenticated.' }],
|
|
34
|
+
isError: true,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
// Get billing context (could be personal or team-based)
|
|
38
|
+
const billingContext = await getBillingContext(context.userId);
|
|
39
|
+
if (!billingContext) {
|
|
40
|
+
return {
|
|
41
|
+
content: [{ type: 'text', text: 'Unable to retrieve billing information.' }],
|
|
42
|
+
isError: true,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// Get plan config to get the name
|
|
46
|
+
const planConfig = config.payments.plans.find((p) => p.id === billingContext.plan);
|
|
47
|
+
const planName = planConfig?.name || billingContext.plan;
|
|
48
|
+
// Calculate period end (next month start)
|
|
49
|
+
const now = new Date();
|
|
50
|
+
const periodEnd = new Date(now.getFullYear(), now.getMonth() + 1, 1);
|
|
51
|
+
// Build text summary
|
|
52
|
+
const lines = [
|
|
53
|
+
`Plan: ${planName}`,
|
|
54
|
+
`Messages used this period: ${billingContext.messagesThisMonth}`,
|
|
55
|
+
];
|
|
56
|
+
if (billingContext.monthlyLimit === -1) {
|
|
57
|
+
lines.push('Message limit: Unlimited');
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
lines.push(`Message limit: ${billingContext.monthlyLimit}`);
|
|
61
|
+
const remaining = Math.max(0, billingContext.monthlyLimit - billingContext.messagesThisMonth);
|
|
62
|
+
lines.push(`Messages remaining: ${remaining}`);
|
|
63
|
+
}
|
|
64
|
+
if (billingContext.credits !== undefined && billingContext.credits !== null) {
|
|
65
|
+
lines.push(`Available credits: ${billingContext.credits}`);
|
|
66
|
+
}
|
|
67
|
+
lines.push(`Period resets: ${periodEnd.toLocaleDateString()}`);
|
|
68
|
+
return {
|
|
69
|
+
content: [{ type: 'text', text: lines.join('\n') }],
|
|
70
|
+
structuredContent: {
|
|
71
|
+
planName,
|
|
72
|
+
planId: billingContext.plan,
|
|
73
|
+
billingContext: billingContext.type,
|
|
74
|
+
messagesUsed: billingContext.messagesThisMonth,
|
|
75
|
+
messageLimit: billingContext.monthlyLimit === -1 ? null : billingContext.monthlyLimit,
|
|
76
|
+
credits: billingContext.credits,
|
|
77
|
+
periodEnd: periodEnd.toISOString(),
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=get-plan-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-plan-usage.js","sourceRoot":"","sources":["../../src/tools/get-plan-usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { readFile } from 'fs/promises';
|
|
2
|
+
import { fileURLToPath } from 'url';
|
|
3
|
+
import { dirname, join } from 'path';
|
|
4
|
+
import { webScrapeTool } from './web-scrape.js';
|
|
5
|
+
import { getPlanUsageTool } from './get-plan-usage.js';
|
|
6
|
+
import { documentTools } from './documents.js';
|
|
7
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
+
const __dirname = dirname(__filename);
|
|
9
|
+
/**
|
|
10
|
+
* Registry of all available native tools
|
|
11
|
+
*/
|
|
12
|
+
const nativeToolRegistry = new Map();
|
|
13
|
+
// Register built-in native tools
|
|
14
|
+
nativeToolRegistry.set('web-scrape', webScrapeTool);
|
|
15
|
+
nativeToolRegistry.set('get-plan-usage', getPlanUsageTool);
|
|
16
|
+
// Register document tools
|
|
17
|
+
for (const tool of documentTools) {
|
|
18
|
+
nativeToolRegistry.set(tool.name, tool);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get all registered native tools
|
|
22
|
+
*/
|
|
23
|
+
export function getAllNativeTools() {
|
|
24
|
+
return Array.from(nativeToolRegistry.values());
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get a native tool by name
|
|
28
|
+
*/
|
|
29
|
+
export function getNativeTool(name) {
|
|
30
|
+
return nativeToolRegistry.get(name);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get native tools formatted for agent consumption (matching MCP tool format)
|
|
34
|
+
*/
|
|
35
|
+
export function getNativeToolsForAgent() {
|
|
36
|
+
return getAllNativeTools().map((tool) => ({
|
|
37
|
+
name: tool.name,
|
|
38
|
+
description: tool.description,
|
|
39
|
+
inputSchema: tool.inputSchema,
|
|
40
|
+
serverId: 'native',
|
|
41
|
+
_meta: tool._meta,
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Resolve the template for a native tool (inline or file-based)
|
|
46
|
+
*/
|
|
47
|
+
export async function resolveNativeToolTemplate(toolName) {
|
|
48
|
+
const tool = getNativeTool(toolName);
|
|
49
|
+
if (!tool?._meta)
|
|
50
|
+
return null;
|
|
51
|
+
// Check for inline template
|
|
52
|
+
if (tool._meta['ui/template']) {
|
|
53
|
+
return {
|
|
54
|
+
text: tool._meta['ui/template'],
|
|
55
|
+
mimeType: 'text/html',
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
// Check for file-based template
|
|
59
|
+
if (tool._meta['ui/templateFile']) {
|
|
60
|
+
const templatePath = join(__dirname, 'templates', tool._meta['ui/templateFile']);
|
|
61
|
+
try {
|
|
62
|
+
const text = await readFile(templatePath, 'utf-8');
|
|
63
|
+
return { text, mimeType: 'text/html' };
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error(`[NativeTool] Failed to read template ${templatePath}:`, error);
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Execute a native tool by name
|
|
74
|
+
*/
|
|
75
|
+
export async function executeNativeTool(name, input, context) {
|
|
76
|
+
const tool = getNativeTool(name);
|
|
77
|
+
if (!tool) {
|
|
78
|
+
return {
|
|
79
|
+
content: [{ type: 'text', text: `Unknown native tool: ${name}` }],
|
|
80
|
+
isError: true,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
return await tool.execute(input, context);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
88
|
+
return {
|
|
89
|
+
content: [{ type: 'text', text: `Tool execution failed: ${message}` }],
|
|
90
|
+
isError: true,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Register a custom native tool
|
|
96
|
+
*/
|
|
97
|
+
export function registerNativeTool(tool) {
|
|
98
|
+
nativeToolRegistry.set(tool.name, tool);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Check if a tool name is a native tool
|
|
102
|
+
*/
|
|
103
|
+
export function isNativeTool(serverId) {
|
|
104
|
+
return serverId === 'native';
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":""}
|