@rnsk/toolkits 0.0.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/dist/core/categories.d.ts +3 -0
- package/dist/core/categories.d.ts.map +1 -0
- package/dist/core/categories.js +23 -0
- package/dist/core/categories.js.map +1 -0
- package/dist/core/define.d.ts +5 -0
- package/dist/core/define.d.ts.map +1 -0
- package/dist/core/define.js +10 -0
- package/dist/core/define.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +4 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/types.d.ts +70 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/validate.d.ts +4 -0
- package/dist/core/validate.d.ts.map +1 -0
- package/dist/core/validate.js +59 -0
- package/dist/core/validate.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/credentials.d.ts +28 -0
- package/dist/runtime/credentials.d.ts.map +1 -0
- package/dist/runtime/credentials.js +15 -0
- package/dist/runtime/credentials.js.map +1 -0
- package/dist/runtime/index.d.ts +5 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +5 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/meta-tools.d.ts +101 -0
- package/dist/runtime/meta-tools.d.ts.map +1 -0
- package/dist/runtime/meta-tools.js +248 -0
- package/dist/runtime/meta-tools.js.map +1 -0
- package/dist/runtime/registry.d.ts +20 -0
- package/dist/runtime/registry.d.ts.map +1 -0
- package/dist/runtime/registry.js +35 -0
- package/dist/runtime/registry.js.map +1 -0
- package/dist/runtime/schema-helpers.d.ts +20 -0
- package/dist/runtime/schema-helpers.d.ts.map +1 -0
- package/dist/runtime/schema-helpers.js +157 -0
- package/dist/runtime/schema-helpers.js.map +1 -0
- package/dist/toolkits/gmail/icon.d.ts +5 -0
- package/dist/toolkits/gmail/icon.d.ts.map +1 -0
- package/dist/toolkits/gmail/icon.js +6 -0
- package/dist/toolkits/gmail/icon.js.map +1 -0
- package/dist/toolkits/gmail/manifest.d.ts +3 -0
- package/dist/toolkits/gmail/manifest.d.ts.map +1 -0
- package/dist/toolkits/gmail/manifest.js +54 -0
- package/dist/toolkits/gmail/manifest.js.map +1 -0
- package/dist/toolkits/gmail/tools/get-message.d.ts +38 -0
- package/dist/toolkits/gmail/tools/get-message.d.ts.map +1 -0
- package/dist/toolkits/gmail/tools/get-message.js +54 -0
- package/dist/toolkits/gmail/tools/get-message.js.map +1 -0
- package/dist/toolkits/gmail/tools/list-messages.d.ts +24 -0
- package/dist/toolkits/gmail/tools/list-messages.d.ts.map +1 -0
- package/dist/toolkits/gmail/tools/list-messages.js +39 -0
- package/dist/toolkits/gmail/tools/list-messages.js.map +1 -0
- package/dist/toolkits/gmail/tools/send-message.d.ts +28 -0
- package/dist/toolkits/gmail/tools/send-message.d.ts.map +1 -0
- package/dist/toolkits/gmail/tools/send-message.js +55 -0
- package/dist/toolkits/gmail/tools/send-message.js.map +1 -0
- package/dist/toolkits/linear/icon.d.ts +5 -0
- package/dist/toolkits/linear/icon.d.ts.map +1 -0
- package/dist/toolkits/linear/icon.js +6 -0
- package/dist/toolkits/linear/icon.js.map +1 -0
- package/dist/toolkits/linear/manifest.d.ts +3 -0
- package/dist/toolkits/linear/manifest.d.ts.map +1 -0
- package/dist/toolkits/linear/manifest.js +51 -0
- package/dist/toolkits/linear/manifest.js.map +1 -0
- package/dist/toolkits/linear/tools/create-issue.d.ts +7 -0
- package/dist/toolkits/linear/tools/create-issue.d.ts.map +1 -0
- package/dist/toolkits/linear/tools/create-issue.js +50 -0
- package/dist/toolkits/linear/tools/create-issue.js.map +1 -0
- package/dist/toolkits/linear/tools/list-teams.d.ts +4 -0
- package/dist/toolkits/linear/tools/list-teams.d.ts.map +1 -0
- package/dist/toolkits/linear/tools/list-teams.js +39 -0
- package/dist/toolkits/linear/tools/list-teams.js.map +1 -0
- package/dist/toolkits/linear/tools/search-issues.d.ts +5 -0
- package/dist/toolkits/linear/tools/search-issues.d.ts.map +1 -0
- package/dist/toolkits/linear/tools/search-issues.js +48 -0
- package/dist/toolkits/linear/tools/search-issues.js.map +1 -0
- package/dist/toolkits/mathematics/icon.d.ts +5 -0
- package/dist/toolkits/mathematics/icon.d.ts.map +1 -0
- package/dist/toolkits/mathematics/icon.js +6 -0
- package/dist/toolkits/mathematics/icon.js.map +1 -0
- package/dist/toolkits/mathematics/manifest.d.ts +3 -0
- package/dist/toolkits/mathematics/manifest.d.ts.map +1 -0
- package/dist/toolkits/mathematics/manifest.js +32 -0
- package/dist/toolkits/mathematics/manifest.js.map +1 -0
- package/dist/toolkits/mathematics/tools/calculate-combinatorics.d.ts +14 -0
- package/dist/toolkits/mathematics/tools/calculate-combinatorics.d.ts.map +1 -0
- package/dist/toolkits/mathematics/tools/calculate-combinatorics.js +34 -0
- package/dist/toolkits/mathematics/tools/calculate-combinatorics.js.map +1 -0
- package/dist/toolkits/mathematics/tools/calculate-matrix-determinant.d.ts +14 -0
- package/dist/toolkits/mathematics/tools/calculate-matrix-determinant.d.ts.map +1 -0
- package/dist/toolkits/mathematics/tools/calculate-matrix-determinant.js +35 -0
- package/dist/toolkits/mathematics/tools/calculate-matrix-determinant.js.map +1 -0
- package/dist/toolkits/mathematics/tools/calculate-percentage.d.ts +54 -0
- package/dist/toolkits/mathematics/tools/calculate-percentage.d.ts.map +1 -0
- package/dist/toolkits/mathematics/tools/calculate-percentage.js +64 -0
- package/dist/toolkits/mathematics/tools/calculate-percentage.js.map +1 -0
- package/dist/toolkits/mathematics/tools/calculate-product.d.ts +9 -0
- package/dist/toolkits/mathematics/tools/calculate-product.d.ts.map +1 -0
- package/dist/toolkits/mathematics/tools/calculate-product.js +13 -0
- package/dist/toolkits/mathematics/tools/calculate-product.js.map +1 -0
- package/dist/toolkits/mathematics/tools/calculate-quadratic-roots.d.ts +36 -0
- package/dist/toolkits/mathematics/tools/calculate-quadratic-roots.d.ts.map +1 -0
- package/dist/toolkits/mathematics/tools/calculate-quadratic-roots.js +41 -0
- package/dist/toolkits/mathematics/tools/calculate-quadratic-roots.js.map +1 -0
- package/dist/toolkits/mathematics/tools/calculate-statistics.d.ts +15 -0
- package/dist/toolkits/mathematics/tools/calculate-statistics.d.ts.map +1 -0
- package/dist/toolkits/mathematics/tools/calculate-statistics.js +52 -0
- package/dist/toolkits/mathematics/tools/calculate-statistics.js.map +1 -0
- package/dist/toolkits/mathematics/tools/calculate-sum.d.ts +9 -0
- package/dist/toolkits/mathematics/tools/calculate-sum.d.ts.map +1 -0
- package/dist/toolkits/mathematics/tools/calculate-sum.js +13 -0
- package/dist/toolkits/mathematics/tools/calculate-sum.js.map +1 -0
- package/dist/toolkits/mathematics/tools/get-random-number.d.ts +11 -0
- package/dist/toolkits/mathematics/tools/get-random-number.d.ts.map +1 -0
- package/dist/toolkits/mathematics/tools/get-random-number.js +14 -0
- package/dist/toolkits/mathematics/tools/get-random-number.js.map +1 -0
- package/dist/toolkits/mathematics/tools/solve-linear-equations.d.ts +37 -0
- package/dist/toolkits/mathematics/tools/solve-linear-equations.d.ts.map +1 -0
- package/dist/toolkits/mathematics/tools/solve-linear-equations.js +55 -0
- package/dist/toolkits/mathematics/tools/solve-linear-equations.js.map +1 -0
- package/dist/toolkits/web-search/icon.d.ts +5 -0
- package/dist/toolkits/web-search/icon.d.ts.map +1 -0
- package/dist/toolkits/web-search/icon.js +6 -0
- package/dist/toolkits/web-search/icon.js.map +1 -0
- package/dist/toolkits/web-search/manifest.d.ts +3 -0
- package/dist/toolkits/web-search/manifest.d.ts.map +1 -0
- package/dist/toolkits/web-search/manifest.js +22 -0
- package/dist/toolkits/web-search/manifest.js.map +1 -0
- package/dist/toolkits/web-search/tools/firecrawl-client.d.ts +4 -0
- package/dist/toolkits/web-search/tools/firecrawl-client.d.ts.map +1 -0
- package/dist/toolkits/web-search/tools/firecrawl-client.js +15 -0
- package/dist/toolkits/web-search/tools/firecrawl-client.js.map +1 -0
- package/dist/toolkits/web-search/tools/web-scrape.d.ts +18 -0
- package/dist/toolkits/web-search/tools/web-scrape.d.ts.map +1 -0
- package/dist/toolkits/web-search/tools/web-scrape.js +30 -0
- package/dist/toolkits/web-search/tools/web-scrape.js.map +1 -0
- package/dist/toolkits/web-search/tools/web-search.d.ts +23 -0
- package/dist/toolkits/web-search/tools/web-search.d.ts.map +1 -0
- package/dist/toolkits/web-search/tools/web-search.js +50 -0
- package/dist/toolkits/web-search/tools/web-search.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const getMessage = tool({
|
|
4
|
+
description: 'Get details of a specific Gmail message by ID.',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
gmailToken: z.string().optional().describe('Injected by system; do not provide'),
|
|
7
|
+
id: z.string().describe('The ID of the message to retrieve'),
|
|
8
|
+
}),
|
|
9
|
+
execute: async ({ gmailToken, id }) => {
|
|
10
|
+
try {
|
|
11
|
+
const response = await fetch(`https://gmail.googleapis.com/gmail/v1/users/me/messages/${id}`, {
|
|
12
|
+
headers: {
|
|
13
|
+
Authorization: `Bearer ${gmailToken}`,
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
if (!response.ok) {
|
|
17
|
+
const error = await response.json();
|
|
18
|
+
return { error: 'Failed to get message', details: error };
|
|
19
|
+
}
|
|
20
|
+
const data = await response.json();
|
|
21
|
+
// Extract basic info
|
|
22
|
+
const headers = data.payload?.headers || [];
|
|
23
|
+
const subject = headers.find((h) => h.name.toLowerCase() === 'subject')?.value;
|
|
24
|
+
const from = headers.find((h) => h.name.toLowerCase() === 'from')?.value;
|
|
25
|
+
const date = headers.find((h) => h.name.toLowerCase() === 'date')?.value;
|
|
26
|
+
let body = '';
|
|
27
|
+
if (data.payload?.parts) {
|
|
28
|
+
const textPart = data.payload.parts.find((p) => p.mimeType === 'text/plain');
|
|
29
|
+
if (textPart?.body?.data) {
|
|
30
|
+
body = Buffer.from(textPart.body.data, 'base64').toString();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else if (data.payload?.body?.data) {
|
|
34
|
+
body = Buffer.from(data.payload.body.data, 'base64').toString();
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
id: data.id,
|
|
38
|
+
threadId: data.threadId,
|
|
39
|
+
snippet: data.snippet,
|
|
40
|
+
subject,
|
|
41
|
+
from,
|
|
42
|
+
date,
|
|
43
|
+
body: body.substring(0, 2000), // Limit body size
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
return {
|
|
48
|
+
error: 'Error getting message',
|
|
49
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=get-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-message.js","sourceRoot":"","sources":["../../../../src/toolkits/gmail/tools/get-message.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare const listMessages: import("ai").Tool<{
|
|
2
|
+
maxResults: number;
|
|
3
|
+
gmailToken?: string | undefined;
|
|
4
|
+
q?: string | undefined;
|
|
5
|
+
}, {
|
|
6
|
+
error: string;
|
|
7
|
+
details: any;
|
|
8
|
+
messages?: undefined;
|
|
9
|
+
resultSizeEstimate?: undefined;
|
|
10
|
+
message?: undefined;
|
|
11
|
+
} | {
|
|
12
|
+
messages: any;
|
|
13
|
+
resultSizeEstimate: any;
|
|
14
|
+
error?: undefined;
|
|
15
|
+
details?: undefined;
|
|
16
|
+
message?: undefined;
|
|
17
|
+
} | {
|
|
18
|
+
error: string;
|
|
19
|
+
message: string;
|
|
20
|
+
details?: undefined;
|
|
21
|
+
messages?: undefined;
|
|
22
|
+
resultSizeEstimate?: undefined;
|
|
23
|
+
}>;
|
|
24
|
+
//# sourceMappingURL=list-messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-messages.d.ts","sourceRoot":"","sources":["../../../../src/toolkits/gmail/tools/list-messages.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;EAoCvB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const listMessages = tool({
|
|
4
|
+
description: 'List or search for Gmail messages. Use query parameter for advanced search (e.g., from:someone@example.com, is:unread).',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
gmailToken: z.string().optional().describe('Injected by system; do not provide'),
|
|
7
|
+
q: z.string().optional().describe('Search query (same format as Gmail search box)'),
|
|
8
|
+
maxResults: z.number().optional().default(10).describe('Maximum number of messages to return'),
|
|
9
|
+
}),
|
|
10
|
+
execute: async ({ gmailToken, q, maxResults }) => {
|
|
11
|
+
try {
|
|
12
|
+
const url = new URL('https://gmail.googleapis.com/gmail/v1/users/me/messages');
|
|
13
|
+
if (q)
|
|
14
|
+
url.searchParams.append('q', q);
|
|
15
|
+
url.searchParams.append('maxResults', maxResults.toString());
|
|
16
|
+
const response = await fetch(url.toString(), {
|
|
17
|
+
headers: {
|
|
18
|
+
Authorization: `Bearer ${gmailToken}`,
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
if (!response.ok) {
|
|
22
|
+
const error = await response.json();
|
|
23
|
+
return { error: 'Failed to list messages', details: error };
|
|
24
|
+
}
|
|
25
|
+
const data = await response.json();
|
|
26
|
+
return {
|
|
27
|
+
messages: data.messages || [],
|
|
28
|
+
resultSizeEstimate: data.resultSizeEstimate,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
return {
|
|
33
|
+
error: 'Error listing messages',
|
|
34
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=list-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-messages.js","sourceRoot":"","sources":["../../../../src/toolkits/gmail/tools/list-messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,yHAAyH;IACtI,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAChF,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACnF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;KACjG,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;QAC7C,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,yDAAyD,CAAC,CAAC;YAC/E,IAAI,CAAC;gBAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACvC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YAE7D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;gBACzC,OAAO,EAAE;oBACL,aAAa,EAAE,UAAU,UAAU,EAAE;iBACxC;aACJ,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACpC,OAAO,EAAE,KAAK,EAAE,yBAAyB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAChE,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO;gBACH,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;gBAC7B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;aAC9C,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,KAAK,EAAE,wBAAwB;gBAC/B,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aACpE,CAAC;QACN,CAAC;IACL,CAAC;CACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare const sendMessage: import("ai").Tool<{
|
|
2
|
+
subject: string;
|
|
3
|
+
body: string;
|
|
4
|
+
to: string;
|
|
5
|
+
gmailToken?: string | undefined;
|
|
6
|
+
}, {
|
|
7
|
+
error: string;
|
|
8
|
+
details: any;
|
|
9
|
+
success?: undefined;
|
|
10
|
+
messageId?: undefined;
|
|
11
|
+
threadId?: undefined;
|
|
12
|
+
message?: undefined;
|
|
13
|
+
} | {
|
|
14
|
+
success: boolean;
|
|
15
|
+
messageId: any;
|
|
16
|
+
threadId: any;
|
|
17
|
+
error?: undefined;
|
|
18
|
+
details?: undefined;
|
|
19
|
+
message?: undefined;
|
|
20
|
+
} | {
|
|
21
|
+
error: string;
|
|
22
|
+
message: string;
|
|
23
|
+
details?: undefined;
|
|
24
|
+
success?: undefined;
|
|
25
|
+
messageId?: undefined;
|
|
26
|
+
threadId?: undefined;
|
|
27
|
+
}>;
|
|
28
|
+
//# sourceMappingURL=send-message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send-message.d.ts","sourceRoot":"","sources":["../../../../src/toolkits/gmail/tools/send-message.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;EAsDtB,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const sendMessage = tool({
|
|
4
|
+
description: 'Send an email via Gmail.',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
gmailToken: z.string().optional().describe('Injected by system; do not provide'),
|
|
7
|
+
to: z.string().describe('Recipient email address'),
|
|
8
|
+
subject: z.string().describe('Email subject'),
|
|
9
|
+
body: z.string().describe('Email body (plain text)'),
|
|
10
|
+
}),
|
|
11
|
+
execute: async ({ gmailToken, to, subject, body }) => {
|
|
12
|
+
try {
|
|
13
|
+
const message = [
|
|
14
|
+
`To: ${to}`,
|
|
15
|
+
`Subject: ${subject}`,
|
|
16
|
+
'Content-Type: text/plain; charset="UTF-8"',
|
|
17
|
+
'MIME-Version: 1.0',
|
|
18
|
+
'',
|
|
19
|
+
body,
|
|
20
|
+
].join('\n');
|
|
21
|
+
const encodedMessage = Buffer.from(message)
|
|
22
|
+
.toString('base64')
|
|
23
|
+
.replace(/\+/g, '-')
|
|
24
|
+
.replace(/\//g, '_')
|
|
25
|
+
.replace(/=+$/, '');
|
|
26
|
+
const response = await fetch('https://gmail.googleapis.com/gmail/v1/users/me/messages/send', {
|
|
27
|
+
method: 'POST',
|
|
28
|
+
headers: {
|
|
29
|
+
Authorization: `Bearer ${gmailToken}`,
|
|
30
|
+
'Content-Type': 'application/json',
|
|
31
|
+
},
|
|
32
|
+
body: JSON.stringify({
|
|
33
|
+
raw: encodedMessage,
|
|
34
|
+
}),
|
|
35
|
+
});
|
|
36
|
+
if (!response.ok) {
|
|
37
|
+
const error = await response.json();
|
|
38
|
+
return { error: 'Failed to send message', details: error };
|
|
39
|
+
}
|
|
40
|
+
const data = await response.json();
|
|
41
|
+
return {
|
|
42
|
+
success: true,
|
|
43
|
+
messageId: data.id,
|
|
44
|
+
threadId: data.threadId,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
return {
|
|
49
|
+
error: 'Error sending message',
|
|
50
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=send-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send-message.js","sourceRoot":"","sources":["../../../../src/toolkits/gmail/tools/send-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,0BAA0B;IACvC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAChF,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAClD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC7C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KACvD,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACjD,IAAI,CAAC;YACD,MAAM,OAAO,GAAG;gBACZ,OAAO,EAAE,EAAE;gBACX,YAAY,OAAO,EAAE;gBACrB,2CAA2C;gBAC3C,mBAAmB;gBACnB,EAAE;gBACF,IAAI;aACP,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;iBACtC,QAAQ,CAAC,QAAQ,CAAC;iBAClB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;iBACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;iBACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAExB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,8DAA8D,EAAE;gBACzF,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACL,aAAa,EAAE,UAAU,UAAU,EAAE;oBACrC,cAAc,EAAE,kBAAkB;iBACrC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACjB,GAAG,EAAE,cAAc;iBACtB,CAAC;aACL,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACpC,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC/D,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,IAAI,CAAC,EAAE;gBAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ;aAC1B,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,KAAK,EAAE,uBAAuB;gBAC9B,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aACpE,CAAC;QACN,CAAC;IACL,CAAC;CACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../../src/toolkits/linear/icon.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW;;;CAGvB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
const SVG = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><rect width="24" height="24" rx="4" fill="#5E6AD2"/><path d="M6 17L10 7h1.5l4 10h-1.5l-1-2.5H8.5L7.5 17H6zm3.2-4h3.6L9.8 9.5 9.2 13z" fill="white"/></svg>`;
|
|
2
|
+
export const LINEAR_ICON = {
|
|
3
|
+
kind: 'svg',
|
|
4
|
+
dataUri: `data:image/svg+xml;base64,${Buffer.from(SVG).toString('base64')}`,
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=icon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon.js","sourceRoot":"","sources":["../../../src/toolkits/linear/icon.ts"],"names":[],"mappings":"AAAA,MAAM,GAAG,GAAG,wNAAwN,CAAC;AAErO,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,KAAc;IACpB,OAAO,EAAE,6BAA6B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;CAC5E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/toolkits/linear/manifest.ts"],"names":[],"mappings":";AAMA,wBA6CG"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { defineToolkit, defineTool } from '../../core/define.js';
|
|
2
|
+
import { LINEAR_ICON } from './icon.js';
|
|
3
|
+
import { linearSearchIssues } from './tools/search-issues.js';
|
|
4
|
+
import { linearCreateIssue } from './tools/create-issue.js';
|
|
5
|
+
import { linearListTeams } from './tools/list-teams.js';
|
|
6
|
+
export default defineToolkit({
|
|
7
|
+
id: 'linear',
|
|
8
|
+
displayName: 'Linear',
|
|
9
|
+
shortDescription: 'Issues, teams, and project tracking.',
|
|
10
|
+
category: 'Productivity & Project Management',
|
|
11
|
+
icon: LINEAR_ICON,
|
|
12
|
+
auth: {
|
|
13
|
+
type: 'oauth2',
|
|
14
|
+
tokenField: 'linearToken',
|
|
15
|
+
provider: {
|
|
16
|
+
slug: 'linear',
|
|
17
|
+
env: { clientId: 'LINEAR_CLIENT_ID', clientSecret: 'LINEAR_CLIENT_SECRET' },
|
|
18
|
+
authorizeUrl: 'https://linear.app/oauth/authorize',
|
|
19
|
+
tokenUrl: 'https://api.linear.app/oauth/token',
|
|
20
|
+
scopes: ['read', 'write'],
|
|
21
|
+
scopeSeparator: ',',
|
|
22
|
+
exchangeStyle: 'form',
|
|
23
|
+
connectDescription: 'Integrate Linear to manage issues, projects, and cycles with AI-assisted prioritization.',
|
|
24
|
+
callbackPath: '/api/auth/linear/callback',
|
|
25
|
+
stateCookie: 'linear_oauth_state',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
allowedHosts: ['api.linear.app'],
|
|
29
|
+
tools: [
|
|
30
|
+
defineTool({
|
|
31
|
+
name: 'linearSearchIssues',
|
|
32
|
+
tool: linearSearchIssues,
|
|
33
|
+
requiredAuth: 'linearToken',
|
|
34
|
+
scope: 'read',
|
|
35
|
+
}),
|
|
36
|
+
defineTool({
|
|
37
|
+
name: 'linearCreateIssue',
|
|
38
|
+
tool: linearCreateIssue,
|
|
39
|
+
requiredAuth: 'linearToken',
|
|
40
|
+
scope: 'write',
|
|
41
|
+
}),
|
|
42
|
+
defineTool({
|
|
43
|
+
name: 'linearListTeams',
|
|
44
|
+
tool: linearListTeams,
|
|
45
|
+
requiredAuth: 'linearToken',
|
|
46
|
+
scope: 'read',
|
|
47
|
+
}),
|
|
48
|
+
],
|
|
49
|
+
meta: { since: '0.0.1' },
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/toolkits/linear/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,eAAe,aAAa,CAAC;IAC3B,EAAE,EAAE,QAAQ;IACZ,WAAW,EAAE,QAAQ;IACrB,gBAAgB,EAAE,sCAAsC;IACxD,QAAQ,EAAE,mCAAmC;IAC7C,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,aAAa;QACzB,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,sBAAsB,EAAE;YAC3E,YAAY,EAAE,oCAAoC;YAClD,QAAQ,EAAE,oCAAoC;YAC9C,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;YACzB,cAAc,EAAE,GAAG;YACnB,aAAa,EAAE,MAAM;YACrB,kBAAkB,EAChB,0FAA0F;YAC5F,YAAY,EAAE,2BAA2B;YACzC,WAAW,EAAE,oBAAoB;SAClC;KACF;IACD,YAAY,EAAE,CAAC,gBAAgB,CAAC;IAChC,KAAK,EAAE;QACL,UAAU,CAAC;YACT,IAAI,EAAE,oBAAoB;YAC1B,IAAI,EAAE,kBAAkB;YACxB,YAAY,EAAE,aAAa;YAC3B,KAAK,EAAE,MAAM;SACd,CAAC;QACF,UAAU,CAAC;YACT,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,iBAAiB;YACvB,YAAY,EAAE,aAAa;YAC3B,KAAK,EAAE,OAAO;SACf,CAAC;QACF,UAAU,CAAC;YACT,IAAI,EAAE,iBAAiB;YACvB,IAAI,EAAE,eAAe;YACrB,YAAY,EAAE,aAAa;YAC3B,KAAK,EAAE,MAAM;SACd,CAAC;KACH;IACD,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;CACzB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-issue.d.ts","sourceRoot":"","sources":["../../../../src/toolkits/linear/tools/create-issue.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,iBAAiB;;;;;OAiD5B,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const linearCreateIssue = tool({
|
|
4
|
+
description: 'Create a new issue in Linear.',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
title: z.string().describe('Title of the issue'),
|
|
7
|
+
description: z.string().optional().describe('Detailed description of the issue'),
|
|
8
|
+
teamId: z.string().describe('The ID of the team where the issue will be created. Use linearListTeams if unknown.'),
|
|
9
|
+
linearToken: z.string().optional().describe('Linear API token (injected by system)'),
|
|
10
|
+
}),
|
|
11
|
+
execute: async ({ title, description, teamId, linearToken }) => {
|
|
12
|
+
const graphqlQuery = {
|
|
13
|
+
query: `
|
|
14
|
+
mutation CreateIssue($input: IssueCreateInput!) {
|
|
15
|
+
issueCreate(input: $input) {
|
|
16
|
+
success
|
|
17
|
+
issue {
|
|
18
|
+
id
|
|
19
|
+
identifier
|
|
20
|
+
title
|
|
21
|
+
url
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
`,
|
|
26
|
+
variables: {
|
|
27
|
+
input: {
|
|
28
|
+
title,
|
|
29
|
+
description,
|
|
30
|
+
teamId,
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
const response = await fetch('https://api.linear.app/graphql', {
|
|
35
|
+
method: 'POST',
|
|
36
|
+
headers: {
|
|
37
|
+
'Content-Type': 'application/json',
|
|
38
|
+
'Authorization': `Bearer ${linearToken}`,
|
|
39
|
+
},
|
|
40
|
+
body: JSON.stringify(graphqlQuery),
|
|
41
|
+
});
|
|
42
|
+
if (!response.ok) {
|
|
43
|
+
const error = await response.json();
|
|
44
|
+
return { error: 'Failed to create Linear issue', details: error };
|
|
45
|
+
}
|
|
46
|
+
const data = await response.json();
|
|
47
|
+
return data.data.issueCreate;
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=create-issue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-issue.js","sourceRoot":"","sources":["../../../../src/toolkits/linear/tools/create-issue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,+BAA+B;IAC5C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAChD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAChF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qFAAqF,CAAC;QAClH,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;KACvF,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE;QAC3D,MAAM,YAAY,GAAG;YACjB,KAAK,EAAE;;;;;;;;;;;;OAYZ;YACK,SAAS,EAAE;gBACP,KAAK,EAAE;oBACH,KAAK;oBACL,WAAW;oBACX,MAAM;iBACT;aACJ;SACJ,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gCAAgC,EAAE;YAC3D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,WAAW,EAAE;aAC3C;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;SACrC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,OAAO,EAAE,KAAK,EAAE,+BAA+B,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACtE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IACjC,CAAC;CACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-teams.d.ts","sourceRoot":"","sources":["../../../../src/toolkits/linear/tools/list-teams.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe;;OAsC1B,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const linearListTeams = tool({
|
|
4
|
+
description: 'List all teams accessible in Linear. Useful for finding team IDs to create issues.',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
linearToken: z.string().optional().describe('Linear API token (injected by system)'),
|
|
7
|
+
}),
|
|
8
|
+
execute: async ({ linearToken }) => {
|
|
9
|
+
const graphqlQuery = {
|
|
10
|
+
query: `
|
|
11
|
+
query {
|
|
12
|
+
teams {
|
|
13
|
+
nodes {
|
|
14
|
+
id
|
|
15
|
+
name
|
|
16
|
+
key
|
|
17
|
+
description
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
`,
|
|
22
|
+
};
|
|
23
|
+
const response = await fetch('https://api.linear.app/graphql', {
|
|
24
|
+
method: 'POST',
|
|
25
|
+
headers: {
|
|
26
|
+
'Content-Type': 'application/json',
|
|
27
|
+
'Authorization': `Bearer ${linearToken}`,
|
|
28
|
+
},
|
|
29
|
+
body: JSON.stringify(graphqlQuery),
|
|
30
|
+
});
|
|
31
|
+
if (!response.ok) {
|
|
32
|
+
const error = await response.json();
|
|
33
|
+
return { error: 'Failed to list Linear teams', details: error };
|
|
34
|
+
}
|
|
35
|
+
const data = await response.json();
|
|
36
|
+
return data.data.teams.nodes;
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=list-teams.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-teams.js","sourceRoot":"","sources":["../../../../src/toolkits/linear/tools/list-teams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,oFAAoF;IACjG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;KACrF,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACjC,MAAM,YAAY,GAAG;YACnB,KAAK,EAAE;;;;;;;;;;;OAWN;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gCAAgC,EAAE;YAC7D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,WAAW,EAAE;aACzC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;SACnC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,OAAO,EAAE,KAAK,EAAE,6BAA6B,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAClE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC/B,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-issues.d.ts","sourceRoot":"","sources":["../../../../src/toolkits/linear/tools/search-issues.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB;;;OA+C7B,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const linearSearchIssues = tool({
|
|
4
|
+
description: 'Search for issues in Linear. Matches against title and description.',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
query: z.string().describe('The search query (title or description)'),
|
|
7
|
+
linearToken: z.string().optional().describe('Linear API token (injected by system)'),
|
|
8
|
+
}),
|
|
9
|
+
execute: async ({ query, linearToken }) => {
|
|
10
|
+
const graphqlQuery = {
|
|
11
|
+
query: `
|
|
12
|
+
query SearchIssues($term: String!) {
|
|
13
|
+
searchIssues(term: $term) {
|
|
14
|
+
nodes {
|
|
15
|
+
id
|
|
16
|
+
identifier
|
|
17
|
+
title
|
|
18
|
+
description
|
|
19
|
+
status {
|
|
20
|
+
name
|
|
21
|
+
}
|
|
22
|
+
assignee {
|
|
23
|
+
name
|
|
24
|
+
}
|
|
25
|
+
url
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
`,
|
|
30
|
+
variables: { term: query },
|
|
31
|
+
};
|
|
32
|
+
const response = await fetch('https://api.linear.app/graphql', {
|
|
33
|
+
method: 'POST',
|
|
34
|
+
headers: {
|
|
35
|
+
'Content-Type': 'application/json',
|
|
36
|
+
'Authorization': `Bearer ${linearToken}`,
|
|
37
|
+
},
|
|
38
|
+
body: JSON.stringify(graphqlQuery),
|
|
39
|
+
});
|
|
40
|
+
if (!response.ok) {
|
|
41
|
+
const error = await response.json();
|
|
42
|
+
return { error: 'Linear search failed', details: error };
|
|
43
|
+
}
|
|
44
|
+
const data = await response.json();
|
|
45
|
+
return data.data.searchIssues.nodes;
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=search-issues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-issues.js","sourceRoot":"","sources":["../../../../src/toolkits/linear/tools/search-issues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;IACrC,WAAW,EAAE,qEAAqE;IAClF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QACrE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;KACrF,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE;QACxC,MAAM,YAAY,GAAG;YACnB,KAAK,EAAE;;;;;;;;;;;;;;;;;;OAkBN;YACD,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;SAC3B,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gCAAgC,EAAE;YAC7D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,WAAW,EAAE;aACzC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;SACnC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC3D,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IACtC,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../../src/toolkits/mathematics/icon.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB;;;CAG5B,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
const SVG = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><rect width="24" height="24" rx="4" fill="#6366f1"/><text x="12" y="17" text-anchor="middle" font-size="14" fill="white" font-family="system-ui">π</text></svg>`;
|
|
2
|
+
export const MATHEMATICS_ICON = {
|
|
3
|
+
kind: 'svg',
|
|
4
|
+
dataUri: `data:image/svg+xml;base64,${Buffer.from(SVG).toString('base64')}`,
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=icon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon.js","sourceRoot":"","sources":["../../../src/toolkits/mathematics/icon.ts"],"names":[],"mappings":"AAAA,MAAM,GAAG,GAAG,6NAA6N,CAAC;AAE1O,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,KAAc;IACpB,OAAO,EAAE,6BAA6B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;CAC5E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/toolkits/mathematics/manifest.ts"],"names":[],"mappings":";AAYA,wBAmBG"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { defineToolkit, defineTool } from '../../core/define.js';
|
|
2
|
+
import { MATHEMATICS_ICON } from './icon.js';
|
|
3
|
+
import { calculateSum } from './tools/calculate-sum.js';
|
|
4
|
+
import { calculateProduct } from './tools/calculate-product.js';
|
|
5
|
+
import { getRandomNumber } from './tools/get-random-number.js';
|
|
6
|
+
import { calculateStatistics } from './tools/calculate-statistics.js';
|
|
7
|
+
import { solveLinearEquations } from './tools/solve-linear-equations.js';
|
|
8
|
+
import { calculateQuadraticRoots } from './tools/calculate-quadratic-roots.js';
|
|
9
|
+
import { calculateCombinatorics } from './tools/calculate-combinatorics.js';
|
|
10
|
+
import { calculatePercentage } from './tools/calculate-percentage.js';
|
|
11
|
+
import { calculateMatrixDeterminant } from './tools/calculate-matrix-determinant.js';
|
|
12
|
+
export default defineToolkit({
|
|
13
|
+
id: 'mathematics',
|
|
14
|
+
displayName: 'Mathematics',
|
|
15
|
+
shortDescription: 'Sum, product, statistics, and equation utilities.',
|
|
16
|
+
category: 'Data & Analytics',
|
|
17
|
+
icon: MATHEMATICS_ICON,
|
|
18
|
+
auth: { type: 'none' },
|
|
19
|
+
tools: [
|
|
20
|
+
defineTool({ name: 'calculateSum', tool: calculateSum, scope: 'read' }),
|
|
21
|
+
defineTool({ name: 'calculateProduct', tool: calculateProduct, scope: 'read' }),
|
|
22
|
+
defineTool({ name: 'getRandomNumber', tool: getRandomNumber, scope: 'read' }),
|
|
23
|
+
defineTool({ name: 'calculateStatistics', tool: calculateStatistics, scope: 'read' }),
|
|
24
|
+
defineTool({ name: 'solveLinearEquations', tool: solveLinearEquations, scope: 'read' }),
|
|
25
|
+
defineTool({ name: 'calculateQuadraticRoots', tool: calculateQuadraticRoots, scope: 'read' }),
|
|
26
|
+
defineTool({ name: 'calculateCombinatorics', tool: calculateCombinatorics, scope: 'read' }),
|
|
27
|
+
defineTool({ name: 'calculatePercentage', tool: calculatePercentage, scope: 'read' }),
|
|
28
|
+
defineTool({ name: 'calculateMatrixDeterminant', tool: calculateMatrixDeterminant, scope: 'read' }),
|
|
29
|
+
],
|
|
30
|
+
meta: { since: '0.0.1' },
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/toolkits/mathematics/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAErF,eAAe,aAAa,CAAC;IAC3B,EAAE,EAAE,aAAa;IACjB,WAAW,EAAE,aAAa;IAC1B,gBAAgB,EAAE,mDAAmD;IACrE,QAAQ,EAAE,kBAAkB;IAC5B,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IACtB,KAAK,EAAE;QACL,UAAU,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACvE,UAAU,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC/E,UAAU,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC7E,UAAU,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACrF,UAAU,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACvF,UAAU,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC7F,UAAU,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC3F,UAAU,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACrF,UAAU,CAAC,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;KACpG;IACD,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;CACzB,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const calculateCombinatorics: import("ai").Tool<{
|
|
2
|
+
type: "permutation" | "combination";
|
|
3
|
+
n: number;
|
|
4
|
+
r: number;
|
|
5
|
+
}, {
|
|
6
|
+
error: string;
|
|
7
|
+
operation?: undefined;
|
|
8
|
+
result?: undefined;
|
|
9
|
+
} | {
|
|
10
|
+
operation: string;
|
|
11
|
+
result: number;
|
|
12
|
+
error?: undefined;
|
|
13
|
+
}>;
|
|
14
|
+
//# sourceMappingURL=calculate-combinatorics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculate-combinatorics.d.ts","sourceRoot":"","sources":["../../../../src/toolkits/mathematics/tools/calculate-combinatorics.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EAoBjC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
const factorial = (n) => {
|
|
4
|
+
if (n < 0)
|
|
5
|
+
return 0;
|
|
6
|
+
if (n === 0 || n === 1)
|
|
7
|
+
return 1;
|
|
8
|
+
let result = 1;
|
|
9
|
+
for (let i = 2; i <= n; i++)
|
|
10
|
+
result *= i;
|
|
11
|
+
return result;
|
|
12
|
+
};
|
|
13
|
+
export const calculateCombinatorics = tool({
|
|
14
|
+
description: 'Calculates permutations (nPr) and combinations (nCr).',
|
|
15
|
+
inputSchema: z.object({
|
|
16
|
+
n: z.number().int().nonnegative().describe('Total number of items'),
|
|
17
|
+
r: z.number().int().nonnegative().describe('Number of items to choose'),
|
|
18
|
+
type: z.enum(['permutation', 'combination']).describe('Type of calculation (nPr or nCr)'),
|
|
19
|
+
}),
|
|
20
|
+
execute: async ({ n, r, type }) => {
|
|
21
|
+
if (r > n) {
|
|
22
|
+
return { error: 'r cannot be greater than n.' };
|
|
23
|
+
}
|
|
24
|
+
if (type === 'permutation') {
|
|
25
|
+
const result = factorial(n) / factorial(n - r);
|
|
26
|
+
return { operation: `${n}P${r}`, result };
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
const result = factorial(n) / (factorial(r) * factorial(n - r));
|
|
30
|
+
return { operation: `${n}C${r}`, result };
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=calculate-combinatorics.js.map
|