@rallycry/conveyor-mcp 5.0.15 → 5.0.17
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/{chunk-CRHA7PSA.js → chunk-6JLKJUYV.js} +15 -6
- package/dist/chunk-IRVUONC3.js +2559 -0
- package/dist/cli.js +1605 -3831
- package/dist/{connection-eGuRasFp.d.ts → connection-Ctg-QM1s.d.ts} +13 -5
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/site-assets-cli.d.ts +1 -0
- package/dist/site-assets-cli.js +100 -0
- package/dist/tunnel-cli.js +1 -1
- package/dist/tunnel.d.ts +1 -1
- package/dist/wait-cli.js +1 -1
- package/dist/wait-runner.d.ts +1 -1
- package/dist/wait.d.ts +1 -1
- package/package.json +3 -2
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { io, Socket } from 'socket.io-client';
|
|
2
|
-
import { ListProjectTagsDetail, ListedProjectTag, ListDriveFilesResponse, ReadDriveFileResponse, DriveFileDTO, DeleteDriveFileResponse, ProjectIntegrationsSummary, GaAnalyticsSummaryDTO, ProjectChannelDTO, ReadChannelMessagesResponse, PostChannelMessageResponse, CreateProjectDecisionRequest, CreateProjectDecisionResponse, EvaluateQuestionsRequest, EvaluateQuestionsResponse, ListProjectDecisionsRequest, ProjectDecisionRow, ProjectDecisionDetail, VoteProjectDecisionRequest, ResolveProjectDecisionRequest, UpdateProjectDecisionRequest, ListMeetingsResponse, MeetingForAgent, ReadMeetingTranscriptResponse, MeetingChecklistItemForAgent, DeletedTaskFile, ShowcasedTaskFile, UpdateIncidentInput, SetManualTestsResult } from '@project/shared';
|
|
2
|
+
import { ListProjectTagsDetail, ListedProjectTag, ListDriveFilesResponse, ReadDriveFileResponse, DriveFileDTO, DeleteDriveFileResponse, ProjectIntegrationsSummary, SiteAssetTargetDTO, SiteAssetUploadCapability, GaAnalyticsSummaryDTO, ProjectChannelDTO, ReadChannelMessagesResponse, PostChannelMessageResponse, CreateProjectDecisionRequest, CreateProjectDecisionResponse, EvaluateQuestionsRequest, EvaluateQuestionsResponse, ListProjectDecisionsRequest, ProjectDecisionRow, ProjectDecisionDetail, VoteProjectDecisionRequest, ResolveProjectDecisionRequest, UpdateProjectDecisionRequest, ListMeetingsResponse, MeetingForAgent, ReadMeetingTranscriptResponse, MeetingChecklistItemForAgent, DeletedTaskFile, ShowcasedTaskFile, UpdateIncidentInput, SetManualTestsResult } from '@project/shared';
|
|
3
3
|
|
|
4
4
|
interface ConveyorMcpConfig {
|
|
5
5
|
apiUrl: string;
|
|
6
6
|
projectToken: string;
|
|
7
|
+
/** Task-scoped identity for the site-assets CLI running inside a card. */
|
|
8
|
+
taskToken?: string;
|
|
7
9
|
projectId?: string;
|
|
8
10
|
/**
|
|
9
11
|
* Optional default board (sub-project) scope. When set, unqualified
|
|
@@ -162,9 +164,6 @@ interface WorkspaceAttachInfo {
|
|
|
162
164
|
taskId: string;
|
|
163
165
|
sessionId: string;
|
|
164
166
|
workspaceRoot: string;
|
|
165
|
-
/** "codespace" means preview-only — GitHub owns the VM's forwarded ports, so
|
|
166
|
-
* `tunnelUrl`/`attachToken`/`ssh` are null/absent. Older servers omit it. */
|
|
167
|
-
backend?: "gke" | "codespace";
|
|
168
167
|
tunnelUrl: string | null;
|
|
169
168
|
attachToken: string | null;
|
|
170
169
|
expiresAt: string;
|
|
@@ -531,7 +530,8 @@ declare class ConveyorConnection {
|
|
|
531
530
|
}>;
|
|
532
531
|
sleepTask(taskId: string, projectId?: string): Promise<{
|
|
533
532
|
taskId: string;
|
|
534
|
-
codespaceStatus
|
|
533
|
+
codespaceStatus?: string;
|
|
534
|
+
workspaceStatus?: string;
|
|
535
535
|
}>;
|
|
536
536
|
resumeTask(taskId: string, projectId?: string): Promise<{
|
|
537
537
|
status: string;
|
|
@@ -676,6 +676,14 @@ declare class ConveyorConnection {
|
|
|
676
676
|
* Credential-free — configuration booleans only.
|
|
677
677
|
*/
|
|
678
678
|
listProjectIntegrations(projectId?: string): Promise<ProjectIntegrationsSummary>;
|
|
679
|
+
listSiteAssetTargets(projectId?: string): Promise<SiteAssetTargetDTO[]>;
|
|
680
|
+
requestSiteAssetUpload(params: {
|
|
681
|
+
projectId?: string;
|
|
682
|
+
siteId: string;
|
|
683
|
+
sha256: string;
|
|
684
|
+
ext: string;
|
|
685
|
+
sizeBytes: number;
|
|
686
|
+
}): Promise<SiteAssetUploadCapability>;
|
|
679
687
|
/** GA4 traffic summary; an unconfigured project answers configured:false. */
|
|
680
688
|
getProjectAnalyticsSummary(params: {
|
|
681
689
|
projectId?: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as ActivePtySession, d as ConveyorConnection, e as ConveyorMcpConfig, P as PtyAttachSnapshot, c as PtyDataChunk } from './connection-
|
|
1
|
+
export { A as ActivePtySession, d as ConveyorConnection, e as ConveyorMcpConfig, P as PtyAttachSnapshot, c as PtyDataChunk } from './connection-Ctg-QM1s.js';
|
|
2
2
|
export { AttachTunnelOptions, ResolvedPtySession, RunTunnelOptions, TunnelConnection, TunnelHandle, TunnelSession, TunnelTty, WaitForPtySessionOptions, attachTunnel, runTunnel, waitForPtySession } from './tunnel.js';
|
|
3
3
|
import 'socket.io-client';
|
|
4
4
|
import '@project/shared';
|
package/dist/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
transferSiteAsset
|
|
4
|
+
} from "./chunk-IRVUONC3.js";
|
|
5
|
+
import {
|
|
6
|
+
ConveyorConnection
|
|
7
|
+
} from "./chunk-6JLKJUYV.js";
|
|
8
|
+
|
|
9
|
+
// src/site-assets-cli.ts
|
|
10
|
+
import crypto from "crypto";
|
|
11
|
+
import { readFile, stat } from "fs/promises";
|
|
12
|
+
import { extname, resolve } from "path";
|
|
13
|
+
var HELP = `Usage: conveyor-site-assets upload --site <siteId> [--project <projectId>] -- <files...>
|
|
14
|
+
|
|
15
|
+
Uploads static assets through Conveyor and emits one JSON result per input file.
|
|
16
|
+
Environment: CONVEYOR_API_URL, CONVEYOR_USER_TOKEN (or CONVEYOR_PROJECT_TOKEN), CONVEYOR_PROJECT_ID. Cards may use their existing CONVEYOR_TASK_TOKEN.`;
|
|
17
|
+
function parseArgs(argv2) {
|
|
18
|
+
const result = {
|
|
19
|
+
files: [],
|
|
20
|
+
help: false
|
|
21
|
+
};
|
|
22
|
+
for (let index = 0; index < argv2.length; index++) {
|
|
23
|
+
const arg = argv2[index];
|
|
24
|
+
if (arg === "--") {
|
|
25
|
+
result.files.push(...argv2.slice(index + 1));
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
if (arg === "--help" || arg === "-h") result.help = true;
|
|
29
|
+
else if (arg === "--site") result.siteId = argv2[++index];
|
|
30
|
+
else if (arg === "--project") result.projectId = argv2[++index];
|
|
31
|
+
else if (arg.startsWith("--site=")) result.siteId = arg.slice(7);
|
|
32
|
+
else if (arg.startsWith("--project=")) result.projectId = arg.slice(10);
|
|
33
|
+
else throw new Error(`Unknown option: ${arg}; put file paths after --`);
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
var argv = process.argv.slice(2);
|
|
38
|
+
if (argv[0] === "upload") argv.shift();
|
|
39
|
+
var args = parseArgs(argv);
|
|
40
|
+
if (args.help) {
|
|
41
|
+
process.stdout.write(`${HELP}
|
|
42
|
+
`);
|
|
43
|
+
process.exit(0);
|
|
44
|
+
}
|
|
45
|
+
var apiUrl = process.env.CONVEYOR_API_URL;
|
|
46
|
+
var taskToken = process.env.CONVEYOR_TASK_TOKEN;
|
|
47
|
+
var projectToken = process.env.CONVEYOR_USER_TOKEN ?? process.env.CONVEYOR_PROJECT_TOKEN;
|
|
48
|
+
if (!apiUrl || !projectToken && !taskToken || !args.siteId || args.files.length === 0) {
|
|
49
|
+
process.stderr.write(`Error: --site and one or more files are required. ${HELP}
|
|
50
|
+
`);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
if (args.files.length > 50) {
|
|
54
|
+
process.stderr.write("Error: at most 50 files may be uploaded in one invocation.\n");
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
var conn = new ConveyorConnection({
|
|
58
|
+
apiUrl,
|
|
59
|
+
projectToken: projectToken ?? "",
|
|
60
|
+
taskToken,
|
|
61
|
+
projectId: args.projectId ?? process.env.CONVEYOR_PROJECT_ID
|
|
62
|
+
});
|
|
63
|
+
await conn.connect();
|
|
64
|
+
try {
|
|
65
|
+
const results = [];
|
|
66
|
+
for (const input of args.files.sort()) {
|
|
67
|
+
const path = resolve(input);
|
|
68
|
+
try {
|
|
69
|
+
const info = await stat(path);
|
|
70
|
+
if (!info.isFile()) throw new Error("not a file");
|
|
71
|
+
if (info.size > 25 * 1024 * 1024) throw new Error("asset exceeds 25MiB limit");
|
|
72
|
+
const bytes = await readFile(path);
|
|
73
|
+
if (bytes.length !== info.size || bytes.length > 25 * 1024 * 1024)
|
|
74
|
+
throw new Error("asset changed during read or exceeds 25MiB limit");
|
|
75
|
+
const sha256 = crypto.createHash("sha256").update(bytes).digest("hex");
|
|
76
|
+
const ext = extname(path).slice(1).toLowerCase();
|
|
77
|
+
const capability = await conn.requestSiteAssetUpload({
|
|
78
|
+
siteId: args.siteId,
|
|
79
|
+
sha256,
|
|
80
|
+
ext,
|
|
81
|
+
sizeBytes: bytes.length
|
|
82
|
+
});
|
|
83
|
+
const result = await transferSiteAsset(capability, new Uint8Array(bytes), {
|
|
84
|
+
key: capability.key,
|
|
85
|
+
publicUrl: capability.publicUrl,
|
|
86
|
+
sha256,
|
|
87
|
+
sizeBytes: bytes.length,
|
|
88
|
+
mimeType: capability.headers["content-type"]
|
|
89
|
+
});
|
|
90
|
+
results.push({ path, ...result });
|
|
91
|
+
} catch (error) {
|
|
92
|
+
results.push({ path, error: error instanceof Error ? error.message : "Upload failed" });
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
process.stdout.write(`${JSON.stringify({ results })}
|
|
96
|
+
`);
|
|
97
|
+
if (results.some((result) => "error" in result)) process.exitCode = 1;
|
|
98
|
+
} finally {
|
|
99
|
+
conn.disconnect();
|
|
100
|
+
}
|
package/dist/tunnel-cli.js
CHANGED
package/dist/tunnel.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as ActivePtySession, P as PtyAttachSnapshot, c as PtyDataChunk } from './connection-
|
|
1
|
+
import { A as ActivePtySession, P as PtyAttachSnapshot, c as PtyDataChunk } from './connection-Ctg-QM1s.js';
|
|
2
2
|
import 'socket.io-client';
|
|
3
3
|
import '@project/shared';
|
|
4
4
|
|
package/dist/wait-cli.js
CHANGED
package/dist/wait-runner.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as CardCollectionPage, a as CardCollectionDelta } from './connection-
|
|
1
|
+
import { C as CardCollectionPage, a as CardCollectionDelta } from './connection-Ctg-QM1s.js';
|
|
2
2
|
import { WaitFilter, WaitResult } from './wait.js';
|
|
3
3
|
import 'socket.io-client';
|
|
4
4
|
import '@project/shared';
|
package/dist/wait.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rallycry/conveyor-mcp",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.17",
|
|
4
4
|
"description": "Conveyor MCP server for Claude Code PM integration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude",
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"bin": {
|
|
13
13
|
"conveyor-mcp": "dist/cli.js",
|
|
14
|
+
"conveyor-site-assets": "dist/site-assets-cli.js",
|
|
14
15
|
"conveyor-tunnel": "dist/tunnel-cli.js",
|
|
15
16
|
"conveyor-wait": "dist/wait-cli.js"
|
|
16
17
|
},
|
|
@@ -35,7 +36,7 @@
|
|
|
35
36
|
"test:unit": "vitest run --passWithNoTests"
|
|
36
37
|
},
|
|
37
38
|
"dependencies": {
|
|
38
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
39
|
+
"@modelcontextprotocol/sdk": "^1.32.1",
|
|
39
40
|
"socket.io-client": "^4.8.4",
|
|
40
41
|
"ws": "8.22.0",
|
|
41
42
|
"zod": "^4.6.5"
|