cyrus-claude-runner 0.0.23 → 0.0.25
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/ClaudeRunner.d.ts +4 -1
- package/dist/ClaudeRunner.d.ts.map +1 -1
- package/dist/ClaudeRunner.js +26 -4
- package/dist/ClaudeRunner.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/tools/cyrus-tools/index.d.ts +24 -0
- package/dist/tools/cyrus-tools/index.d.ts.map +1 -0
- package/dist/tools/cyrus-tools/index.js +527 -0
- package/dist/tools/cyrus-tools/index.js.map +1 -0
- package/dist/types.d.ts +3 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +34 -30
- package/LICENSE +0 -674
|
@@ -0,0 +1,527 @@
|
|
|
1
|
+
import { basename, extname } from "node:path";
|
|
2
|
+
import { createSdkMcpServer, tool } from "@anthropic-ai/claude-agent-sdk";
|
|
3
|
+
import { LinearClient } from "@linear/sdk";
|
|
4
|
+
import fs from "fs-extra";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
/**
|
|
7
|
+
* Detect MIME type based on file extension
|
|
8
|
+
*/
|
|
9
|
+
function getMimeType(filename) {
|
|
10
|
+
const ext = extname(filename).toLowerCase();
|
|
11
|
+
const mimeTypes = {
|
|
12
|
+
// Images
|
|
13
|
+
".png": "image/png",
|
|
14
|
+
".jpg": "image/jpeg",
|
|
15
|
+
".jpeg": "image/jpeg",
|
|
16
|
+
".gif": "image/gif",
|
|
17
|
+
".svg": "image/svg+xml",
|
|
18
|
+
".webp": "image/webp",
|
|
19
|
+
".bmp": "image/bmp",
|
|
20
|
+
".ico": "image/x-icon",
|
|
21
|
+
// Documents
|
|
22
|
+
".pdf": "application/pdf",
|
|
23
|
+
".doc": "application/msword",
|
|
24
|
+
".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
25
|
+
".xls": "application/vnd.ms-excel",
|
|
26
|
+
".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
27
|
+
".ppt": "application/vnd.ms-powerpoint",
|
|
28
|
+
".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
|
29
|
+
// Text
|
|
30
|
+
".txt": "text/plain",
|
|
31
|
+
".md": "text/markdown",
|
|
32
|
+
".csv": "text/csv",
|
|
33
|
+
".json": "application/json",
|
|
34
|
+
".xml": "application/xml",
|
|
35
|
+
".html": "text/html",
|
|
36
|
+
".css": "text/css",
|
|
37
|
+
".js": "application/javascript",
|
|
38
|
+
".ts": "application/typescript",
|
|
39
|
+
// Archives
|
|
40
|
+
".zip": "application/zip",
|
|
41
|
+
".tar": "application/x-tar",
|
|
42
|
+
".gz": "application/gzip",
|
|
43
|
+
".rar": "application/vnd.rar",
|
|
44
|
+
".7z": "application/x-7z-compressed",
|
|
45
|
+
// Media
|
|
46
|
+
".mp3": "audio/mpeg",
|
|
47
|
+
".wav": "audio/wav",
|
|
48
|
+
".mp4": "video/mp4",
|
|
49
|
+
".mov": "video/quicktime",
|
|
50
|
+
".avi": "video/x-msvideo",
|
|
51
|
+
".webm": "video/webm",
|
|
52
|
+
// Other
|
|
53
|
+
".log": "text/plain",
|
|
54
|
+
".yml": "text/yaml",
|
|
55
|
+
".yaml": "text/yaml",
|
|
56
|
+
};
|
|
57
|
+
return mimeTypes[ext] || "application/octet-stream";
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create an SDK MCP server with the inline Cyrus tools
|
|
61
|
+
*/
|
|
62
|
+
export function createCyrusToolsServer(linearApiToken, options = {}) {
|
|
63
|
+
const linearClient = new LinearClient({ apiKey: linearApiToken });
|
|
64
|
+
// Create tools with bound linear client
|
|
65
|
+
const uploadTool = tool("linear_upload_file", "Upload a file to Linear. Returns an asset URL that can be used in issue descriptions or comments.", {
|
|
66
|
+
filePath: z.string().describe("The absolute path to the file to upload"),
|
|
67
|
+
filename: z
|
|
68
|
+
.string()
|
|
69
|
+
.optional()
|
|
70
|
+
.describe("The filename to use in Linear (optional, defaults to basename of filePath)"),
|
|
71
|
+
contentType: z
|
|
72
|
+
.string()
|
|
73
|
+
.optional()
|
|
74
|
+
.describe("MIME type of the file (optional, auto-detected if not provided)"),
|
|
75
|
+
makePublic: z
|
|
76
|
+
.boolean()
|
|
77
|
+
.optional()
|
|
78
|
+
.describe("Whether to make the file publicly accessible (default: false)"),
|
|
79
|
+
}, async ({ filePath, filename, contentType, makePublic }) => {
|
|
80
|
+
try {
|
|
81
|
+
// Read file and get stats
|
|
82
|
+
const stats = await fs.stat(filePath);
|
|
83
|
+
if (!stats.isFile()) {
|
|
84
|
+
return {
|
|
85
|
+
content: [
|
|
86
|
+
{
|
|
87
|
+
type: "text",
|
|
88
|
+
text: JSON.stringify({
|
|
89
|
+
success: false,
|
|
90
|
+
error: `Path ${filePath} is not a file`,
|
|
91
|
+
}),
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
const fileBuffer = await fs.readFile(filePath);
|
|
97
|
+
const finalFilename = filename || basename(filePath);
|
|
98
|
+
const finalContentType = contentType || getMimeType(finalFilename);
|
|
99
|
+
const size = stats.size;
|
|
100
|
+
// Step 1: Request upload URL from Linear
|
|
101
|
+
console.log(`Requesting upload URL for ${finalFilename} (${size} bytes, ${finalContentType})`);
|
|
102
|
+
// Use LinearClient's fileUpload method directly
|
|
103
|
+
const uploadPayload = await linearClient.fileUpload(finalContentType, finalFilename, size, { makePublic });
|
|
104
|
+
if (!uploadPayload.success || !uploadPayload.uploadFile) {
|
|
105
|
+
return {
|
|
106
|
+
content: [
|
|
107
|
+
{
|
|
108
|
+
type: "text",
|
|
109
|
+
text: JSON.stringify({
|
|
110
|
+
success: false,
|
|
111
|
+
error: "Failed to get upload URL from Linear",
|
|
112
|
+
}),
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
const { uploadUrl, headers, assetUrl } = uploadPayload.uploadFile;
|
|
118
|
+
// Step 2: Upload the file to the provided URL
|
|
119
|
+
console.log(`Uploading file to Linear cloud storage...`);
|
|
120
|
+
// Create headers following Linear's documentation exactly
|
|
121
|
+
const uploadHeaders = {
|
|
122
|
+
"Content-Type": finalContentType,
|
|
123
|
+
"Cache-Control": "public, max-age=31536000",
|
|
124
|
+
};
|
|
125
|
+
// Then add the headers from Linear's response
|
|
126
|
+
// These override any defaults we set above
|
|
127
|
+
for (const header of headers) {
|
|
128
|
+
uploadHeaders[header.key] = header.value;
|
|
129
|
+
}
|
|
130
|
+
console.log(`Headers being sent:`, uploadHeaders);
|
|
131
|
+
const uploadResponse = await fetch(uploadUrl, {
|
|
132
|
+
method: "PUT",
|
|
133
|
+
headers: uploadHeaders,
|
|
134
|
+
body: fileBuffer,
|
|
135
|
+
});
|
|
136
|
+
if (!uploadResponse.ok) {
|
|
137
|
+
const errorText = await uploadResponse.text();
|
|
138
|
+
return {
|
|
139
|
+
content: [
|
|
140
|
+
{
|
|
141
|
+
type: "text",
|
|
142
|
+
text: JSON.stringify({
|
|
143
|
+
success: false,
|
|
144
|
+
error: `Failed to upload file: ${uploadResponse.status} ${uploadResponse.statusText} - ${errorText}`,
|
|
145
|
+
}),
|
|
146
|
+
},
|
|
147
|
+
],
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
console.log(`File uploaded successfully: ${assetUrl}`);
|
|
151
|
+
// Return the asset URL and metadata
|
|
152
|
+
return {
|
|
153
|
+
content: [
|
|
154
|
+
{
|
|
155
|
+
type: "text",
|
|
156
|
+
text: JSON.stringify({
|
|
157
|
+
success: true,
|
|
158
|
+
assetUrl,
|
|
159
|
+
filename: finalFilename,
|
|
160
|
+
size,
|
|
161
|
+
contentType: finalContentType,
|
|
162
|
+
}),
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
return {
|
|
169
|
+
content: [
|
|
170
|
+
{
|
|
171
|
+
type: "text",
|
|
172
|
+
text: JSON.stringify({
|
|
173
|
+
success: false,
|
|
174
|
+
error: error instanceof Error ? error.message : String(error),
|
|
175
|
+
}),
|
|
176
|
+
},
|
|
177
|
+
],
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
const agentSessionTool = tool("linear_agent_session_create", "Create an agent session on a Linear issue to track AI/bot activity.", {
|
|
182
|
+
issueId: z
|
|
183
|
+
.string()
|
|
184
|
+
.describe('The ID or identifier of the Linear issue (e.g., "ABC-123" or UUID)'),
|
|
185
|
+
externalLink: z
|
|
186
|
+
.string()
|
|
187
|
+
.optional()
|
|
188
|
+
.describe("Optional URL of an external agent-hosted page associated with this session"),
|
|
189
|
+
}, async ({ issueId, externalLink }) => {
|
|
190
|
+
try {
|
|
191
|
+
// Use raw GraphQL through the Linear client
|
|
192
|
+
// Access the underlying GraphQL client
|
|
193
|
+
const graphQLClient = linearClient.client;
|
|
194
|
+
const mutation = `
|
|
195
|
+
mutation AgentSessionCreateOnIssue($input: AgentSessionCreateOnIssue!) {
|
|
196
|
+
agentSessionCreateOnIssue(input: $input) {
|
|
197
|
+
success
|
|
198
|
+
lastSyncId
|
|
199
|
+
agentSession {
|
|
200
|
+
id
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
`;
|
|
205
|
+
const variables = {
|
|
206
|
+
input: {
|
|
207
|
+
issueId,
|
|
208
|
+
...(externalLink && { externalLink }),
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
console.log(`Creating agent session for issue ${issueId}`);
|
|
212
|
+
const response = await graphQLClient.rawRequest(mutation, variables);
|
|
213
|
+
const result = response.data.agentSessionCreateOnIssue;
|
|
214
|
+
if (!result.success) {
|
|
215
|
+
return {
|
|
216
|
+
content: [
|
|
217
|
+
{
|
|
218
|
+
type: "text",
|
|
219
|
+
text: JSON.stringify({
|
|
220
|
+
success: false,
|
|
221
|
+
error: "Failed to create agent session",
|
|
222
|
+
}),
|
|
223
|
+
},
|
|
224
|
+
],
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
const agentSessionId = result.agentSession.id;
|
|
228
|
+
console.log(`Agent session created successfully: ${agentSessionId}`);
|
|
229
|
+
// Register the child-to-parent mapping if we have a parent session
|
|
230
|
+
if (options.parentSessionId && options.onSessionCreated) {
|
|
231
|
+
console.log(`[CyrusTools] Mapping child session ${agentSessionId} to parent ${options.parentSessionId}`);
|
|
232
|
+
options.onSessionCreated(agentSessionId, options.parentSessionId);
|
|
233
|
+
}
|
|
234
|
+
return {
|
|
235
|
+
content: [
|
|
236
|
+
{
|
|
237
|
+
type: "text",
|
|
238
|
+
text: JSON.stringify({
|
|
239
|
+
success: result.success,
|
|
240
|
+
agentSessionId,
|
|
241
|
+
lastSyncId: result.lastSyncId,
|
|
242
|
+
}),
|
|
243
|
+
},
|
|
244
|
+
],
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
return {
|
|
249
|
+
content: [
|
|
250
|
+
{
|
|
251
|
+
type: "text",
|
|
252
|
+
text: JSON.stringify({
|
|
253
|
+
success: false,
|
|
254
|
+
error: error instanceof Error ? error.message : String(error),
|
|
255
|
+
}),
|
|
256
|
+
},
|
|
257
|
+
],
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
const agentSessionOnCommentTool = tool("linear_agent_session_create_on_comment", "Create an agent session on a Linear root comment (not a reply) to trigger a sub-agent for processing child issues or tasks. See Linear API docs: https://studio.apollographql.com/public/Linear-API/variant/current/schema/reference/inputs/AgentSessionCreateOnComment", {
|
|
262
|
+
commentId: z
|
|
263
|
+
.string()
|
|
264
|
+
.describe("The ID of the Linear root comment (not a reply) to create the session on"),
|
|
265
|
+
externalLink: z
|
|
266
|
+
.string()
|
|
267
|
+
.optional()
|
|
268
|
+
.describe("Optional URL of an external agent-hosted page associated with this session"),
|
|
269
|
+
}, async ({ commentId, externalLink }) => {
|
|
270
|
+
try {
|
|
271
|
+
// Use raw GraphQL through the Linear client
|
|
272
|
+
// Access the underlying GraphQL client
|
|
273
|
+
const graphQLClient = linearClient.client;
|
|
274
|
+
const mutation = `
|
|
275
|
+
mutation AgentSessionCreateOnComment($input: AgentSessionCreateOnComment!) {
|
|
276
|
+
agentSessionCreateOnComment(input: $input) {
|
|
277
|
+
success
|
|
278
|
+
lastSyncId
|
|
279
|
+
agentSession {
|
|
280
|
+
id
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
`;
|
|
285
|
+
const variables = {
|
|
286
|
+
input: {
|
|
287
|
+
commentId,
|
|
288
|
+
...(externalLink && { externalLink }),
|
|
289
|
+
},
|
|
290
|
+
};
|
|
291
|
+
console.log(`Creating agent session for comment ${commentId}`);
|
|
292
|
+
const response = await graphQLClient.rawRequest(mutation, variables);
|
|
293
|
+
const result = response.data.agentSessionCreateOnComment;
|
|
294
|
+
if (!result.success) {
|
|
295
|
+
return {
|
|
296
|
+
content: [
|
|
297
|
+
{
|
|
298
|
+
type: "text",
|
|
299
|
+
text: JSON.stringify({
|
|
300
|
+
success: false,
|
|
301
|
+
error: "Failed to create agent session on comment",
|
|
302
|
+
}),
|
|
303
|
+
},
|
|
304
|
+
],
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
const agentSessionId = result.agentSession.id;
|
|
308
|
+
console.log(`Agent session created successfully on comment: ${agentSessionId}`);
|
|
309
|
+
// Register the child-to-parent mapping if we have a parent session
|
|
310
|
+
if (options.parentSessionId && options.onSessionCreated) {
|
|
311
|
+
console.log(`[CyrusTools] Mapping child session ${agentSessionId} to parent ${options.parentSessionId}`);
|
|
312
|
+
options.onSessionCreated(agentSessionId, options.parentSessionId);
|
|
313
|
+
}
|
|
314
|
+
return {
|
|
315
|
+
content: [
|
|
316
|
+
{
|
|
317
|
+
type: "text",
|
|
318
|
+
text: JSON.stringify({
|
|
319
|
+
success: result.success,
|
|
320
|
+
agentSessionId,
|
|
321
|
+
lastSyncId: result.lastSyncId,
|
|
322
|
+
}),
|
|
323
|
+
},
|
|
324
|
+
],
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
catch (error) {
|
|
328
|
+
return {
|
|
329
|
+
content: [
|
|
330
|
+
{
|
|
331
|
+
type: "text",
|
|
332
|
+
text: JSON.stringify({
|
|
333
|
+
success: false,
|
|
334
|
+
error: error instanceof Error ? error.message : String(error),
|
|
335
|
+
}),
|
|
336
|
+
},
|
|
337
|
+
],
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
const giveFeedbackTool = tool("linear_agent_give_feedback", "Provide feedback to a child agent session to continue its processing.", {
|
|
342
|
+
agentSessionId: z
|
|
343
|
+
.string()
|
|
344
|
+
.describe("The ID of the child agent session to provide feedback to"),
|
|
345
|
+
message: z
|
|
346
|
+
.string()
|
|
347
|
+
.describe("The feedback message to send to the child agent session"),
|
|
348
|
+
}, async ({ agentSessionId, message }) => {
|
|
349
|
+
// Validate parameters
|
|
350
|
+
if (!agentSessionId) {
|
|
351
|
+
return {
|
|
352
|
+
content: [
|
|
353
|
+
{
|
|
354
|
+
type: "text",
|
|
355
|
+
text: JSON.stringify({
|
|
356
|
+
success: false,
|
|
357
|
+
error: "agentSessionId is required",
|
|
358
|
+
}),
|
|
359
|
+
},
|
|
360
|
+
],
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
if (!message) {
|
|
364
|
+
return {
|
|
365
|
+
content: [
|
|
366
|
+
{
|
|
367
|
+
type: "text",
|
|
368
|
+
text: JSON.stringify({
|
|
369
|
+
success: false,
|
|
370
|
+
error: "message is required",
|
|
371
|
+
}),
|
|
372
|
+
},
|
|
373
|
+
],
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
// Deliver the feedback through the callback if provided
|
|
377
|
+
let delivered = false;
|
|
378
|
+
if (options.onFeedbackDelivery) {
|
|
379
|
+
console.log(`[CyrusTools] Delivering feedback to child session ${agentSessionId}`);
|
|
380
|
+
try {
|
|
381
|
+
delivered = await options.onFeedbackDelivery(agentSessionId, message);
|
|
382
|
+
if (delivered) {
|
|
383
|
+
console.log(`[CyrusTools] Feedback delivered successfully to parent session`);
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
console.log(`[CyrusTools] No parent session found for child ${agentSessionId}`);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
catch (error) {
|
|
390
|
+
console.error(`[CyrusTools] Failed to deliver feedback:`, error);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
// Return success even if delivery wasn't possible
|
|
394
|
+
// (the child session might not have a parent)
|
|
395
|
+
return {
|
|
396
|
+
content: [
|
|
397
|
+
{
|
|
398
|
+
type: "text",
|
|
399
|
+
text: JSON.stringify({
|
|
400
|
+
success: true,
|
|
401
|
+
delivered,
|
|
402
|
+
}),
|
|
403
|
+
},
|
|
404
|
+
],
|
|
405
|
+
};
|
|
406
|
+
});
|
|
407
|
+
const getChildIssuesTool = tool("linear_get_child_issues", "Get all child issues (sub-issues) for a given Linear issue. Takes an issue identifier like 'CYHOST-91' and returns a list of child issue ids and their titles.", {
|
|
408
|
+
issueId: z
|
|
409
|
+
.string()
|
|
410
|
+
.describe("The ID or identifier of the parent issue (e.g., 'CYHOST-91' or UUID)"),
|
|
411
|
+
limit: z
|
|
412
|
+
.number()
|
|
413
|
+
.optional()
|
|
414
|
+
.describe("Maximum number of child issues to return (default: 50, max: 250)"),
|
|
415
|
+
includeCompleted: z
|
|
416
|
+
.boolean()
|
|
417
|
+
.optional()
|
|
418
|
+
.describe("Whether to include completed child issues (default: true)"),
|
|
419
|
+
includeArchived: z
|
|
420
|
+
.boolean()
|
|
421
|
+
.optional()
|
|
422
|
+
.describe("Whether to include archived child issues (default: false)"),
|
|
423
|
+
}, async ({ issueId, limit = 50, includeCompleted = true, includeArchived = false, }) => {
|
|
424
|
+
try {
|
|
425
|
+
// Validate and clamp limit
|
|
426
|
+
const finalLimit = Math.min(Math.max(1, limit), 250);
|
|
427
|
+
console.log(`Getting child issues for ${issueId} (limit: ${finalLimit})`);
|
|
428
|
+
// Fetch the parent issue first
|
|
429
|
+
const issue = await linearClient.issue(issueId);
|
|
430
|
+
if (!issue) {
|
|
431
|
+
return {
|
|
432
|
+
content: [
|
|
433
|
+
{
|
|
434
|
+
type: "text",
|
|
435
|
+
text: JSON.stringify({
|
|
436
|
+
success: false,
|
|
437
|
+
error: `Issue ${issueId} not found`,
|
|
438
|
+
}),
|
|
439
|
+
},
|
|
440
|
+
],
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
// Build the filter for child issues
|
|
444
|
+
const filter = {};
|
|
445
|
+
if (!includeCompleted) {
|
|
446
|
+
filter.state = { type: { neq: "completed" } };
|
|
447
|
+
}
|
|
448
|
+
if (!includeArchived) {
|
|
449
|
+
filter.archivedAt = { null: true };
|
|
450
|
+
}
|
|
451
|
+
// Get child issues using the children() method
|
|
452
|
+
const childrenConnection = await issue.children({
|
|
453
|
+
first: finalLimit,
|
|
454
|
+
...(Object.keys(filter).length > 0 && { filter }),
|
|
455
|
+
});
|
|
456
|
+
// Extract the child issues from the connection
|
|
457
|
+
const children = await childrenConnection.nodes;
|
|
458
|
+
// Process each child to get detailed information
|
|
459
|
+
const childrenData = await Promise.all(children.map(async (child) => {
|
|
460
|
+
const [state, assignee] = await Promise.all([
|
|
461
|
+
child.state,
|
|
462
|
+
child.assignee,
|
|
463
|
+
]);
|
|
464
|
+
return {
|
|
465
|
+
id: child.id,
|
|
466
|
+
identifier: child.identifier,
|
|
467
|
+
title: child.title,
|
|
468
|
+
state: state?.name || "Unknown",
|
|
469
|
+
stateType: state?.type || null,
|
|
470
|
+
assignee: assignee?.name || null,
|
|
471
|
+
assigneeId: assignee?.id || null,
|
|
472
|
+
priority: child.priority,
|
|
473
|
+
priorityLabel: child.priorityLabel,
|
|
474
|
+
createdAt: child.createdAt.toISOString(),
|
|
475
|
+
updatedAt: child.updatedAt.toISOString(),
|
|
476
|
+
url: child.url,
|
|
477
|
+
archivedAt: child.archivedAt?.toISOString() || null,
|
|
478
|
+
};
|
|
479
|
+
}));
|
|
480
|
+
console.log(`Found ${childrenData.length} child issues for ${issueId}`);
|
|
481
|
+
return {
|
|
482
|
+
content: [
|
|
483
|
+
{
|
|
484
|
+
type: "text",
|
|
485
|
+
text: JSON.stringify({
|
|
486
|
+
success: true,
|
|
487
|
+
parentIssue: {
|
|
488
|
+
id: issue.id,
|
|
489
|
+
identifier: issue.identifier,
|
|
490
|
+
title: issue.title,
|
|
491
|
+
url: issue.url,
|
|
492
|
+
},
|
|
493
|
+
childCount: childrenData.length,
|
|
494
|
+
children: childrenData,
|
|
495
|
+
}, null, 2),
|
|
496
|
+
},
|
|
497
|
+
],
|
|
498
|
+
};
|
|
499
|
+
}
|
|
500
|
+
catch (error) {
|
|
501
|
+
console.error(`Error getting child issues for ${issueId}:`, error);
|
|
502
|
+
return {
|
|
503
|
+
content: [
|
|
504
|
+
{
|
|
505
|
+
type: "text",
|
|
506
|
+
text: JSON.stringify({
|
|
507
|
+
success: false,
|
|
508
|
+
error: error instanceof Error ? error.message : String(error),
|
|
509
|
+
}),
|
|
510
|
+
},
|
|
511
|
+
],
|
|
512
|
+
};
|
|
513
|
+
}
|
|
514
|
+
});
|
|
515
|
+
return createSdkMcpServer({
|
|
516
|
+
name: "cyrus-tools",
|
|
517
|
+
version: "1.0.0",
|
|
518
|
+
tools: [
|
|
519
|
+
uploadTool,
|
|
520
|
+
agentSessionTool,
|
|
521
|
+
agentSessionOnCommentTool,
|
|
522
|
+
giveFeedbackTool,
|
|
523
|
+
getChildIssuesTool,
|
|
524
|
+
],
|
|
525
|
+
});
|
|
526
|
+
}
|
|
527
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/cyrus-tools/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type { HookCallbackMatcher, HookEvent, McpServerConfig, SDKAssistantMessage, SDKMessage, SDKResultMessage, SDKSystemMessage, SDKUserMessage } from "@anthropic-ai/claude-
|
|
1
|
+
import type { HookCallbackMatcher, HookEvent, McpServerConfig, SDKAssistantMessage, SDKMessage, SDKResultMessage, SDKSystemMessage, SDKUserMessage } from "@anthropic-ai/claude-agent-sdk";
|
|
2
2
|
export interface ClaudeRunnerConfig {
|
|
3
3
|
workingDirectory?: string;
|
|
4
4
|
allowedTools?: string[];
|
|
5
|
+
disallowedTools?: string[];
|
|
5
6
|
allowedDirectories?: string[];
|
|
6
7
|
resumeSessionId?: string;
|
|
7
8
|
workspaceName?: string;
|
|
@@ -35,7 +36,7 @@ export interface ClaudeRunnerEvents {
|
|
|
35
36
|
error: (error: Error) => void | Promise<void>;
|
|
36
37
|
complete: (messages: SDKMessage[]) => void | Promise<void>;
|
|
37
38
|
}
|
|
38
|
-
export type { McpServerConfig, SDKAssistantMessage, SDKMessage, SDKResultMessage, SDKSystemMessage, SDKUserMessage, } from "@anthropic-ai/claude-
|
|
39
|
+
export type { McpServerConfig, SDKAssistantMessage, SDKMessage, SDKResultMessage, SDKSystemMessage, SDKUserMessage, } from "@anthropic-ai/claude-agent-sdk";
|
|
39
40
|
export type { Message as APIAssistantMessage, MessageParam as APIUserMessage, } from "@anthropic-ai/sdk/resources/messages.js";
|
|
40
41
|
export type ClaudeSystemMessage = SDKSystemMessage;
|
|
41
42
|
export type ClaudeUserMessage = SDKUserMessage;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,MAAM,gCAAgC,CAAC;AAExC,MAAM,WAAW,kBAAkB;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE;QAEhB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;IAC1D,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,iBAAiB;IACjC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;IACvC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IACnD,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D;AAGD,YAAY,EACX,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,GACd,MAAM,gCAAgC,CAAC;AAExC,YAAY,EACX,OAAO,IAAI,mBAAmB,EAC9B,YAAY,IAAI,cAAc,GAC9B,MAAM,yCAAyC,CAAC;AAEjD,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AACnD,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAC/C,MAAM,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AACzD,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,31 +1,35 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
2
|
+
"name": "cyrus-claude-runner",
|
|
3
|
+
"version": "0.0.25",
|
|
4
|
+
"description": "Claude process spawning and management for Cyrus",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"dev": "tsc --watch",
|
|
14
|
+
"test": "vitest",
|
|
15
|
+
"test:run": "vitest run",
|
|
16
|
+
"typecheck": "tsc --noEmit"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@anthropic-ai/claude-agent-sdk": "^0.1.0",
|
|
20
|
+
"@anthropic-ai/sdk": "^0.64.0",
|
|
21
|
+
"@linear/sdk": "^58.1.0",
|
|
22
|
+
"fs-extra": "^11.3.0",
|
|
23
|
+
"zod": "^3.23.0"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@types/fs-extra": "^11.0.4",
|
|
27
|
+
"@types/node": "^20.0.0",
|
|
28
|
+
"dotenv": "^16.5.0",
|
|
29
|
+
"typescript": "^5.3.3",
|
|
30
|
+
"vitest": "^1.1.0"
|
|
31
|
+
},
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public"
|
|
34
|
+
}
|
|
35
|
+
}
|