@rnsk/toolkits 0.0.3 → 0.0.4
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 +4 -4
- package/dist/toolkits/github/tools/Actions/get-workflow-job.d.ts +3 -3
- package/dist/toolkits/github/tools/Actions/list-artifacts.d.ts +1 -1
- package/dist/toolkits/github/tools/Actions/list-workflow-jobs.d.ts +3 -3
- package/dist/toolkits/github/tools/Actions/list-workflow-run-artifacts.d.ts +1 -1
- package/dist/toolkits/github/tools/Activity/list-notifications.d.ts +1 -1
- package/dist/toolkits/github/tools/Activity/list-public-events.d.ts +1 -1
- package/dist/toolkits/github/tools/Activity/list-repo-events.d.ts +1 -1
- package/dist/toolkits/github/tools/Activity/list-user-events.d.ts +1 -1
- package/dist/toolkits/github/tools/Apps/list-installations.d.ts +1 -1
- package/dist/toolkits/github/tools/Checks/create-check-run.d.ts +5 -5
- package/dist/toolkits/github/tools/Checks/create-check-suite.d.ts +2 -2
- package/dist/toolkits/github/tools/Checks/get-check-run.d.ts +2 -2
- package/dist/toolkits/github/tools/Checks/get-check-suite.d.ts +2 -2
- package/dist/toolkits/github/tools/Checks/list-check-runs.d.ts +4 -4
- package/dist/toolkits/github/tools/Checks/update-check-run.d.ts +4 -4
- package/dist/toolkits/github/tools/CodeScanning/list-alerts.d.ts +2 -2
- package/dist/toolkits/github/tools/CodeScanning/update-alert.d.ts +1 -1
- package/dist/toolkits/github/tools/Collaborators/add-collaborator.d.ts +1 -1
- package/dist/toolkits/github/tools/Collaborators/check-collaborator.d.ts +1 -1
- package/dist/toolkits/github/tools/Collaborators/list-collaborators.d.ts +1 -1
- package/dist/toolkits/github/tools/Collaborators/remove-collaborator.d.ts +1 -1
- package/dist/toolkits/github/tools/Commits/compare-commits.d.ts +2 -2
- package/dist/toolkits/github/tools/Commits/get-commit.d.ts +2 -2
- package/dist/toolkits/github/tools/Commits/list-commits.d.ts +1 -1
- package/dist/toolkits/github/tools/Commits/list-pull-requests-associated-with-commit.d.ts +2 -2
- package/dist/toolkits/github/tools/Dependabot/list-alerts.d.ts +1 -1
- package/dist/toolkits/github/tools/Dependabot/update-alert.d.ts +1 -1
- package/dist/toolkits/github/tools/DeployKeys/list-deploy-keys.d.ts +1 -1
- package/dist/toolkits/github/tools/Deployments/create-deployment.d.ts +1 -1
- package/dist/toolkits/github/tools/Deployments/list-deployments.d.ts +1 -1
- package/dist/toolkits/github/tools/Environments/list-environments.d.ts +1 -1
- package/dist/toolkits/github/tools/Files/create-or-update-file.d.ts +1 -1
- package/dist/toolkits/github/tools/Gists/create-gist.d.ts +1 -1
- package/dist/toolkits/github/tools/Git/create-blob.d.ts +1 -1
- package/dist/toolkits/github/tools/Git/create-tree.d.ts +1 -1
- package/dist/toolkits/github/tools/Issues/add-issue-assignees.d.ts +1 -1
- package/dist/toolkits/github/tools/Issues/list-authenticated-user-issues.d.ts +3 -3
- package/dist/toolkits/github/tools/Issues/list-issue-comments.d.ts +1 -1
- package/dist/toolkits/github/tools/Issues/list-org-issues.d.ts +3 -3
- package/dist/toolkits/github/tools/Issues/list-repo-issues.d.ts +2 -2
- package/dist/toolkits/github/tools/Issues/list-user-account-issues.d.ts +3 -3
- package/dist/toolkits/github/tools/Organizations/get-org-membership.d.ts +1 -1
- package/dist/toolkits/github/tools/Organizations/list-org-members.d.ts +1 -1
- package/dist/toolkits/github/tools/Organizations/list-org-repositories.d.ts +2 -2
- package/dist/toolkits/github/tools/Organizations/list-user-organizations.d.ts +1 -1
- package/dist/toolkits/github/tools/Organizations/update-organization.d.ts +1 -1
- package/dist/toolkits/github/tools/PRs/create-pull-request-review.d.ts +1 -1
- package/dist/toolkits/github/tools/PRs/list-pull-request-files.d.ts +1 -1
- package/dist/toolkits/github/tools/PRs/list-pull-requests.d.ts +1 -1
- package/dist/toolkits/github/tools/Projects/list-org-projects.d.ts +1 -1
- package/dist/toolkits/github/tools/Projects/list-project-columns.d.ts +1 -1
- package/dist/toolkits/github/tools/Projects/list-repo-projects.d.ts +1 -1
- package/dist/toolkits/github/tools/Projects/update-project.d.ts +1 -1
- package/dist/toolkits/github/tools/Reactions/create-commit-comment-reaction.d.ts +1 -1
- package/dist/toolkits/github/tools/Reactions/create-issue-reaction.d.ts +1 -1
- package/dist/toolkits/github/tools/Reactions/list-commit-comment-reactions.d.ts +1 -1
- package/dist/toolkits/github/tools/Reactions/list-issue-reactions.d.ts +1 -1
- package/dist/toolkits/github/tools/Reactions/list-pr-comment-reactions.d.ts +1 -1
- package/dist/toolkits/github/tools/Releases/list-releases.d.ts +1 -1
- package/dist/toolkits/github/tools/Repos/get-repo-contributors.d.ts +1 -1
- package/dist/toolkits/github/tools/Repos/list-branches.d.ts +1 -1
- package/dist/toolkits/github/tools/Repos/list-repos.d.ts +2 -2
- package/dist/toolkits/github/tools/Repos/watch-repo.d.ts +1 -1
- package/dist/toolkits/github/tools/Search/search-repos.d.ts +1 -1
- package/dist/toolkits/github/tools/SecretScanning/list-alerts.d.ts +1 -1
- package/dist/toolkits/github/tools/SecretScanning/update-alert.d.ts +1 -1
- package/dist/toolkits/github/tools/SecurityAdvisories/create-repository-advisory.d.ts +1 -1
- package/dist/toolkits/github/tools/SecurityAdvisories/get-repository-advisory.d.ts +1 -1
- package/dist/toolkits/github/tools/SecurityAdvisories/list-global-advisories.d.ts +1 -1
- package/dist/toolkits/github/tools/SecurityAdvisories/list-repository-advisories.d.ts +2 -2
- package/dist/toolkits/github/tools/Stars/list-stargazers.d.ts +1 -1
- package/dist/toolkits/github/tools/Stars/list-starred-repos.d.ts +1 -1
- package/dist/toolkits/github/tools/Statuses/create-commit-status.d.ts +1 -1
- package/dist/toolkits/github/tools/Statuses/list-commit-statuses.d.ts +1 -1
- package/dist/toolkits/github/tools/Teams/list-team-members.d.ts +1 -1
- package/dist/toolkits/github/tools/Teams/list-team-repos.d.ts +1 -1
- package/dist/toolkits/github/tools/Teams/list-teams.d.ts +1 -1
- package/dist/toolkits/github/tools/Users/get-user-context.d.ts +1 -1
- package/dist/toolkits/github/tools/Users/update-authenticated-user.d.ts +1 -1
- package/dist/toolkits/github/tools/Webhooks/create-repo-webhook.d.ts +1 -1
- package/dist/toolkits/github/tools/Webhooks/list-repo-webhooks.d.ts +1 -1
- package/dist/toolkits/github/tools/Webhooks/update-repo-webhook.d.ts +1 -1
- package/dist/toolkits/github/tools/Workflows/list-workflow-runs.d.ts +2 -2
- package/dist/toolkits/github/tools/Workflows/list-workflows.d.ts +1 -1
- package/dist/toolkits/github/tools/index.d.ts +4859 -175
- package/dist/toolkits/github/tools/index.js +342 -342
- package/dist/toolkits/gmail/tools/create-draft.d.ts +1 -1
- package/dist/toolkits/gmail/tools/reply-to-thread.d.ts +1 -1
- package/dist/toolkits/gmail/tools/send-message.d.ts +1 -1
- package/dist/toolkits/linear/manifest.js +35 -0
- package/dist/toolkits/linear/tools/add-comment.d.ts +6 -0
- package/dist/toolkits/linear/tools/add-comment.js +52 -0
- package/dist/toolkits/linear/tools/get-issue.d.ts +6 -0
- package/dist/toolkits/linear/tools/get-issue.js +117 -0
- package/dist/toolkits/linear/tools/list-projects.d.ts +4 -0
- package/dist/toolkits/linear/tools/list-projects.js +46 -0
- package/dist/toolkits/linear/tools/list-workflow-states.d.ts +26 -0
- package/dist/toolkits/linear/tools/list-workflow-states.js +59 -0
- package/dist/toolkits/linear/tools/update-issue.d.ts +11 -0
- package/dist/toolkits/linear/tools/update-issue.js +78 -0
- package/dist/toolkits/notion/tools/append-block-children.d.ts +1 -1
- package/dist/toolkits/notion/tools/index.d.ts +105 -12
- package/dist/toolkits/notion/tools/index.js +8 -8
- package/dist/toolkits/notion/tools/query-database.d.ts +1 -1
- package/package.json +4 -3
- package/dist/runtime/credentials.d.ts +0 -28
- package/dist/runtime/credentials.js +0 -15
- package/dist/runtime/index.d.ts +0 -5
- package/dist/runtime/index.js +0 -5
- package/dist/runtime/meta-tools.d.ts +0 -101
- package/dist/runtime/meta-tools.js +0 -250
- package/dist/runtime/registry.d.ts +0 -20
- package/dist/runtime/registry.js +0 -35
- package/dist/runtime/schema-helpers.d.ts +0 -20
- package/dist/runtime/schema-helpers.js +0 -157
|
@@ -3,6 +3,11 @@ import { LINEAR_ICON } from './icon.js';
|
|
|
3
3
|
import { linearSearchIssues } from './tools/search-issues.js';
|
|
4
4
|
import { linearCreateIssue } from './tools/create-issue.js';
|
|
5
5
|
import { linearListTeams } from './tools/list-teams.js';
|
|
6
|
+
import { linearGetIssue } from './tools/get-issue.js';
|
|
7
|
+
import { linearUpdateIssue } from './tools/update-issue.js';
|
|
8
|
+
import { linearListProjects } from './tools/list-projects.js';
|
|
9
|
+
import { linearListWorkflowStates } from './tools/list-workflow-states.js';
|
|
10
|
+
import { linearAddComment } from './tools/add-comment.js';
|
|
6
11
|
export default defineToolkit({
|
|
7
12
|
id: 'linear',
|
|
8
13
|
displayName: 'Linear',
|
|
@@ -45,6 +50,36 @@ export default defineToolkit({
|
|
|
45
50
|
requiredAuth: 'linearToken',
|
|
46
51
|
scope: 'read',
|
|
47
52
|
}),
|
|
53
|
+
defineTool({
|
|
54
|
+
name: 'linearGetIssue',
|
|
55
|
+
tool: linearGetIssue,
|
|
56
|
+
requiredAuth: 'linearToken',
|
|
57
|
+
scope: 'read',
|
|
58
|
+
}),
|
|
59
|
+
defineTool({
|
|
60
|
+
name: 'linearUpdateIssue',
|
|
61
|
+
tool: linearUpdateIssue,
|
|
62
|
+
requiredAuth: 'linearToken',
|
|
63
|
+
scope: 'write',
|
|
64
|
+
}),
|
|
65
|
+
defineTool({
|
|
66
|
+
name: 'linearListProjects',
|
|
67
|
+
tool: linearListProjects,
|
|
68
|
+
requiredAuth: 'linearToken',
|
|
69
|
+
scope: 'read',
|
|
70
|
+
}),
|
|
71
|
+
defineTool({
|
|
72
|
+
name: 'linearListWorkflowStates',
|
|
73
|
+
tool: linearListWorkflowStates,
|
|
74
|
+
requiredAuth: 'linearToken',
|
|
75
|
+
scope: 'read',
|
|
76
|
+
}),
|
|
77
|
+
defineTool({
|
|
78
|
+
name: 'linearAddComment',
|
|
79
|
+
tool: linearAddComment,
|
|
80
|
+
requiredAuth: 'linearToken',
|
|
81
|
+
scope: 'write',
|
|
82
|
+
}),
|
|
48
83
|
],
|
|
49
84
|
meta: { since: '0.0.1' },
|
|
50
85
|
});
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const linearAddComment = tool({
|
|
4
|
+
description: 'Add a comment to a Linear issue.',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
issueId: z.string().describe('Linear issue UUID'),
|
|
7
|
+
body: z.string().describe('Comment body (markdown supported)'),
|
|
8
|
+
linearToken: z.string().optional().describe('Linear API token (injected by system)'),
|
|
9
|
+
}),
|
|
10
|
+
execute: async ({ issueId, body, linearToken }) => {
|
|
11
|
+
const graphqlQuery = {
|
|
12
|
+
query: `
|
|
13
|
+
mutation CreateComment($input: CommentCreateInput!) {
|
|
14
|
+
commentCreate(input: $input) {
|
|
15
|
+
success
|
|
16
|
+
comment {
|
|
17
|
+
id
|
|
18
|
+
body
|
|
19
|
+
url
|
|
20
|
+
createdAt
|
|
21
|
+
user { id name }
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
`,
|
|
26
|
+
variables: {
|
|
27
|
+
input: {
|
|
28
|
+
issueId,
|
|
29
|
+
body,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
const response = await fetch('https://api.linear.app/graphql', {
|
|
34
|
+
method: 'POST',
|
|
35
|
+
headers: {
|
|
36
|
+
'Content-Type': 'application/json',
|
|
37
|
+
Authorization: `Bearer ${linearToken}`,
|
|
38
|
+
},
|
|
39
|
+
body: JSON.stringify(graphqlQuery),
|
|
40
|
+
});
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
const error = await response.json();
|
|
43
|
+
return { error: 'Failed to add Linear comment', details: error };
|
|
44
|
+
}
|
|
45
|
+
const data = await response.json();
|
|
46
|
+
if (data.errors?.length) {
|
|
47
|
+
return { error: 'Linear GraphQL error', details: data.errors };
|
|
48
|
+
}
|
|
49
|
+
return data.data.commentCreate;
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=add-comment.js.map
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const linearGetIssue = tool({
|
|
4
|
+
description: 'Get a single Linear issue by UUID or identifier (e.g. ENG-123). Returns title, description, status, assignee, priority, and URL.',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
issueId: z
|
|
7
|
+
.string()
|
|
8
|
+
.optional()
|
|
9
|
+
.describe('Linear issue UUID. Use linearSearchIssues if you only have a title or keyword.'),
|
|
10
|
+
identifier: z
|
|
11
|
+
.string()
|
|
12
|
+
.optional()
|
|
13
|
+
.describe('Human-readable issue identifier, e.g. ENG-123 (team key + number).'),
|
|
14
|
+
linearToken: z.string().optional().describe('Linear API token (injected by system)'),
|
|
15
|
+
}),
|
|
16
|
+
execute: async ({ issueId, identifier, linearToken }) => {
|
|
17
|
+
if (!issueId && !identifier) {
|
|
18
|
+
return { error: 'Provide either issueId (UUID) or identifier (e.g. ENG-123).' };
|
|
19
|
+
}
|
|
20
|
+
if (issueId) {
|
|
21
|
+
const graphqlQuery = {
|
|
22
|
+
query: `
|
|
23
|
+
query GetIssue($id: String!) {
|
|
24
|
+
issue(id: $id) {
|
|
25
|
+
id
|
|
26
|
+
identifier
|
|
27
|
+
title
|
|
28
|
+
description
|
|
29
|
+
priority
|
|
30
|
+
url
|
|
31
|
+
createdAt
|
|
32
|
+
updatedAt
|
|
33
|
+
state { id name type }
|
|
34
|
+
assignee { id name email }
|
|
35
|
+
team { id name key }
|
|
36
|
+
project { id name }
|
|
37
|
+
labels { nodes { id name color } }
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
`,
|
|
41
|
+
variables: { id: issueId },
|
|
42
|
+
};
|
|
43
|
+
const response = await fetch('https://api.linear.app/graphql', {
|
|
44
|
+
method: 'POST',
|
|
45
|
+
headers: {
|
|
46
|
+
'Content-Type': 'application/json',
|
|
47
|
+
Authorization: `Bearer ${linearToken}`,
|
|
48
|
+
},
|
|
49
|
+
body: JSON.stringify(graphqlQuery),
|
|
50
|
+
});
|
|
51
|
+
if (!response.ok) {
|
|
52
|
+
const error = await response.json();
|
|
53
|
+
return { error: 'Failed to get Linear issue', details: error };
|
|
54
|
+
}
|
|
55
|
+
const data = await response.json();
|
|
56
|
+
if (data.errors?.length) {
|
|
57
|
+
return { error: 'Linear GraphQL error', details: data.errors };
|
|
58
|
+
}
|
|
59
|
+
return data.data.issue;
|
|
60
|
+
}
|
|
61
|
+
const match = identifier.match(/^([A-Za-z]+)-(\d+)$/);
|
|
62
|
+
if (!match) {
|
|
63
|
+
return { error: 'identifier must look like TEAM-123 (team key and issue number).' };
|
|
64
|
+
}
|
|
65
|
+
const [, teamKey, numberStr] = match;
|
|
66
|
+
const number = Number(numberStr);
|
|
67
|
+
const graphqlQuery = {
|
|
68
|
+
query: `
|
|
69
|
+
query IssueByIdentifier($teamKey: String!, $number: Float!) {
|
|
70
|
+
issues(filter: {
|
|
71
|
+
team: { key: { eq: $teamKey } }
|
|
72
|
+
number: { eq: $number }
|
|
73
|
+
}, first: 1) {
|
|
74
|
+
nodes {
|
|
75
|
+
id
|
|
76
|
+
identifier
|
|
77
|
+
title
|
|
78
|
+
description
|
|
79
|
+
priority
|
|
80
|
+
url
|
|
81
|
+
createdAt
|
|
82
|
+
updatedAt
|
|
83
|
+
state { id name type }
|
|
84
|
+
assignee { id name email }
|
|
85
|
+
team { id name key }
|
|
86
|
+
project { id name }
|
|
87
|
+
labels { nodes { id name color } }
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
`,
|
|
92
|
+
variables: { teamKey, number },
|
|
93
|
+
};
|
|
94
|
+
const response = await fetch('https://api.linear.app/graphql', {
|
|
95
|
+
method: 'POST',
|
|
96
|
+
headers: {
|
|
97
|
+
'Content-Type': 'application/json',
|
|
98
|
+
Authorization: `Bearer ${linearToken}`,
|
|
99
|
+
},
|
|
100
|
+
body: JSON.stringify(graphqlQuery),
|
|
101
|
+
});
|
|
102
|
+
if (!response.ok) {
|
|
103
|
+
const error = await response.json();
|
|
104
|
+
return { error: 'Failed to get Linear issue', details: error };
|
|
105
|
+
}
|
|
106
|
+
const data = await response.json();
|
|
107
|
+
if (data.errors?.length) {
|
|
108
|
+
return { error: 'Linear GraphQL error', details: data.errors };
|
|
109
|
+
}
|
|
110
|
+
const issue = data.data.issues.nodes[0];
|
|
111
|
+
if (!issue) {
|
|
112
|
+
return { error: `No issue found for identifier ${identifier}` };
|
|
113
|
+
}
|
|
114
|
+
return issue;
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
//# sourceMappingURL=get-issue.js.map
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const linearListProjects = tool({
|
|
4
|
+
description: 'List Linear projects. Returns project IDs, names, status, and associated teams.',
|
|
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
|
+
projects(first: 50) {
|
|
13
|
+
nodes {
|
|
14
|
+
id
|
|
15
|
+
name
|
|
16
|
+
description
|
|
17
|
+
state
|
|
18
|
+
url
|
|
19
|
+
startDate
|
|
20
|
+
targetDate
|
|
21
|
+
teams { nodes { id name key } }
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
`,
|
|
26
|
+
};
|
|
27
|
+
const response = await fetch('https://api.linear.app/graphql', {
|
|
28
|
+
method: 'POST',
|
|
29
|
+
headers: {
|
|
30
|
+
'Content-Type': 'application/json',
|
|
31
|
+
Authorization: `Bearer ${linearToken}`,
|
|
32
|
+
},
|
|
33
|
+
body: JSON.stringify(graphqlQuery),
|
|
34
|
+
});
|
|
35
|
+
if (!response.ok) {
|
|
36
|
+
const error = await response.json();
|
|
37
|
+
return { error: 'Failed to list Linear projects', details: error };
|
|
38
|
+
}
|
|
39
|
+
const data = await response.json();
|
|
40
|
+
if (data.errors?.length) {
|
|
41
|
+
return { error: 'Linear GraphQL error', details: data.errors };
|
|
42
|
+
}
|
|
43
|
+
return data.data.projects.nodes;
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=list-projects.js.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare const linearListWorkflowStates: import("ai").Tool<{
|
|
2
|
+
teamId: string;
|
|
3
|
+
linearToken?: string | undefined;
|
|
4
|
+
}, {
|
|
5
|
+
error: string;
|
|
6
|
+
details: any;
|
|
7
|
+
teamId?: undefined;
|
|
8
|
+
teamName?: undefined;
|
|
9
|
+
teamKey?: undefined;
|
|
10
|
+
states?: undefined;
|
|
11
|
+
} | {
|
|
12
|
+
error: string;
|
|
13
|
+
details?: undefined;
|
|
14
|
+
teamId?: undefined;
|
|
15
|
+
teamName?: undefined;
|
|
16
|
+
teamKey?: undefined;
|
|
17
|
+
states?: undefined;
|
|
18
|
+
} | {
|
|
19
|
+
teamId: any;
|
|
20
|
+
teamName: any;
|
|
21
|
+
teamKey: any;
|
|
22
|
+
states: any;
|
|
23
|
+
error?: undefined;
|
|
24
|
+
details?: undefined;
|
|
25
|
+
}>;
|
|
26
|
+
//# sourceMappingURL=list-workflow-states.d.ts.map
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const linearListWorkflowStates = tool({
|
|
4
|
+
description: 'List workflow states (statuses) for a Linear team. Use state IDs with linearUpdateIssue to move issues (e.g. Todo → In Progress → Done).',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
teamId: z.string().describe('Team UUID. Use linearListTeams to find team IDs.'),
|
|
7
|
+
linearToken: z.string().optional().describe('Linear API token (injected by system)'),
|
|
8
|
+
}),
|
|
9
|
+
execute: async ({ teamId, linearToken }) => {
|
|
10
|
+
const graphqlQuery = {
|
|
11
|
+
query: `
|
|
12
|
+
query TeamWorkflowStates($teamId: String!) {
|
|
13
|
+
team(id: $teamId) {
|
|
14
|
+
id
|
|
15
|
+
name
|
|
16
|
+
key
|
|
17
|
+
states {
|
|
18
|
+
nodes {
|
|
19
|
+
id
|
|
20
|
+
name
|
|
21
|
+
type
|
|
22
|
+
color
|
|
23
|
+
position
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
`,
|
|
29
|
+
variables: { teamId },
|
|
30
|
+
};
|
|
31
|
+
const response = await fetch('https://api.linear.app/graphql', {
|
|
32
|
+
method: 'POST',
|
|
33
|
+
headers: {
|
|
34
|
+
'Content-Type': 'application/json',
|
|
35
|
+
Authorization: `Bearer ${linearToken}`,
|
|
36
|
+
},
|
|
37
|
+
body: JSON.stringify(graphqlQuery),
|
|
38
|
+
});
|
|
39
|
+
if (!response.ok) {
|
|
40
|
+
const error = await response.json();
|
|
41
|
+
return { error: 'Failed to list Linear workflow states', details: error };
|
|
42
|
+
}
|
|
43
|
+
const data = await response.json();
|
|
44
|
+
if (data.errors?.length) {
|
|
45
|
+
return { error: 'Linear GraphQL error', details: data.errors };
|
|
46
|
+
}
|
|
47
|
+
const team = data.data.team;
|
|
48
|
+
if (!team) {
|
|
49
|
+
return { error: `Team not found: ${teamId}` };
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
teamId: team.id,
|
|
53
|
+
teamName: team.name,
|
|
54
|
+
teamKey: team.key,
|
|
55
|
+
states: team.states.nodes,
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=list-workflow-states.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const linearUpdateIssue: import("ai").Tool<{
|
|
2
|
+
issueId: string;
|
|
3
|
+
description?: string | undefined;
|
|
4
|
+
title?: string | undefined;
|
|
5
|
+
linearToken?: string | undefined;
|
|
6
|
+
stateId?: string | undefined;
|
|
7
|
+
assigneeId?: string | null | undefined;
|
|
8
|
+
priority?: number | undefined;
|
|
9
|
+
projectId?: string | undefined;
|
|
10
|
+
}, any>;
|
|
11
|
+
//# sourceMappingURL=update-issue.d.ts.map
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const linearUpdateIssue = tool({
|
|
4
|
+
description: 'Update a Linear issue. Change title, description, status (stateId), assignee, priority, or project. Use linearListWorkflowStates to find state IDs.',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
issueId: z.string().describe('Linear issue UUID'),
|
|
7
|
+
title: z.string().optional().describe('New title'),
|
|
8
|
+
description: z.string().optional().describe('New description (markdown supported)'),
|
|
9
|
+
stateId: z.string().optional().describe('Workflow state ID (e.g. move to Done). Use linearListWorkflowStates.'),
|
|
10
|
+
assigneeId: z.string().nullable().optional().describe('User ID to assign, or null to unassign.'),
|
|
11
|
+
priority: z
|
|
12
|
+
.number()
|
|
13
|
+
.int()
|
|
14
|
+
.min(0)
|
|
15
|
+
.max(4)
|
|
16
|
+
.optional()
|
|
17
|
+
.describe('Priority: 0=none, 1=urgent, 2=high, 3=medium, 4=low'),
|
|
18
|
+
projectId: z.string().optional().describe('Project ID to associate the issue with'),
|
|
19
|
+
linearToken: z.string().optional().describe('Linear API token (injected by system)'),
|
|
20
|
+
}),
|
|
21
|
+
execute: async ({ issueId, title, description, stateId, assigneeId, priority, projectId, linearToken }) => {
|
|
22
|
+
const input = {};
|
|
23
|
+
if (title !== undefined)
|
|
24
|
+
input.title = title;
|
|
25
|
+
if (description !== undefined)
|
|
26
|
+
input.description = description;
|
|
27
|
+
if (stateId !== undefined)
|
|
28
|
+
input.stateId = stateId;
|
|
29
|
+
if (assigneeId !== undefined)
|
|
30
|
+
input.assigneeId = assigneeId;
|
|
31
|
+
if (priority !== undefined)
|
|
32
|
+
input.priority = priority;
|
|
33
|
+
if (projectId !== undefined)
|
|
34
|
+
input.projectId = projectId;
|
|
35
|
+
if (Object.keys(input).length === 0) {
|
|
36
|
+
return { error: 'Provide at least one field to update (title, description, stateId, assigneeId, priority, or projectId).' };
|
|
37
|
+
}
|
|
38
|
+
const graphqlQuery = {
|
|
39
|
+
query: `
|
|
40
|
+
mutation UpdateIssue($id: String!, $input: IssueUpdateInput!) {
|
|
41
|
+
issueUpdate(id: $id, input: $input) {
|
|
42
|
+
success
|
|
43
|
+
issue {
|
|
44
|
+
id
|
|
45
|
+
identifier
|
|
46
|
+
title
|
|
47
|
+
description
|
|
48
|
+
priority
|
|
49
|
+
url
|
|
50
|
+
state { id name }
|
|
51
|
+
assignee { id name }
|
|
52
|
+
project { id name }
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
`,
|
|
57
|
+
variables: { id: issueId, input },
|
|
58
|
+
};
|
|
59
|
+
const response = await fetch('https://api.linear.app/graphql', {
|
|
60
|
+
method: 'POST',
|
|
61
|
+
headers: {
|
|
62
|
+
'Content-Type': 'application/json',
|
|
63
|
+
Authorization: `Bearer ${linearToken}`,
|
|
64
|
+
},
|
|
65
|
+
body: JSON.stringify(graphqlQuery),
|
|
66
|
+
});
|
|
67
|
+
if (!response.ok) {
|
|
68
|
+
const error = await response.json();
|
|
69
|
+
return { error: 'Failed to update Linear issue', details: error };
|
|
70
|
+
}
|
|
71
|
+
const data = await response.json();
|
|
72
|
+
if (data.errors?.length) {
|
|
73
|
+
return { error: 'Linear GraphQL error', details: data.errors };
|
|
74
|
+
}
|
|
75
|
+
return data.data.issueUpdate;
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=update-issue.js.map
|
|
@@ -1,16 +1,109 @@
|
|
|
1
|
-
import { notionSearch } from './search';
|
|
2
|
-
import { notionListDatabases } from './list-databases';
|
|
3
|
-
import { notionQueryDatabase } from './query-database';
|
|
4
|
-
import { notionGetPage } from './get-page';
|
|
5
|
-
import { notionCreatePage } from './create-page';
|
|
6
|
-
import { notionUpdatePage } from './update-page';
|
|
7
|
-
import { notionAppendBlockChildren } from './append-block-children';
|
|
8
|
-
import { notionGetDatabase } from './get-database';
|
|
1
|
+
import { notionSearch } from './search.js';
|
|
2
|
+
import { notionListDatabases } from './list-databases.js';
|
|
3
|
+
import { notionQueryDatabase } from './query-database.js';
|
|
4
|
+
import { notionGetPage } from './get-page.js';
|
|
5
|
+
import { notionCreatePage } from './create-page.js';
|
|
6
|
+
import { notionUpdatePage } from './update-page.js';
|
|
7
|
+
import { notionAppendBlockChildren } from './append-block-children.js';
|
|
8
|
+
import { notionGetDatabase } from './get-database.js';
|
|
9
9
|
export { notionSearch, notionListDatabases, notionQueryDatabase, notionGetPage, notionCreatePage, notionUpdatePage, notionAppendBlockChildren, notionGetDatabase, };
|
|
10
|
-
export declare const notionTools: {
|
|
10
|
+
export declare const notionTools: ({
|
|
11
11
|
name: string;
|
|
12
|
-
description:
|
|
13
|
-
tool:
|
|
12
|
+
description: string;
|
|
13
|
+
tool: import("ai").Tool<{
|
|
14
|
+
query: string;
|
|
15
|
+
page_size: number;
|
|
16
|
+
sort?: {
|
|
17
|
+
direction?: "ascending" | "descending" | undefined;
|
|
18
|
+
timestamp?: "last_edited_time" | undefined;
|
|
19
|
+
} | undefined;
|
|
20
|
+
filter?: {
|
|
21
|
+
value?: "page" | "database" | undefined;
|
|
22
|
+
property?: "object" | undefined;
|
|
23
|
+
} | undefined;
|
|
24
|
+
notionToken?: string | undefined;
|
|
25
|
+
}, any>;
|
|
14
26
|
requiredAuth: "notionToken";
|
|
15
|
-
}
|
|
27
|
+
} | {
|
|
28
|
+
name: string;
|
|
29
|
+
description: string;
|
|
30
|
+
tool: import("ai").Tool<{
|
|
31
|
+
page_size: number;
|
|
32
|
+
notionToken?: string | undefined;
|
|
33
|
+
}, any>;
|
|
34
|
+
requiredAuth: "notionToken";
|
|
35
|
+
} | {
|
|
36
|
+
name: string;
|
|
37
|
+
description: string;
|
|
38
|
+
tool: import("ai").Tool<{
|
|
39
|
+
page_size: number;
|
|
40
|
+
database_id: string;
|
|
41
|
+
filter?: any;
|
|
42
|
+
notionToken?: string | undefined;
|
|
43
|
+
sorts?: any[] | undefined;
|
|
44
|
+
}, any>;
|
|
45
|
+
requiredAuth: "notionToken";
|
|
46
|
+
} | {
|
|
47
|
+
name: string;
|
|
48
|
+
description: string;
|
|
49
|
+
tool: import("ai").Tool<{
|
|
50
|
+
page_id: string;
|
|
51
|
+
notionToken?: string | undefined;
|
|
52
|
+
}, {
|
|
53
|
+
error: string;
|
|
54
|
+
details: any;
|
|
55
|
+
page?: undefined;
|
|
56
|
+
content?: undefined;
|
|
57
|
+
} | {
|
|
58
|
+
page: any;
|
|
59
|
+
content: any;
|
|
60
|
+
error?: undefined;
|
|
61
|
+
details?: undefined;
|
|
62
|
+
}>;
|
|
63
|
+
requiredAuth: "notionToken";
|
|
64
|
+
} | {
|
|
65
|
+
name: string;
|
|
66
|
+
description: string;
|
|
67
|
+
tool: import("ai").Tool<{
|
|
68
|
+
parent: {
|
|
69
|
+
database_id?: string | undefined;
|
|
70
|
+
page_id?: string | undefined;
|
|
71
|
+
};
|
|
72
|
+
notionToken?: string | undefined;
|
|
73
|
+
properties?: any;
|
|
74
|
+
children?: any[] | undefined;
|
|
75
|
+
icon?: any;
|
|
76
|
+
cover?: any;
|
|
77
|
+
}, any>;
|
|
78
|
+
requiredAuth: "notionToken";
|
|
79
|
+
} | {
|
|
80
|
+
name: string;
|
|
81
|
+
description: string;
|
|
82
|
+
tool: import("ai").Tool<{
|
|
83
|
+
page_id: string;
|
|
84
|
+
notionToken?: string | undefined;
|
|
85
|
+
properties?: any;
|
|
86
|
+
icon?: any;
|
|
87
|
+
cover?: any;
|
|
88
|
+
archived?: boolean | undefined;
|
|
89
|
+
}, any>;
|
|
90
|
+
requiredAuth: "notionToken";
|
|
91
|
+
} | {
|
|
92
|
+
name: string;
|
|
93
|
+
description: string;
|
|
94
|
+
tool: import("ai").Tool<{
|
|
95
|
+
children: any[];
|
|
96
|
+
block_id: string;
|
|
97
|
+
notionToken?: string | undefined;
|
|
98
|
+
}, any>;
|
|
99
|
+
requiredAuth: "notionToken";
|
|
100
|
+
} | {
|
|
101
|
+
name: string;
|
|
102
|
+
description: string;
|
|
103
|
+
tool: import("ai").Tool<{
|
|
104
|
+
database_id: string;
|
|
105
|
+
notionToken?: string | undefined;
|
|
106
|
+
}, any>;
|
|
107
|
+
requiredAuth: "notionToken";
|
|
108
|
+
})[];
|
|
16
109
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
|
-
import { notionSearch } from './search';
|
|
3
|
-
import { notionListDatabases } from './list-databases';
|
|
4
|
-
import { notionQueryDatabase } from './query-database';
|
|
5
|
-
import { notionGetPage } from './get-page';
|
|
6
|
-
import { notionCreatePage } from './create-page';
|
|
7
|
-
import { notionUpdatePage } from './update-page';
|
|
8
|
-
import { notionAppendBlockChildren } from './append-block-children';
|
|
9
|
-
import { notionGetDatabase } from './get-database';
|
|
2
|
+
import { notionSearch } from './search.js';
|
|
3
|
+
import { notionListDatabases } from './list-databases.js';
|
|
4
|
+
import { notionQueryDatabase } from './query-database.js';
|
|
5
|
+
import { notionGetPage } from './get-page.js';
|
|
6
|
+
import { notionCreatePage } from './create-page.js';
|
|
7
|
+
import { notionUpdatePage } from './update-page.js';
|
|
8
|
+
import { notionAppendBlockChildren } from './append-block-children.js';
|
|
9
|
+
import { notionGetDatabase } from './get-database.js';
|
|
10
10
|
export { notionSearch, notionListDatabases, notionQueryDatabase, notionGetPage, notionCreatePage, notionUpdatePage, notionAppendBlockChildren, notionGetDatabase, };
|
|
11
11
|
export const notionTools = [
|
|
12
12
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rnsk/toolkits",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "Runstack toolkit registry — manifest-driven tool definitions for AI agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -22,8 +22,9 @@
|
|
|
22
22
|
],
|
|
23
23
|
"scripts": {
|
|
24
24
|
"gen": "tsx scripts/gen-index.ts",
|
|
25
|
-
"validate": "tsx scripts/validate.ts",
|
|
26
|
-
"
|
|
25
|
+
"validate": "tsx scripts/validate.ts && tsx scripts/validate-esm.ts --source",
|
|
26
|
+
"validate:dist": "tsx scripts/validate-esm.ts --dist",
|
|
27
|
+
"build": "npm run gen && tsc && npm run validate:dist",
|
|
27
28
|
"prepublishOnly": "npm run validate && npm run build"
|
|
28
29
|
},
|
|
29
30
|
"peerDependencies": {
|